From 630d4ffe4b5f6fbbcf3b17c3cd5c6712a886b92f Mon Sep 17 00:00:00 2001 From: Dohg678 <160362463+Dohg678@users.noreply.github.com> Date: Tue, 2 Jul 2024 18:10:37 +0100 Subject: [PATCH] bg tiles, new maps, save file fixed & much more --- README.md | 4 - REQUIREMENTS.md | 1 - data/gameplayloop.wav | 3 + data/images/bgtiles/stone/00.png | Bin 0 -> 100 bytes data/images/bgtiles/stone/01.png | Bin 0 -> 82 bytes data/images/bgtiles/stone/02.png | Bin 0 -> 101 bytes data/images/bgtiles/stone/03.png | Bin 0 -> 82 bytes data/images/bgtiles/stone/04.png | Bin 0 -> 94 bytes data/images/bgtiles/stone/05.png | Bin 0 -> 82 bytes data/images/bgtiles/stone/06.png | Bin 0 -> 94 bytes data/images/bgtiles/stone/07.png | Bin 0 -> 82 bytes data/images/bgtiles/stone/08.png | Bin 0 -> 82 bytes data/images/bgtiles/stone/09.png | Bin 0 -> 82 bytes data/images/bgtiles/stone/10.png | Bin 0 -> 82 bytes data/images/bgtiles/stone/11.png | Bin 0 -> 82 bytes data/images/bgtiles/stone/12.png | Bin 0 -> 82 bytes data/images/bgtiles/stone/13.png | Bin 0 -> 100 bytes data/images/bgtiles/stone/14.png | Bin 0 -> 82 bytes data/images/bgtiles/stone/15.png | Bin 0 -> 101 bytes data/images/bgtiles/stone/16.png | Bin 0 -> 82 bytes data/images/bgtiles/stone/17.png | Bin 0 -> 94 bytes data/images/bgtiles/stone/18.png | Bin 0 -> 82 bytes data/images/bgtiles/stone/19.png | Bin 0 -> 94 bytes data/images/bgtiles/stone/20.png | Bin 0 -> 82 bytes data/images/bgtiles/stone/21.png | Bin 0 -> 82 bytes data/images/bgtiles/stone/22.png | Bin 0 -> 82 bytes data/images/bgtiles/stone/23.png | Bin 0 -> 82 bytes data/images/bgtiles/stone/24.png | Bin 0 -> 82 bytes data/images/bgtiles/stone/25.png | Bin 0 -> 82 bytes data/images/bgtiles/stone/26.png | Bin 0 -> 82 bytes data/images/bgtiles/stone/27.png | Bin 0 -> 82 bytes data/images/bgtiles/stone/28.png | Bin 0 -> 82 bytes data/images/bgtiles/stone/29.png | Bin 0 -> 100 bytes data/images/bgtiles/stone/30.png | Bin 0 -> 101 bytes data/images/buttons/settings_bg.png | Bin 604 -> 1480 bytes data/images/fonts/small_font.png | Bin 687 -> 710 bytes data/maps/0.json | 2 +- data/maps/1.json | 2 +- data/maps/2.json | 2 +- data/saves/save.SAVEFILE | 2 +- data/saves/settings.SAVEFILE | 2 +- editor.py | 3 +- game.py | 169 +- game.pyx | 979 -- map.json | 1 - save.SAVEFILE | 1 - scripts/buttons.py | 2 +- scripts/editor_utils | 0 scripts/musicmanager.py | 4 +- scripts/player.py | 18 +- scripts/room-maps.py | 6 +- scripts/scriptscython/buttons.c | 8803 ----------------- .../buttons.pyx => scriptspy/buttons.py} | 2 +- scripts/scriptspy/clouds.py | 32 + scripts/scriptspy/entities.py | 344 + scripts/scriptspy/musicmanager.py | 147 + scripts/scriptspy/particle.py | 26 + scripts/scriptspy/player.py | 314 + scripts/scriptspy/room-maps.py | 7 + scripts/scriptspy/settings.py | 119 + scripts/scriptspy/sliders.py | 43 + scripts/scriptspy/spark.py | 26 + scripts/scriptspy/tilemap.py | 373 + scripts/scriptspy/utils.py | 170 + scripts/settings.py | 5 +- scripts/sliders.py | 2 +- scripts/tilemap.py | 2 +- scripts/utils.py | 11 +- settings.SAVEFILE | 1 - setup.py | 2 +- test2.mp3 | Bin 402284 -> 0 bytes 71 files changed, 1726 insertions(+), 9904 deletions(-) delete mode 100644 README.md delete mode 100644 REQUIREMENTS.md create mode 100644 data/gameplayloop.wav create mode 100644 data/images/bgtiles/stone/00.png create mode 100644 data/images/bgtiles/stone/01.png create mode 100644 data/images/bgtiles/stone/02.png create mode 100644 data/images/bgtiles/stone/03.png create mode 100644 data/images/bgtiles/stone/04.png create mode 100644 data/images/bgtiles/stone/05.png create mode 100644 data/images/bgtiles/stone/06.png create mode 100644 data/images/bgtiles/stone/07.png create mode 100644 data/images/bgtiles/stone/08.png create mode 100644 data/images/bgtiles/stone/09.png create mode 100644 data/images/bgtiles/stone/10.png create mode 100644 data/images/bgtiles/stone/11.png create mode 100644 data/images/bgtiles/stone/12.png create mode 100644 data/images/bgtiles/stone/13.png create mode 100644 data/images/bgtiles/stone/14.png create mode 100644 data/images/bgtiles/stone/15.png create mode 100644 data/images/bgtiles/stone/16.png create mode 100644 data/images/bgtiles/stone/17.png create mode 100644 data/images/bgtiles/stone/18.png create mode 100644 data/images/bgtiles/stone/19.png create mode 100644 data/images/bgtiles/stone/20.png create mode 100644 data/images/bgtiles/stone/21.png create mode 100644 data/images/bgtiles/stone/22.png create mode 100644 data/images/bgtiles/stone/23.png create mode 100644 data/images/bgtiles/stone/24.png create mode 100644 data/images/bgtiles/stone/25.png create mode 100644 data/images/bgtiles/stone/26.png create mode 100644 data/images/bgtiles/stone/27.png create mode 100644 data/images/bgtiles/stone/28.png create mode 100644 data/images/bgtiles/stone/29.png create mode 100644 data/images/bgtiles/stone/30.png delete mode 100644 game.pyx delete mode 100644 map.json delete mode 100644 save.SAVEFILE delete mode 100644 scripts/editor_utils delete mode 100644 scripts/scriptscython/buttons.c rename scripts/{scriptscython/buttons.pyx => scriptspy/buttons.py} (91%) create mode 100644 scripts/scriptspy/clouds.py create mode 100644 scripts/scriptspy/entities.py create mode 100644 scripts/scriptspy/musicmanager.py create mode 100644 scripts/scriptspy/particle.py create mode 100644 scripts/scriptspy/player.py create mode 100644 scripts/scriptspy/room-maps.py create mode 100644 scripts/scriptspy/settings.py create mode 100644 scripts/scriptspy/sliders.py create mode 100644 scripts/scriptspy/spark.py create mode 100644 scripts/scriptspy/tilemap.py create mode 100644 scripts/scriptspy/utils.py delete mode 100644 settings.SAVEFILE delete mode 100644 test2.mp3 diff --git a/README.md b/README.md deleted file mode 100644 index 05b70dd..0000000 --- a/README.md +++ /dev/null @@ -1,4 +0,0 @@ -Stable branch - for playtesters - -!!!!!**Current patch does not work with editor**!!!!! -`Do not clone` diff --git a/REQUIREMENTS.md b/REQUIREMENTS.md deleted file mode 100644 index 3c4bd9d..0000000 --- a/REQUIREMENTS.md +++ /dev/null @@ -1 +0,0 @@ -pygame-ce (pip install pygame-ce) diff --git a/data/gameplayloop.wav b/data/gameplayloop.wav new file mode 100644 index 0000000..bed88c5 --- /dev/null +++ b/data/gameplayloop.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1e636ed34668d6540b5b98dbd447e7a61f1bdcb63b143c761ef51f7576a71b5 +size 23292982 diff --git a/data/images/bgtiles/stone/00.png b/data/images/bgtiles/stone/00.png new file mode 100644 index 0000000000000000000000000000000000000000..500902bd33e0217ac1c441417f50f2c7726e2aef GIT binary patch literal 100 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|+MX_sAsQ2tQxZTRAjlw5fzM#l ul39(7jT2R_^6>EZsH~K`YOt!YONv4MFJnVZWB)&(HU>{uKbLh*2~7ZE78@!6 literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/01.png b/data/images/bgtiles/stone/01.png new file mode 100644 index 0000000000000000000000000000000000000000..5928a01d42d9e9254b43765f5bf38317abe12c7c GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lAbP(AsQ2tLxKzv6<7@>E~yGR fyrNBUDI>$2Muur|YX9B<6)||a`njxgN@xNAqs|m~ literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/02.png b/data/images/bgtiles/stone/02.png new file mode 100644 index 0000000000000000000000000000000000000000..98a25f21ed5addef7c54b166eb8027a7a93588ca GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|I-V|$AsQ2tLxKzv75MH{7qm4t yHgBEGSS;DOosr37Lt@C`6>P7v7#OlSS-6|xr(Fl?WAJqKb6Mw<&;$T-fEsiF literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/03.png b/data/images/bgtiles/stone/03.png new file mode 100644 index 0000000000000000000000000000000000000000..5928a01d42d9e9254b43765f5bf38317abe12c7c GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lAbP(AsQ2tLxKzv6<7@>E~yGR fyrNBUDI>$2Muur|YX9B<6)||a`njxgN@xNAqs|m~ literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/04.png b/data/images/bgtiles/stone/04.png new file mode 100644 index 0000000000000000000000000000000000000000..05f4bab6cbb70d9c5b42fa8976c32b37b7c9b697 GIT binary patch literal 94 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|s-7;6AsQ2tLxKzv6<7@>E~yGR ryrPZqa>4t9l0qhTstej08yOk2p0KWB`EG9k)WG2B>gTe~DWM4f;yW2` literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/05.png b/data/images/bgtiles/stone/05.png new file mode 100644 index 0000000000000000000000000000000000000000..5928a01d42d9e9254b43765f5bf38317abe12c7c GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lAbP(AsQ2tLxKzv6<7@>E~yGR fyrNBUDI>$2Muur|YX9B<6)||a`njxgN@xNAqs|m~ literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/06.png b/data/images/bgtiles/stone/06.png new file mode 100644 index 0000000000000000000000000000000000000000..18bf4c72505051bcf0d1d340dc19237093a8fd8a GIT binary patch literal 94 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|s-7;6AsQ2tLxKzv6<7@>E~yGR ryn;bP0l+XkKz&05z literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/07.png b/data/images/bgtiles/stone/07.png new file mode 100644 index 0000000000000000000000000000000000000000..5928a01d42d9e9254b43765f5bf38317abe12c7c GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lAbP(AsQ2tLxKzv6<7@>E~yGR fyrNBUDI>$2Muur|YX9B<6)||a`njxgN@xNAqs|m~ literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/08.png b/data/images/bgtiles/stone/08.png new file mode 100644 index 0000000000000000000000000000000000000000..5928a01d42d9e9254b43765f5bf38317abe12c7c GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lAbP(AsQ2tLxKzv6<7@>E~yGR fyrNBUDI>$2Muur|YX9B<6)||a`njxgN@xNAqs|m~ literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/09.png b/data/images/bgtiles/stone/09.png new file mode 100644 index 0000000000000000000000000000000000000000..5928a01d42d9e9254b43765f5bf38317abe12c7c GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lAbP(AsQ2tLxKzv6<7@>E~yGR fyrNBUDI>$2Muur|YX9B<6)||a`njxgN@xNAqs|m~ literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/10.png b/data/images/bgtiles/stone/10.png new file mode 100644 index 0000000000000000000000000000000000000000..5928a01d42d9e9254b43765f5bf38317abe12c7c GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lAbP(AsQ2tLxKzv6<7@>E~yGR fyrNBUDI>$2Muur|YX9B<6)||a`njxgN@xNAqs|m~ literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/11.png b/data/images/bgtiles/stone/11.png new file mode 100644 index 0000000000000000000000000000000000000000..5928a01d42d9e9254b43765f5bf38317abe12c7c GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lAbP(AsQ2tLxKzv6<7@>E~yGR fyrNBUDI>$2Muur|YX9B<6)||a`njxgN@xNAqs|m~ literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/12.png b/data/images/bgtiles/stone/12.png new file mode 100644 index 0000000000000000000000000000000000000000..5928a01d42d9e9254b43765f5bf38317abe12c7c GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lAbP(AsQ2tLxKzv6<7@>E~yGR fyrNBUDI>$2Muur|YX9B<6)||a`njxgN@xNAqs|m~ literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/13.png b/data/images/bgtiles/stone/13.png new file mode 100644 index 0000000000000000000000000000000000000000..500902bd33e0217ac1c441417f50f2c7726e2aef GIT binary patch literal 100 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|+MX_sAsQ2tQxZTRAjlw5fzM#l ul39(7jT2R_^6>EZsH~K`YOt!YONv4MFJnVZWB)&(HU>{uKbLh*2~7ZE78@!6 literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/14.png b/data/images/bgtiles/stone/14.png new file mode 100644 index 0000000000000000000000000000000000000000..5928a01d42d9e9254b43765f5bf38317abe12c7c GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lAbP(AsQ2tLxKzv6<7@>E~yGR fyrNBUDI>$2Muur|YX9B<6)||a`njxgN@xNAqs|m~ literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/15.png b/data/images/bgtiles/stone/15.png new file mode 100644 index 0000000000000000000000000000000000000000..98a25f21ed5addef7c54b166eb8027a7a93588ca GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|I-V|$AsQ2tLxKzv75MH{7qm4t yHgBEGSS;DOosr37Lt@C`6>P7v7#OlSS-6|xr(Fl?WAJqKb6Mw<&;$T-fEsiF literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/16.png b/data/images/bgtiles/stone/16.png new file mode 100644 index 0000000000000000000000000000000000000000..5928a01d42d9e9254b43765f5bf38317abe12c7c GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lAbP(AsQ2tLxKzv6<7@>E~yGR fyrNBUDI>$2Muur|YX9B<6)||a`njxgN@xNAqs|m~ literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/17.png b/data/images/bgtiles/stone/17.png new file mode 100644 index 0000000000000000000000000000000000000000..05f4bab6cbb70d9c5b42fa8976c32b37b7c9b697 GIT binary patch literal 94 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|s-7;6AsQ2tLxKzv6<7@>E~yGR ryrPZqa>4t9l0qhTstej08yOk2p0KWB`EG9k)WG2B>gTe~DWM4f;yW2` literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/18.png b/data/images/bgtiles/stone/18.png new file mode 100644 index 0000000000000000000000000000000000000000..5928a01d42d9e9254b43765f5bf38317abe12c7c GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lAbP(AsQ2tLxKzv6<7@>E~yGR fyrNBUDI>$2Muur|YX9B<6)||a`njxgN@xNAqs|m~ literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/19.png b/data/images/bgtiles/stone/19.png new file mode 100644 index 0000000000000000000000000000000000000000..18bf4c72505051bcf0d1d340dc19237093a8fd8a GIT binary patch literal 94 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|s-7;6AsQ2tLxKzv6<7@>E~yGR ryn;bP0l+XkKz&05z literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/20.png b/data/images/bgtiles/stone/20.png new file mode 100644 index 0000000000000000000000000000000000000000..5928a01d42d9e9254b43765f5bf38317abe12c7c GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lAbP(AsQ2tLxKzv6<7@>E~yGR fyrNBUDI>$2Muur|YX9B<6)||a`njxgN@xNAqs|m~ literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/21.png b/data/images/bgtiles/stone/21.png new file mode 100644 index 0000000000000000000000000000000000000000..5928a01d42d9e9254b43765f5bf38317abe12c7c GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lAbP(AsQ2tLxKzv6<7@>E~yGR fyrNBUDI>$2Muur|YX9B<6)||a`njxgN@xNAqs|m~ literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/22.png b/data/images/bgtiles/stone/22.png new file mode 100644 index 0000000000000000000000000000000000000000..5928a01d42d9e9254b43765f5bf38317abe12c7c GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lAbP(AsQ2tLxKzv6<7@>E~yGR fyrNBUDI>$2Muur|YX9B<6)||a`njxgN@xNAqs|m~ literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/23.png b/data/images/bgtiles/stone/23.png new file mode 100644 index 0000000000000000000000000000000000000000..5928a01d42d9e9254b43765f5bf38317abe12c7c GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lAbP(AsQ2tLxKzv6<7@>E~yGR fyrNBUDI>$2Muur|YX9B<6)||a`njxgN@xNAqs|m~ literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/24.png b/data/images/bgtiles/stone/24.png new file mode 100644 index 0000000000000000000000000000000000000000..5928a01d42d9e9254b43765f5bf38317abe12c7c GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lAbP(AsQ2tLxKzv6<7@>E~yGR fyrNBUDI>$2Muur|YX9B<6)||a`njxgN@xNAqs|m~ literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/25.png b/data/images/bgtiles/stone/25.png new file mode 100644 index 0000000000000000000000000000000000000000..5928a01d42d9e9254b43765f5bf38317abe12c7c GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lAbP(AsQ2tLxKzv6<7@>E~yGR fyrNBUDI>$2Muur|YX9B<6)||a`njxgN@xNAqs|m~ literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/26.png b/data/images/bgtiles/stone/26.png new file mode 100644 index 0000000000000000000000000000000000000000..5928a01d42d9e9254b43765f5bf38317abe12c7c GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lAbP(AsQ2tLxKzv6<7@>E~yGR fyrNBUDI>$2Muur|YX9B<6)||a`njxgN@xNAqs|m~ literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/27.png b/data/images/bgtiles/stone/27.png new file mode 100644 index 0000000000000000000000000000000000000000..5928a01d42d9e9254b43765f5bf38317abe12c7c GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lAbP(AsQ2tLxKzv6<7@>E~yGR fyrNBUDI>$2Muur|YX9B<6)||a`njxgN@xNAqs|m~ literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/28.png b/data/images/bgtiles/stone/28.png new file mode 100644 index 0000000000000000000000000000000000000000..5928a01d42d9e9254b43765f5bf38317abe12c7c GIT binary patch literal 82 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|lAbP(AsQ2tLxKzv6<7@>E~yGR fyrNBUDI>$2Muur|YX9B<6)||a`njxgN@xNAqs|m~ literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/29.png b/data/images/bgtiles/stone/29.png new file mode 100644 index 0000000000000000000000000000000000000000..500902bd33e0217ac1c441417f50f2c7726e2aef GIT binary patch literal 100 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|+MX_sAsQ2tQxZTRAjlw5fzM#l ul39(7jT2R_^6>EZsH~K`YOt!YONv4MFJnVZWB)&(HU>{uKbLh*2~7ZE78@!6 literal 0 HcmV?d00001 diff --git a/data/images/bgtiles/stone/30.png b/data/images/bgtiles/stone/30.png new file mode 100644 index 0000000000000000000000000000000000000000..98a25f21ed5addef7c54b166eb8027a7a93588ca GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|I-V|$AsQ2tLxKzv75MH{7qm4t yHgBEGSS;DOosr37Lt@C`6>P7v7#OlSS-6|xr(Fl?WAJqKb6Mw<&;$T-fEsiF literal 0 HcmV?d00001 diff --git a/data/images/buttons/settings_bg.png b/data/images/buttons/settings_bg.png index 3b4723db187d3b65d984cb24f2bcc8f151c2c399..90604ef10d4ce178028fb20428f1e0d575f4d43b 100644 GIT binary patch literal 1480 zcmeAS@N?(olHy`uVBq!ia0y~yU}|7sV9elP0*ZJ9++|~6VD0yGaSW-L^Y*GCBZC6Z z0fV;si^Y!oLacwSiWwTN=gBfK*c&AG%zwd9B5!vNI1YC sU@$5@8Z4v9VKf_zmJSq`iV2KY9y49kaT41BETI`ZUHx3vIVCg!08>}?OaK4? literal 604 zcmeAS@N?(olHy`uVBq!ia0y~yU~~Yow{S24$*i^{HwFeKWltB!kcv5PFB|eQ81Nj} zQ2NJl`r&z+lX?~W)A#~P>)9FJ^YA3HwHYuw&uCOUb3h<1fy3CKMN;C>sPM=LlMSqO X;*6QM)Nk?tQw@WstDnm{r-UW|x+k=N diff --git a/data/images/fonts/small_font.png b/data/images/fonts/small_font.png index 14e4a57894daabc1d5cf1cc65174f2ed5d68e7a5..70ea18bcf770025631ec6ae5a757b96a6b731a36 100644 GIT binary patch delta 686 zcmV;f0#W_11;z!CB!7)bL_t(&f$dm9a>FnPMESU%t{yt-5V{MC9H*HkTx=NxD+B`B zrlaFHe%{S&9>+1wEakKL*?8&Pl{YhJAK|LjvBqcl3?~|^atudYzaK~bdS~Y(dF1z- znb{b_JdH8zTc6pS)5aKgGM>N2k)MsDt?a3gpA&J#b)b12{u!J*6n!`6yjvrpO2+fi z{$}(2_X-EIm)VK39X_)2jHj|EJB0Ek?h}$<-?O}9He!rt_7NVIiwY^eM0tl|i|Nng zZiu&I$La~Zi5FUSk`=_cqBUCuO-6~JfI#>aGR)0=Zgo-TUdqOdNyB6k$D(Y_J zBMzM_g7~U})v851FmA`-3PRycs}PnhT=N~EQZ&(?AsiKDF>m&{CjX+YgZ~>T9VhUTdq-cX{)zOCzG4&`gIDp*7r++C UiF$|=AOHXW07*qoM6N<$g8Kwv2LJ#7 delta 663 zcmV;I0%-ll1+N8=B!6~EL_t(&f$dn)a>F1DbMxc<^z5bVm?qgWNxEKF-SrY`V+(9B zB=(4X{ON|eb7NSkY{W zI%}+(TYnC>joq{H-rj8^iR@dBvKI|~_nB4PA>To+`lAhJ94y#u-W 30: self.hascheckpoint = 0 - self.level = min(self.level + 1, len(os.listdir('data/maps')) - 1) + self.level = min(self.level + 1, len(os.listdir('data/maps')) - 2) self.FM.savefile("save") self.load_level(self.level) @@ -585,7 +586,7 @@ def run(self): self.pause_button_rect = pygame.Rect(0, 0, 16, 16) self.mpos_r.x = mpos[0] self.mpos_r.y = mpos[1] - + print(self.respawnpoint) for event in pygame.event.get(): if event.type == pygame.QUIT: self.FM.savefile("save") @@ -608,17 +609,6 @@ def run(self): self.volume = max(self.volume - 5, 0) if event.key == pygame.K_EQUALS: self.volume = min(self.volume + 5, 100) - if event.key == pygame.K_v: - self.MM.fadebetween(musicid2='base', timeinms=1000, goalvolumeout=0.0, goalvolumein=1.0) - if event.key == pygame.K_i: - self.ab = 10 - if event.key == pygame.K_o: - self.ab = 60 - if event.key == pygame.K_c: - if self.camera == "locked": - self.camera = "free" - else: - self.camera = "locked" if event.key == self.keybinds['menu']: self.FM.savefile("save") self.menu = 'main' @@ -665,9 +655,9 @@ def run(self): self.display_2.blit(self.display, (0, 0)) - self.fonts['small'].render(self.display_2, 'level ' + str(self.level + 1), [0, 8], [1, 1], (255, 255, 255)) - self.fonts['small'].render(self.display_2, str(round(self.clock.get_fps())) + 'fps', [0, 16], [1, 1], (255, 255, 255)) - self.fonts['small'].render(self.display_2, 'dt:' + str(self.dt), [0, 24], [1, 1], (255, 255, 255)) + self.fonts['small'].render(self.display_2, 'level ' + str(self.level + 1), [0, 8], [1, 1]) + self.fonts['small'].render(self.display_2, str(round(self.clock.get_fps())) + 'fps', [0, 16], [1, 1]) + #self.fonts['small'].render(self.display_2, 'dt:' + str(self.dt), [0, 24], [1, 1]) self.display_2.blit(self.assets['pause'], (0, 0)) screenshake_offset = (random.random() * self.screenshake - self.screenshake / 2, random.random() * self.screenshake - self.screenshake / 2) @@ -675,8 +665,7 @@ def run(self): #self.screen.blit(pygame.transform.gaussian_blur(self.display_2, 5), (0, 0)) pygame.display.update() - self.clock.tick(6000) - + self.dt = self.clock.tick(60) / 10 @@ -713,7 +702,7 @@ def mainmenu(self): self.display.fill((0, 0, 0, 0)) - self.display_3.blit(pygame.transform.gaussian_blur(self.assets['menubackground'], 5), (0, 0)) + self.display_3.blit(self.assets['menubackground'], (0, 0)) self.MM.update() @@ -763,18 +752,19 @@ def mainmenu(self): self.menu = 'play' self.run() self.iterations = 0 - if event.key == pygame.K_f: - self.isfullscreen = not self.isfullscreen - if self.isfullscreen: - self.disable_fullscreen_polling = True - self.screen = pygame.display.set_mode(self.monitor_size, pygame.FULLSCREEN) - else: - self.screen = pygame.display.set_mode(self.base_screen_size, pygame.RESIZABLE) - self.disable_fullscreen_polling = False - if event.key == pygame.K_d: - self.save_curr = self.FM.savefile("clear") - self.respawnpoint = self.save_curr["checkpoint"] - self.level = self.save_curr["level"] + if event.key == pygame.K_f: + self.isfullscreen = not self.isfullscreen + if self.isfullscreen: + self.disable_fullscreen_polling = True + self.screen = pygame.display.set_mode(self.monitor_size, pygame.FULLSCREEN) + else: + self.screen = pygame.display.set_mode(self.base_screen_size, pygame.RESIZABLE) + self.disable_fullscreen_polling = False + if event.key == pygame.K_d: + print("clearing") + self.level = 0 + self.respawnpoint = [0, 0] + self.FM.savefile("clear") if event.type == pygame.VIDEORESIZE: if self.isfullscreen == False: if self.disable_fullscreen_polling == False: @@ -808,12 +798,12 @@ def mainmenu(self): #self.display_3.blit(self.assets['settings'], (128,136)) if self.col_loop: - self.fonts['small'].render(self.display_3, 'START', (131, 107), scale=[3, 3], colour=(15, 225, 200)) + self.fonts['small'].render(self.display_3, 'START', (131, 107), scale=[3, 3]) else: - self.fonts['small'].render(self.display_3, 'START', (131, 107), scale=[3, 3], colour=(200, 200, 15)) + self.fonts['small'].render(self.display_3, 'START', (131, 107), scale=[3, 3]) - self.fonts['small'].render(self.display_3, 'SETTINGS', (133, 148), scale=[1.75, 1.75], colour=(255, 255, 255)) + self.fonts['small'].render(self.display_3, 'SETTINGS', (133, 148), scale=[1.75, 1.75]) self.screen.blit(pygame.transform.scale(self.display_3, self.screen.get_size()), (0, 0)) self.col_loop = not self.col_loop @@ -834,7 +824,7 @@ def settingsmenu(self): self.display.fill((0, 0, 0, 0)) - self.display_3.blit(pygame.transform.gaussian_blur(self.assets['menubackground'], 5), (0, 0)) + self.display_3.blit(self.assets['menubackground'], (0, 0)) @@ -849,7 +839,10 @@ def settingsmenu(self): breakable.render(self.display_3, (math.floor(mpos[0] / 20 + 64), math.floor(mpos[1] / 20 - 25))) if kill: self.breakable.remove(breakable) - + + for layer in self.tilemap.tilemap: + self.tilemap.render(self.display_3, layer, (math.floor(mpos[0] / 20 + 64), math.floor(mpos[1] / 20 - 25))) + display_mask = pygame.mask.from_surface(self.display) display_sillhouette = display_mask.to_surface(setcolor=(0, 0, 0, 180), unsetcolor=(0, 0, 0, 0)) for offset in [(-1, 0), (1, 0), (0, -1), (0, 1)]: @@ -863,36 +856,38 @@ def settingsmenu(self): if event.type == pygame.MOUSEBUTTONDOWN: self.settingsmanager.mousedown = True - if self.menu == 'settings': + collisions = self.mpos_r.colliderect(self.return_rect) - if self.settings == 'mainpage': - pass - - elif self.settings == 'screensize': - for button in self.resolution_options: - action = self.resolution_options[button].update(self.mpos_r) - if action: - self.screen = pygame.display.set_mode(self.resolution_options[button].action, pygame.RESIZABLE, vsync=0) + if collisions: + self.settings = self.settingsmanager.return_heirarchy[self.settings] + + if self.settings == 'mainmenu': + self.settings = 'mainpage' + self.menu = 'main' + self.mainmenu() + + elif self.settings == 'screensize': + for button in self.settingsmanager.resolution_options: + action = self.settingsmanager.resolution_options[button].update(self.mpos_r) + if action: + self.screen = pygame.display.set_mode(self.settingsmanager.resolution_options[button].action, pygame.RESIZABLE, vsync=0) + + - if self.settings == 'keybinds': - collisions = self.mpos_r.colliderect(self.return_rect) + elif self.settings == 'keybinds': + + for i in range(0, len(self.key_rects)): + collisions = self.mpos_r.colliderect(self.key_rects[i]) if collisions: - self.settings = 'mainpage' + if self.keybindingname[i] == 'RESTORE DEFAULTS': + self.keybinds = self.keybind_defaults.copy() + self.keybindingvalue = self.keybindingvaluedefault.copy() + else: + self.key_to_change = self.keybindingname[i] + self.valtoset = i + self.settings = 'changekey' - for i in range(0, len(self.key_rects)): - collisions = self.mpos_r.colliderect(self.key_rects[i]) - if collisions: - if self.keybindingname[i] == 'RESTORE DEFAULTS': - self.keybinds = self.keybind_defaults.copy() - self.keybindingvalue = self.keybindingvaluedefault.copy() - else: - self.key_to_change = self.keybindingname[i] - self.valtoset = i - self.settings = 'changekey' - collisions = self.mpos_r.colliderect(self.return_rect) - if collisions: - self.settings = self.return_heirarchy[self.settings] if event.type == pygame.MOUSEBUTTONUP: self.settingsmanager.mousedown = False @@ -911,10 +906,12 @@ def settingsmenu(self): self.torender = pygame.key.name(event.key) self.torender = self.torender.upper() self.keybindingvalue[self.valtoset] = self.torender + + if self.settingsmanager.mousedown == True: + if self.settings == 'soundsliders': + self.settingsmanager.sounds_update() size = self.screen.get_size() size = [math.floor(size[0] * 0.40), math.floor(size[1] * 0.40)] - for layer in self.tilemap.tilemap: - self.tilemap.render(self.display_3, layer, (math.floor(mpos[0] / 20 + 64), math.floor(mpos[1] / 20 - 25))) self.assets['settingsbg'].set_alpha(self.bg_transition) @@ -938,19 +935,19 @@ def settingsmenu(self): self.settingsmanager.main(self.display_3) - #self.keybinding_rect = self.fonts['small'].render(self.display_3, 'KEY BINDINGS', (20, 20), scale=[3, 3], colour=(255, 225, 255)) + #self.keybinding_rect = self.fonts['small'].render(self.display_3, 'KEY BINDINGS', (20, 20), scale=[3, 3]) if self.settings == 'soundsliders': - self.settingsmanager.sounds_update() + self.settingsmanager.sounds(self.display_3) elif self.settings == 'keybinds': - self.keybinding_rect = self.fonts['big'].render(self.display_3, '- KEYBINDINGS', (20, 16), scale=[1, 1], colour=(255, 225, 255)) + self.keybinding_rect = self.fonts['big'].render(self.display_3, '- KEYBINDINGS', (20, 16), scale=[1, 1]) self.key_rects = [] for key in range(0, len(self.keybindingname)): - self.key_rects.append(self.fonts['small'].render(self.display_3, self.keybindingname[key], (20, 28 + (key*16)), scale=[2, 2], colour=(255, 225, 255))) + self.key_rects.append(self.fonts['small'].render(self.display_3, self.keybindingname[key], (20, 28 + (key*16)), scale=[2, 2])) - self.fonts['small'].render(self.display_3, self.keybindingvalue[key], (180, 28 + (key*16)), scale=[2, 2], colour=(255, 225, 255)) + self.fonts['small'].render(self.display_3, self.keybindingvalue[key], (180, 28 + (key*16)), scale=[2, 2]) @@ -958,18 +955,18 @@ def settingsmenu(self): elif self.settings == 'changekey': self.display_3.blit(self.assets['settingsbg'], (0, 0)) - self.key_rects.append(self.fonts['small'].render(self.display_3, 'set ' + self.key_to_change.lower() + ' key to', (120, 70), scale=[2, 2], colour=(255, 225, 255))) - self.key_rects.append(self.fonts['small'].render(self.display_3, self.torender, (160, 90), scale=[2, 2], colour=(255, 225, 255))) - self.key_rects.append(self.fonts['small'].render(self.display_3, 'PRESS ENTER TO CONFIRM', (80, 110), scale=[2, 2], colour=(255, 225, 255))) + self.key_rects.append(self.fonts['small'].render(self.display_3, 'set ' + self.key_to_change.lower() + ' key to', (120, 70), scale=[2, 2])) + self.key_rects.append(self.fonts['small'].render(self.display_3, self.torender, (160, 90), scale=[2, 2])) + self.key_rects.append(self.fonts['small'].render(self.display_3, 'PRESS ENTER TO CONFIRM', (80, 110), scale=[2, 2])) elif self.settings == 'screensize': - for button in self.resolution_options: - self.resolution_options[button].render(self.display_3, self.fonts['small']) + for button in self.settingsmanager.resolution_options: + self.settingsmanager.resolution_options[button].render(self.display_3, self.fonts['small']) self.display_3.blit(self.assets['return'], (4, 4)) - + self.fonts['small'].render(self.display_3, str(round(self.clock.get_fps())) + 'fps', [0, 16], [1, 1]) self.screen.blit(pygame.transform.scale(self.display_3, self.screen.get_size()), (0, 0)) pygame.display.update() diff --git a/game.pyx b/game.pyx deleted file mode 100644 index 43185a2..0000000 --- a/game.pyx +++ /dev/null @@ -1,979 +0,0 @@ -#!/usr/bin/env python -import os -import sys -import math -import random -import time -import pygame -import cProfile -import cython - -from scripts.utils import load_image, load_images, Animation, Font, fontcolour, clip, FileManager -from scripts.entities import PhysicsEntity, Enemy, Breakable, Shard, Enemydead -from scripts.player import Player -from scripts.sliders import Slider -from scripts.buttons import Button -from scripts.settings import Settings -from scripts.musicmanager import MusicManager, SoundSource -from scripts.tilemap import Tilemap -from scripts.clouds import Clouds -from scripts.particle import Particle -from scripts.spark import Spark - -#math circles - -class Game: - def __init__(self): - self.FM = FileManager(self) - try: - self.settings_vals = self.FM.settings("dump") - except: - self.settings_vals = {'keybinds': {'left': pygame.K_LEFT,'right': pygame.K_RIGHT,'jump': pygame.K_UP,'down': pygame.K_DOWN,'dash': pygame.K_x,'menu': pygame.K_m,'respawn': pygame.K_r,'restore defaults': 'the gloop'}, 'window_size': [960, 540]} - self.window_size = self.settings_vals['window_size'] - self.ab = 60 - pygame.mixer.quit() - pygame.mixer.pre_init(44100, -16, 2, 0) # setup mixer to avoid sound lag - pygame.init() #initialize pygame - pygame.mixer.init() - pygame.mixer.set_num_channels(64) - print('initiated') - self.base_screen_size = [960, 540] - self.monitor_size = [pygame.display.Info().current_w, pygame.display.Info().current_h] - pygame.display.set_caption('holyguacamole') - try: - self.screen = pygame.display.set_mode(self.window_size, pygame.RESIZABLE, vsync=0) - except: - self.screen = pygame.display.set_mode((960, 540), pygame.RESIZABLE, vsync=0) - - self.display = pygame.Surface((640, 360), pygame.SRCALPHA)#480, 270 - 320, 180 - self.display_2 = pygame.Surface((640, 360)) #320, 180 | 640, 360 - self.display_3 = pygame.Surface((640, 360)) - self.window_size = pygame.display.get_window_size() - - - self.clock = pygame.time.Clock() - self.menu = "main" - self.movement = [False, False] - - self.assets = { - 'killbricks': load_images('tiles/killbricks'), - 'base': load_images('tiles/base_demo_tiles'), - 'kill': load_images('tiles/kill'), - 'bouncepad': load_images('tiles/bounce_pad'), - 'cameratr': load_images('tiles/invis/camera'), - 'ice': load_images('tiles/ice'), - 'tutorial': load_images('tiles/tut'), - 'decor': load_images('tiles/decor'), - 'checkpoint': load_images('tiles/checkpoint'), - 'breakable': load_image('entities/Breakables/idle/0.png'), - 'breakable/idle': Animation(load_images('entities/Breakables/idle'), img_dur=6), - 'grass': load_images('tiles/grass'), - 'large_decor': load_images('tiles/large_decor'), - 'stone': load_images('tiles/stone'), - 'player': load_image('entities/player.png'), - 'background': load_image('bg.png'), - 'grassicon': load_image('icons/grass_icon.png'), - 'transition_twirl': load_image('transitions/twirl_transition.png'), - 'menubackground': load_image('bg.png'), - 'testbutton': load_image('buttons/buttons.png'), - 'settings': load_image('buttons/settings.png'), - 'settingsbg': load_image('buttons/settings_bg.png'), - 'pausebg': load_image('buttons/settings_bg.png'), - 'pause': load_image('buttons/pause.png'), - 'return': load_image('buttons/return.png'), - 'into_fullscreen': load_image('buttons/into_fullscreen.png'), - 'exit_fullscreen': load_image('buttons/outof_fullscreen.png'), - 'clouds': load_images('clouds'), - 'overlay': load_image('overlay.png'), - 'settings_tile_scroll': load_image('buttons/tile_scroll.png'), - 'settings_tile_scroll_rev': load_image('buttons/tile_scroll_rev.png'), - 'enemy/idle': Animation(load_images('entities/enemy/idle'), img_dur=6), - 'enemy/run': Animation(load_images('entities/enemy/run'), img_dur=4), - 'checkpoint/idle': Animation(load_images('entities/checkpoint/idleoff'), img_dur=6), - 'checkpoint/idleon': Animation(load_images('entities/checkpoint/idleon'), img_dur=6), - 'checkpoint/turnon': Animation(load_images('entities/checkpoint/turnon'), img_dur=120, loop =False), - 'player/idle': Animation(load_images('entities/player/idle'), img_dur=6), - 'player/run': Animation(load_images('entities/player/run'), img_dur=4), - 'player/jump': Animation(load_images('entities/player/jump')), - 'player/slide': Animation(load_images('entities/player/slide')), - 'player/wall_slide': Animation(load_images('entities/player/wall_slide')), - 'particle/leaf': Animation(load_images('particles/leaf'), img_dur=20, loop=False), - 'particle/hit': Animation(load_images('particles/hit'), img_dur=10, loop=False), - 'particle/walkdust': Animation(load_images('particles/walkdust'), img_dur=6, loop=False), - 'particle/impactdust': Animation(load_images('particles/walk'), img_dur=6, loop=False), - 'particle/particle': Animation(load_images('particles/particle'), img_dur=6, loop=False), - 'breakablea/idle': Animation(load_images('particles/Breakables/a/idle'), img_dur=120, loop=False), - 'breakableb/idle': Animation(load_images('particles/Breakables/b/idle'), img_dur=120, loop=False), - 'breakablec/idle': Animation(load_images('particles/Breakables/c/idle'), img_dur=120, loop=False), - 'deada/idle': Animation(load_images('particles/enemydeath/a/idle'), img_dur=15, loop=False), - 'deadb/idle': Animation(load_images('particles/enemydeath/b/idle'), img_dur=15, loop=False), - 'deadc/idle': Animation(load_images('particles/enemydeath/c/idle'), img_dur=15, loop=False), - 'kill0/idle': Animation(load_images('entities/kill/0/idle'), img_dur=120, loop=True), - 'kill1/idle': Animation(load_images('entities/kill/1/idle'), img_dur=120, loop=True), - 'kill2/idle': Animation(load_images('entities/kill/2/idle'), img_dur=120, loop=True), - 'kill3/idle': Animation(load_images('entities/kill/3/idle'), img_dur=120, loop=True), - 'gun': load_image('gun.png'), - 'projectile': load_image('projectile.png'), - } - - self.assets['overlay'].set_alpha(100) - self.icon = pygame.display.set_icon(self.assets['grassicon']) - - self.fonts = { - 'small': Font('small_font.png'), - 'big': Font('large_font.png'), - } - - self.keybinding_rect = self.fonts['big'].render(self.screen, '--- ', (460, 250), scale=[10, 10], colour=(255, 225, 255)) - pygame.display.update() - - self.sfx = { - 'jump': pygame.mixer.Sound('data/sfx/jump.wav'), - 'dash': pygame.mixer.Sound('data/sfx/dash.wav'), - 'hit': pygame.mixer.Sound('data/sfx/hit.wav'), - 'shoot': pygame.mixer.Sound('data/sfx/shoot.wav'), - 'spring': pygame.mixer.Sound('data/sfx/spring.wav'), - 'ambience': pygame.mixer.Sound('data/sfx/ambience.wav'), - } - - self.music = { - 'base' : pygame.mixer.Sound('data/music.wav') - } - self.music['base'].set_volume(0.5) - - self.keybinding_rect = self.fonts['big'].render(self.screen, '---- ', (460, 250), scale=[10, 10], colour=(255, 225, 255)) - pygame.display.update() - - self.sfx['ambience'].set_volume(0.2) - self.sfx['shoot'].set_volume(0.4) - self.sfx['hit'].set_volume(0.8) - self.sfx['dash'].set_volume(0.3) - self.sfx['jump'].set_volume(0.7) - - self.settingsmanager = Settings(self) - - - self.return_heirarchy = { - 'mainpage': 'mainpage', - 'keybinds': 'mainpage', - 'soundsliders': 'mainpage', - 'changekey': 'keybinds', - 'screensize': 'mainpage', - } - - try: - self.keybinds = self.settings_vals['keybinds'] - except: - self.keybinds = { - 'left': pygame.K_LEFT, - 'right': pygame.K_RIGHT, - 'jump': pygame.K_z, - 'down': pygame.K_DOWN, - 'dash': pygame.K_x, - 'menu': pygame.K_m, - 'respawn': pygame.K_r, - 'restore defaults': 'the gloop' - } - self.keybind_defaults = { - 'left': pygame.K_LEFT, - 'right': pygame.K_RIGHT, - 'jump': pygame.K_UP, - 'down': pygame.K_DOWN, - 'dash': pygame.K_x, - 'menu': pygame.K_m, - 'respawn': pygame.K_r, - 'restore defaults': 'the gloop' - } - try: - self.keybindingvalue = self.settingsval['keybindingvalue'] - except: - self.keybindingvalue = ['LEFT', 'RIGHT', 'Z', 'X', 'M', 'R', ''] - - - self.keybindingname = ['LEFT', 'RIGHT', 'JUMP', 'DASH', 'MENU', 'RESPAWN', 'RESTORE DEFAULTS'] - - self.keybindingvaluedefault = ['LEFT', 'RIGHT', 'Z', 'X', 'M', 'R', ''] - - self.col_loop = True - self.clouds = Clouds(self.assets['clouds'], count=16) - self.camera = "free" - self.camera_checks = 0 - self.camera_pos = [50, 50] - self.player = Player(self, (50, 50), (8, 15)) - self.jumpbuf = 0 - self.coyote = 0 - self.dt = 0 - self.tilemap = Tilemap(self, tile_size=16) - self.layers = ['rooms', 'fgscaled', 'fg', 'mg', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'invis'] - self.MM = MusicManager(self) - self.volume = 100 - self.settings = 'mainpage' - self.reload_enemies = [] - - self.save_curr = self.FM.savefile("dump") - self.respawnpoint = self.save_curr['checkpoint'] - if self.respawnpoint == [0, 0]: - self.hascheckpoint = 0 - else: - self.hascheckpoint = 1 - self.level = self.save_curr['level'] - self.load_level(self.level) - self.render_scroll = [0, 0] - - self.checkpointscollected = [] - self.isfullscreen = False - self.disable_fullscreen_polling = False - self.screenshake = 0 - self.freezefr = 0 - mpos = [0, 0] - self.isrenderhb = False - self.mpos_r = pygame.Rect(mpos[1], mpos[0], 5, 5) - - self.settings = 'mainpage' - self.keybinding_rect = self.fonts['big'].render(self.screen, '-----', (460, 250), scale=[10, 10], colour=(255, 225, 255)) - - pygame.display.update() - - self.start_button_rect = pygame.Rect(128, 100, 64, 32) - self.settings_rect = pygame.Rect(128, 136, 64, 32) - self.return_rect = pygame.Rect(4, 4, 16, 16) - self.last_time = time.time() - - def load_level(self, map_id): - self.tilemap.load('data/maps/' + str(map_id) + '.json') - self.tilemap.randomisetiles() - self.leaf_spawners = [] - - for tree in self.tilemap.extract([('large_decor', 2)], keep=True): - self.leaf_spawners.append(pygame.Rect(4 + tree['pos'][0], 4 + tree['pos'][1], 23, 13)) - - - - self.enemies = [] - for spawner in self.tilemap.extract([('spawners', 0), ('spawners', 1)]): - if spawner['variant'] == 0: - if self.hascheckpoint == 1: - self.player.pos = self.respawnpoint.copy() - else: - self.player.pos = spawner['pos'] - self.respawnpoint = self.player.pos - self.player.air_time = 0 - self.player.air_time = 0 - else: - self.enemies.append(Enemy(self, spawner['pos'], (8, 15))) - self.reload_enemies = self.enemies.copy() - - self.breakable = [] - for breakable in self.tilemap.extract([('breakables', 0)]): - self.breakable.append(Breakable(self, breakable['pos'], (13, 13))) - - - self.player.velocity = [0, 0] - self.shards = [] - self.projectiles = [] - self.particles = [] - self.sparks = [] - self.checkpointscollected = [] - - - self.scroll = [0, 0] - self.death = [] - self.dead = 0 - self.hascheckpoint = 0 - self.transition = -30 - - def reload_level(self, map_id): - self.tilemap.load('data/maps/' + str(map_id) + '.json') - self.tilemap.randomisetiles() - - self.leaf_spawners = [] - for tree in self.tilemap.extract([('large_decor', 2)], keep=True): - self.leaf_spawners.append(pygame.Rect(4 + tree['pos'][0], 4 + tree['pos'][1], 23, 13)) - - - self.enemies = self.reload_enemies.copy() - for spawner in self.tilemap.extract([('spawners', 0), ('spawners', 1)]): - if spawner['variant'] == 0: - if self.hascheckpoint == 1: - self.player.pos = self.respawnpoint.copy() - else: - self.player.pos = spawner['pos'] - self.player.air_time = 0 - - self.breakable = [] - for breakable in self.tilemap.extract([('breakables', 0)]): - self.breakable.append(Breakable(self, breakable['pos'], (13, 13))) - - self.shards = [] - self.death = [] - self.projectiles = [] - self.particles = [] - self.sparks = [] - - self.scroll = [0, 0] - self.player.velocity = [0, 0] - self.dead = 0 - self.transition = -30 - - def load_bglevel(self, map_id): - self.tilemap.load('data/bgmaps/' + str(map_id) + '.json') - - self.leaf_spawners = [] - for tree in self.tilemap.extract([('large_decor', 2)], keep=True): - self.leaf_spawners.append(pygame.Rect(4 + tree['pos'][0], 4 + tree['pos'][1], 23, 13)) - - - self.enemies = [] - for spawner in self.tilemap.extract([('spawners', 0), ('spawners', 1)]): - if spawner['variant'] == 0: - self.player.pos = spawner['pos'] - self.player.air_time = 0 - else: - self.enemies.append(Enemy(self, spawner['pos'], (8, 15))) - - self.breakable = [] - for breakable in self.tilemap.extract([('breakables', 0)]): - self.breakable.append(Breakable(self, breakable['pos'], (13, 13))) - self.projectiles = [] - self.particles = [] - self.sparks = [] - - self.scroll = [0, 0] - self.dead = 1 - self.transition = -30 - - def update_all(self, render_scroll): - self.clouds.update() - - - - for breakable in self.breakable.copy(): - kill = breakable.update(self.tilemap, (0, 0)) - breakable.render(self.display, offset=render_scroll) - if kill: - self.breakable.remove(breakable) - for i in range(0, random.randint(1, 10)): - self.shards.append(Shard(self, breakable.pos, (8, 15))) - - - for shard in self.shards.copy(): - kill = shard.update(self.tilemap, (0, 0)) - if kill: - self.shards.remove(shard) - - for enemy in self.enemies.copy(): - kill = enemy.update(self.tilemap, (0, 0)) - if kill: - self.enemies.remove(enemy) - self.death.append(Enemydead(self, enemy.pos, (8, 15))) - self.freezefr = 20 - - for death in self.death.copy(): - kill = death.update(self.tilemap, (0, 0)) - if kill: - self.death.remove(death) - - - - if not self.dead: - self.player.update(self.tilemap, (((self.movement[1] - self.movement[0])) * self.dt, 0)) - - kill = self.player.kill_check(self.tilemap) - if kill: - self.dead += 1 - self.sfx['hit'].play() - self.screenshake = max(32, self.screenshake) - for i in range(30): - angle = random.random() * math.pi * 2 - speed = random.random() * 5 - self.sparks.append(Spark(self.player.rect().center, angle, 2 + random.random())) - self.particles.append(Particle(self, 'particle', self.player.rect().center, velocity=[math.cos(angle + math.pi) * speed * 0.5, math.sin(angle + math.pi) * speed * 0.5], frame=random.randint(0, 7))) - if self.player.cameratrcollisions == True: - self.camera = "locked" - # [[x, y], direction, timer] - - for projectile in self.projectiles.copy(): - projectile[0][0] += projectile[1] - projectile[2] += 1 - if self.tilemap.solid_check(projectile[0]): - self.projectiles.remove(projectile) - for i in range(4): - self.sparks.append(Spark(projectile[0], random.random() - 0.5 + (math.pi if projectile[1] > 0 else 0), 2 + random.random())) - elif projectile[2] > 360: - self.projectiles.remove(projectile) - elif abs(self.player.dashing) < 50: - if self.player.rect().collidepoint(projectile[0]): - self.projectiles.remove(projectile) - self.dead += 1 - self.sfx['hit'].play() - self.screenshake = max(32, self.screenshake) - for i in range(30): - angle = random.random() * math.pi * 2 - speed = random.random() * 5 - self.sparks.append(Spark(self.player.rect().center, angle, 2 + random.random())) - self.particles.append(Particle(self, 'particle', self.player.rect().center, velocity=[math.cos(angle + math.pi) * speed * 0.5, math.sin(angle + math.pi) * speed * 0.5], frame=random.randint(0, 7))) - - - - if self.freezefr % 5 == 0: - for spark in self.sparks.copy(): - kill = spark.update() - if kill: - self.sparks.remove(spark) - - - - for particle in self.particles.copy(): - kill = particle.update() - if particle.type == 'leaf': - particle.pos[0] += math.sin(particle.animation.frame * 0.035) * 0.3 - if kill: - self.particles.remove(particle) - - - - self.MM.update() - - - def render_all(self, render_scroll): - self.clouds.render(self.display_2, offset=render_scroll) - - for layer in self.tilemap.tilemap: - if layer != 'invis': - self.tilemap.render(self.display, layer, offset=render_scroll) - - for breakable in self.breakable.copy(): - breakable.render(self.display, offset=render_scroll) - - for shard in self.shards.copy(): - shard.render(self.display, offset=render_scroll) - - for enemy in self.enemies.copy(): - enemy.render(self.display, offset=render_scroll) - - for death in self.death.copy(): - death.render(self.display, offset=render_scroll) - - - - if not self.dead: - self.player.render(self.display, offset=render_scroll) - # [[x, y], direction, timer] - - for projectile in self.projectiles.copy(): - img = self.assets['projectile'] - self.display.blit(img, (projectile[0][0] - img.get_width() / 2 - render_scroll[0], projectile[0][1] - img.get_height() / 2 - render_scroll[1])) - - - - if self.freezefr % 5 == 0: - for spark in self.sparks.copy(): - spark.render(self.display, offset=render_scroll) - - - for particle in self.particles.copy(): - particle.render(self.display, offset=render_scroll) - - display_mask = pygame.mask.from_surface(self.display) - display_sillhouette = display_mask.to_surface(setcolor=(0, 0, 0, 255), unsetcolor=(0, 0, 0, 0)) - for offset in [(-1, 0), (1, 0), (0, -1), (0, 1)]: - self.display_2.blit(display_sillhouette, offset) - - - - - - - - - - def run(self): - self.freezefr = 0 - self.camera = "free" - self.camera_checks = 0 - - self.MM.fadebetween('base', 'base2', timeinms=1000, goalvolumeout=0.0, goalvolumein=1.0) - - - self.camera_pos = [50, 50] - self.MM.sfx['ambience'].play(-1) - self.save_curr = self.FM.savefile("dump") - if self.respawnpoint == [0, 0]: - self.hascheckpoint = 0 - else: - self.hascheckpoint = 1 - self.player.pos = self.respawnpoint.copy() - self.load_level(self.level) - self.menu = 'play' - #if self.isfullscreen: - # self.screen = pygame.display.set_mode(self.monitor_size, pygame.FULLSCREEN) - #else: - # self.screen = pygame.display.set_mode(self.window_size, pygame.RESIZABLE) - self.scroll[0] = self.player.rect().centerx - self.scroll[1] = self.player.rect().centery - while True: - self.dt = time.time() - self.last_time - self.dt *= 60 - self.last_time = time.time() - if self.freezefr == 0: - - self.display.fill((0, 0, 0, 0)) - self.display_2.blit(self.assets['background'], (0, 0)) - - - self.screenshake = max(0, self.screenshake - 1) - - if not len(self.enemies): - self.transition += 1 - if self.transition > 30: - self.hascheckpoint = 0 - self.level = min(self.level + 1, len(os.listdir('data/maps')) - 1) - self.FM.savefile("save") - self.load_level(self.level) - - - - if self.transition < 0: - self.transition += 1 - - if self.dead: - self.dead += 1 - self.player.lockplayer = True - if self.dead >= 10: - self.transition = min(60, self.transition + 1) - if self.dead > 40: - self.reload_level(self.level) - else: - self.player.lockplayer = False - - if self.camera == "free": - self.scroll[0] += (self.player.rect().centerx - self.display.get_width() / 2 - self.scroll[0]) / 15 - self.scroll[1] += (self.player.rect().centery - self.display.get_height() / 2 - self.scroll[1]) / 15 - if self.camera == "locked": - self.scroll[0] += (self.camera_pos[0] - self.display.get_width() / 2 - self.scroll[0]) / 10 - self.scroll[1] += (self.camera_pos[1] - self.display.get_height() / 2 - self.scroll[1]) / 10 - render_scroll = (int(self.scroll[0]), int(self.scroll[1])) - - rects = self.tilemap.room_cam_collisions(self.player.pos, self.display) - i = 0 - self.camera_checks = 0 - for rect in rects: - if self.player.rect().colliderect(rect): - self.camera = 'locked' - self.camera_checks = 1 - self.camera_pos = [rect.centerx, rect.centery] - i += 1 - if self.camera_checks == 0: - self.camera = 'free' - - - - - - for rect in self.leaf_spawners: - if random.random() * 49999 < rect.width * rect.height: - pos = (rect.x + random.random() * rect.width, rect.y + random.random() * rect.height) - self.particles.append(Particle(self, 'leaf', pos, velocity=[-0.1, 0.3], frame=random.randint(0, 20))) - - self.update_all(render_scroll) - self.render_all(render_scroll) - - - - mpos = pygame.mouse.get_pos() - mpos = (mpos[0] / (self.screen.get_width() / self.display_3.get_width()) , mpos[1] / (self.screen.get_height() / self.display_3.get_height())) - self.pause_button_rect = pygame.Rect(0, 0, 16, 16) - self.mpos_r.x = mpos[0] - self.mpos_r.y = mpos[1] - - for event in pygame.event.get(): - if event.type == pygame.QUIT: - self.FM.savefile("save") - pygame.quit() - sys.exit() - if event.type == pygame.KEYDOWN: - if event.key == self.keybinds['left']: - self.movement[0] = True - if event.key == self.keybinds['right']: - self.movement[1] = True - if event.key == self.keybinds['jump']: - self.jumpbuf = 10 - if event.key == self.keybinds['dash']: - self.freezefr = self.player.dash() - if event.key == self.keybinds['respawn']: - self.dead += 1 - if event.key == pygame.K_h: - self.isrenderhb = not self.isrenderhb - if event.key == pygame.K_MINUS: - self.volume = max(self.volume - 5, 0) - if event.key == pygame.K_EQUALS: - self.volume = min(self.volume + 5, 100) - if event.key == pygame.K_v: - self.MM.fadebetween(musicid2='base', timeinms=1000, goalvolumeout=0.0, goalvolumein=1.0) - if event.key == pygame.K_i: - self.ab = 10 - if event.key == pygame.K_o: - self.ab = 60 - if event.key == pygame.K_c: - if self.camera == "locked": - self.camera = "free" - else: - self.camera = "locked" - if event.key == self.keybinds['menu']: - self.FM.savefile("save") - self.menu = 'main' - self.mainmenu() - - if event.type == pygame.KEYUP: - if event.key == self.keybinds['left']: - self.movement[0] = False - if event.key == self.keybinds['right']: - self.movement[1] = False - - if event.type == pygame.MOUSEBUTTONDOWN: - collisions = self.mpos_r.colliderect(self.pause_button_rect) - if collisions: - self.FM.savefile("save") - self.mainmenu() - self.iterations = 0 - if event.type == pygame.VIDEORESIZE: - if not self.isfullscreen: - self.screen = pygame.display.set_mode((event.w, event.h), pygame.RESIZABLE) - self.window_size = [self.screen.get_width(), self.screen.get_height()] - - self.FM.settings("save") - - if self.jumpbuf > 0: - self.jumpbuf -= 1 - if self.player.jump(): - self.sfx['jump'].play() - self.jumpbuf = 0 - - if self.isrenderhb: - for layer in self.tilemap.tilemap: - self.tilemap.rendertilehb(self.display, layer, render_scroll) - - if self.transition: - transition_surf = pygame.Surface(self.display.get_size()) - #transition_surf.blit(pygame.transform.scale(self.assets['transition_twirl'], (((60 - abs(self.transition)) * abs(self.transition)), ((60 - abs(self.transition)) * abs(self.transition)))), (self.display.get_width() // 2 - ((60 - abs(self.transition)) * abs(self.transition) / 2), self.display.get_height() // 2 - ((60 - abs(self.transition)) * abs(self.transition) / 2))) - pygame.draw.circle(transition_surf, (255, 255, 255), (self.display.get_width() // 2, self.display.get_height() // 2), (30 - abs(self.transition)) * 8) - transition_surf.set_colorkey((255, 255, 255)) - self.display.blit(transition_surf, (0, 0)) - - self.freezefr = max(0, self.freezefr - 1) - - - self.display_2.blit(self.display, (0, 0)) - - self.fonts['small'].render(self.display_2, 'level ' + str(self.level + 1), [0, 8], [1, 1], (255, 255, 255)) - self.fonts['small'].render(self.display_2, str(round(self.clock.get_fps())) + 'fps', [0, 16], [1, 1], (255, 255, 255)) - self.fonts['small'].render(self.display_2, 'dt:' + str(self.dt), [0, 24], [1, 1], (255, 255, 255)) - self.display_2.blit(self.assets['pause'], (0, 0)) - screenshake_offset = (random.random() * self.screenshake - self.screenshake / 2, random.random() * self.screenshake - self.screenshake / 2) - - self.screen.blit(pygame.transform.scale(self.display_2, self.screen.get_size()), screenshake_offset) - - #self.screen.blit(pygame.transform.gaussian_blur(self.display_2, 5), (0, 0)) - pygame.display.update() - self.clock.tick(60) - - - - - - - - - - - - - def mainmenu(self): - self.menu = 'main' - - pygame.mixer.stop() - - self.MM.fadebetween('base2', 'base', timeinms=1000, goalvolumeout=0.0, goalvolumein=1.0) - - rand = random.randint(0,0) - self.bglevel = rand - self.load_bglevel(self.bglevel) - #self.tile_scroll_anim = self.assets['settings_tile_scroll'].copy() - self.bg_transition = 0 - self.tile_scroll_pos = 0 - self.iters = 0 - self.keybinding_rect = pygame.Rect(1, 1, 1, 1) - self.key_rects = [] - self.torender = ' ' - self.key_to_change = ' ' - self.key_store = pygame.K_a - - - while True: - - self.display.fill((0, 0, 0, 0)) - - self.display_3.blit(pygame.transform.gaussian_blur(self.assets['menubackground'], 5), (0, 0)) - - self.MM.update() - - - - mpos = pygame.mouse.get_pos() - self.mpos = (mpos[0] / (self.screen.get_width() / self.display_3.get_width()) , mpos[1] / (self.screen.get_height() / self.display_3.get_height())) - self.isfullscreen_rect = pygame.Rect(self.display_3.get_width() - 20, 4, 16, 16) - self.mpos_r.x = self.mpos[0] - self.mpos_r.y = self.mpos[1] - - for breakable in self.breakable.copy(): - kill = breakable.update(self.tilemap, (0, 0)) - breakable.render(self.display_3, (math.floor(mpos[0] / 20 + 64), math.floor(mpos[1] / 20 - 25))) - if kill: - self.breakable.remove(breakable) - - display_mask = pygame.mask.from_surface(self.display) - display_sillhouette = display_mask.to_surface(setcolor=(0, 0, 0, 180), unsetcolor=(0, 0, 0, 0)) - for offset in [(-1, 0), (1, 0), (0, -1), (0, 1)]: - self.display_3.blit(display_sillhouette, offset) - - for event in pygame.event.get(): - if event.type == pygame.QUIT: - pygame.quit() - sys.exit() - if event.type == pygame.MOUSEBUTTONDOWN: - - - - - - if self.menu == 'main': - - collisions = self.mpos_r.colliderect(self.start_button_rect) - if collisions: - self.menu = 'play' - self.run() - collisions = self.mpos_r.colliderect(self.settings_rect) - if collisions: - self.menu = 'settings' - self.settingsmenu() - - - if event.type == pygame.KEYDOWN: - if event.key == pygame.K_SPACE: - self.menu = 'play' - self.run() - self.iterations = 0 - if event.key == pygame.K_f: - self.isfullscreen = not self.isfullscreen - if self.isfullscreen: - self.disable_fullscreen_polling = True - self.screen = pygame.display.set_mode(self.monitor_size, pygame.FULLSCREEN) - else: - self.screen = pygame.display.set_mode(self.base_screen_size, pygame.RESIZABLE) - self.disable_fullscreen_polling = False - if event.key == pygame.K_d: - self.save_curr = self.FM.savefile("clear") - self.respawnpoint = self.save_curr["checkpoint"] - self.level = self.save_curr["level"] - if event.type == pygame.VIDEORESIZE: - if self.isfullscreen == False: - if self.disable_fullscreen_polling == False: - self.screen = pygame.display.set_mode((event.w, event.h), pygame.RESIZABLE) - self.window_size = [self.screen.get_width(), self.screen.get_height()] - - self.FM.settings("save") - #space for settingsmanager - - - - - - size = self.screen.get_size() - size = [math.floor(size[0] * 0.40), math.floor(size[1] * 0.40)] - for layer in self.tilemap.tilemap: - self.tilemap.render(self.display_3, layer, (math.floor(mpos[0] / 20 + 64), math.floor(mpos[1] / 20 - 25))) - - - - - - - - self.tile_scroll_pos = max(self.tile_scroll_pos - 0.5, 0) - self.bg_transition = max(self.bg_transition - 5, 0) - #self.display_3.blit(self.assets['testbutton'], (128,100)) - - - - #self.display_3.blit(self.assets['settings'], (128,136)) - - if self.col_loop: - self.fonts['small'].render(self.display_3, 'START', (131, 107), scale=[3, 3], colour=(15, 225, 200)) - - else: - self.fonts['small'].render(self.display_3, 'START', (131, 107), scale=[3, 3], colour=(200, 200, 15)) - - self.fonts['small'].render(self.display_3, 'SETTINGS', (133, 148), scale=[1.75, 1.75], colour=(255, 255, 255)) - - self.screen.blit(pygame.transform.scale(self.display_3, self.screen.get_size()), (0, 0)) - self.col_loop = not self.col_loop - - - pygame.display.update() - self.clock.tick(60) - - - - - - - - - def settingsmenu(self): - while True: - - self.display.fill((0, 0, 0, 0)) - - self.display_3.blit(pygame.transform.gaussian_blur(self.assets['menubackground'], 5), (0, 0)) - - - - mpos = pygame.mouse.get_pos() - self.mpos = (mpos[0] / (self.screen.get_width() / self.display_3.get_width()) , mpos[1] / (self.screen.get_height() / self.display_3.get_height())) - self.isfullscreen_rect = pygame.Rect(self.display_3.get_width() - 20, 4, 16, 16) - self.mpos_r.x = self.mpos[0] - self.mpos_r.y = self.mpos[1] - - for breakable in self.breakable.copy(): - kill = breakable.update(self.tilemap, (0, 0)) - breakable.render(self.display_3, (math.floor(mpos[0] / 20 + 64), math.floor(mpos[1] / 20 - 25))) - if kill: - self.breakable.remove(breakable) - - display_mask = pygame.mask.from_surface(self.display) - display_sillhouette = display_mask.to_surface(setcolor=(0, 0, 0, 180), unsetcolor=(0, 0, 0, 0)) - for offset in [(-1, 0), (1, 0), (0, -1), (0, 1)]: - self.display_3.blit(display_sillhouette, offset) - - for event in pygame.event.get(): - if event.type == pygame.QUIT: - pygame.quit() - sys.exit() - - if event.type == pygame.MOUSEBUTTONDOWN: - self.settingsmanager.mousedown = True - - if self.menu == 'settings': - - if self.settings == 'mainpage': - pass - - elif self.settings == 'screensize': - for button in self.resolution_options: - action = self.resolution_options[button].update(self.mpos_r) - if action: - self.screen = pygame.display.set_mode(self.resolution_options[button].action, pygame.RESIZABLE, vsync=0) - - if self.settings == 'keybinds': - collisions = self.mpos_r.colliderect(self.return_rect) - if collisions: - self.settings = 'mainpage' - - for i in range(0, len(self.key_rects)): - collisions = self.mpos_r.colliderect(self.key_rects[i]) - if collisions: - if self.keybindingname[i] == 'RESTORE DEFAULTS': - self.keybinds = self.keybind_defaults.copy() - self.keybindingvalue = self.keybindingvaluedefault.copy() - else: - self.key_to_change = self.keybindingname[i] - self.valtoset = i - self.settings = 'changekey' - - collisions = self.mpos_r.colliderect(self.return_rect) - if collisions: - self.settings = self.return_heirarchy[self.settings] - - if event.type == pygame.MOUSEBUTTONUP: - self.settingsmanager.mousedown = False - - - - if event.type == pygame.KEYDOWN: - if self.settings == 'changekey': - if event.key == pygame.K_RETURN: - self.FM.settings("save") - self.torender = ' ' - self.settings = 'keybinds' - else: - - self.keybinds[self.key_to_change.lower()] = event.key - self.torender = pygame.key.name(event.key) - self.torender = self.torender.upper() - self.keybindingvalue[self.valtoset] = self.torender - size = self.screen.get_size() - size = [math.floor(size[0] * 0.40), math.floor(size[1] * 0.40)] - for layer in self.tilemap.tilemap: - self.tilemap.render(self.display_3, layer, (math.floor(mpos[0] / 20 + 64), math.floor(mpos[1] / 20 - 25))) - - - self.assets['settingsbg'].set_alpha(self.bg_transition) - self.display_3.blit(self.assets['settingsbg'], (0, 0)) - if self.iters >= 16: - self.iters = 0 - for i in range(0, ((int(self.display_3.get_width() / 16) + 2))): - #self.display_3.blit(img, ((i * 16), (int(self.display.get_height() - 16)))) - self.display_3.blit(self.assets['settings_tile_scroll'], (((i * 16) + self.iters - 16), (int(self.display.get_height() - self.tile_scroll_pos)))) - for i in range(0, ((int(self.display_3.get_width() / 16) + 2))): - self.display_3.blit(self.assets['settings_tile_scroll_rev'], (((i * 16) - self.iters - 16), self.tile_scroll_pos - 16)) - self.iters += 1 - - self.bg_transition = min(self.bg_transition + 5, 200) - self.tile_scroll_pos = min(self.tile_scroll_pos + 0.5, 16) - - #self.tile_scroll_anim.update() - #img = self.tile_scroll_anim.img() - if self.settings == 'mainpage': - self.settingsmanager.main_update() - self.settingsmanager.main(self.display_3) - - - #self.keybinding_rect = self.fonts['small'].render(self.display_3, 'KEY BINDINGS', (20, 20), scale=[3, 3], colour=(255, 225, 255)) - - if self.settings == 'soundsliders': - self.settingsmanager.sounds_update() - self.settingsmanager.sounds(self.display_3) - - elif self.settings == 'keybinds': - self.keybinding_rect = self.fonts['big'].render(self.display_3, '- KEYBINDINGS', (20, 16), scale=[1, 1], colour=(255, 225, 255)) - self.key_rects = [] - for key in range(0, len(self.keybindingname)): - self.key_rects.append(self.fonts['small'].render(self.display_3, self.keybindingname[key], (20, 28 + (key*16)), scale=[2, 2], colour=(255, 225, 255))) - - self.fonts['small'].render(self.display_3, self.keybindingvalue[key], (180, 28 + (key*16)), scale=[2, 2], colour=(255, 225, 255)) - - - - - elif self.settings == 'changekey': - self.display_3.blit(self.assets['settingsbg'], (0, 0)) - - self.key_rects.append(self.fonts['small'].render(self.display_3, 'set ' + self.key_to_change.lower() + ' key to', (120, 70), scale=[2, 2], colour=(255, 225, 255))) - self.key_rects.append(self.fonts['small'].render(self.display_3, self.torender, (160, 90), scale=[2, 2], colour=(255, 225, 255))) - self.key_rects.append(self.fonts['small'].render(self.display_3, 'PRESS ENTER TO CONFIRM', (80, 110), scale=[2, 2], colour=(255, 225, 255))) - - elif self.settings == 'screensize': - for button in self.resolution_options: - self.resolution_options[button].render(self.display_3, self.fonts['small']) - - - - self.display_3.blit(self.assets['return'], (4, 4)) - - self.screen.blit(pygame.transform.scale(self.display_3, self.screen.get_size()), (0, 0)) - - pygame.display.update() - self.clock.tick(60) - -cProfile.run('Game().mainmenu()') -#Game().mainmenu() \ No newline at end of file diff --git a/map.json b/map.json deleted file mode 100644 index f24232f..0000000 --- a/map.json +++ /dev/null @@ -1 +0,0 @@ -{"tilemap": {"8;8": {"type": "grass", "variant": 2, "pos": [8, 8]}, "7;8": {"type": "grass", "variant": 1, "pos": [7, 8]}, "6;8": {"type": "grass", "variant": 1, "pos": [6, 8]}, "5;8": {"type": "grass", "variant": 1, "pos": [5, 8]}, "3;8": {"type": "grass", "variant": 1, "pos": [3, 8]}, "2;8": {"type": "grass", "variant": 0, "pos": [2, 8]}, "2;9": {"type": "grass", "variant": 7, "pos": [2, 9]}, "2;10": {"type": "grass", "variant": 6, "pos": [2, 10]}, "3;10": {"type": "grass", "variant": 8, "pos": [3, 10]}, "4;10": {"type": "grass", "variant": 8, "pos": [4, 10]}, "5;10": {"type": "grass", "variant": 8, "pos": [5, 10]}, "6;10": {"type": "grass", "variant": 8, "pos": [6, 10]}, "7;10": {"type": "grass", "variant": 8, "pos": [7, 10]}, "8;10": {"type": "grass", "variant": 8, "pos": [8, 10]}, "9;10": {"type": "grass", "variant": 8, "pos": [9, 10]}, "10;10": {"type": "grass", "variant": 4, "pos": [10, 10]}, "10;9": {"type": "grass", "variant": 2, "pos": [10, 9]}, "9;9": {"type": "grass", "variant": 1, "pos": [9, 9]}, "8;9": {"type": "grass", "variant": 8, "pos": [8, 9]}, "7;9": {"type": "grass", "variant": 8, "pos": [7, 9]}, "6;9": {"type": "grass", "variant": 8, "pos": [6, 9]}, "5;9": {"type": "grass", "variant": 8, "pos": [5, 9]}, "4;9": {"type": "grass", "variant": 8, "pos": [4, 9]}, "3;9": {"type": "grass", "variant": 8, "pos": [3, 9]}, "3;11": {"type": "grass", "variant": 6, "pos": [3, 11]}, "4;11": {"type": "grass", "variant": 5, "pos": [4, 11]}, "5;11": {"type": "grass", "variant": 5, "pos": [5, 11]}, "6;11": {"type": "grass", "variant": 5, "pos": [6, 11]}, "7;11": {"type": "grass", "variant": 5, "pos": [7, 11]}, "8;11": {"type": "grass", "variant": 5, "pos": [8, 11]}, "9;11": {"type": "grass", "variant": 4, "pos": [9, 11]}, "2;7": {"type": "decor", "variant": 0, "pos": [2, 7]}, "3;7": {"type": "decor", "variant": 0, "pos": [3, 7]}, "4;7": {"type": "decor", "variant": 0, "pos": [4, 7]}, "4;8": {"type": "grass", "variant": 1, "pos": [4, 8]}, "7;7": {"type": "decor", "variant": 1, "pos": [7, 7]}, "8;7": {"type": "decor", "variant": 2, "pos": [8, 7]}, "10;8": {"type": "decor", "variant": 2, "pos": [10, 8]}, "9;8": {"type": "decor", "variant": 2, "pos": [9, 8]}, "15;6": {"type": "stone", "variant": 2, "pos": [15, 6]}, "14;6": {"type": "stone", "variant": 0, "pos": [14, 6]}, "14;7": {"type": "stone", "variant": 8, "pos": [14, 7]}, "13;7": {"type": "stone", "variant": 0, "pos": [13, 7]}, "13;8": {"type": "stone", "variant": 7, "pos": [13, 8]}, "13;9": {"type": "stone", "variant": 6, "pos": [13, 9]}, "14;10": {"type": "stone", "variant": 6, "pos": [14, 10]}, "15;10": {"type": "stone", "variant": 4, "pos": [15, 10]}, "15;9": {"type": "stone", "variant": 8, "pos": [15, 9]}, "16;9": {"type": "stone", "variant": 4, "pos": [16, 9]}, "16;8": {"type": "stone", "variant": 3, "pos": [16, 8]}, "16;7": {"type": "stone", "variant": 2, "pos": [16, 7]}, "15;7": {"type": "stone", "variant": 8, "pos": [15, 7]}, "15;8": {"type": "stone", "variant": 8, "pos": [15, 8]}, "14;8": {"type": "stone", "variant": 8, "pos": [14, 8]}, "14;9": {"type": "stone", "variant": 8, "pos": [14, 9]}, "12;2": {"type": "stone", "variant": 2, "pos": [12, 2]}, "11;2": {"type": "stone", "variant": 1, "pos": [11, 2]}, "10;2": {"type": "stone", "variant": 1, "pos": [10, 2]}, "9;2": {"type": "stone", "variant": 1, "pos": [9, 2]}, "8;2": {"type": "stone", "variant": 0, "pos": [8, 2]}, "8;3": {"type": "stone", "variant": 6, "pos": [8, 3]}, "9;3": {"type": "stone", "variant": 5, "pos": [9, 3]}, "10;4": {"type": "stone", "variant": 6, "pos": [10, 4]}, "11;4": {"type": "stone", "variant": 4, "pos": [11, 4]}, "11;3": {"type": "stone", "variant": 8, "pos": [11, 3]}, "12;3": {"type": "stone", "variant": 4, "pos": [12, 3]}, "10;3": {"type": "stone", "variant": 8, "pos": [10, 3]}, "14;5": {"type": "decor", "variant": 3, "pos": [14, 5]}, "11;1": {"type": "decor", "variant": 3, "pos": [11, 1]}, "9;1": {"type": "decor", "variant": 3, "pos": [9, 1]}}, "tile_size": 16, "offgrid": [{"type": "large_decor", "variant": 0, "pos": [86.0, 121.0]}, {"type": "large_decor", "variant": 1, "pos": [139.5, 134.0]}, {"type": "large_decor", "variant": 2, "pos": [45.0, 85.5]}, {"type": "large_decor", "variant": 2, "pos": [118.0, 85.0]}, {"type": "large_decor", "variant": 0, "pos": [166.0, 24.0]}, {"type": "spawners", "variant": 0, "pos": [78.0, 111.5]}, {"type": "spawners", "variant": 1, "pos": [243.0, 78.0]}, {"type": "spawners", "variant": 1, "pos": [135.0, 15.5]}]} \ No newline at end of file diff --git a/save.SAVEFILE b/save.SAVEFILE deleted file mode 100644 index 2c83f36..0000000 --- a/save.SAVEFILE +++ /dev/null @@ -1 +0,0 @@ -{"level": 0, "checkpoint": [104, 176]} \ No newline at end of file diff --git a/scripts/buttons.py b/scripts/buttons.py index 86fd857..a3bf00a 100644 --- a/scripts/buttons.py +++ b/scripts/buttons.py @@ -30,4 +30,4 @@ def update(self, mouse_rect): if self.collide(mouse_rect): return True def render(self, surf, font): - font.render(surf, self.text, self.pos, scale=self.scale, colour=self.fontcolour) + font.render(surf, self.text, self.pos, scale=self.scale) diff --git a/scripts/editor_utils b/scripts/editor_utils deleted file mode 100644 index e69de29..0000000 diff --git a/scripts/musicmanager.py b/scripts/musicmanager.py index 54ae3bd..54a1a2d 100644 --- a/scripts/musicmanager.py +++ b/scripts/musicmanager.py @@ -17,7 +17,7 @@ def __init__(self, game): self.music = { 'base' : pygame.mixer.Sound('data/music.wav'), - 'base2' : pygame.mixer.Sound('data/slodrum.mp3'), + 'base2' : pygame.mixer.Sound('data/gameplayloop.wav'), } self.music['base'].set_volume(0.5) @@ -62,7 +62,7 @@ def fadebetween(self, musicid1=None, musicid2=None, timeinms=0, goalvolumeout=0. self.channels[musicid1].fadeout(timeinms) if not(musicid2 == None): self.channels[musicid2].set_volume(goalvolumein) - self.channels[musicid2].play(self.music[musicid2],-1, fade_ms=timeinms) + self.channels[musicid2].play(self.music[musicid2], -1) #self.channels[musicid2].set_volume(0.0) diff --git a/scripts/player.py b/scripts/player.py index 9755e64..b628f8d 100644 --- a/scripts/player.py +++ b/scripts/player.py @@ -50,8 +50,8 @@ def update(self, tilemap, movement=(0, 0)): self.collisions = {'up': False, 'down': False, 'right': False, 'left': False} self.nearcollisions = {'right': False, 'left': False} self.killcollisions = False - self.frame_movement = (movement[0] + self.velocity[0] , movement[1] + self.velocity[1] )#* self.game.dt - print(self.frame_movement) + self.frame_movement = (((movement[0] + self.velocity[0])), (movement[1] + self.velocity[1]))#* self.game.dt + if not self.lockplayer: self.pos[0] += self.frame_movement[0] entity_rect = self.rect() @@ -101,7 +101,7 @@ def update(self, tilemap, movement=(0, 0)): self.last_movement = movement - self.velocity[1] = min(5, self.velocity[1] + 0.1) + self.velocity[1] = min(10, self.velocity[1] + 0.1) if self.collisions['down'] or self.collisions['up']: self.velocity[1] = 0 @@ -133,16 +133,18 @@ def update(self, tilemap, movement=(0, 0)): self.air_time = 0 self.game.sfx['spring'].play() - + checkpoint = 0 for rect in tilemap.checkpointcollisions(self.pos, self.game.display): if self.rect().colliderect(rect): if not [rect.centerx, rect.centery] in self.game.checkpointscollected: self.game.hascheckpoint = 1 + checkpoint = 1 self.game.checkpointscollected.append([rect.centerx, rect.centery]) self.game.reload_enemies = self.game.enemies.copy() self.game.respawnpoint = [rect.centerx, rect.centery] - - + if not checkpoint: + self.game.respawnpoint = [0, 0] + self.isspark += 1 self.air_time += 1 @@ -225,9 +227,9 @@ def update(self, tilemap, movement=(0, 0)): self.wantscale[0] = (abs(self.velocity[1]) * -1) if self.velocity[0] > 0: - self.velocity[0] = max(self.velocity[0] - 0.1, 0) + self.velocity[0] = max(self.velocity[0] - 0.2, 0) else: - self.velocity[0] = min(self.velocity[0] + 0.1, 0) + self.velocity[0] = min(self.velocity[0] + 0.2, 0) self.last_collisions = self.collisions diff --git a/scripts/room-maps.py b/scripts/room-maps.py index 173bf37..4fc0b6a 100644 --- a/scripts/room-maps.py +++ b/scripts/room-maps.py @@ -1,3 +1,7 @@ import pygame -#code for room based system \ No newline at end of file +#code for room based system +#what i want: +#each tile map is seperated into a room, with each room being a connected in some way +#stylegrounds and triggers +#each room is loaded individually and unloaded. \ No newline at end of file diff --git a/scripts/scriptscython/buttons.c b/scripts/scriptscython/buttons.c deleted file mode 100644 index 47184a4..0000000 --- a/scripts/scriptscython/buttons.c +++ /dev/null @@ -1,8803 +0,0 @@ -/* Generated by Cython 3.0.10 */ - -/* BEGIN: Cython Metadata -{ - "distutils": { - "name": "buttons", - "sources": [ - "./scripts/scriptscython/buttons.pyx" - ] - }, - "module_name": "buttons" -} -END: Cython Metadata */ - -#ifndef PY_SSIZE_T_CLEAN -#define PY_SSIZE_T_CLEAN -#endif /* PY_SSIZE_T_CLEAN */ -#if defined(CYTHON_LIMITED_API) && 0 - #ifndef Py_LIMITED_API - #if CYTHON_LIMITED_API+0 > 0x03030000 - #define Py_LIMITED_API CYTHON_LIMITED_API - #else - #define Py_LIMITED_API 0x03030000 - #endif - #endif -#endif - -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) - #error Cython requires Python 2.7+ or Python 3.3+. -#else -#if defined(CYTHON_LIMITED_API) && CYTHON_LIMITED_API -#define __PYX_EXTRA_ABI_MODULE_NAME "limited" -#else -#define __PYX_EXTRA_ABI_MODULE_NAME "" -#endif -#define CYTHON_ABI "3_0_10" __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 0x03000AF0 -#define CYTHON_FUTURE_DIVISION 1 -#include -#ifndef offsetof - #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif -#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif -#define __PYX_COMMA , -#ifndef HAVE_LONG_LONG - #define HAVE_LONG_LONG -#endif -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifndef Py_HUGE_VAL - #define Py_HUGE_VAL HUGE_VAL -#endif -#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX -#if defined(GRAALVM_PYTHON) - /* For very preliminary testing purposes. Most variables are set the same as PyPy. - The existence of this section does not imply that anything works or is even tested */ - #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_CPYTHON 0 - #define CYTHON_COMPILING_IN_LIMITED_API 0 - #define CYTHON_COMPILING_IN_GRAAL 1 - #define CYTHON_COMPILING_IN_NOGIL 0 - #undef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 0 - #undef CYTHON_USE_TYPE_SPECS - #define CYTHON_USE_TYPE_SPECS 0 - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #if PY_VERSION_HEX < 0x03050000 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #elif !defined(CYTHON_USE_ASYNC_SLOTS) - #define CYTHON_USE_ASYNC_SLOTS 1 - #endif - #undef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 0 - #undef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 0 - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #undef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 1 - #undef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 0 - #undef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 0 - #undef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 0 - #undef CYTHON_FAST_GIL - #define CYTHON_FAST_GIL 0 - #undef CYTHON_METH_FASTCALL - #define CYTHON_METH_FASTCALL 0 - #undef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 0 - #ifndef CYTHON_PEP487_INIT_SUBCLASS - #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) - #endif - #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 1 - #undef CYTHON_USE_MODULE_STATE - #define CYTHON_USE_MODULE_STATE 0 - #undef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE 0 - #undef CYTHON_USE_DICT_VERSIONS - #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 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 - #define CYTHON_COMPILING_IN_LIMITED_API 0 - #define CYTHON_COMPILING_IN_GRAAL 0 - #define CYTHON_COMPILING_IN_NOGIL 0 - #undef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 0 - #ifndef CYTHON_USE_TYPE_SPECS - #define CYTHON_USE_TYPE_SPECS 0 - #endif - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #if PY_VERSION_HEX < 0x03050000 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #elif !defined(CYTHON_USE_ASYNC_SLOTS) - #define CYTHON_USE_ASYNC_SLOTS 1 - #endif - #undef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 0 - #undef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 0 - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #undef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 1 - #undef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 0 - #undef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 0 - #undef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 0 - #undef CYTHON_FAST_GIL - #define CYTHON_FAST_GIL 0 - #undef CYTHON_METH_FASTCALL - #define CYTHON_METH_FASTCALL 0 - #undef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 0 - #ifndef CYTHON_PEP487_INIT_SUBCLASS - #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3) - #endif - #if PY_VERSION_HEX < 0x03090000 - #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 0 - #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT) - #define CYTHON_PEP489_MULTI_PHASE_INIT 1 - #endif - #undef CYTHON_USE_MODULE_STATE - #define CYTHON_USE_MODULE_STATE 0 - #undef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00) - #undef CYTHON_USE_DICT_VERSIONS - #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 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 - #define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API - #endif - #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_CPYTHON 0 - #define CYTHON_COMPILING_IN_LIMITED_API 1 - #define CYTHON_COMPILING_IN_GRAAL 0 - #define CYTHON_COMPILING_IN_NOGIL 0 - #undef CYTHON_CLINE_IN_TRACEBACK - #define CYTHON_CLINE_IN_TRACEBACK 0 - #undef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 0 - #undef CYTHON_USE_TYPE_SPECS - #define CYTHON_USE_TYPE_SPECS 1 - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #undef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 0 - #undef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 0 - #ifndef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #endif - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #ifndef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 0 - #endif - #undef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 0 - #undef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 0 - #undef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 0 - #undef CYTHON_FAST_GIL - #define CYTHON_FAST_GIL 0 - #undef CYTHON_METH_FASTCALL - #define CYTHON_METH_FASTCALL 0 - #undef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 0 - #ifndef CYTHON_PEP487_INIT_SUBCLASS - #define CYTHON_PEP487_INIT_SUBCLASS 1 - #endif - #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 0 - #undef CYTHON_USE_MODULE_STATE - #define CYTHON_USE_MODULE_STATE 1 - #ifndef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE 0 - #endif - #undef CYTHON_USE_DICT_VERSIONS - #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 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 - #define CYTHON_COMPILING_IN_LIMITED_API 0 - #define CYTHON_COMPILING_IN_GRAAL 0 - #define CYTHON_COMPILING_IN_NOGIL 1 - #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 - #define CYTHON_USE_UNICODE_INTERNALS 1 - #endif - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #ifndef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 0 - #endif - #ifndef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 1 - #endif - #ifndef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 1 - #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 - #undef CYTHON_USE_DICT_VERSIONS - #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 - #define CYTHON_COMPILING_IN_LIMITED_API 0 - #define CYTHON_COMPILING_IN_GRAAL 0 - #define CYTHON_COMPILING_IN_NOGIL 0 - #ifndef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 1 - #endif - #ifndef CYTHON_USE_TYPE_SPECS - #define CYTHON_USE_TYPE_SPECS 0 - #endif - #ifndef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 1 - #endif - #if PY_MAJOR_VERSION < 3 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #elif !defined(CYTHON_USE_ASYNC_SLOTS) - #define CYTHON_USE_ASYNC_SLOTS 1 - #endif - #ifndef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 1 - #endif - #ifndef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 1 - #endif - #ifndef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 1 - #endif - #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2 - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #elif !defined(CYTHON_USE_UNICODE_WRITER) - #define CYTHON_USE_UNICODE_WRITER 1 - #endif - #ifndef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 0 - #endif - #ifndef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 1 - #endif - #ifndef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 1 - #endif - #ifndef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 1 - #endif - #ifndef CYTHON_FAST_GIL - #define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6) - #endif - #ifndef CYTHON_METH_FASTCALL - #define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1) - #endif - #ifndef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 1 - #endif - #ifndef CYTHON_PEP487_INIT_SUBCLASS - #define CYTHON_PEP487_INIT_SUBCLASS 1 - #endif - #if PY_VERSION_HEX < 0x03050000 - #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 0 - #elif !defined(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 - #if PY_VERSION_HEX < 0x030400a1 - #undef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE 0 - #elif !defined(CYTHON_USE_TP_FINALIZE) - #define CYTHON_USE_TP_FINALIZE 1 - #endif - #if PY_VERSION_HEX < 0x030600B1 - #undef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS 0 - #elif !defined(CYTHON_USE_DICT_VERSIONS) - #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5) - #endif - #if PY_VERSION_HEX < 0x030700A3 - #undef CYTHON_USE_EXC_INFO_STACK - #define CYTHON_USE_EXC_INFO_STACK 0 - #elif !defined(CYTHON_USE_EXC_INFO_STACK) - #define CYTHON_USE_EXC_INFO_STACK 1 - #endif - #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) -#endif -#if !defined(CYTHON_VECTORCALL) -#define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1) -#endif -#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1) -#if CYTHON_USE_PYLONG_INTERNALS - #if PY_MAJOR_VERSION < 3 - #include "longintrepr.h" - #endif - #undef SHIFT - #undef BASE - #undef MASK - #ifdef SIZEOF_VOID_P - enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; - #endif -#endif -#ifndef __has_attribute - #define __has_attribute(x) 0 -#endif -#ifndef __has_cpp_attribute - #define __has_cpp_attribute(x) 0 -#endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) && _MSC_VER >= 1400 - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif -#endif -#ifndef CYTHON_UNUSED - #if defined(__cplusplus) - /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17 - * but leads to warnings with -pedantic, since it is a C++17 feature */ - #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) - #if __has_cpp_attribute(maybe_unused) - #define CYTHON_UNUSED [[maybe_unused]] - #endif - #endif - #endif -#endif -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif -#ifndef CYTHON_UNUSED_VAR -# if defined(__cplusplus) - template void CYTHON_UNUSED_VAR( const T& ) { } -# else -# define CYTHON_UNUSED_VAR(x) (void)(x) -# endif -#endif -#ifndef CYTHON_MAYBE_UNUSED_VAR - #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x) -#endif -#ifndef CYTHON_NCP_UNUSED -# if CYTHON_COMPILING_IN_CPYTHON -# define CYTHON_NCP_UNUSED -# else -# define CYTHON_NCP_UNUSED CYTHON_UNUSED -# endif -#endif -#ifndef CYTHON_USE_CPP_STD_MOVE - #if defined(__cplusplus) && (\ - __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600)) - #define CYTHON_USE_CPP_STD_MOVE 1 - #else - #define CYTHON_USE_CPP_STD_MOVE 0 - #endif -#endif -#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) -#ifdef _MSC_VER - #ifndef _MSC_STDINT_H_ - #if _MSC_VER < 1300 - typedef unsigned char uint8_t; - typedef unsigned short uint16_t; - typedef unsigned int uint32_t; - #else - typedef unsigned __int8 uint8_t; - typedef unsigned __int16 uint16_t; - typedef unsigned __int32 uint32_t; - #endif - #endif - #if _MSC_VER < 1300 - #ifdef _WIN64 - typedef unsigned long long __pyx_uintptr_t; - #else - typedef unsigned int __pyx_uintptr_t; - #endif - #else - #ifdef _WIN64 - typedef unsigned __int64 __pyx_uintptr_t; - #else - typedef unsigned __int32 __pyx_uintptr_t; - #endif - #endif -#else - #include - typedef uintptr_t __pyx_uintptr_t; -#endif -#ifndef CYTHON_FALLTHROUGH - #if defined(__cplusplus) - /* for clang __has_cpp_attribute(fallthrough) is true even before C++17 - * but leads to warnings with -pedantic, since it is a C++17 feature */ - #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L) - #if __has_cpp_attribute(fallthrough) - #define CYTHON_FALLTHROUGH [[fallthrough]] - #endif - #endif - #ifndef CYTHON_FALLTHROUGH - #if __has_cpp_attribute(clang::fallthrough) - #define CYTHON_FALLTHROUGH [[clang::fallthrough]] - #elif __has_cpp_attribute(gnu::fallthrough) - #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] - #endif - #endif - #endif - #ifndef CYTHON_FALLTHROUGH - #if __has_attribute(fallthrough) - #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) - #else - #define CYTHON_FALLTHROUGH - #endif - #endif - #if defined(__clang__) && defined(__apple_build_version__) - #if __apple_build_version__ < 7000000 - #undef CYTHON_FALLTHROUGH - #define CYTHON_FALLTHROUGH - #endif - #endif -#endif -#ifdef __cplusplus - template - struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);}; - #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL::value) -#else - #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0) -#endif -#if CYTHON_COMPILING_IN_PYPY == 1 - #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000) -#else - #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000) -#endif -#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer)) - -#ifndef CYTHON_INLINE - #if defined(__clang__) - #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) - #elif defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif - -#define __PYX_BUILD_PY_SSIZE_T "n" -#define CYTHON_FORMAT_SSIZE_T "z" -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_DefaultClassType PyClass_Type - #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" - #define __Pyx_DefaultClassType PyType_Type -#if CYTHON_COMPILING_IN_LIMITED_API - static CYTHON_INLINE PyObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, - PyObject *code, PyObject *c, PyObject* n, PyObject *v, - PyObject *fv, PyObject *cell, PyObject* fn, - PyObject *name, int fline, PyObject *lnos) { - PyObject *exception_table = NULL; - PyObject *types_module=NULL, *code_type=NULL, *result=NULL; - #if __PYX_LIMITED_VERSION_HEX < 0x030B0000 - PyObject *version_info; - PyObject *py_minor_version = NULL; - #endif - long minor_version = 0; - PyObject *type, *value, *traceback; - PyErr_Fetch(&type, &value, &traceback); - #if __PYX_LIMITED_VERSION_HEX >= 0x030B0000 - minor_version = 11; - #else - if (!(version_info = PySys_GetObject("version_info"))) goto end; - if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end; - minor_version = PyLong_AsLong(py_minor_version); - Py_DECREF(py_minor_version); - if (minor_version == -1 && PyErr_Occurred()) goto end; - #endif - if (!(types_module = PyImport_ImportModule("types"))) goto end; - if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end; - if (minor_version <= 7) { - (void)p; - result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOO", a, k, l, s, f, code, - c, n, v, fn, name, fline, lnos, fv, cell); - } else if (minor_version <= 10) { - result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOO", a,p, k, l, s, f, code, - c, n, v, fn, name, fline, lnos, fv, cell); - } else { - if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end; - result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOO", a,p, k, l, s, f, code, - c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell); - } - end: - Py_XDECREF(code_type); - Py_XDECREF(exception_table); - Py_XDECREF(types_module); - if (type) { - PyErr_Restore(type, value, traceback); - } - return result; - } - #ifndef CO_OPTIMIZED - #define CO_OPTIMIZED 0x0001 - #endif - #ifndef CO_NEWLOCALS - #define CO_NEWLOCALS 0x0002 - #endif - #ifndef CO_VARARGS - #define CO_VARARGS 0x0004 - #endif - #ifndef CO_VARKEYWORDS - #define CO_VARKEYWORDS 0x0008 - #endif - #ifndef CO_ASYNC_GENERATOR - #define CO_ASYNC_GENERATOR 0x0200 - #endif - #ifndef CO_GENERATOR - #define CO_GENERATOR 0x0020 - #endif - #ifndef CO_COROUTINE - #define CO_COROUTINE 0x0080 - #endif -#elif PY_VERSION_HEX >= 0x030B0000 - static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f, - PyObject *code, PyObject *c, PyObject* n, PyObject *v, - PyObject *fv, PyObject *cell, PyObject* fn, - PyObject *name, int fline, PyObject *lnos) { - PyCodeObject *result; - PyObject *empty_bytes = PyBytes_FromStringAndSize("", 0); - if (!empty_bytes) return NULL; - result = - #if PY_VERSION_HEX >= 0x030C0000 - PyUnstable_Code_NewWithPosOnlyArgs - #else - PyCode_NewWithPosOnlyArgs - #endif - (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, empty_bytes); - Py_DECREF(empty_bytes); - return result; - } -#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) -#else - #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) -#endif -#endif -#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE) - #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type) -#else - #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type)) -#endif -#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is) - #define __Pyx_Py_Is(x, y) Py_Is(x, y) -#else - #define __Pyx_Py_Is(x, y) ((x) == (y)) -#endif -#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone) - #define __Pyx_Py_IsNone(ob) Py_IsNone(ob) -#else - #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None) -#endif -#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue) - #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob) -#else - #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True) -#endif -#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse) - #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob) -#else - #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False) -#endif -#define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj)) -#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o) -#else - #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o) -#endif -#ifndef CO_COROUTINE - #define CO_COROUTINE 0x80 -#endif -#ifndef CO_ASYNC_GENERATOR - #define CO_ASYNC_GENERATOR 0x200 -#endif -#ifndef Py_TPFLAGS_CHECKTYPES - #define Py_TPFLAGS_CHECKTYPES 0 -#endif -#ifndef Py_TPFLAGS_HAVE_INDEX - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif -#ifndef Py_TPFLAGS_HAVE_NEWBUFFER - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif -#ifndef Py_TPFLAGS_HAVE_FINALIZE - #define Py_TPFLAGS_HAVE_FINALIZE 0 -#endif -#ifndef Py_TPFLAGS_SEQUENCE - #define Py_TPFLAGS_SEQUENCE 0 -#endif -#ifndef Py_TPFLAGS_MAPPING - #define Py_TPFLAGS_MAPPING 0 -#endif -#ifndef METH_STACKLESS - #define METH_STACKLESS 0 -#endif -#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) - #ifndef METH_FASTCALL - #define METH_FASTCALL 0x80 - #endif - typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); - typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, - Py_ssize_t nargs, PyObject *kwnames); -#else - #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 - #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast - #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords -#else - #define __Pyx_METH_FASTCALL METH_VARARGS - #define __Pyx_PyCFunction_FastCall PyCFunction - #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords -#endif -#if CYTHON_VECTORCALL - #define __pyx_vectorcallfunc vectorcallfunc - #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET - #define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n)) -#elif CYTHON_BACKPORT_VECTORCALL - typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args, - size_t nargsf, PyObject *kwnames); - #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1)) - #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)) -#else - #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0 - #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n)) -#endif -#if PY_MAJOR_VERSION >= 0x030900B1 -#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_CheckExact(func) -#else -#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_Check(func) -#endif -#define __Pyx_CyOrPyCFunction_Check(func) PyCFunction_Check(func) -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) (((PyCFunctionObject*)(func))->m_ml->ml_meth) -#elif !CYTHON_COMPILING_IN_LIMITED_API -#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(func) -#endif -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_CyOrPyCFunction_GET_FLAGS(func) (((PyCFunctionObject*)(func))->m_ml->ml_flags) -static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) { - return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self; -} -#endif -static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void *cfunc) { -#if CYTHON_COMPILING_IN_LIMITED_API - return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc; -#else - return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; -#endif -} -#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCFunction(func, cfunc) -#if __PYX_LIMITED_VERSION_HEX < 0x030900B1 - #define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b)) - typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *); -#else - #define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b) - #define __Pyx_PyCMethod PyCMethod -#endif -#ifndef METH_METHOD - #define METH_METHOD 0x200 -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) - #define PyObject_Malloc(s) PyMem_Malloc(s) - #define PyObject_Free(p) PyMem_Free(p) - #define PyObject_Realloc(p) PyMem_Realloc(p) -#endif -#if CYTHON_COMPILING_IN_LIMITED_API - #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) - #define __Pyx_PyFrame_SetLineNumber(frame, lineno) -#else - #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) - #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) -#endif -#if CYTHON_COMPILING_IN_LIMITED_API - #define __Pyx_PyThreadState_Current PyThreadState_Get() -#elif !CYTHON_FAST_THREAD_STATE - #define __Pyx_PyThreadState_Current PyThreadState_GET() -#elif PY_VERSION_HEX >= 0x030d00A1 - #define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked() -#elif PY_VERSION_HEX >= 0x03060000 - #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() -#elif PY_VERSION_HEX >= 0x03000000 - #define __Pyx_PyThreadState_Current PyThreadState_GET() -#else - #define __Pyx_PyThreadState_Current _PyThreadState_Current -#endif -#if CYTHON_COMPILING_IN_LIMITED_API -static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op) -{ - void *result; - result = PyModule_GetState(op); - if (!result) - Py_FatalError("Couldn't find the module state"); - return result; -} -#endif -#define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype) -#if CYTHON_COMPILING_IN_LIMITED_API - #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name)) -#else - #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name) -#endif -#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) -#include "pythread.h" -#define Py_tss_NEEDS_INIT 0 -typedef int Py_tss_t; -static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { - *key = PyThread_create_key(); - return 0; -} -static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { - Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); - *key = Py_tss_NEEDS_INIT; - return key; -} -static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { - PyObject_Free(key); -} -static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { - return *key != Py_tss_NEEDS_INIT; -} -static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { - PyThread_delete_key(*key); - *key = Py_tss_NEEDS_INIT; -} -static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { - return PyThread_set_key_value(*key, value); -} -static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { - return PyThread_get_key_value(*key); -} -#endif -#if PY_MAJOR_VERSION < 3 - #if CYTHON_COMPILING_IN_PYPY - #if PYPY_VERSION_NUM < 0x07030600 - #if defined(__cplusplus) && __cplusplus >= 201402L - [[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]] - #elif defined(__GNUC__) || defined(__clang__) - __attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))) - #elif defined(_MSC_VER) - __declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")) - #endif - static CYTHON_INLINE int PyGILState_Check(void) { - return 0; - } - #else // PYPY_VERSION_NUM < 0x07030600 - #endif // PYPY_VERSION_NUM < 0x07030600 - #else - static CYTHON_INLINE int PyGILState_Check(void) { - PyThreadState * tstate = _PyThreadState_Current; - return tstate && (tstate == PyGILState_GetThisThreadState()); - } - #endif -#endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 || defined(_PyDict_NewPresized) -#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) -#else -#define __Pyx_PyDict_NewPresized(n) PyDict_New() -#endif -#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && PY_VERSION_HEX < 0x030d0000 && CYTHON_USE_UNICODE_INTERNALS -#define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) -static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) { - PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name); - if (res == NULL) PyErr_Clear(); - return res; -} -#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) -#define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError -#define __Pyx_PyDict_GetItemStr PyDict_GetItem -#else -static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) { -#if CYTHON_COMPILING_IN_PYPY - return PyDict_GetItem(dict, name); -#else - PyDictEntry *ep; - PyDictObject *mp = (PyDictObject*) dict; - long hash = ((PyStringObject *) name)->ob_shash; - assert(hash != -1); - ep = (mp->ma_lookup)(mp, name, hash); - if (ep == NULL) { - return NULL; - } - return ep->me_value; -#endif -} -#define __Pyx_PyDict_GetItemStr PyDict_GetItem -#endif -#if CYTHON_USE_TYPE_SLOTS - #define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags) - #define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0) - #define __Pyx_PyObject_GetIterNextFunc(obj) (Py_TYPE(obj)->tp_iternext) -#else - #define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp)) - #define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature) - #define __Pyx_PyObject_GetIterNextFunc(obj) PyIter_Next -#endif -#if CYTHON_COMPILING_IN_LIMITED_API - #define __Pyx_SetItemOnTypeDict(tp, k, v) PyObject_GenericSetAttr((PyObject*)tp, k, v) -#else - #define __Pyx_SetItemOnTypeDict(tp, k, v) PyDict_SetItem(tp->tp_dict, k, v) -#endif -#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000 -#define __Pyx_PyHeapTypeObject_GC_Del(obj) {\ - PyTypeObject *type = Py_TYPE((PyObject*)obj);\ - assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\ - PyObject_GC_Del(obj);\ - Py_DECREF(type);\ -} -#else -#define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj) -#endif -#if CYTHON_COMPILING_IN_LIMITED_API - #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GetLength(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i) - #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U) - #define __Pyx_PyUnicode_KIND(u) ((void)u, (0)) - #define __Pyx_PyUnicode_DATA(u) ((void*)u) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i)) - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u)) -#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) - #define CYTHON_PEP393_ENABLED 1 - #if PY_VERSION_HEX >= 0x030C0000 - #define __Pyx_PyUnicode_READY(op) (0) - #else - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #endif - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) - #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) - #define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u)) - #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) - #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch) - #if PY_VERSION_HEX >= 0x030C0000 - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) - #else - #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000 - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length)) - #else - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) - #endif - #endif -#else - #define CYTHON_PEP393_ENABLED 0 - #define PyUnicode_1BYTE_KIND 1 - #define PyUnicode_2BYTE_KIND 2 - #define PyUnicode_4BYTE_KIND 4 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U) - #define __Pyx_PyUnicode_KIND(u) ((int)sizeof(Py_UNICODE)) - #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch) - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) -#endif -#if CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) -#else - #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ - PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) -#endif -#if CYTHON_COMPILING_IN_PYPY - #if !defined(PyUnicode_DecodeUnicodeEscape) - #define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors) - #endif - #if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500) - #undef PyUnicode_Contains - #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) - #endif - #if !defined(PyByteArray_Check) - #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) - #endif - #if !defined(PyObject_Format) - #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) - #endif -#endif -#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) -#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) -#else - #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) -#endif -#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) - #define PyObject_ASCII(o) PyObject_Repr(o) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#ifndef PyObject_Unicode - #define PyObject_Unicode PyObject_Str -#endif -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) - #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) -#else - #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) -#endif -#if CYTHON_COMPILING_IN_CPYTHON - #define __Pyx_PySequence_ListKeepNew(obj)\ - (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj)) -#else - #define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type) -#endif -#if PY_VERSION_HEX >= 0x030900A4 - #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) - #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) -#else - #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) - #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) -#endif -#if CYTHON_ASSUME_SAFE_MACROS - #define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i) - #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) - #define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0)) - #define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0)) - #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o) - #define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o) - #define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o) - #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o) - #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o) -#else - #define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i) - #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) - #define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v) - #define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v) - #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o) - #define __Pyx_PyList_GET_SIZE(o) PyList_Size(o) - #define __Pyx_PySet_GET_SIZE(o) PySet_Size(o) - #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o) - #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o) -#endif -#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) { - PyObject *module = PyImport_AddModule(name); - Py_XINCREF(module); - return module; - } -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define __Pyx_Py3Int_Check(op) PyLong_Check(op) - #define __Pyx_Py3Int_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#else - #define __Pyx_Py3Int_Check(op) (PyLong_Check(op) || PyInt_Check(op)) - #define __Pyx_Py3Int_CheckExact(op) (PyLong_CheckExact(op) || PyInt_CheckExact(op)) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif -#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY - #ifndef PyUnicode_InternFromString - #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) - #endif -#endif -#if PY_VERSION_HEX < 0x030200A4 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t -#endif -#if CYTHON_USE_ASYNC_SLOTS - #if PY_VERSION_HEX >= 0x030500B1 - #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods - #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) - #else - #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) - #endif -#else - #define __Pyx_PyType_AsAsync(obj) NULL -#endif -#ifndef __Pyx_PyAsyncMethodsStruct - typedef struct { - unaryfunc am_await; - unaryfunc am_aiter; - unaryfunc am_anext; - } __Pyx_PyAsyncMethodsStruct; -#endif - -#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS) - #if !defined(_USE_MATH_DEFINES) - #define _USE_MATH_DEFINES - #endif -#endif -#include -#ifdef NAN -#define __PYX_NAN() ((float) NAN) -#else -static CYTHON_INLINE float __PYX_NAN() { - float value; - memset(&value, 0xFF, sizeof(value)); - return value; -} -#endif -#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) -#define __Pyx_truncl trunc -#else -#define __Pyx_truncl truncl -#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; } -#define __PYX_ERR(f_index, lineno, Ln_error) \ - { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } - -#ifdef CYTHON_EXTERN_C - #undef __PYX_EXTERN_C - #define __PYX_EXTERN_C CYTHON_EXTERN_C -#elif defined(__PYX_EXTERN_C) - #ifdef _MSC_VER - #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.") - #else - #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead. - #endif -#else - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#define __PYX_HAVE__buttons -#define __PYX_HAVE_API__buttons -/* Early includes */ -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) -#define CYTHON_WITHOUT_ASSERTIONS -#endif - -typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; - -#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) -#define __PYX_DEFAULT_STRING_ENCODING "" -#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString -#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#define __Pyx_uchar_cast(c) ((unsigned char)c) -#define __Pyx_long_cast(x) ((long)x) -#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ - (sizeof(type) < sizeof(Py_ssize_t)) ||\ - (sizeof(type) > sizeof(Py_ssize_t) &&\ - likely(v < (type)PY_SSIZE_T_MAX ||\ - v == (type)PY_SSIZE_T_MAX) &&\ - (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ - v == (type)PY_SSIZE_T_MIN))) ||\ - (sizeof(type) == sizeof(Py_ssize_t) &&\ - (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ - v == (type)PY_SSIZE_T_MAX))) ) -static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { - return (size_t) i < (size_t) limit; -} -#if defined (__cplusplus) && __cplusplus >= 201103L - #include - #define __Pyx_sst_abs(value) std::abs(value) -#elif SIZEOF_INT >= SIZEOF_SIZE_T - #define __Pyx_sst_abs(value) abs(value) -#elif SIZEOF_LONG >= SIZEOF_SIZE_T - #define __Pyx_sst_abs(value) labs(value) -#elif defined (_MSC_VER) - #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) -#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define __Pyx_sst_abs(value) llabs(value) -#elif defined (__GNUC__) - #define __Pyx_sst_abs(value) __builtin_llabs(value) -#else - #define __Pyx_sst_abs(value) ((value<0) ? -value : value) -#endif -static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s); -static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); -static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*); -#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#else - #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize -#endif -#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) -#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) -#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) -#define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o) -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) -#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) -static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); -#define __Pyx_PySequence_Tuple(obj)\ - (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*); -#if CYTHON_ASSUME_SAFE_MACROS -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) -#else -#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) -#endif -#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) -#else -#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) -#endif -#if CYTHON_USE_PYLONG_INTERNALS - #if PY_VERSION_HEX >= 0x030C00A7 - #ifndef _PyLong_SIGN_MASK - #define _PyLong_SIGN_MASK 3 - #endif - #ifndef _PyLong_NON_SIZE_BITS - #define _PyLong_NON_SIZE_BITS 3 - #endif - #define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK) - #define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0) - #define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x)) - #define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1) - #define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0) - #define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0]) - #define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS)) - #define __Pyx_PyLong_SignedDigitCount(x)\ - ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x)) - #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue) - #define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x) - #define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x) - #else - #define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS)) - #define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0]) - #endif - typedef Py_ssize_t __Pyx_compact_pylong; - typedef size_t __Pyx_compact_upylong; - #else - #define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0) - #define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0) - #define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0) - #define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0) - #define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0]) - #define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x)) - #define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x) - #define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1) - #define __Pyx_PyLong_CompactValue(x)\ - ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0])) - typedef sdigit __Pyx_compact_pylong; - typedef digit __Pyx_compact_upylong; - #endif - #if PY_VERSION_HEX >= 0x030C00A5 - #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit) - #else - #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit) - #endif -#endif -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -#include -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys; - PyObject* default_encoding = NULL; - PyObject* ascii_chars_u = NULL; - PyObject* ascii_chars_b = NULL; - const char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (!sys) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); - Py_DECREF(sys); - if (!default_encoding) goto bad; - default_encoding_c = PyBytes_AsString(default_encoding); - if (!default_encoding_c) goto bad; - if (strcmp(default_encoding_c, "ascii") == 0) { - __Pyx_sys_getdefaultencoding_not_ascii = 0; - } else { - char ascii_chars[128]; - int c; - for (c = 0; c < 128; c++) { - ascii_chars[c] = (char) c; - } - __Pyx_sys_getdefaultencoding_not_ascii = 1; - ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (!ascii_chars_u) goto bad; - ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { - PyErr_Format( - PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", - default_encoding_c); - goto bad; - } - Py_DECREF(ascii_chars_u); - Py_DECREF(ascii_chars_b); - } - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return -1; -} -#endif -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) -#else -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -#include -static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys; - PyObject* default_encoding = NULL; - char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (!sys) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - Py_DECREF(sys); - if (!default_encoding) goto bad; - default_encoding_c = PyBytes_AsString(default_encoding); - if (!default_encoding_c) goto bad; - __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); - if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; - strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(default_encoding); - return -1; -} -#endif -#endif - - -/* Test for GCC > 2.95 */ -#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) -#else /* !__GNUC__ or GCC < 2.95 */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ -static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } - -#if !CYTHON_USE_MODULE_STATE -static PyObject *__pyx_m = NULL; -#endif -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm = __FILE__; -static const char *__pyx_filename; - -/* #### Code section: filename_table ### */ - -static const char *__pyx_f[] = { - "scripts/scriptscython/buttons.pyx", -}; -/* #### Code section: utility_code_proto_before_types ### */ -/* ForceInitThreads.proto */ -#ifndef __PYX_FORCE_INIT_THREADS - #define __PYX_FORCE_INIT_THREADS 0 -#endif - -/* #### Code section: numeric_typedefs ### */ -/* #### Code section: complex_type_declarations ### */ -/* #### Code section: type_declarations ### */ - -/*--- Type declarations ---*/ -struct __pyx_defaults; -typedef struct __pyx_defaults __pyx_defaults; -struct __pyx_defaults { - PyObject *__pyx_arg_scale; - PyObject *__pyx_arg_pos; -}; -/* #### Code section: utility_code_proto ### */ - -/* --- Runtime support code (head) --- */ -/* Refnanny.proto */ -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, Py_ssize_t); - void (*DECREF)(void*, PyObject*, Py_ssize_t); - void (*GOTREF)(void*, PyObject*, Py_ssize_t); - void (*GIVEREF)(void*, PyObject*, Py_ssize_t); - void* (*SetupContext)(const char*, Py_ssize_t, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; -#ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil)\ - if (acquire_gil) {\ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ - PyGILState_Release(__pyx_gilstate_save);\ - } else {\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\ - } - #define __Pyx_RefNannyFinishContextNogil() {\ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ - __Pyx_RefNannyFinishContext();\ - PyGILState_Release(__pyx_gilstate_save);\ - } -#else - #define __Pyx_RefNannySetupContext(name, acquire_gil)\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__)) - #define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext() -#endif - #define __Pyx_RefNannyFinishContextNogil() {\ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ - __Pyx_RefNannyFinishContext();\ - PyGILState_Release(__pyx_gilstate_save);\ - } - #define __Pyx_RefNannyFinishContext()\ - __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__)) - #define __Pyx_XINCREF(r) do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name, acquire_gil) - #define __Pyx_RefNannyFinishContextNogil() - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif -#define __Pyx_Py_XDECREF_SET(r, v) do {\ - PyObject *tmp = (PyObject *) r;\ - r = v; Py_XDECREF(tmp);\ - } while (0) -#define __Pyx_XDECREF_SET(r, v) do {\ - PyObject *tmp = (PyObject *) r;\ - r = v; __Pyx_XDECREF(tmp);\ - } while (0) -#define __Pyx_DECREF_SET(r, v) do {\ - PyObject *tmp = (PyObject *) r;\ - r = v; __Pyx_DECREF(tmp);\ - } while (0) -#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) -#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) - -/* TupleAndListFromArray.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n); -static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n); -#endif - -/* IncludeStringH.proto */ -#include - -/* BytesEquals.proto */ -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); - -/* UnicodeEquals.proto */ -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); - -/* fastcall.proto */ -#if CYTHON_AVOID_BORROWED_REFS - #define __Pyx_Arg_VARARGS(args, i) PySequence_GetItem(args, i) -#elif CYTHON_ASSUME_SAFE_MACROS - #define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i) -#else - #define __Pyx_Arg_VARARGS(args, i) PyTuple_GetItem(args, i) -#endif -#if CYTHON_AVOID_BORROWED_REFS - #define __Pyx_Arg_NewRef_VARARGS(arg) __Pyx_NewRef(arg) - #define __Pyx_Arg_XDECREF_VARARGS(arg) Py_XDECREF(arg) -#else - #define __Pyx_Arg_NewRef_VARARGS(arg) arg - #define __Pyx_Arg_XDECREF_VARARGS(arg) -#endif -#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds) -#define __Pyx_KwValues_VARARGS(args, nargs) NULL -#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s) -#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw) -#if CYTHON_METH_FASTCALL - #define __Pyx_Arg_FASTCALL(args, i) args[i] - #define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds) - #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs)) - static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s); -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 - CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues); - #else - #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw) - #endif - #define __Pyx_Arg_NewRef_FASTCALL(arg) arg /* no-op, __Pyx_Arg_FASTCALL is direct and this needs - to have the same reference counting */ - #define __Pyx_Arg_XDECREF_FASTCALL(arg) -#else - #define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS - #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS - #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS - #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS - #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS - #define __Pyx_Arg_NewRef_FASTCALL(arg) __Pyx_Arg_NewRef_VARARGS(arg) - #define __Pyx_Arg_XDECREF_FASTCALL(arg) __Pyx_Arg_XDECREF_VARARGS(arg) -#endif -#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS -#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start) -#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start) -#else -#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop) -#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop) -#endif - -/* RaiseArgTupleInvalid.proto */ -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); - -/* RaiseDoubleKeywords.proto */ -static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); - -/* ParseKeywords.proto */ -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues, - PyObject **argnames[], - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, - const char* function_name); - -/* PyObjectSetAttrStr.proto */ -#if CYTHON_USE_TYPE_SLOTS -#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o, n, NULL) -static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value); -#else -#define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n) -#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) -#endif - -/* PyObjectGetAttrStr.proto */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); -#else -#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) -#endif - -/* PyFunctionFastCall.proto */ -#if CYTHON_FAST_PYCALL -#if !CYTHON_VECTORCALL -#define __Pyx_PyFunction_FastCall(func, args, nargs)\ - __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) -static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); -#endif -#define __Pyx_BUILD_ASSERT_EXPR(cond)\ - (sizeof(char [1 - 2*!(cond)]) - 1) -#ifndef Py_MEMBER_SIZE -#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) -#endif -#if !CYTHON_VECTORCALL -#if PY_VERSION_HEX >= 0x03080000 - #include "frameobject.h" -#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API - #ifndef Py_BUILD_CORE - #define Py_BUILD_CORE 1 - #endif - #include "internal/pycore_frame.h" -#endif - #define __Pxy_PyFrame_Initialize_Offsets() - #define __Pyx_PyFrame_GetLocalsplus(frame) ((frame)->f_localsplus) -#else - static size_t __pyx_pyframe_localsplus_offset = 0; - #include "frameobject.h" - #define __Pxy_PyFrame_Initialize_Offsets()\ - ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ - (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) - #define __Pyx_PyFrame_GetLocalsplus(frame)\ - (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) -#endif -#endif -#endif - -/* PyObjectCall.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); -#else -#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) -#endif - -/* PyObjectCallMethO.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); -#endif - -/* PyObjectFastCall.proto */ -#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); - -/* PyErrExceptionMatches.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) -static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); -#else -#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) -#endif - -/* PyThreadStateGet.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; -#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; -#if PY_VERSION_HEX >= 0x030C00A6 -#define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL) -#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL) -#else -#define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL) -#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type) -#endif -#else -#define __Pyx_PyThreadState_declare -#define __Pyx_PyThreadState_assign -#define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL) -#define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred() -#endif - -/* PyErrFetchRestore.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) -#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6 -#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) -#else -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#endif -#else -#define __Pyx_PyErr_Clear() PyErr_Clear() -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) -#endif - -/* PyObjectGetAttrStrNoError.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); - -/* GetBuiltinName.proto */ -static PyObject *__Pyx_GetBuiltinName(PyObject *name); - -/* PyDictVersioning.proto */ -#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS -#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) -#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) -#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ - (version_var) = __PYX_GET_DICT_VERSION(dict);\ - (cache_var) = (value); -#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ - static PY_UINT64_T __pyx_dict_version = 0;\ - static PyObject *__pyx_dict_cached_value = NULL;\ - if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ - (VAR) = __pyx_dict_cached_value;\ - } else {\ - (VAR) = __pyx_dict_cached_value = (LOOKUP);\ - __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ - }\ -} -static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); -static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); -static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); -#else -#define __PYX_GET_DICT_VERSION(dict) (0) -#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) -#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); -#endif - -/* GetModuleGlobalName.proto */ -#if CYTHON_USE_DICT_VERSIONS -#define __Pyx_GetModuleGlobalName(var, name) do {\ - static PY_UINT64_T __pyx_dict_version = 0;\ - static PyObject *__pyx_dict_cached_value = NULL;\ - (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ - (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ - __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ -} while(0) -#define __Pyx_GetModuleGlobalNameUncached(var, name) do {\ - PY_UINT64_T __pyx_dict_version;\ - PyObject *__pyx_dict_cached_value;\ - (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ -} while(0) -static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); -#else -#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) -#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) -static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); -#endif - -/* GetItemInt.proto */ -#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ - (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ - __Pyx_GetItemInt_Generic(o, to_py_func(i)))) -#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ - (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ - (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, - int is_list, int wraparound, int boundscheck); - -/* Import.proto */ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); - -/* ImportDottedModule.proto */ -static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple); -#if PY_MAJOR_VERSION >= 3 -static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple); -#endif - -/* IncludeStructmemberH.proto */ -#include - -/* FixUpExtensionType.proto */ -#if CYTHON_USE_TYPE_SPECS -static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type); -#endif - -/* FetchSharedCythonModule.proto */ -static PyObject *__Pyx_FetchSharedCythonABIModule(void); - -/* FetchCommonType.proto */ -#if !CYTHON_USE_TYPE_SPECS -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); -#else -static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases); -#endif - -/* PyMethodNew.proto */ -#if CYTHON_COMPILING_IN_LIMITED_API -static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { - PyObject *typesModule=NULL, *methodType=NULL, *result=NULL; - CYTHON_UNUSED_VAR(typ); - if (!self) - return __Pyx_NewRef(func); - typesModule = PyImport_ImportModule("types"); - if (!typesModule) return NULL; - methodType = PyObject_GetAttrString(typesModule, "MethodType"); - Py_DECREF(typesModule); - if (!methodType) return NULL; - result = PyObject_CallFunctionObjArgs(methodType, func, self, NULL); - Py_DECREF(methodType); - return result; -} -#elif PY_MAJOR_VERSION >= 3 -static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) { - CYTHON_UNUSED_VAR(typ); - if (!self) - return __Pyx_NewRef(func); - return PyMethod_New(func, self); -} -#else - #define __Pyx_PyMethod_New PyMethod_New -#endif - -/* PyVectorcallFastCallDict.proto */ -#if CYTHON_METH_FASTCALL -static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw); -#endif - -/* CythonFunctionShared.proto */ -#define __Pyx_CyFunction_USED -#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 -#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 -#define __Pyx_CYFUNCTION_CCLASS 0x04 -#define __Pyx_CYFUNCTION_COROUTINE 0x08 -#define __Pyx_CyFunction_GetClosure(f)\ - (((__pyx_CyFunctionObject *) (f))->func_closure) -#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API - #define __Pyx_CyFunction_GetClassObj(f)\ - (((__pyx_CyFunctionObject *) (f))->func_classobj) -#else - #define __Pyx_CyFunction_GetClassObj(f)\ - ((PyObject*) ((PyCMethodObject *) (f))->mm_class) -#endif -#define __Pyx_CyFunction_SetClassObj(f, classobj)\ - __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj)) -#define __Pyx_CyFunction_Defaults(type, f)\ - ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) -#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ - ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) -typedef struct { -#if CYTHON_COMPILING_IN_LIMITED_API - PyObject_HEAD - PyObject *func; -#elif PY_VERSION_HEX < 0x030900B1 - PyCFunctionObject func; -#else - PyCMethodObject func; -#endif -#if CYTHON_BACKPORT_VECTORCALL - __pyx_vectorcallfunc func_vectorcall; -#endif -#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API - PyObject *func_weakreflist; -#endif - PyObject *func_dict; - PyObject *func_name; - PyObject *func_qualname; - PyObject *func_doc; - PyObject *func_globals; - PyObject *func_code; - PyObject *func_closure; -#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API - PyObject *func_classobj; -#endif - void *defaults; - int defaults_pyobjects; - size_t defaults_size; - int flags; - PyObject *defaults_tuple; - PyObject *defaults_kwdict; - PyObject *(*defaults_getter)(PyObject *); - PyObject *func_annotations; - PyObject *func_is_coroutine; -} __pyx_CyFunctionObject; -#undef __Pyx_CyOrPyCFunction_Check -#define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_CyFunctionType) -#define __Pyx_CyOrPyCFunction_Check(obj) __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type) -#define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CyFunctionType) -static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc); -#undef __Pyx_IsSameCFunction -#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCyOrCFunction(func, cfunc) -static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml, - int flags, PyObject* qualname, - PyObject *closure, - PyObject *module, PyObject *globals, - PyObject* code); -static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj); -static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, - size_t size, - int pyobjects); -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, - PyObject *tuple); -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, - PyObject *dict); -static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, - PyObject *dict); -static int __pyx_CyFunction_init(PyObject *module); -#if CYTHON_METH_FASTCALL -static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); -static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); -static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); -static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames); -#if CYTHON_BACKPORT_VECTORCALL -#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall) -#else -#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall) -#endif -#endif - -/* CythonFunction.proto */ -static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, - int flags, PyObject* qualname, - PyObject *closure, - PyObject *module, PyObject *globals, - PyObject* code); - -/* SetNameInClass.proto */ -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000 -#define __Pyx_SetNameInClass(ns, name, value)\ - (likely(PyDict_CheckExact(ns)) ? _PyDict_SetItem_KnownHash(ns, name, value, ((PyASCIIObject *) name)->hash) : PyObject_SetItem(ns, name, value)) -#elif CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_SetNameInClass(ns, name, value)\ - (likely(PyDict_CheckExact(ns)) ? PyDict_SetItem(ns, name, value) : PyObject_SetItem(ns, name, value)) -#else -#define __Pyx_SetNameInClass(ns, name, value) PyObject_SetItem(ns, name, value) -#endif - -/* CalculateMetaclass.proto */ -static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases); - -/* PyObjectCall2Args.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); - -/* PyObjectLookupSpecial.proto */ -#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS -#define __Pyx_PyObject_LookupSpecialNoError(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 0) -#define __Pyx_PyObject_LookupSpecial(obj, attr_name) __Pyx__PyObject_LookupSpecial(obj, attr_name, 1) -static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error); -#else -#define __Pyx_PyObject_LookupSpecialNoError(o,n) __Pyx_PyObject_GetAttrStrNoError(o,n) -#define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n) -#endif - -/* Py3ClassCreate.proto */ -static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname, - PyObject *mkw, PyObject *modname, PyObject *doc); -static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict, - PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); - -/* CLineInTraceback.proto */ -#ifdef CYTHON_CLINE_IN_TRACEBACK -#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) -#else -static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); -#endif - -/* CodeObjectCache.proto */ -#if !CYTHON_COMPILING_IN_LIMITED_API -typedef struct { - PyCodeObject* code_object; - int code_line; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; -}; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); -#endif - -/* AddTraceback.proto */ -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); - -/* GCCDiagnostics.proto */ -#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) -#define __Pyx_HAS_GCC_DIAGNOSTIC -#endif - -/* CIntToPy.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -/* FormatTypeName.proto */ -#if CYTHON_COMPILING_IN_LIMITED_API -typedef PyObject *__Pyx_TypeName; -#define __Pyx_FMT_TYPENAME "%U" -static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp); -#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj) -#else -typedef const char *__Pyx_TypeName; -#define __Pyx_FMT_TYPENAME "%.200s" -#define __Pyx_PyType_GetName(tp) ((tp)->tp_name) -#define __Pyx_DECREF_TypeName(obj) -#endif - -/* CIntFromPy.proto */ -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -/* CIntFromPy.proto */ -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -/* FastTypeChecks.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) -#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2) -static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); -static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b); -static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); -static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); -#else -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2)) -#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) -#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) -#endif -#define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2) -#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) - -/* CheckBinaryVersion.proto */ -static unsigned long __Pyx_get_runtime_version(void); -static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer); - -/* InitStrings.proto */ -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); - -/* #### Code section: module_declarations ### */ - -/* Module declarations from "buttons" */ -/* #### Code section: typeinfo ### */ -/* #### Code section: before_global_var ### */ -#define __Pyx_MODULE_NAME "buttons" -extern int __pyx_module_is_main_buttons; -int __pyx_module_is_main_buttons = 0; - -/* Implementation of "buttons" */ -/* #### Code section: global_var ### */ -/* #### Code section: string_decls ### */ -static const char __pyx_k__2[] = ""; -static const char __pyx_k__3[] = "*"; -static const char __pyx_k__13[] = "?"; -static const char __pyx_k_doc[] = "__doc__"; -static const char __pyx_k_pos[] = "pos"; -static const char __pyx_k_Rect[] = "Rect"; -static const char __pyx_k_dict[] = "__dict__"; -static const char __pyx_k_font[] = "font"; -static const char __pyx_k_game[] = "game"; -static const char __pyx_k_init[] = "__init__"; -static const char __pyx_k_main[] = "__main__"; -static const char __pyx_k_name[] = "__name__"; -static const char __pyx_k_self[] = "self"; -static const char __pyx_k_size[] = "size"; -static const char __pyx_k_spec[] = "__spec__"; -static const char __pyx_k_surf[] = "surf"; -static const char __pyx_k_test[] = "__test__"; -static const char __pyx_k_text[] = "text"; -static const char __pyx_k_scale[] = "scale"; -static const char __pyx_k_super[] = "super"; -static const char __pyx_k_Button[] = "Button"; -static const char __pyx_k_action[] = "action"; -static const char __pyx_k_colour[] = "colour"; -static const char __pyx_k_import[] = "__import__"; -static const char __pyx_k_module[] = "__module__"; -static const char __pyx_k_pygame[] = "pygame"; -static const char __pyx_k_render[] = "render"; -static const char __pyx_k_update[] = "update"; -static const char __pyx_k_buttons[] = "buttons"; -static const char __pyx_k_collide[] = "collide"; -static const char __pyx_k_prepare[] = "__prepare__"; -static const char __pyx_k_get_rect[] = "get_rect"; -static const char __pyx_k_qualname[] = "__qualname__"; -static const char __pyx_k_set_name[] = "__set_name__"; -static const char __pyx_k_metaclass[] = "__metaclass__"; -static const char __pyx_k_fontcolour[] = "fontcolour"; -static const char __pyx_k_mouse_rect[] = "mouse_rect"; -static const char __pyx_k_colliderect[] = "colliderect"; -static const char __pyx_k_is_on_mouse[] = "is_on_mouse"; -static const char __pyx_k_specialtype[] = "specialtype"; -static const char __pyx_k_initializing[] = "_initializing"; -static const char __pyx_k_is_coroutine[] = "_is_coroutine"; -static const char __pyx_k_slider_value[] = "slider_value"; -static const char __pyx_k_Button___init[] = "Button.__init__"; -static const char __pyx_k_Button_render[] = "Button.render"; -static const char __pyx_k_Button_update[] = "Button.update"; -static const char __pyx_k_get_text_size[] = "get_text_size"; -static const char __pyx_k_init_subclass[] = "__init_subclass__"; -static const char __pyx_k_Button_collide[] = "Button.collide"; -static const char __pyx_k_curr_mouse_pos[] = "curr_mouse_pos"; -static const char __pyx_k_Button_get_rect[] = "Button.get_rect"; -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_scripts_scriptscython_buttons_py[] = "scripts/scriptscython/buttons.pyx"; -/* #### Code section: decls ### */ -static PyObject *__pyx_pf_7buttons___defaults__(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_pf_7buttons_6Button___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_game, PyObject *__pyx_v_text, PyObject *__pyx_v_action, PyObject *__pyx_v_font, PyObject *__pyx_v_scale, PyObject *__pyx_v_pos, PyObject *__pyx_v_fontcolour, CYTHON_UNUSED PyObject *__pyx_v_specialtype); /* proto */ -static PyObject *__pyx_pf_7buttons_6Button_2get_rect(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_7buttons_6Button_4collide(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_mouse_rect); /* proto */ -static PyObject *__pyx_pf_7buttons_6Button_6update(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_mouse_rect); /* proto */ -static PyObject *__pyx_pf_7buttons_6Button_8render(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_surf, PyObject *__pyx_v_font); /* proto */ -/* #### Code section: late_includes ### */ -/* #### Code section: module_state ### */ -typedef struct { - PyObject *__pyx_d; - PyObject *__pyx_b; - PyObject *__pyx_cython_runtime; - PyObject *__pyx_empty_tuple; - PyObject *__pyx_empty_bytes; - PyObject *__pyx_empty_unicode; - #ifdef __Pyx_CyFunction_USED - PyTypeObject *__pyx_CyFunctionType; - #endif - #ifdef __Pyx_FusedFunction_USED - PyTypeObject *__pyx_FusedFunctionType; - #endif - #ifdef __Pyx_Generator_USED - PyTypeObject *__pyx_GeneratorType; - #endif - #ifdef __Pyx_IterableCoroutine_USED - PyTypeObject *__pyx_IterableCoroutineType; - #endif - #ifdef __Pyx_Coroutine_USED - PyTypeObject *__pyx_CoroutineAwaitType; - #endif - #ifdef __Pyx_Coroutine_USED - PyTypeObject *__pyx_CoroutineType; - #endif - #if CYTHON_USE_MODULE_STATE - #endif - PyObject *__pyx_n_s_Button; - PyObject *__pyx_n_s_Button___init; - PyObject *__pyx_n_s_Button_collide; - PyObject *__pyx_n_s_Button_get_rect; - PyObject *__pyx_n_s_Button_render; - PyObject *__pyx_n_s_Button_update; - PyObject *__pyx_n_s_Rect; - PyObject *__pyx_n_s__13; - PyObject *__pyx_kp_s__2; - PyObject *__pyx_n_s__3; - PyObject *__pyx_n_s_action; - PyObject *__pyx_n_s_asyncio_coroutines; - PyObject *__pyx_n_s_buttons; - PyObject *__pyx_n_s_cline_in_traceback; - PyObject *__pyx_n_s_collide; - PyObject *__pyx_n_s_colliderect; - PyObject *__pyx_n_s_colour; - PyObject *__pyx_n_s_curr_mouse_pos; - PyObject *__pyx_n_s_dict; - PyObject *__pyx_n_s_doc; - PyObject *__pyx_n_s_font; - PyObject *__pyx_n_s_fontcolour; - PyObject *__pyx_n_s_game; - PyObject *__pyx_n_s_get_rect; - PyObject *__pyx_n_s_get_text_size; - PyObject *__pyx_n_s_import; - PyObject *__pyx_n_s_init; - PyObject *__pyx_n_s_init_subclass; - PyObject *__pyx_n_s_initializing; - PyObject *__pyx_n_s_is_coroutine; - PyObject *__pyx_n_s_is_on_mouse; - PyObject *__pyx_n_s_main; - PyObject *__pyx_n_s_metaclass; - PyObject *__pyx_n_s_module; - PyObject *__pyx_n_s_mouse_rect; - PyObject *__pyx_n_s_name; - PyObject *__pyx_n_s_pos; - PyObject *__pyx_n_s_prepare; - PyObject *__pyx_n_s_pygame; - PyObject *__pyx_n_s_qualname; - PyObject *__pyx_n_s_render; - PyObject *__pyx_n_s_scale; - PyObject *__pyx_kp_s_scripts_scriptscython_buttons_py; - PyObject *__pyx_n_s_self; - PyObject *__pyx_n_s_set_name; - PyObject *__pyx_n_s_size; - PyObject *__pyx_n_s_slider_value; - PyObject *__pyx_n_s_spec; - PyObject *__pyx_n_s_specialtype; - PyObject *__pyx_n_s_super; - PyObject *__pyx_n_s_surf; - PyObject *__pyx_n_s_test; - PyObject *__pyx_n_s_text; - PyObject *__pyx_n_s_update; - PyObject *__pyx_int_0; - PyObject *__pyx_int_1; - PyObject *__pyx_int_255; - PyObject *__pyx_tuple_; - PyObject *__pyx_tuple__4; - PyObject *__pyx_tuple__6; - PyObject *__pyx_tuple__8; - PyObject *__pyx_tuple__11; - PyObject *__pyx_codeobj__5; - PyObject *__pyx_codeobj__7; - PyObject *__pyx_codeobj__9; - PyObject *__pyx_codeobj__10; - PyObject *__pyx_codeobj__12; -} __pyx_mstate; - -#if CYTHON_USE_MODULE_STATE -#ifdef __cplusplus -namespace { - extern struct PyModuleDef __pyx_moduledef; -} /* anonymous namespace */ -#else -static struct PyModuleDef __pyx_moduledef; -#endif - -#define __pyx_mstate(o) ((__pyx_mstate *)__Pyx_PyModule_GetState(o)) - -#define __pyx_mstate_global (__pyx_mstate(PyState_FindModule(&__pyx_moduledef))) - -#define __pyx_m (PyState_FindModule(&__pyx_moduledef)) -#else -static __pyx_mstate __pyx_mstate_global_static = -#ifdef __cplusplus - {}; -#else - {0}; -#endif -static __pyx_mstate *__pyx_mstate_global = &__pyx_mstate_global_static; -#endif -/* #### Code section: module_state_clear ### */ -#if CYTHON_USE_MODULE_STATE -static int __pyx_m_clear(PyObject *m) { - __pyx_mstate *clear_module_state = __pyx_mstate(m); - if (!clear_module_state) return 0; - Py_CLEAR(clear_module_state->__pyx_d); - Py_CLEAR(clear_module_state->__pyx_b); - Py_CLEAR(clear_module_state->__pyx_cython_runtime); - Py_CLEAR(clear_module_state->__pyx_empty_tuple); - Py_CLEAR(clear_module_state->__pyx_empty_bytes); - Py_CLEAR(clear_module_state->__pyx_empty_unicode); - #ifdef __Pyx_CyFunction_USED - Py_CLEAR(clear_module_state->__pyx_CyFunctionType); - #endif - #ifdef __Pyx_FusedFunction_USED - Py_CLEAR(clear_module_state->__pyx_FusedFunctionType); - #endif - Py_CLEAR(clear_module_state->__pyx_n_s_Button); - Py_CLEAR(clear_module_state->__pyx_n_s_Button___init); - Py_CLEAR(clear_module_state->__pyx_n_s_Button_collide); - Py_CLEAR(clear_module_state->__pyx_n_s_Button_get_rect); - Py_CLEAR(clear_module_state->__pyx_n_s_Button_render); - Py_CLEAR(clear_module_state->__pyx_n_s_Button_update); - Py_CLEAR(clear_module_state->__pyx_n_s_Rect); - Py_CLEAR(clear_module_state->__pyx_n_s__13); - Py_CLEAR(clear_module_state->__pyx_kp_s__2); - Py_CLEAR(clear_module_state->__pyx_n_s__3); - Py_CLEAR(clear_module_state->__pyx_n_s_action); - Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines); - Py_CLEAR(clear_module_state->__pyx_n_s_buttons); - Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback); - Py_CLEAR(clear_module_state->__pyx_n_s_collide); - Py_CLEAR(clear_module_state->__pyx_n_s_colliderect); - Py_CLEAR(clear_module_state->__pyx_n_s_colour); - Py_CLEAR(clear_module_state->__pyx_n_s_curr_mouse_pos); - Py_CLEAR(clear_module_state->__pyx_n_s_dict); - Py_CLEAR(clear_module_state->__pyx_n_s_doc); - Py_CLEAR(clear_module_state->__pyx_n_s_font); - Py_CLEAR(clear_module_state->__pyx_n_s_fontcolour); - Py_CLEAR(clear_module_state->__pyx_n_s_game); - Py_CLEAR(clear_module_state->__pyx_n_s_get_rect); - Py_CLEAR(clear_module_state->__pyx_n_s_get_text_size); - Py_CLEAR(clear_module_state->__pyx_n_s_import); - Py_CLEAR(clear_module_state->__pyx_n_s_init); - Py_CLEAR(clear_module_state->__pyx_n_s_init_subclass); - Py_CLEAR(clear_module_state->__pyx_n_s_initializing); - Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine); - Py_CLEAR(clear_module_state->__pyx_n_s_is_on_mouse); - Py_CLEAR(clear_module_state->__pyx_n_s_main); - Py_CLEAR(clear_module_state->__pyx_n_s_metaclass); - Py_CLEAR(clear_module_state->__pyx_n_s_module); - Py_CLEAR(clear_module_state->__pyx_n_s_mouse_rect); - Py_CLEAR(clear_module_state->__pyx_n_s_name); - Py_CLEAR(clear_module_state->__pyx_n_s_pos); - Py_CLEAR(clear_module_state->__pyx_n_s_prepare); - Py_CLEAR(clear_module_state->__pyx_n_s_pygame); - Py_CLEAR(clear_module_state->__pyx_n_s_qualname); - Py_CLEAR(clear_module_state->__pyx_n_s_render); - Py_CLEAR(clear_module_state->__pyx_n_s_scale); - Py_CLEAR(clear_module_state->__pyx_kp_s_scripts_scriptscython_buttons_py); - Py_CLEAR(clear_module_state->__pyx_n_s_self); - Py_CLEAR(clear_module_state->__pyx_n_s_set_name); - Py_CLEAR(clear_module_state->__pyx_n_s_size); - Py_CLEAR(clear_module_state->__pyx_n_s_slider_value); - Py_CLEAR(clear_module_state->__pyx_n_s_spec); - Py_CLEAR(clear_module_state->__pyx_n_s_specialtype); - Py_CLEAR(clear_module_state->__pyx_n_s_super); - Py_CLEAR(clear_module_state->__pyx_n_s_surf); - Py_CLEAR(clear_module_state->__pyx_n_s_test); - Py_CLEAR(clear_module_state->__pyx_n_s_text); - Py_CLEAR(clear_module_state->__pyx_n_s_update); - Py_CLEAR(clear_module_state->__pyx_int_0); - Py_CLEAR(clear_module_state->__pyx_int_1); - Py_CLEAR(clear_module_state->__pyx_int_255); - Py_CLEAR(clear_module_state->__pyx_tuple_); - Py_CLEAR(clear_module_state->__pyx_tuple__4); - Py_CLEAR(clear_module_state->__pyx_tuple__6); - Py_CLEAR(clear_module_state->__pyx_tuple__8); - Py_CLEAR(clear_module_state->__pyx_tuple__11); - Py_CLEAR(clear_module_state->__pyx_codeobj__5); - Py_CLEAR(clear_module_state->__pyx_codeobj__7); - Py_CLEAR(clear_module_state->__pyx_codeobj__9); - Py_CLEAR(clear_module_state->__pyx_codeobj__10); - Py_CLEAR(clear_module_state->__pyx_codeobj__12); - return 0; -} -#endif -/* #### Code section: module_state_traverse ### */ -#if CYTHON_USE_MODULE_STATE -static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { - __pyx_mstate *traverse_module_state = __pyx_mstate(m); - if (!traverse_module_state) return 0; - Py_VISIT(traverse_module_state->__pyx_d); - Py_VISIT(traverse_module_state->__pyx_b); - Py_VISIT(traverse_module_state->__pyx_cython_runtime); - Py_VISIT(traverse_module_state->__pyx_empty_tuple); - Py_VISIT(traverse_module_state->__pyx_empty_bytes); - Py_VISIT(traverse_module_state->__pyx_empty_unicode); - #ifdef __Pyx_CyFunction_USED - Py_VISIT(traverse_module_state->__pyx_CyFunctionType); - #endif - #ifdef __Pyx_FusedFunction_USED - Py_VISIT(traverse_module_state->__pyx_FusedFunctionType); - #endif - Py_VISIT(traverse_module_state->__pyx_n_s_Button); - Py_VISIT(traverse_module_state->__pyx_n_s_Button___init); - Py_VISIT(traverse_module_state->__pyx_n_s_Button_collide); - Py_VISIT(traverse_module_state->__pyx_n_s_Button_get_rect); - Py_VISIT(traverse_module_state->__pyx_n_s_Button_render); - Py_VISIT(traverse_module_state->__pyx_n_s_Button_update); - Py_VISIT(traverse_module_state->__pyx_n_s_Rect); - Py_VISIT(traverse_module_state->__pyx_n_s__13); - Py_VISIT(traverse_module_state->__pyx_kp_s__2); - Py_VISIT(traverse_module_state->__pyx_n_s__3); - Py_VISIT(traverse_module_state->__pyx_n_s_action); - Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines); - Py_VISIT(traverse_module_state->__pyx_n_s_buttons); - Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback); - Py_VISIT(traverse_module_state->__pyx_n_s_collide); - Py_VISIT(traverse_module_state->__pyx_n_s_colliderect); - Py_VISIT(traverse_module_state->__pyx_n_s_colour); - Py_VISIT(traverse_module_state->__pyx_n_s_curr_mouse_pos); - Py_VISIT(traverse_module_state->__pyx_n_s_dict); - Py_VISIT(traverse_module_state->__pyx_n_s_doc); - Py_VISIT(traverse_module_state->__pyx_n_s_font); - Py_VISIT(traverse_module_state->__pyx_n_s_fontcolour); - Py_VISIT(traverse_module_state->__pyx_n_s_game); - Py_VISIT(traverse_module_state->__pyx_n_s_get_rect); - Py_VISIT(traverse_module_state->__pyx_n_s_get_text_size); - Py_VISIT(traverse_module_state->__pyx_n_s_import); - Py_VISIT(traverse_module_state->__pyx_n_s_init); - Py_VISIT(traverse_module_state->__pyx_n_s_init_subclass); - Py_VISIT(traverse_module_state->__pyx_n_s_initializing); - Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine); - Py_VISIT(traverse_module_state->__pyx_n_s_is_on_mouse); - Py_VISIT(traverse_module_state->__pyx_n_s_main); - Py_VISIT(traverse_module_state->__pyx_n_s_metaclass); - Py_VISIT(traverse_module_state->__pyx_n_s_module); - Py_VISIT(traverse_module_state->__pyx_n_s_mouse_rect); - Py_VISIT(traverse_module_state->__pyx_n_s_name); - Py_VISIT(traverse_module_state->__pyx_n_s_pos); - Py_VISIT(traverse_module_state->__pyx_n_s_prepare); - Py_VISIT(traverse_module_state->__pyx_n_s_pygame); - Py_VISIT(traverse_module_state->__pyx_n_s_qualname); - Py_VISIT(traverse_module_state->__pyx_n_s_render); - Py_VISIT(traverse_module_state->__pyx_n_s_scale); - Py_VISIT(traverse_module_state->__pyx_kp_s_scripts_scriptscython_buttons_py); - Py_VISIT(traverse_module_state->__pyx_n_s_self); - Py_VISIT(traverse_module_state->__pyx_n_s_set_name); - Py_VISIT(traverse_module_state->__pyx_n_s_size); - Py_VISIT(traverse_module_state->__pyx_n_s_slider_value); - Py_VISIT(traverse_module_state->__pyx_n_s_spec); - Py_VISIT(traverse_module_state->__pyx_n_s_specialtype); - Py_VISIT(traverse_module_state->__pyx_n_s_super); - Py_VISIT(traverse_module_state->__pyx_n_s_surf); - Py_VISIT(traverse_module_state->__pyx_n_s_test); - Py_VISIT(traverse_module_state->__pyx_n_s_text); - Py_VISIT(traverse_module_state->__pyx_n_s_update); - Py_VISIT(traverse_module_state->__pyx_int_0); - Py_VISIT(traverse_module_state->__pyx_int_1); - Py_VISIT(traverse_module_state->__pyx_int_255); - Py_VISIT(traverse_module_state->__pyx_tuple_); - Py_VISIT(traverse_module_state->__pyx_tuple__4); - Py_VISIT(traverse_module_state->__pyx_tuple__6); - Py_VISIT(traverse_module_state->__pyx_tuple__8); - Py_VISIT(traverse_module_state->__pyx_tuple__11); - Py_VISIT(traverse_module_state->__pyx_codeobj__5); - Py_VISIT(traverse_module_state->__pyx_codeobj__7); - Py_VISIT(traverse_module_state->__pyx_codeobj__9); - Py_VISIT(traverse_module_state->__pyx_codeobj__10); - Py_VISIT(traverse_module_state->__pyx_codeobj__12); - return 0; -} -#endif -/* #### Code section: module_state_defines ### */ -#define __pyx_d __pyx_mstate_global->__pyx_d -#define __pyx_b __pyx_mstate_global->__pyx_b -#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime -#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple -#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes -#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode -#ifdef __Pyx_CyFunction_USED -#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType -#endif -#ifdef __Pyx_FusedFunction_USED -#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType -#endif -#ifdef __Pyx_Generator_USED -#define __pyx_GeneratorType __pyx_mstate_global->__pyx_GeneratorType -#endif -#ifdef __Pyx_IterableCoroutine_USED -#define __pyx_IterableCoroutineType __pyx_mstate_global->__pyx_IterableCoroutineType -#endif -#ifdef __Pyx_Coroutine_USED -#define __pyx_CoroutineAwaitType __pyx_mstate_global->__pyx_CoroutineAwaitType -#endif -#ifdef __Pyx_Coroutine_USED -#define __pyx_CoroutineType __pyx_mstate_global->__pyx_CoroutineType -#endif -#if CYTHON_USE_MODULE_STATE -#endif -#define __pyx_n_s_Button __pyx_mstate_global->__pyx_n_s_Button -#define __pyx_n_s_Button___init __pyx_mstate_global->__pyx_n_s_Button___init -#define __pyx_n_s_Button_collide __pyx_mstate_global->__pyx_n_s_Button_collide -#define __pyx_n_s_Button_get_rect __pyx_mstate_global->__pyx_n_s_Button_get_rect -#define __pyx_n_s_Button_render __pyx_mstate_global->__pyx_n_s_Button_render -#define __pyx_n_s_Button_update __pyx_mstate_global->__pyx_n_s_Button_update -#define __pyx_n_s_Rect __pyx_mstate_global->__pyx_n_s_Rect -#define __pyx_n_s__13 __pyx_mstate_global->__pyx_n_s__13 -#define __pyx_kp_s__2 __pyx_mstate_global->__pyx_kp_s__2 -#define __pyx_n_s__3 __pyx_mstate_global->__pyx_n_s__3 -#define __pyx_n_s_action __pyx_mstate_global->__pyx_n_s_action -#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines -#define __pyx_n_s_buttons __pyx_mstate_global->__pyx_n_s_buttons -#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback -#define __pyx_n_s_collide __pyx_mstate_global->__pyx_n_s_collide -#define __pyx_n_s_colliderect __pyx_mstate_global->__pyx_n_s_colliderect -#define __pyx_n_s_colour __pyx_mstate_global->__pyx_n_s_colour -#define __pyx_n_s_curr_mouse_pos __pyx_mstate_global->__pyx_n_s_curr_mouse_pos -#define __pyx_n_s_dict __pyx_mstate_global->__pyx_n_s_dict -#define __pyx_n_s_doc __pyx_mstate_global->__pyx_n_s_doc -#define __pyx_n_s_font __pyx_mstate_global->__pyx_n_s_font -#define __pyx_n_s_fontcolour __pyx_mstate_global->__pyx_n_s_fontcolour -#define __pyx_n_s_game __pyx_mstate_global->__pyx_n_s_game -#define __pyx_n_s_get_rect __pyx_mstate_global->__pyx_n_s_get_rect -#define __pyx_n_s_get_text_size __pyx_mstate_global->__pyx_n_s_get_text_size -#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import -#define __pyx_n_s_init __pyx_mstate_global->__pyx_n_s_init -#define __pyx_n_s_init_subclass __pyx_mstate_global->__pyx_n_s_init_subclass -#define __pyx_n_s_initializing __pyx_mstate_global->__pyx_n_s_initializing -#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine -#define __pyx_n_s_is_on_mouse __pyx_mstate_global->__pyx_n_s_is_on_mouse -#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main -#define __pyx_n_s_metaclass __pyx_mstate_global->__pyx_n_s_metaclass -#define __pyx_n_s_module __pyx_mstate_global->__pyx_n_s_module -#define __pyx_n_s_mouse_rect __pyx_mstate_global->__pyx_n_s_mouse_rect -#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name -#define __pyx_n_s_pos __pyx_mstate_global->__pyx_n_s_pos -#define __pyx_n_s_prepare __pyx_mstate_global->__pyx_n_s_prepare -#define __pyx_n_s_pygame __pyx_mstate_global->__pyx_n_s_pygame -#define __pyx_n_s_qualname __pyx_mstate_global->__pyx_n_s_qualname -#define __pyx_n_s_render __pyx_mstate_global->__pyx_n_s_render -#define __pyx_n_s_scale __pyx_mstate_global->__pyx_n_s_scale -#define __pyx_kp_s_scripts_scriptscython_buttons_py __pyx_mstate_global->__pyx_kp_s_scripts_scriptscython_buttons_py -#define __pyx_n_s_self __pyx_mstate_global->__pyx_n_s_self -#define __pyx_n_s_set_name __pyx_mstate_global->__pyx_n_s_set_name -#define __pyx_n_s_size __pyx_mstate_global->__pyx_n_s_size -#define __pyx_n_s_slider_value __pyx_mstate_global->__pyx_n_s_slider_value -#define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec -#define __pyx_n_s_specialtype __pyx_mstate_global->__pyx_n_s_specialtype -#define __pyx_n_s_super __pyx_mstate_global->__pyx_n_s_super -#define __pyx_n_s_surf __pyx_mstate_global->__pyx_n_s_surf -#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test -#define __pyx_n_s_text __pyx_mstate_global->__pyx_n_s_text -#define __pyx_n_s_update __pyx_mstate_global->__pyx_n_s_update -#define __pyx_int_0 __pyx_mstate_global->__pyx_int_0 -#define __pyx_int_1 __pyx_mstate_global->__pyx_int_1 -#define __pyx_int_255 __pyx_mstate_global->__pyx_int_255 -#define __pyx_tuple_ __pyx_mstate_global->__pyx_tuple_ -#define __pyx_tuple__4 __pyx_mstate_global->__pyx_tuple__4 -#define __pyx_tuple__6 __pyx_mstate_global->__pyx_tuple__6 -#define __pyx_tuple__8 __pyx_mstate_global->__pyx_tuple__8 -#define __pyx_tuple__11 __pyx_mstate_global->__pyx_tuple__11 -#define __pyx_codeobj__5 __pyx_mstate_global->__pyx_codeobj__5 -#define __pyx_codeobj__7 __pyx_mstate_global->__pyx_codeobj__7 -#define __pyx_codeobj__9 __pyx_mstate_global->__pyx_codeobj__9 -#define __pyx_codeobj__10 __pyx_mstate_global->__pyx_codeobj__10 -#define __pyx_codeobj__12 __pyx_mstate_global->__pyx_codeobj__12 -/* #### Code section: module_code ### */ - -/* "buttons.pyx":7 - * class Button(): - * - * def __init__(self, game, text, action, font, scale=[1, 1], pos=[0, 0], fontcolour=(255, 255, 255), specialtype=''): # <<<<<<<<<<<<<< - * self.slider_value = 0 - * self.fontcolour = fontcolour - */ - -static PyObject *__pyx_pf_7buttons___defaults__(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__defaults__", 1); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_scale); - __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_scale); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_scale)) __PYX_ERR(0, 7, __pyx_L1_error); - __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_pos); - __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_pos); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_pos)) __PYX_ERR(0, 7, __pyx_L1_error); - __Pyx_INCREF(((PyObject*)__pyx_tuple_)); - __Pyx_GIVEREF(((PyObject*)__pyx_tuple_)); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject*)__pyx_tuple_))) __PYX_ERR(0, 7, __pyx_L1_error); - __Pyx_INCREF(((PyObject*)__pyx_kp_s__2)); - __Pyx_GIVEREF(((PyObject*)__pyx_kp_s__2)); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 3, ((PyObject*)__pyx_kp_s__2))) __PYX_ERR(0, 7, __pyx_L1_error); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1)) __PYX_ERR(0, 7, __pyx_L1_error); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None)) __PYX_ERR(0, 7, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("buttons.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_7buttons_6Button_1__init__(PyObject *__pyx_self, -#if CYTHON_METH_FASTCALL -PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds -#else -PyObject *__pyx_args, PyObject *__pyx_kwds -#endif -); /*proto*/ -static PyMethodDef __pyx_mdef_7buttons_6Button_1__init__ = {"__init__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7buttons_6Button_1__init__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_7buttons_6Button_1__init__(PyObject *__pyx_self, -#if CYTHON_METH_FASTCALL -PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds -#else -PyObject *__pyx_args, PyObject *__pyx_kwds -#endif -) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_game = 0; - PyObject *__pyx_v_text = 0; - PyObject *__pyx_v_action = 0; - PyObject *__pyx_v_font = 0; - PyObject *__pyx_v_scale = 0; - PyObject *__pyx_v_pos = 0; - PyObject *__pyx_v_fontcolour = 0; - CYTHON_UNUSED PyObject *__pyx_v_specialtype = 0; - #if !CYTHON_METH_FASTCALL - CYTHON_UNUSED Py_ssize_t __pyx_nargs; - #endif - CYTHON_UNUSED PyObject *const *__pyx_kwvalues; - PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - #if !CYTHON_METH_FASTCALL - #if CYTHON_ASSUME_SAFE_MACROS - __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); - #else - __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; - #endif - #endif - __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); - { - PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_game,&__pyx_n_s_text,&__pyx_n_s_action,&__pyx_n_s_font,&__pyx_n_s_scale,&__pyx_n_s_pos,&__pyx_n_s_fontcolour,&__pyx_n_s_specialtype,0}; - __pyx_defaults *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self); - values[5] = __Pyx_Arg_NewRef_FASTCALL(__pyx_dynamic_args->__pyx_arg_scale); - values[6] = __Pyx_Arg_NewRef_FASTCALL(__pyx_dynamic_args->__pyx_arg_pos); - values[7] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)((PyObject*)__pyx_tuple_))); - values[8] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)((PyObject*)__pyx_kp_s__2))); - if (__pyx_kwds) { - Py_ssize_t kw_args; - switch (__pyx_nargs) { - case 9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); - switch (__pyx_nargs) { - case 0: - if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 7, __pyx_L3_error) - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_game)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 7, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("__init__", 0, 5, 9, 1); __PYX_ERR(0, 7, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_text)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 7, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("__init__", 0, 5, 9, 2); __PYX_ERR(0, 7, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_action)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 7, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("__init__", 0, 5, 9, 3); __PYX_ERR(0, 7, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 4: - if (likely((values[4] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_font)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 7, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("__init__", 0, 5, 9, 4); __PYX_ERR(0, 7, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 5: - if (kw_args > 0) { - PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_scale); - if (value) { values[5] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 7, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 6: - if (kw_args > 0) { - PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pos); - if (value) { values[6] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 7, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 7: - if (kw_args > 0) { - PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fontcolour); - if (value) { values[7] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 7, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 8: - if (kw_args > 0) { - PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_specialtype); - if (value) { values[8] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 7, __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, "__init__") < 0)) __PYX_ERR(0, 7, __pyx_L3_error) - } - } else { - switch (__pyx_nargs) { - case 9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); - values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); - values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); - values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); - values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_game = values[1]; - __pyx_v_text = values[2]; - __pyx_v_action = values[3]; - __pyx_v_font = values[4]; - __pyx_v_scale = values[5]; - __pyx_v_pos = values[6]; - __pyx_v_fontcolour = values[7]; - __pyx_v_specialtype = values[8]; - } - goto __pyx_L6_skip; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 0, 5, 9, __pyx_nargs); __PYX_ERR(0, 7, __pyx_L3_error) - __pyx_L6_skip:; - goto __pyx_L4_argument_unpacking_done; - __pyx_L3_error:; - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); - } - } - __Pyx_AddTraceback("buttons.Button.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_7buttons_6Button___init__(__pyx_self, __pyx_v_self, __pyx_v_game, __pyx_v_text, __pyx_v_action, __pyx_v_font, __pyx_v_scale, __pyx_v_pos, __pyx_v_fontcolour, __pyx_v_specialtype); - - /* function exit code */ - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); - } - } - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7buttons_6Button___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_game, PyObject *__pyx_v_text, PyObject *__pyx_v_action, PyObject *__pyx_v_font, PyObject *__pyx_v_scale, PyObject *__pyx_v_pos, PyObject *__pyx_v_fontcolour, CYTHON_UNUSED PyObject *__pyx_v_specialtype) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 1); - - /* "buttons.pyx":8 - * - * def __init__(self, game, text, action, font, scale=[1, 1], pos=[0, 0], fontcolour=(255, 255, 255), specialtype=''): - * self.slider_value = 0 # <<<<<<<<<<<<<< - * self.fontcolour = fontcolour - * self.text = text - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_slider_value, __pyx_int_0) < 0) __PYX_ERR(0, 8, __pyx_L1_error) - - /* "buttons.pyx":9 - * def __init__(self, game, text, action, font, scale=[1, 1], pos=[0, 0], fontcolour=(255, 255, 255), specialtype=''): - * self.slider_value = 0 - * self.fontcolour = fontcolour # <<<<<<<<<<<<<< - * self.text = text - * self.size = font.get_text_size(self.text, [1, 1]) - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_fontcolour, __pyx_v_fontcolour) < 0) __PYX_ERR(0, 9, __pyx_L1_error) - - /* "buttons.pyx":10 - * self.slider_value = 0 - * self.fontcolour = fontcolour - * self.text = text # <<<<<<<<<<<<<< - * self.size = font.get_text_size(self.text, [1, 1]) - * self.scale = scale - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_text, __pyx_v_text) < 0) __PYX_ERR(0, 10, __pyx_L1_error) - - /* "buttons.pyx":11 - * self.fontcolour = fontcolour - * self.text = text - * self.size = font.get_text_size(self.text, [1, 1]) # <<<<<<<<<<<<<< - * self.scale = scale - * self.pos = pos - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_font, __pyx_n_s_get_text_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_text); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 11, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyList_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 11, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_int_1); - __Pyx_GIVEREF(__pyx_int_1); - if (__Pyx_PyList_SET_ITEM(__pyx_t_4, 0, __pyx_int_1)) __PYX_ERR(0, 11, __pyx_L1_error); - __Pyx_INCREF(__pyx_int_1); - __Pyx_GIVEREF(__pyx_int_1); - if (__Pyx_PyList_SET_ITEM(__pyx_t_4, 1, __pyx_int_1)) __PYX_ERR(0, 11, __pyx_L1_error); - __pyx_t_5 = NULL; - __pyx_t_6 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - __pyx_t_6 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_3, __pyx_t_4}; - __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6); - __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, 11, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_size, __pyx_t_1) < 0) __PYX_ERR(0, 11, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "buttons.pyx":12 - * self.text = text - * self.size = font.get_text_size(self.text, [1, 1]) - * self.scale = scale # <<<<<<<<<<<<<< - * self.pos = pos - * self.is_on_mouse = False - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_scale, __pyx_v_scale) < 0) __PYX_ERR(0, 12, __pyx_L1_error) - - /* "buttons.pyx":13 - * self.size = font.get_text_size(self.text, [1, 1]) - * self.scale = scale - * self.pos = pos # <<<<<<<<<<<<<< - * self.is_on_mouse = False - * self.game = game - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_pos, __pyx_v_pos) < 0) __PYX_ERR(0, 13, __pyx_L1_error) - - /* "buttons.pyx":14 - * self.scale = scale - * self.pos = pos - * self.is_on_mouse = False # <<<<<<<<<<<<<< - * self.game = game - * self.action = action - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_is_on_mouse, Py_False) < 0) __PYX_ERR(0, 14, __pyx_L1_error) - - /* "buttons.pyx":15 - * self.pos = pos - * self.is_on_mouse = False - * self.game = game # <<<<<<<<<<<<<< - * self.action = action - * self.curr_mouse_pos = [0, 0] - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_game, __pyx_v_game) < 0) __PYX_ERR(0, 15, __pyx_L1_error) - - /* "buttons.pyx":16 - * self.is_on_mouse = False - * self.game = game - * self.action = action # <<<<<<<<<<<<<< - * self.curr_mouse_pos = [0, 0] - * - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_action, __pyx_v_action) < 0) __PYX_ERR(0, 16, __pyx_L1_error) - - /* "buttons.pyx":17 - * self.game = game - * self.action = action - * self.curr_mouse_pos = [0, 0] # <<<<<<<<<<<<<< - * - * def get_rect(self): - */ - __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 17, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_int_0); - __Pyx_GIVEREF(__pyx_int_0); - if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_int_0)) __PYX_ERR(0, 17, __pyx_L1_error); - __Pyx_INCREF(__pyx_int_0); - __Pyx_GIVEREF(__pyx_int_0); - if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 1, __pyx_int_0)) __PYX_ERR(0, 17, __pyx_L1_error); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_curr_mouse_pos, __pyx_t_1) < 0) __PYX_ERR(0, 17, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "buttons.pyx":7 - * class Button(): - * - * def __init__(self, game, text, action, font, scale=[1, 1], pos=[0, 0], fontcolour=(255, 255, 255), specialtype=''): # <<<<<<<<<<<<<< - * self.slider_value = 0 - * self.fontcolour = fontcolour - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("buttons.Button.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "buttons.pyx":19 - * self.curr_mouse_pos = [0, 0] - * - * def get_rect(self): # <<<<<<<<<<<<<< - * return pygame.Rect(self.pos[0], self.pos[1], self.size[0] * self.scale[0], self.size[1] * self.scale[1]) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7buttons_6Button_3get_rect(PyObject *__pyx_self, -#if CYTHON_METH_FASTCALL -PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds -#else -PyObject *__pyx_args, PyObject *__pyx_kwds -#endif -); /*proto*/ -static PyMethodDef __pyx_mdef_7buttons_6Button_3get_rect = {"get_rect", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7buttons_6Button_3get_rect, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_7buttons_6Button_3get_rect(PyObject *__pyx_self, -#if CYTHON_METH_FASTCALL -PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds -#else -PyObject *__pyx_args, PyObject *__pyx_kwds -#endif -) { - PyObject *__pyx_v_self = 0; - #if !CYTHON_METH_FASTCALL - CYTHON_UNUSED Py_ssize_t __pyx_nargs; - #endif - CYTHON_UNUSED PyObject *const *__pyx_kwvalues; - PyObject* values[1] = {0}; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("get_rect (wrapper)", 0); - #if !CYTHON_METH_FASTCALL - #if CYTHON_ASSUME_SAFE_MACROS - __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); - #else - __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; - #endif - #endif - __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); - { - PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0}; - if (__pyx_kwds) { - Py_ssize_t kw_args; - switch (__pyx_nargs) { - case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); - switch (__pyx_nargs) { - case 0: - if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 19, __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_rect") < 0)) __PYX_ERR(0, 19, __pyx_L3_error) - } - } else if (unlikely(__pyx_nargs != 1)) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - } - __pyx_v_self = values[0]; - } - goto __pyx_L6_skip; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("get_rect", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 19, __pyx_L3_error) - __pyx_L6_skip:; - goto __pyx_L4_argument_unpacking_done; - __pyx_L3_error:; - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); - } - } - __Pyx_AddTraceback("buttons.Button.get_rect", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_7buttons_6Button_2get_rect(__pyx_self, __pyx_v_self); - - /* function exit code */ - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); - } - } - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7buttons_6Button_2get_rect(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("get_rect", 1); - - /* "buttons.pyx":20 - * - * def get_rect(self): - * return pygame.Rect(self.pos[0], self.pos[1], self.size[0] * self.scale[0], self.size[1] * self.scale[1]) # <<<<<<<<<<<<<< - * - * def collide(self, mouse_rect): - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_Rect); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_pos); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_pos); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_2, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_scale); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyNumber_Multiply(__pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_size); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_7, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_scale); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_GetItemInt(__pyx_t_7, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_7 = PyNumber_Multiply(__pyx_t_6, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = NULL; - __pyx_t_9 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_9 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[5] = {__pyx_t_8, __pyx_t_4, __pyx_t_5, __pyx_t_2, __pyx_t_7}; - __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_9, 4+__pyx_t_9); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "buttons.pyx":19 - * self.curr_mouse_pos = [0, 0] - * - * def get_rect(self): # <<<<<<<<<<<<<< - * return pygame.Rect(self.pos[0], self.pos[1], self.size[0] * self.scale[0], self.size[1] * self.scale[1]) - * - */ - - /* 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); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("buttons.Button.get_rect", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "buttons.pyx":22 - * return pygame.Rect(self.pos[0], self.pos[1], self.size[0] * self.scale[0], self.size[1] * self.scale[1]) - * - * def collide(self, mouse_rect): # <<<<<<<<<<<<<< - * if self.get_rect().colliderect(mouse_rect): - * return True - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7buttons_6Button_5collide(PyObject *__pyx_self, -#if CYTHON_METH_FASTCALL -PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds -#else -PyObject *__pyx_args, PyObject *__pyx_kwds -#endif -); /*proto*/ -static PyMethodDef __pyx_mdef_7buttons_6Button_5collide = {"collide", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7buttons_6Button_5collide, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_7buttons_6Button_5collide(PyObject *__pyx_self, -#if CYTHON_METH_FASTCALL -PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds -#else -PyObject *__pyx_args, PyObject *__pyx_kwds -#endif -) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_mouse_rect = 0; - #if !CYTHON_METH_FASTCALL - CYTHON_UNUSED Py_ssize_t __pyx_nargs; - #endif - CYTHON_UNUSED PyObject *const *__pyx_kwvalues; - PyObject* values[2] = {0,0}; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("collide (wrapper)", 0); - #if !CYTHON_METH_FASTCALL - #if CYTHON_ASSUME_SAFE_MACROS - __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); - #else - __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; - #endif - #endif - __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); - { - PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_mouse_rect,0}; - if (__pyx_kwds) { - Py_ssize_t kw_args; - switch (__pyx_nargs) { - case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); - switch (__pyx_nargs) { - case 0: - if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 22, __pyx_L3_error) - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mouse_rect)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 22, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("collide", 1, 2, 2, 1); __PYX_ERR(0, 22, __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, "collide") < 0)) __PYX_ERR(0, 22, __pyx_L3_error) - } - } else if (unlikely(__pyx_nargs != 2)) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_mouse_rect = values[1]; - } - goto __pyx_L6_skip; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("collide", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 22, __pyx_L3_error) - __pyx_L6_skip:; - goto __pyx_L4_argument_unpacking_done; - __pyx_L3_error:; - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); - } - } - __Pyx_AddTraceback("buttons.Button.collide", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_7buttons_6Button_4collide(__pyx_self, __pyx_v_self, __pyx_v_mouse_rect); - - /* function exit code */ - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); - } - } - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7buttons_6Button_4collide(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_mouse_rect) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - int __pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("collide", 1); - - /* "buttons.pyx":23 - * - * def collide(self, mouse_rect): - * if self.get_rect().colliderect(mouse_rect): # <<<<<<<<<<<<<< - * return True - * else: - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_get_rect); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 23, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = NULL; - __pyx_t_5 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(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, NULL}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 23, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_colliderect); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 23, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = NULL; - __pyx_t_5 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_5 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_mouse_rect}; - __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 23, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 23, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_6) { - - /* "buttons.pyx":24 - * def collide(self, mouse_rect): - * if self.get_rect().colliderect(mouse_rect): - * return True # <<<<<<<<<<<<<< - * else: - * return False - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L0; - - /* "buttons.pyx":23 - * - * def collide(self, mouse_rect): - * if self.get_rect().colliderect(mouse_rect): # <<<<<<<<<<<<<< - * return True - * else: - */ - } - - /* "buttons.pyx":26 - * return True - * else: - * return False # <<<<<<<<<<<<<< - * - * def update(self, mouse_rect): - */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_False); - __pyx_r = Py_False; - goto __pyx_L0; - } - - /* "buttons.pyx":22 - * return pygame.Rect(self.pos[0], self.pos[1], self.size[0] * self.scale[0], self.size[1] * self.scale[1]) - * - * def collide(self, mouse_rect): # <<<<<<<<<<<<<< - * if self.get_rect().colliderect(mouse_rect): - * return True - */ - - /* 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_AddTraceback("buttons.Button.collide", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "buttons.pyx":28 - * return False - * - * def update(self, mouse_rect): # <<<<<<<<<<<<<< - * - * if self.collide(mouse_rect): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7buttons_6Button_7update(PyObject *__pyx_self, -#if CYTHON_METH_FASTCALL -PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds -#else -PyObject *__pyx_args, PyObject *__pyx_kwds -#endif -); /*proto*/ -static PyMethodDef __pyx_mdef_7buttons_6Button_7update = {"update", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7buttons_6Button_7update, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_7buttons_6Button_7update(PyObject *__pyx_self, -#if CYTHON_METH_FASTCALL -PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds -#else -PyObject *__pyx_args, PyObject *__pyx_kwds -#endif -) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_mouse_rect = 0; - #if !CYTHON_METH_FASTCALL - CYTHON_UNUSED Py_ssize_t __pyx_nargs; - #endif - CYTHON_UNUSED PyObject *const *__pyx_kwvalues; - PyObject* values[2] = {0,0}; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("update (wrapper)", 0); - #if !CYTHON_METH_FASTCALL - #if CYTHON_ASSUME_SAFE_MACROS - __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); - #else - __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; - #endif - #endif - __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); - { - PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_mouse_rect,0}; - if (__pyx_kwds) { - Py_ssize_t kw_args; - switch (__pyx_nargs) { - case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); - switch (__pyx_nargs) { - case 0: - if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 28, __pyx_L3_error) - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mouse_rect)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 28, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("update", 1, 2, 2, 1); __PYX_ERR(0, 28, __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, "update") < 0)) __PYX_ERR(0, 28, __pyx_L3_error) - } - } else if (unlikely(__pyx_nargs != 2)) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_mouse_rect = values[1]; - } - goto __pyx_L6_skip; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("update", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 28, __pyx_L3_error) - __pyx_L6_skip:; - goto __pyx_L4_argument_unpacking_done; - __pyx_L3_error:; - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); - } - } - __Pyx_AddTraceback("buttons.Button.update", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_7buttons_6Button_6update(__pyx_self, __pyx_v_self, __pyx_v_mouse_rect); - - /* function exit code */ - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); - } - } - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7buttons_6Button_6update(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_mouse_rect) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - int __pyx_t_5; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("update", 1); - - /* "buttons.pyx":30 - * def update(self, mouse_rect): - * - * if self.collide(mouse_rect): # <<<<<<<<<<<<<< - * return True - * def render(self, surf, font): - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_collide); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 30, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = NULL; - __pyx_t_4 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - __pyx_t_4 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_mouse_rect}; - __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 30, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 30, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_5) { - - /* "buttons.pyx":31 - * - * if self.collide(mouse_rect): - * return True # <<<<<<<<<<<<<< - * def render(self, surf, font): - * font.render(surf, self.text, self.pos, scale=self.scale, colour=self.fontcolour) - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(Py_True); - __pyx_r = Py_True; - goto __pyx_L0; - - /* "buttons.pyx":30 - * def update(self, mouse_rect): - * - * if self.collide(mouse_rect): # <<<<<<<<<<<<<< - * return True - * def render(self, surf, font): - */ - } - - /* "buttons.pyx":28 - * return False - * - * def update(self, mouse_rect): # <<<<<<<<<<<<<< - * - * if self.collide(mouse_rect): - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("buttons.Button.update", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "buttons.pyx":32 - * if self.collide(mouse_rect): - * return True - * def render(self, surf, font): # <<<<<<<<<<<<<< - * font.render(surf, self.text, self.pos, scale=self.scale, colour=self.fontcolour) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7buttons_6Button_9render(PyObject *__pyx_self, -#if CYTHON_METH_FASTCALL -PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds -#else -PyObject *__pyx_args, PyObject *__pyx_kwds -#endif -); /*proto*/ -static PyMethodDef __pyx_mdef_7buttons_6Button_9render = {"render", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7buttons_6Button_9render, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_7buttons_6Button_9render(PyObject *__pyx_self, -#if CYTHON_METH_FASTCALL -PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds -#else -PyObject *__pyx_args, PyObject *__pyx_kwds -#endif -) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_surf = 0; - PyObject *__pyx_v_font = 0; - #if !CYTHON_METH_FASTCALL - CYTHON_UNUSED Py_ssize_t __pyx_nargs; - #endif - CYTHON_UNUSED PyObject *const *__pyx_kwvalues; - PyObject* values[3] = {0,0,0}; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("render (wrapper)", 0); - #if !CYTHON_METH_FASTCALL - #if CYTHON_ASSUME_SAFE_MACROS - __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); - #else - __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; - #endif - #endif - __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); - { - PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_surf,&__pyx_n_s_font,0}; - if (__pyx_kwds) { - Py_ssize_t kw_args; - switch (__pyx_nargs) { - case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); - switch (__pyx_nargs) { - case 0: - if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 32, __pyx_L3_error) - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_surf)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 32, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("render", 1, 3, 3, 1); __PYX_ERR(0, 32, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_font)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 32, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("render", 1, 3, 3, 2); __PYX_ERR(0, 32, __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, "render") < 0)) __PYX_ERR(0, 32, __pyx_L3_error) - } - } else if (unlikely(__pyx_nargs != 3)) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); - values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); - } - __pyx_v_self = values[0]; - __pyx_v_surf = values[1]; - __pyx_v_font = values[2]; - } - goto __pyx_L6_skip; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("render", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 32, __pyx_L3_error) - __pyx_L6_skip:; - goto __pyx_L4_argument_unpacking_done; - __pyx_L3_error:; - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); - } - } - __Pyx_AddTraceback("buttons.Button.render", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_7buttons_6Button_8render(__pyx_self, __pyx_v_self, __pyx_v_surf, __pyx_v_font); - - /* function exit code */ - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); - } - } - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7buttons_6Button_8render(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_surf, PyObject *__pyx_v_font) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("render", 1); - - /* "buttons.pyx":33 - * return True - * def render(self, surf, font): - * font.render(surf, self.text, self.pos, scale=self.scale, colour=self.fontcolour) # <<<<<<<<<<<<<< - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_font, __pyx_n_s_render); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 33, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_text); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 33, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_pos); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 33, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 33, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_v_surf); - __Pyx_GIVEREF(__pyx_v_surf); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_surf)) __PYX_ERR(0, 33, __pyx_L1_error); - __Pyx_GIVEREF(__pyx_t_2); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2)) __PYX_ERR(0, 33, __pyx_L1_error); - __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3)) __PYX_ERR(0, 33, __pyx_L1_error); - __pyx_t_2 = 0; - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 33, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_scale); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 33, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_scale, __pyx_t_2) < 0) __PYX_ERR(0, 33, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_fontcolour); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 33, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_colour, __pyx_t_2) < 0) __PYX_ERR(0, 33, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 33, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "buttons.pyx":32 - * if self.collide(mouse_rect): - * return True - * def render(self, surf, font): # <<<<<<<<<<<<<< - * font.render(surf, self.text, self.pos, scale=self.scale, colour=self.fontcolour) - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("buttons.Button.render", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; -#ifndef CYTHON_SMALL_CODE -#if defined(__clang__) - #define CYTHON_SMALL_CODE -#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) - #define CYTHON_SMALL_CODE __attribute__((cold)) -#else - #define CYTHON_SMALL_CODE -#endif -#endif -/* #### Code section: pystring_table ### */ - -static int __Pyx_CreateStringTabAndInitStrings(void) { - __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_n_s_Button, __pyx_k_Button, sizeof(__pyx_k_Button), 0, 0, 1, 1}, - {&__pyx_n_s_Button___init, __pyx_k_Button___init, sizeof(__pyx_k_Button___init), 0, 0, 1, 1}, - {&__pyx_n_s_Button_collide, __pyx_k_Button_collide, sizeof(__pyx_k_Button_collide), 0, 0, 1, 1}, - {&__pyx_n_s_Button_get_rect, __pyx_k_Button_get_rect, sizeof(__pyx_k_Button_get_rect), 0, 0, 1, 1}, - {&__pyx_n_s_Button_render, __pyx_k_Button_render, sizeof(__pyx_k_Button_render), 0, 0, 1, 1}, - {&__pyx_n_s_Button_update, __pyx_k_Button_update, sizeof(__pyx_k_Button_update), 0, 0, 1, 1}, - {&__pyx_n_s_Rect, __pyx_k_Rect, sizeof(__pyx_k_Rect), 0, 0, 1, 1}, - {&__pyx_n_s__13, __pyx_k__13, sizeof(__pyx_k__13), 0, 0, 1, 1}, - {&__pyx_kp_s__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 0, 1, 0}, - {&__pyx_n_s__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 0, 1, 1}, - {&__pyx_n_s_action, __pyx_k_action, sizeof(__pyx_k_action), 0, 0, 1, 1}, - {&__pyx_n_s_asyncio_coroutines, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1}, - {&__pyx_n_s_buttons, __pyx_k_buttons, sizeof(__pyx_k_buttons), 0, 0, 1, 1}, - {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, - {&__pyx_n_s_collide, __pyx_k_collide, sizeof(__pyx_k_collide), 0, 0, 1, 1}, - {&__pyx_n_s_colliderect, __pyx_k_colliderect, sizeof(__pyx_k_colliderect), 0, 0, 1, 1}, - {&__pyx_n_s_colour, __pyx_k_colour, sizeof(__pyx_k_colour), 0, 0, 1, 1}, - {&__pyx_n_s_curr_mouse_pos, __pyx_k_curr_mouse_pos, sizeof(__pyx_k_curr_mouse_pos), 0, 0, 1, 1}, - {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, - {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, - {&__pyx_n_s_font, __pyx_k_font, sizeof(__pyx_k_font), 0, 0, 1, 1}, - {&__pyx_n_s_fontcolour, __pyx_k_fontcolour, sizeof(__pyx_k_fontcolour), 0, 0, 1, 1}, - {&__pyx_n_s_game, __pyx_k_game, sizeof(__pyx_k_game), 0, 0, 1, 1}, - {&__pyx_n_s_get_rect, __pyx_k_get_rect, sizeof(__pyx_k_get_rect), 0, 0, 1, 1}, - {&__pyx_n_s_get_text_size, __pyx_k_get_text_size, sizeof(__pyx_k_get_text_size), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1}, - {&__pyx_n_s_init_subclass, __pyx_k_init_subclass, sizeof(__pyx_k_init_subclass), 0, 0, 1, 1}, - {&__pyx_n_s_initializing, __pyx_k_initializing, sizeof(__pyx_k_initializing), 0, 0, 1, 1}, - {&__pyx_n_s_is_coroutine, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1}, - {&__pyx_n_s_is_on_mouse, __pyx_k_is_on_mouse, sizeof(__pyx_k_is_on_mouse), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1}, - {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1}, - {&__pyx_n_s_mouse_rect, __pyx_k_mouse_rect, sizeof(__pyx_k_mouse_rect), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_pos, __pyx_k_pos, sizeof(__pyx_k_pos), 0, 0, 1, 1}, - {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1}, - {&__pyx_n_s_pygame, __pyx_k_pygame, sizeof(__pyx_k_pygame), 0, 0, 1, 1}, - {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, - {&__pyx_n_s_render, __pyx_k_render, sizeof(__pyx_k_render), 0, 0, 1, 1}, - {&__pyx_n_s_scale, __pyx_k_scale, sizeof(__pyx_k_scale), 0, 0, 1, 1}, - {&__pyx_kp_s_scripts_scriptscython_buttons_py, __pyx_k_scripts_scriptscython_buttons_py, sizeof(__pyx_k_scripts_scriptscython_buttons_py), 0, 0, 1, 0}, - {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1}, - {&__pyx_n_s_set_name, __pyx_k_set_name, sizeof(__pyx_k_set_name), 0, 0, 1, 1}, - {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1}, - {&__pyx_n_s_slider_value, __pyx_k_slider_value, sizeof(__pyx_k_slider_value), 0, 0, 1, 1}, - {&__pyx_n_s_spec, __pyx_k_spec, sizeof(__pyx_k_spec), 0, 0, 1, 1}, - {&__pyx_n_s_specialtype, __pyx_k_specialtype, sizeof(__pyx_k_specialtype), 0, 0, 1, 1}, - {&__pyx_n_s_super, __pyx_k_super, sizeof(__pyx_k_super), 0, 0, 1, 1}, - {&__pyx_n_s_surf, __pyx_k_surf, sizeof(__pyx_k_surf), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_text, __pyx_k_text, sizeof(__pyx_k_text), 0, 0, 1, 1}, - {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} - }; - return __Pyx_InitStrings(__pyx_string_tab); -} -/* #### Code section: cached_builtins ### */ -static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { - return 0; -} -/* #### Code section: cached_constants ### */ - -static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "buttons.pyx":7 - * class Button(): - * - * def __init__(self, game, text, action, font, scale=[1, 1], pos=[0, 0], fontcolour=(255, 255, 255), specialtype=''): # <<<<<<<<<<<<<< - * self.slider_value = 0 - * self.fontcolour = fontcolour - */ - __pyx_tuple_ = PyTuple_Pack(3, __pyx_int_255, __pyx_int_255, __pyx_int_255); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple_); - __Pyx_GIVEREF(__pyx_tuple_); - __pyx_tuple__4 = PyTuple_Pack(9, __pyx_n_s_self, __pyx_n_s_game, __pyx_n_s_text, __pyx_n_s_action, __pyx_n_s_font, __pyx_n_s_scale, __pyx_n_s_pos, __pyx_n_s_fontcolour, __pyx_n_s_specialtype); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__4); - __Pyx_GIVEREF(__pyx_tuple__4); - __pyx_codeobj__5 = (PyObject*)__Pyx_PyCode_New(9, 0, 0, 9, 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_scripts_scriptscython_buttons_py, __pyx_n_s_init, 7, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__5)) __PYX_ERR(0, 7, __pyx_L1_error) - - /* "buttons.pyx":19 - * self.curr_mouse_pos = [0, 0] - * - * def get_rect(self): # <<<<<<<<<<<<<< - * return pygame.Rect(self.pos[0], self.pos[1], self.size[0] * self.scale[0], self.size[1] * self.scale[1]) - * - */ - __pyx_tuple__6 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 19, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__6); - __Pyx_GIVEREF(__pyx_tuple__6); - __pyx_codeobj__7 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 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_scripts_scriptscython_buttons_py, __pyx_n_s_get_rect, 19, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__7)) __PYX_ERR(0, 19, __pyx_L1_error) - - /* "buttons.pyx":22 - * return pygame.Rect(self.pos[0], self.pos[1], self.size[0] * self.scale[0], self.size[1] * self.scale[1]) - * - * def collide(self, mouse_rect): # <<<<<<<<<<<<<< - * if self.get_rect().colliderect(mouse_rect): - * return True - */ - __pyx_tuple__8 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_mouse_rect); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 22, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__8); - __Pyx_GIVEREF(__pyx_tuple__8); - __pyx_codeobj__9 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 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_scripts_scriptscython_buttons_py, __pyx_n_s_collide, 22, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__9)) __PYX_ERR(0, 22, __pyx_L1_error) - - /* "buttons.pyx":28 - * return False - * - * def update(self, mouse_rect): # <<<<<<<<<<<<<< - * - * if self.collide(mouse_rect): - */ - __pyx_codeobj__10 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 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_scripts_scriptscython_buttons_py, __pyx_n_s_update, 28, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__10)) __PYX_ERR(0, 28, __pyx_L1_error) - - /* "buttons.pyx":32 - * if self.collide(mouse_rect): - * return True - * def render(self, surf, font): # <<<<<<<<<<<<<< - * font.render(surf, self.text, self.pos, scale=self.scale, colour=self.fontcolour) - */ - __pyx_tuple__11 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_surf, __pyx_n_s_font); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 32, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__11); - __Pyx_GIVEREF(__pyx_tuple__11); - __pyx_codeobj__12 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__11, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_scripts_scriptscython_buttons_py, __pyx_n_s_render, 32, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__12)) __PYX_ERR(0, 32, __pyx_L1_error) - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} -/* #### Code section: init_constants ### */ - -static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { - if (__Pyx_CreateStringTabAndInitStrings() < 0) __PYX_ERR(0, 1, __pyx_L1_error); - __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_int_255 = PyInt_FromLong(255); if (unlikely(!__pyx_int_255)) __PYX_ERR(0, 1, __pyx_L1_error) - return 0; - __pyx_L1_error:; - return -1; -} -/* #### Code section: init_globals ### */ - -static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { - return 0; -} -/* #### Code section: init_module ### */ - -static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ - -static int __Pyx_modinit_global_init_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); - /*--- Global init code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_variable_export_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); - /*--- Variable export code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_function_export_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); - /*--- Function export code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_type_init_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); - /*--- Type init code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_type_import_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); - /*--- Type import code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_variable_import_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); - /*--- Variable import code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_function_import_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); - /*--- Function import code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - - -#if PY_MAJOR_VERSION >= 3 -#if CYTHON_PEP489_MULTI_PHASE_INIT -static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ -static int __pyx_pymod_exec_buttons(PyObject* module); /*proto*/ -static PyModuleDef_Slot __pyx_moduledef_slots[] = { - {Py_mod_create, (void*)__pyx_pymod_create}, - {Py_mod_exec, (void*)__pyx_pymod_exec_buttons}, - {0, NULL} -}; -#endif - -#ifdef __cplusplus -namespace { - struct PyModuleDef __pyx_moduledef = - #else - static struct PyModuleDef __pyx_moduledef = - #endif - { - PyModuleDef_HEAD_INIT, - "buttons", - 0, /* m_doc */ - #if CYTHON_PEP489_MULTI_PHASE_INIT - 0, /* m_size */ - #elif CYTHON_USE_MODULE_STATE - sizeof(__pyx_mstate), /* m_size */ - #else - -1, /* m_size */ - #endif - __pyx_methods /* m_methods */, - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_moduledef_slots, /* m_slots */ - #else - NULL, /* m_reload */ - #endif - #if CYTHON_USE_MODULE_STATE - __pyx_m_traverse, /* m_traverse */ - __pyx_m_clear, /* m_clear */ - NULL /* m_free */ - #else - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ - #endif - }; - #ifdef __cplusplus -} /* anonymous namespace */ -#endif -#endif - -#ifndef CYTHON_NO_PYINIT_EXPORT -#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC -#elif PY_MAJOR_VERSION < 3 -#ifdef __cplusplus -#define __Pyx_PyMODINIT_FUNC extern "C" void -#else -#define __Pyx_PyMODINIT_FUNC void -#endif -#else -#ifdef __cplusplus -#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * -#else -#define __Pyx_PyMODINIT_FUNC PyObject * -#endif -#endif - - -#if PY_MAJOR_VERSION < 3 -__Pyx_PyMODINIT_FUNC initbuttons(void) CYTHON_SMALL_CODE; /*proto*/ -__Pyx_PyMODINIT_FUNC initbuttons(void) -#else -__Pyx_PyMODINIT_FUNC PyInit_buttons(void) CYTHON_SMALL_CODE; /*proto*/ -__Pyx_PyMODINIT_FUNC PyInit_buttons(void) -#if CYTHON_PEP489_MULTI_PHASE_INIT -{ - return PyModuleDef_Init(&__pyx_moduledef); -} -static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { - #if PY_VERSION_HEX >= 0x030700A1 - static PY_INT64_T main_interpreter_id = -1; - PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); - if (main_interpreter_id == -1) { - main_interpreter_id = current_id; - return (unlikely(current_id == -1)) ? -1 : 0; - } else if (unlikely(main_interpreter_id != current_id)) - #else - static PyInterpreterState *main_interpreter = NULL; - PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; - if (!main_interpreter) { - main_interpreter = current_interpreter; - } else if (unlikely(main_interpreter != current_interpreter)) - #endif - { - PyErr_SetString( - PyExc_ImportError, - "Interpreter change detected - this module can only be loaded into one interpreter per process."); - return -1; - } - return 0; -} -#if CYTHON_COMPILING_IN_LIMITED_API -static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *module, const char* from_name, const char* to_name, int allow_none) -#else -static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) -#endif -{ - PyObject *value = PyObject_GetAttrString(spec, from_name); - int result = 0; - if (likely(value)) { - if (allow_none || value != Py_None) { -#if CYTHON_COMPILING_IN_LIMITED_API - result = PyModule_AddObject(module, to_name, value); -#else - result = PyDict_SetItemString(moddict, to_name, value); -#endif - } - Py_DECREF(value); - } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Clear(); - } else { - result = -1; - } - return result; -} -static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def) { - PyObject *module = NULL, *moddict, *modname; - CYTHON_UNUSED_VAR(def); - if (__Pyx_check_single_interpreter()) - return NULL; - if (__pyx_m) - return __Pyx_NewRef(__pyx_m); - modname = PyObject_GetAttrString(spec, "name"); - if (unlikely(!modname)) goto bad; - module = PyModule_NewObject(modname); - Py_DECREF(modname); - if (unlikely(!module)) goto bad; -#if CYTHON_COMPILING_IN_LIMITED_API - moddict = module; -#else - moddict = PyModule_GetDict(module); - if (unlikely(!moddict)) goto bad; -#endif - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; - return module; -bad: - Py_XDECREF(module); - return NULL; -} - - -static CYTHON_SMALL_CODE int __pyx_pymod_exec_buttons(PyObject *__pyx_pyinit_module) -#endif -#endif -{ - int stringtab_initialized = 0; - #if CYTHON_USE_MODULE_STATE - int pystate_addmodule_run = 0; - #endif - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - #if CYTHON_PEP489_MULTI_PHASE_INIT - if (__pyx_m) { - if (__pyx_m == __pyx_pyinit_module) return 0; - PyErr_SetString(PyExc_RuntimeError, "Module 'buttons' has already been imported. Re-initialisation is not supported."); - return -1; - } - #elif PY_MAJOR_VERSION >= 3 - if (__pyx_m) return __Pyx_NewRef(__pyx_m); - #endif - /*--- Module creation code ---*/ - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_m = __pyx_pyinit_module; - Py_INCREF(__pyx_m); - #else - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4("buttons", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) - #elif CYTHON_USE_MODULE_STATE - __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) - { - int add_module_result = PyState_AddModule(__pyx_t_1, &__pyx_moduledef); - __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to "buttons" pseudovariable */ - if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error) - pystate_addmodule_run = 1; - } - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #endif - CYTHON_UNUSED_VAR(__pyx_t_1); - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_d); - __pyx_b = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_cython_runtime = __Pyx_PyImport_AddModuleRef((const char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) - if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #if CYTHON_REFNANNY -__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); -if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); -} -#endif - __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_buttons(void)", 0); - if (__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #ifdef __Pxy_PyFrame_Initialize_Offsets - __Pxy_PyFrame_Initialize_Offsets(); - #endif - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) - #ifdef __Pyx_CyFunction_USED - if (__pyx_CyFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_Coroutine_USED - if (__pyx_Coroutine_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_AsyncGen_USED - if (__pyx_AsyncGen_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_StopAsyncIteration_USED - if (__pyx_StopAsyncIteration_init(__pyx_m) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - PyEval_InitThreads(); - #endif - /*--- Initialize various global constants etc. ---*/ - if (__Pyx_InitConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - stringtab_initialized = 1; - if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - if (__pyx_module_is_main_buttons) { - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) - if (!PyDict_GetItemString(modules, "buttons")) { - if (unlikely((PyDict_SetItemString(modules, "buttons", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error) - } - } - #endif - /*--- Builtin init code ---*/ - if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - /*--- Constants init code ---*/ - if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - /*--- Global type/function init code ---*/ - (void)__Pyx_modinit_global_init_code(); - (void)__Pyx_modinit_variable_export_code(); - (void)__Pyx_modinit_function_export_code(); - (void)__Pyx_modinit_type_init_code(); - (void)__Pyx_modinit_type_import_code(); - (void)__Pyx_modinit_variable_import_code(); - (void)__Pyx_modinit_function_import_code(); - /*--- Execution code ---*/ - #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) - if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - - /* "buttons.pyx":1 - * import pygame # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_2 = __Pyx_ImportDottedModule(__pyx_n_s_pygame, NULL); 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_pygame, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "buttons.pyx":5 - * - * - * class Button(): # <<<<<<<<<<<<<< - * - * def __init__(self, game, text, action, font, scale=[1, 1], pos=[0, 0], fontcolour=(255, 255, 255), specialtype=''): - */ - __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_Button, __pyx_n_s_Button, (PyObject *) NULL, __pyx_n_s_buttons, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - - /* "buttons.pyx":7 - * class Button(): - * - * def __init__(self, game, text, action, font, scale=[1, 1], pos=[0, 0], fontcolour=(255, 255, 255), specialtype=''): # <<<<<<<<<<<<<< - * self.slider_value = 0 - * self.fontcolour = fontcolour - */ - __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_7buttons_6Button_1__init__, 0, __pyx_n_s_Button___init, NULL, __pyx_n_s_buttons, __pyx_d, ((PyObject *)__pyx_codeobj__5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (!__Pyx_CyFunction_InitDefaults(__pyx_t_3, sizeof(__pyx_defaults), 2)) __PYX_ERR(0, 7, __pyx_L1_error) - __pyx_t_4 = PyList_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_int_1); - __Pyx_GIVEREF(__pyx_int_1); - if (__Pyx_PyList_SET_ITEM(__pyx_t_4, 0, __pyx_int_1)) __PYX_ERR(0, 7, __pyx_L1_error); - __Pyx_INCREF(__pyx_int_1); - __Pyx_GIVEREF(__pyx_int_1); - if (__Pyx_PyList_SET_ITEM(__pyx_t_4, 1, __pyx_int_1)) __PYX_ERR(0, 7, __pyx_L1_error); - __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_3)->__pyx_arg_scale = __pyx_t_4; - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __pyx_t_4 = PyList_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_INCREF(__pyx_int_0); - __Pyx_GIVEREF(__pyx_int_0); - if (__Pyx_PyList_SET_ITEM(__pyx_t_4, 0, __pyx_int_0)) __PYX_ERR(0, 7, __pyx_L1_error); - __Pyx_INCREF(__pyx_int_0); - __Pyx_GIVEREF(__pyx_int_0); - if (__Pyx_PyList_SET_ITEM(__pyx_t_4, 1, __pyx_int_0)) __PYX_ERR(0, 7, __pyx_L1_error); - __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_3)->__pyx_arg_pos = __pyx_t_4; - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_3, __pyx_pf_7buttons___defaults__); - if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_init, __pyx_t_3) < 0) __PYX_ERR(0, 7, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "buttons.pyx":19 - * self.curr_mouse_pos = [0, 0] - * - * def get_rect(self): # <<<<<<<<<<<<<< - * return pygame.Rect(self.pos[0], self.pos[1], self.size[0] * self.scale[0], self.size[1] * self.scale[1]) - * - */ - __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_7buttons_6Button_3get_rect, 0, __pyx_n_s_Button_get_rect, NULL, __pyx_n_s_buttons, __pyx_d, ((PyObject *)__pyx_codeobj__7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_get_rect, __pyx_t_3) < 0) __PYX_ERR(0, 19, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "buttons.pyx":22 - * return pygame.Rect(self.pos[0], self.pos[1], self.size[0] * self.scale[0], self.size[1] * self.scale[1]) - * - * def collide(self, mouse_rect): # <<<<<<<<<<<<<< - * if self.get_rect().colliderect(mouse_rect): - * return True - */ - __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_7buttons_6Button_5collide, 0, __pyx_n_s_Button_collide, NULL, __pyx_n_s_buttons, __pyx_d, ((PyObject *)__pyx_codeobj__9)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 22, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_collide, __pyx_t_3) < 0) __PYX_ERR(0, 22, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "buttons.pyx":28 - * return False - * - * def update(self, mouse_rect): # <<<<<<<<<<<<<< - * - * if self.collide(mouse_rect): - */ - __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_7buttons_6Button_7update, 0, __pyx_n_s_Button_update, NULL, __pyx_n_s_buttons, __pyx_d, ((PyObject *)__pyx_codeobj__10)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 28, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_update, __pyx_t_3) < 0) __PYX_ERR(0, 28, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "buttons.pyx":32 - * if self.collide(mouse_rect): - * return True - * def render(self, surf, font): # <<<<<<<<<<<<<< - * font.render(surf, self.text, self.pos, scale=self.scale, colour=self.fontcolour) - */ - __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_7buttons_6Button_9render, 0, __pyx_n_s_Button_render, NULL, __pyx_n_s_buttons, __pyx_d, ((PyObject *)__pyx_codeobj__12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 32, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_render, __pyx_t_3) < 0) __PYX_ERR(0, 32, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "buttons.pyx":5 - * - * - * class Button(): # <<<<<<<<<<<<<< - * - * def __init__(self, game, text, action, font, scale=[1, 1], pos=[0, 0], fontcolour=(255, 255, 255), specialtype=''): - */ - __pyx_t_3 = __Pyx_Py3ClassCreate(((PyObject*)&PyType_Type), __pyx_n_s_Button, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_Button, __pyx_t_3) < 0) __PYX_ERR(0, 5, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "buttons.pyx":1 - * import pygame # <<<<<<<<<<<<<< - * - * - */ - __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; - - /*--- 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 buttons", __pyx_clineno, __pyx_lineno, __pyx_filename); - } - #if !CYTHON_USE_MODULE_STATE - Py_CLEAR(__pyx_m); - #else - Py_DECREF(__pyx_m); - if (pystate_addmodule_run) { - PyObject *tp, *value, *tb; - PyErr_Fetch(&tp, &value, &tb); - PyState_RemoveModule(&__pyx_moduledef); - PyErr_Restore(tp, value, tb); - } - #endif - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init buttons"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if CYTHON_PEP489_MULTI_PHASE_INIT - return (__pyx_m != NULL) ? 0 : -1; - #elif PY_MAJOR_VERSION >= 3 - return __pyx_m; - #else - return; - #endif -} -/* #### Code section: cleanup_globals ### */ -/* #### Code section: cleanup_module ### */ -/* #### Code section: main_method ### */ -/* #### Code section: utility_code_pragmas ### */ -#ifdef _MSC_VER -#pragma warning( push ) -/* Warning 4127: conditional expression is constant - * Cython uses constant conditional expressions to allow in inline functions to be optimized at - * compile-time, so this warning is not useful - */ -#pragma warning( disable : 4127 ) -#endif - - - -/* #### Code section: utility_code_def ### */ - -/* --- Runtime support code --- */ -/* Refnanny */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule(modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, "RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif - -/* TupleAndListFromArray */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) { - PyObject *v; - Py_ssize_t i; - for (i = 0; i < length; i++) { - v = dest[i] = src[i]; - Py_INCREF(v); - } -} -static CYTHON_INLINE PyObject * -__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n) -{ - PyObject *res; - if (n <= 0) { - Py_INCREF(__pyx_empty_tuple); - return __pyx_empty_tuple; - } - res = PyTuple_New(n); - if (unlikely(res == NULL)) return NULL; - __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n); - return res; -} -static CYTHON_INLINE PyObject * -__Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n) -{ - PyObject *res; - if (n <= 0) { - return PyList_New(0); - } - res = PyList_New(n); - if (unlikely(res == NULL)) return NULL; - __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n); - return res; -} -#endif - -/* BytesEquals */ -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API - return PyObject_RichCompareBool(s1, s2, equals); -#else - if (s1 == s2) { - return (equals == Py_EQ); - } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { - const char *ps1, *ps2; - Py_ssize_t length = PyBytes_GET_SIZE(s1); - if (length != PyBytes_GET_SIZE(s2)) - return (equals == Py_NE); - ps1 = PyBytes_AS_STRING(s1); - ps2 = PyBytes_AS_STRING(s2); - if (ps1[0] != ps2[0]) { - return (equals == Py_NE); - } else if (length == 1) { - return (equals == Py_EQ); - } else { - int result; -#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000) - Py_hash_t hash1, hash2; - hash1 = ((PyBytesObject*)s1)->ob_shash; - hash2 = ((PyBytesObject*)s2)->ob_shash; - if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { - return (equals == Py_NE); - } -#endif - result = memcmp(ps1, ps2, (size_t)length); - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { - return (equals == Py_NE); - } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { - return (equals == Py_NE); - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -#endif -} - -/* UnicodeEquals */ -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API - return PyObject_RichCompareBool(s1, s2, equals); -#else -#if PY_MAJOR_VERSION < 3 - PyObject* owned_ref = NULL; -#endif - int s1_is_unicode, s2_is_unicode; - if (s1 == s2) { - goto return_eq; - } - s1_is_unicode = PyUnicode_CheckExact(s1); - s2_is_unicode = PyUnicode_CheckExact(s2); -#if PY_MAJOR_VERSION < 3 - if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { - owned_ref = PyUnicode_FromObject(s2); - if (unlikely(!owned_ref)) - return -1; - s2 = owned_ref; - s2_is_unicode = 1; - } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { - owned_ref = PyUnicode_FromObject(s1); - if (unlikely(!owned_ref)) - return -1; - s1 = owned_ref; - s1_is_unicode = 1; - } else if (((!s2_is_unicode) & (!s1_is_unicode))) { - return __Pyx_PyBytes_Equals(s1, s2, equals); - } -#endif - if (s1_is_unicode & s2_is_unicode) { - Py_ssize_t length; - int kind; - void *data1, *data2; - if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) - return -1; - length = __Pyx_PyUnicode_GET_LENGTH(s1); - if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { - goto return_ne; - } -#if CYTHON_USE_UNICODE_INTERNALS - { - Py_hash_t hash1, hash2; - #if CYTHON_PEP393_ENABLED - hash1 = ((PyASCIIObject*)s1)->hash; - hash2 = ((PyASCIIObject*)s2)->hash; - #else - hash1 = ((PyUnicodeObject*)s1)->hash; - hash2 = ((PyUnicodeObject*)s2)->hash; - #endif - if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { - goto return_ne; - } - } -#endif - kind = __Pyx_PyUnicode_KIND(s1); - if (kind != __Pyx_PyUnicode_KIND(s2)) { - goto return_ne; - } - data1 = __Pyx_PyUnicode_DATA(s1); - data2 = __Pyx_PyUnicode_DATA(s2); - if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { - goto return_ne; - } else if (length == 1) { - goto return_eq; - } else { - int result = memcmp(data1, data2, (size_t)(length * kind)); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & s2_is_unicode) { - goto return_ne; - } else if ((s2 == Py_None) & s1_is_unicode) { - goto return_ne; - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -return_eq: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ); -return_ne: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_NE); -#endif -} - -/* fastcall */ -#if CYTHON_METH_FASTCALL -static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s) -{ - Py_ssize_t i, n = PyTuple_GET_SIZE(kwnames); - for (i = 0; i < n; i++) - { - if (s == PyTuple_GET_ITEM(kwnames, i)) return kwvalues[i]; - } - for (i = 0; i < n; i++) - { - int eq = __Pyx_PyUnicode_Equals(s, PyTuple_GET_ITEM(kwnames, i), Py_EQ); - if (unlikely(eq != 0)) { - if (unlikely(eq < 0)) return NULL; - return kwvalues[i]; - } - } - return NULL; -} -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 -CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues) { - Py_ssize_t i, nkwargs = PyTuple_GET_SIZE(kwnames); - PyObject *dict; - dict = PyDict_New(); - if (unlikely(!dict)) - return NULL; - for (i=0; i= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif -} - -/* ParseKeywords */ -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject *const *kwvalues, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - int kwds_is_tuple = CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds)); - while (1) { - Py_XDECREF(key); key = NULL; - Py_XDECREF(value); value = NULL; - if (kwds_is_tuple) { - Py_ssize_t size; -#if CYTHON_ASSUME_SAFE_MACROS - size = PyTuple_GET_SIZE(kwds); -#else - size = PyTuple_Size(kwds); - if (size < 0) goto bad; -#endif - if (pos >= size) break; -#if CYTHON_AVOID_BORROWED_REFS - key = __Pyx_PySequence_ITEM(kwds, pos); - if (!key) goto bad; -#elif CYTHON_ASSUME_SAFE_MACROS - key = PyTuple_GET_ITEM(kwds, pos); -#else - key = PyTuple_GetItem(kwds, pos); - if (!key) goto bad; -#endif - value = kwvalues[pos]; - pos++; - } - else - { - if (!PyDict_Next(kwds, &pos, &key, &value)) break; -#if CYTHON_AVOID_BORROWED_REFS - Py_INCREF(key); -#endif - } - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; -#if CYTHON_AVOID_BORROWED_REFS - Py_INCREF(value); - Py_DECREF(key); -#endif - key = NULL; - value = NULL; - continue; - } -#if !CYTHON_AVOID_BORROWED_REFS - Py_INCREF(key); -#endif - Py_INCREF(value); - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; -#if CYTHON_AVOID_BORROWED_REFS - value = NULL; -#endif - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = ( - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key) - ); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; -#if CYTHON_AVOID_BORROWED_REFS - value = NULL; -#endif - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - Py_XDECREF(key); - Py_XDECREF(value); - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - #if PY_MAJOR_VERSION < 3 - PyErr_Format(PyExc_TypeError, - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - PyErr_Format(PyExc_TypeError, - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - Py_XDECREF(key); - Py_XDECREF(value); - return -1; -} - -/* PyObjectSetAttrStr */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_setattro)) - return tp->tp_setattro(obj, attr_name, value); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_setattr)) - return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); -#endif - return PyObject_SetAttr(obj, attr_name, value); -} -#endif - -/* PyObjectGetAttrStr */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#endif - -/* 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 - -/* PyObjectCall */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = Py_TYPE(func)->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); - #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 = (*call)(func, arg, kw); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - 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; -} -#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 - } - if (nargs == 0) { - return __Pyx_PyObject_Call(func, __pyx_empty_tuple, kwargs); - } - #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 -} - -/* PyErrExceptionMatches */ -#if CYTHON_FAST_THREAD_STATE -static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { - Py_ssize_t i, n; - n = PyTuple_GET_SIZE(tuple); -#if PY_MAJOR_VERSION >= 3 - for (i=0; i= 0x030C00A6 - PyObject *current_exception = tstate->current_exception; - if (unlikely(!current_exception)) return 0; - exc_type = (PyObject*) Py_TYPE(current_exception); - if (exc_type == err) return 1; -#else - exc_type = tstate->curexc_type; - if (exc_type == err) return 1; - if (unlikely(!exc_type)) return 0; -#endif - #if CYTHON_AVOID_BORROWED_REFS - Py_INCREF(exc_type); - #endif - if (unlikely(PyTuple_Check(err))) { - result = __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); - } else { - result = __Pyx_PyErr_GivenExceptionMatches(exc_type, err); - } - #if CYTHON_AVOID_BORROWED_REFS - Py_DECREF(exc_type); - #endif - return result; -} -#endif - -/* PyErrFetchRestore */ -#if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { -#if PY_VERSION_HEX >= 0x030C00A6 - PyObject *tmp_value; - assert(type == NULL || (value != NULL && type == (PyObject*) Py_TYPE(value))); - if (value) { - #if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(((PyBaseExceptionObject*) value)->traceback != tb)) - #endif - PyException_SetTraceback(value, tb); - } - tmp_value = tstate->current_exception; - tstate->current_exception = value; - Py_XDECREF(tmp_value); - Py_XDECREF(type); - Py_XDECREF(tb); -#else - PyObject *tmp_type, *tmp_value, *tmp_tb; - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#endif -} -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { -#if PY_VERSION_HEX >= 0x030C00A6 - PyObject* exc_value; - exc_value = tstate->current_exception; - tstate->current_exception = 0; - *value = exc_value; - *type = NULL; - *tb = NULL; - if (exc_value) { - *type = (PyObject*) Py_TYPE(exc_value); - Py_INCREF(*type); - #if CYTHON_COMPILING_IN_CPYTHON - *tb = ((PyBaseExceptionObject*) exc_value)->traceback; - Py_XINCREF(*tb); - #else - *tb = PyException_GetTraceback(exc_value); - #endif - } -#else - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#endif -} -#endif - -/* PyObjectGetAttrStrNoError */ -#if __PYX_LIMITED_VERSION_HEX < 0x030d00A1 -static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) - __Pyx_PyErr_Clear(); -} -#endif -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { - PyObject *result; -#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1 - (void) PyObject_GetOptionalAttr(obj, attr_name, &result); - return result; -#else -#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { - return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); - } -#endif - result = __Pyx_PyObject_GetAttrStr(obj, attr_name); - if (unlikely(!result)) { - __Pyx_PyObject_GetAttrStr_ClearAttributeError(); - } - return result; -#endif -} - -/* GetBuiltinName */ -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_b, name); - if (unlikely(!result) && !PyErr_Occurred()) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -/* PyDictVersioning */ -#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { - PyObject *dict = Py_TYPE(obj)->tp_dict; - return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; -} -static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { - PyObject **dictptr = NULL; - Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; - if (offset) { -#if CYTHON_COMPILING_IN_CPYTHON - dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); -#else - dictptr = _PyObject_GetDictPtr(obj); -#endif - } - 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); -} - -/* GetItemInt */ -static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { - PyObject *r; - if (unlikely(!j)) return NULL; - r = PyObject_GetItem(o, j); - Py_DECREF(j); - return r; -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - Py_ssize_t wrapped_i = i; - if (wraparound & unlikely(i < 0)) { - wrapped_i += PyList_GET_SIZE(o); - } - if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { - PyObject *r = PyList_GET_ITEM(o, wrapped_i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - Py_ssize_t wrapped_i = i; - if (wraparound & unlikely(i < 0)) { - wrapped_i += PyTuple_GET_SIZE(o); - } - if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS - if (is_list || PyList_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); - if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { - PyObject *r = PyList_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } - else if (PyTuple_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); - if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } else { - PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping; - PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence; - if (mm && mm->mp_subscript) { - PyObject *r, *key = PyInt_FromSsize_t(i); - if (unlikely(!key)) return NULL; - r = mm->mp_subscript(o, key); - Py_DECREF(key); - return r; - } - if (likely(sm && sm->sq_item)) { - if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) { - Py_ssize_t l = sm->sq_length(o); - if (likely(l >= 0)) { - i += l; - } else { - if (!PyErr_ExceptionMatches(PyExc_OverflowError)) - return NULL; - PyErr_Clear(); - } - } - return sm->sq_item(o, i); - } - } -#else - if (is_list || !PyMapping_Check(o)) { - return PySequence_GetItem(o, i); - } -#endif - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -} - -/* Import */ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *module = 0; - PyObject *empty_dict = 0; - PyObject *empty_list = 0; - #if PY_MAJOR_VERSION < 3 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (unlikely(!py_import)) - goto bad; - if (!from_list) { - empty_list = PyList_New(0); - if (unlikely(!empty_list)) - goto bad; - from_list = empty_list; - } - #endif - empty_dict = PyDict_New(); - if (unlikely(!empty_dict)) - goto bad; - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if (strchr(__Pyx_MODULE_NAME, '.') != NULL) { - module = PyImport_ImportModuleLevelObject( - name, __pyx_d, empty_dict, from_list, 1); - if (unlikely(!module)) { - if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError))) - goto bad; - PyErr_Clear(); - } - } - level = 0; - } - #endif - if (!module) { - #if PY_MAJOR_VERSION < 3 - PyObject *py_level = PyInt_FromLong(level); - if (unlikely(!py_level)) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, __pyx_d, empty_dict, from_list, py_level, (PyObject *)NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, __pyx_d, empty_dict, from_list, level); - #endif - } - } -bad: - Py_XDECREF(empty_dict); - Py_XDECREF(empty_list); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(py_import); - #endif - return module; -} - -/* ImportDottedModule */ -#if PY_MAJOR_VERSION >= 3 -static PyObject *__Pyx__ImportDottedModule_Error(PyObject *name, PyObject *parts_tuple, Py_ssize_t count) { - PyObject *partial_name = NULL, *slice = NULL, *sep = NULL; - if (unlikely(PyErr_Occurred())) { - PyErr_Clear(); - } - if (likely(PyTuple_GET_SIZE(parts_tuple) == count)) { - partial_name = name; - } else { - slice = PySequence_GetSlice(parts_tuple, 0, count); - if (unlikely(!slice)) - goto bad; - sep = PyUnicode_FromStringAndSize(".", 1); - if (unlikely(!sep)) - goto bad; - partial_name = PyUnicode_Join(sep, slice); - } - PyErr_Format( -#if PY_MAJOR_VERSION < 3 - PyExc_ImportError, - "No module named '%s'", PyString_AS_STRING(partial_name)); -#else -#if PY_VERSION_HEX >= 0x030600B1 - PyExc_ModuleNotFoundError, -#else - PyExc_ImportError, -#endif - "No module named '%U'", partial_name); -#endif -bad: - Py_XDECREF(sep); - Py_XDECREF(slice); - Py_XDECREF(partial_name); - return NULL; -} -#endif -#if PY_MAJOR_VERSION >= 3 -static PyObject *__Pyx__ImportDottedModule_Lookup(PyObject *name) { - PyObject *imported_module; -#if PY_VERSION_HEX < 0x030700A1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030400) - PyObject *modules = PyImport_GetModuleDict(); - if (unlikely(!modules)) - return NULL; - imported_module = __Pyx_PyDict_GetItemStr(modules, name); - Py_XINCREF(imported_module); -#else - imported_module = PyImport_GetModule(name); -#endif - return imported_module; -} -#endif -#if PY_MAJOR_VERSION >= 3 -static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple) { - Py_ssize_t i, nparts; - nparts = PyTuple_GET_SIZE(parts_tuple); - for (i=1; i < nparts && module; i++) { - PyObject *part, *submodule; -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - part = PyTuple_GET_ITEM(parts_tuple, i); -#else - part = PySequence_ITEM(parts_tuple, i); -#endif - submodule = __Pyx_PyObject_GetAttrStrNoError(module, part); -#if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) - Py_DECREF(part); -#endif - Py_DECREF(module); - module = submodule; - } - if (unlikely(!module)) { - return __Pyx__ImportDottedModule_Error(name, parts_tuple, i); - } - return module; -} -#endif -static PyObject *__Pyx__ImportDottedModule(PyObject *name, PyObject *parts_tuple) { -#if PY_MAJOR_VERSION < 3 - PyObject *module, *from_list, *star = __pyx_n_s__3; - CYTHON_UNUSED_VAR(parts_tuple); - from_list = PyList_New(1); - if (unlikely(!from_list)) - return NULL; - Py_INCREF(star); - PyList_SET_ITEM(from_list, 0, star); - module = __Pyx_Import(name, from_list, 0); - Py_DECREF(from_list); - return module; -#else - PyObject *imported_module; - PyObject *module = __Pyx_Import(name, NULL, 0); - if (!parts_tuple || unlikely(!module)) - return module; - imported_module = __Pyx__ImportDottedModule_Lookup(name); - if (likely(imported_module)) { - Py_DECREF(module); - return imported_module; - } - PyErr_Clear(); - return __Pyx_ImportDottedModule_WalkParts(module, name, parts_tuple); -#endif -} -static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple) { -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030400B1 - PyObject *module = __Pyx__ImportDottedModule_Lookup(name); - if (likely(module)) { - PyObject *spec = __Pyx_PyObject_GetAttrStrNoError(module, __pyx_n_s_spec); - if (likely(spec)) { - PyObject *unsafe = __Pyx_PyObject_GetAttrStrNoError(spec, __pyx_n_s_initializing); - if (likely(!unsafe || !__Pyx_PyObject_IsTrue(unsafe))) { - Py_DECREF(spec); - spec = NULL; - } - Py_XDECREF(unsafe); - } - if (likely(!spec)) { - PyErr_Clear(); - return module; - } - Py_DECREF(spec); - Py_DECREF(module); - } else if (PyErr_Occurred()) { - PyErr_Clear(); - } -#endif - return __Pyx__ImportDottedModule(name, parts_tuple); -} - -/* FixUpExtensionType */ -#if CYTHON_USE_TYPE_SPECS -static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) { -#if PY_VERSION_HEX > 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API - CYTHON_UNUSED_VAR(spec); - CYTHON_UNUSED_VAR(type); -#else - const PyType_Slot *slot = spec->slots; - while (slot && slot->slot && slot->slot != Py_tp_members) - slot++; - if (slot && slot->slot == Py_tp_members) { - int changed = 0; -#if !(PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON) - const -#endif - PyMemberDef *memb = (PyMemberDef*) slot->pfunc; - while (memb && memb->name) { - if (memb->name[0] == '_' && memb->name[1] == '_') { -#if PY_VERSION_HEX < 0x030900b1 - if (strcmp(memb->name, "__weaklistoffset__") == 0) { - assert(memb->type == T_PYSSIZET); - assert(memb->flags == READONLY); - type->tp_weaklistoffset = memb->offset; - changed = 1; - } - else if (strcmp(memb->name, "__dictoffset__") == 0) { - assert(memb->type == T_PYSSIZET); - assert(memb->flags == READONLY); - type->tp_dictoffset = memb->offset; - changed = 1; - } -#if CYTHON_METH_FASTCALL - else if (strcmp(memb->name, "__vectorcalloffset__") == 0) { - assert(memb->type == T_PYSSIZET); - assert(memb->flags == READONLY); -#if PY_VERSION_HEX >= 0x030800b4 - type->tp_vectorcall_offset = memb->offset; -#else - type->tp_print = (printfunc) memb->offset; -#endif - changed = 1; - } -#endif -#else - if ((0)); -#endif -#if PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON - else if (strcmp(memb->name, "__module__") == 0) { - PyObject *descr; - assert(memb->type == T_OBJECT); - assert(memb->flags == 0 || memb->flags == READONLY); - descr = PyDescr_NewMember(type, memb); - if (unlikely(!descr)) - return -1; - if (unlikely(PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr) < 0)) { - Py_DECREF(descr); - return -1; - } - Py_DECREF(descr); - changed = 1; - } -#endif - } - memb++; - } - if (changed) - PyType_Modified(type); - } -#endif - return 0; -} -#endif - -/* FetchSharedCythonModule */ -static PyObject *__Pyx_FetchSharedCythonABIModule(void) { - return __Pyx_PyImport_AddModuleRef((char*) __PYX_ABI_MODULE_NAME); -} - -/* FetchCommonType */ -static int __Pyx_VerifyCachedType(PyObject *cached_type, - const char *name, - Py_ssize_t basicsize, - Py_ssize_t expected_basicsize) { - if (!PyType_Check(cached_type)) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s is not a type object", name); - return -1; - } - if (basicsize != expected_basicsize) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s has the wrong size, try recompiling", - name); - return -1; - } - return 0; -} -#if !CYTHON_USE_TYPE_SPECS -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { - PyObject* abi_module; - const char* object_name; - PyTypeObject *cached_type = NULL; - abi_module = __Pyx_FetchSharedCythonABIModule(); - if (!abi_module) return NULL; - object_name = strrchr(type->tp_name, '.'); - object_name = object_name ? object_name+1 : type->tp_name; - cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, object_name); - if (cached_type) { - if (__Pyx_VerifyCachedType( - (PyObject *)cached_type, - object_name, - cached_type->tp_basicsize, - type->tp_basicsize) < 0) { - goto bad; - } - goto done; - } - if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; - PyErr_Clear(); - if (PyType_Ready(type) < 0) goto bad; - if (PyObject_SetAttrString(abi_module, object_name, (PyObject *)type) < 0) - goto bad; - Py_INCREF(type); - cached_type = type; -done: - Py_DECREF(abi_module); - return cached_type; -bad: - Py_XDECREF(cached_type); - cached_type = NULL; - goto done; -} -#else -static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) { - PyObject *abi_module, *cached_type = NULL; - const char* object_name = strrchr(spec->name, '.'); - object_name = object_name ? object_name+1 : spec->name; - abi_module = __Pyx_FetchSharedCythonABIModule(); - if (!abi_module) return NULL; - cached_type = PyObject_GetAttrString(abi_module, object_name); - if (cached_type) { - Py_ssize_t basicsize; -#if CYTHON_COMPILING_IN_LIMITED_API - PyObject *py_basicsize; - py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__"); - if (unlikely(!py_basicsize)) goto bad; - basicsize = PyLong_AsSsize_t(py_basicsize); - Py_DECREF(py_basicsize); - py_basicsize = 0; - if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; -#else - basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1; -#endif - if (__Pyx_VerifyCachedType( - cached_type, - object_name, - basicsize, - spec->basicsize) < 0) { - goto bad; - } - goto done; - } - if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; - PyErr_Clear(); - CYTHON_UNUSED_VAR(module); - cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases); - if (unlikely(!cached_type)) goto bad; - if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad; - if (PyObject_SetAttrString(abi_module, object_name, cached_type) < 0) goto bad; -done: - Py_DECREF(abi_module); - assert(cached_type == NULL || PyType_Check(cached_type)); - return (PyTypeObject *) cached_type; -bad: - Py_XDECREF(cached_type); - cached_type = NULL; - goto done; -} -#endif - -/* PyVectorcallFastCallDict */ -#if CYTHON_METH_FASTCALL -static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) -{ - PyObject *res = NULL; - PyObject *kwnames; - PyObject **newargs; - PyObject **kwvalues; - Py_ssize_t i, pos; - size_t j; - PyObject *key, *value; - unsigned long keys_are_strings; - Py_ssize_t nkw = PyDict_GET_SIZE(kw); - newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0])); - if (unlikely(newargs == NULL)) { - PyErr_NoMemory(); - return NULL; - } - for (j = 0; j < nargs; j++) newargs[j] = args[j]; - kwnames = PyTuple_New(nkw); - if (unlikely(kwnames == NULL)) { - PyMem_Free(newargs); - return NULL; - } - kwvalues = newargs + nargs; - pos = i = 0; - keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS; - while (PyDict_Next(kw, &pos, &key, &value)) { - keys_are_strings &= Py_TYPE(key)->tp_flags; - Py_INCREF(key); - Py_INCREF(value); - PyTuple_SET_ITEM(kwnames, i, key); - kwvalues[i] = value; - i++; - } - if (unlikely(!keys_are_strings)) { - PyErr_SetString(PyExc_TypeError, "keywords must be strings"); - goto cleanup; - } - res = vc(func, newargs, nargs, kwnames); -cleanup: - Py_DECREF(kwnames); - for (i = 0; i < nkw; i++) - Py_DECREF(kwvalues[i]); - PyMem_Free(newargs); - return res; -} -static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) -{ - if (likely(kw == NULL) || PyDict_GET_SIZE(kw) == 0) { - return vc(func, args, nargs, NULL); - } - return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw); -} -#endif - -/* CythonFunctionShared */ -#if CYTHON_COMPILING_IN_LIMITED_API -static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { - if (__Pyx_CyFunction_Check(func)) { - return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc; - } else if (PyCFunction_Check(func)) { - return PyCFunction_GetFunction(func) == (PyCFunction) cfunc; - } - return 0; -} -#else -static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { - return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; -} -#endif -static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) { -#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API - __Pyx_Py_XDECREF_SET( - __Pyx_CyFunction_GetClassObj(f), - ((classobj) ? __Pyx_NewRef(classobj) : NULL)); -#else - __Pyx_Py_XDECREF_SET( - ((PyCMethodObject *) (f))->mm_class, - (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL)); -#endif -} -static PyObject * -__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) -{ - CYTHON_UNUSED_VAR(closure); - if (unlikely(op->func_doc == NULL)) { -#if CYTHON_COMPILING_IN_LIMITED_API - op->func_doc = PyObject_GetAttrString(op->func, "__doc__"); - if (unlikely(!op->func_doc)) return NULL; -#else - if (((PyCFunctionObject*)op)->m_ml->ml_doc) { -#if PY_MAJOR_VERSION >= 3 - op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); -#else - op->func_doc = PyString_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); -#endif - if (unlikely(op->func_doc == NULL)) - return NULL; - } else { - Py_INCREF(Py_None); - return Py_None; - } -#endif - } - Py_INCREF(op->func_doc); - return op->func_doc; -} -static int -__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context) -{ - CYTHON_UNUSED_VAR(context); - if (value == NULL) { - value = Py_None; - } - Py_INCREF(value); - __Pyx_Py_XDECREF_SET(op->func_doc, value); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context) -{ - CYTHON_UNUSED_VAR(context); - if (unlikely(op->func_name == NULL)) { -#if CYTHON_COMPILING_IN_LIMITED_API - op->func_name = PyObject_GetAttrString(op->func, "__name__"); -#elif PY_MAJOR_VERSION >= 3 - op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); -#else - op->func_name = PyString_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); -#endif - if (unlikely(op->func_name == NULL)) - return NULL; - } - Py_INCREF(op->func_name); - return op->func_name; -} -static int -__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context) -{ - CYTHON_UNUSED_VAR(context); -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) -#else - if (unlikely(value == NULL || !PyString_Check(value))) -#endif - { - PyErr_SetString(PyExc_TypeError, - "__name__ must be set to a string object"); - return -1; - } - Py_INCREF(value); - __Pyx_Py_XDECREF_SET(op->func_name, value); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context) -{ - CYTHON_UNUSED_VAR(context); - Py_INCREF(op->func_qualname); - return op->func_qualname; -} -static int -__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context) -{ - CYTHON_UNUSED_VAR(context); -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) -#else - if (unlikely(value == NULL || !PyString_Check(value))) -#endif - { - PyErr_SetString(PyExc_TypeError, - "__qualname__ must be set to a string object"); - return -1; - } - Py_INCREF(value); - __Pyx_Py_XDECREF_SET(op->func_qualname, value); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context) -{ - CYTHON_UNUSED_VAR(context); - if (unlikely(op->func_dict == NULL)) { - op->func_dict = PyDict_New(); - if (unlikely(op->func_dict == NULL)) - return NULL; - } - Py_INCREF(op->func_dict); - return op->func_dict; -} -static int -__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, void *context) -{ - CYTHON_UNUSED_VAR(context); - if (unlikely(value == NULL)) { - PyErr_SetString(PyExc_TypeError, - "function's dictionary may not be deleted"); - return -1; - } - if (unlikely(!PyDict_Check(value))) { - PyErr_SetString(PyExc_TypeError, - "setting function's dictionary to a non-dict"); - return -1; - } - Py_INCREF(value); - __Pyx_Py_XDECREF_SET(op->func_dict, value); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context) -{ - CYTHON_UNUSED_VAR(context); - Py_INCREF(op->func_globals); - return op->func_globals; -} -static PyObject * -__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context) -{ - CYTHON_UNUSED_VAR(op); - CYTHON_UNUSED_VAR(context); - Py_INCREF(Py_None); - return Py_None; -} -static PyObject * -__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context) -{ - PyObject* result = (op->func_code) ? op->func_code : Py_None; - CYTHON_UNUSED_VAR(context); - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { - int result = 0; - PyObject *res = op->defaults_getter((PyObject *) op); - if (unlikely(!res)) - return -1; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - op->defaults_tuple = PyTuple_GET_ITEM(res, 0); - Py_INCREF(op->defaults_tuple); - op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); - Py_INCREF(op->defaults_kwdict); - #else - op->defaults_tuple = __Pyx_PySequence_ITEM(res, 0); - if (unlikely(!op->defaults_tuple)) result = -1; - else { - op->defaults_kwdict = __Pyx_PySequence_ITEM(res, 1); - if (unlikely(!op->defaults_kwdict)) result = -1; - } - #endif - Py_DECREF(res); - return result; -} -static int -__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { - CYTHON_UNUSED_VAR(context); - if (!value) { - value = Py_None; - } else if (unlikely(value != Py_None && !PyTuple_Check(value))) { - PyErr_SetString(PyExc_TypeError, - "__defaults__ must be set to a tuple object"); - return -1; - } - PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not " - "currently affect the values used in function calls", 1); - Py_INCREF(value); - __Pyx_Py_XDECREF_SET(op->defaults_tuple, value); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) { - PyObject* result = op->defaults_tuple; - CYTHON_UNUSED_VAR(context); - if (unlikely(!result)) { - if (op->defaults_getter) { - if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; - result = op->defaults_tuple; - } else { - result = Py_None; - } - } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { - CYTHON_UNUSED_VAR(context); - if (!value) { - value = Py_None; - } else if (unlikely(value != Py_None && !PyDict_Check(value))) { - PyErr_SetString(PyExc_TypeError, - "__kwdefaults__ must be set to a dict object"); - return -1; - } - PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not " - "currently affect the values used in function calls", 1); - Py_INCREF(value); - __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) { - PyObject* result = op->defaults_kwdict; - CYTHON_UNUSED_VAR(context); - if (unlikely(!result)) { - if (op->defaults_getter) { - if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; - result = op->defaults_kwdict; - } else { - result = Py_None; - } - } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) { - CYTHON_UNUSED_VAR(context); - if (!value || value == Py_None) { - value = NULL; - } else if (unlikely(!PyDict_Check(value))) { - PyErr_SetString(PyExc_TypeError, - "__annotations__ must be set to a dict object"); - return -1; - } - Py_XINCREF(value); - __Pyx_Py_XDECREF_SET(op->func_annotations, value); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) { - PyObject* result = op->func_annotations; - CYTHON_UNUSED_VAR(context); - if (unlikely(!result)) { - result = PyDict_New(); - if (unlikely(!result)) return NULL; - op->func_annotations = result; - } - Py_INCREF(result); - return result; -} -static PyObject * -__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) { - int is_coroutine; - CYTHON_UNUSED_VAR(context); - if (op->func_is_coroutine) { - return __Pyx_NewRef(op->func_is_coroutine); - } - is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE; -#if PY_VERSION_HEX >= 0x03050000 - if (is_coroutine) { - PyObject *module, *fromlist, *marker = __pyx_n_s_is_coroutine; - fromlist = PyList_New(1); - if (unlikely(!fromlist)) return NULL; - Py_INCREF(marker); -#if CYTHON_ASSUME_SAFE_MACROS - PyList_SET_ITEM(fromlist, 0, marker); -#else - if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) { - Py_DECREF(marker); - Py_DECREF(fromlist); - return NULL; - } -#endif - module = PyImport_ImportModuleLevelObject(__pyx_n_s_asyncio_coroutines, NULL, NULL, fromlist, 0); - Py_DECREF(fromlist); - if (unlikely(!module)) goto ignore; - op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker); - Py_DECREF(module); - if (likely(op->func_is_coroutine)) { - return __Pyx_NewRef(op->func_is_coroutine); - } -ignore: - PyErr_Clear(); - } -#endif - op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine); - return __Pyx_NewRef(op->func_is_coroutine); -} -#if CYTHON_COMPILING_IN_LIMITED_API -static PyObject * -__Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) { - CYTHON_UNUSED_VAR(context); - return PyObject_GetAttrString(op->func, "__module__"); -} -static int -__Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) { - CYTHON_UNUSED_VAR(context); - return PyObject_SetAttrString(op->func, "__module__", value); -} -#endif -static PyGetSetDef __pyx_CyFunction_getsets[] = { - {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, - {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, - {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, - {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, - {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, - {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, - {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, - {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, - {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, - {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, - {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, - {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, - {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, - {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, - {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, - {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, - {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, - {(char *) "_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0}, -#if CYTHON_COMPILING_IN_LIMITED_API - {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0}, -#endif - {0, 0, 0, 0, 0} -}; -static PyMemberDef __pyx_CyFunction_members[] = { -#if !CYTHON_COMPILING_IN_LIMITED_API - {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0}, -#endif -#if CYTHON_USE_TYPE_SPECS - {(char *) "__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0}, -#if CYTHON_METH_FASTCALL -#if CYTHON_BACKPORT_VECTORCALL - {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0}, -#else -#if !CYTHON_COMPILING_IN_LIMITED_API - {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0}, -#endif -#endif -#endif -#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API - {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0}, -#else - {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0}, -#endif -#endif - {0, 0, 0, 0, 0} -}; -static PyObject * -__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args) -{ - CYTHON_UNUSED_VAR(args); -#if PY_MAJOR_VERSION >= 3 - Py_INCREF(m->func_qualname); - return m->func_qualname; -#else - return PyString_FromString(((PyCFunctionObject*)m)->m_ml->ml_name); -#endif -} -static PyMethodDef __pyx_CyFunction_methods[] = { - {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, - {0, 0, 0, 0} -}; -#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API -#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) -#else -#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist) -#endif -static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, - PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { -#if !CYTHON_COMPILING_IN_LIMITED_API - PyCFunctionObject *cf = (PyCFunctionObject*) op; -#endif - if (unlikely(op == NULL)) - return NULL; -#if CYTHON_COMPILING_IN_LIMITED_API - op->func = PyCFunction_NewEx(ml, (PyObject*)op, module); - if (unlikely(!op->func)) return NULL; -#endif - op->flags = flags; - __Pyx_CyFunction_weakreflist(op) = NULL; -#if !CYTHON_COMPILING_IN_LIMITED_API - cf->m_ml = ml; - cf->m_self = (PyObject *) op; -#endif - Py_XINCREF(closure); - op->func_closure = closure; -#if !CYTHON_COMPILING_IN_LIMITED_API - Py_XINCREF(module); - cf->m_module = module; -#endif - op->func_dict = NULL; - op->func_name = NULL; - Py_INCREF(qualname); - op->func_qualname = qualname; - op->func_doc = NULL; -#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API - op->func_classobj = NULL; -#else - ((PyCMethodObject*)op)->mm_class = NULL; -#endif - op->func_globals = globals; - Py_INCREF(op->func_globals); - Py_XINCREF(code); - op->func_code = code; - op->defaults_pyobjects = 0; - op->defaults_size = 0; - op->defaults = NULL; - op->defaults_tuple = NULL; - op->defaults_kwdict = NULL; - op->defaults_getter = NULL; - op->func_annotations = NULL; - op->func_is_coroutine = NULL; -#if CYTHON_METH_FASTCALL - switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { - case METH_NOARGS: - __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS; - break; - case METH_O: - __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O; - break; - case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: - __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD; - break; - case METH_FASTCALL | METH_KEYWORDS: - __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS; - break; - case METH_VARARGS | METH_KEYWORDS: - __Pyx_CyFunction_func_vectorcall(op) = NULL; - break; - default: - PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); - Py_DECREF(op); - return NULL; - } -#endif - return (PyObject *) op; -} -static int -__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) -{ - Py_CLEAR(m->func_closure); -#if CYTHON_COMPILING_IN_LIMITED_API - Py_CLEAR(m->func); -#else - Py_CLEAR(((PyCFunctionObject*)m)->m_module); -#endif - Py_CLEAR(m->func_dict); - Py_CLEAR(m->func_name); - Py_CLEAR(m->func_qualname); - Py_CLEAR(m->func_doc); - Py_CLEAR(m->func_globals); - Py_CLEAR(m->func_code); -#if !CYTHON_COMPILING_IN_LIMITED_API -#if PY_VERSION_HEX < 0x030900B1 - Py_CLEAR(__Pyx_CyFunction_GetClassObj(m)); -#else - { - PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class; - ((PyCMethodObject *) (m))->mm_class = NULL; - Py_XDECREF(cls); - } -#endif -#endif - Py_CLEAR(m->defaults_tuple); - Py_CLEAR(m->defaults_kwdict); - Py_CLEAR(m->func_annotations); - Py_CLEAR(m->func_is_coroutine); - if (m->defaults) { - PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); - int i; - for (i = 0; i < m->defaults_pyobjects; i++) - Py_XDECREF(pydefaults[i]); - PyObject_Free(m->defaults); - m->defaults = NULL; - } - return 0; -} -static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) -{ - if (__Pyx_CyFunction_weakreflist(m) != NULL) - PyObject_ClearWeakRefs((PyObject *) m); - __Pyx_CyFunction_clear(m); - __Pyx_PyHeapTypeObject_GC_Del(m); -} -static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) -{ - PyObject_GC_UnTrack(m); - __Pyx__CyFunction_dealloc(m); -} -static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) -{ - Py_VISIT(m->func_closure); -#if CYTHON_COMPILING_IN_LIMITED_API - Py_VISIT(m->func); -#else - Py_VISIT(((PyCFunctionObject*)m)->m_module); -#endif - Py_VISIT(m->func_dict); - Py_VISIT(m->func_name); - Py_VISIT(m->func_qualname); - Py_VISIT(m->func_doc); - Py_VISIT(m->func_globals); - Py_VISIT(m->func_code); -#if !CYTHON_COMPILING_IN_LIMITED_API - Py_VISIT(__Pyx_CyFunction_GetClassObj(m)); -#endif - Py_VISIT(m->defaults_tuple); - Py_VISIT(m->defaults_kwdict); - Py_VISIT(m->func_is_coroutine); - if (m->defaults) { - PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); - int i; - for (i = 0; i < m->defaults_pyobjects; i++) - Py_VISIT(pydefaults[i]); - } - return 0; -} -static PyObject* -__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) -{ -#if PY_MAJOR_VERSION >= 3 - return PyUnicode_FromFormat("", - op->func_qualname, (void *)op); -#else - return PyString_FromFormat("", - PyString_AsString(op->func_qualname), (void *)op); -#endif -} -static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { -#if CYTHON_COMPILING_IN_LIMITED_API - PyObject *f = ((__pyx_CyFunctionObject*)func)->func; - PyObject *py_name = NULL; - PyCFunction meth; - int flags; - meth = PyCFunction_GetFunction(f); - if (unlikely(!meth)) return NULL; - flags = PyCFunction_GetFlags(f); - if (unlikely(flags < 0)) return NULL; -#else - PyCFunctionObject* f = (PyCFunctionObject*)func; - PyCFunction meth = f->m_ml->ml_meth; - int flags = f->m_ml->ml_flags; -#endif - Py_ssize_t size; - switch (flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) { - case METH_VARARGS: - if (likely(kw == NULL || PyDict_Size(kw) == 0)) - return (*meth)(self, arg); - break; - case METH_VARARGS | METH_KEYWORDS: - return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw); - case METH_NOARGS: - if (likely(kw == NULL || PyDict_Size(kw) == 0)) { -#if CYTHON_ASSUME_SAFE_MACROS - size = PyTuple_GET_SIZE(arg); -#else - size = PyTuple_Size(arg); - if (unlikely(size < 0)) return NULL; -#endif - if (likely(size == 0)) - return (*meth)(self, NULL); -#if CYTHON_COMPILING_IN_LIMITED_API - py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); - if (!py_name) return NULL; - PyErr_Format(PyExc_TypeError, - "%.200S() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", - py_name, size); - Py_DECREF(py_name); -#else - PyErr_Format(PyExc_TypeError, - "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", - f->m_ml->ml_name, size); -#endif - return NULL; - } - break; - case METH_O: - if (likely(kw == NULL || PyDict_Size(kw) == 0)) { -#if CYTHON_ASSUME_SAFE_MACROS - size = PyTuple_GET_SIZE(arg); -#else - size = PyTuple_Size(arg); - if (unlikely(size < 0)) return NULL; -#endif - if (likely(size == 1)) { - PyObject *result, *arg0; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - arg0 = PyTuple_GET_ITEM(arg, 0); - #else - arg0 = __Pyx_PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL; - #endif - result = (*meth)(self, arg0); - #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) - Py_DECREF(arg0); - #endif - return result; - } -#if CYTHON_COMPILING_IN_LIMITED_API - py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); - if (!py_name) return NULL; - PyErr_Format(PyExc_TypeError, - "%.200S() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", - py_name, size); - Py_DECREF(py_name); -#else - PyErr_Format(PyExc_TypeError, - "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", - f->m_ml->ml_name, size); -#endif - return NULL; - } - break; - default: - PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); - return NULL; - } -#if CYTHON_COMPILING_IN_LIMITED_API - py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); - if (!py_name) return NULL; - PyErr_Format(PyExc_TypeError, "%.200S() takes no keyword arguments", - py_name); - Py_DECREF(py_name); -#else - PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", - f->m_ml->ml_name); -#endif - return NULL; -} -static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *self, *result; -#if CYTHON_COMPILING_IN_LIMITED_API - self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func); - if (unlikely(!self) && PyErr_Occurred()) return NULL; -#else - self = ((PyCFunctionObject*)func)->m_self; -#endif - result = __Pyx_CyFunction_CallMethod(func, self, arg, kw); - return result; -} -static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { - PyObject *result; - __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; -#if CYTHON_METH_FASTCALL - __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc); - if (vc) { -#if CYTHON_ASSUME_SAFE_MACROS - return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw); -#else - (void) &__Pyx_PyVectorcall_FastCallDict; - return PyVectorcall_Call(func, args, kw); -#endif - } -#endif - if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { - Py_ssize_t argc; - PyObject *new_args; - PyObject *self; -#if CYTHON_ASSUME_SAFE_MACROS - argc = PyTuple_GET_SIZE(args); -#else - argc = PyTuple_Size(args); - if (unlikely(!argc) < 0) return NULL; -#endif - new_args = PyTuple_GetSlice(args, 1, argc); - if (unlikely(!new_args)) - return NULL; - self = PyTuple_GetItem(args, 0); - if (unlikely(!self)) { - Py_DECREF(new_args); -#if PY_MAJOR_VERSION > 2 - PyErr_Format(PyExc_TypeError, - "unbound method %.200S() needs an argument", - cyfunc->func_qualname); -#else - PyErr_SetString(PyExc_TypeError, - "unbound method needs an argument"); -#endif - return NULL; - } - result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); - Py_DECREF(new_args); - } else { - result = __Pyx_CyFunction_Call(func, args, kw); - } - return result; -} -#if CYTHON_METH_FASTCALL -static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames) -{ - int ret = 0; - if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { - if (unlikely(nargs < 1)) { - PyErr_Format(PyExc_TypeError, "%.200s() needs an argument", - ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); - return -1; - } - ret = 1; - } - if (unlikely(kwnames) && unlikely(PyTuple_GET_SIZE(kwnames))) { - PyErr_Format(PyExc_TypeError, - "%.200s() takes no keyword arguments", ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); - return -1; - } - return ret; -} -static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) -{ - __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; - PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; -#if CYTHON_BACKPORT_VECTORCALL - Py_ssize_t nargs = (Py_ssize_t)nargsf; -#else - Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); -#endif - PyObject *self; - switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { - case 1: - self = args[0]; - args += 1; - nargs -= 1; - break; - case 0: - self = ((PyCFunctionObject*)cyfunc)->m_self; - break; - default: - return NULL; - } - if (unlikely(nargs != 0)) { - PyErr_Format(PyExc_TypeError, - "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", - def->ml_name, nargs); - return NULL; - } - return def->ml_meth(self, NULL); -} -static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) -{ - __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; - PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; -#if CYTHON_BACKPORT_VECTORCALL - Py_ssize_t nargs = (Py_ssize_t)nargsf; -#else - Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); -#endif - PyObject *self; - switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { - case 1: - self = args[0]; - args += 1; - nargs -= 1; - break; - case 0: - self = ((PyCFunctionObject*)cyfunc)->m_self; - break; - default: - return NULL; - } - if (unlikely(nargs != 1)) { - PyErr_Format(PyExc_TypeError, - "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", - def->ml_name, nargs); - return NULL; - } - return def->ml_meth(self, args[0]); -} -static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) -{ - __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; - PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; -#if CYTHON_BACKPORT_VECTORCALL - Py_ssize_t nargs = (Py_ssize_t)nargsf; -#else - Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); -#endif - PyObject *self; - switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { - case 1: - self = args[0]; - args += 1; - nargs -= 1; - break; - case 0: - self = ((PyCFunctionObject*)cyfunc)->m_self; - break; - default: - return NULL; - } - 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) -{ - __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; - PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; - PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc); -#if CYTHON_BACKPORT_VECTORCALL - Py_ssize_t nargs = (Py_ssize_t)nargsf; -#else - Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); -#endif - PyObject *self; - switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { - case 1: - self = args[0]; - args += 1; - nargs -= 1; - break; - case 0: - self = ((PyCFunctionObject*)cyfunc)->m_self; - break; - default: - return NULL; - } - return ((__Pyx_PyCMethod)(void(*)(void))def->ml_meth)(self, cls, args, (size_t)nargs, kwnames); -} -#endif -#if CYTHON_USE_TYPE_SPECS -static PyType_Slot __pyx_CyFunctionType_slots[] = { - {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc}, - {Py_tp_repr, (void *)__Pyx_CyFunction_repr}, - {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod}, - {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse}, - {Py_tp_clear, (void *)__Pyx_CyFunction_clear}, - {Py_tp_methods, (void *)__pyx_CyFunction_methods}, - {Py_tp_members, (void *)__pyx_CyFunction_members}, - {Py_tp_getset, (void *)__pyx_CyFunction_getsets}, - {Py_tp_descr_get, (void *)__Pyx_PyMethod_New}, - {0, 0}, -}; -static PyType_Spec __pyx_CyFunctionType_spec = { - __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", - sizeof(__pyx_CyFunctionObject), - 0, -#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR - Py_TPFLAGS_METHOD_DESCRIPTOR | -#endif -#if (defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL) - _Py_TPFLAGS_HAVE_VECTORCALL | -#endif - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, - __pyx_CyFunctionType_slots -}; -#else -static PyTypeObject __pyx_CyFunctionType_type = { - PyVarObject_HEAD_INIT(0, 0) - __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", - sizeof(__pyx_CyFunctionObject), - 0, - (destructor) __Pyx_CyFunction_dealloc, -#if !CYTHON_METH_FASTCALL - 0, -#elif CYTHON_BACKPORT_VECTORCALL - (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall), -#else - offsetof(PyCFunctionObject, vectorcall), -#endif - 0, - 0, -#if PY_MAJOR_VERSION < 3 - 0, -#else - 0, -#endif - (reprfunc) __Pyx_CyFunction_repr, - 0, - 0, - 0, - 0, - __Pyx_CyFunction_CallAsMethod, - 0, - 0, - 0, - 0, -#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR - Py_TPFLAGS_METHOD_DESCRIPTOR | -#endif -#if defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL - _Py_TPFLAGS_HAVE_VECTORCALL | -#endif - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, - 0, - (traverseproc) __Pyx_CyFunction_traverse, - (inquiry) __Pyx_CyFunction_clear, - 0, -#if PY_VERSION_HEX < 0x030500A0 - offsetof(__pyx_CyFunctionObject, func_weakreflist), -#else - offsetof(PyCFunctionObject, m_weakreflist), -#endif - 0, - 0, - __pyx_CyFunction_methods, - __pyx_CyFunction_members, - __pyx_CyFunction_getsets, - 0, - 0, - __Pyx_PyMethod_New, - 0, - offsetof(__pyx_CyFunctionObject, func_dict), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, -#if PY_VERSION_HEX >= 0x030400a1 - 0, -#endif -#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) - 0, -#endif -#if __PYX_NEED_TP_PRINT_SLOT - 0, -#endif -#if PY_VERSION_HEX >= 0x030C0000 - 0, -#endif -#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 - 0, -#endif -}; -#endif -static int __pyx_CyFunction_init(PyObject *module) { -#if CYTHON_USE_TYPE_SPECS - __pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL); -#else - CYTHON_UNUSED_VAR(module); - __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); -#endif - if (unlikely(__pyx_CyFunctionType == NULL)) { - return -1; - } - return 0; -} -static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults = PyObject_Malloc(size); - if (unlikely(!m->defaults)) - return PyErr_NoMemory(); - memset(m->defaults, 0, size); - m->defaults_pyobjects = pyobjects; - m->defaults_size = size; - return m->defaults; -} -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults_tuple = tuple; - Py_INCREF(tuple); -} -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults_kwdict = dict; - Py_INCREF(dict); -} -static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->func_annotations = dict; - Py_INCREF(dict); -} - -/* CythonFunction */ -static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname, - PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { - PyObject *op = __Pyx_CyFunction_Init( - PyObject_GC_New(__pyx_CyFunctionObject, __pyx_CyFunctionType), - ml, flags, qualname, closure, module, globals, code - ); - if (likely(op)) { - PyObject_GC_Track(op); - } - return op; -} - -/* CalculateMetaclass */ -static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) { - Py_ssize_t i, nbases; -#if CYTHON_ASSUME_SAFE_MACROS - nbases = PyTuple_GET_SIZE(bases); -#else - nbases = PyTuple_Size(bases); - if (nbases < 0) return NULL; -#endif - for (i=0; i < nbases; i++) { - PyTypeObject *tmptype; -#if CYTHON_ASSUME_SAFE_MACROS - PyObject *tmp = PyTuple_GET_ITEM(bases, i); -#else - PyObject *tmp = PyTuple_GetItem(bases, i); - if (!tmp) return NULL; -#endif - tmptype = Py_TYPE(tmp); -#if PY_MAJOR_VERSION < 3 - if (tmptype == &PyClass_Type) - continue; -#endif - if (!metaclass) { - metaclass = tmptype; - continue; - } - if (PyType_IsSubtype(metaclass, tmptype)) - continue; - if (PyType_IsSubtype(tmptype, metaclass)) { - metaclass = tmptype; - continue; - } - PyErr_SetString(PyExc_TypeError, - "metaclass conflict: " - "the metaclass of a derived class " - "must be a (non-strict) subclass " - "of the metaclasses of all its bases"); - return NULL; - } - if (!metaclass) { -#if PY_MAJOR_VERSION < 3 - metaclass = &PyClass_Type; -#else - metaclass = &PyType_Type; -#endif - } - Py_INCREF((PyObject*) metaclass); - return (PyObject*) metaclass; -} - -/* PyObjectCall2Args */ -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { - PyObject *args[3] = {NULL, arg1, arg2}; - return __Pyx_PyObject_FastCall(function, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); -} - -/* PyObjectLookupSpecial */ -#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error) { - PyObject *res; - PyTypeObject *tp = Py_TYPE(obj); -#if PY_MAJOR_VERSION < 3 - if (unlikely(PyInstance_Check(obj))) - return with_error ? __Pyx_PyObject_GetAttrStr(obj, attr_name) : __Pyx_PyObject_GetAttrStrNoError(obj, attr_name); -#endif - res = _PyType_Lookup(tp, attr_name); - if (likely(res)) { - descrgetfunc f = Py_TYPE(res)->tp_descr_get; - if (!f) { - Py_INCREF(res); - } else { - res = f(res, obj, (PyObject *)tp); - } - } else if (with_error) { - PyErr_SetObject(PyExc_AttributeError, attr_name); - } - return res; -} -#endif - -/* Py3ClassCreate */ -static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, - PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) { - PyObject *ns; - if (metaclass) { - PyObject *prep = __Pyx_PyObject_GetAttrStrNoError(metaclass, __pyx_n_s_prepare); - if (prep) { - PyObject *pargs[3] = {NULL, name, bases}; - ns = __Pyx_PyObject_FastCallDict(prep, pargs+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, mkw); - Py_DECREF(prep); - } else { - if (unlikely(PyErr_Occurred())) - return NULL; - ns = PyDict_New(); - } - } else { - ns = PyDict_New(); - } - if (unlikely(!ns)) - return NULL; - if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad; -#if PY_VERSION_HEX >= 0x03030000 - if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad; -#else - CYTHON_MAYBE_UNUSED_VAR(qualname); -#endif - if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad; - return ns; -bad: - Py_DECREF(ns); - return NULL; -} -#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS -static int __Pyx_SetNamesPEP487(PyObject *type_obj) { - PyTypeObject *type = (PyTypeObject*) type_obj; - PyObject *names_to_set, *key, *value, *set_name, *tmp; - Py_ssize_t i = 0; -#if CYTHON_USE_TYPE_SLOTS - names_to_set = PyDict_Copy(type->tp_dict); -#else - { - PyObject *d = PyObject_GetAttr(type_obj, __pyx_n_s_dict); - names_to_set = NULL; - if (likely(d)) { - PyObject *names_to_set = PyDict_New(); - int ret = likely(names_to_set) ? PyDict_Update(names_to_set, d) : -1; - Py_DECREF(d); - if (unlikely(ret < 0)) - Py_CLEAR(names_to_set); - } - } -#endif - if (unlikely(names_to_set == NULL)) - goto bad; - while (PyDict_Next(names_to_set, &i, &key, &value)) { - set_name = __Pyx_PyObject_LookupSpecialNoError(value, __pyx_n_s_set_name); - if (unlikely(set_name != NULL)) { - tmp = __Pyx_PyObject_Call2Args(set_name, type_obj, key); - Py_DECREF(set_name); - if (unlikely(tmp == NULL)) { - __Pyx_TypeName value_type_name = - __Pyx_PyType_GetName(Py_TYPE(value)); - __Pyx_TypeName type_name = __Pyx_PyType_GetName(type); - PyErr_Format(PyExc_RuntimeError, -#if PY_MAJOR_VERSION >= 3 - "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %R " "in '" __Pyx_FMT_TYPENAME "'", - value_type_name, key, type_name); -#else - "Error calling __set_name__ on '" __Pyx_FMT_TYPENAME "' instance %.100s in '" __Pyx_FMT_TYPENAME "'", - value_type_name, - PyString_Check(key) ? PyString_AS_STRING(key) : "?", - type_name); -#endif - goto bad; - } else { - Py_DECREF(tmp); - } - } - else if (unlikely(PyErr_Occurred())) { - goto bad; - } - } - Py_DECREF(names_to_set); - return 0; -bad: - Py_XDECREF(names_to_set); - return -1; -} -static PyObject *__Pyx_InitSubclassPEP487(PyObject *type_obj, PyObject *mkw) { -#if CYTHON_USE_TYPE_SLOTS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - PyTypeObject *type = (PyTypeObject*) type_obj; - PyObject *mro = type->tp_mro; - Py_ssize_t i, nbases; - if (unlikely(!mro)) goto done; - (void) &__Pyx_GetBuiltinName; - Py_INCREF(mro); - nbases = PyTuple_GET_SIZE(mro); - assert(PyTuple_GET_ITEM(mro, 0) == type_obj); - for (i = 1; i < nbases-1; i++) { - PyObject *base, *dict, *meth; - base = PyTuple_GET_ITEM(mro, i); - dict = ((PyTypeObject *)base)->tp_dict; - meth = __Pyx_PyDict_GetItemStrWithError(dict, __pyx_n_s_init_subclass); - if (unlikely(meth)) { - descrgetfunc f = Py_TYPE(meth)->tp_descr_get; - PyObject *res; - Py_INCREF(meth); - if (likely(f)) { - res = f(meth, NULL, type_obj); - Py_DECREF(meth); - if (unlikely(!res)) goto bad; - meth = res; - } - res = __Pyx_PyObject_FastCallDict(meth, NULL, 0, mkw); - Py_DECREF(meth); - if (unlikely(!res)) goto bad; - Py_DECREF(res); - goto done; - } else if (unlikely(PyErr_Occurred())) { - goto bad; - } - } -done: - Py_XDECREF(mro); - return type_obj; -bad: - Py_XDECREF(mro); - Py_DECREF(type_obj); - return NULL; -#else - PyObject *super_type, *super, *func, *res; -#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type) - super_type = __Pyx_GetBuiltinName(__pyx_n_s_super); -#else - super_type = (PyObject*) &PySuper_Type; - (void) &__Pyx_GetBuiltinName; -#endif - super = likely(super_type) ? __Pyx_PyObject_Call2Args(super_type, type_obj, type_obj) : NULL; -#if CYTHON_COMPILING_IN_PYPY && !defined(PySuper_Type) - Py_XDECREF(super_type); -#endif - if (unlikely(!super)) { - Py_CLEAR(type_obj); - goto done; - } - func = __Pyx_PyObject_GetAttrStrNoError(super, __pyx_n_s_init_subclass); - Py_DECREF(super); - if (likely(!func)) { - if (unlikely(PyErr_Occurred())) - Py_CLEAR(type_obj); - goto done; - } - res = __Pyx_PyObject_FastCallDict(func, NULL, 0, mkw); - Py_DECREF(func); - if (unlikely(!res)) - Py_CLEAR(type_obj); - Py_XDECREF(res); -done: - return type_obj; -#endif -} -#endif -static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, - PyObject *dict, PyObject *mkw, - int calculate_metaclass, int allow_py2_metaclass) { - PyObject *result; - PyObject *owned_metaclass = NULL; - PyObject *margs[4] = {NULL, name, bases, dict}; - if (allow_py2_metaclass) { - owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass); - if (owned_metaclass) { - metaclass = owned_metaclass; - } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) { - PyErr_Clear(); - } else { - return NULL; - } - } - if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) { - metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases); - Py_XDECREF(owned_metaclass); - if (unlikely(!metaclass)) - return NULL; - owned_metaclass = metaclass; - } - result = __Pyx_PyObject_FastCallDict(metaclass, margs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, -#if PY_VERSION_HEX < 0x030600A4 - (metaclass == (PyObject*)&PyType_Type) ? NULL : mkw -#else - mkw -#endif - ); - Py_XDECREF(owned_metaclass); -#if PY_VERSION_HEX < 0x030600A4 && CYTHON_PEP487_INIT_SUBCLASS - if (likely(result) && likely(PyType_Check(result))) { - if (unlikely(__Pyx_SetNamesPEP487(result) < 0)) { - Py_CLEAR(result); - } else { - result = __Pyx_InitSubclassPEP487(result, mkw); - } - } -#else - (void) &__Pyx_GetBuiltinName; -#endif - return result; -} - -/* CLineInTraceback */ -#ifndef CYTHON_CLINE_IN_TRACEBACK -static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { - PyObject *use_cline; - PyObject *ptype, *pvalue, *ptraceback; -#if CYTHON_COMPILING_IN_CPYTHON - PyObject **cython_runtime_dict; -#endif - CYTHON_MAYBE_UNUSED_VAR(tstate); - if (unlikely(!__pyx_cython_runtime)) { - return c_line; - } - __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); -#if CYTHON_COMPILING_IN_CPYTHON - cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); - if (likely(cython_runtime_dict)) { - __PYX_PY_DICT_LOOKUP_IF_MODIFIED( - use_cline, *cython_runtime_dict, - __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) - } else -#endif - { - PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStrNoError(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); - if (use_cline_obj) { - use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; - Py_DECREF(use_cline_obj); - } else { - PyErr_Clear(); - use_cline = NULL; - } - } - if (!use_cline) { - c_line = 0; - (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); - } - else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { - c_line = 0; - } - __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); - return c_line; -} -#endif - -/* CodeObjectCache */ -#if !CYTHON_COMPILING_IN_LIMITED_API -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = start + (end - start) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} -#endif - -/* AddTraceback */ -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API - #ifndef Py_BUILD_CORE - #define Py_BUILD_CORE 1 - #endif - #include "internal/pycore_frame.h" -#endif -#if CYTHON_COMPILING_IN_LIMITED_API -static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, PyObject *scratch_dict, - PyObject *firstlineno, PyObject *name) { - PyObject *replace = NULL; - if (unlikely(PyDict_SetItemString(scratch_dict, "co_firstlineno", firstlineno))) return NULL; - if (unlikely(PyDict_SetItemString(scratch_dict, "co_name", name))) return NULL; - replace = PyObject_GetAttrString(code, "replace"); - if (likely(replace)) { - PyObject *result; - result = PyObject_Call(replace, __pyx_empty_tuple, scratch_dict); - Py_DECREF(replace); - return result; - } - PyErr_Clear(); - #if __PYX_LIMITED_VERSION_HEX < 0x030780000 - { - PyObject *compiled = NULL, *result = NULL; - if (unlikely(PyDict_SetItemString(scratch_dict, "code", code))) return NULL; - if (unlikely(PyDict_SetItemString(scratch_dict, "type", (PyObject*)(&PyType_Type)))) return NULL; - compiled = Py_CompileString( - "out = type(code)(\n" - " code.co_argcount, code.co_kwonlyargcount, code.co_nlocals, code.co_stacksize,\n" - " code.co_flags, code.co_code, code.co_consts, code.co_names,\n" - " code.co_varnames, code.co_filename, co_name, co_firstlineno,\n" - " code.co_lnotab)\n", "", Py_file_input); - if (!compiled) return NULL; - result = PyEval_EvalCode(compiled, scratch_dict, scratch_dict); - Py_DECREF(compiled); - if (!result) PyErr_Print(); - Py_DECREF(result); - result = PyDict_GetItemString(scratch_dict, "out"); - if (result) Py_INCREF(result); - return result; - } - #else - return NULL; - #endif -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyObject *code_object = NULL, *py_py_line = NULL, *py_funcname = NULL, *dict = NULL; - PyObject *replace = NULL, *getframe = NULL, *frame = NULL; - PyObject *exc_type, *exc_value, *exc_traceback; - int success = 0; - if (c_line) { - (void) __pyx_cfilenm; - (void) __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line); - } - PyErr_Fetch(&exc_type, &exc_value, &exc_traceback); - code_object = Py_CompileString("_getframe()", filename, Py_eval_input); - if (unlikely(!code_object)) goto bad; - py_py_line = PyLong_FromLong(py_line); - if (unlikely(!py_py_line)) goto bad; - py_funcname = PyUnicode_FromString(funcname); - if (unlikely(!py_funcname)) goto bad; - dict = PyDict_New(); - if (unlikely(!dict)) goto bad; - { - PyObject *old_code_object = code_object; - code_object = __Pyx_PyCode_Replace_For_AddTraceback(code_object, dict, py_py_line, py_funcname); - Py_DECREF(old_code_object); - } - if (unlikely(!code_object)) goto bad; - getframe = PySys_GetObject("_getframe"); - if (unlikely(!getframe)) goto bad; - if (unlikely(PyDict_SetItemString(dict, "_getframe", getframe))) goto bad; - frame = PyEval_EvalCode(code_object, dict, dict); - if (unlikely(!frame) || frame == Py_None) goto bad; - success = 1; - bad: - PyErr_Restore(exc_type, exc_value, exc_traceback); - Py_XDECREF(code_object); - Py_XDECREF(py_py_line); - Py_XDECREF(py_funcname); - Py_XDECREF(dict); - Py_XDECREF(replace); - if (success) { - PyTraceBack_Here( - (struct _frame*)frame); - } - Py_XDECREF(frame); -} -#else -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = NULL; - PyObject *py_funcname = NULL; - #if PY_MAJOR_VERSION < 3 - PyObject *py_srcfile = NULL; - py_srcfile = PyString_FromString(filename); - if (!py_srcfile) goto bad; - #endif - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - if (!py_funcname) goto bad; - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - if (!py_funcname) goto bad; - funcname = PyUnicode_AsUTF8(py_funcname); - if (!funcname) goto bad; - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - if (!py_funcname) goto bad; - #endif - } - #if PY_MAJOR_VERSION < 3 - py_code = __Pyx_PyCode_New( - 0, - 0, - 0, - 0, - 0, - 0, - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - #else - py_code = PyCode_NewEmpty(filename, funcname, py_line); - #endif - Py_XDECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_funcname); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(py_srcfile); - #endif - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyFrameObject *py_frame = 0; - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject *ptype, *pvalue, *ptraceback; - if (c_line) { - c_line = __Pyx_CLineForTraceback(tstate, c_line); - } - py_code = __pyx_find_code_object(c_line ? -c_line : py_line); - if (!py_code) { - __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) { - /* If the code object creation fails, then we should clear the - fetched exception references and propagate the new exception */ - Py_XDECREF(ptype); - Py_XDECREF(pvalue); - Py_XDECREF(ptraceback); - goto bad; - } - __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); - __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); - } - py_frame = PyFrame_New( - tstate, /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - __pyx_d, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - __Pyx_PyFrame_SetLineNumber(py_frame, py_line); - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} -#endif - -/* CIntToPy */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { -#ifdef __Pyx_HAS_GCC_DIAGNOSTIC -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wconversion" -#endif - const long neg_one = (long) -1, const_zero = (long) 0; -#ifdef __Pyx_HAS_GCC_DIAGNOSTIC -#pragma GCC diagnostic pop -#endif - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); -#endif - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); -#endif - } - } - { - 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 - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); -#else - 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"); - if (!from_bytes) return NULL; - py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(long)); - if (!py_bytes) goto limited_bad; - order_str = PyUnicode_FromString(little ? "little" : "big"); - if (!order_str) goto limited_bad; - arg_tuple = PyTuple_Pack(2, py_bytes, order_str); - if (!arg_tuple) goto limited_bad; - if (!is_unsigned) { - kwds = PyDict_New(); - if (!kwds) goto limited_bad; - if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; - } - result = PyObject_Call(from_bytes, arg_tuple, kwds); - limited_bad: - Py_XDECREF(kwds); - Py_XDECREF(arg_tuple); - Py_XDECREF(order_str); - Py_XDECREF(py_bytes); - Py_XDECREF(from_bytes); - return result; -#endif - } -} - -/* FormatTypeName */ -#if CYTHON_COMPILING_IN_LIMITED_API -static __Pyx_TypeName -__Pyx_PyType_GetName(PyTypeObject* tp) -{ - PyObject *name = __Pyx_PyObject_GetAttrStr((PyObject *)tp, - __pyx_n_s_name); - if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) { - PyErr_Clear(); - Py_XDECREF(name); - name = __Pyx_NewRef(__pyx_n_s__13); - } - return name; -} -#endif - -/* CIntFromPyVerify */ -#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ - __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) -#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ - __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) -#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ - {\ - func_type value = func_value;\ - if (sizeof(target_type) < sizeof(func_type)) {\ - if (unlikely(value != (func_type) (target_type) value)) {\ - func_type zero = 0;\ - if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ - return (target_type) -1;\ - if (is_unsigned && unlikely(value < zero))\ - goto raise_neg_overflow;\ - else\ - goto raise_overflow;\ - }\ - }\ - return (target_type) value;\ - } - -/* CIntFromPy */ -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { -#ifdef __Pyx_HAS_GCC_DIAGNOSTIC -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wconversion" -#endif - const long neg_one = (long) -1, const_zero = (long) 0; -#ifdef __Pyx_HAS_GCC_DIAGNOSTIC -#pragma GCC diagnostic pop -#endif - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if ((sizeof(long) < sizeof(long))) { - __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - 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])); - } - } - 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; - } - } -#endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 - 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; - } -#endif - 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)) -#endif - } - } 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]))); - } - } - 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) > 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) > 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; - } - } -#endif - 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)) -#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; -#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 - Py_DECREF(v); - if (likely(!ret)) - return val; - } - return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to long"); - return (long) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; -} - -/* CIntFromPy */ -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { -#ifdef __Pyx_HAS_GCC_DIAGNOSTIC -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wconversion" -#endif - const int neg_one = (int) -1, const_zero = (int) 0; -#ifdef __Pyx_HAS_GCC_DIAGNOSTIC -#pragma GCC diagnostic pop -#endif - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if ((sizeof(int) < sizeof(long))) { - __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - 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])); - } - } - 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; - } - } -#endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 - 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; - } -#endif - 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)) -#endif - } - } 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]))); - } - } - 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) > 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) > 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; - } - } -#endif - 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)) -#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; -#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 - Py_DECREF(v); - if (likely(!ret)) - return val; - } - return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to int"); - return (int) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; -} - -/* FastTypeChecks */ -#if CYTHON_COMPILING_IN_CPYTHON -static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { - while (a) { - a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*); - if (a == b) - return 1; - } - return b == &PyBaseObject_Type; -} -static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { - PyObject *mro; - if (a == b) return 1; - mro = a->tp_mro; - if (likely(mro)) { - Py_ssize_t i, n; - n = PyTuple_GET_SIZE(mro); - for (i = 0; i < n; i++) { - if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) - return 1; - } - return 0; - } - return __Pyx_InBases(a, b); -} -static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) { - PyObject *mro; - if (cls == a || cls == b) return 1; - mro = cls->tp_mro; - if (likely(mro)) { - Py_ssize_t i, n; - n = PyTuple_GET_SIZE(mro); - for (i = 0; i < n; i++) { - PyObject *base = PyTuple_GET_ITEM(mro, i); - if (base == (PyObject *)a || base == (PyObject *)b) - return 1; - } - return 0; - } - return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, b); -} -#if PY_MAJOR_VERSION == 2 -static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { - PyObject *exception, *value, *tb; - int res; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&exception, &value, &tb); - res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; - if (unlikely(res == -1)) { - PyErr_WriteUnraisable(err); - res = 0; - } - if (!res) { - res = PyObject_IsSubclass(err, exc_type2); - if (unlikely(res == -1)) { - PyErr_WriteUnraisable(err); - res = 0; - } - } - __Pyx_ErrRestore(exception, value, tb); - return res; -} -#else -static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { - if (exc_type1) { - return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2); - } else { - return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); - } -} -#endif -static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { - Py_ssize_t i, n; - assert(PyExceptionClass_Check(exc_type)); - n = PyTuple_GET_SIZE(tuple); -#if PY_MAJOR_VERSION >= 3 - for (i=0; i= 0x030B00A4 - return Py_Version & ~0xFFUL; -#else - const char* rt_version = Py_GetVersion(); - unsigned long version = 0; - unsigned long factor = 0x01000000UL; - unsigned int digit = 0; - int i = 0; - while (factor) { - while ('0' <= rt_version[i] && rt_version[i] <= '9') { - digit = digit * 10 + (unsigned int) (rt_version[i] - '0'); - ++i; - } - version += factor * digit; - if (rt_version[i] != '.') - break; - digit = 0; - factor >>= 8; - ++i; - } - return version; -#endif -} -static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer) { - const unsigned long MAJOR_MINOR = 0xFFFF0000UL; - if ((rt_version & MAJOR_MINOR) == (ct_version & MAJOR_MINOR)) - return 0; - if (likely(allow_newer && (rt_version & MAJOR_MINOR) > (ct_version & MAJOR_MINOR))) - return 1; - { - char message[200]; - PyOS_snprintf(message, sizeof(message), - "compile time Python version %d.%d " - "of module '%.100s' " - "%s " - "runtime version %d.%d", - (int) (ct_version >> 24), (int) ((ct_version >> 16) & 0xFF), - __Pyx_MODULE_NAME, - (allow_newer) ? "was newer than" : "does not match", - (int) (rt_version >> 24), (int) ((rt_version >> 16) & 0xFF) - ); - return PyErr_WarnEx(NULL, message, 1); - } -} - -/* InitStrings */ -#if PY_MAJOR_VERSION >= 3 -static int __Pyx_InitString(__Pyx_StringTabEntry t, PyObject **str) { - if (t.is_unicode | t.is_str) { - if (t.intern) { - *str = PyUnicode_InternFromString(t.s); - } else if (t.encoding) { - *str = PyUnicode_Decode(t.s, t.n - 1, t.encoding, NULL); - } else { - *str = PyUnicode_FromStringAndSize(t.s, t.n - 1); - } - } else { - *str = PyBytes_FromStringAndSize(t.s, t.n - 1); - } - if (!*str) - return -1; - if (PyObject_Hash(*str) == -1) - return -1; - return 0; -} -#endif -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { - while (t->p) { - #if PY_MAJOR_VERSION >= 3 - __Pyx_InitString(*t, t->p); - #else - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - if (!*t->p) - return -1; - if (PyObject_Hash(*t->p) == -1) - return -1; - #endif - ++t; - } - return 0; -} - -#include -static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) { - size_t len = strlen(s); - if (unlikely(len > (size_t) PY_SSIZE_T_MAX)) { - PyErr_SetString(PyExc_OverflowError, "byte string is too long"); - return -1; - } - return (Py_ssize_t) len; -} -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { - Py_ssize_t len = __Pyx_ssize_strlen(c_str); - if (unlikely(len < 0)) return NULL; - return __Pyx_PyUnicode_FromStringAndSize(c_str, len); -} -static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* c_str) { - Py_ssize_t len = __Pyx_ssize_strlen(c_str); - if (unlikely(len < 0)) return NULL; - return PyByteArray_FromStringAndSize(c_str, len); -} -static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { - Py_ssize_t ignore; - return __Pyx_PyObject_AsStringAndSize(o, &ignore); -} -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -#if !CYTHON_PEP393_ENABLED -static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { - char* defenc_c; - PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); - if (!defenc) return NULL; - defenc_c = PyBytes_AS_STRING(defenc); -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - { - char* end = defenc_c + PyBytes_GET_SIZE(defenc); - char* c; - for (c = defenc_c; c < end; c++) { - if ((unsigned char) (*c) >= 128) { - PyUnicode_AsASCIIString(o); - return NULL; - } - } - } -#endif - *length = PyBytes_GET_SIZE(defenc); - return defenc_c; -} -#else -static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { - if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - if (likely(PyUnicode_IS_ASCII(o))) { - *length = PyUnicode_GET_LENGTH(o); - return PyUnicode_AsUTF8(o); - } else { - PyUnicode_AsASCIIString(o); - return NULL; - } -#else - return PyUnicode_AsUTF8AndSize(o, length); -#endif -} -#endif -#endif -static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT - if ( -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - __Pyx_sys_getdefaultencoding_not_ascii && -#endif - PyUnicode_Check(o)) { - return __Pyx_PyUnicode_AsStringAndSize(o, length); - } else -#endif -#if (!CYTHON_COMPILING_IN_PYPY && !CYTHON_COMPILING_IN_LIMITED_API) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) - if (PyByteArray_Check(o)) { - *length = PyByteArray_GET_SIZE(o); - return PyByteArray_AS_STRING(o); - } else -#endif - { - char* result; - int r = PyBytes_AsStringAndSize(o, &result, length); - if (unlikely(r < 0)) { - return NULL; - } else { - return result; - } - } -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { - int retval; - if (unlikely(!x)) return -1; - retval = __Pyx_PyObject_IsTrue(x); - Py_DECREF(x); - return retval; -} -static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { - __Pyx_TypeName result_type_name = __Pyx_PyType_GetName(Py_TYPE(result)); -#if PY_MAJOR_VERSION >= 3 - if (PyLong_Check(result)) { - if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, - "__int__ returned non-int (type " __Pyx_FMT_TYPENAME "). " - "The ability to return an instance of a strict subclass of int is deprecated, " - "and may be removed in a future version of Python.", - result_type_name)) { - __Pyx_DECREF_TypeName(result_type_name); - Py_DECREF(result); - return NULL; - } - __Pyx_DECREF_TypeName(result_type_name); - return result; - } -#endif - PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type " __Pyx_FMT_TYPENAME ")", - type_name, type_name, result_type_name); - __Pyx_DECREF_TypeName(result_type_name); - Py_DECREF(result); - return NULL; -} -static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { -#if CYTHON_USE_TYPE_SLOTS - PyNumberMethods *m; -#endif - const char *name = NULL; - PyObject *res = NULL; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x) || PyLong_Check(x))) -#else - if (likely(PyLong_Check(x))) -#endif - return __Pyx_NewRef(x); -#if CYTHON_USE_TYPE_SLOTS - m = Py_TYPE(x)->tp_as_number; - #if PY_MAJOR_VERSION < 3 - if (m && m->nb_int) { - name = "int"; - res = m->nb_int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = m->nb_long(x); - } - #else - if (likely(m && m->nb_int)) { - name = "int"; - res = m->nb_int(x); - } - #endif -#else - if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { - res = PyNumber_Int(x); - } -#endif - if (likely(res)) { -#if PY_MAJOR_VERSION < 3 - if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { -#else - if (unlikely(!PyLong_CheckExact(res))) { -#endif - return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject *x; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(b))) { - if (sizeof(Py_ssize_t) >= sizeof(long)) - return PyInt_AS_LONG(b); - else - return PyInt_AsSsize_t(b); - } -#endif - if (likely(PyLong_CheckExact(b))) { - #if CYTHON_USE_PYLONG_INTERNALS - if (likely(__Pyx_PyLong_IsCompact(b))) { - return __Pyx_PyLong_CompactValue(b); - } else { - const digit* digits = __Pyx_PyLong_Digits(b); - const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b); - switch (size) { - case 2: - if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { - return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -2: - if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case 3: - if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { - return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -3: - if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case 4: - if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { - return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -4: - if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - } - } - #endif - return PyLong_AsSsize_t(b); - } - x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} -static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) { - if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) { - return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o); -#if PY_MAJOR_VERSION < 3 - } else if (likely(PyInt_CheckExact(o))) { - return PyInt_AS_LONG(o); -#endif - } else { - Py_ssize_t ival; - PyObject *x; - x = PyNumber_Index(o); - if (!x) return -1; - ival = PyInt_AsLong(x); - Py_DECREF(x); - return ival; - } -} -static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { - return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); -} -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { - return PyInt_FromSize_t(ival); -} - - -/* #### Code section: utility_code_pragmas_end ### */ -#ifdef _MSC_VER -#pragma warning( pop ) -#endif - - - -/* #### Code section: end ### */ -#endif /* Py_PYTHON_H */ diff --git a/scripts/scriptscython/buttons.pyx b/scripts/scriptspy/buttons.py similarity index 91% rename from scripts/scriptscython/buttons.pyx rename to scripts/scriptspy/buttons.py index 86fd857..a3bf00a 100644 --- a/scripts/scriptscython/buttons.pyx +++ b/scripts/scriptspy/buttons.py @@ -30,4 +30,4 @@ def update(self, mouse_rect): if self.collide(mouse_rect): return True def render(self, surf, font): - font.render(surf, self.text, self.pos, scale=self.scale, colour=self.fontcolour) + font.render(surf, self.text, self.pos, scale=self.scale) diff --git a/scripts/scriptspy/clouds.py b/scripts/scriptspy/clouds.py new file mode 100644 index 0000000..7d7eb97 --- /dev/null +++ b/scripts/scriptspy/clouds.py @@ -0,0 +1,32 @@ +import random + +class Cloud: + def __init__(self, pos, img, speed, depth): + self.pos = list(pos) + self.img = img + self.speed = speed + self.depth = depth + + def update(self): + self.pos[0] += self.speed + + def render(self, surf, offset=(0, 0)): + render_pos = (self.pos[0] - offset[0] * self.depth, self.pos[1] - offset[1] * self.depth) + surf.blit(self.img, (render_pos[0] % (surf.get_width() + self.img.get_width()) - self.img.get_width(), render_pos[1] % (surf.get_height() + self.img.get_height()) - self.img.get_height())) + +class Clouds: + def __init__(self, cloud_images, count=16): + self.clouds = [] + + for i in range(count): + self.clouds.append(Cloud((random.random() * 99999, random.random() * 99999), random.choice(cloud_images), random.random() * 0.05 + 0.05, random.random() * 0.6 + 0.2)) + + self.clouds.sort(key=lambda x: x.depth) + + def update(self): + for cloud in self.clouds: + cloud.update() + + def render(self, surf, offset=(0, 0)): + for cloud in self.clouds: + cloud.render(surf, offset=offset) \ No newline at end of file diff --git a/scripts/scriptspy/entities.py b/scripts/scriptspy/entities.py new file mode 100644 index 0000000..0fd760a --- /dev/null +++ b/scripts/scriptspy/entities.py @@ -0,0 +1,344 @@ +import math +import random + +import pygame + +from scripts.particle import Particle +from scripts.musicmanager import SoundSource +from scripts.spark import Spark + +#self.game.sfx['shoot'].set_volume(self.game.sfx['shoot'].get_volume() * (min(0, 100-math.dist(self.pos, self.game.player.pos) / 100))) +#self.game.sfx['shoot'].play() + +class PhysicsEntity: + def __init__(self, game, e_type, pos, size): + self.game = game + self.type = e_type + self.pos = list(pos) + self.size = size + self.velocity = [0, 0] + self.imgscaling = [0, 0] + self.wantscale = [0, 0] + + self.action = '' + self.anim_offset = (-3, -3) + self.flip = False + self.set_action('idle') + + self.last_movement = [0, 0] + + def rect(self): + return pygame.Rect(self.pos[0], self.pos[1], self.size[0], self.size[1]) + + def nearrect(self): + return pygame.Rect(self.pos[0] - 4, self.pos[1] - 4, self.size[0] + 8, self.size[1] + 4) + + def set_action(self, action): + if action != self.action: + self.action = action + self.animation = self.game.assets[self.type + '/' + self.action].copy() + + def handlescaling(self): + if self.imgscaling[0] > self.wantscale[0]: + #lower val + #math.floor(self.wantscale[0] / 30) + self.imgscaling[0] -= max(0.1, self.wantscale[0] * 3) + elif self.imgscaling[0] < self.wantscale[0]: + #increase val + self.imgscaling[0] += max(0.1, self.wantscale[0] * 3) + if self.imgscaling[1] > self.wantscale[1]: + #lower val + self.imgscaling[1] -= max(0.1, self.wantscale[1] / 3) + elif self.imgscaling[1] < self.wantscale[1]: + #increase val + self.imgscaling[1] += max(0.1, self.wantscale[1] / 3) + + def update(self, tilemap, movement=(0, 0), iswallsliding=False): + + self.collisions = {'up': False, 'down': False, 'right': False, 'left': False} + self.nearcollisions = {'right': False, 'left': False} + self.killcollisions = False + self.frame_movement = (movement[0] + self.velocity[0], movement[1] + self.velocity[1]) + + self.pos[0] += self.frame_movement[0] + if not iswallsliding: + entity_rect = self.rect() + for rect in tilemap.physics_rects_around(self.pos): + if entity_rect.colliderect(rect): + if self.frame_movement[0] > 0: + entity_rect.right = rect.left + self.collisions['right'] = True + if self.frame_movement[0] < 0: + entity_rect.left = rect.right + self.collisions['left'] = True + self.pos[0] = entity_rect.x + + + else: + entity_rect = self.nearrect() + true_rect = self.rect() + for rect in tilemap.physics_rects_around(self.pos): + if entity_rect.colliderect(rect): + if self.frame_movement[0] > 0: + true_rect.right = rect.left + self.collisions['right'] = True + if self.frame_movement[0] < 0: + true_rect.left = rect.right + self.collisions['left'] = True + self.pos[0] = entity_rect.x + + + self.pos[1] += self.frame_movement[1] + entity_rect = self.rect() + for rect in tilemap.physics_rects_around(self.pos): + if entity_rect.colliderect(rect): + if self.frame_movement[1] > 0: + entity_rect.bottom = rect.top + self.collisions['down'] = True + if self.frame_movement[1] < 0: + entity_rect.top = rect.bottom + self.collisions['up'] = True + self.pos[1] = entity_rect.y + + for rect in tilemap.kill_rects_around(self.pos): + if entity_rect.colliderect(rect): + self.killcollisions = True + + if movement[0] > 0: + self.flip = False + if movement[0] < 0: + self.flip = True + + self.last_movement = movement + self.last_collisions = self.collisions + self.velocity[1] = min(5, self.velocity[1] + 0.125) + + if self.collisions['down'] or self.collisions['up']: + self.velocity[1] = 0 + + self.handlescaling() + self.animation.update() + + + + def render(self, surf, scale=[0, 0],offset=(0, 0)): + img = self.animation.img() + imgsize = img.get_size() + + setscale = (imgsize[0] + scale[0], imgsize[1] + scale[1]) + self.imgscaled = pygame.transform.scale(self.animation.img(), setscale) + surf.blit(pygame.transform.flip(self.imgscaled, self.flip, False), (self.pos[0] - offset[0] + self.anim_offset[0], self.pos[1] - offset[1] + self.anim_offset[1])) + if self.game.isrenderhb == True: + self.renderhb(surf, offset) + + + def renderhb(self, surf, offset=(0, 0)): + if self.type == 'enemy': + pygame.draw.rect(surf, (255, 0, 0), (int(self.pos[0] - offset[0]), int(self.pos[1] - offset[1]), self.size[0], self.size[1]), 1) + elif self.type == 'player': + pygame.draw.rect(surf, (100, 255, 100), (int(self.pos[0] - offset[0]), int(self.pos[1] - offset[1]), self.size[0], self.size[1]), 1) + pygame.draw.rect(surf, (100, 255, 100), (int(self.pos[0] - offset[0] - 2), int(self.pos[1] - offset[1] - 2), self.size[0] + 4, self.size[1] + 4), 1) + else: + pygame.draw.rect(surf, (0, 0, 200), (int(self.pos[0] - offset[0]), int(self.pos[1] - offset[1]), self.size[0], self.size[1]), 1) + +class Enemy(PhysicsEntity): + def __init__(self, game, pos, size): + super().__init__(game, 'enemy', pos, size) + self.ss = SoundSource(pygame.mixer.Sound('data/sfx/shoot.wav'), self.pos, 1, 100) + self.walking = 0 + + def update(self, tilemap, movement=(0, 0)): + self.ss.update(self.game.player.pos, self.pos) + + if self.walking: + if tilemap.solid_check((self.rect().centerx + (-7 if self.flip else 7), self.pos[1] + 23)): + if (self.collisions['right'] or self.collisions['left']): + self.flip = not self.flip + else: + movement = (movement[0] - 0.5 if self.flip else 0.5, movement[1]) + else: + self.flip = not self.flip + self.walking = max(0, self.walking - 1) + if not self.walking: + dis = (self.game.player.pos[0] - self.pos[0], self.game.player.pos[1] - self.pos[1]) + if (abs(dis[1]) < 16): + if (self.flip and dis[0] < 0): + self.ss.play() + self.game.projectiles.append([[self.rect().centerx - 7, self.rect().centery], -1.5, 0]) + for i in range(4): + self.game.sparks.append(Spark(self.game.projectiles[-1][0], random.random() - 0.5 + math.pi, 2 + random.random())) + if (not self.flip and dis[0] > 0): + self.ss.play() + #prevol = self.game.sfx['shoot'].get_volume() + #self.game.sfx['shoot'].set_volume(self.game.sfx['shoot'].get_volume() * (min(0, 100-math.dist(self.pos, self.game.player.pos) / 100))) + #self.game.sfx['shoot'].play() + #self.game.sfx['shoot'].set_volume(prevol) + self.game.projectiles.append([[self.rect().centerx + 7, self.rect().centery], 1.5, 0]) + for i in range(4): + self.game.sparks.append(Spark(self.game.projectiles[-1][0], random.random() - 0.5, 2 + random.random())) + + + elif random.random() < 0.01: + self.walking = random.randint(30, 120) + + super().update(tilemap, movement=movement) + + if movement[0] != 0: + self.set_action('run') + else: + self.set_action('idle') + + if abs(self.game.player.dashing) >= 50: + if self.rect().colliderect(self.game.player.rect()): + self.game.screenshake = max(16, self.game.screenshake) + self.game.sfx['hit'].play() + self.game.particles.append(Particle(self.game, 'hit', self.rect().center, velocity=[0, 0], frame=0)) + for i in range(30): + + angle = random.random() * math.pi * 2 + speed = random.random() * 5 + self.game.sparks.append(Spark(self.rect().center, angle, 2 + random.random())) + self.game.particles.append(Particle(self.game, 'particle', self.rect().center, velocity=[math.cos(angle + math.pi) * speed * 0.5, math.sin(angle + math.pi) * speed * 0.5], frame=random.randint(0, 7))) + self.game.sparks.append(Spark(self.rect().center, 0, 5 + random.random())) + self.game.sparks.append(Spark(self.rect().center, math.pi, 5 + random.random())) + return True + + def render(self, surf, offset=(0, 0)): + super().render(surf, offset=offset) + + if self.flip: + surf.blit(pygame.transform.flip(self.game.assets['gun'], True, False), (self.rect().centerx - 4 - self.game.assets['gun'].get_width() - offset[0], self.rect().centery - offset[1])) + else: + surf.blit(self.game.assets['gun'], (self.rect().centerx + 4 - offset[0], self.rect().centery - offset[1])) + + +class Breakable(PhysicsEntity): + def __init__(self, game, pos, size): + super().__init__(game, 'breakable', pos, size) + + def update(self, tilemap, movement=(0, 0)): + + super().update(tilemap, movement=movement) + + if abs(self.game.player.dashing) >= 50: + if self.rect().colliderect(self.game.player.rect()): + self.game.screenshake = max(12, self.game.screenshake) + self.game.sfx['hit'].play() + + + return True + self.set_action('idle') + + def render(self, surf, offset=(0, 0)): + super().render(surf, offset=offset) + +class Shard(PhysicsEntity): + def __init__(self, game, pos, size): + self.once = 0 + self.timer = random.randint(100, 140) + type = random.randint(0, 2) + asset = "" + if type == 0: + asset = 'breakablea' + if type == 1: + asset = 'breakableb' + if type == 2: + asset = 'breakablec' + self.speed = [random.uniform(-4, 4), -20] + super().__init__(game, asset, pos, size) + def update(self, tilemap, movement=(0, 0)): + + + super().update(tilemap, movement=movement) + self.timer -= 1 + if self.once == 0: + self.set_action('idle') + + if self.speed[0] > 0: + self.speed[0] -= 0.1 + elif self.speed[0] < 0: + self.speed[0] += 0.1 + self.velocity[0] = self.speed[0] + if self.timer <= 0: + return True + if abs(self.game.player.dashing) >= 50 and self.timer <= 90: + if self.rect().colliderect(self.game.player.rect()): + self.game.screenshake = max(8, self.game.screenshake) + if self.speed[0] > 0: + self.speed[0] += 2 + elif self.speed[0] < 0: + self.speed[0] -= 2 + self.timer += 20 + self.game.sfx['hit'].play() + if abs(self.game.player.dashing) <= 50 and self.timer <= 90: + if self.rect().colliderect(self.game.player.rect()): + self.game.screenshake = max(1, self.game.screenshake) + if self.speed[0] > 0: + self.speed[0] += 1 + elif self.speed[0] < 0: + self.speed[0] -= 1 + self.timer += 20 + + def render(self, surf, offset=(0, 0)): + super().render(surf, offset=offset) + + + + + + + def render(self, surf, offset=(0, 0)): + super().render(surf, offset=offset) + +class Enemydead(PhysicsEntity): + def __init__(self, game, pos, size): + self.once = 0 + self.timer = 120 + type = random.randint(0, 2) + asset = "" + if type == 0: + asset = 'deada' + if type == 1: + asset = 'deadb' + if type == 2: + asset = 'deadc' + super().__init__(game, asset, pos, size) + self.speed = [((self.game.player.velocity[0] / 2) + 1) * 2, random.uniform(-2, -5)] + + + def update(self, tilemap, movement=(0, 0)): + + + super().update(tilemap, movement=movement) + if self.collisions['left'] or self.collisions['right']: + self.speed[0] = (self.speed[0] * -1) * 0.8 + self.timer -= 1 + if self.once == 0: + self.set_action('idle') + + if self.speed[0] > 0: + self.speed[0] -= 0.1 + elif self.speed[0] < 0: + self.speed[0] += 0.1 + self.speed[1] += 0.1 + self.velocity = self.speed + if self.timer <= 0: + return True + if abs(self.game.player.dashing) >= 50 and self.timer <= 90: + if self.rect().colliderect(self.game.player.rect()): + self.game.screenshake = max(8, self.game.screenshake) + if self.speed[0] > 0: + self.speed[0] += 2 + elif self.speed[0] < 0: + self.speed[0] -= 2 + self.game.sfx['hit'].play() + if abs(self.game.player.dashing) <= 50 and self.timer <= 90: + if self.rect().colliderect(self.game.player.rect()): + self.game.screenshake = max(1, self.game.screenshake) + if self.speed[0] > 0: + self.speed[0] += 1 + elif self.speed[0] < 0: + self.speed[0] -= 1 + + def render(self, surf, offset=(0, 0)): + super().render(surf, offset=offset) \ No newline at end of file diff --git a/scripts/scriptspy/musicmanager.py b/scripts/scriptspy/musicmanager.py new file mode 100644 index 0000000..54ae3bd --- /dev/null +++ b/scripts/scriptspy/musicmanager.py @@ -0,0 +1,147 @@ +import pygame +import math + + +class MusicManager(): + + def __init__(self, game): + self.game = game + self.sfx = { + 'jump': pygame.mixer.Sound('data/sfx/jump.wav'), + 'dash': pygame.mixer.Sound('data/sfx/dash.wav'), + 'hit': pygame.mixer.Sound('data/sfx/hit.wav'), + 'shoot': pygame.mixer.Sound('data/sfx/shoot.wav'), + 'spring': pygame.mixer.Sound('data/sfx/spring.wav'), + 'ambience': pygame.mixer.Sound('data/sfx/ambience.wav'), + } + + self.music = { + 'base' : pygame.mixer.Sound('data/music.wav'), + 'base2' : pygame.mixer.Sound('data/slodrum.mp3'), + } + self.music['base'].set_volume(0.5) + + for item in self.music: + self.music[item].play(-1) + + self.sfx['ambience'].set_volume(0.2) + self.sfx['shoot'].set_volume(0.4) + self.sfx['hit'].set_volume(0.8) + self.sfx['dash'].set_volume(0.3) + self.sfx['jump'].set_volume(0.7) + + self.channelnums = [] + i = 0 + for item in self.music: + self.channelnums.append(pygame.mixer.Channel(i)) + i += 1 + + for item in self.sfx: + self.channelnums.append(pygame.mixer.Channel(i)) + i += 1 + + self.channels = {} + for key in self.sfx: + for value in self.channelnums: + self.channels[key] = value + self.channelnums.remove(value) + break + for key in self.music: + for value in self.channelnums: + self.channels[key] = value + self.channelnums.remove(value) + break + + self.fades = [] + + + def fadebetween(self, musicid1=None, musicid2=None, timeinms=0, goalvolumeout=0.0, goalvolumein=1.0): + #musicid1 is fading out + #musicid2 is fading in + if not(musicid1 == None): + self.channels[musicid1].fadeout(timeinms) + if not(musicid2 == None): + self.channels[musicid2].set_volume(goalvolumein) + self.channels[musicid2].play(self.music[musicid2],-1, fade_ms=timeinms) + + #self.channels[musicid2].set_volume(0.0) + + #hin = ((self.channels[musicid1].get_volume() - goalvolumeout) / timeinms) + #out = ((self.channels[musicid2].get_volume() - goalvolumein) / timeinms) + #print(' . ') + #print(hin) + #print(' . ') + #print(out) + #self.fades.append([musicid1, hin, goalvolumein, musicid2, out, goalvolumeout]) + #self.channels[musicid1].play(self.music[musicid1], -1) + #self.channels[musicid2].play(self.music[musicid2], -1) + + def update(self): + + + + for fade in self.fades: + if self.channels[fade[0]].get_volume() == fade[2]: + self.fades.remove(fade) + else: + self.channels[fade[0]].set_volume((self.channels[fade[0]].get_volume() - fade[1])) + self.channels[fade[3]].set_volume((self.channels[fade[3]].get_volume() - fade[4])) + + self.setvolume(self.game.volume) + + + + def setvolume(self, volumetoset): + if volumetoset != 0: + for item in self.sfx: + self.sfx[item].set_volume((self.channels[item].get_volume() * (volumetoset / 100))) + for item in self.music: + self.music[item].set_volume((self.channels[item].get_volume() * (volumetoset / 100))) + +class Sfx(MusicManager): + + def __init__(self): + super().__init__() + +class Soundtrack(MusicManager): + + def __init__(self): + super().__init__() + + +class SoundSource(object): + def __init__(self, sound, pos, max_volume, audible_range): + """ + sound: a pygame.Sound object + pos: x, y position for calculating distance to listener + max_volume: float between 0 and 1 (inclusive), this is the volume when + the distance to the listener is 0 + audible_range: int or float, distance at which sound begins playing (at volume 0) + """ + self.sound = [sound].copy() + self.sound = self.sound[0] + self.pos = pos + self.max_volume = max_volume + self.audible_range = audible_range + self.active = False + + def update(self, listener, pos=[]): + """ + listener: the position of the listening device + pos: x, y position for calculating distance to listener + """ + active = False + distance_to_listener = abs(math.dist(listener, pos)) + if distance_to_listener <= self.audible_range: + active = True + volume = self.max_volume * (1 - (distance_to_listener / self.audible_range)) + #print(volume) + self.sound.set_volume(volume) + else: + active = False + self.sound.stop() + + def play(self): + self.sound.play() +pygame.init() +pygame.mixer.init() diff --git a/scripts/scriptspy/particle.py b/scripts/scriptspy/particle.py new file mode 100644 index 0000000..b599811 --- /dev/null +++ b/scripts/scriptspy/particle.py @@ -0,0 +1,26 @@ +class Particle: + def __init__(self, game, p_type, pos, velocity=[0, 0], frame=0): + self.game = game + self.type = p_type + self.pos = list(pos) + self.doanim = False + self.velocity = list(velocity) + self.animation = self.game.assets['particle/' + p_type].copy() + self.doanim = True + + self.animation.frame = frame + + def update(self): + kill = False + if self.animation.done: + kill = True + + self.pos[0] += self.velocity[0] + self.pos[1] += self.velocity[1] + self.animation.update() + return kill + + def render(self, surf, offset=(0, 0)): + img = self.animation.img() + surf.blit(img, (self.pos[0] - offset[0] - img.get_width() // 2, self.pos[1] - offset[1] - img.get_height() // 2)) + \ No newline at end of file diff --git a/scripts/scriptspy/player.py b/scripts/scriptspy/player.py new file mode 100644 index 0000000..577899a --- /dev/null +++ b/scripts/scriptspy/player.py @@ -0,0 +1,314 @@ +import math +import random +from functools import cache +import pygame + +from scripts.particle import Particle +from scripts.spark import Spark + + + + + + + + + + + +class Player(): + def __init__(self, game, pos, size): + self.game = game + self.type = 'player' + self.pos = list(pos) + self.size = size + self.velocity = [0, 0] + self.imgscaling = [0, 0] + self.wantscale = [0, 0] + + self.action = '' + self.anim_offset = (-3, -3) + self.flip = False + self.set_action('idle') + + self.last_movement = [0, 0] + self.air_time = 0 + self.jumps = 1 + self.wall_slide = False + self.dashing = 0 + self.isspark = 0 + self.coyote = 0 + self.stamina = 20 + self.cameratrcollisions = False + self.lockplayer = False + self.last_collisions = {'up': False, 'down': False, 'right': False, 'left': False} + + + + + def update(self, tilemap, movement=(0, 0)): + self.collisions = {'up': False, 'down': False, 'right': False, 'left': False} + self.nearcollisions = {'right': False, 'left': False} + self.killcollisions = False + self.frame_movement = (((movement[0] + self.velocity[0]) * self.game.dt) / 2, (movement[1] + self.velocity[1]))#* self.game.dt + + if not self.lockplayer: + self.pos[0] += self.frame_movement[0] + entity_rect = self.rect() + for rect in tilemap.physics_rects_around(self.pos): + if entity_rect.colliderect(rect): + if self.frame_movement[0] > 0: + entity_rect.right = rect.left + self.collisions['right'] = True + if self.frame_movement[0] < 0: + entity_rect.left = rect.right + self.collisions['left'] = True + self.pos[0] = entity_rect.x + + + # entity_rect = self.nearrect() + # true_rect = self.rect() + # for rect in tilemap.physics_rects_around(self.pos): + # if entity_rect.colliderect(rect): + ## if self.frame_movement[0] > 0: + # true_rect.right = rect.left + # self.collisions['right'] = True + # if self.frame_movement[0] < 0: + # true_rect.left = rect.right + # self.collisions['left'] = True + # self.pos[0] = entity_rect.x + if not self.lockplayer: + self.pos[1] += self.frame_movement[1] + entity_rect = self.rect() + for rect in tilemap.physics_rects_around(self.pos): + if entity_rect.colliderect(rect): + if self.frame_movement[1] > 0: + entity_rect.bottom = rect.top + self.collisions['down'] = True + if self.frame_movement[1] < 0: + entity_rect.top = rect.bottom + self.collisions['up'] = True + self.pos[1] = entity_rect.y + + for rect in tilemap.kill_rects_around(self.pos): + if entity_rect.colliderect(rect): + self.killcollisions = True + + if movement[0] > 0: + self.flip = False + if movement[0] < 0: + self.flip = True + + self.last_movement = movement + + self.velocity[1] = min(10, self.velocity[1] + 0.1) + + if self.collisions['down'] or self.collisions['up']: + self.velocity[1] = 0 + + if self.air_time > 4 and self.collisions['down']: + self.game.screenshake += self.air_time / 5 + self.game.particles.append(Particle(self.game, 'impactdust', [self.rect().left, self.rect().bottom], velocity=[0, 0], frame=random.randint(0, 7))) + + self.handlescaling() + self.animation.update() + + self.cameratrcollisions = False + entity_rect = self.rect() + rects, variant = tilemap.trigger_rects_around(self.pos) + i = 0 + for rect in rects: + if entity_rect.colliderect(rect): + + if variant[i] == 0: + self.game.camera = "locked" + elif variant[i] == 1: + self.game.camera = "free" + i += 1 + + for rect in tilemap.movement_rects_around(self.pos): + if entity_rect.colliderect(rect): + self.velocity[1] = -3 + self.jumps = 0 + self.air_time = 0 + self.game.sfx['spring'].play() + + + for rect in tilemap.checkpointcollisions(self.pos, self.game.display): + if self.rect().colliderect(rect): + if not [rect.centerx, rect.centery] in self.game.checkpointscollected: + self.game.hascheckpoint = 1 + self.game.checkpointscollected.append([rect.centerx, rect.centery]) + self.game.reload_enemies = self.game.enemies.copy() + self.game.respawnpoint = [rect.centerx, rect.centery] + + + self.isspark += 1 + self.air_time += 1 + + if self.killcollisions: + self.game.dead += 1 + + if self.air_time > 180: + if not self.game.dead: + self.game.screenshake = max(16, self.game.screenshake) + self.game.dead += 1 + + if self.game.dead > 0: + self.dashing = 0 + self.velocity = [0, 0] + + if self.collisions['down']: + + self.air_time = 0 + self.jumps = 1 + self.coyote = 10 + self.imgscaling = [0, 0] + else: + self.coyote -= 1 + + if self.coyote == 0: + self.jumps = 0 + + self.wall_slide = False + if (self.collisions['right'] or self.collisions['left']) and self.air_time > 4: + self.wall_slide = True + self.stamina -= 1 + self.air_time = 4 + self.velocity[1] = min(self.velocity[1], 0) + if self.collisions['right']: + self.flip = False + else: + self.flip = True + self.set_action('wall_slide') + + if not self.wall_slide: + if self.air_time > 4: + self.set_action('jump') + elif movement[0] != 0: + self.set_action('run') + if self.isspark == 20: + if not self.flip: + self.game.particles.append(Particle(self.game, 'walkdust', [self.rect().left, self.rect().bottom], velocity=[0, -0.2], frame=random.randint(0, 7))) + else: + self.game.particles.append(Particle(self.game, 'walkdust', [self.rect().right, self.rect().bottom], velocity=[0, -0.2], frame=random.randint(0, 7))) + self.isspark = 0 + else: + self.set_action('idle') + + if self.isspark == 20: + self.isspark = 0 + + if abs(self.dashing) in {60, 50}: + if self.velocity[1] < 0: + self.velocity[1] = 0 + + for i in range(20): + + angle = random.random() * math.pi * 2 + speed = random.random() * 0.5 + 0.5 + pvelocity = [math.cos(angle) * speed, math.sin(angle) * speed] + self.game.particles.append(Particle(self.game, 'particle', self.rect().center, velocity=pvelocity, frame=random.randint(0, 7))) + if self.dashing > 0: + self.dashing = max(0, self.dashing - 1) + if self.dashing < 0: + self.dashing = min(0, self.dashing + 1) + if abs(self.dashing) > 50: + self.velocity[0] = abs(self.dashing) / self.dashing * 8 + if abs(self.dashing) == 51: + self.velocity[0] *= 0.1 + pvelocity = [abs(self.dashing) / self.dashing * random.random() * 3, 0] + self.game.particles.append(Particle(self.game, 'particle', self.rect().center, velocity=pvelocity, frame=random.randint(0, 7))) + + self.wantscale[1] = abs(self.velocity[1] * 3) + if self.velocity[1] > 1: + self.wantscale[0] = (abs(self.velocity[1]) * -1) + + if self.velocity[0] > 0: + self.velocity[0] = max(self.velocity[0] - 0.2, 0) + else: + self.velocity[0] = min(self.velocity[0] + 0.2, 0) + + self.last_collisions = self.collisions + + def render(self, surf, offset=(0, 0), scale=[0, 0]): + if abs(self.dashing) <= 50: + img = self.animation.img() + imgsize = img.get_size() + + setscale = (imgsize[0] + scale[0], imgsize[1] + scale[1]) + self.imgscaled = pygame.transform.scale(self.animation.img(), setscale) + surf.blit(pygame.transform.flip(self.imgscaled, self.flip, False), (self.pos[0] - offset[0] + self.anim_offset[0], self.pos[1] - offset[1] + self.anim_offset[1])) + if self.game.isrenderhb == True: + self.renderhb(surf, offset) + + def jump(self): + if self.wall_slide: + self.wantscale = [-2, 3] + if self.flip and self.last_movement[0] < 0: + self.velocity[0] = max(3.5, self.velocity[0] + 3.5) + self.velocity[1] = -2.5 + self.air_time = 5 + self.jumps = max(0, self.jumps - 1) + return True + elif not self.flip and self.last_movement[0] > 0: + self.velocity[0] = min(-3.5, self.velocity[0] - 3.5) + self.velocity[1] = -2.5 + self.air_time = 5 + self.jumps = max(0, self.jumps - 1) + return True + + elif self.jumps: + self.wantscale = [-2, 3] + self.velocity[1] = -3 + self.jumps -= 1 + self.air_time = 5 + return True + + def kill_check(self, tilemap): + entity_rect = self.rect() + for rect in tilemap.kill_rects_around(self.pos): + if entity_rect.colliderect(rect): + return True + + def dash(self): + #if not self.dashing: + self.game.sfx['dash'].play() + self.game.screenshake = 16 + if self.flip: + self.dashing = -60 + else: + self.dashing = 60 + return 4 + #else: + #return 0 + + def rect(self): + return pygame.Rect(self.pos[0], self.pos[1], self.size[0], self.size[1]) + + def nearrect(self): + return pygame.Rect(self.pos[0] - 4, self.pos[1] - 4, self.size[0] + 8, self.size[1] + 8) + + def set_action(self, action): + if action != self.action: + self.action = action + self.animation = self.game.assets[self.type + '/' + self.action].copy() + + def handlescaling(self): + if self.imgscaling[0] > self.wantscale[0]: + #lower val + #math.floor(self.wantscale[0] / 30) + self.imgscaling[0] -= max(0.1, self.wantscale[0] * 3) + elif self.imgscaling[0] < self.wantscale[0]: + #increase val + self.imgscaling[0] += max(0.1, self.wantscale[0] * 3) + if self.imgscaling[1] > self.wantscale[1]: + #lower val + self.imgscaling[1] -= max(0.1, self.wantscale[1] / 3) + elif self.imgscaling[1] < self.wantscale[1]: + #increase val + self.imgscaling[1] += max(0.1, self.wantscale[1] / 3) + + def renderhb(self, surf, offset=(0, 0)): + pygame.draw.rect(surf, (100, 255, 100), (int(self.pos[0] - offset[0]), int(self.pos[1] - offset[1]), self.size[0], self.size[1]), 1) + pygame.draw.rect(surf, (100, 255, 100), (int(self.pos[0] - offset[0] - 4), int(self.pos[1] - offset[1] - 4), self.size[0] + 8, self.size[1] + 8), 1) diff --git a/scripts/scriptspy/room-maps.py b/scripts/scriptspy/room-maps.py new file mode 100644 index 0000000..4fc0b6a --- /dev/null +++ b/scripts/scriptspy/room-maps.py @@ -0,0 +1,7 @@ +import pygame + +#code for room based system +#what i want: +#each tile map is seperated into a room, with each room being a connected in some way +#stylegrounds and triggers +#each room is loaded individually and unloaded. \ No newline at end of file diff --git a/scripts/scriptspy/settings.py b/scripts/scriptspy/settings.py new file mode 100644 index 0000000..4418df9 --- /dev/null +++ b/scripts/scriptspy/settings.py @@ -0,0 +1,119 @@ +#for the main settings +import pygame +from scripts.buttons import Button +from scripts.sliders import Slider + +"""Classes needed: +-The main settings menu +-Key bindings and key rebinding +-Sound settings +-Video settings +""" +class Base_Settings: + def __init__(self, game): + self.game = game +class Settings: + def __init__(self, game): + self.game = game + self.current_menu = "main" + self.mouseinput = [0, 0] + self.mousedown = False + self.fonts = self.game.fonts + + self.sliders = { + 'sfx': Slider(self, pos=[50, 50]), + 'music': Slider(self), + } + + self.buttons = { + 'tosounds': Button(self, 'Sounds', 'soundsliders', self.fonts['small'], scale=[3, 3], pos=[24, 48]), + 'tokeybinds': Button(self, 'keybinds', 'keybinds', self.fonts['small'], scale=[3, 3], pos=[24,16]), + 'tores_opts': Button(self, 'resolution_options', 'screensize', self.fonts['small'], scale=[3, 3], pos=[24,80]) + } + + self.resolution_options = { + 'tiny': Button(self, '320 x 180', (320, 180), self.fonts['small'], scale=[1, 1], pos=[24, 16]), + 'small': Button(self, '480 x 270', (480, 270), self.fonts['small'], scale=[1, 1], pos=[24, 32]), + 'smallish': Button(self, '640 x 360', (640, 360), self.fonts['small'], scale=[1, 1], pos=[24, 48]), + 'normal': Button(self, '960 x 540', (960, 540), self.fonts['small'], scale=[1, 1], pos=[24, 64]), + 'large': Button(self, '1280 x 720', (1280, 720), self.fonts['small'], scale=[1, 1], pos=[24, 80]), + 'xl': Button(self, '1600 x 900', (1600, 900), self.fonts['small'], scale=[1, 1], pos=[24, 96]), + 'no': Button(self, 'no (16 x 9)', (16, 9), self.fonts['small'], scale=[1, 1], pos=[24, 112]), + } + + self.return_heirarchy = { + 'mainmenu': 'mainpage', + 'keybinds': 'mainpage', + 'soundsliders': 'mainpage', + 'changekey': 'keybinds', + 'screensize': 'mainpage', + } + + + def main(self, display): + + display.blit(self.game.assets['return'], (4, 4)) + if self.game.isfullscreen == 0: + display.blit(self.game.assets['into_fullscreen'], (display.get_width() - 20, 4)) + else: + display.blit(self.game.assets['exit_fullscreen'], (display.get_width() - 20, 4)) + + self.buttons['tokeybinds'].render(display, self.fonts['small']) + self.buttons['tosounds'].render(display, self.fonts['small']) + self.buttons['tores_opts'].render(display, self.fonts['small']) + + def main_update(self): + if self.mousedown: + collisions = self.game.mpos_r.colliderect(self.game.keybinding_rect) + if collisions: + self.game.settings = 'keybinds' + collisions = self.game.mpos_r.colliderect(self.game.isfullscreen_rect) + if collisions: + self.game.isfullscreen = not self.game.isfullscreen + if self.game.isfullscreen: + self.screen = pygame.display.set_mode(self.monitor_size, pygame.FULLSCREEN) + else: + self.screen = pygame.display.set_mode(self.base_screen_size, pygame.RESIZABLE) + + for button in self.buttons: + action = self.buttons[button].update(self.game.mpos_r) + if action: + self.game.settings = self.buttons[button].action + collisions = self.game.mpos_r.colliderect(self.game.return_rect) + if collisions: + self.game.menu = 'main' + self.game.iterations = 0 + + def keybinds(self): + pass + + def keybinds_update(self): + pass + + def sounds(self, display): + self.sliders['sfx'].render(display, self.fonts['small']) + + def sounds_update(self): + if not self.mousedown: + for slider in self.sliders: + self.sliders[slider].hasgrab = False + else: + for slider in self.sliders: + self.sliders[slider].has_grab(self.game.mpos) + self.sliders[slider].update(self.game.mpos) + + + def video(self): + pass + + def video_update(self): + pass + + def update(self): + """ + input is the inputs given to the display: + mouse = list composed of up or down, location x, location y + keypresses = dict composed of key that is pressed, and if it is pressed or unpressed. + """ + #contains the logic for choosing which menu to display. + #gets inputs, location and keys pressed and passes it to the function \ No newline at end of file diff --git a/scripts/scriptspy/sliders.py b/scripts/scriptspy/sliders.py new file mode 100644 index 0000000..74c69df --- /dev/null +++ b/scripts/scriptspy/sliders.py @@ -0,0 +1,43 @@ +import pygame + +class Slider(): + + def __init__(self, game, slidermax=100, slidermin=0, pos=[0, 0], height=5, uncolour=(0, 0, 0), topcolour=(0, 50, 0), specialtype=''): + self.slider_value = 0 + self.slider_max = slidermax + self.slider_min = slidermin + self.uncolour = uncolour + self.topcolour = topcolour + self.pos = pos + self.height = height + self.is_on_mouse = False + self.game = game + self.curr_mouse_pos = [0, 0] + self.hasgrab = False + + def has_grab(self, mouse_pos): + self.curr_mouse_pos = mouse_pos + if self.pos[1] <= self.curr_mouse_pos[1] <= self.height + self.pos[1] and self.pos[0] <= self.curr_mouse_pos[0] <= self.slider_max + self.pos[0]: + self.hasgrab = True + else: + self.hasgrab = False + + def update(self, mouse_pos): + self.handle_collisions(mouse_pos) + if self.is_on_mouse: + self.slider_value = pygame.math.clamp(int(self.curr_mouse_pos[0] - self.pos[0]), self.slider_min, self.slider_max) + self.game.volume = self.slider_value + + def render(self, surf, font): + pygame.draw.rect(surf, (self.uncolour), (self.pos[0], self.pos[1], self.slider_max, self.height)) + pygame.draw.rect(surf, (self.topcolour), (self.pos[0], self.pos[1], self.slider_value, self.height)) + font.render(surf, str(self.slider_value), [self.pos[0] + self.slider_max + 4, self.pos[1]], scale=[1, 1]) + + def handle_collisions(self, mouse_pos): + if self.hasgrab == True: + self.curr_mouse_pos = mouse_pos + if self.pos[0] <= self.curr_mouse_pos[0] <= self.slider_max + self.pos[0]: + self.is_on_mouse = True + else: + self.is_on_mouse = False + \ No newline at end of file diff --git a/scripts/scriptspy/spark.py b/scripts/scriptspy/spark.py new file mode 100644 index 0000000..e2f3761 --- /dev/null +++ b/scripts/scriptspy/spark.py @@ -0,0 +1,26 @@ +import math + +import pygame + +class Spark: + def __init__(self, pos, angle, speed): + self.pos = list(pos) + self.angle = angle + self.speed = speed + + def update(self): + self.pos[0] += math.cos(self.angle) * self.speed + self.pos[1] += math.sin(self.angle) * self.speed + + self.speed = max(0, self.speed - 0.1) + return not self.speed + + def render(self, surf, offset=(0, 0)): + render_points = [ + (self.pos[0] + math.cos(self.angle) * self.speed * 3 - offset[0], self.pos[1] + math.sin(self.angle) * self.speed * 3 - offset[1]), + (self.pos[0] + math.cos(self.angle + math.pi * 0.5) * self.speed * 0.5 - offset[0], self.pos[1] + math.sin(self.angle + math.pi * 0.5) * self.speed * 0.5 - offset[1]), + (self.pos[0] + math.cos(self.angle + math.pi) * self.speed * 3 - offset[0], self.pos[1] + math.sin(self.angle + math.pi) * self.speed * 3 - offset[1]), + (self.pos[0] + math.cos(self.angle - math.pi * 0.5) * self.speed * 0.5 - offset[0], self.pos[1] + math.sin(self.angle - math.pi * 0.5) * self.speed * 0.5 - offset[1]), + ] + + pygame.draw.polygon(surf, (255, 255, 255), render_points) \ No newline at end of file diff --git a/scripts/scriptspy/tilemap.py b/scripts/scriptspy/tilemap.py new file mode 100644 index 0000000..ceeca4a --- /dev/null +++ b/scripts/scriptspy/tilemap.py @@ -0,0 +1,373 @@ +import json +import random +import pygame + +AUTOTILE_MAP = { + tuple(sorted([(1, 0), (0, 1), (1, 1)])): 0, + tuple(sorted([(1, 0), (0, 1), (1, 1), (1, -1)])): 0, + tuple(sorted([(1, 0), (0, 1), (1, 1), (1, -1), (-1, 1)])): 0, + tuple(sorted([(1, 0), (0, 1), (1, 1), (-1, 1)])): 0, + tuple(sorted([(1, 0), (0, 1), (-1, 0), (-1, 1), (1, 1)])): 1, + tuple(sorted([(1, 0), (0, 1), (-1, 0), (-1, 1), (1, 1), (-1, -1)])): 1, + tuple(sorted([(1, 0), (0, 1), (-1, 0), (-1, 1), (1, 1), (-1, -1), (1, -1)])): 1, + tuple(sorted([(1, 0), (0, 1), (-1, 0), (-1, 1), (1, 1), (1, -1)])): 1, + tuple(sorted([(-1, 0), (0, 1), (-1, 1)])): 2, + tuple(sorted([(-1, 0), (0, 1), (-1, 1), (-1, -1)])): 2, + tuple(sorted([(-1, 0), (0, 1), (-1, 1), (-1, -1), (1, 1)])): 2, + tuple(sorted([(-1, 0), (0, 1), (-1, 1), (1, 1)])): 2, + tuple(sorted([(-1, 0), (0, -1), (0, 1), (-1, -1), (-1, 1)])): 3, + tuple(sorted([(-1, 0), (0, -1), (0, 1), (-1, -1), (-1, 1), (1, -1)])): 3, + tuple(sorted([(-1, 0), (0, -1), (0, 1), (-1, -1), (-1, 1), (1, -1), (1, 1)])): 3, + tuple(sorted([(-1, 0), (0, -1), (0, 1), (-1, -1), (-1, 1), (1, 1)])): 3, + tuple(sorted([(-1, 0), (0, -1), (-1, -1)])): 4, + tuple(sorted([(-1, 0), (0, -1), (-1, -1), (-1, 1)])): 4, + tuple(sorted([(-1, 0), (0, -1), (-1, -1), (-1, 1), (1, -1)])): 4, + tuple(sorted([(-1, 0), (0, -1), (-1, -1), (1, -1)])): 4, + tuple(sorted([(-1, 0), (0, -1), (1, 0), (-1, -1), (1, -1)])): 5, + tuple(sorted([(-1, 0), (0, -1), (1, 0), (-1, -1), (1, -1), (-1, 1)])): 5, + tuple(sorted([(-1, 0), (0, -1), (1, 0), (-1, -1), (1, -1), (-1, 1), (1, 1)])): 5, + tuple(sorted([(-1, 0), (0, -1), (1, 0), (-1, -1), (1, -1), (1, 1)])): 5, + tuple(sorted([(1, 0), (0, -1), (1, -1)])): 6, + tuple(sorted([(1, 0), (0, -1), (1, -1), (-1, -1)])): 6, + tuple(sorted([(1, 0), (0, -1), (1, -1), (-1, -1), (1, 1)])): 6, + tuple(sorted([(1, 0), (0, -1), (1, -1), (1, 1)])): 6, + tuple(sorted([(1, 0), (0, -1), (0, 1), (1, 1), (1, -1)])): 7, + tuple(sorted([(1, 0), (0, -1), (0, 1), (1, 1), (1, -1), (-1, -1)])): 7, + tuple(sorted([(1, 0), (0, -1), (0, 1), (1, 1), (1, -1), (-1, -1), (-1, 1)])): 7, + tuple(sorted([(1, 0), (0, -1), (0, 1), (1, 1), (1, -1), (-1, 1)])): 7, + tuple(sorted([(-1, 0), (-1, -1), (0, -1), (1, 0), (-1, 1), (0, 1), (1, 1)])): 8, + tuple(sorted([(-1, 0), (0, -1), (1, -1), (1, 0), (-1, 1), (0, 1), (1, 1)])): 9, + tuple(sorted([(-1, 0), (-1, -1), (0, -1), (1, -1), (1, 0), (0, 1), (1, 1)])): 10, + tuple(sorted([(-1, 0), (-1, -1), (0, -1), (1, -1), (1, 0), (-1, 1), (0, 1)])): 11, + tuple(sorted([(-1, 0), (-1, -1), (0, -1), (1, -1), (1, 0), (-1, 1), (0, 1), (1, 1)])): 12, + tuple(sorted([(1, 0)])): 13, + tuple(sorted([(1, 0), (1, -1)])): 13, + tuple(sorted([(1, 0), (1, 1), (1, -1)])): 13, + tuple(sorted([(1, 0), (1, 1)])): 13, + tuple(sorted([(1, 0), (-1, 0)])): 14, + tuple(sorted([(1, 0), (-1, 0), (-1, -1)])): 14, + tuple(sorted([(1, 0), (-1, 0), (-1, -1), (-1, 1)])): 14, + tuple(sorted([(1, 0), (-1, 0), (-1, 1)])): 14, + tuple(sorted([(1, 0), (-1, 0), (1, -1)])): 14, + tuple(sorted([(1, 0), (-1, 0), (1, 1), (1, -1)])): 14, + tuple(sorted([(1, 0), (-1, 0), (1, 1)])): 14, + tuple(sorted([(1, 0), (-1, 0), (-1, -1), (-1, 1), (1, -1)])): 14, + tuple(sorted([(1, 0), (-1, 0), (-1, -1), (-1, 1), (1, 1)])): 14, + tuple(sorted([(1, 0), (-1, 0), (-1, 1), (1, 1), (1, -1)])): 14, + tuple(sorted([(1, 0), (-1, 0), (-1, -1), (1, 1), (1, -1)])): 14, + tuple(sorted([(1, 0), (-1, 0), (-1, -1), (-1, 1), (1, -1), (1, 1)])): 14, + tuple(sorted([(-1, 0)])): 15, + tuple(sorted([(-1, 0), (-1, -1)])): 15, + tuple(sorted([(-1, 0), (-1, 1), (-1, -1)])): 15, + tuple(sorted([(-1, 0), (-1, 1)])): 15, +} +AUTOTILE_MAP2 = { + tuple(sorted([(1, 0), (0, 1), (1, 1)])): 16, + tuple(sorted([(1, 0), (0, 1), (1, 1), (1, -1)])): 16, + tuple(sorted([(1, 0), (0, 1), (1, 1), (1, -1), (-1, 1)])): 16, + tuple(sorted([(1, 0), (0, 1), (1, 1), (-1, 1)])): 16, + tuple(sorted([(1, 0), (0, 1), (-1, 0), (-1, 1), (1, 1)])): 17, + tuple(sorted([(1, 0), (0, 1), (-1, 0), (-1, 1), (1, 1), (-1, -1)])): 17, + tuple(sorted([(1, 0), (0, 1), (-1, 0), (-1, 1), (1, 1), (-1, -1), (1, -1)])): 17, + tuple(sorted([(1, 0), (0, 1), (-1, 0), (-1, 1), (1, 1), (1, -1)])): 17, + tuple(sorted([(-1, 0), (0, 1), (-1, 1)])): 18, + tuple(sorted([(-1, 0), (0, 1), (-1, 1), (-1, -1)])): 18, + tuple(sorted([(-1, 0), (0, 1), (-1, 1), (-1, -1), (1, 1)])): 18, + tuple(sorted([(-1, 0), (0, 1), (-1, 1), (1, 1)])): 18, + tuple(sorted([(-1, 0), (0, -1), (0, 1), (-1, -1), (-1, 1)])): 19, + tuple(sorted([(-1, 0), (0, -1), (0, 1), (-1, -1), (-1, 1), (1, -1)])): 19, + tuple(sorted([(-1, 0), (0, -1), (0, 1), (-1, -1), (-1, 1), (1, -1), (1, 1)])): 19, + tuple(sorted([(-1, 0), (0, -1), (0, 1), (-1, -1), (-1, 1), (1, 1)])): 19, + tuple(sorted([(-1, 0), (0, -1), (-1, -1)])): 20, + tuple(sorted([(-1, 0), (0, -1), (-1, -1), (-1, 1)])): 20, + tuple(sorted([(-1, 0), (0, -1), (-1, -1), (-1, 1), (1, -1)])): 20, + tuple(sorted([(-1, 0), (0, -1), (-1, -1), (1, -1)])): 20, + tuple(sorted([(-1, 0), (0, -1), (1, 0), (-1, -1), (1, -1)])): 21, + tuple(sorted([(-1, 0), (0, -1), (1, 0), (-1, -1), (1, -1), (-1, 1)])): 21, + tuple(sorted([(-1, 0), (0, -1), (1, 0), (-1, -1), (1, -1), (-1, 1), (1, 1)])): 21, + tuple(sorted([(-1, 0), (0, -1), (1, 0), (-1, -1), (1, -1), (1, 1)])): 21, + tuple(sorted([(1, 0), (0, -1), (1, -1)])): 22, + tuple(sorted([(1, 0), (0, -1), (1, -1), (-1, -1)])): 22, + tuple(sorted([(1, 0), (0, -1), (1, -1), (-1, -1), (1, 1)])): 22, + tuple(sorted([(1, 0), (0, -1), (1, -1), (1, 1)])): 22, + tuple(sorted([(1, 0), (0, -1), (0, 1), (1, 1), (1, -1)])): 23, + tuple(sorted([(1, 0), (0, -1), (0, 1), (1, 1), (1, -1), (-1, -1)])): 23, + tuple(sorted([(1, 0), (0, -1), (0, 1), (1, 1), (1, -1), (-1, -1), (-1, 1)])): 23, + tuple(sorted([(1, 0), (0, -1), (0, 1), (1, 1), (1, -1), (-1, 1)])): 23, + tuple(sorted([(-1, 0), (-1, -1), (0, -1), (1, 0), (-1, 1), (0, 1), (1, 1)])): 24, + tuple(sorted([(-1, 0), (0, -1), (1, -1), (1, 0), (-1, 1), (0, 1), (1, 1)])): 25, + tuple(sorted([(-1, 0), (-1, -1), (0, -1), (1, -1), (1, 0), (0, 1), (1, 1)])): 26, + tuple(sorted([(-1, 0), (-1, -1), (0, -1), (1, -1), (1, 0), (-1, 1), (0, 1)])): 27, + tuple(sorted([(-1, 0), (-1, -1), (0, -1), (1, -1), (1, 0), (-1, 1), (0, 1), (1, 1)])): 28, + tuple(sorted([(1, 0)])): 29, + tuple(sorted([(1, 0), (1, -1)])): 29, + tuple(sorted([(1, 0), (1, 1), (1, -1)])): 29, + tuple(sorted([(1, 0), (1, 1)])): 29, + tuple(sorted([(1, 0), (-1, 0)])): 30, + tuple(sorted([(1, 0), (-1, 0), (-1, -1)])): 30, + tuple(sorted([(1, 0), (-1, 0), (-1, -1), (-1, 1)])): 30, + tuple(sorted([(1, 0), (-1, 0), (-1, 1)])): 30, + tuple(sorted([(1, 0), (-1, 0), (1, -1)])): 30, + tuple(sorted([(1, 0), (-1, 0), (1, 1), (1, -1)])): 30, + tuple(sorted([(1, 0), (-1, 0), (1, 1)])): 30, + tuple(sorted([(1, 0), (-1, 0), (-1, -1), (-1, 1), (1, -1)])): 30, + tuple(sorted([(1, 0), (-1, 0), (-1, -1), (-1, 1), (1, 1)])): 30, + tuple(sorted([(1, 0), (-1, 0), (-1, 1), (1, 1), (1, -1)])): 30, + tuple(sorted([(1, 0), (-1, 0), (-1, -1), (1, 1), (1, -1)])): 30, + tuple(sorted([(1, 0), (-1, 0), (-1, -1), (-1, 1), (1, -1), (1, 1)])): 30, + tuple(sorted([(-1, 0)])): 31, + tuple(sorted([(-1, 0), (-1, -1)])): 31, + tuple(sorted([(-1, 0), (-1, 1), (-1, -1)])): 31, + tuple(sorted([(-1, 0), (-1, 1)])): 31, +} + +NEIGHBOR_OFFSETS = [(-1, 0), (-1, -1), (0, -1), (1, -1), (1, 0), (0, 0), (-1, 1), (0, 1), (1, 1)] +PHYSICS_TILES = {'grass', 'stone', 'ice'} +KILL_TILES = {'kill', 'killbricks'} +MOVEMENT_TILES = {'bouncepad'} +CHECKPOINT_TILES = {'checkpoint'} +CAMERA_TRIGGER_TILES = {'cameratr'} +BREAKABLES_TILES = {'breakables'} +AUTOTILE_TYPES = {'grass', 'stone', 'ice', 'base'} + +class Tilemap: + def __init__(self, game, tile_size=16): + self.game = game + self.tile_size = tile_size + self.tilemap = { + 'rooms': {}, + 'fgscaled': {}, + 'fg': {}, + 'triggers': {}, + 'invis': {}, + } + self.offgrid_tiles = [] + + def extract(self, id_pairs, keep=False): + matches = [] + for tile in self.offgrid_tiles.copy(): + if (tile['type'], tile['variant']) in id_pairs: + matches.append(tile.copy()) + if not keep: + self.offgrid_tiles.remove(tile) + + for layer in self.tilemap: + for loc in self.tilemap[layer]: + tile = self.tilemap[layer][loc] + if (tile['type'], tile['variant']) in id_pairs: + matches.append(tile.copy()) + matches[-1]['pos'] = matches[-1]['pos'].copy() + matches[-1]['pos'][0] *= self.tile_size + matches[-1]['pos'][1] *= self.tile_size + if not keep: + del self.tilemap[layer][loc] + + return matches + + def tiles_around(self, pos): + tiles = [] + for layer in self.tilemap: + + tile_loc = (int(pos[0] // self.tile_size), int(pos[1] // self.tile_size)) + for offset in NEIGHBOR_OFFSETS: + check_loc = str(tile_loc[0] + offset[0]) + ';' + str(tile_loc[1] + offset[1]) + if check_loc in self.tilemap[layer]: + tiles.append(self.tilemap[layer][check_loc]) + return tiles + + def save(self, path): + f = open(path, 'w') + json.dump({'tilemap': self.tilemap, 'tile_size': self.tile_size, 'offgrid': self.offgrid_tiles}, f) + f.close() + + def load(self, path): + f = open(path, 'r') + map_data = json.load(f) + f.close() + + self.tilemap = map_data['tilemap'] + self.tile_size = map_data['tile_size'] + self.offgrid_tiles = map_data['offgrid'] + + + def solid_check(self, pos): + for layer in self.tilemap: + tile_loc = str(int(pos[0] // self.tile_size)) + ';' + str(int(pos[1] // self.tile_size)) + if tile_loc in self.tilemap[layer]: + if self.tilemap[layer][tile_loc]['type'] in PHYSICS_TILES: + return self.tilemap[layer][tile_loc] + + + def physics_rects_around(self, pos): + rects = [] + for tile in self.tiles_around(pos): + if tile['type'] in PHYSICS_TILES: + rects.append(pygame.Rect(tile['pos'][0] * self.tile_size, tile['pos'][1] * self.tile_size, self.tile_size, self.tile_size)) + return rects + + + def trigger_rects_around(self, pos): + rects = [] + variants = [] + for tile in self.tiles_around(pos): + if tile['type'] in CAMERA_TRIGGER_TILES: + rects.append(pygame.Rect(tile['pos'][0] * self.tile_size, tile['pos'][1] * self.tile_size, self.tile_size, self.tile_size)) + variants.append(tile['variant']) + return [rects, variants] + + def kill_rects_around(self, pos): + rects = [] + for tile in self.offgrid_tiles: + if tile['type'] in KILL_TILES: + if tile['type'] == 'killbricks': + rects.append(pygame.Rect(tile['pos'][0], tile['pos'][1], self.tile_size, self.tile_size)) + elif tile['type'] == 'kill': + rects.append(pygame.Rect(tile['pos'][0] + 3, tile['pos'][1]+ 3, self.tile_size - 6, self.tile_size - 6)) + for tile in self.tiles_around(pos): + if tile['type'] in KILL_TILES: + if tile['type'] == 'killbricks': + rects.append(pygame.Rect(tile['pos'][0] * self.tile_size + 3, tile['pos'][1] * self.tile_size + 3, self.tile_size - 6, self.tile_size - 6)) + elif tile['type'] == 'kill': + rects.append(pygame.Rect(tile['pos'][0] * self.tile_size, tile['pos'][1] * self.tile_size, self.tile_size, self.tile_size)) + return rects + + + def movement_rects_around(self, pos): + rects = [] + for tile in self.offgrid_tiles: + if tile['type'] in MOVEMENT_TILES: + rects.append(pygame.Rect(tile['pos'][0] + 3, tile['pos'][1], self.tile_size, self.tile_size)) + for tile in self.tiles_around(pos): + if tile['type'] in MOVEMENT_TILES: + rects.append(pygame.Rect(tile['pos'][0] * self.tile_size, tile['pos'][1] * self.tile_size, self.tile_size, self.tile_size)) + return rects + + def rendertilehb(self, surf, layer, offset=(0, 0)): + for x in range((offset[0] // self.tile_size) - 2, (offset[0] + surf.get_width()) // self.tile_size + 2): + for y in range((offset[1] // self.tile_size) - 2, (offset[1] + surf.get_height()) // self.tile_size + 2): + loc = str(x) + ';' + str(y) + if loc in self.tilemap[layer]: + tile = self.tilemap[layer][loc] + if tile['type'] in KILL_TILES: + pygame.draw.rect(surf, (255, 0, 0), (tile['pos'][0] * self.tile_size - offset[0] + 3, tile['pos'][1] * self.tile_size - offset[1] + 3, self.tile_size - 6, self.tile_size - 6), 1) + elif tile['type'] in PHYSICS_TILES: + pygame.draw.rect(surf, (100, 0, 0), (tile['pos'][0] * self.tile_size - offset[0], tile['pos'][1] * self.tile_size - offset[1], self.tile_size, self.tile_size), 1) + elif tile['type'] in CHECKPOINT_TILES: + pygame.draw.rect(surf, (0, 100, 0), (tile['pos'][0] * self.tile_size - offset[0] - 2, tile['pos'][1] * self.tile_size - offset[1] - 2, 20, 36), 1) + elif tile['type'] in MOVEMENT_TILES: + pygame.draw.rect(surf, (0, 100, 100), (tile['pos'][0] * self.tile_size - offset[0], tile['pos'][1] * self.tile_size - offset[1], self.tile_size, self.tile_size), 1) + + for tile in self.offgrid_tiles: + if tile['type'] in KILL_TILES: + pygame.draw.rect(surf, (255, 0, 0), (tile['pos'][0] - offset[0] + 3, tile['pos'][1] - offset[1] + 3, self.tile_size - 6, self.tile_size - 6), 1) + elif tile['type'] in PHYSICS_TILES: + pygame.draw.rect(surf, (100, 0, 0), (tile['pos'][0] - offset[0], tile['pos'][1] - offset[1], self.tile_size, self.tile_size), 1) + elif tile['type'] in CHECKPOINT_TILES: + pygame.draw.rect(surf, (0, 100, 0), (tile['pos'][0] - offset[0] - 2, tile['pos'][1] - offset[1] - 2, 20, 36), 1) + elif tile['type'] in MOVEMENT_TILES: + pygame.draw.rect(surf, (0, 100, 100), (tile['pos'][0] - offset[0], tile['pos'][1] - offset[1], self.tile_size, self.tile_size), 1) + + def autotile(self): + for layer in self.tilemap: + for loc in self.tilemap[layer]: + tile = self.tilemap[layer][loc] + neighbors = set() + for shift in [(-1, 0), (-1, -1), (0, -1), (1, -1), (1, 0), (-1, 1), (0, 1), (1, 1)]: + check_loc = str(tile['pos'][0] + shift[0]) + ';' + str(tile['pos'][1] + shift[1]) + if check_loc in self.tilemap[layer]: + if self.tilemap[layer][check_loc]['type'] in AUTOTILE_TYPES: + neighbors.add(shift) + neighbors = tuple(sorted(neighbors)) + if neighbors == [(-1, 0), (-1, -1), (0, -1), (1, -1), (1, 0), (-1, 1), (0, 1), (1, 1)]: + tile['variant'] = 10 + elif (tile['type'] in AUTOTILE_TYPES) and (neighbors in AUTOTILE_MAP): + tile['variant'] = AUTOTILE_MAP[neighbors] + + def show_cam_bounds(self, surf, layer, offset=(0, 0)): + for tile in self.offgrid_tiles: + if tile['type'] == 'cameratr' and tile['variant'] == 2: + pygame.draw.rect(surf, (255, 200, 50), (tile['pos'][0] - surf.get_width()/ 2 - offset[0], tile['pos'][1] - surf.get_height()/ 2 - offset[1], surf.get_width(), surf.get_height()), 3) + + for x in range((offset[0] // self.tile_size) - 2, (offset[0] + surf.get_width()) // self.tile_size + 2): + for y in range((offset[1] // self.tile_size) - 2, (offset[1] + surf.get_height()) // self.tile_size + 2): + loc = str(x) + ';' + str(y) + if loc in self.tilemap[layer]: + tile = self.tilemap[layer][loc] + if tile['type'] == 'cameratr' and tile['variant'] == 2: + pygame.draw.rect(surf, (255, 200, 50), (tile['pos'][0] * 16 - surf.get_width()/ 2 - offset[0], tile['pos'][1] * 16 - surf.get_height()/ 2 - offset[1], surf.get_width(), surf.get_height()), 3) + + def room_cam_collisions(self, pos, surf): + rects = [] + for tile in self.offgrid_tiles: + if tile['type'] in CAMERA_TRIGGER_TILES and tile['variant'] == 2: + rects.append(pygame.Rect((tile['pos'][0]) - surf.get_width()/ 2, (tile['pos'][1]) - surf.get_height()/ 2, surf.get_width(), surf.get_height())) + + for layer in self.tilemap: + for loc in self.tilemap[layer]: + tile = self.tilemap[layer][loc] + if tile['type'] in CAMERA_TRIGGER_TILES and tile['variant'] == 2: + rects.append(pygame.Rect((tile['pos'][0] * 16) - surf.get_width()/ 2, (tile['pos'][1] * 16) - surf.get_height()/ 2, surf.get_width(), surf.get_height())) + return rects + + def checkpointcollisions(self, pos, surf): + rects = [] + for tile in self.offgrid_tiles: + if tile['type'] in CHECKPOINT_TILES: + rects.append(pygame.Rect((tile['pos'][0] - 2), (tile['pos'][1] - 2), 20, 36)) + for tile in self.tiles_around(pos): + if tile['type'] in CHECKPOINT_TILES: + rects.append(pygame.Rect((tile['pos'][0] * 16) - 2, (tile['pos'][1] * 16) - 2, 20, 36)) + return rects + + def randomisetiles(self): + for layer in self.tilemap: + for loc in self.tilemap[layer]: + tile = self.tilemap[layer][loc] + neighbors = set() + for shift in [(-1, 0), (-1, -1), (0, -1), (1, -1), (1, 0), (-1, 1), (0, 1), (1, 1)]: + check_loc = str(tile['pos'][0] + shift[0]) + ';' + str(tile['pos'][1] + shift[1]) + if check_loc in self.tilemap[layer]: + if self.tilemap[layer][check_loc]['type'] in PHYSICS_TILES: + neighbors.add(shift) + neighbors = tuple(sorted(neighbors)) + ran = random.choice((1, 0)) + if ran == 1: + if neighbors == [(-1, 0), (-1, -1), (0, -1), (1, -1), (1, 0), (-1, 1), (0, 1), (1, 1)]: + tile['variant'] = 10 + if (tile['type'] in AUTOTILE_TYPES) and (neighbors in AUTOTILE_MAP): + tile['variant'] = AUTOTILE_MAP[neighbors] + else: + if neighbors == [(-1, 0), (-1, -1), (0, -1), (1, -1), (1, 0), (-1, 1), (0, 1), (1, 1)]: + tile['variant'] = 25 + if (tile['type'] in AUTOTILE_TYPES) and (neighbors in AUTOTILE_MAP2): + tile['variant'] = AUTOTILE_MAP2[neighbors] + + def render(self, surf, layer, offset=(0, 0)): + toblit = [] + for tile in self.offgrid_tiles: + toblit.append((self.game.assets[tile['type']][tile['variant']], (tile['pos'][0] - offset[0], tile['pos'][1] - offset[1]))) + + for x in range((offset[0] // self.tile_size) - 2, (offset[0] + surf.get_width()) // self.tile_size + 2): + for y in range((offset[1] // self.tile_size) - 2, (offset[1] + surf.get_height()) // self.tile_size + 2): + loc = str(x) + ';' + str(y) + if loc in self.tilemap[layer]: + tile = self.tilemap[layer][loc] + toblit.append((self.game.assets[tile['type']][tile['variant']], (tile['pos'][0] * self.tile_size - offset[0], tile['pos'][1] * self.tile_size - offset[1]))) + + surf.blits(toblit) + + def editorrender(self, surf, layer, opacity=255, offset=(0, 0)): + for tile in self.offgrid_tiles: + tile_img = self.game.assets[tile['type']][tile['variant']] + tile_img.set_alpha(100) + surf.blit(tile_img, (tile['pos'][0] - offset[0], tile['pos'][1] - offset[1])) + + for x in range((offset[0] // self.tile_size) - 2, (offset[0] + surf.get_width()) // self.tile_size + 2): + for y in range((offset[1] // self.tile_size) - 2, (offset[1] + surf.get_height()) // self.tile_size + 2): + loc = str(x) + ';' + str(y) + if loc in self.tilemap[layer]: + tile = self.tilemap[layer][loc] + tile_img = self.game.assets[tile['type']][tile['variant']] + tile_img.set_alpha(100) + surf.blit(tile_img, (tile['pos'][0] * self.tile_size - offset[0], tile['pos'][1] * self.tile_size - offset[1])) + \ No newline at end of file diff --git a/scripts/scriptspy/utils.py b/scripts/scriptspy/utils.py new file mode 100644 index 0000000..e70e592 --- /dev/null +++ b/scripts/scriptspy/utils.py @@ -0,0 +1,170 @@ +import os +import sys +import json +import pygame + +if getattr(sys, 'frozen', False): + basedir = sys.executable + last_dir = basedir.rfind("/") + basedir = basedir[:last_dir] +else: + basedir = "./" + +BASE_IMG_PATH = os.path.join(basedir + 'data/images/') + +def load_image(path): + img = pygame.image.load(BASE_IMG_PATH + path).convert() + img.set_colorkey((0, 0, 0)) + return img + +def load_images(path): + images = [] + for img_name in sorted(os.listdir(BASE_IMG_PATH + path)): + if img_name != '.DS_Store': + images.append(load_image(path + '/' + img_name)) + return images + +def clip(surf, x, y, clipsizex, clipsizey): + clip_surf = surf.copy() + clip_rect = pygame.Rect(x, y, clipsizex, clipsizey) + clip_surf.set_clip(clip_rect) + img = surf.subsurface(clip_surf.get_clip()) + return img.copy() + + + return img_copy +# all the characters +class Font(): + def __init__(self, path): + self.spacing = 1 + self.character_order = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','.','-',',',':','+','\'','!','?','0','1','2','3','4','5','6','7','8','9','(',')','/','_','=','\\','*','"','<','>',';'] + font_img = load_image('fonts/' + path) + current_charwidth = 0 + self.characters = {} + character_count = 0 + for x in range(font_img.get_width()): + c = font_img.get_at((x, 0)) + if c[0] == 127: + char_img = clip(font_img, x - current_charwidth, 0, current_charwidth, font_img.get_height()) + char_img.set_colorkey((0, 0, 0)) + try: + self.characters[self.character_order[character_count]] = char_img.copy() + except: + print("ERR_NO_RENDER") + character_count += 1 + current_charwidth = 0 + else: + current_charwidth += 1 + self.space_width = self.characters['A'].get_width() + + def get_text_size(self, text='', scale=[1, 1]): + y_offset = self.characters['A'].get_height() + x_offset = 0 + for char in text: + if char != ' ': + x_offset += (self.characters[char].get_width() + self.spacing) * scale[0] + else: + x_offset += (self.space_width + self.spacing) * scale[0] + return [x_offset, y_offset] + + def render(self, surf, text, loc, scale=[0, 0], outline=True): + y_offset = self.characters['A'].get_height() + x_offset = 0 + for char in text: + if char != ' ': + try: + x_offset += (self.characters[char].get_width() + self.spacing) * scale[0] + except: + x_offset += (self.space_width + self.spacing) * scale[0] + else: + x_offset += (self.space_width + self.spacing) * scale[0] + + tempsurf = pygame.Surface((x_offset + 10, y_offset * scale[1])) + tempsurf.set_colorkey((0, 0, 0)) + x_offset = 0 + for char in text: + if char != ' ': + try: + img = self.characters[char] + except: + continue + tempsurf.blit(pygame.transform.scale(img, (img.get_width() * scale[0], img.get_height() * scale[1])), (x_offset, 0)) + x_offset += (img.get_width() + self.spacing) * scale[0] + else: + x_offset += (self.space_width + self.spacing) * scale[0] + tempsurf.set_colorkey((0, 0, 0)) + if outline: + display_mask = pygame.mask.from_surface(tempsurf) + display_sillhouette = display_mask.to_surface(setcolor=(0, 0, 0, 255), unsetcolor=(0, 0, 0, 0)) + for offset in [(-1, 0), (1, 0), (0, -1), (0, 1)]: + surf.blit(display_sillhouette, (offset[0] + loc[0], offset[1] + loc[1])) + surf.blit(tempsurf, loc) + rect = pygame.Rect(loc[0], loc[1], x_offset, y_offset * scale[1]) + #pygame.draw.rect(surf, (10, 10, 10), rect, 1) + return rect + +#['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '.', '-', ',', ':', '+', '\'', '!', '?', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '(', ')', '/', '_', '=', '\\', '*', '"', '<', '>', ';'] + +class Animation: + def __init__(self, images, img_dur=5, loop=True): + self.images = images + self.loop = loop + self.img_duration = img_dur + self.done = False + self.frame = 0 + + def copy(self): + return Animation(self.images, self.img_duration, self.loop) + + def update(self): + if self.loop: + self.frame = (self.frame + 1) % (self.img_duration * len(self.images)) + else: + self.frame = min(self.frame + 1, self.img_duration * len(self.images) - 1) + if self.frame >= self.img_duration * len(self.images) - 1: + self.done = True + + def img(self): + return self.images[int(self.frame / self.img_duration)] + + +class FileManager(): + + def __init__(self, game): + self.game = game + + def savefile(self, saveorload): + load = saveorload + if load == "save": + f = open(os.path.join(basedir + "data/saves/save.SAVEFILE"), 'w') + json.dump({'level': self.game.level, 'checkpoint': self.game.respawnpoint}, f) + f.close() + print('sucess') + elif load == "dump": + try: + f = open(os.path.join(basedir + "data/saves/save.SAVEFILE"), 'r') + savedata = json.load(f) + f.close() + except: + return {'level': 0, 'checkpoint': [0, 0]} + return savedata + elif load == "clear": + f = open(os.path.join(basedir + "data/saves/save.SAVEFILE"), 'w') + json.dump({'level': 0, 'checkpoint': [0, 0]}, f) + f.close() + return {'level': 0, 'checkpoint': [0, 0]} + + + + def settings(self, saveorload): + load = saveorload + if load == "save": + f = open(os.path.join(basedir + "data/saves/settings.SAVEFILE"), 'w') + json.dump({'keybinds': self.game.keybinds, 'keybindingvalue': self.game.keybindingvalue, 'window_size': self.game.window_size}, f) + f.close() + + elif load == "dump": + f = open(os.path.join(basedir + "data/saves/settings.SAVEFILE"), 'r') + settings = json.load(f) + f.close() + return settings \ No newline at end of file diff --git a/scripts/settings.py b/scripts/settings.py index 36a9977..7f876b0 100644 --- a/scripts/settings.py +++ b/scripts/settings.py @@ -9,6 +9,9 @@ -Sound settings -Video settings """ +class Base_Settings: + def __init__(self, game): + self.game = game class Settings: def __init__(self, game): self.game = game @@ -39,7 +42,7 @@ def __init__(self, game): } self.return_heirarchy = { - 'mainpage': 'mainpage', + 'mainpage': 'mainmenu', 'keybinds': 'mainpage', 'soundsliders': 'mainpage', 'changekey': 'keybinds', diff --git a/scripts/sliders.py b/scripts/sliders.py index a07699b..74c69df 100644 --- a/scripts/sliders.py +++ b/scripts/sliders.py @@ -31,7 +31,7 @@ def update(self, mouse_pos): def render(self, surf, font): pygame.draw.rect(surf, (self.uncolour), (self.pos[0], self.pos[1], self.slider_max, self.height)) pygame.draw.rect(surf, (self.topcolour), (self.pos[0], self.pos[1], self.slider_value, self.height)) - font.render(surf, str(self.slider_value), [self.pos[0] + self.slider_max + 4, self.pos[1]], scale=[1, 1], colour=(255, 255, 255, 0)) + font.render(surf, str(self.slider_value), [self.pos[0] + self.slider_max + 4, self.pos[1]], scale=[1, 1]) def handle_collisions(self, mouse_pos): if self.hasgrab == True: diff --git a/scripts/tilemap.py b/scripts/tilemap.py index ceeca4a..7d7a09c 100644 --- a/scripts/tilemap.py +++ b/scripts/tilemap.py @@ -128,7 +128,7 @@ CHECKPOINT_TILES = {'checkpoint'} CAMERA_TRIGGER_TILES = {'cameratr'} BREAKABLES_TILES = {'breakables'} -AUTOTILE_TYPES = {'grass', 'stone', 'ice', 'base'} +AUTOTILE_TYPES = {'grass', 'stone', 'ice', 'base', 'bg_stone'} class Tilemap: def __init__(self, game, tile_size=16): diff --git a/scripts/utils.py b/scripts/utils.py index 5b58a9b..bf35cd2 100644 --- a/scripts/utils.py +++ b/scripts/utils.py @@ -56,10 +56,11 @@ def __init__(self, path): c = font_img.get_at((x, 0)) if c[0] == 127: char_img = clip(font_img, x - current_charwidth, 0, current_charwidth, font_img.get_height()) + char_img.set_colorkey((0, 0, 0)) try: self.characters[self.character_order[character_count]] = char_img.copy() except: - pass + print("ERR_NO_RENDER") character_count += 1 current_charwidth = 0 else: @@ -76,7 +77,7 @@ def get_text_size(self, text='', scale=[1, 1]): x_offset += (self.space_width + self.spacing) * scale[0] return [x_offset, y_offset] - def render(self, surf, text, loc, scale=[0, 0], colour=(255, 0, 0, 0), outline=True): + def render(self, surf, text, loc, scale=[0, 0], colour =(255, 255, 255), outline=True): y_offset = self.characters['A'].get_height() x_offset = 0 for char in text: @@ -96,7 +97,7 @@ def render(self, surf, text, loc, scale=[0, 0], colour=(255, 0, 0, 0), outline=T img = self.characters[char] except: continue - img = fontcolour(img,(255, 0, 0), colour) + img = fontcolour(img, (255, 255, 255), colour) tempsurf.blit(pygame.transform.scale(img, (img.get_width() * scale[0], img.get_height() * scale[1])), (x_offset, 0)) x_offset += (img.get_width() + self.spacing) * scale[0] else: @@ -157,11 +158,11 @@ def savefile(self, saveorload): except: return {'level': 0, 'checkpoint': [0, 0]} return savedata + elif load == "clear": f = open(os.path.join(basedir + "data/saves/save.SAVEFILE"), 'w') - json.dump({'level': 0, 'checkpoint': [0, 0]}, f) + json.dump({'level': self.game.level, 'checkpoint': self.game.respawnpoint}, f) f.close() - return {'level': 0, 'checkpoint': [0, 0]} diff --git a/settings.SAVEFILE b/settings.SAVEFILE deleted file mode 100644 index 548577e..0000000 --- a/settings.SAVEFILE +++ /dev/null @@ -1 +0,0 @@ -{"keybinds": {"left": 1073741904, "right": 1073741903, "jump": 122, "down": 1073741905, "dash": 120, "menu": 109, "respawn": 114, "restore defaults": "the gloop"}, "keybindingvalue": ["LEFT", "RIGHT", "Z", "X", "M", "R", ""], "window_size": [1364, 847]} \ No newline at end of file diff --git a/setup.py b/setup.py index cfd00df..777a282 100644 --- a/setup.py +++ b/setup.py @@ -2,5 +2,5 @@ from Cython.Build import cythonize setup( - ext_modules = cythonize("./scripts/scriptscython/buttons.pyx") + ext_modules = cythonize("./scripts/*.py") ) \ No newline at end of file diff --git a/test2.mp3 b/test2.mp3 deleted file mode 100644 index a61f3facbbfdc9c40b6201fdec51e0cdbc18af4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 402284 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 z
F7eR40$4<$-7T9D!m<_E{Hgixn#LA8T2m?{?MM5`IynK+chUwG^WU5zwF}h~_ zWS%^I361M13HD6H(+5OhsAx2a#V^S76C;y(@02!93B&~lYk{c|5w{7fhcPZ3N79?z z{3#5yKU-BJtZCc92yFu3Q&`viW_5P{65sYC{Pg;*7mq$aeqKwgkKbS2^=HuO%mwp( z?>4_W_}B3W{OrWw7yz(VwFfa5&w`_;5M`93Gb6=F$y@0&s8n+;a#Fx%BF%>*Ba%c zkCoRn|BVmYqOpQ)BNd9L+3#VudiE>GoXvJlX`g~MwgjcYh|)c4_`ivB(S!!k z)P3@wJ084AeU*0d+y6SReKnZrs(to|SYyJ(yx*?~an){ALkvhYkNig4Btw>n*;vQGxQ3V80UvlSiSAz; zk8qW`N8?iXun^CKK4uZF9XuC4ZIjAKs-%R%T0)Z_hS3=G5TvX(ZA=aq|PZ56*>dx;>TK`ug~&y=ux?0{ltM-JX=>soz@edct_Jk++l{cXley%@f28|nh zBhe=Y2FPZjIOJKGH#AyTKK6(g$|(ehZJBbiBPdFK6w|4rI5|FHYmxq@j*1EEx-7$R z+`0gIImLpJ5g$E-8^p;!)oDQw!l8I^J2u2qZ5i1(%+VLch}h7s$1Ip+xIft6@1HHT@GZEw(YMfEI4&82CN;S$-T#;WtgaauOC=V-vk+;%$-I`H5_7dq9BD^$BO^$DP^o;TY!kg9*Y{g;n8MXVo8#e>?Q4 z&c+c!If9Fcgpnrlf~04Q!S|R?RI7suZEWj|w=Ow5Z|HIs3XhnfQ%McIb@fbZLwBLc zMp<5AoL3q%r|Y6j0;68;X^Vp}r1T+tsq1U_NiYxi}@YCbeUOHDwO0vj%=j zXJ~{(Xc3rgGj!a=7za&Zky@QYe`IKO(=I-VpBbuCWQB)^P)I$V`Oh&FRWo!NSjR{j z14f}0%t6Wt|9xy&q3nR~z$j-a2-xA>Q2GS$et}+o)*-gS<0WliNtArlYROTOd+UF_ zcAyeT3&5ovhMebw8-$U<-x7s8&i(v&I+>g9^$K+wt6Bc>@qeoyaXKcN9KnB}Fk|@I z#CNnx;h6b`^rT}yQ_a=0b4)wLXE6w`N=KAUyEYrRS|N$7tcd%9Gz3ZD^5?*i1CLfa z5}WRtP8i^cP7@zYDuaIwkzfI(wy-W=Vz>#vm1`Gq)SMPS-yGu-X&P67BGJF{`ok#~ zCZDj$y*}!Ll&BsjSGXajZdNL>_^Nt4v!_O76@0kCCGKf4>vCvMfn=iJY=LD~9n%o$PiCVrumhBTlH3ZH!265>MKG#9lR8Crv)}UusO6?S> zz;alXF{RYD3L7@`$fAAaim_}^uUjS`#|Y~%_@@_zfna!_KTFV9V6Le(Gtps~e6*_U zZ9smovMQ1PvidlE_@Dc$FaCX+yemcaH^z6@PRkonF6OUVp5Eo&b-aG}<4G%lg`lC~ zQKqO(XQbvERBo8P#Z1S#C_MS%Y|RGO*(4VTyKB3nNwc1_~GpCnplutM@+3 z&><#nNtP@?(D5Pag-*NM33zc?)S-83x6AuVh*3Gf2-jC%7;K4g1+d0zf(NnEK^35C zbCwb%5GnfRSP&*|GX1kd$!X#X_?Z`<3Bs?>~C14&7hx zV-a(Qi`>zJ4fKXdgpo*)pi_giwJGe%#eu8aaYfQHPTb!q5>tUQ%dall_aal~`I~#gqMB6-YA8BuL&c7@#_SEYQ zRsVg&slhChshX>ta+9NtE=6|NzCml$;NHRiKw++I;gesm#qFWYSy*#@7PE|NW=l-_ zhmXjsk2CnV&)vvzv=A}3F7~ zMr#JbOO0DK#8ThtNd&@85E%VxTC%xG6*>^edPp~vWxyEr;9xo}p<~@%D@PMsm+bmY zVKg0H5djhIlE))QyJQHs@~in4f5eo_(1mZ#NHL~KFDbGn_f8C^f;2N*ib3ZzU#`Ur z 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ⅇVAD2^(9Jl4)T7zK> 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 uw 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

0Hp57JSTv51GOoX1JAoV!(A3(#% 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�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�rV?_sIusJm&kU|OLRcNZ)(K2Cc4${q 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