pax_global_header00006660000000000000000000000064151115627520014517gustar00rootroot0000000000000052 comment=e113a8ae985a2174da8a60bfd32a50e99f3065fd Zuzu-Typ-PyGLM-e113a8a/000077500000000000000000000000001511156275200146015ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/.github/000077500000000000000000000000001511156275200161415ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/.github/workflows/000077500000000000000000000000001511156275200201765ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/.github/workflows/codeql.yml000066400000000000000000000100721511156275200221700ustar00rootroot00000000000000# For most projects, this workflow file will not need changing; you simply need # to commit it to your repository. # # You may wish to alter this file to override the set of languages analyzed, # or to provide custom queries or build logic. # # ******** NOTE ******** # We have attempted to detect the languages in your repository. Please check # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. # name: "CodeQL Advanced" on: pull_request: push: branches: - master jobs: analyze: name: Analyze # Runner size impacts CodeQL analysis time. To learn more, please see: # - https://gh.io/recommended-hardware-resources-for-running-codeql # - https://gh.io/supported-runners-and-hardware-resources # - https://gh.io/using-larger-runners (GitHub.com only) # Consider using larger runners or machines with greater resources for possible analysis time improvements. runs-on: 'ubuntu-latest' permissions: # required for all workflows security-events: write # required to fetch internal or private CodeQL packs packages: read # only required for workflows in private repositories actions: read contents: read strategy: fail-fast: false matrix: include: - language: c-cpp build-mode: manual # CodeQL supports the following values keywords for 'language': 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift' # Use `c-cpp` to analyze code written in C, C++ or both # Use 'java-kotlin' to analyze code written in Java, Kotlin or both # Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both # To learn more about changing the languages that are analyzed or customizing the build mode for your analysis, # see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning. # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages steps: - name: Checkout repository uses: actions/checkout@v5 with: submodules: recursive - name: Set up Python 3.14 uses: actions/setup-python@v6 with: python-version: 3.14 - name: Install pip, build and pytest run: | python -m pip install pip --upgrade pip install pytest build # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} build-mode: ${{ matrix.build-mode }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs # queries: security-extended,security-and-quality # If the analyze step fails for one of the languages you are analyzing with # "We were unable to automatically build your code", modify the matrix above # to set the build mode to "manual" for that language. Then modify this step # to build your code. # ℹ️ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - name: Build PyGLM run: python -m build - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v3 with: category: "/language:${{matrix.language}}" Zuzu-Typ-PyGLM-e113a8a/.github/workflows/deploy-test-pypi.yml000066400000000000000000000161721511156275200241600ustar00rootroot00000000000000name: Build and upload to Test-PyPI on: workflow_dispatch env: CIBW_BUILD: cp3* CIBW_SKIP: cp38-* CIBW_TEST_REQUIRES: pytest CIBW_TEST_COMMAND: pytest {project}/test/PyGLM_test.py -v jobs: build_wheels_windows: name: Build wheels on Windows (${{ matrix.arch }}) runs-on: windows-latest strategy: matrix: arch: [AMD64, ARM64] env: CIBW_ARCHS: ${{matrix.arch}} steps: - uses: actions/checkout@v6 with: submodules: recursive - uses: actions/setup-python@v6 name: Install Python with: python-version: '3.14' - name: Install cibuildwheel run: python -m pip install cibuildwheel==3.3.0 - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse - uses: actions/upload-artifact@v5 with: name: artifact-win-${{matrix.arch}} path: ./wheelhouse/*.whl build_wheels_mac: name: Build wheels on MacOS (${{ matrix.arch }}) runs-on: macos-latest strategy: matrix: arch: [x86_64, arm64] env: CIBW_ARCHS: ${{matrix.arch}} steps: - uses: actions/checkout@v6 with: submodules: recursive - uses: actions/setup-python@v6 name: Install Python with: python-version: '3.14' - name: Install cibuildwheel run: python -m pip install cibuildwheel==3.3.0 - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse - uses: actions/upload-artifact@v5 with: name: artifact-mac-${{matrix.arch}} path: ./wheelhouse/*.whl build_wheels_manylinux: name: Build wheels on ${{ matrix.distro }} for ${{ matrix.arch }} runs-on: ubuntu-latest strategy: matrix: distro: [manylinux2014, manylinux_2_34] arch: [x86_64] env: CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.distro }} CIBW_MANYLINUX_I686_IMAGE: ${{ matrix.distro }} CIBW_MANYLINUX_S390X_IMAGE: ${{ matrix.distro }} CIBW_BUILD: cp3*-manylinux* CIBW_ARCHS: ${{matrix.arch}} steps: - uses: actions/checkout@v6 with: submodules: recursive - name: Set up QEMU if: ${{ matrix.arch != 'x86_64' }} uses: docker/setup-qemu-action@v3 - uses: actions/setup-python@v6 name: Install Python with: python-version: '3.14' - name: Install cibuildwheel run: python -m pip install cibuildwheel==3.3.0 - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse - uses: actions/upload-artifact@v5 with: name: artifact-${{ matrix.distro }}-${{matrix.arch}} path: ./wheelhouse/*.whl build_wheels_manylinux_arm: name: Build wheels on ${{ matrix.distro }} for ${{ matrix.arch }} runs-on: ubuntu-24.04-arm strategy: matrix: distro: [manylinux2014, manylinux_2_34] arch: [aarch64] #include: # - distro: manylinux_2_31 # arch: armv7l env: CIBW_MANYLINUX_AARCH64_IMAGE: ${{ matrix.distro }} CIBW_MANYLINUX_ARMV7L_IMAGE: ${{ matrix.distro }} CIBW_BUILD: cp3*-manylinux* CIBW_ARCHS: ${{matrix.arch}} steps: - uses: actions/checkout@v6 with: submodules: recursive - uses: actions/setup-python@v6 name: Install Python with: python-version: '3.14' - name: Install cibuildwheel run: python -m pip install cibuildwheel==3.3.0 - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse - uses: actions/upload-artifact@v5 with: name: artifact-${{ matrix.distro }}-${{matrix.arch}} path: ./wheelhouse/*.whl build_wheels_musllinux: name: Build wheels on musllinux_1_2 for ${{ matrix.arch }} runs-on: ubuntu-latest strategy: matrix: arch: [x86_64] env: CIBW_MUSLLINUX_X86_64_IMAGE: musllinux_1_2 CIBW_MUSLLINUX_I686_IMAGE: musllinux_1_2 CIBW_MUSLLINUX_S390X_IMAGE: musllinux_1_2 CIBW_BUILD: cp3*-musllinux* CIBW_ARCHS: ${{matrix.arch}} steps: - uses: actions/checkout@v6 with: submodules: recursive - name: Set up QEMU if: ${{ matrix.arch != 'x86_64' }} uses: docker/setup-qemu-action@v3 - uses: actions/setup-python@v6 name: Install Python with: python-version: '3.14' - name: Install cibuildwheel run: python -m pip install cibuildwheel==3.3.0 - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse - uses: actions/upload-artifact@v5 with: name: artifact-musllinux-${{matrix.arch}} path: ./wheelhouse/*.whl build_wheels_musllinux_arm: name: Build wheels on musllinux_1_2 for ${{ matrix.arch }} runs-on: ubuntu-24.04-arm strategy: matrix: arch: [aarch64] env: CIBW_MUSLLINUX_AARCH64_IMAGE: musllinux_1_2 CIBW_BUILD: cp3*-musllinux* CIBW_ARCHS: ${{matrix.arch}} steps: - uses: actions/checkout@v6 with: submodules: recursive - uses: actions/setup-python@v6 name: Install Python with: python-version: '3.14' - name: Install cibuildwheel run: python -m pip install cibuildwheel==3.3.0 - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse - uses: actions/upload-artifact@v5 with: name: artifact-musllinux-${{matrix.arch}} path: ./wheelhouse/*.whl build_sdist: name: Build source distribution runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 with: submodules: recursive - uses: actions/setup-python@v6 name: Install Python with: python-version: '3.14' - name: Install build run: pip install build - name: Build sdist run: python -m build --sdist - uses: actions/upload-artifact@v5 with: name: artifact-source path: dist/*.tar.gz upload_pypi: needs: [build_wheels_windows, build_wheels_mac, build_wheels_manylinux, build_wheels_manylinux_arm, build_wheels_musllinux, build_wheels_musllinux_arm, build_sdist] runs-on: ubuntu-latest #if: github.event_name == 'release' && github.event.action == 'published' steps: - uses: actions/download-artifact@v6 with: pattern: artifact-* merge-multiple: true path: dist - uses: pypa/gh-action-pypi-publish@v1.13.0 with: user: __token__ # password: ${{ secrets.pypi_password }} password: ${{ secrets.testpypi_password }} repository-url: https://test.pypi.org/legacy/ Zuzu-Typ-PyGLM-e113a8a/.github/workflows/deploy.yml000066400000000000000000000162371511156275200222260ustar00rootroot00000000000000name: Build and upload to PyPI on: workflow_dispatch: release: types: [published] env: CIBW_BUILD: cp3* CIBW_SKIP: cp38-* CIBW_TEST_REQUIRES: pytest CIBW_TEST_COMMAND: pytest {project}/test/PyGLM_test.py -v jobs: build_wheels_windows: name: Build wheels on Windows (${{ matrix.arch }}) runs-on: windows-latest strategy: matrix: arch: [AMD64, ARM64] env: CIBW_ARCHS: ${{matrix.arch}} steps: - uses: actions/checkout@v6 with: submodules: recursive - uses: actions/setup-python@v6 name: Install Python with: python-version: '3.14' - name: Install cibuildwheel run: python -m pip install cibuildwheel==3.3.0 - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse - uses: actions/upload-artifact@v5 with: name: artifact-win-${{matrix.arch}} path: ./wheelhouse/*.whl build_wheels_mac: name: Build wheels on MacOS (${{ matrix.arch }}) runs-on: macos-latest strategy: matrix: arch: [x86_64, arm64] env: CIBW_ARCHS: ${{matrix.arch}} steps: - uses: actions/checkout@v6 with: submodules: recursive - uses: actions/setup-python@v6 name: Install Python with: python-version: '3.14' - name: Install cibuildwheel run: python -m pip install cibuildwheel==3.3.0 - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse - uses: actions/upload-artifact@v5 with: name: artifact-mac-${{matrix.arch}} path: ./wheelhouse/*.whl build_wheels_manylinux: name: Build wheels on ${{ matrix.distro }} for ${{ matrix.arch }} runs-on: ubuntu-latest strategy: matrix: distro: [manylinux2014, manylinux_2_34] arch: [x86_64] env: CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.distro }} CIBW_MANYLINUX_I686_IMAGE: ${{ matrix.distro }} CIBW_MANYLINUX_S390X_IMAGE: ${{ matrix.distro }} CIBW_BUILD: cp3*-manylinux* CIBW_ARCHS: ${{matrix.arch}} steps: - uses: actions/checkout@v6 with: submodules: recursive - name: Set up QEMU if: ${{ matrix.arch != 'x86_64' }} uses: docker/setup-qemu-action@v3 - uses: actions/setup-python@v6 name: Install Python with: python-version: '3.14' - name: Install cibuildwheel run: python -m pip install cibuildwheel==3.3.0 - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse - uses: actions/upload-artifact@v5 with: name: artifact-${{ matrix.distro }}-${{matrix.arch}} path: ./wheelhouse/*.whl build_wheels_manylinux_arm: name: Build wheels on ${{ matrix.distro }} for ${{ matrix.arch }} runs-on: ubuntu-24.04-arm strategy: matrix: distro: [manylinux2014, manylinux_2_34] arch: [aarch64] #include: # - distro: manylinux_2_31 # arch: armv7l env: CIBW_MANYLINUX_AARCH64_IMAGE: ${{ matrix.distro }} CIBW_MANYLINUX_ARMV7L_IMAGE: ${{ matrix.distro }} CIBW_BUILD: cp3*-manylinux* CIBW_ARCHS: ${{matrix.arch}} steps: - uses: actions/checkout@v6 with: submodules: recursive - uses: actions/setup-python@v6 name: Install Python with: python-version: '3.14' - name: Install cibuildwheel run: python -m pip install cibuildwheel==3.3.0 - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse - uses: actions/upload-artifact@v5 with: name: artifact-${{ matrix.distro }}-${{matrix.arch}} path: ./wheelhouse/*.whl build_wheels_musllinux: name: Build wheels on musllinux_1_2 for ${{ matrix.arch }} runs-on: ubuntu-latest strategy: matrix: arch: [x86_64] env: CIBW_MUSLLINUX_X86_64_IMAGE: musllinux_1_2 CIBW_MUSLLINUX_I686_IMAGE: musllinux_1_2 CIBW_MUSLLINUX_S390X_IMAGE: musllinux_1_2 CIBW_BUILD: cp3*-musllinux* CIBW_ARCHS: ${{matrix.arch}} steps: - uses: actions/checkout@v6 with: submodules: recursive - name: Set up QEMU if: ${{ matrix.arch != 'x86_64' }} uses: docker/setup-qemu-action@v3 - uses: actions/setup-python@v6 name: Install Python with: python-version: '3.14' - name: Install cibuildwheel run: python -m pip install cibuildwheel==3.3.0 - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse - uses: actions/upload-artifact@v5 with: name: artifact-musllinux-${{matrix.arch}} path: ./wheelhouse/*.whl build_wheels_musllinux_arm: name: Build wheels on musllinux_1_2 for ${{ matrix.arch }} runs-on: ubuntu-24.04-arm strategy: matrix: arch: [aarch64] env: CIBW_MUSLLINUX_AARCH64_IMAGE: musllinux_1_2 CIBW_BUILD: cp3*-musllinux* CIBW_ARCHS: ${{matrix.arch}} steps: - uses: actions/checkout@v6 with: submodules: recursive - uses: actions/setup-python@v6 name: Install Python with: python-version: '3.14' - name: Install cibuildwheel run: python -m pip install cibuildwheel==3.3.0 - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse - uses: actions/upload-artifact@v5 with: name: artifact-musllinux-${{matrix.arch}} path: ./wheelhouse/*.whl build_sdist: name: Build source distribution runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 with: submodules: recursive - uses: actions/setup-python@v6 name: Install Python with: python-version: '3.14' - name: Install build run: pip install build - name: Build sdist run: python -m build --sdist - uses: actions/upload-artifact@v5 with: name: artifact-source path: dist/*.tar.gz upload_pypi: needs: [build_wheels_windows, build_wheels_mac, build_wheels_manylinux, build_wheels_manylinux_arm, build_wheels_musllinux, build_wheels_musllinux_arm, build_sdist] runs-on: ubuntu-latest #if: github.event_name == 'release' && github.event.action == 'published' steps: - uses: actions/download-artifact@v6 with: pattern: artifact-* merge-multiple: true path: dist - uses: pypa/gh-action-pypi-publish@v1.13.0 with: user: __token__ password: ${{ secrets.pypi_password }} # password: ${{ secrets.testpypi_password }} # repository_url: https://test.pypi.org/legacy/ Zuzu-Typ-PyGLM-e113a8a/.github/workflows/test.yml000066400000000000000000000025611511156275200217040ustar00rootroot00000000000000# This is a basic workflow to help you get started with Actions name: Test PyGLM on various systems and Python versions # Controls when the workflow will run on: [push, pull_request, workflow_dispatch] # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: test-build: # The type of runner that the job will run on runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] # Steps represent a sequence of tasks that will be executed as part of the job steps: - uses: actions/checkout@v6 with: submodules: recursive - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - name: Install pip, build and pytest run: | python -m pip install pip --upgrade pip install pytest pip install build - name: Build PyGLM run: python -m build - name: Install PyGLM run: python -c "import os, glob, subprocess; wheels = glob.glob('dist/*.whl'); subprocess.check_call(['pip', 'install', wheels[0]])" - name: Test with pytest run: pytest test/PyGLM_test.py -v Zuzu-Typ-PyGLM-e113a8a/.gitignore000066400000000000000000000000561511156275200165720ustar00rootroot00000000000000.vs/ build/ dist/ PyGLM.egg-info/ *.pyc *.pyd Zuzu-Typ-PyGLM-e113a8a/.gitmodules000066400000000000000000000001371511156275200167570ustar00rootroot00000000000000[submodule "glm"] path = PyGLM_lib/glm url = https://github.com/Zuzu-Typ/glm branch = PyGLM Zuzu-Typ-PyGLM-e113a8a/COPYING000066400000000000000000000102771511156275200156430ustar00rootroot00000000000000Please include the following license terms when copying PyGLM: ================================================================================ OpenGL Mathematics (GLM) -------------------------------------------------------------------------------- This is a redistribution of OpenGL Mathematics (GLM), which is licensed under ================================================================================ The MIT License -------------------------------------------------------------------------------- Copyright (c) 2005 G-Truc Creation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================================================ pyglm-typing by esoma -------------------------------------------------------------------------------- This project includes pyglm-typing, which is licensed under ================================================================================ The MIT License -------------------------------------------------------------------------------- Copyright 2021 Erik Soma Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================================================ PyGLM -------------------------------------------------------------------------------- PyGLM is licensed under the zlib/libpng License ================================================================================ zlib/libpng license -------------------------------------------------------------------------------- Copyright (c) 2017 Zuzu_Typ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. Zuzu-Typ-PyGLM-e113a8a/Generate Function Reference.bat000066400000000000000000000000721511156275200224470ustar00rootroot00000000000000cd vs-project python generate_function_reference.py pause Zuzu-Typ-PyGLM-e113a8a/LICENSE000066400000000000000000000015431511156275200156110ustar00rootroot00000000000000zlib/libpng license Copyright (c) 2017 Zuzu_Typ This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution.Zuzu-Typ-PyGLM-e113a8a/LearnOpenGL.png000066400000000000000000013541701511156275200174300ustar00rootroot00000000000000PNG  IHDR"x/W{sRGBgAMA a pHYsodIDATx^IeIz}w?D\Y&T$$@MfZp! Xz 4,M&B 2MM%ijc;z* Ybefg~ܿ׿k_H$D"H$?E0H$D"H$~W~"H$D"HԐD$H$D"HԑD$H$D"HQfD"H$D"D"H$D"SGD"H$D"SG_?{><^zOG';D"H$Dӟ#"?g?FVp\"qv$ߌr"H$D"H|_7_9}x?WxWgD"H$C5s37>zCD>TQw}UoM/2zX&}o$ǿߨJw?Mˮ_iT;L_(|D"H$?lY$?fHQ9ojxzoO&&[]l_F{w$0~Ucv,|?xZ!~kߌo/'D"H$!&pOӖPDd[qG'`kGgߞ~oO":G Q|{ʌ~"H$D"OF~$|("R?z~uu/IkS?Mj Nk?nj79mM~7~h_=v|翊7/a|Ɏ=ڒXD"H$Dg ϒ$ T.7 Vo&ub*˾^7N? ~ǯ+ǢO E oG!|7q"H$DL@[óXϚi$#BB i.D4bb<8gH$x[|L&XO}-,yķk0ڳ$H$D"|GGDj"ퟋo}!K/%IQI6~;m?,3&OG|x#~?_落[8AX>Z~(~51]_xD"H$DgcO|("ʗ^j/$?/S_[jLDc;vL(?f|ш_vZwjgCZ/׾u^{πͱ?LD"H$G<g,V$BEFHQCǣznR[-^~㙏OvD"H$GVVPDdXIz㙏$D"H$?I|h"BD"H$D'$"D"H$Dȏ7H$D"H$> $I$D"H$?u$I$D"H$?u$I$D"H$?u$I$D"H$?u$I$D"H$?u$I$D"H$?uxv{vovou FtڍE-6]4tQAwE;hrvmz]ǵ6Uh5:nWnDGT2ܩtѨ|uՔo~/z*Zv7;XT!Z*tToTW]U׳|wIH"H$D"|шA»vxB;cQ׏7n֣&I~#B^S:Bą48a7"A-Xh[6jKi뺹N]HE~'^{inᓨw>6 Q{emiB!GbPiCpuБ Y@4iI4S!U ߐbQd8u;UYiFW`*un#_ ᡈq3~h8"pZzfkً䔈IDD"H$ LB RPHEq9 fY`͉6 O%by۳$Kfc_ >GՎCFჹ^ |$&]@%kf+ݞ!Z0*dy)dCH8 bcJFyq-(DB"#!kXID"H$D'Dz |&j5T & +_ k:$IIIM++ [mwsxyw1AP4.l5mt!loKgu&c{[R&am e& sשoѷ$I$D"H$>rjC;!dqkC!q%#1N\C (ڐјE>O|fcGXRlt͑m^ {h~f>V~[׍y6Wi,Z#Z$Du$I$D"H$~(/$ C  ~!C hB!Y!-f@.xҘ j6MS96tTmJ(=^Anbz AGdQO ݋l ]t7"1:jC$(H`GXrQ|*Yͼ2zVU:/ļ bMV]WY4˅*#t mUr: ;%-TF5NZMٖ !"!w+AD"H$Dω|bR!;`A^s_mDnF|76@fD g5+$ - Dd_e ]Y_hlj7;q, ATNGm)A'=PX#JSZ:_WUx|] H"H$D"@) GnV5#*%H+!C24&G(yG!+h_ڂ+bKk@b<=۬amߡYgX8lьGsε E[&VwEDjN\Ζָt;m(&D"H$ hC|X!"b]|%:0im^\@,4l|\=#pj{uyi\BâvV3" di@?Yf:ȝ{1省Dv=n1og)3_N.2֫|x'UaHBD"H$DυZ {$ G>ڐ6ZZA/J`?j 3\ЩEAk!A &::8rO^kA hZŽ?l1w]k2[cZcm' ^c+#k|uD\TA>|K/٭1YFOda/z/ڸyD$H$D"1QiCp/Mt찶JfP!X6!6r(^қ])[}h2~8ʫvZm/>wv҉̥c4B-B]qJ_V^-}\\O2*zB2VB*!F"'&~#Ա3W:}S"&؋tڠ$"D"H$ď6D%UAM!&!: )EpG7?, )+ߐnMJVtY7D‾q{JD:MD0b#oa&mܹL!į|&Kk?Ƶ6!@dd$еG_DgY~IVy$"D"H$ď|Ct/4րH(GkPiCֆX#6*4$4 wDv4&g q9,/YF1_,/d4aO|vtmkEvU̕d6ۢܒdׯ6IOyQ'߉C]pgftjL.c$D"H$?J:6Dб5<"9f]J1||C })B%21pbv@q>DY-&dE0D>Ob|~T9S=@XR%(ѾGEꄖZ 1"%j&( H"H$D"#H60(나T 6~!GR|C*A:#Xf]VZ/Z$ݵ'0] l؇c%RCzqvotK"[)AhZ6m7j2|i2PGLisO-/j*ϕ*2nV_Rpysd IDD"H$ڢMŽVhdk0 oBV(ڐ~JAKJA6u}Ylb!{kF,: Id6[b!!2{Ҡ$&!Vr+E9Es,={.݌l%Qʄ$"D"H$ďz1WMF! 6"\C/ڐ x-F pd']C$II~!g54^_Dp,YPA|#zN =m;C|ڭv<J aQ k?xDnșt5jtAXcdhKXmb2Y%I$D"H$~d@ &EB$[#J!h48ZEpz=DBL A %!!](_A]P9],DY)+|o劺CBoq/_͸tcq߫m,7]]b<]T7*8ijzrx$"D"H$ćD @o]u]q͎ hN oH%+) wq~jS/2ADiH ~" "CZϣ}-$},>DX6z&!؋/N (R'bTByJy<&+dH\-HfkBD"H$ğȀxmUWkwP7E좡8 #SNdTDDO2w,Άւ:zZJm~Hߏ6dfʁL=zr)r]6**Pʢԓ]"iA>|hL*!^k`գw$D"H$$JhC$)e$"D"H$ćyjC$\CjC$|7狉ѯ› p )4!Jck>y՚M_G8>+k̟Hdc ,Lh[mjXͲp0$KO;DWu' dCL[7XLz29A5D$H$D"3`ml IסJ3b A66Ā m~\`Zh)˾!ټhC޷D6(Z|8ȿ4$ԝzm6xݻ^.mp8J.$IHY am0P: `>c5켎iWt^FBH݅~*y, -T3!YN#F=)X>5F;bUi_hC˚=gz-֬(D$H$D"S0+ H( K?$\p$Q 'H- %Ҕʐ`n|L yՋYM vV !RPhODێBO~!.DNyXmtU"ok V=zm;)ύV@VFC3AB ̌y !H"H$D"[M0L8!HhC'{ц7DMJ24%!pHKA5[- o, 1ңttZh6[8W[85"޿{"xa^Pv.(([?DڻzHOeTҨzXc^Mc!x9^]d4D$H$D"d m<D1*Ѝt@V(k,K Q`vcχp>:sSoZ8{ND^:Ž6>*ߖcƅ8@<~|k@0X\'tBVۘ,q=[ٷcXS&ʳC!Qnhx#ރ ]וsPbkB&D"H$[r 9j? 9j-!GhC0g%l%dAdteJi ٕIuM(V"~kC!I4*kk>~N,K߃Y G_: zC=C2xMlH nDA8`YK)/CH"H$D"H|pFl( E A\?0h\B7:!w!"чS9ֆ{֛]lDXc؄j\9 N~Fc:~P7LJDyuY==&fKw؈P@;iBc G*e0G'0$"D"H$3 RyKB8G`n @,! &"GU8rnAˁR!@b ax^o t6H MR(W"z! G dz!/Xcdos7I&Yfu0R%LhpZ/`#T/ijʫ߁|"& \KQ}|!/Ed0\$I$D"H$-$+fPOdȤW6Vz98Cf!&"D*ѯ$458\6h;D ^|CtB9ram&UMsՄ 1j4c{@kQEw݈hm`+1u'W&(DBh`J @@ȣ܈VIހN::U&Tˡ )T.}j]mD$H$D"G iJn78[79̭l$;ԋCz]m_tYZ-LSS19z"d:#yx=;J{DF0*Qv'wڨPMy:!DŽk.A$jcDs/#;g Dxs $I$D"H|6rnb& t4  J˽D,QL#i7M88ǽ3} @ A-r)0)Jtt4#"@2..bZYrkE;SV[ކ(Uvќ@ZJYʼn f\i-E6fˁh_ oϡ}dq_ Ҥ26d\;]D"H$'E"!\"GʲrS KFҶpom>A!$kMHcs%/e΢hC52Bҡmك{GZ!vt{G TVܽdn8lH)C~ʧߍI_4$m>] . +uJЄ Qjۋ^Ouzu H"H$DbzԆp<Ն pԆ K`@N* hHETE.!N<ɿhV >D*M%,0eS| "nwO-GÎ7ә}C,pѳ/跣;ʶʒr(;t0!W344#4hQF"1hX &r򂆪[Y=btAfa|HNO~$"D"H$O,eam&F&mh3:zIL]H}kC̑\ph־p1trRW' TOl6u@D$|ݘ/߀H`nE}!T.CDi;Lx8>jŜKQbCʓwk.J7]mb8ǭrJ"H$D"b6DB9B} )$) ` rAc43d$YJЯ̉}۲^fS~J`.ю`,6kX'}Ox8JLYp;6XDƎ藳#wk* CS㼕-!. )$D"H$>(Dm w ""(]Lp.vjC.PskPu@$1 ]Vۄ8w[:8}} #ࣱp[qnhC6"-l>61bm=jwXW4-1RBٚ+tԏ:psj&'Y!TWVm\Iߦ]UFJ$D"H|Bam¶i!8A>p`fB!/D ҆ fHO!"UN"!^ep~ک?i!# q@ӓ8;=UqXIDŽUΫ N bCb͎k\υo$ 0:VTDZg(sr&YR0$[,}A?Z"|D"H$'n[4n͎YA:ɖI$m*}El"֪(~2rnDk8RUG!Q}l,~1]`u،ygw.Na-UP uR:rbc,Hc&M\,S^녰90!|=EXxfH"H$D"Dm" _|CSL$rPiC 6׵a- fYյ ֆ̹t~b(&-:l$Hd:jXjND ÃE6&Gdj8 σvl"!"b5_3׮,)t'3:^ $lz:Db:-*-!afqEYew$I$D"H|pPM(!Eu(B{!E#!QDy>iц:7B6!\;}MDmR͚)ѱYZ1Jk!ԂE IuPd? x>4<)2pE ?~8붘7ӋԁXKՇHc"%bQz:t.|^ +!D$H$D" $m_|C ,X[u QTăHV)BЇNMr=3k%mLy{֙b3:at%䳸"~V;:ݎMXQB.4&~,K?CWD#C}Y bn)D, cBbA ::9H"[zA:DBRǏh\ԟ<С21 ub#0$G:5"D"H$O0O@!xV1W(DE(&Wh }yi 7|ІC>>̣ Q0ejHV+ %jsLy,sEqR'O=\/VuB>c.jc\٠nm=԰!j6B$fA(. z`E1D"$I$D"H|"YNyRC~gb@0^(E1BX7 @be{9Cxa9·цȂvW@b2[@B{ݻwcb}Zzmk(R?=S.Tr܇iyMKL;Mbrp-շG 侺- [IB-4=ڎ< H"H$D"D͇`j6Ī#$[Ɣ0 K$b:&HfbTs̻Ђ@^~4@Xp[mmlճCx戕!"7<~ ʓ\O=/ »Y̲6xc=$D"H${p7~ &!گ!h?А'o5:PaAHBDJ۷J]bM j-u0AfN늴Z#G鸏, JAgP v $\#{h{ B|A~L1L,hzt{ ԅ""!Kia}=ú Ƚʁ$"D"H$oHm-3D&Z/HD*z! \ekCw؋B I 6,h*J4hXX8bj_~:WxνX.fCy`?GRmCn6~gm!IOh _ |oHM|Mpz7A/TwEEѲ LIl,C,bx)V_$߶aP XM+eD^А!D Vg5& aTr\ k;)wy>"[mDKӬD"H$s|TbI&& Я!ڵ6D;J[8/9EHOb҈0E*M8C(tـ #/DjCs 䐋}@`$ ڶitf639aLfx AB=(X1D0XeU-&U"*w?w!d8:d '|]CF:]D꨾hCz,ȣRv>g侾c:B}XS$I$D"HTO|N`Fdl&mL븾Y~)Qmqt+̴,8iɋgW.ɘJv{\8 ;/鬞H$D"xN9@0 4O!hCt(kׂ2\W!eA`BzϾƚI$KB,+OȂ!.{nlDP !s`T^!%52)QAEbET,tw5i`j*o8]񌬣R7DN~*oyvZ~)g[y$"D"H$ &Aũ W3ZdNؼJi+,<ɹ~Ln"v}:Y}Gc@+`CBF̽nB"?)k@>mh#l:f#6¬)gC6u܆?qa_YaCgܨ &O0fxdY|6bBL gޘfg!>i,fYH$D"H<7@ǯ‚de˅]k?&aھ p.B2i~T$4v@ߖE 5t5VP/t<}& Wå\06"N5 7슴B=c^y@X`@ 1I|%rգDfMHHs{[NCo kXc|vAἸIn _ LDVxWCygs.$"D"H$hC0̮ਵ5L@ -4%e3i.!酢M9:QvmnBRL"u6G!%efEAFC ="̮>Y? \c "!4!" *x ډuz:09AQBAz4&uZ1b^hB(Eu͗uHR&3B7/w $D"H$TDbQᓜl"M<đKNzr_"A_5ڗptJ`]m{AI7_,DiZ .lu% ѥ&;StG˂|싉WY,>9uY·g=Ɇ\$|mu=/CYZ" a7y4kGBs{AF0 ;5Cxo&c7= NH"H$D"xnP̬di+CS:kOI6~h@;6HVa_ :ik6"=YhB$<K{^{EwL`‚oJU&_QOyԣE58|R]-=;@@ ^AAuƃzwZyσyȋr㐽aW7cbҦ|zH#b|^LH0ˢȺuteExIDD"H$ ȋ}$::`,ṤC8g2*z&YŌ AR*Po2ȃ mLfY]^40% >5$Dz"!Mݻ}{y{wGAJ0R=)5 v!J4q-LoU!;e|Ldm0A4 !tŚ!Py&] -V֚ s,8}L[V5I"H$D"x`m~!l>$0^VQG(N ֆ(!ss(f9 OQtd+5;lWh LN[,/Z'8_\\zuHHO$dꁏsaM@X]ʃDp:o59>,hp(3/ݳ\c؈X({NWS2йYp`uLt v\;-~߼wGۙHQ!H"H$DB!"OB!VCBv!"lOzQq?h X҈̴ǬhU/G1b#X1K%,DB!L a*e nFug^BǚrU\^N=@,% ;S&\(GR{1&1bYĤP[ Jlk'rʆ@ LTo}{ajƾPfY8z$e mהv`bƻg%HgD$H$D"!OIH8."IA<%*@ lK͵6sJndk Ky{~*Rg̽n4ˎԧ.cQs-@41!tu?)'mݮ* fKG^CpESB|Oʳ.==D$H$D"bhRUn Qh*mPSqu1*bA>5 ͣ6Lz^ZmtLH6_4!btxteys V PV3,̱z ?%ʕ1Dj+jˢy1B9Z Xcm4=:kΗ8S6_-Tny̳t[vKLmRcVI8y3$Wz?k-LЮ(a4Z /{:H$D"H/>uH[DAxVkV{uҗ:]__z(Ĉ:b1<ԧ" ɍ< !B=(>ܻӉ{ccqE v:_C³a͐*.Λt*013.6Bs-3'C:?x2ѹ> *c!}c@pn\km$"D"H$ ɻByI%s[wfAeU28Fʂ wZDҽ&qnYGoAiW\wbPir@8Ixv&@d-FcX_n1,|6 C;=f\eƳԕXh$oi2T B1Bz!3{ź@pG}>Rkqy{ jW<"izUa u.V4:>D$H$D"\C@^18QQ0 `0hC# 7q3]jo5;<ݦvJx_ /pˋIk:kdRT>fU>Fuf>(JI{AE:B+1 򁀌cBEr"*!mRFۋCT<' =7lrv}j dN#Fjʯ#umDK& ~:E;D$H$D"ABQЮDB@gsmfPkYEW*G !azӅ lіlnW4 6 ج;c2~lՐpyAuAA$,7HUsksN>s-ߡa f x؍A5Hxtz]o@J]&"X.7% |~6"_m6snޫC3|q V-$I$D"HE$D"H$/H(/$-,hI&!דed6IZmMjp4:B~]; Cd:k«@ rM(*~"W"dA={lGt/*XM"H$D"xIHFr$kB,amHV90bݮ8k/ & ;kϋXpDj2ƣGc2y|죭I竭ݬt-3<5u *…`hWfA ?xl"Vɚ!+1>>"[y|,H1;(W}M$D"H$# HBiȇ}DGqW Gܰ߳f#20F퐼!nkn; sg\l:nc~R%G~v !u/[}4/Sb.k;DB5ܻZ39( ,6)o,\ - Oޯp:oLVޡQcxNaʿD"H$sH%c )8'R{vBL$I'B7IX'n.8;=[b8, Iv%?y$vto19!ҀG9}ݬX^D6v@wPh_-c{к, Dgxbql(1y6& 7#Wo$"D"H${}!l^O~7QOD0pF#0itj'K+F}IІ2[Plֈ{!.\k"B ׶gtLlؤdA fh"zɨo+(>]B -ݧU{*X0m )T $ uzQjcӫF=k0!u@l ? 苁y>hLrWu73.kAJ};"-Ӯ;\|4&'e{19yqцT.R5 :D$H$D">}OtAhBik1A36/c&RBD,0-|Q, P`j 6V1GHKfN!цzkKE0HBZUZGX-3@BjՋfz27QacDB\L4(r2PhCV2Dy E|H٪K%BBxZ/,7H$D"Hk)""Y7D鋳 Q:Vp߬Y{mzG!% M" "!hB0k鼐y@p2ġ\:8O]q:ކM ᇭ]QÏ (cvXܑ:b15fdzG $D"H$;`rd!%͇[Hȳ>K^EY&$m ӒI~G9xm"=v(WmmMt,Dp/Wj"j]fKΠBATMy|lz*3$ m&]S9 nmZi!gSi?t!L)O񌧦W{bփ.U/r$D"H$C *rl=93ONDDhC"Zp;s 0o +AXSR2{n ۫k77754bЪŠyJꄴ]l9) cN8]@h 3t1;DoB`oҡl<.$BHa]2 KrS1K 7]=i) H"H$DS""$)oR]GP~Ma ́͹$l#O9`0pO.$E`$7+3ztюĞ~*m\d)r(! +< ֵFW.Zme __6I^HRP~!,|K0;&7|: <'Nk7[y!cx,RԽ̓r[/+Ga"lM~)ԣmS6 %I$D"N'^=İ]FH$>:T_t|/s2_J^ufm$!'DIMyyxQlEF*]"JآPY>/R2 æHAÀ&V S U EmߘF{C]LҬ@GK]lq8ߖQ:H5䣔$D"s/K*.2iN-M&~@@ʯ !ѭK`*Z sDjTK-&LOᜍiX-HJyw$e#8ԴAD;dNc%[mCWQ'|"4{WA=TKxN8_p^1 BV^jf2uQYU'WsKzi`~u{S V6&S DHdo R%25aBm'$I$D"SK}+!G v$W"LG'tNBH ޚ9!$d˛ ZM̼rbP;ߠI=]=NCڕg!34UP >o"H$/|sǽDIWB<04w[FA {=Cg$RH(~efB/C_8ǹ٨v3$:ڎ.^shXwN' iUA8*'wH!Cfty|3/|k_8J$>:lZ N3f,3jCS3!I-IàBBhPЬA;"NYPA3,Iӭ& nkIVG$pߣ b* c-Vc(^[C$g:n%㏡ڰ؋T4tOM&\wHכ춛bFh4 !vP,b> 4&?'.ʤLd01iazz.jXR_=~l)PqrrvJ$9~ӯƗ>ZY|sg^{Z Mw50~:[C"E:ӆ W$B!3f_1}"YjP8f;v X9AmeIj7k8vx~2P;;ؗ ,>D*7џ1v{2^f1MOֈ@(K9VڈNRLYrY+}`z>|OH͐ ]{2Qv1P")&<cDa 7?!h؛9fil xrһN"H$F|4^<h_O2BS^x ^ 8c2`E$iPtw\_qycďv +QQpͼ2lu5;05]Al3w&hʡH̤> !W^}NQ[,~δE  WqNgIfPy0~԰۶&ɀZn(ZtMr#zSѰky}B&"ToJ?ON݈4Lhu0{t=wBB-Ws|Ue>k4тPw%|kqg~tV6boFj]O"H$Gyۧ˷㵗m@AJvKg0)`m )ap8Yh vGf . bI|8v$`t(іڨ5rjH.8ZQDpCP֝ե!!GBׂ~Z>ORV "BcQ[9U۲'@):E7̜h6ѓr̫h<PB>J[% $69^h5B41hhj$$فV_'9lph+lf_|_7M<0 1r/=/ :[ mn(kW$0hi3ҷ=و %I$]_ ǭqTk/z^ iye]u 8X2:BhгyolР3SY/!׺Hyp{(ADQ}zDȪѣGYLR 3*Nر#1یPUZM>>B0dq3y&6Fonj>-4ebD:ؔ ᛵofLa,詯Ō "Wm WdBMTy5٘iQ&QyKNI+31Ȩh6!;=8̓ P^XSO8QO:@] s&:wH=Cv!hz_<復DdD$H$~&w_Ͽj8+" ; 4P0X0x2H@cDXgbnA?zhBD:ރY@R|C|γ,ԥ3g>z&?*m>HrQܿw?I%kGҡrP[T3jegL)RɈ7=$hKi% RKIC!"E$vؿ}~>oI|Yڔ&DcꜣIǼ JskcnEK_!6ˍ1^5WZVǯNjrozNq(ihԋ{6̪l񢇓~/h) y-|]p.<^Ay$=gdd|6M ϰ$O N/—^%~O/|1Tp$]煳`0;.VO@ *eF;]> &+oՎVwq2F_ybs,(ń NE/'s?S"ӷtǣ$m$<S;K@6|HX"L8^1ED@w%'H;Jk AuM:O-TɆ$\Br{<^}91%6~ wu}ڞc"e- UY_NZLjsf[ڴ*v|m&Pԑ$LX>#@+n՗=aIƁ_ Qk`v y`U0P'ʨU@^VJ/t?P>ĕ aSQ*MD$H$ݿ_~*Y˷f:tL V^@* v%@!-ҕs8-0-;jG'"JiEC$uo`| fıafEޢVHyxtć+'2v$ ݻv ϴ=$B:$(J!x=C-b 1qaD ~O*DǍ}_W!$m40Us6B~ i &^}GAP"H B6iqA{c5uўpGUT4uNր(O jϘϾg'}OQ/}8~!dQ> 1Af!CڴѨWH1o?1=l;S7sm  ͽT+T>(_0*@,TiؙR=u[Nda {ry8g'8: |rAe{Wũq'V_7!PDA"FCDzgp$ebc9|F@{p^BG"#}L˥g߰y~q^$~}^C"gW33fs!f/+EX3AmٿHֈr'!SL<4|}St $= gpTMz5h47,Wxnk/y!/7. `MLhD/}7w۷FHiOW=_ҦݢK[ :Ͻշ DT Ա#;P} k0"̮9d2ɊXa*Iɽ'Sۙ`zS]hWtϴxDlN^|ˌ&;A%˜:\Aݘ>?Ϧ_g-L$,$"D"o:ϛܝ':TVIȂE>BMBǶ9~#^y+0 D_f=nf ~y%|iz1K/8dWRB+rߪ|j'$_xQA'om;33qa/\ﻜD/!Kf{w#z<fV}2U d 0[@%1k}}3z"ԋ[]?>ڌb2D?+$b\Z8{}7B[fA\mq:zt;oc{+ݟyVŻƏfO»V`^aukܳ9W֗a+§ZX,2>M@nhW #!n"MP4- pӎh;3yDۥ/G]%#Rc&2=vB5}4f"L-fI @yTZy#sY9Gصhc,!xuc ws+mϋ/!fS. aP:n-Q Tw֑w 𝠃tM E V]z?Zx41zǷχc=cD"o|Zi3X8gc.Eόq vPN13l1:#T * #SDZuǤR8<*mLȇ=<{踨1Yk;LfZ,b^Xet5*~VY}lqŗ㫿K/~)/X{ml1'HVz/~-A5h# nz"!ʋ3%#tp&gv*leD/>t=0Clj32pfXfqD"6$Y&5H[~R0Wmޅju_ = \=u|+޼j۷Q"܋#7!LA$<% !vXi"h|7jq-ArW^Iyɋ""M3ݠB=Dca 7`فeXYC_ u|">#%/$>~S2L?π}EerIXߍ:˅܅j ķa?`|`22Oʚ|iisG@]hĜ o%2!PS}W/fDܕwG!~!r9r@c C|:'}|+}{SƄ_a1yQD"q20kP?@岄OB~E`HeFbڡ6Y2͚5*gcGJh \._}US/<\ lZuح~@#2bP8B"LAFf\6c(`;?j`yK5d5z`AȂhm5 _7v^;͛;m-r~YxiI4j>uhRxI$d.”2}G.lt5r q5] ۬^( Fє .H2"rdcaA_B:~}:vĢ @Gvh^m0Z41!E2٤NEo6QD_y"=Ġ6j- {qNڶHTd#2!YמTL!{SpտrkcnM65W8@{4E,a "BD9A!L`ޯKګlWQuE42n^iCE;ySCb {$"DggJչob@DTDjb3% s-QQ$\ږ'F ۳.1*:3eR`@^lu췁s:9yoTB^X|:2Y:^^^vm:uh@xD  T3)Fo?_Ͼч8q!*Ǒֻ$z U3So;'|zc@[Ԏ}|gG n][[m.&hW6}9xGc/87S|""nf0>T G/Dו-PkI8F>~vs7G NABO_lN~GP OFِ>vqƦGIt' h=&t&v W^VIHDc%D8$ĜE ѬwDBN]/6l1c~4f3k8/D9Ddif1BrndJԑω^6hة{/rĄc5k=Wш(^8[g#%(%I$? ˿EuEOY4 1 o)`aBqР3`P ;нb|Sd-:S*W&D8 Z}AN!u4$D'uzUnu[KN&^y*WWWZf:"= C+d֍/4YuR]tP7ۍ8a;qyq2P=t *dUX@cCp7—-ZTD  &8?zS[zd7qy5'ъy a s;&3/4q,k;I}{ Rv뭎 6bv⌖f2`I&=Dɼ4Ɲ*s`~#K|_kuJGx/d_-L?6$m-v$Dž/Z =r"'sBhhxrI4̋!$|af*GȷS ¸$۪(3K@S~-e͐H:*6އEYdypz˓rD+\ԝ\}> Hx3A&"_$"D⧋K?Yvs'NTYAvXth+NOŗԑALb6Fh*$HQ?*"2BXTu̔h^4eq4mdUl51sEglW3$O4p4-%;bnY)̋lpǯ/K쒪 |(!K <- ;! +:z{Xk9Q^yPqy`J,58z엿^z5E 뛙^0@4_2݌IDy_mMn ! *Nzz$Yȡ L3toN1Aݾs}@}{ ȉ^>Fi{mpf8 @ (;o㺲5"S6._T n?󴛩1cl/F3?WYĕƜr_!"(c&0"x7cУxD_! %|;ĸ6S\&Ę?F뇓;D܋fg&Be0neX\N='!kTA:ȇ1Ǒd/ODAMg1Nb<ģ'T 3@}趋]<|ZձW-@0Sb"AD^οjzEѤW}A?Qޓ&PG|xN".3ay`|s_zw~\^<ơ8?||egb`-4:ʼn>ˎH3ui(|=vCI,䁯vÉڼ.ٙXX tx"aHV\OзoU܈tC 8h&XeSN1̴H% t @_@FiL1dV[P|;4څ5jDjodAZ̝!e)7W' ah ШcE*hPw5x-cH{T\ƸxJ;2u5]y"fYƯ LqOPbvy;`A(,_a/58$O'=~!0qv}QY"(e(fk,N\C;=][]1YU={KAŸfF UxO䧧'&$tssݺu':}fx1q}(y7owߊދţh .b9r'"6fnzdF ; i7FoߍZ S;, LĽ};k0Ό!wziL8U /fჇ"!kk ?lМ-θg'8B\M/8o1Tf#&NQi;Vt'MrA5,,R/ꨍoDU+ouIg?8jHܲIc':fxl~Lt ۇWДgi;nM#s3ĺv|lgtpګ$d_9R~!& nc,cwz!L&!Ի:IEy+ʐ!E[R$=y.FqR&X'yVIDĿ_oa|^{uLIx~= N,5\ݮk4J$>{mkZ&5=wÍ8c"wTa_FS@="fXS+2 =yB{xc>374We|/QVWBF vΫRV1tEUg]A/JRBZ#N+^j"tBi!e?j9" Q̋aXøB=@!8$d6`%Sv"3.S-"6Qn]dhW%Fj!9DFc<ĘL$}ڋϽ_?x3F4~d 覚PV> wztتz :7wtX؃YG:2m؜''"gvn t(Vv9|Vkkx$~w7xO߹W:+ ' ̬{8р2"ʔUJh9 "oy| Ԉed":Z̤b_Ri־"C4,ɨgB[#0z߾we$$D4M ,EDYK0?دЮn9vq~<C/l=;N}OIe=2e9"+)W%C|$ENz bEi Ḿ6YqYGЏ$_)6qTSqyyZ@s;cNz^|#h7(*O"2 u5bWZ2?v Wyx![|;|<Q1dalBB{a}y5ǗӸ}ڏ뵞9H"_K_\>_/~sJ1Qg:u"Zó(ttN췞dV3 P]H܋3c6xt \2v'{sǏW:n pچ=*3Da%~h`;Q.h2`G@1R4t0{;=;<W5 /%/87%%˙ƃ6m& ;YdcLSߊC}6Z \G5qQ{pLZyP2J[~!.S盭܁<:~/Ʃ+h2O3rGc_E399a\ ;1\*ʘHpе~q6ƣD$x/~o|6g_l|ӯI>WȮ'S$y\45w ÞV" B*5398ȡ8??ih\䂁Y%|&ie!':?=pÇ?_hVhAXYA?]i|;{뭸qwBcrq,$\( "! b0`PVEؠFH7нӇavٲҖڸ)y龕qORJ+z޲:~ 3zAH/gwr ^"G,fcIE8ߑDf-4?a}n@=gSz"Ҧ6Ў`6U.&lWk|6uM<8;S hL*3m[:_DDhܶ+xox6x&TqWif0qLi1G>hM1qF+^5Bd&q"Aw<ҡGhR<.ꛬ!k|WL6{Z߅ˉA_b ,ed2$O{|_D,5څ4 Dⷁ1+ +&H :|P+vKm+ t({up/zbt$]TAFT:t A:.jefs?trcƩ%zJ%S^:iڌ2B`%3NR1 b^πU3<&'DfDD*O,2u\ ( 7C@yR8s1{AEN׎Fr-쩾6p \ODR_y8;;qm`qm܈fsp~Ɍ33_oN;@{fC!HdJk d|'Rw)9[JO?Ds;y(">&Vh&hLQv5fhM,~!jR;SteQ5&Y~˜=-I uG {ҵ_~}ʀ|(vb'.'_&^wP^5)l&UQQ59pgK~,!=.wQr1)aLd?gZk8%?2y@4 5%ݧ@i!!DkGAEy1_iu>X$_r3 1(AQsH=  9/1C&̢0_zyʋqv:_F B!GÑͫFQlT!Cz"q/xk:}xEBޏ'bt4v^ڠF0qzhV-cԪ>*uzƩ fhs"8@PSiGi\OJ,с#ؤ Cf&![ 6`Ҥ|-B &u*H|7;VE4ۼJp&GA8φJh4$>ꉙ3X/#R7yHK 7e@ 0L1 t.Erɯ#!r<; 1$k0Xs1M2╳ێ'}^@GBї@ PtZL„sE@BewKσ.KdEig,9`+kEPL ~- yK7I@h^%lGy9)|}&!DtWMLWx`/g$v9eL0F2iL@1/IЮIEB{?~IG?&,ft;>ͷ,[\@y{cb@Gߖ,P, 0,z^%c'$"'h U/ИC4#Q1cN4!~X Gc tMElV+ӧc]и""ݍ7֟Iq+ƽwNbrDJBQ0WGL,TFਣ!&܃FqBڈug[vuLIGzzJxCZ؛zƾp9dnjc:~@t%0;K*I)>g u^2yV5:.!תD3^ hpIgp"1+ewF{hcz_9c6pѥK<fh&4ZN-fjh B"4ʋoB;mjhoj|yP. A~c J#@BN]&b2aCf|t P軡ϤDw;]՛_}DxhkgUiDsuE՗B˄Q <¹r}ݩ!C*ʘ( &,4.S=q-kE=u2PL֐@H`ZLcB{8gBwMXCvQwYg㾉*]LA'8; VFX Gӂ83h:\ 镙<ՙ,$n^w;h{Qw7ߌeLpr\a: qJEA]QU3BgpNgE 0L BuikA[3jc+ m]q03cDsZ)HػcsNGMJ ` vf*) z,j5W^obʇ@,0dQvN@gv9 8tڄEuDr1GO$2@,oA{yCX[`y dU=p~ig=yCY#fRE㈠BzmXe! i8FYq񳾾},+BkM'h]|o95wF!':`FHԻ=$v\nMk*}7k|_ 2DpC?y#| LП*?? [M 8:64IF`#->xڏں3L~iE|Sh !DU:c}'վ>sTJ;֐3QwPᘾ}8.* h["&("' a&&{g<{40Abɀ0j87_M JH)aoeaA%: BaO#4 )6̦gxqo[oƣŽދ\_jk]VkȂ<Ա>_:^fQBiQG3c 14iɃ%b>stڥ#%1A+2ޱ·[%8kA$3PW6gCW VESjТ?܂"?;gCA=6ʓdhC0c'=def{yg 8ԏJ#.]w/f"5-6IT^ԃHST9O(Q ]Tk- ;рR7ʉ >+ЧC/~#<ɈZ#\2׸s5_,K1jv/95HvX}9U܏1X(I$&یmir ȈV?6lhMi]D4~Scf4f[ JD$xƧ_5`YQ8[cWs"7N˷՗_,zc^\Eq"{7y?/M0no+ ζF*9C \-+U:tD7;WBS:fI3sF1`I.d=C}{Nt+ 4 NDBh*I=vl)34UOqf p:L0u- >/E G-ϋ; q 6#!1 `URr{ h!QL"d;V+v xmx= 8ڇ&5@DЬyM~)|Q~`a"p^./[J"[& t&X˭uI (y_/8!OIF? Coo1~_57k_c\WiܗD;B!DDvE5hD O휞Am#B:a^W婮|ԑ1pJ"H|6J[;t> 鴬MܨA3Fl[Q|ktTt%D $l#u12nj$ 2m_Thv賄cQf`ѾzF  94KR:cu}:%T4E< yF|4ߴfNZ3@ I8۩Z+9ӫG)E.8eIz)=fa!QqLHQG"<]#t3!zY] R5oYwwP"("Bx8oPg0fEd5L-IhS[V:idsfHuMǐ :^.b$Roe*往+R ^0â~&寔wݨ})ZɢqV\ [=Ƒ?YKI aIae|g튌\MfIbcl|;3զ{X rkun"1S#&\6tU;DOZ̗~(u:34gNV+qr|G>";8ē5/he)mр+cD[>Qh'I$>xt5l}t̀ 40x4뛸xraӀ:HGˠItt Ґ J1 1Sqg.G輘qZ0kSͶÇǾ%d{ȓsz_M$t%h4yh+3@OanQչ!ȗf%Rh+ ~5{i\w|B7DR%A[ C)ςp'7m - {mKS;&^WcW Iy ]ˌwL4hw%g@w щizo0[Ҡ4ͽ c=F{'C~l1ݪUGqqqʓ^F !IHՕio|".]։W ӷBYAWhd [N*ޛ5jH=O_^khь;"UN3z 띠礌B훶p;a!Xf,*>c>^>+k|"&$JVjF? *R;Ğ @̠!E;߁5'2O"1VLFinn?2ßnII3{Gi7јD+-;Db2]$"_;[,ꥼ57_††Hmru/B)$uE @onqn +[[9o6~<b41D:?IG` {Pkg6[,Ws?6Y{k;6ݯmYG}^H,^Bˢ25:~]nFJ0)Yn5]J+z! 9E&+VƊ3om}3p'ng)qT&ɐAx?fD/~u r:[JyS:TfQ q\ǙӍ+jaj"LVygA* |k_3@("1KE)3U܃}+B͞T:6@kf^U.Ȃ#YɃ!;b鸒E~d X`VoƦ!~t:Dł2J@dl:B@Mx#o&H, ETfUoqY( Le}BGՋKTc ~AǛ`+ %d_~#ΝMLEB`,eSC@'6=} h6LnX ѷ<շ€ 'O)(A 7Q_VGwX4>ov}Ю+3Vi>SLu18ؠ/xOEM.xdl1A0Y[m^JqXWUhTi`qr%ď  rRU`Bq#}jYJd e# T:m-3n 3{Uf.}GÞM$(܃qHWӅ`;p @< l]6s)'3~?bEGKAApOd'l!5S>m~-Y#@x?ԍAN\Oоߍ'M, Gxo˛_>)zg;NL6F^)3,boD熄+{Fe!P鹇K &oߊ[, hu$BzQNfy1٤@m'X]ɓՉ$Lin|/NںߍIVm}L,ɫhgL~ƄU6VZ)+nP`_}n*WBBFa C}<;I zY $M*}Z= 씏'EwRzRh_@ZA,~X<ďkfJz4 7ڤp}#Ld2Y"1,pyrUǺϧeWdzS D/ID^SgQf&Ɲ̤7e֜ͦLڙL8Liҡ;64~݇f@i\7QǕ<2Uˬ!z2{nf4B6DHعG9mbi,wtֻ"8^aYmՑC\&W yh*DTԉ=s/3= RW:7ǴFZϤxz S\x^If*W"77S 8bqqj~FX^{`6BxڮMbvDT;3i@Y ߨ@I[̱ wAt+2mшg~LvtI LзSW.iE}x=XljAB\A}8V3_3z!- eC~Fݖ21@EiZ1ݶ&V%J C_@;縟ֲߋWoc֘/H'4D0(Eg&&-D93og@;3ߣt{,,bK!!v Ku>rۀ3x`F-,X4܁FNy;[S!p3W?1pop4̮BPtO Bˉ&D4#Tp{jzf-x02# MHYȰز㈏={]eմ1JukBʋwF=(&6҆YRe"0LGA m Z*t\+:uޱn:DfJի_#ԵO$@vw']xO2fJuiv~֋G86 Oc"v,aCIK  šIeA?O$7P|I/0Rjv\@O*Dd5AG$ڲnнp_&=]3>JߓmEpBgQOI$_B1cXQxD>ɁBoiWvXUcmhT1N LL^ɸ,&ZuzH$>`P<=; +uD7Czu2)m/:ݮT56-m<#pBBc_V,4b.%o2(3?Trkv\~̓X@o0BqRD0pYD ǤRDaթZ )A(j ;{ؒ$I`&i%$ |J ό/fPE&jΡֈ}:њMBptJEB ْR|T >9FDnj輹!bªmEP,F7 4= $&6@}^6_nvX8DaׇVg EHb' ;Io TDT@|LАKשJ *_|N#3z|5A::&7fI!N9EsPSaFGP^ >ulۇzp"x1*h4\ XA `2 s3(4?7 8u탙aQߋ|7Gк(C`Үٲ,ɕ .g{}LPdl4yÖz_Q-}M)TJ $UN!"ΰGd$0cTTZTUkm2&z^1l:Ss5vsdC֞?]sSs\mX`{jAsNpt[X;X:s;BڥTQOIwu iԓ.XVlVk}`AI6$aC'{6UN̋%./<cwU:q1]C]ZPbpcEyJ>b?ZyJ"@L^C^"sy54ӚgZYLLAs nl4f J![@ݖC-" "hZ0X܁t@ z!PvHyANF2X*b\b,Akim(~XXAgE$ Ņy0"K $*Le e1~Zo%@FC-KZGcI!Z->u Ex #Ey>G AhBP@#0U7pu%}`h<{2 Fzg.ј<%xaA|P %bFXek:{ehHu1vK b !4/+횁iB,Њ}TSo*VRZ{˓ [^I^6`.J:iA̓sՀBɧ=Hu0pF?09M nNJC,vWLh~ ت>%'ٲȢʁE,Y7iw}BeKݥ߉ (Ji7 X֠50:7=ϱ|1e gΑdye5 '|g^>)'`[sԗJ^򒗷L1ɦ,^3wwY\jԁޒ*1~ftIHuDWI InTUk>t,P1\9 X,b !ϼ|YrpI`Es6:`N}5O8yЁk n'+Iڟn41<NJ2AX&r\t9HBG"u%P}Ɇ9cա TviQ&&tfIR~b-"PXjm5n{I ˏH@['dGH+9xN!^\H}L~u,8Ī|bG i\-(~ӊT?w1-ܬs1jNӴU`a  h#p$` cO tbS؜˃*ƛ_cbI(i'~[>r׬-*O.b |q@a=`@jұx0D`0KhUQ#EHZ p@/q.ᴙ7ݒu}ZZJ8rZuͬaDs OEe]lTu6 =f,뜮CGB{@Q"; S$ȈqtVFB f#.)te?p(zFWܳa{hA(GOi䢆V) ҿ67I3ZwFӏ<@+u"{m$;i;zr%FÑKkJdp^˳*M&hr:".YZS@?k /!ulխH 5s>z%T#= XfFrIHC8sa,Y[DWA+^;7:>xr1Z`4kZzXT deÚG$a;y(`keLܘ Kte_ kRK@9 _5?z.+bܷ]YYYŐ'LI\iF>aaE.!yX>'kJ4  'RzToZK^:h0- hlM lw?R,7ih t>@Bo;{A&gP4x}.>dsID-.1l+Kh*tφS3X"՗$%$B!aaxޕRk['}wkϥ!BzFcE۪s2px `N˖,S!W-\vW&-]^~ sЉki֩V}DZ9]͕ErLXk{65)-B9,4o#\O:B]/V:h B[t=7Fh}gα9iO-/s+c֫U'3Zk75uVsS9Hڂ/gˮmIWǵqC=ti TrACt /@npjڻ%/yףUJķAxkJ-"y[V:.;ȵ:,6SeMW)u+nX(P:0hۉ3I2 r u-N)֗lyT5&>?KqђW<ᆌ"|%"npl@+CcN#<3$vn s< VûWWw}m$8N-5MݏWhl @]{J; nhϼ|c Gg]Ǔ(5gYìA@\Y ̰w͜eT_țINz V<% deMYx<(h-x=i~V [BU-2>yRk[r! }HB~"PylT(%acjKڷ2BcIlnʳզSo7 !4;A|7ZRߎ֐ֺoBo̟9K^޲^.Ѡn\^'9A[Bdݶ@{)ZRh\!?Y`hJV{>=?/uKb\B tV T(6jcܓ X68Xvd36:St͙ nZ-3v[=AP0-!Zs웭qvO_N Tu:Ǔu,dWEPoh8(龃SwOž[Z\ Ɲ]d8w`ָ/U{X !EA'1X$H9b[h4y$e=^WFE}Dgva!ƀbiS٤9&83iLxW,gN wnwI^+y< ~o$ďfai"SsAB[B|CDch":Q/'ܶXE"J Ɵ!i6kn{YSP? <2kITٙAbt\;u`9E@[2׭B%I8@xfP4`A>4Fz8;`TmI)ϻBn SD򒗼MH`la!qƕb2h2>nxs}c-[#˜+6,3s[$TJBE"hY/`[՗:XP֝Hhֽ(/.m7Q^bOJ]5DR T5ژ.9a ÞdKBH e:ə/"U~- ϛУ^46{pם hnwj}H AjyC'uhNY*3bXb$T[;)Bϋ1+&GNۉGgV˩ sսU>zzfL%D>9Œs]kKဩz {X/? fPB jX*bNv e,!qJ  RIІUKxO XlBVdII!U=F]*@E?I5%M$P:nD$EyH4n5,Jy c+׳ g+ (]nm9巖b*RBv[gs }լcB<Фmv.up8Cž#wq?"DXHQ}  艁=#!լ]*IJ&`0\z).0eku/>_l]\NVśVBB[ "O'+cu(Hh x=4h@Ψg1JD=;iJ=js$agh:UhCyN>0#Emv 6+D˥VJ'& 3@Frezy?W?4u# (Y'Xe^`1bn#> @vB*:|QfHCTSsš-+qq5(Fg^38bq!CAxy;3x= ̞kBar7,9W#g䊣m,0Y' q?s0ALkӤ2ƚމv螟9wq?`&cAɲO۸vF&%Hl?:kc|ߌ1f{RLvd H%/oSAвK^S-KаMm(پupfj3[$D蜅L(YG 2H7!SYq]9ZR'okDخJ T5Jp<)&|ñۘ{];Nw%2ML;VU`ovB=kF +JdងnHm(pC!% ! 4d:#%5.l|O3Ľ0u7c 0GE=<8iH T 4ULd##2G`bUV W `]n 7ʪ֬FM!gwu MRӄ,";n$ <L~RJФ~=)`g]^ ;[Ofkjf춾 ؗׯlAUPb/}z`)[mlb\988/_|ןx.r{.>x%fNO ] SMht\XXOXXH\Aױ(XIl77:CفK}b2?'ק]Cu8\K`LZԫ55ALwת5Qo6b^xLQDɌՄ7˒AcN W2.Y<(Mpމ…}6EC-Uy_ya%}?l>EV;3 xqsػٳ)A`ZkAW2?X!\{,/Zdלst)ĜQD ֍'f!Gnd[8c:FVWmKhJ SJ:tXfQd3o5Ʊ*qC84k7;X??#s( a5g!Θ%/o{Ƀ󒗷w[XH@CG`N:X1nb2Ds݌ԉ0ɞG]DF)iP]dj Ll |}|J% A0jdZF]@o~羕Q[;VvKQ'Yű&0r]NvGe\`6&7m‡vOں$lVaѲ0ؙ9!lixظB06!>T]A vo 鵤Lj_zʗ&(<8YS+o2 8ޙA~ мO?K?5 YMBiJg5TH+Q?K.3-,A_\H5l6K5da$ϮT{^~S~F*CQ)@zXúq? ϼL @o8c,zW;gJk g,%sunLdk"W2o)$bS/b@zEmD7Ks5%$ N}IF6p/ Tܖ*5N| KMXA!<:`*haDٔ@Q11E{I^4x"!+MK c oYopZCoM;Yp(YNCL7;n Al`ÆdZJ>bZP"p Y%zκB]m~T;; (t-NRu%]TU'S:t2AP.EnQzƽ> *s\Ӂ ƘG` B݁@2'P^5 dzAcK I4[=vy.,[Lt/Zp@}utHZjK ,\on'~~Q1n:xt~Y׉=Tzzoy q'ᙹ =L4ڽޛ(,XOIgEzUYu5+N;h\s ]$ɰDV $ Mǝ]@0X5]BMJwc5I Vbz+UӤo5w% g?oԱ6cxfzY T')ʚbh'8=/$/_b r*'@(hZAv mM,v#ufN@ yZU:Ynv@@6}¬sݻxPJα@Ր00YUcG9ĩ?t i0 RvReLe\M1n2֋E6ѫF hzn4F*hR_w5~Rķl%-| ~2}⚅BGSߓ4,Azf}F5<7iX@YvO`v$.xca:AZbNC`iOx'&`e#6WAEq\o$-Ys1G햳gq&w9x7_Ld^Ih9l+5k& {%aa|G׃*B> -i :9~ ~,k{=l'AJ'(SVXi'4 @ԇuBv0sUMh6 #߫HwaMՃ߸EṩX,\̙pAH^jז Lrpv4mn7..LӦs NXc<lb*}D MDXFa`&QSo岙 3.G[FG AoFꧬQh$,!Ə9Т'IDAT.@`$,mnN^~Ⓨ 2cgM%p,Q]%ΧEx'~\KW"_T/-PYJM-cew&2}aAHT+B  洯 $$tݝ60}rv@tJy<xM&8W 9u]^NBX];E@xZ\kooN4/;|K謓\tyGIV|9g+'#29.P^$"KjQ 04Wa>zA PI\? ktMZ_oDȵ @7} gbKPD@ט.WhuvLJ\keҳk:k[ѧa-LSLb,ʬÞEWXD07Y9Yh>%/_K%/=eu; K 0 ` c{I578 @EWCR$|U @x@Ai((gS;-4 tD*ߑ-\[ *Khk㰉vCB\}D(Ƴ8u B%.w{^~y-&,oֶt9B֒~`f^9J &v"AtC\g[ΑP3E 8`'4m5Ԟh'psѹlfWC@>X9RSh@GSt%d6 Bt~C}([JTC3A!ZhV㌻)󒗯V#%/_?o< ۭz)wg&HE}1G x{Ny|Ņ"0\B2ڿ=g$e6L8/\&Bd|9!aXlpoX쟽X&=D Zyªj]z:g;~Vï$/yOd! (q!F,J0W63f1ЮV0m?#\*0;ZCz_-u"%Qĩ8㍄p܎!!5h!@kGYRr=Q$@ Ս}n7Zq! 09]b6v2tG@*9AB@le1M]3$ 73 ı8{yE3CdapANOムű5# txҭţV%r4 :*q%~e_F֮fM!n+ܪ边z.@>~@7]:f|źN'n`_<ݑhĠߍuќa/"W[?zR/WIN_c^Pj-NS17_{s{gXND01X !T \`he8k7t Ah5:b;{SB\Tq$ ]l'J<FP/E1SyRs\$!м 3J#&H|s,M~Q1qd 3XSĐ,Wd[E Mwܻ(! !_0_, Y1ӵA}߱k.{-AfK/h~XC?š9תN\hz50j+Y[3/yJR<Ûdwwc̟4F6ilk:(X.s>|zu '@0QO]N^^ֆ(BNXr[.Ƌa'J\+q֬DlC+TYLQEScv~??÷%/9KP "͚A..2h!c2Z I8Ĉ+7DDh/&]-C!x 0Dб7AxtOu\^> 1sxB, bR[Pk+oY:E%0٭~܌!lc |ќ1g5鹱LOx~' %& !1NzRm(*u czf0>\4.;;Đ4~;&!==u AE1'v!ɦ݉<`:^mQNٍL]:..Rg].u[9s4v rH|u}e,SvѾ2O2{=KI YHX'v_`)}5\k,\5H߀eW>;\K% M$c2M U,%$lawZUL=$I4zbWrkmN k6 igX\ҚIHb쪩~p)q5H"ڰ򒗼P0@H(?d*!+@ǏLn{ {m6lS|eE`bֆ!&twы=vtZԎX'q*?tN| XVuI8aSBDE(*MtJ cR`B\dl6ƦcX9L̟iM +, <ݨjNjPk9ĺRe'i,9(t5g_Gavv!!!(5UAK!pK ?{%x R ɢDAeut!% UUtnjzl`Hp0̎ h^<]fxҪEGa\*z縶p^ĻPzCLg_0|>;yr6액Vxn).$P>Jt$r`ϝk̺ m'GO9%G%kzgY|>k"fCvB0UZ*7֘$Ā^_A4$M0 i֪V[XS=UklRf݇+:ue{1?O O7x%ĉ$OGlşXӓ%`"/Mq$zγ^ٙcMDIšBnn5,v\z%;ߵEF@ o]>%/_ІP1鶉hD]E 5 Y<~tnq"0s`A|pb_9QKX8?kEl4-ǭ@n|2"G1|飤„ *}AJC'~:^$ +huǮȐAFpٔ0LBxA~$AbE74,p뻈trͣ, hT.UEى8vqq6җܡWkv:NnGblEXb[}W6 Ɲw0uPUTь} 'da.B@Z}fn(.;уNoA)U99x}DK5v h>1OwI^o߫`&&"sr5;0ۂx>$硷Ɋě%s(y>u-ߩeȖ;sPCD3 kn:YYO>}?G?o|uKAЬ@ Ccs»'g@jIEN݃F&Fb/܉pA->+u4Tgʄ{ N%Ak$>B Hr u!w2G9m |4=L'%zu0ĥ=@$bY`(!>eZ- M574hH1L&dR}s%Q~ҚJ|4Sprxn}c"^ꪮ³3f\: bxj8Dh2Q=`K3PTôIJ$-ZBhm=IdNogZ@%9 lz`0GbR?^'/or \)좏9ru ?Q드RShF.YMjj֙㩴&dYd_,4ĜH&5܊T=m`NnzZ(C VKφ$l3%Ek .TbTY 'XV'-s\4pk\% HkM^X4aWBZ9JDNF6sk >O_ u{mY;$z%/oyɺQ D$('lr)!~S&nYt{] h֭A!>hER# ˭hEܦ#scQsV65e2±]!T;0AV&4BhpN|E# ܸT 8{H :GР 'BAmE(6 x2zIjJRph, 1O.{p]$mŠR7_"ƀnx`E¿ C!k$ 4]Hje#5=Xxd˂!@8H8-dW h  4gb"9؁qgI\y7o9ӎ"]{v֋N~>-"|QnԲCܱݳAur oo"bP Rn Yr$;”ֹnfڕk,GNfS! MEs+X/`v^jMwWP+ tHNA_?Y젳$9*=|e 3go|ˊ"|iNsp=4MZVw{DuG:FrR( S/-UOK^ d6_5ӝRJI'H_cm1pTS%/yy(C P-"65ɾ2`V9k_p%I0eH`5nXp*ۉhuɪSP׽l"v W>OC0ۭ!g)A$_4nOs*aY p_BXZfX$Pu9E7*WZg]m odFd>)& QF9.{;8ϲһø>$LaB5j D* pl 1\c`0DW E!攄b,iqsU$v0& nM !߱K>%0"@ԂM^_x4ˋx쉅txGg (ToK|~#~zZϥĠ/IDs ]AA.QMΖ3-5ͮ{/,JEXf!'J ^^ [;f:4ẅ`DjM @B2OyFml-ѺUoc $/@װh4<'~`^Y,ɚ.މ 7:/ ; ]s^"A,q0~g÷&lm[ +0DⲍcBR φND򒗯La t{""BКӘO1 ,ElN"L ?"nQUmHݬriإGVe\" NK̢*Ymqs. B`f!ll!6V?AK"ڻb9y \% "YUơIڳZmHbϭwX!FOT;wbA}e*zߍ7S]\,dd&ۢOj`|z4_bc%ᮢمt&u#@/kyŕӵ[BЧߒj BF)Z2nݳZQo vϱvDl1) 3 X qRH \bO/`dRfsK‚YUskEQb2ž>|T(n} ,~\I}L sK^uO,Pμ؂=ʞӯIXNJoo7S9qkVDvZK@{4eZ7>R\^tc&[#~׈xj֚X24O)VP^򒗯@Al4)F&b'xw1On8,fٳ Ra NL/nK|Y_q{"d\x]ۭK I *x %`oEK@;svHUb00kp~mvQY?tON`c&XLE` m"P168UBf2q9[ny64XNScI"?i! Wnp X?A`n]fX\@!^bG'!&5;E*suDL֪pc(G'kg^?BK@\kBk }TȨEx(|h_[z9$/lGJAH;EwyK^?V2 z#0l7 + \*_YVv,Wͦ1D$n0xܕ|N7$3<`S"%]e}?J QvOk4m> n&lQ=!m#H,ԏ Tu7DD~z'Ձ0O(OD,>6 zxT TG&DؼY.Ryvx^CP'@}]fb[+Bu"d?ALpkpU@ Dxf"7}ihb*d`}D1#\,-7vu.v'ts|w7WWE|4b1 (msN#eo[I'ϾGU9kBwbDZ,YšCć ah}Bp)Yױg}Z@sW37A?gdڡjCH+m8Y ))UxB/I69e!ztu9 f׊G294ch7? *d!(ްc_ Pl& \"DNjZlt(^ʏJ#Z˵zfW-'UpaڲkxDYkR0\Pr |EJ;t:o(l4ʷ&Q>1"  Za$+fL|bM Hs~=IzNz<҃ځ$l%rhC%6bU CG9bl(K %d"`aL) u ~hqB ,_E#k ^! Wn $l鋘 DkIJGMϏf9jtn>`!WHEhٯ60{Z}<4Cd^-$= :$~Z HTp7B zVbK0û?  qdž%HwO>?ON~@:W\TgeI`ɚ44|{v=F"/e_ ~IU;haz^1O>. $,kK('Hyzdì;e>HA+Џ_h ^r؊f8^05~&, N!\@Uԑ!\~%z h픴D yEJ1x\dR@S?k9K+37 E!\+[k %V,a:@$^븻q|.)د$/L1 c:t2>(/+Q $wrIrF8ɔ/}|WWW>xmbX{ ԸUͰkMzƙ s@t/"zXK` a[F'Z|-RdTmB`i_"d~(:`xXH:NXKP2GgKV hei1? 5}}@Vgpb>ʐis `Ol6`26Gȴ.aTX1>N~'{` fDWc&]y%cMF,˟lyAK&KiyU g t xx}ugi.4C29r_lŃ-!2RD cf*y5}!0W;0.M=ٍPsz ,fh'@xNG"NO^&{X/Y.bORLp2(qegKJte]nT:X DRå\N)9 @D|%HA z͛+gACnT1A9>@FՃ ]0V횃DS±]$Cef̈́!9؂nvu !HH a«ֻoC2{2CgjB%B W }`/2~y[Y(On^D a }glN}`G]B<@1˨ljaþԩ>qPT- c54N0ff+}>lPo0/I0rJCoqĒ=uUFW;'vY-3VZҥߘ֢S6՘yYR.~Kvg1MⰑ !Ya1ZvX;@Fг^.cܚ'%/y\ pp]( ]A@pnF«USkGDwuZ{H\Vq |Lu]<=Ǐ{eOD}9 $@T=鑦%<`@OF@upw"EbS:jBYmG tՌnc),i/<p;#@~9VVO] ֻ&R\9`eL՛yL1/yWc {kX%Cuc1e9l`&C1!S taf/$I]뵨QTf=}vFb'M $ޮ\:Dm=C׮Zݻq#jgMpDOf)ZV6d:X~jw>.iQhpYdWvlұ-f"wSABcsa?q/C8Bem{ !kCLB?gbЊ y,͂6tڼ: C[o]VA x1ӧVX[`k'nt Uǧu\VunɎEƻ q6{'boaocp\~z )11VdL}xq*U[!m+#t=М.W+G9&j+=lת3m *Om ;{-pp$p!ݙ6KMD-htvO-N]HSKs0? :1;6YiYO s -fռ.A9N}pR\E+Vz\Y$$jBݒI@~#v)%/_2&vn"JB. 㑎aL)9`Q!4 1>ghEJ@v4$`E "ߊ@~IvilVU_QD&5*O2"@!"r´hb<`$_Z4$HttqDtw{d}T =+@&@ʜN]2`Q!bE08 4Uށ@ AԠTSk<,nth< 0̮Gwo 7RHZ(]uZv+a ļa>zVk{5Gg"xj ElL]QjEQ3644lzbvu! ]7w$!`J)xzO@g\~z3sXƚܿ9D~EQcGȬ0u(\I?=gk=N8'7LL`+ y'N){gb 6rJ著MgM,{7[+}@ ,v[%d}ciQw6 D]l_jRک 6Y8cͲEjPɁH^+ 6iW).sΖ1'M$,ǫ7ḃ8ty\,,BX,TKbL"8F@c1 k 4]\ Xgjs1>g]r\q", +h!b7'=FY\S=/{LTJtnTy]=F9WD-6 竈ڍvIAƭ 1L՘ad@LsG}?isC7 LU6RS>۾0*^,E'1^j9ATE})Mo0! ov:EA5v_IfquBK^~B*\/h~ `gts2|gHP` :#y Թms/g4D6tp^v݆ |# ^tMs>O|MM+gC%>g󒗼|e?{͸wyqix4=yO. |t)lY!KB0qR@nTuO? 8ehգ'ᔸ@3B>Dׇv~o h @r1[ @Pyq߄v R5%`4ݎF';LrPպ[- +5%>c ~d h-{ ')/>Z-n-"N ŃQv &M|QLW/ƓAϿc{J9 q٨qt kW|x*>`00U1&Vθp2S?YO}Z׫upañ#CI\Š$,)&؝@7_g~*0LVl6}Űټ-e/+^~w7E3 {{I-qN1W:\ 5UJihAkKu8D/4 ^h5u*:K@%I<8=/`)H*11W1ux ,q`0 ]ԣ9ֱDN6d>Zq]jTh wS||Oz{4vɵ R+TBSڌVKB`+(LُH׋,kGSe#8ɪAF&Ρ& sh!?hq[Mh`O|M٥pEu݈yϻޭ|c=P=Aij\/dC *[; >% 6墄Ӣu]yntXB4 #SjQнL w<;],%x@@0K#cB׵^ϛx,EVrLOϼ8#d΂FFMIZ@ S~ҳ& ]u1%ui÷Ɛw0Ҧk_Wc&xr69&qX"6~H^ޮr=#-sͪ^;/Zss>_M4$=ЎvXhahWά4OviG1&@ѧ]TkȞǚ`հp[B;vK# /Q"NR0 gaŐ!f%\>fm#< [1|^Lu;V-|T>SրhzI#h /n^kL[uϧ :^%"yW GH$8Z}jKbDP vtϝ c` JûbC`EmtХ8/do6p]/>rXTp'"jeuT$[LC8&m/aҧ4=}I4;j@&"~%Ts@¤ \9,E ĚLYu@RE 1iחvy^P*JGVGY%Ʌc$R#s?\9D_k'@M ma5QmU]7Bc6pj]ĸST`@hng|.n_g}MoZ޳cf:w=1B"9陼MN(.6ќwjle=B`9̜$K㊼9BlYL d۩ Ŏk0YYEh3 *g@v)1 Fz(XC5,?Z&kapӊ<)A Uqv"q4[ijmq-ʿZJ܏:IHS5[P9ۖ֓~slSl8EKXdIJsqLyK^Bd?OFFD&1[4 d`gz2Etx,]CCȠuIIJ–_//V`bu@2Rt ᘘ~} YA}/~wݽpɢM2 ,Gq+7XFƸI"K(c׫hlOR j~^ *3&әH{tAJ`I[wrvf\`l'P~m q^b.1XTJU}/RVB!1,jhEu]3#SU>c.q7]0Lnt[zm|wia=gAJ-_{*K͘E`b4Ɔk 沮h0K{T')ע.0]k=@59SZ7F! !rz}X.̱PvqD_ X[ds iN5p?Ԝeޢcs@K;b(Xa[Oo#wǦv-')9NcNRnLu=LTG:r $ V ޖJ:r E//yWMA%V,bF;9`/ n+Ӹ8^cBa`XH NXDZ`;uҾFG7HD-Xw#sV@X?2EŪ-$%Tob4["XsAz!y`D[u=Z"?P L\f2$H}%o$lT8Cpom j;Q`m"%0}]Qv,=Ӄp0cIkq;,vݮ3mq!4*0<8YÎXVNp CK;6.d'vL^cJΩ߻z<ԝьGZ6_d8~kWw6F(1!2`)/ogyy?q }c1m5>K!U>XǾ(+U+cVMk )12?-iؐ~ؒ[8 2[Ss {)-4_ډ`Eo>SI íN@Z ΂ X&ۍQEwkm+Xz#%1Q@9{lU?< UYgb&m_g+AcCF,6Qshㆶ Q;]in隣Ը(b,@F\ cƆ<ōtɸ ;]d,4Xj1dûG7x&֊^KI%ne t}eR",41O)7kpY41_EKty\ġ,-p>6Tk(9.w-}іeԏA :򸐼r%E9sLSjh^.ă>^'BHr;or_.ՃŎ'0bp>V{ $ CŽ.Q:nˇqQJT@l 9b:^g~>:en0}rOѸ0} (J@g|@5GGj7PoƖk fT-BaN\NwNۢw_o~Og%00]#,\nݾg?sb2ׯ>7^TX1 LZ-:đdh !K%;"Hi@ څ"|Iqd [o9<,֡@{k 5J*%1Vj4Z~^jy+:u!K/.ž@{cFnt19 CNb1-܆]l C$YYCQ> NX/v[T$p/58=<5UOzSӮDIr%x\ FkRv?򒗼yc hŘٟ-VN֮1,q?ūob;Π)A#=#عl$Zݳv܎OlGF(9`- 3 rf]l@}C%C\Ua"ߕ BIzY&sؕk뻩$ {$ >DYRף,oCB[bVAaܰZm8 :x_I~w=RRU3 a@0#HP|jcysDWR`,cѣAhLj~\`&>U@ -= ѐYsF3:)R7 p>අ˵l1~ͯ$|+n5'.i'O_B' O zCZ4Z/,{m#P7SX();4Eu+t>k(u9΃vj%]/^ X`Xs+14 47S-ɚߙl&6\{n? ~%JHg^qhƼ>b;A ݛ4}/boqK^,:Gxy"kպX_ٌntt ) 5!D`w]o&°s(eT$X9P%EVYC|XZ "A@F &W DzH9FPsgJ}aDt&v b5궮;ǝL2ԝl!a*Y,SZ_UiB[òӸ  qki,q'p#xc,_o##uUԳԫL踎s%_cXK3dJj+X(Sp‚D>&[}0g^a%٩whрU'n-\iMncX8E4.ljȻ"v$Nq4MyOoIfy kkek EI\P,`^;B? rt}:O}eVsdZ#y/SLd3c;=h7d-Lg8\l%%F(ӱπAk<łNRu0c"@ߒHVMlp,Nb7P0=unuZ;B~1fĎdU܂Pm*?OSyK^`3q An'61lX^44Z_ x2>zx\!j9ħe 6f쏱5G7%}ǚ%B2q X"^3 ߃]ڸ"ɟΗHٶ !e 趛C_[mP l8ZnHmW8J8Lgq\s|R[HG6Xr([MpTrZm_"Tzvv‚I3UJ)] `p"nh:WIZ?i3UX84L?6$P@G1< + LŚa}pHTd Xb.gTlj;<|:715 ~ Mm_P&~&nnyļ|ʀF4v2ŁF0};J4Dt< 0FέV[m_` ?tLO}2PN lkb ԓŅuˠYQjLb5<?H .,K|qx<ښ1_ QJRW&#k6N]OxV~R9I+ABeW39&f;'P2L%ChSٝ Xhm<7 Z"r2}@STNf+ ͬj_daBK`? XR h:P$gZyŹГ*;9%`N&6b(UP՘%(>;C@~RhS 0\GP\ibXy|`kcI p^a.Vnifv:*"@Tx1n^7Śk##CzQm ujҮ7ݗ 4~Un1euƎac  M L6řzzo  k<|7y˩&N ZGc)H``-*_hiY?=._KV^3]rEҼ2US.z@"ʶX,fe2X6"E*b 1,j!<=zPDx|u:~C$>Y fS%w^x- ^qNP"-.RV\IVr|!Y!So򒗼|e 1 |QUJ*V$`4N'55P6WCIXqYS[A݁ ʦ0[/v5ta && T^%  U8b\ vMSD[)ujh Nϴi8z@ǡшi(TɏljxbIO(s4 GG_ِ\/ ;c$N\6.&z>q?N3o(vZu[@,FdvԚ  .k뙘 Zc`}O1Z3uQ݀ ,D/_q|:{\ sCJ_$G"{VOb^ #Rc'Z)lK; Va>s`x^Kjn>]5ߢa%v($`Q%~$lg6j}"^$~β\<]G HL';u&-Mh>A(#>8!JGCGɁH^.RBion!jD:_(//\IyUܚر؟"fG&P (KW@&›W$'- BC)L@I}DcNcv $0#4#Rb$`j|(J@cP$!~FnvE:`pU2BֳX: q0zk*qQ73aVui`@!qlSZ}LV9lLlGUilZ^}8SosNjjFE0{Ũr>дNL[Ď%[X'&3?*e:,@b/ +1_kv`WQԵ< P'8jQ(I8A^`Tۀpq{~@j,Y^b#:u5^甄VX\ F.Tme8z?KѦ;*!l*2vo1cM4oߒBNU@af/N2x3%/_2գ- wX$fKF\,,cnQ2ߊˋ~t; !D~pdNDZJPZ | <*뒐NtY3D@©  HggbF ܂ wAxHZƀk=(2?2WgXD[2ڢ[/oK]Br p hv0 /4%mH0w ܰa-@ jC;/ P@r,/r"_7sbu;1<m1sܺt?t+j ?blI4Q0l&XJն^Lr>Œ8b?Im1-88+K1HpM$u 1<<՛~wqqv~?v $߇s l4lK^/K)r;c/av]%љ ׀@}-K:JyP]uI0ǸIhJ)z{{#ͺ WWCi*㸪~^M2R\  S?h[nN'Yd'ćsUmiT򒗼|% <fzxLa]-y!F68L{eJmYXFCnH(#/>|}!b+4ӽ5'- nSuu}K 7r#❂ogvkuV},"X-Ku׋10c]h?YU7vG"֤̥ L Q=#Cg1c"ǒDSꄑϱpHJh"s=QyougǢ Yn1h7LȱD( [@J^̅ج - hLu -;+7a9i,4ܳKԵ@A@:7 ﱤIi nT |t@"Uf hթ d4zؼ0{ޠӎV֌Gg'XgI#fyK^e)%Yζ( {7płN]a*NCBu5\h6ljcP&vHڍ"=aRXqj6tTkx.>v7|EIJ7;1hS'z+["8&] @0-$à׶t'q>DpD`ǛCL%څgϙ$ٞJo8o}y7keK1Sg؍c$ښ0BEr%/ؼR'Ϡ@ ,^.,;H5(TZYXsX!HtA'_x1Lc c"1,X@P$}H3MV=j2O;P~:z0@ )À# <%/yW\E۵Q0ր}~n&Xz%*B ݥsu#lvR&w'(Mkm8"'Q~ Q-B]Vx~,ŝhG3&X7Lmf [v.A. ,X"&eݏT,P C:>qQBuӞE՗T~@x(,|hTC܈=MXp{C[G;Ugbs?_81!MR, GhI`bxdaG&&^Sng`ܵ~L\ 8؄a*, q}= huEp/禮)M-ն}cǻrP-%/yoԊ#'~i")ހ[.` !YynYдf&>DrVh$ 1-V,Y!!/F_i`!FCNOAߛlix`uaϠ_%/_r}wt^ F!j'$>{swj-jԈ:q&]r}'.@Etx-PEWxC֧'V0!dlZA&|ı j锃hR *?!U@!VdWFb9ćPa@G$a̼ t,)RWXN͉OdYES|D& R |8d`>ɤ)no{'&$(+^5]I /Jl,Q&sV.A#^p!f#VZk-1F?ظYG$hWlrt%Bd%AVaDlr>UEX 1lʴ?k - f5:An-mxvv0T.ZF!ģ\@#"OZ.fgђ hT7葄v UK_,.hns}`(bVYpN\˙@ӳɢ 14k`&вQ*b;J[Q{tE/?1,ѳЮ4(̌NF>vtOJ|Kj{YƖ@dVQn=_o7~ETY ߏfh:-Fcc߅& ͝q^򒗼|eb(=;`Ypkul)Azs}yB݄ YR]NRU$ȋIzHXVi(YWy?*Fsl^&KRoLvMH\#aj.IMBL`␘L܊QB SJn?_[^_WֳxI?Z͆}Hl7prb =G p@|:h8EݮɠiIG?_XW-xwQamED O+H+S_p$p8BzS ںŒp*zJ}MQX @_UgBLbQE]ϳO5"-D4M8EPLun2[cl1P@sq-Z%:G^( L5LX"uImzG@:ƗL GcVK Ż^;v\~ ]iK|0b2AGo'V|o׾xq葃 ̍1E=cGs:o1kma?V%/_D!Zh5\ ~颛~ͦY[9q#NݖT'l i-.*J {r CO\mǺ߸O[E:x,Pԭk< 3xSsP/R?/lRPɁH^򒗈?gwv!H3T(\ J% "{ym x*^T`-f'l )7J"f G:(`vHp^(ְHF_ <[!mDxOnj)E/Ma07XWp"=.Q%%܊tMcq0zMh( XHgiƀ"Gk>ՆWꮙZYg`܏\##R@fwk8h:>` }PzƢ6~˻2Kc.@{X}vu]}"0XΊ".?O8Gߏ?gUgX 5HpzG.`(w??r^򒗼|YF#\#UQi4j"`A2-BWyltPq ~h7.o|(>@,> t~ 7d `B^;`d1P [lUc_tnf(ٜ+) 5q|ܟz}g;%%`!rD򒗼D| LB+qXa(ţ`êhI~Ax%Z#a^"%CJ!mI}"#aZzm]6yMBNo-THψf}~Ob$b^1"mU;?]a rsى%c`' xԋdalU3=WQĖ q#8'13,MxMH?rbQH46%pPOFq Ɔ g _mib,f"|g+9ZXzgqi<xOߋ{o[_yͻ1ΟD9H^)Ng3R2y';Fsxux1̃D%/y˯ QOi5-V9c.Yi`G`9FY_}o赈MDӏjY>V~}( @ .`vn ] 9yWcيo蹠ϗIi }>}@]E9Ou@$/yɋ7>4քnyfϻ(!!1O~onnLEy"?I{ nM|7[$"o--`BU3?)W"'(v/z|gmbi#[@!^Kz Ƶkz6 ɱ;$BTy@@QT D~)Bt+ec`Zl 8`t̅@w61Zo{ k4.ɟጸ1'.U&h薪wF׏ydA<~n|'ǻ|ϟ>rZ@Ǐ~i\]t<~v2F:]'0'̑y14V1c@cQ_y󒗼Yq'~͉LtC9\;;"?o >[WοGahy%u<|BJ'\Q jk> k: cP z\. @3=8!E0n^(xl,C.ou$%/Tj"]p$>3xvViVxavY%GѠR#ځ8 /)UE h7 BETD`+ "Y b%:#t'TjVv_6w6+G@y=A*c!GS ,CX4ɮLA_Ua9T 7i934B?um^E^R JTdYF #纏΀QO'z3GR,M%Q7"t'/wߏg_DQtq4~O_ݵ&n}gj,M]0E]۬7/TYwJ~sۘ9ƮX' ٻ x5\/i!/yK^~m$!_QޓؽMN&ٯ &s_K$\!t>5gS*(h+"xhCS,[Kwm3NNs,%eg_?٫ACCbbGmAkF ࠿<}[^/<{7ၠHlKL h4֒XS~,F61#h8k4"'P =@ !hѢ@O.ĩ]5(s?VLM/ ^ԏKn^0kD3]P²J :6ZI͉ՁngU瀮o\L JZ3_;M_[.\4F< ||y'u=5h<~[ ~dgWƥ1;>@􉾏t\DgpgţǗɳx!;/_ē'XZBv23-g|}u__}̦sb9x>v>g#,[44ebQJWd*aˎ8.qEzaA|_8Z3]]cx{zD,5.xq90#ynG۸hkq>a1<I0~Z\2mmc@O!LՌ1vC#%($i[%/y˯+,jI9 Ҍ[P@aх7qBh@H_Bʡw'rNGݨZ9o(Lx"AoPQ&c;-ݟThx.7x,>]norOwKFi:o}V=#A~?/yWxB0zOE5R/ᓴDdLfWOHVv4"Y+yi, F)-a1)CȘ ugrKa. 2#ePϗ"nNjmZ>` rGtیX@ݎD%WUU]7ÀD1"㵎.&s@7!f;aF {N+1)অ Wk|hVUЧjc_U==:اcە:SoGi7wߋowޏ}.8/[r{?ۻϦloDFWU›9[h0niw|!06"Fek ̧x]qo]*f] z?0V5[ D[pQ3Az'+hqXD;5hK|uC/_?+ip<_j jwL'?<^_Hpޘb!@[&i(šj3q[Z<mB*B:2U!L96~D|AGN칄Yv|,;b|sّ=V Aٳþ""פR13]߮ew-@zA1nFvʐL ]s<UW >;OTS[qSO jyfZz t\_DB};Ľ#d([1c8Y{%͞F0&;MxwC@}otLY#UqE4Ǐ.5Č5)X1}Z 95 aBӗT KJAGzfŒ]YFRW3/yK^~efB/3;ܓ‹0׎G#qA92F;6DLgV-Uڷ>~ +) PAN"SԬ^Gؘs\Uǁ7j$.g+t 7?SQ, <2@$/ybKވw?|عUNtt,_9u.;"UPY.츞bk4G И!hH)hYLDUS@g{q"B2}c0E7:Ya5 K.$#ϝqL@g.) L 7o->1`ȣP2 -}t|^cJj] ac@D]@1ò&@_,={|}7o7q{އqE42Xi3Jbb_ ce^mh+_֭ eL9\vt_0~' `PML .zӻ%k u(i|&iٿ7q7wzoPq/V+^?/yK^~U| @oRn*a['%mdD^6:|9fD`w,u-N㡙: &Ztt ,)p#!7FIr8.X;W})V05s=Ms|CF`a+ Y:,@NB5s /xﱈ&ֲݧpLΰv+jtYkd; 7wJDK.;U Y)1ZU KߝbK4c.|>8bT[,E%#?}3!g kEEȷ`olfڲ 3չSF,D FwZhJ&6v]>kհ7s.H񵟬m2#cer# s `~a|ǟ|o+?GQ5ToŃ>_,s/`c2ӹ;ֻD'M 7젏xYӦ 3,b&q?h4K8噸}?M1Xm4N d%i'{st< ؾx~/fH0"vR?󒗼WY .iĨ!̋aI&bPth5(YX*>풥sncU?J< ۪ 00] D)g+6A(}VgV+ Eu<0CLZ9P`}й B:r-lZC ekP]%/y'a,hhgaV~<}v.K,./?׸VOY3`DK٬2/yK^~u\%/zC\H;v4KpUNb>;5< :w擳(ۈ{ &^LJ 3O" B}gc帾8&SAE))`>_d,~v3?\ Lf'f\.(FzT1'ΊE gb3ж`k 0\`Xx`cvڮkӗ1)O>v3oZp!@* :h*РzD +aIQ=  }6, 5`pex_eޯvw7=q:p OaNܠz0@$/yPTC!F!~hgՃg6w{$,X; ٻA\OS?B%']Zȑ&$=vuӦ}|2M]]&a|jip.[ΐϮF <L0aw܏6ًÌCLc:VzudZaM`T0>1t%m1K/]N׶ ׋~# t@iՓ4 `V|ı ، YQG:Ǚ#+ߚR/)z5t,!/yK^~r܊^gHn)+ !z0'VZ< pCGr-@zaV ](nF˟ ~=!"]oa x CdD潼m1]ڨN `$ky*Jx#dv?ui,rH^򒗿Rra‹KxE BZhG݊fAߙFgVB4_Xg A. ,EH?UIo6 `50Y SU]EԮN#uH9L@p,:~26.xD<~MO`GHӋJgetg_F 'O>o~w,bq$^DY,,<>{y^$,Zb\mc &%R^*714:$^.b$Hƀ2juy0$F(Ӫ{x˕9+>Q!Tt͘aTs]ĭK!PH|016?2RKS*|w6`O05gl^0=@;wU՗@M^򒗼M%d! ]]nJdS%RDY^lA~$Y6`zӋ  0 @ AdMC"ٱ:Tu{O9gXb M5g5c|cNdC/V53yX󨬢A2z۝= $I$n'ޕyn+ˉ 2 0 }X[.FwVvj :l*GL:l iA7W0?mNh !$Z 7P+)ABgAƐJʜf9W^ט0Ep 7R6a?_`PKK Bܰh|D9Ɩ5戻I0Ӌ+miN[yZ{+_mRo ŁE^Yv^(JR`dFPEfCR iEuZ>,Qگ}{}};(~S Ks*){%F>׭>~+ޏ8O4euXC|ƹ%>e Eߝ95Che ͗[V<l/$n%t{UO`7ƙv[Zr%f,#QQ!E ?wҕl-ƞ5q\uOEp9@?ub` 3ppoU45/273!*م@?a@^ܲ(m6XAs;< @˔ƃP7;Q6)Z$|[pz)#\y$(vh|SZ8=/& :K!7iR_]k{Wk?o򏴇6;7_GU wY;>>twvwkn{z!RVLc#Rة4O)Q1mGmvxpT[.4SGeZ$Ԥ_}ک5!A!\ff "tRnSO癨r"P=pru(}}Uu;D2Cg&>K(BAhUDR^Jg͠첁IY0"`k\0Y %-Zb8 t˴SJJE:DPB +2]lBx%Dop'E;&gZ23;SGundN(oEdFa053~䵇AvZ,l1opeR)CwS牰@"\ݯl}L>=baks6Md5(-R|ؖUቲ\^s}ډP I{~$81eݿ_Wo޿߶ncN[lAaSQqAg`o꿾;x=vc_VoZPo7+B a}a8=Xnokl񋶹ڝ%}a!ډ*,cV?#T4mf# CxAJXe>qj,c45i0q3{w!ũ;&;K\iI:0}Vo?WiwO$- z' 1OߗE-ep$:x1879B6 0 p{q~Jf{aQi g''}zqn Q b{ͥu ҪSHWvڈpBs_΀ A2Xҙ'mଘ`Z1BH❜_&E[h+kl_Wڛ_b{WugA-5ADeYiwvۋ;i{{Ex stDⷖi׺|oNړ͹' v!ase>qۉ7YnOڐӷLփX~qr#!%t-!|mӋxOXR>n=e-:<(#H:"2'^-L<$'?"v 1Yt?.O5bsm,bę0Vvj}VM1v,{~Яb,ֶA֟Z\Prz{-ՂP!0&|"HYm#R7cUmA#(9-XLNʹ6z^g,BlS3v{I5S.kM6ĶuJvǯn`Sy&xG$d"PNp"6*y"n4&BP)'T.(?~Rpbɵ#!>"cOOVގRG*x/&_xp+\˓5ye]HqL:8偋gk6 yRY|~!pÖrNr_=lG^mIdUYKP&:KNY=g'ZgN/qUy((]]Y.&slӵ 6m̷řҖWVB1u3v Bcҵ=-BY{ctdup!f%kOk.~ǿ־my~m~i=s%>|޾ۯ7گlڻڇOݽw{wVno|}i 勳hk]^+}mb!9Wfk+Dz2va]pR4==߬s!,Dp)0'}1U#LXnRo\g DP%I0T]MCŗiu4:L 2c_ky]$?kE9WCjR A$VA+P:^.C3iK}JҼ@)\zv{4![˳m5Xl2 0 +v% u:a|!x2n!N|CQW, bƠ¿>,ŪW R8,0 o8;}\X9h R ԓ^:BevsB Ozc{.kc#0[]*)(|@Jɖv*4#׬QQo޷-;;+h sAsm}uݽblϞ=oaA+s2Əˇ;Zy l0r=&]L*rvO.Oδն=|ؾc_i?/}kնn#(De.$)%8vAK#P|n# \ɔsvkn&;?3ck_a Y<֖꜔N< -^HdEp0\ݘ1„gEݲǙ ^_E(Cx i+!R9L-6N^郳\7ktOY^ј*´@7ֶ 0Z&L!ͳԅH*?d㗶8=}ӉoA~uv2?f=}&_3*".^Z@ou"ڤkb:$-a]!CXm휤UX0&ߌ5݅7%S,M٩FaFB}*E`Ef>8dt܍X!0fD2|L:U:hE:8P㲪 7Zd( 'U7ܲ?@i:RȤx[DRƪ\uʪGŃʳV'$? n4Ti_.ht~Rwϥ]GaFo,Mt laHzucy7]GOy 2*u&3̅䎃s(!v1>fVfۼ/ɟhfGzʗ^kw֗l3' ckH 図vs)*a0G!ܵ|;0pqqb:;+I#H+l1֒^׺C A޸KY[1.'VĶ睞)߉V,2I QàRW9rJ#vx|RBbn@!&C GGUmNqfTbs7^I'2\nM_;QT4sLlFK7x ̬ {9ą9%O!_G:=>KV<D,F`~M=+|J6շ.Jń$_W>7田DGGa = +-=3kEض==: >X(! eCY:` e-_qP\yu3^U|'_wY7wyzCM",,:{!GSw.EYzL 7֕rD$$Z wK^{-%$y!JLj+Gǧ$LVwWC1bpkJ;I9@*ٵVXFl|Vn=Lٹv/wqw˝Ź>_ՂP4r'NY"x( e =WiSY33^uBfBݍM1qOV8%/}5Yn + m}qop~O6 M[XxE3]Di{oV!.\T0'.0{)kVT4BυY,{iS-i+m ˽Fy_v!`ܤ^(KJ-­ 4 {Eʸ̅"AQa梬/0֬sӅ+xؙ!'%4 C,}ǾΎuey֖boI[ۖ'ÇA6𰡋8R(yWY7i]7sbn?^ a(KEʄJa7n Po,zy~](z>~ۢ6g[~o~6%<ߧ2 >|ָAJ_ڟ)Y+BO5LEj{F7L|6>Ҧhd{/GޞZfY0gwݾoym?}t9"H> p;Ugn_R.7yFXYYtFgZ1ľPVҒYgneykɉ"` |tMA prK Yyo#BJ ?+"0.,f?k/ȫX]Zh6W*lG;b1/򞑄i9qbp؟C֘T)HڈVfG煀A:6 H֗۫7ӆږMۘiS yPD16W,.׶*(( ^"![v SWBv:9>N4k#͕‚‹nafh |@p++NnB;)>'o Q$IGU SNwꌾ!mޣyXT- yQG/;Y_A U .oXJ8qEj VbFaFo ?c?~|K_~_z R0^hds1sgH3Mo+n%N!ܮbÐVʂpawcJ.a\),#/M,ӤICD݉bxX<x^|"h;q{~{sؙۤW=kBY9y@[ĕG!`H8 }qa~yO̴ͭ&;G]&Mz֖^ "dDĹ$}pr7s0m)9Ut'mk:Õi)aZz[g= |򘮝;@!F68<>-051cBA(H<eb( x{HkYEt{E-GUE0(tĜSP(^=dU2 Bɝp}(?0(.)ps\Kwp,ym #E5w~:2zJH,*f$ 8˥,u,p5d7AwYl", o^Oz?mr,A?y&{E[r# YfKY\|+uHQ^O|qgF?'W?O} Z(2u>>rTCB;d|zô_ #\\XjӳiKjAps*K'f#hh liqe %d͖O䲆`rsv;$3KұDH[{prX=#lEHY(˓mi?І\\g3Kz)K(9x"ܤO=~P80f27+ĸ ݗ"UЊϜ%`2*$*7%i?FgGzC_yT'l܏ZjLms*Ɩ?ז rSP@JabZ^Z(Ze!? uT# m8Apv: :< :0<"4Wiwn[->܍ ;nE "x--R/>Ҧb2saD2;wۗi7mo>['#49[(fb֐퉔73q.EجG}Y;<*bHpZC@PM+;\բDsGpp1kU eWJ1#ꥎϔd"EH,^L`9t,|96N.E KuoVߜ{ki0l9CJc9Ǥ3] c*fvr7"t Un_)v4&4c 2OF_Y%TpfΛ}1$a]o>x3Y\Wg{QQ-(n'{C ZzON jC%wpI"ԩ[W`gke(܃u]ջ0H^?w% ^=y˛@։$rYW >Rtᦒ%A:h'A ~*uwڼ+_E6;xUֵZ#AdFGKW_ٌ@/~Gڿ/h/WB]olݺU5au$|LY2L+* BH+G B #7m_ז i,~h*m2;H@!:4SvamzqMy$;v$)X!B܋/Om5l63٭@ܢԁ:ke#RҲ,/S7c,Fk~avEh9E} ߌ_YZ&JgLV8 n.:H\2C!eDpENh /CkygMU?ȳ).ZY_'zLPCa_,hM/\/vA[KԄ{1jY Y&GaFixr{J_F惶<,1v~Za. B Y2xÈrZ[ dz8 ΃O7_u`:#gua$v?WejZ BFt%EY$!OА)øq $l&g@t߾ ;'r:]z@x,),f)zk$eޖl0ib~Z?ܝ|=ݶ>2}G¨-8G U\.;Q=O\FZC27}Kח`62e߿x|}&)x.61&]%x6 0f#MmOlT8}OƅmjnM \9ftr%egu[^G8<<,fz֘pRb̑:$–|چ7u\My ,h'\ CR ]|1ԧO?#ct]Wss<կĭryb"Q `>MS%K^9Nn=m{>,MܷFa0 `9(xvOO Jә'+2}CgĕL ՕE% /Rz$ ]a 4 <#ٺ˳R:uzkxFHw3#~w\u鮸y!ܮ eR[/ꬨy}}ZB(( O6j1Oq/?i?G_|پxk0gܞXBL-_=?/,$  O:1Q,%FZ3]C sM-Z! +9nIs4ԎYi㓓i9fRm_H6 C "T>SՇuMf t[[n _902>T:b1rXYH%^=m OY Z//:c~0a+"wWi7brSs1'W8v fnv&!,xWBו |Gn1UnSMϹuθTS R S5/_Cgع+N262N,%S}>(t<0@#%qP G7.Y}4`!k|B ~h5"!ElTdC)3U=B1uzZ+w:VN!W$ϔNJ#K!.d=%ۚ^ٽ=?Qq[Oꩾ;tHv[hJ) 2 Exоڝ/$ А`fNN,}D!M~r0 @q4q۵TY(rQ<a Bd]CrYݓ0\P;eaC Zf(2bQ R TJPk,fU]:JP}|#k.B9mno,Nc!۾6 Snm"rقTũ,9'8Bެ=ӓv}ʺP\}leu5v;9NG'I{N{|w-/ϷzKuz{g#W{X: Wf"asiу%\ͷy?fܦ6ח_ʋ?)F6*q60 ,t2;LAgZ,A.bLV\ڜ7W}W2%h~sΣvGG/0IyaLlkaF.\0 Й`%vpDy; lCxyiq\YG:(`-7? :wE )d m})BnHp >?㱡@>*ڳih US G6Yi-3{%#}tH&}uya|qO/Xev< 0 S<Gx^^^^^ݜo_}N?Ƹ--ݵ \T@>pCByvs]gH`fcEK:ȣ\ N*FFA6,*dڄٯz?zdkV|.^#L̶ãbK.qy*)!a>L햝_\hi AU!PAB;G'tSc7JcH-;u|֙`biehڂ(KR;vG/D(JRfܝVInQG ڝ rN3>S"P҆ Z[M7jò>,+ mk}=E`I^ʼO^R7JPҼyb>s͍MuxfVK([j+EPYnSyYHͶy//t+}G0 :<2c-%n̸G~d!³s).ua#e߂k7Օrg{ϵs>wѸْY I3,S^VJB`fkV XS T{)gxo8=&b? tFnΏA_6CuJ* )Wi' &Rv] !`6骼[!4a#09!R\ 7-` -p+\$9$|rSj 8 HO#:꧿^I9;\m|~IQ +MnS=!Ć%WVV̪(-_؞l.GXjOr=Axcm-؎R!$[a@ P.Zׂd7HPJ߸Ą0Вoy]v ̰4~[Q|1Ŵ˝|שڣe0>0OT},;Yɵu'oGLp1Kh*Fnǁ~ۻn7VyYEoϡvOR Շ>>τz:zbV~`Φ-篊9~;?C Ds89͘Z8/m{xo]ҹOp#>S;xj:- q{~6+N׮̣:o}s=J[H-rKyѽz'0b mY2c-i6r=w~Nt8hr14syZr"̤O539" Fzw!]̶jFZ[Js !wҏhV&[_q%ml1lX3br(# H{LMz PDPRM7,ޗ`Kyvd#` ȔwBM`t&|5Iyz1K/AP_tQ_25S,ߝPvu Fk[KSlp謒QT`P+˸f #}Zf -'૞s3JDW z堌ؔ=9@(1r7,4_yP)VJSMYa0ċݲ"-|`"f'LLirť K)?/BKHp_x5'o|>{8K{eQL=P+3S\9<B0=\ K˒]4.]w#V L V!c{<8)M$`0V7|yY~Ԧo₅AyYJD;mLE0Ny}!ס2,!>K{O|A׭Q 5z SWwXƗV :̕m iG*}L_˝]uIWOX3<0[jKೳ/%f,vlw#Ζ~}+~`sN7|S"D,ua L?cv~k=/ovO.'DpXZ\JZG/v11Vf[wa֕řQv}yZ'|+k Ma2ES2"t\e<x8+MYN=5ٺ{飴2;UŏCBX߱2 ]<;.}jci@08g.3jKQ I,@3J)~j[빴E}k~etK'y1 )p "jװ-I/d=['nC2T;]6FQuGB."1&vNo !{N.Wbx(σ+{~ApFº߁Ǥ*?,GGgsO<4 Tnķ~]-?ԭEimy mvZG8#ңX~(| T1%  0C\Ab (B3? E=^GN*`x1Хa13fXZB6sg$Y\t)fotL v+*78ah;Yz g@pc" t lYFh+UMG%$ɄBMxC~U|,Tum#@"KAvssG b:H/`s!'``HڍBVviok׭ٶF|m|]Y"jl{h=~|-r|{06~L.6ݞj~= L"󥶚3Os(hdAG.k+(f\L*qr:4E,yƮ#mbr"6:Q}:kz`ee,+[{ㇵ1gmAmOi.nrqWpAL̅0<0knkT "aAڽ`+߽=]#-[gˀWub tepm',ZL?<:tŒy&U&r\T\=mNu=-KxZ]F>X>Asz~F៼0vՙh\&ۙˋ-/,s%c`F&`^7\$@=C_eOڐڎ%2]nRr<\pħ@C;V~W`ͨoPśH#6G()kҮ!< ݖ[-Եs.N~w\H"8Ζ] "9 _oA#.`@0F!\BF [Pif\?I,n5P35]UiaI b17vˁ,NŽSS3QSCTC;Aaέ3|[N` .:5 d. )h'{yBo 'kKDaI1miQVbK WyqA~lƸ EG*W S Bv:b*m?ms;2iΦ/rAKZ-V#)B/.FXkﯷ7”/0ka| L9s;9Ɠnv.BFww+-SsJeG/b3FXRQY6w"Dvas6 X[NdN]@F(<>x,gns]̷cՍk+mmTv[Bݿھ/^ya{6\ !J3_^}$BG_7R~5m.B1~ֈt'^Kejn;@_(RA\uDY,;_uM=pF`N[du7G[p7uiC9r:>Q7uw^ߐ`>bYJ+(?)LqRx Gmj. 3 ,%:e liZ4[) ouH|uCvh @s_ 'q7kS ta#@<ߴrSPZ> +++OO~O(?`π>`S  ;Od0vqAjrC1Ҁ\K+f72WfbF5!/ AL2`|cya| [~fa^HY"Nk++R"#HPH a`ޗyAF?ٙcei1n]zѩ3!ByLaۯHo;;xE`H< ”3NX2YAGKVnWɟjħq;<0w7ԇ198.doA>ubՕF{a1BT+܌ڙk+a 6flŻspRq~{W߇Cpĉv"-suy-^G3* ΗZDx}v2´9F`ne|Xx6V#mnN+K).o$wܶwGҾ[7/_i3m[V?~m9a|V|s>8Fd'A-K'8$]jV`3kAkmN0͹J͡r0 ͘t|հX:XM4L'75bmN)J e@AOICUw%*[cҙnW PF$$/Q'IW]8ԭN_vF0 xІ_R>^ৢͧ(tO`S #P1 E2RX+!vS`E?>ЙzqDNLܐx^¯)Ʒ(oV*4Kɩ+7މ櫐H0F' 8 " 1pL5B01܀S]k0T$ A`hi6+]x6i.Ė -Avl"bmga6 \DH!? C=DzL pɪCR2\eɷB^}1<ЗKU2(qq/fIY', !MYI+ DHXEb&Y>a9 Cʚ"kW*ZsR66hg炄1Wmmy=@ ܌ЌL}ձXI94۵ֶv bEyC{\nH-0bb~ͷv3 ^ FR#W״Sm}imtw;i~w>lolk~7?!gB_ʯ_lվoz},mye3?w~[5mMK` 3S7m*.#]9x>q!d:IEg!p]7]A~j"ȅ Q|L'\:cDȓ6&ACN1p;u ݍUn 4 z0S&|%sYcbQwiݙ%HZB2. wy>fS 0 XJ!| <+q.Ɨ%U"╲ )耳  .ezNR]Eo!7 O7˹z` ` {Al s/EPRG6Tk Sɯ+.{i<<R{ASiRi"@2)+RXAI|˭HQ5.o:N 浴IBtc(U Ci7  eIfMsM d%En $blmߡ{a!ѽC9ɂ m֗B*u%4ڀ#Tȋv"{gg cX+SvF\^򝜰Y~\04*1\YZny`BiޝZ.3s Z&ބɛvgs5qfBT"$ 6VnX&@`YOJMʋ`vb] $A`M1x |]!9.6-'bhn ־B!b"L!"}78 LJXsKH}]`bV>,!$wyRV=Scj'aFa~?mT8?!\OAhip1 sg` j-YY/<0C mCHI }@ݔ7 rM\<!IY.;|܄'0u!a\Ra:I2CV~@WK⪳$I7NEXZnHe3{g;h2Sq`t]XD|~ D iH1I\P !A| @Xv)r ;$?H_X aRW b[O%8c!h0Ҩ@2U0wv$ )" d͠nhwFlnY}RũuQ>8?ݍMϱF2eWy_ "we {FPaY#f̯. @o3AY'׹Zl.w!x  !ҮF)E+0^rNDpI){%u{I7 >;u\;y]$$$@(&B'T)dO1򭱤U.|*rUeHG<*[Џnaq1|ȃO0 0A'aN|u~CT`1+"4ȋf$ \䏙uYt f tz 0fZ0aDIҤONh{G%@9k< EyOMNZeuT@!V"ݵB4ҫ˶iP:8UA`h^^BQ\ >L_͗Y,&,L?~ԟƺ_n{myy0xag{+iKKDf&сmg  .B~XJtBڐtk+y};o_i~񯶿_kW~7sVf_>}ys}[VW!H~Cj.\ kTé|lQ6&($m"8}=-77;7![޽;O?Ծݷ3w֋~9`)42c0rs:L+BI>&m߄NA; y=T>6?Ka)g`IX$21, }'Τ+1x )WlH5.rU؄% ܀oXYoh2ɽ?VWhn)`Ru7<*<':~HޕBWu֭R`7% >0d0Nux= .~_UF(?݂P@h#.Pt!db6k hWzi1tl7B{6R!?A[+ŸOV#8r{:Are]0ڣ{iC|߉a\-h/vJ3653`m\Y)M~[X/ᅦ2n&GavOqX_/fv7VtX[CT;k%ܼ;ui!8[ucaq+wr;fk8K00=i^}r~vÐ00IM?ҤՖ K"nbf7&_ߞLEHQ n36elpJ"&FӶ,kLwb*XTVy)ڗ'bq8Gpx u!݃+H)թ/R epky$M)/gGy c!lnz[<)rLxt$3|խ@.0{a)%ׇ&0OR"8'!)әiMu°텝}geQXMl<}v267nPūMՍ6~unJ0r],:m/_nNE{eqQ7ZܟР^Bc;̈́1P;yvos}Gm+ ?ݮR__f_-kj')յi)Y#Aa޽SH$L ڊ!E1C4%iXghfwnznjIz]A2+_wx^ tk0@|:#;Wp6;5GD){~D#[8ADu޳;>l;NE'niy2ϻizbr&iwB~犄iTN$q6qW"t m̻YTf7eVwGo~Gڿ[3ze̖0$[{" lՎ"fD80{!0 z[c?j- X{֧{[m=]ͦ 0p-!F 3AF/:G_hDm 58 {#h* "e]yՙ Ț7xDK}Kn[J2I\10U׎'Go%;wrL:R:4e徕$`J; J.I(ݠ5WᛏGa Wg`gu`\C뫫v3YC*z&9SYgvnƂgB?Ėʄl2'A&c2W>'SY%$X z+(!h5pvC=k3%vIxk YwhRnCX;N)փ{ lIog/} nhEfl,q)B`Myt|^B*MxI7]Nؕ3e0i"yKIfWӏ?*A|a@]2. C1I'ƄȺ{wcTybʻd{waCPygGb]<‚*bֵ$O0Q_oLAhdY/wܯwe9QP>~rLj&wLr|DV^ԛB.|IDAT 2\cn+eg?dS}'{0 梻()>~m_bTӈy;뚳` *?oA Ep?N'8T~E~+ە.t! \X;lDyUotkD)pF^BB`-C9'ioh`pS+{uS"wU( C6֖a#ƧʄwAh݄18+ 5'$\.^-ڵWRta|"1:L'D໬Q0u;:~FTuӓ)aY&b݃!1t?ĠX˿CuLh}ti:)Y7n"x`N/\;QZ|A>: ,2cW# $* ;$k\ڳH>gg!4RBvS'?g++s^kQ37wnڳC;f2F"c뱶ʸS6= 6zMM#%tv?u6~նF91hA'[;B LJw6M"ssT}. rM̲_[]s>ÚK_L݁ 1f'_* >/ -t;!7\[*׏Q \IxF [άm5͊<0s7h#$? Z =" 0[eimBd377m;38V/JCSuJ϶r %AΪk'ûkyh<ߩr޻W~e;vtޝ:AQ8i,J6U-(/D m]L a?Vߕ;M%1-7G_1ژLlW/[Aԉ $!d+a7h;9MG]NNh?o}0Ր㩧 1Ig;GgtY^S_q:oc˚ }ܾ~I6gDnis)7?w__izz&Bp&ExÏY>x6J`'F e K#z' 1F-}n8_LFn>u]Z!: ⬘4_| ҁN[apZ\ Rqg&UZdIaQ/,JSLe -s11IP!$KpwnAi[[$LAvAm.킴0.V̶@TgЗ1V-̢hoJH?9JZȕEc!V/kE*AC|jH|ais!j $bcذ dB[vpy^ [-u@ZgmY':%y")Jʱ5GH¤ Uڣ\ɏtI_DpuzA e S5`#r?> 2Vgzs/"klaqk9BMu%iPo%ϥ<9o!P Wyd?i{B^yoږxa"8>qT JeI~cT(|l ,&xqۈ@Fvln'ʔ[[b?fsO?nぇXM뜒q$x(G:y^=^=X̼g"|#8w7㚯~W.=̳v{ {:];sCI }::lC3sJ[J[|}'THXqx̥e|_5޶vF0,(H1-+d * BAWjĚ |)0.ʒ Ad(}˳p9FVZwyFد:O#zCJ0ۖiS< ʉZp(VnN mf"&k>-F/D`1pq}^1@0wrϰաwn7QmO9]04+EQ-um!;3!bsy^ۛ:C3lzaGd1ږ2 ` ̇܋akR!R0 Ch(bEC;)? C&`{NY"34 =2*͓A1`-z$o om)Ϧ^THlmB Zs8|ui.̘-?^ǧ郴s.q/'0ȃIwo,"&Y5S0Cߞ,M|Kë&y^X j6EnSͅ6&8=:kv}Ft}q;?nWy;]K|wvsp|rTBI, l-OzH>7^iG!#J? "e(k~6/Kqs}5|՞QvgyWt)AȘ'k:ꖓX)k=jF}vXLY!`nm!q;)!"VJ48&slig?iZsNI2plTc )OTRgsFљw i~3GO3eIU3>8qҳ*T;Fa^z 5 O潭ѳv~bKiъLftnu "ɫC?X sx3RjR^)*7^KJ!W(O{4H' vy,X6U+J3pG0MS$@Z>Q5J۹'O^ף9jGDRǡEp~-:Rx PɥwzGX(9z/ "9 ?ƝZt>~W ڵTd?c^f8i 3VLlP|ia6a(Ƨ 17 <`ON׺O> " ]1?kLXKړwH"P:îOF `Y,JA8?-fVP~iq0:Bĸc kbjv a!Ȱ[;1q ڑ[ CVq.2Aʭ~2gŬ@ѩGsan=OdOcGy7V*Z̻7afaXА]ڴ0 +izg(}78ƙh9EoCO| ~nU S0\h{ڣ6?1L=f}ph0!D"~0,TX:?ﭷ0;G$Ԙ=X`鰮䳓>Zܸ_i}6vyݷKqcÔ_{ҏm,LGe`g  lYΆyh(}Ʈ/fva3|Bo;ܘ{WD;5WVåbdp2apN;cXZ5q A7Z ˲U A]Z3&33iӆ%'ك̛E Z(6::#EGbT`(ͦ|"FzŅ_ʕ3PioqKj(uZp}T "2X+.r]`rŠGH O` ^垕"QBu.>FPMI0m '!qCz]yV+'I,W'8]]ݲ!S4+SZXT(B ?oz8iin| S'嫴?(u4.3 luS³Q\UH;?c0_, A#bTv@r]0tHx4%AvBv `! ݪp{}~{A>֑$^Xcl[lbp$oeAV]n#d]!Bf *  Ř&#,OeWGAR)/ih! dh{HB`}P1].Nu`TIauJLjNfpb5)&ȕ{UP<[Ǐǝ ?0o2PҺT0Z j6uYw>w n6NY{2{V`V6Tb&s.XTKӮq!N4IMDJ_efB4Vb^OUS>: d{mc>ݔYz|ohG/mp.%k1}{ڵ{ԏq L eu{pZح2>C8ma?ۚe,rq-˜ݳ%e 6q 4|8S TEV`ƭ*QFM4sRk6.wjHi&eW$/H'>`n !Pn{OrT_L* 0S;sD0H OND[x8I^(K6o^eSPaCPip cn(`߭ ,<\dBp{Z})+`.zY#>p x /~6+zw[ºg 8K%@Br_rI];M` fcW h^S'"\U+p- 5IJx߻c+>3 Hgx^w46#f7W Z*LƣPB5fbۺ0fAl| Ѳkߵ!0Ve_g?$Q}KиLxy؞??/a4u> rvn+o~; ͅa5Tb:ZsƁ`fnƃߝ?@Ū?_DZ֬ul1erی ;Ggmy~sekx{u3d=fˑqͿ63ш-Id ZO/0/ꓬy7`9LuFa,va!4 ~ Wi3,57IW =H&2l-މ90g/.Hò*n=VI)Q=t S\k{ۻvQ0ܮ\˅̵>'zggkR+kC`W-D뼌fNE4wQy嬟h::B}0PBI>$&.Z[H)G.s~&@8sLMќ:$t!c8nn31:0V:H3M5X"=#@Xhm4!j,F8˧QLI0\|  D(m]4/&liOuyvB{X}L(q1(&8W(T bYLh82ǯCDMGzv|J%GhL;i>S^3D_MWmTTVcjq-Ki;oG^ tvkSHC}`^}Uuh;lL}UQlr脳7v璿|G!3!h8Lq*Cpfj-I:wi9#vd?+]%jpyUp !jk.(h/]cO[C֦>>Rfgtb1DU]Sc&(CYL`~5sԣ0☳%}WLt\-}&jp"QN/*. GW!]Hة^>Vp#~.P)uC܇nwWkJe WiS0⠭S󍥅w!6(aoڟ)7G;nO{; b-! 8f–rW['+ +(|B!bt-G(nFg."G! Bk}F-EC { ơSa#Hi=jUBA.BAbrFpmC!m4ҲNM@g܅,m>+yOZk- t,l+g9𮾬)u_yHӝ|1V>,/LfbhG1~R',L7["J^!06:>̧o1ڈ^|mwisX;p#x^`R0/ί0zNO|̪6`k#0gP I& 2ve.U۸tΧHl ^!}z铔~*J?4}]= wƮI`웓 "]ACT6 y wkpSy&ojPқ-ؑ*P&H{PL O-Z1I6B Xu/gԯ: V^LoipBpGPusJ ^ l]Y KbzGOr [wA$sWwByFI{`v[_3B\ v\H"LX#x/F8; 1heb0j&[0uX+ $];mXiK 2 IX[QJG 'LT1\3NLߤJP:(?/ B1)~"TO!%}/<.!ND0I0ܺV!.u ,;~B0Y%XY jqQ]RY*M@6+E lɏnPC #ȝr:cW$zmUg6µI[#Mٴ"u?9 jsҜ_änmYi[c-zo̗K؋Q?!E6vpU=0A"GB>w'Wv$um䱐V!u>Б USְmwZ4slI+I`LjQfoؘ c}M?78Lc,U8B;^Gg B~JיjΧguwT N%< ٽ]ЭiCfuݜgt%YF oE4:>{RuS[>Got{'h@F0dN箸C T12Ua{N~{va_ 0MF+oVĂQ/툍@h,TOC_STJ_#0oӌ{79ɦdZ̶vhPB1d!Ğ~6wF~`? @AbNE@-"&(""3fuAUYAh>fwg9}nki6Dp6. |` ̟9Q~ɉSZYe1̓ {0n>oub\'W,ذHzGg^U .[}ϻ|Xʰ8!E!֠nI)Wv2%uu։E;9aiTcҙ4/cfGaN3C)0g.TRWr ZUM"|)K0 0 ;=m;,c)$n-~)*,:|x&zxGԍ❶n.w]D\N/>;`LeX`5*% 4xv^V|uԿhКRj>*GANN(>бwv#0Gp26'޸# Dkw_e7`jrz:i b:?k.Y'B`fzS`dEͷ_ IgplwwvJ_m2``%xPn-g :h~pH;ws]1 KYT^>j)s 9s4Ikβq`EMB2*#tfEq:D?U,@~ͅ!4...[V=K#(tgʯv\2*n?{aF$^LilP_\](Ш. CWKfnrN xFԔ`| vL9ydp,^_yMNEo p'Np1z-ƕiC(ɼWl?:/m")ҪE<~PA*dS-b-IPwmBggu2Fɡc{;weFs~,HN.]ODGhL i0Ui\H-dÌ,y赠Y) IքZLΊDudŢAm%}8$.RgMui/_"ړ. G!Ȕnh=43<+ m#mv@"yhvx 5Nm,բzšʨ'bNNC dQBc "QG;7y~g< b9 |{Ηe8r 4וiiګߝPHLjPU346 p"7m,oix;i;9<®BrU # [16q0I7vk__8g>icQװgߖw\LbTh '5xN-&[L-ƺ=]EUH.8A#`!M*< igJ:^c 텺'b xԾu=J၄L{u ]^ړbLaՅQm <3C_:^W5b>fwKޕ5ķ0[ė$ʓ'e ɗ/;x3"%ܪT?iܪM"dH*,"$EZNURoe ;la:-# $MBpxJ\}7/8nUCl=$% GЊS}QU@X1bȏ P,Ԯy` 87ȧ3@iUw.k|G{!!麹V3azkJ40e}  "ө֦RiY -tcƪAx&yTkz+;>mahtqEq&Rj\0d"9 #45BvCCM I RU0_+,aYֱ}q'$&a֌mtv88i/Κݠ0vw"YnA9kN~3Ϸ'Ke*ӕ6XsݘZ;ֹvb` __]<7Nc1vNh!*{8iK|K''>idR|YFx#ګO~I{R.O?:ɥ_\1e?:җl"D%NꊠMLGj'aSW0="4\̼mGFNa'ubOPn^U_~{>x GUiD\V}gm=KP2gl%S/f JOe ~ZAaL/*4+G:+W17&者jQwoYM\+Ee;tsve%ŇOiZcyv*S3Qtf Um3EnC{BKɔ8~ƃ_m5? F019^*ʽ$rsXkP^*"EzWqPu 3saУv'T: ˧xЇ-C/mH)΀Fy4S.᧗G3劥_8} EEnRbP4uJO O " O` BP bX`1b 6A4QQ%1DŒ[ZY1z`.tJpȥ HkZ0RHG}SQᧃ0N v%#@=W!eu\ ;MP\. ԙ듾,DVD XCU94yS}V.=ړteƢmK[XBʕ,u}tc6m.sI<4nI&ϘqvĮNҘ=Xl_z޾hrg}f=[[hk Z|[y؞lpSZq.sy~~FOv;z}[CPY (äE DTd=MZy^Y>?5w)o~{_ֻ~o}Ծ,\",޸ھ`-ϕ͕ܽrBN2*ݛnm",?M{ec Dc]t"49ѭ3m)0DX9<7Z03S5]f0)_'~Rn!cQǽrypsKgvH_@XqjAIQ~Hv`@zIKp2PN# 1a.T<9%`aȊ4 p4立DlwVڣvg{P~1qK[=+lVZ:owX!g+ͣBSXrmGga~MTBec nȓe6~~??jW Wמim9kZ2]]40jF25_ř:oYa2/f"hT3VQ Z1;LTm,HSK 㱶2]޸e .աU@+o6Ys,wxӜJ G+ydLT"mhPhs_]Pހ!#%J>RLWntaSb2WY~tfhep:vd\CaB0'4Ƕy 6}zrRצ;X[$6&\iUhu\F`HA7RQQ󂘺00bǬa%v*Rc&X0,wpR&= nL`Sq#8^GXZGͻu`4z['wKCgL3Ƭ6,}`α-hե\aG~]i_y޾xw^jo_ VV۽ZLʐaL_V͕6?~Ӟ>}N2ڒEl-vL;C Zm;51jוw<\̕6dz̫/NEU-b"PYMFvخ$^BX paL 4y|}-<:*_MilDBN )kHp&(`Lyp=/]R +ZzG)Mʷ  %ɏ@:q37BpܘkHȌ(|"- GaG?G'M? egHѨVإ00E `"Jy.%֚cCJ=mL~JtX-;ϐqYowl][vR.B QS?H?93$|mvSf|!(I B4+`uwl?Wr a]@{9̳} (ee,zEy`vC3!v5gBR#*1/+ Y{ 6 6ٲ+M M7zBP1Ī޸S+5)%ȻnKO,*ezOv3)g-O:y N= nG/ڻv/DP%2$o_so}}JړDpo%| H4:!JJzw([>ɾ™?4EHruU"Ikn2x"ĝm7/}ibV3ޓ3E8/O2'.3orgY aл3T~{7/zcRqzeo43/1uFG"I0HTD]}y1WzK@R^8%T'_>ETe,ew_Q8Lā륞>0H,p1%%_ߧ7 7۾Syg;u`=3g;z-!%X}Y+mtoBW𕊬bnE |y\^y)*A*u/XUVZdzw:VKp- .bAAg.T{T~h3ZW$s:+m֢`\ .=/(+FsZ`hMwNI1@!&7\KD1t5dz;!tr,!L)K͵\MxPbSNJ pw(<EdO1oR mI`1jݝrOv$r+ZZےj[m!]J쐥?spg8k3Apȥu#es}jolABcBY~#gw .L{~r?#^Mu! 2X Ts-8 ,RiXUaNۇJ36:׿+xmv[aEYbD`%6/:)#VwY2 u҃tF{{muy"skY.J{|>;liVwDWpm̕Ã}\ݯ'wJ29# "eq|HڃXyvcEp~ ^)^~]p3[j|0(&xH7KH13Gr2.a78Ea 2&_s;%s0WA^@.sG?#wpP@V] -%F-|Э=(NCoL4t2x^y.Yb5e]1ytfyO4!u|}?>?Jßƃz|stQ 4R^}J!8hBw)VZ9" P|*B~Isl)VM휙xʹ c)Su%ZB-q pooW!/whAGa>GT#怍ڀSg#s=msy^*c$Cm n"0 EZNnI)`okEX >iHr1Bʅ)!ݰr? )hi}3Hi_Z ֍8u>e|sH : Y)m-Wal!ϩ5XHoYX\Sm&՛ Mp=.h QbLUy`LNpwH!ģAo,$4?h|KovmӽV†/OȳgGe;گQo׾۷"||g}xv2N3Y,*wvKX8#@q]XgyxGq<68S_,'yow_E<.JC>]734K܁{ $ w{Pt5Zr<(/p>~cފ;^}>\sTn=(~F 7n%K澙 c5ı;[C&U/ѳZ$uf&|U߫ܭ;Eap+LR^.hl~FaNPӿ,4,W`)|R!=}PDF!})]CxV '.}Z7uև7uEC|AoLyqId (|AD,Z I=UrՀhj9$FB2B^5$P VQ S1=<@Bba`hE @ 畟L40wŷXz}tR~pXAia[Zp ĬAؐ˪SŽvC_"f4'-i4>)uvb (tO>KV$ߩ)gr̶{Ku.i򼵾rj2Ҵ`AZ_Ky XX!b0uz:(s@ 1-BXYi F8Yb<Zkh,^?l_~eum_zѾʝ{kJܵPˆ~c)f;âfҐ#NTU[]&.e1e.eL_._'|+x<傕uZDOLNХ0\踚6//K0iIc}:4tgmz,s\v~eOW'z `,,v1+*뗼<[^>pK<5x; ^U7SaS ^x։w/GσU`3`Pҁ>PVA%= w&㳠f_ #yvUNKTW%LJL 7(u4+MMs72/.Cy]x@Y+m!\U?|lKnA*Ky)!|Bu<CCK\2~խ\p(Gd 0!DE<7ٖ:1+Zhxᄴ[+!dj3^I]#Y25,I=jSLi)Z=Zo_|~ס:1NZGmwr= 흏"XCWW:?`0̕BM<u$m.!|$ @KC U+qpR\e(^<}!^z[+ܖ2Z-9kJa- [RL_G҂euCd(^Uwqq%h(i/f6susH0j0֠՜μ*bbщ>e0c:9++]HqUfl03>z/ݕ^D';t=ΰ^,EyhXgK)xR eI>R7T*R wG/N# VnE>W(Wt+4CX(M?*V$u(|I pQPX-tnH8wc/o%,! -AA[ڥAV'gveb3}K[ ?|yжär "D@pI;"L ^(38:rhf򺐏8j|S7 /}QZ{tZq6p/zwTq1Õ.L mUcmm7/Ϣ\u|ոR \tZxݳW#2`}N .i0Hv?ka.ˆχNI{qa$oD1ځ[K z*G}j3j{'eXC(q6Í2YSBaQ/w? %k ]o(4Q֭BSAOryk\*] hF[;Bjba։hpww ^ret^^< /{)cByĩI:U֊B)֪\T/*Q7YԯWt~q68%8]8!t}K󔄉?]m^RǼ/$ e\<% pt.HG!wg12j~@j : }Vs.tb36Zάr1ĵ=̺߰>H=S|ۢ>!kS?H^.u:yL)75,I yadOw[Owڻ/`; 0֊N}9SL)˚ LQ1+ GhaqCPx?(uIyPa`>vȖʅɚXDšN:F{_k*R.!{ku&aSr-YS<zuC_+B oJāi$r~OK&. ` }GTI[, b}tL3y0v/M_\6(ЮtC\L⎵7=ۿicM~y驱6ѯmn-N?}ls㽭ssmљ!mZ>m}e=N{G+QY\-pjcܽotB;InqO ʧ>ͼ6 c*.7aXzwnwҩ7uY 5'`62{hr3_gr望r6ȕ("W}?kgR|G1FL(0P [ ǙCؚ?Dpf)dBjHSK8ߕ,kv @`CW;e]T[>Ku~SԛB;amdCH%A~zU.IłE^tCA*_処 IՎ3mэ~ O"}S^C_Є9koY7(|˜z1 2|1]_;$ISZ! a 0.NGXn:S, ~Z89uSt`Ii|13"u '\`@Y00lItpZ{~>9lvڇyi-sjs1r3:pX]MtN^F !i\#AUHBhY9\<(}bmO~B>+'㖤էo:k,-cU_0N@ e8ȯY0BV'G;1`UyQ\QN;4'rͳXW\S BWٶAK|}fww}ǫ myv>~"Цk#x:|5>NX]2)B$m2 ۶8-xe' G]ԻA3Z KU$~;rγx_?HP5׻\=^6anQT ^u| P +h_m3iS7sym~U!],b?ӬRRR40OKYu7urB$M7>| <aq1'm4% ձEH˛ZA{Ad~z;i0V!ZNӗ7#TMGpmS:H7:r Ә /QôpԐs]s՟s "a咑 yuB>|KR\K^Yz37 =u1?Uurz!`cTB3%UDw)FWUzvS:ϢU?O /}ޕ察7P_(೐ze3 8ծ{?|>$6Wjn^Ͳ5OᎷ3\Suvut")hA(B 8 4/FM4H" RWw\ygDo_LIfgE2!* OE>g<t@jwp+6q%@*cS7P)>龉L%k"" ^3ë/$pL~MF1c YPI)2y>\,O@%%FGꖺx ﷩hL^]DŽwQLe-ʙ造J:W"/#E:GB 1a# `[fXɏhKփώ#ԦO;~aM EM'B(!%9_MwOųmtvV/ݘ>ew>w*)A;ݡ|ݜ>EO(*X 8J'xAՕj(Cܩ<'"IE>sbh*Z] DoT T/U֟R}!mvJYZ=\xNʹmve{,e|niE:ӣL$i_1=;Rwq|vqo+R'(!ЩtR 0}cF ^k:}>cnj@x/]$PD0 <[~78SI+y%MOgF=ks?Fɣli'yFf)Zz_~7\C`;-iʻtxdW.c:`aL`0TO_3pga<z8 \1qT`h`uZ/"o=z]v7"'4^.o4W;udMYK랸A q!N:SaPz5 yEHN]~wj*}}Qew֮j8y"( X46 Q1 VL}6T$ﮒr߰ۓiwc"e}n<00iSJruぴ}_Գ J׆WC!w0vLN|qxKyi[{l?LQ9bH c}\^r%,^@l˿tzr:]^M'灃0El.3vȚ9p6Z߫)~7s[nVh`>* eU;Oؚvƕ4ژ? 艙%g=/F4F/WiO-/ ޟҺ?|!! 3W#I(gDm<]ނS0ڻ.䯎2i^E}ըj}:B`c u!%+*086sa-ϥ^c$¾u7'Ѽq0 *z\FPiiZ>x`/_<׬08w}m;|HdiUvcr^fuV;gF9yI::"A^_+'FԫS^\6 =穵4UVO?eX<]/.l ,2`GZ2$*&/ B'Eܹ=w!RS^`5>X-=>[`Uߌ(?}3"luW 1 aaAzJ•jj5"D0)LK qi6!A"D|a|u{2z|`LmpD'=>/.Ċ c%eX:Z'X,;g;T*ѯw({Q`6uu{QTΦO_F;:@> M=(~"@>DizS΍KgQbwN4 q=zUӧ<8s~W9Q|%BoO(*tO6N3XYs$*qM(RuEo2BDĎEv؍ULO"@ېR f~V؏03d!MJvINH elD x> vF\lQ"\tı`P#_ 6s؞ZQjHYD'NWxZM{2FR{e%7|vdӣ_Oo}}0}ާ.NzR<"DqCp;㱬˘;5ñ/ 7_LG:䢈P>̗k%E2n>í>܈}?Bvm5MMٌt{D!4X| 2nGt7;Km$2 ԯ< <]ñbBlޔa%3jHڞO=_'㳱52l/f}e,ߕC ݽ3޿E8 iv{rJT6yumcܘ;3`e|ߗU)O'_GC׎ Aڝ}o\ 1zϒ~憀yW*8P"×.RyG+S#E^w j)c">9ޑz&uF^ty-vrrZ['"C:t02\ɘuQ 9wl }| w,v9݋p<'8xroc pFNKU*Đr@͖IٶuǏףgwoUue4,ܐ[Um'%;!, fyGHZBBB0#uKס׻ He@%:t P8ibVB,\ꗮÂCS; 8|rx]/MO#>Lr#>5ѓ}xe6;/w;N‹˽㮷/_Lӧ_}|'}6ϧNxNI^v ؝޵I~`tWm禧tJؚ%'h` D$̃Q2WN^zJ&VyxA)7y2щ=U|By7 ;PBx6mbaލ[?znGg`Eh&mP4HAEn .Ώ J /c7RCi?dm&<-u|Gɓ'pņ=^ VyJA R։AxEojO˝^DЛO0  <ñ|{0߇A߈Bk@l2"u"DeF^= 6D'wXDzBm5{aSR^>BBhBChV3R:y-j#H#VoӔdbLnY|Yp=}J~>=`ݍoO#ȮM[,vJ_}O[rӏy2,6<ʱ@{gGPN}8KONGw#xvX)AC}ȃJu,']7d[ǹC=IS3^S6\W8WHc2Z⬔Q8 s}5i0哔C0C7ߚ.쭕(ifa5M!2X%/^H)ڋ?7ov:s*J UO{f,s.=˘P0/ZBOQvof"8o~:Ozqo^4velL$߫gf*dZ:eʼv:Yatj%&kiΔNwm#g{ڶa(]*\/ 2=68 䋳+(\pV!Tq򷤮D7.ϟOoMۧ?fPa;$Eky>bح^V}/gq>;a_|p/vQ^xe>M$=̣`elO!LD},`?S;%!ݸn)vN=EgQfCƣN'i2nw:#~)Hm;e}s}zdKjwoUTM{|ҌU >،2Vڷd:? >=^eM[{|x"mHӒXU4 ūѩQ$mC=+^P&M'8? AA5}q&E?: !!/l@L#_Q.8䂛p}JoPIyVe'/: 2b T oYxˉ%#CmRhޥd߹-ˆ$J8E.^~]&AfAnͱeGx^YxH{v Y:N=Sx}D? A$~l ܓO\&u6m&=K?3yf% Zt3m"e ʸ(mxlsBOSba{@.qxpy~^yRPJ!Z-^VkP}L|u6նӬl]De+yM*Pu)YEM<$g2;ɻYox^Ѡp޳@133 EW]B`"t¦.7|t}<1=ԏZE{$6t! 2irc'S58J Y]Ǝ#6A"ܽ[ؚu!^;t$U2ml)We]kK@BTR{9vS"!SdMGP98bB-CuyX C9sA4xx~՛W+xƲz'cZo%A‰&Sw"]KDxkZ"3ަb.IK70סtl)` Hk.y߶ )YcmoM W ,~7(o$/moe3,,9?Wl~#I!E2άEwp!?˿x١s/?zU%i5(~M Geۈ&ٔfv:9J\^7ouXL J7t/0$o 4J^z,L.-Hf&|0?YZ,OԣڎN,"oJ\MC66LCX /ow3ɘ#k&n{Sl;k/aK`9UVX u;~y i7*uU?h%`u3ev_Xv*|bVߘbb v _,@RY|ָ/ߥQ0;?8y|q{>ꋽWLhnoӓ܁g ƕxC NhMەUРfxߣLKԧcg:\(XKq @ Sj͢;XS3AôY%lSBx1$/hHgW QMX O e,3t%:10BپiN,gn>7M!<]ںOcN[/-kXwBp#z.E<x//qz~w4!FMێq\ӸWěг8RϞ8P~{v4rq#t+k1/Lۛw';`i3kHԿ n -?LYޕRnVMb\?cGe5{'/?:YC67Q0WQ:w% c fuzSf W->)d6 ]nkj<^8>:t?w'S4Ձwfx(e1 ippI2} HoS!|sy^ҳ_<˄KS>Bpz|u(\isRYCXȯmF{V M ^[qh܇3}S~kٸ+tyx4j}E\oB!nL\ yBŋwoQN Gk! ,)I״yQMҜ]*M$Xq.=_"9xr/mfeBko`X0my&]sg g:|vN4lÎy*> 4pLy>)Sv__oՁhxUR(ˎd%4==cK>ϥyz%yx#uxBO1L1B KRI\+K(JE mǠh@1 ARqyXHi#N EAg=`U$[ˣSR_yx'b-eqmw{}r9AU{NK SD|돈"2I](Sꎈ![`{ i\lDNӿM}2}^'vqP)>0SR>e *;E8|}g)ߣDaJTCUNA4 TVpb88.޹ߩEm W;}QR>yvlkyN(QULϝ 3nvLrrYaQ+%g[be1%4y}Eo~;o؛~A_>;muaմ>ڙ>}}yy룞rra2'` x:Va[3ޑ]s{B u@fh=JuGf+乂1| ,`>+"MC;_a_ChADʥN4]ED)\v$COyGm9ynH!  `bbn6z^TO1\CeEo9rP?|G^8+ ƹ3,[2jIj|XY IFH6ZIϰ/DQP+)ރ]{3湂vx;!y[-+t[]k|P끩N\kU!y!ee+m|T"&WW)0lX0 (%8WbXH՜ 4A@ rFP\u@!o,OvvJ ]|-S 5a@"7_]:s<< ¹S0*/c}Ab&l:izZN/N=@W_MD(v.NJcG"kMJ4͔"Ѝ+0QhR䷺nn6SHO"E G`ޏz}#\;,N]ߑS|xxsX0D'~ ]CϦgkz<}QoNQ2㝵Gwקǻk#spt2ɛWk|L(ӹ_rI9v⢖R}j҇El0 ]К,9+#LnFyWoIi63xE<(S*0 !~W9a縣 Z|OwqFN~[<{?m;D~6 .}K8H1 "y&4441/<'KW&TUe3*~f}Zc7:)Y xaM}9)#*Z\m" 4Rt"ϔgR@q]~J阋:S$cX0?'A8FwCXo{\yylyeߣ9uqӇ1Y a0g$6M.5($VW 汇p?Cl f}rx^eA﹜QQ.XrgؐB./R>>,Zh)ϧAஶoqJb !ac<S-=s.&$mo1IH0 Bx! wCMz1s}wp/=OA),Sv Ey6 з{g <>zWM (LQD;6+0rhMO^G): + s{x6:: }$x"0T+|еMvc:xcʔ2T@Z_dLx*ͣ7`GM y$2þ3Uq0wa}f('yxV<^5ʚ뫽mpBDpG/G\EYoO6ڜOJVH۬nоtSUFovWnxJb!Āc o.*&1B߾ U6 *J'\I8kh KKÈ GWxIPBZFFpE~\.]g)92S?#SRʱԛ@Z|/%S*weeYד" &%q?μHAx? |x4^M,T_M0XoU2gy6Lif@Y8{uEra-f?u*=g{gXWB)S7%> ` S'ro/;y~:L闿zAѹLQS2SL90;Q7M3&8c.7\j{!D+`YFېs}{^k4HtCx/ Oo7 ~.3eD=0tY͘3=ڡ5?$52wWC!Qww@ !(5.K0ymhQ\/v+GJUY[V^-ԕ0u~dX |* -%S4/^,x7A/@ހfA*!y,E3ԋwq7}wBKYT^3mхI/LΘoEܝ5CKM@ߙ<kG#m;}.9Ig|n\I-wևCa꡶ =^M~җ(IozC~EJ\d#[ɟǿpņoKVb=Ln֊hk}fF@UA*EPJMmąá )DGO Dl!fw#C<h<|\KgT|c؍N[<)^;ry~v\Db L֫.V3OƻʏP~Sn>'Ī##H,''ݡ Վ;I4SA*iGߘN#>C):KVYGZy .qܥWra9o;P ((yE1tqqX·'P8Px|iʥtkeG;|JžH@]',EK0XVFމ|_:¥<%vTPЃ IM(;Hަ8|| i: ҹ$3&>@=,p0\n-%*$0{ +z8;K͋ ]ؼiO˫Bl9Jp& w_af}m-LG/o9 7YYTptz!!.# C$f,KEuƼyU" Cl)Mnf!{o~% [vY" %GyAUgpB-"̴E!&,&]̨dҴ.JʖSP40+}~”wv']m pcۥ+tUSaDxvb4KF{uCzieJE$zD(o[K"zW(]v}}}z雧ϧ/=H:8z<8Gutow}Z }Ҕ]5$O魇Sk0Ng5㽭,Yq%vNq"4">C LfU1SέҟE=)}cZ(V'ѪV24L m?kMMeetnѝ;oX|3>ۯPGƱ @yZBx|z^G=u̙o243AXZ[ߘ|oM_?"&\2=yکk5okWmOWu_I͵iwgs(Wt߻@)"G(WނO9۶Ov֪,R}Eڗ("c |K{(5zO᥁-;̋h Xw>"򳇛-wo9""}F0,|`K; n;e EFa?kpyHb4[* S~Z4>{NՊV:/~^X>=9"/πuWz'"f\* Dp_>` l,&'BN n [I9U}{CԠN{3OH)|{ΕЂnxBB-)-;A9}.۫a %X6C~FQ~LJ-wQd [ -~+DS6oHw6+1yПx!g"C\^YMhύ*ʿe{kE:Wa`v+#J2BX O4{VJ=~w|V)F^$cjr#jq 9[LY8v+Nk7:UyZsЗA!GXy%vXxP&)g/E$DS} [P+"htP)Du(?G]SRO"KoUxV"3܉H#Pw֚j7nFҷ%,[ml_g#J蓆US{nLs#$K/uZ^r߰UU9|pʝ;ze LՂ:O;=6,Aܩg.iޤ 'i "8!fNt SY3fO)FsK1#!~ws􏘬^\3Fe{s50O{{g?7}==?o2~aZ0~iD^m俱Bx3=ܱNMUA5g`%ׁQ ӶN/yDn4#XZa{fڎh[aMsK7Q("觭jMY:zC?ƛqIsU'G0MLvEQ a8~~b-}kM<023m"I<6tsP|^ŴiЙK-7cоA75(+ޟvf8V.|ZzC'<` 1$so>ڔɀ5n^ (.4ww)WbMV Hp#(x1M ?Qk5Y]@H`g^Vu9Aq<w&Cj&_ԘW/y}A'*KQyQ]UJ SДd7HHtBôQhޱΜҵ}hJVe4[Y!|+Ez[eooocmڌ/RkE:Oak);Hs7 k h+ƴ{[!.Z@ϟ>~O;"ujD`Z-y9E@.{ #_FV4~ )r`U M&ǁE[XL#QpIˑJhKm}_'.W\gZyޞESx[)5ߗ.,c\+1Ӧb B*Xvs("_D>::w| ڄbÄ̞tCߩsyli78 5;{;q(y ~.PDl0W!Obe>?./ uJ}+S0p$JA}x|Vd{3KM/ޅt_T,¿~hTr>x'1f 1ZM=X阜#;gQ=}u_GO=]u;%UQ "$C Ҿu^ %E$V2;JNon:"J ~5Nkp;olRLwL[^OQƿb;:C1NMu#Qd vi[ Y5ʼv{>6F*PDΙ=$Xg;|)co?ie6)G6m/:69J^+m;D `@p00ص ! ykAofM/-8XT$1C-@_$ߜ^y(aHc sUhխO.?*ݰİFO~»,IBR@DH!Ck3Url "QO}~%0-,WD`B+#b#H;AU]|#KQnw+ C1N]:X"tw3e߮ksk,<-ˆz)k;rJНM k)@*uނ]Ǵʄł]DгE%X+ik\Ѿ,X`t NmCpӃ^:CfX`cݝ鮶e"k"X *3~<%8':y;,Q4LԆw<?/%I#i꜖?crɷ1{q 7nO7eo ތ"ҩY_N?X $Ea,c ˘i}cyzEDU@$^[F2eia/DEyΥ 8-^o]?>$jJ2fR0N:= P0+R66tzҶ{Qߏ"4(EJAо?‡r;i-ƋYonޞ~?ʓzȏ+\^'XVv`e%,c !RL_J.1ZEKH^B]ő_75IpcpP|oݣFFRN"eho&0&IKLMQR,>c:y%BHhMHNV|VI`Ǣ)YgnA7J߽gDMh6X-WZ{r+q0Jt0ɪs;[ {po7qQY03ȵr [8v*Ls>$ zAȂ;C&P7gO沛"`Q6&<,.KX" pCF n]'B_Eo%(KTQuiqaM*}M9vQ{E4z;\( vt$wK݂0uG8g=!6`'дq}`R6XW)=8'( }gmD*ɪĔLZJ8#/N_^\rW'N9`EԘck~Jcry~LJ9!Ka7#?]8mE@uF F:\QցRi/ J{ ,K"q$KP .l& N&N0I;fk[GR | U=!aEFgN??kՓœN܎Rsg5 ߋ !eF`W*AelT;Ƶ8>lohxpN_Fc׿./mcwϼb,V_> S~eqaj͕y00Ya^;$S£k-8?yv|;Rp~HN>1}`…)l#חz=;6BSfkUc><";'L˼(R\0¼]EX O9!&JA WCW"8;:>4ĸ]4G/wM+("NFK|"/n,žLN0 ŁK0eM54pjp)YswR"no,-.8x-J{:cQ?qQޞz KmxQY.F2}ފPHB\: 5ҾwR>Ck ҿ;4 Ud:<;JHyvB?l7-doOZS^9mt4 C47ȥZgӧDA ȹCLt5q.LEA7Ă,OJ"wJy;(#MiAh STn:o"WpH ޶$a\ty(QD _GT6)H_\QdY"s Ά!w_O|?wVyoFq\L)EV!(2|˙)c%feS]y$1Y^^h"߈8aA_~gl7ͼ6ޛ]7mLCiٺ)mk{;i*"<" IpP&O]_ia/)s1N]1+"`"Sw<Z Ng߶ /|/{'"r~SnRWĻI9LgGz("2c("u1}ֽZ. _ڼE("`4|7.[QB^^O E@Dppc:72R QDz 1<}#c LJC0 F.ÅWN{ ʀ;]YAIM՚"5Z,Bj--oBj wg7ٵwZ.2TiBi^yNiguGMJK9FhٝђvsmU(_(!u okr#%s i4}5?QCC>{vw7WJnY ]`e igF-BV+\~2}\y,)@\ ,`τb;bŶbHon)#O#HlY`hRKcf@ m l!ڗcM‰s$V# H V|V<fw< zd"Ȝղ>IURLC FЏQ-vu"7a5Dz θCpO"^펝Bs:E0$حzD|St,,uJ\iq"`g LW:v$X+o0QlyX{Ha@HR{" HΘ_1]&PW̅1U/eBCIWQԴ *!\2gS("9Qb/m?gt˧Q^4=&!.`7wPGa<=+. ^(=60qT(?,m‘z~ M{0>/(i)`UIG?OٺMR&i͝WNH_F`P/nBsL+*[=bmMoL?}A#BBvf;hoe(u8rE|+J%RGuUUy)/Q{+{W*404O$-Jԟ'hr8e^O}z\O8=.-+X:RE$wՋ> xp7 "xM"R-Iw ] 5. J6U O5Vx^(8<'ސ=(K/ZR޻Y5$< #uC gc/}\fc|7um2Q6+&O<9rH/(!h?eQCJYV]HLFL)Cy.Oz[ww*\xꇏo}",i? VDDHtHEN e1c}o+! A, An5 =+$W3lFB!6;jS3a!8DCo/E`IӪX-w)I5aW/j^(/z vT",C/Rl" B?} wv6(#w$*h+JbUQvs<Ki7&Gzzx%!JI0soxͧ⻔z%oQA)Ձ"2)'QMʳC_™s;`~Nw;w_r:;:}x6Ot CRԮp>Ɣtnha ˁkFGI4H>Dt>gx"N-W_EgY)s<7m0}̙3IhK ^aA HS/u SDL0 NXE_+Lc3!^2cFeQN="QD~ӟtij8_c _A&d`X'?\gﵭn7C䃝,ktAW"a1N qJ ԃƀhi=۞~;<"O_{D{V(4t.*6vύ` mo8.ݹ1=i@AXgE *挂t*Hz$v~^1qk$xƶvv{ӧr_&91CGYwS(aULToLٰ)eptyzelډP:iWD䗿1;YNa>N'Z |O;5+!R[ O^2Ag$|SI(‡L(#`1kpVC*%Hg=< ~xLf;M0e6tGE:]2HVa PJn; 0Huw{u(\<q/}OaݎBe1#eĺ%}<+"7vRo9hݯÏ'~<0Q2 _ Exʪ3C[~WfL&zS* yaA[PyEV|S(;nZFh ^&@N 5y=S$3)6jc\VʃOm]ʜx\*:6 #;<@ASS)5Ih\w*T+c6֐%L[Ungn U7:kEW޼~9}g{{??6_Vubi(cN# ڽgA,0h"Etx^=Ќp8k#ZB7)E < ZpsGͭF6,v?vuXVԱ)\cW"ݞv#Ⓡí .aă;罳ZbA`aXKt.Ob)۔,"^L!,<,BȷB%V]VU-:emOJ;QFFty loD~L &lpyP2EHWv' PLh~ڨcLx>ÄX6CThZɻy/Mw"(jogGbEOGXNvݲP|("vQHE֎2G3<<8}Q> hX7 m*|twsj;,em-(\voo[0RxL6w{Rư|9r<%^ʯ ˜gVNn:yt?1uS?l対lYʫ0=XN8^o}# "tf: 0vw3JtJNj 5,q$g4@=Ӝw#4#=UOvwS~@!iљy2T[*%H9pL\(ץ zpO>l3JW^yfWxh#GAC+pS~+2 QB6v/8V1p\W5zS_DW]sY5R:+pV |RAxì(ulb(-K 8$?tC|;#HI~а%&K; 퓔qpZS0@ #7`DDt,Ny;"I~,"(P τV`40XA8 &"r 7E6":u+.¨=SbE1Zv`pjLڐ#!PWۥ̅#-*sZ(uۄG`]𱑻wM?ӏTxژ>x;OOO>x0ݏnۛi!x++Jд, En, NǔHBoWbBH 7i1Nut|ҵ*2G5MQI1Pyt,Wgn! عHa3!`4˚7jًPy`UFW]I x-"o nD YҰUT}3 ; ˂b} =s_g+z4di~o ^zx%(_>=zv\nŪeǬ}}koFs귖>nHNCCQ/xa}-}jYꩢ$Q涶O[}gLt.NEu쇀oW{5yQ %7M&[2!33}CV,(}=[PD2WvjFUO‰*U Dӏe)nU>\;}!l"u2- P ccMx"/}>: P#"A\WIi!bJ9 BBJv"z\*fHCb"}D "$yePL܈ ",hv63bpt8%[%$F1уNu^HD~` \Q~*fh3}콩[8Sڥ,<zH#^Ϥ#\i)U,s4uC!Q8NO/:/"csisVYhjp ˫L*M.EGwRv0~J⽼.V|z~pܶJyc:3ImuCH8ْc ixaa~K{w;L##dbYo/cLZ7S^=igS5u}gݩ_͡`(ZH4e⪏r)G<}ʔiؕQ-ic "7UDBC(". vp)oq -NE,zO@{_` ëY`NGy;#>t A#}+Ů?:%+nh&R۔|!6zED9iN^*YDC*o Os\h%>BnW.~@w$ʕ~Չø:߮xIsVhW7IKsoiE76J;mp1z:\$Txh1 8 .1[/ La$t F胰iۙʮKy#> P &PX g<(o $K9wPFNo|׺r./v( B$xR}B4XTX<;}0BV'w`?BC@ܺI_^MOݛ=ݟNNN+p`iU~WlRzM6_>cXSG@4-$W˗$xeYto9-m+(KKAbbM6=Go/;(=K|W/\/W)y$ /$Q,`Cʌ,;O|p10sg gX0Eؚ^uokyeqguzqzp7d;X-5=?{z8}QN47]qةvW,}à5R(kreSLUEyhsp28ux2FcK^S -xܺcrxNc[iLy/AS=2d@Hs~&XPCmy΂*Ff;߹ZZxLא'0_ٸ/ ml=듦ϥf`mV7Aہ%4\=c]fyC^Mv $۠ eūR/O2167IWᕣ_RТpޛR@V(RD S||GXgw'$G,#xXƇeUmLŁ,αϽ lY΃WNYbWoae1MCY%@ }j*|`{{'(/-ZHkGzS7烘t'͋0I<y"dw7Vڎa**rEpF .l E*oݬMPR2i\~vq1( [ ȺN bWnL,Ma36d(HQJ(owZUSLD-ލ`Vkaڤ܋7U ʉzQަ/@ 5<(Nk ׎0n%Ӽ2>,#iS4ݘ\,n@򬙦dyX}wmw7ik738 ZTӱŽVXWRI(3iwii!mpJ`ʴam< aZJہH 3HR=e0pgOP`MW_i10M]mB[*2dc|J%AB%확*7ɸM._y J?$O|WD:%> ,7tP?;49^45"O)!GIm=U)׈7?)gg?(W,CѶccgvg܃yyp{x-]Bwgɢ.)@|ѠSR /h ;()_pPDPG$m+f$ˉcz^iv-f ʹT*!>{ˋ1T܁tws4]W4d5!y^_ʍv |(r87ܐ0X9Ɋ?b2yf1PvCA;4`t-QwUy$euB!;YltrMqIY/mG¢ďOϪօh )N784˷ݻjtt3iemkJG FI;Dp+wVVd}{XtzYy'cejD= S^m/m|3]vi-԰GXwvCw`gzY<[>9Ry55}5,7琟-}h3aESccomuX{D%EТv ʓ>j޼娷,|ms?#ɮq);V\%Һ{1mlG$<%}URR^9y.QF:x).zɻ*PP8~;%+"Vx_8@8Q8].b@LƯxJ+mYR|IsὩ&Wq 'h/mh=FGp2;ϒB5[*O4_Fy<ԅOUR/Ssmwx^x >8)+371ڑxLTqxRNtb:F:\$@*cv.Թ!lBcЋ`_A*ȈPv¢SaJ;c,R[ka4Fc @rf AS=Ts fE0K?Oaey(WQKH\mE>umM.`9B9(eNϧÃ0E=}n< I\~JɗMPHܽ՝dƤ~?"/L|ӧ_xo|/G/0D-jvtO~GU;<;moo67@E)N֔'Eֿ[zi"jA~X<؉"[%sv.ˁ0pxy# 4 T_+]ԭ8nY},(BS= 0"Yp}Lrz~ /ҏ3 ̿}"T8c ߗfʓ{dml9#uhgB]| Ҁot482e\#;}(x#E$+ngE3zJ/=ڞy_g| fS#^ ߹cz<tx?S[SB)Xda/gQ"R.LVxl =OA_4W *vs :x3ΚF SZer1 ^g 0? _Oι?CMjLB .Ip1RƦ}gu4?4,l`^th5N2M&?M`sԳ trrv׻f]+쬯V#0cK>k9B-@Q=EOSzD _Ca3qE$!K6}!y)DL}yPa1u"t'B\p:C(N9ALXgEICF^K"CQ[S/:e&BPϞG@=dQ~tbs^îT\<!@cp鯋8E߼TJbmj-#RK].D.c[k]swCRߩpeUCvr4m:S(w!2uENs_ViK_=:c.c>iݍn2=7րP(<;^YYm[Ȫ$X0)F`};()X[ &يr , g9 <0?_`a}gz:}!¨lќ.\-ݘ#VL/m/٢z-uWp+I>~  uSw+*u;(T>u &2AbPwd$[% xi5tcQ^S0HT |c#zN N9τaSӰNO"G_B%%?e (7#&WYmZ>ԛ2LR$=AxN,$yHN/kJ  j;fmGP(l/^I7[Ix>-BEz%SVK4h~2/0V%3sh;EDULby*ߺ*E׊uxE<*P_$/# Ne]u= @CfE!,T4*_:DE0tK#<X}x 1$XZZɻ!PnZZ#/E1q2pl2>fc>cR7Y7֣$s˶Y|zon$ؓ>ɸQagq4qPDX5.JK'_8 y ʒߢ·89#%DQ=|^#ȣ-ş-_Cp*J"TQzHqXcUF7XtK?eDʿנjBb+X"l"Ϣ͒\con\|elm ׁ{zr8;Y,躄נj'x nd> (hgџ|*\/0°2nSfM𖫏, =Hx u5w vyz1AHTӥ.衭z3x;E\ inl2ϼ9_hZQ>Ѻ-;5Jg"-pޣ0?6,ys( `D B8c3:%,8Th+Kţ(# |*h@ⱻz;Q1pC /a:Ζ,qās]AdV9ojS@~+UHe+!`vZ1. ; FoE)e:}~Dyw4=~47gDT0%LN|qc^XlLOm$MP̣{v{*wã5=(=U`e{cg9lƾ\i7/.n_OϣOOy:E\I]=kW9oSy,@BS2gQ,N_PNٶu_A}Luc wmg}*}o)\[˵hk'WO(,! #Kgp ~#0/A< f3Mq7e?|NS49xs}<7zxwxֿg&!\f&b  7,m7ÌԫJM(ԬmU7=kc#ǹ\F>X@Byo 6*wOoaЈCkA.m/kCO*X'^ދSAS 0, 4 ]Ru[)܏ 8h cWO| %QW7^y:i:%v ?[ּ ,jN\ĥ5 Fw* 2"67'Φ 0uemn}U? ^6wMpv;T` 0r0\ н Bf!@& kcn'a꪿&=SYUvv7J7AbRRW#(waQAymAkh~Ҟ/m3sss}Z__Oc%ϔ0| <΁[t!%0$ z*r-y9漅Z"+6] o{7Ų$J^KpǸZ|<2𸸫9—yn] ΍vGk{TI:#H e φvtF~Ctቡyq2r]9^)?3 cb$:884"n\+" N  PQtmg! K`gOQK@$ dZbBHpvԻh9/ fv{#XPbzURR YXne7cPntt{ܧP,Öj%?8$BQ S^ SgcݰN.dnA|&A#XVo}$]M`M1̎bi[:awd7HFU(O5&7?}4i f6v 1WQYkf^ ׃(kr`L 6i-塡Lz鳕ہMy3 =m}u <ɯI %siir@VW.E(a}0MoJm_|(QLj揝;2=5i'̆`:W3?/ت⼊!S+vʊ›g nO%iES,`'eOYo>X,ֱ wI?@qZD'pD:!9kIgY!$TV>8 p$P,4%1қکYS݆"2<A:1 _2NW U*"i,Ĵ w%@OH0گd>"N[w`Ek.lq~("a(!xCh[` :,12^Ag ʣ<%,@` &a xh.xheJ3cd]z(o$Bc78goﻺsXAx!]_Gy ffܛxBvMJco힤Iߪ&٣@ܱ/T~f@ ^+/AA (8kaKzux w]yvAx R!KbDゴ.fv:F* Veݒr')"ܟ?$V\DH<:Br8yռ"T._& n~jGݪ!N<⤞Nަ|[PN,DsРzEH$_|wboov6 !ݢYt.'J~,E,GUΑ5 y%Bkwt|rzqy:n󃃳,2㷻 mH^ (*Z(cr3]l۽MoMN"'oLz8nG,6 5i-(/YÆV7nob7Ri0hQ4.wYmkӽnKU׷Ӭ€./f09JO͌;Oޟ^^"'OLo. *)(cP+iEr/cW7a*żFFJps8<"ѕƄx_qw@"Z.8()_MqґP7g%ijwP@@?R|혲QjʻYhz.F ~?eyW{eUI{;Q|DZd pR..E{=0LASrBRÏ;!o{Vx.8ݣv*#U*fܒ\kGoZƮS0t.pxU yʷՕ G9\ Q* \ GPx~xBY!11)e;`9Ko௺C}wy,R|`8vy5>Jrjbk3elP{FS6/CiA?2e' JJIJu&?~7ῌɓuG7k P64"X*ڱÚnǪGwL*yAY]&"@zQk !_dXy88FQޡ3}/?Uy*ezJckǶnבBet)0UW!^Ŵ)cjB(gzq){ua]#GeU2嬖UR1+OunEaȝl!€Nwnܚ"l!Zʮ1̌Ծ2%?SerҏݪB|S0z"nbر[u("OnL[/?KNM#”z_ӡv#Dm98^e,XD-/&ʂ&}ZJm} .(qpS7 dx:l9]4/l)?K;6M-#u'=&Y[xʱMfֻS9y>=G({铽ʎNN൥ ՎAGsNq 23k0_~UB1N񁧴)w$lGɘn.6o;~ۓ-+pNt_7Ji˷7evZ f9nM*:~+ ӌsc RTT I`;0Zu!/q]q(whK/sA}76<:~~0UL 0Ӊ/n,)~o5,/N}UMEm7_]w` V 3}j:?;+0n^H^m lM %B0Y|xh>`L^$/m*=J]U[uߵEpN=N_o[Z ?.ӞNL$/P"hF~+5; )e<ڎB1Д#˻I2jisJ̘b Y>oi.Eo\.BSecZAEvwo6~OoT@pMXljIeӘւt AtӿyN l<,б֞ y LO}p@{3i^LzSK*/!D6hY5֯;k!4%\U6&6#T+E᳆ͱֲK;APs9uD\LOg);DILS!ZWӃz, <q78(9#俈1+8)]JX ӓ>7Ǹ.Q=*Ӷ{r5i ɇ*iwpKSĖX(vb)g-~13&.y/QtaҨ.ҞwamMӍ~oã*!},%>Fi;cY,H繟n7z;!E^/ŷwvp.fZ~piS'})n*3''<yoQDLc! &oήLFN}Z4c*pIvL8?4J*gw( ^:+Ce0nVϾx|+$?96\*$Ae?enx&;"89σeux&A| _e )M)"O?NϬWQU\k6j@hzoi`FND%qpMNޣp{p-(-#GwPm+;e=xۄkt)Yg1=:_*WHy! M:XSeGtjLLvMm=6۫c¿xs,0솵48+) û3%b̒I=1hQ.SZ47R4;uRvx?>D1غVD~`c(60}o SFٸQ$jJS) v'< }I͝^yAY u,퓌㛼3T 5ꓢ7Qi.ѹm*?aeIOX)EzSu~OUۣiLZ;a"革Z();Q"Ϙt6}Fi{.xcx(Pe4ȃ}`s#c>WU9܍"`'68 ia~iT F=RFѢ@?O7IJDIEdyZXLOKlw0!{g@֬8I-{pWL9̰t6ɺko SG>ч(W3Xӑuч(<WF"b4Q"^6s|jd0{A{?w;P"̧ZW"X(o@ؠt-ε(">4Agk'="Ђ5]LZ4M ""ߦ<6GiEowîsQH"PLlL^&Ap RG6:}j?xz"SE(<Ս } ^ۛ1},<Ԭ1m0c ;Qx}XOQ>Z~Nq ybf1E8ȋ1}&68^}xyx<7tچvn kD+Ρy<kh!VcظRQzݪ3q/{:f_v)[Zdh@ea('TTSguϋz hPDL}=%5Lu}xi[7nuiyr)_`{cZQE$CCY7W.pi>iT "m{Tuэ:\%@, `(!(EI[DL5uS%Lpyxj\nm 0m{8a\=^,]uQ` #ajx'{ !Qέ;Dֶ)~=-;D`F T,HVP!Uj\e yϻ xV<1ŲE'ecf'$eȓ\uR0 q)?;NQݩi֦'w7?'oNoM<؞>٭T/O7צ{[v Sd^G7taM]wz#-Z/hr俘6r6fϫKt|Bnsv)T8pгIϒ=o"`=ni\mjqfmL輛xui=]9mGf۔Sw*x2}_cJ`Eu?..LϚCpҏԫEWf#aPʟ\{V||r=&3|KOP݀__=S+irRxr_Af!DH4R'zo8Ta QԳ_ڧ/g!2"bBϳ0:u0=Fw,|qa)p$]yNs|}G87wk5*3x(q%nnCG]-ӛЛ*Uh*{+iƨK y4jH#Д.NfTՏL<Wh<癧od5M{PG֐~=xsd!P(}Nc7hQg|ߴa]cux /wC\Pb>ͼD2 %y@2P95qyF\grwc '/aV4GUJKF`XkM\&XߍeG<헗chUB ,Wc.D+! {O=m}sa.XWXJys{.\Qyg͉Zu/;AG@@ݝZ+7}/zޯ]yrk14 a%TVz]KCźr<xmN[ ʷ(QקQDQx:=]EyXvRʊ3QfegKl Ǯ' {!%hLtb*?cOE dg5n*QEGr͛`w 856p ?0ہc Nib-κ4q|T?Wyi`FK @y _y/4x?0(W 1?G<,4e5I̼T-~ۿ>te6ŵ(L mk0k)$A47yJ<A9sd.1կ^C!>qÏ?_@U0U#0gz Vl⠋ .-gSR.jC{zD9UM=*Pxw-/e* Kf|hH?-=H >|թᾫOOۖg|xm9o twyjͫ#Fg![P>C G3NSXÝ)Z/<}ʓux; I`C^ iƭD$!lC!u !?ܛPbi?f}ýqla!~y.1+NІ@"Z凘Y'UF6SL,r/LM/:<; \v?9rx'luL cL2Bp%8XûQF֣EYYk: =.526EEjE,76-SNɯge }("Έ\[x^$nvE'޾Ym.D?Px9&C+4ߑtʱ6t0`ws5mex5Iwސ55{|{Xi;J |oէ2Nhu<ǣܺ2ddgˤI|[SBBpޓ <+$Uoý94yE` y/*p'z\r\DFXM#|Seȝ;E'N a&$ )n rktW.!2B$ˏOѨR!||NaRն=$VDV"Hȵ-gpt1p3@,G1[E4۫){Eq. zꇝ{sp#JBn1=nt.);ۉ/~Q潤e/,my+臝ܷ((܉BkxgcɃz8ׇwקr=Lhx1;~p{T15+@6a+Y[(^ҕ6{c~7eVnVrPnˋIaFX;ec;u8W@۪h^ ga8y bc-GqyTa0ӡ9#GW9q/BLO*L0A|̵zՆ]^*O--)j$ŇzA~ߧ,GM U<>83Xmo׀YC -œY|P*pM==X7˺egpbV8Z{Q֖x/)k9j{k=% q#`:|nݔG)tF9HA蔵ER" G)#lFPZ JjYO?sk_Ϋc;\嘚sh;OJbKIxw*ݺPݕgڱ]^[kӣS֧[߃N8rf]tr_oʖ~]nLSkXnL;ӿ/ sD0[ou'sI ;K++hj(`쫴g ù͙ tv.weɜ(l׷nIow9րq4Zk/A7gãxx6 Oΰу^4-@ Qt .=[ ɮ~mlG@kobзLǒiYtvs(' gV N.J7U 9N_&wagqx! Tt+Es: |C3 זt{ | W$Xa L^Z!X^@`ּ}V؊2EH@,z:a'V t3XUK c!R"`;f c:MFbU@SR[2w"|Ӑ<҄ oPRL۹}cWQW9i!}y'vr\0BNE61V"NQ9(QҺ;{=9˩-Dގ "BkB>snNN}ձ ֬$mǔD~<ɟb;9*@҅QF;x_xkOnM~., BΧ0ߞN_O?;>z4}dqgMq'c`d;l|1`~(ZR8B8}4bbY38ʌwib:L _髧ӧ_t(Dž1LJMtL_lNҗmICVZ|O/MlKg(j$&L}$G` Ơ=GSM&i@~/ij3Wc~7?ޘI2w\Uzrz|W%4;Q0h, ^.yF848qr@W}XyX儶}5)hYg5ONPA~p C#HP7mTM~W9˿:VVx&#<ԇVb/pOfҟ+yJg^um$A]%}u9O ś̒| ?rxcq{=݋<ۘMuxO!%PDf& yfk)Ehz a$tx00e-rmT9B6rDjnB@l0 [X,,ϼ0f-LOʅ2=yPxxan=)ɢHҡNcq\)Z_.^چӳ x#^ә*4VŴMSuAMkPv7m"!uSy-uZs3}CioΜF5N׵oE L>ދO,Nz5#);1?2{`ut45#S^?..!п;~7Q*~E8rqv$LY,vJ+fmk]o5V抄YazI>1`P}!?1‘ j:JNYߏ2t88`B\k,/g< z:x^tZyp)n30p5>^Zb7Oo)=px%r䂑'n˝â=;Ϙ:A1OՒLvw1fצglfCF~*!:fH"}n06+#k$A;RC>R2ŜDz"7zO7YY~^ V}IoQ՛P:HFؑA»4J޽^Xx[]P .  ~ ];iAs}b f+}["<.-צ Hq%ij G-קAS58.t3,򎬠<:pwVH2X ϴK&ZюKYj AaSV%dSN|\Q:ms2:+O}G /qmhSe}C{Ï: a )".B:<5 ,J\*9w]Aje0]"W&Y ZC"KǼvDu)~]-FAv}Hi0e$-=I2vEJS,c rO]Pv$ó!i~N?Bqa}"jcdq ȣӂ2&Iiy(5tcAXep"T;_5c2[~/%+e2(1í;֮kkp|Ϸ\GwO`$c;9c w7o?'ӿ?џ|ӟ}00=>O?/>r'уO?y8ɃlWiz2y,)Ee3[a/hlMQHn E)6jgscZὊb%b-G Y[Y7ӧ7oW`/#iJa NETE$mrU8R4ݯ\ xš2r/C4aހsA_SoPQ7J)`⶯$Dh'&vh" |{m([P^) ]5EC{=*l]SݒXϮWs}m*(7:_rD6 Ɓ4+ 3w'+q|a.3~cSÚi.U:Z1 Fz(0 x5 "ׂx]j6hwt,u蚽\0$z= 51ډǹMqgǴmx}w`oޘo="mwAHs-֫攗qsZQnK` vX 絎w!34xY(NI"ą@U(X?CzK0Fs_(!A;Kܛ'r7OLn{YJ(0d\U8kA,I^ci<*NJJAONX0잲x"x Wdz/0]]M)z=^Y* ˹Ɣy05+U2]9^2^;(LpsNn.ڛQyLJS-߭1iz`~oڣM}1w\_N?',קӗwG[5[!0PLP4⒲> FX[l%=c >wcxkm^\kXl[üfyrenw1U(B *lT B+ D *:fmr[L;{,X'Ȝka1s&"mu[7 Kxx?70*'UD90x{W} |FxF]8ɳ" cMJM^1,tP+-=m !~S`tx0\raj:x"F[RMby45*/ZAi2R@ҟ{>@iFk1: x@AVZwxTxWZ7ػ,^$NC1wCFNYLM$Bo.xɀrݩĈ)x f|I>~{ 53RCnzs|%Ä:(^)KEVQ5r:!n k;r/7E5|ûK/Ve#N'^cɿ;G/s.2|p |F%!c 6ݜ>;:ZlaQvkH]GXۯôt~q98>N/.ӋE'DyםlLP*kӃͽ&m3BwaD/~ACXV]="\Q3\<_ןQNY(Xۀgoy%Ag.SGʧrigwy7ڹ"D1D\ DtX[X;GH2//&^GM ;cahQ0JYuC 8P.:w֐PNg3^(Xe"rB-BJP0 A%FaXc7#ߚ?(&8 Go-b`bfN]=%eB_p6Ӑ0\vJa]8o|*s(_D݄atuyt,{_߄5֫'O س5/Sft+E/_MO_]vQ67>9~Ns^G_~G7}k#@ 777/'xi$3(՛t)4R݉&Ik -xAc$mYHNֆ"tMfw-'`S9<y7{\EvQ}7* "+9Y*X慼w#Q 敼) zTso۶6=XH'M?~<w_`z퐲ވLFˬ{Qߦ,¯N?srojV0ug@xB.oOi7:G"PێSXD[~>ݡW!wEy{1ͣOt';/<ǭw [YWn#H[mY4V0pڧFtePz>+t}i8x"x@7F30{49d|L8Vq_T. ǘ̉Q>c8k̤L=Í eqX_ZQyۀ9gmGF1:x>q;[?Y7MK gV8)`CfIqQ>hZduڭ\9FtӜ; Y`VA˰ D򈖢 (6?1KCPzF4DI/b%;m'1R0 k!1y{|O(9\\vxO 8XyyҔqE8/@\n=֫q(x/zb´CP4ƕ(UmWޯchцլI8>xy}SҌeoW&;mF\3,2˸()' TBhS(FlmZyC4,Jݾe}~v3G;V4Q*niWfqQn7[}i6msRvצ#}:߄ҳIw3Kel]miyot㽍('8p0ۨE"})2vbdDVEz}X/D=Hyvk1b[i70w!ephkowg߭!bnmք7b76F墼]>N:m@]ŘhV<qڨD'.w!Uh/:1ŀxӢG m/_xRta8%ȣQm<pqw.Ew\ )<YQK\цڙ9Ž)FE{t(39tژB/g ^ f.]8dޕ=H_>D%|w5M[TwN㎼8I3*L r7#;Ήgt\C5m//{#&Qi3_Z[2"g8}%DM?z c4MRJu^$im\c.]Xّ8 q*:tw2~_e Bw c:/s A/9qg!LBs`N S•I{LG-`\;& oxܣQ{JL3»pW%͗yڈ(MfaԂ Jz0aZSr9R'{9ϛ9IgN`(Ři=1LF}RYӫŵhvh|: [$ye8Vn^)7'WNH\H*- Nu#Θ{wqI6r(I^]Oϯc$W rW .&W;;=h˰ DXMh~ xB&U B9F? (30f=REiw(9fċba޻}iH;a>od0n>??ڨ1T˟Jfgѧ} BD*ˋi2+ YpkT-]s6]%STL秼N=(lqG`ch̀U3\AH0d욍oҒu5JX13.ms~P$} 9D*&:9N8=qq{3s\9S9u%/OR.5S F3/ I*ud!_ЊioT~uHAglA{+plz6!G\;q~HCk`>[~ڮK?B~WR],2|FiijwL(9V进cL%='0I'Bepx\n)6m{/0kD<7FJ:;a3Q&m޾K:ߵQCxN=ZwM^_Mݶspo{N#\I~N7 #C"6k^^<Þ5SO5`z^z97J`ΉjAqF {Pv6r\ަ3tqy=<:>2T͍Ubu=A{tzzQ:0-% -nE?Sgo3u^si;W zi2F:͡WLunmNy*b O^p\-'q(#+Ia)L'ރ<3 7ߧ<_5(yEZ`7ec+9U )/F-=$`Ҍ߽P;>7GׯB6j VCŀ^+[DFn>YBSyG/ hÑ1e!)YPZ|/Xo䪏 J(0͉ &EfIDxdEOٕ{}=' vL"LEu!"AysC;2o #t''diف;}*|j&Q[wmNJ+Z,HsO?t `lc̹l…p).Χw8Dy:L-C[D#ZLљ!!lJ3k ] ,͐>G/.nzOܴv1:#?+nwԄM/ph//bm1lgg8 }s/|!zB{qDc 14i9ќƒvC ]\S G5Eү|<2M B܍~(8I5;gm-)X\#ERph_ LGz$w2EMoN/^ݭb斂}<;:(>ûҖ#@1ar1!ёh.c Z~~Dqz J.iEV6!<*[P8Cjygﵷg'OaPɳ~7. ˈMq6CC#2o(<{nap I]oiz(S{v83DX2_C/Dq@MPr+;sp!wy>jDTox$*Uje]. w )N)<,h,CFDOa_fmQ;1BDB'IK*|sa\\q|c8+mN:z[DIS+K]6B%o-'g!?޿iF>v)p"^.eFu-}7pg?FZe`S~ C("é![.$iAsih<2 /MhWq?e#ҡp(kJ&DJ9~8F ^"w+f|k7Rϡ>3YʇWUUZxQ2VY,ēh(& KO>uan;--m|PPGJO.C߬2|Xa(cp'xgƚ!{l1axĂgc};X8-#(ҖFLәxUqio1q4M_pI\\ ϶V*Ӡh@GW VG5ܫ)gĩosV7Yw~>6.3D1:rk])Zd>i~2,0 !GJ(EfSECZD4Yл>?ƆQgp,DxVܔrӣL1r^Og'ӓܿV֛ې˰ @l8Aнbc>&*t}3LB 1+庻Ihh])bF𰮡h-/}_GU[9W"qɢl9^yq6<d}5? hJ, ~.Ea( sFyvV$Y+K0T4mDi~tu O[ 2={1][`K \0S0( X2SD .^by0M_S+M] ܍R^u) ('[BB5Kֽt۫/ҧc/<Ѯ)X࿍Q`w!p6,U <&F9MIHafglV0c6+_غj`IfbE(Q;iۨNF\(ʀ_hNguvtpW__xϫ^H>$qG hG[a+E%O–r :rR[q4QQ^5BR:>>:vgMh]ečTw41niL̊QeU C!;((<^Gʠ:F7(p K {4Y#nӐ,fLrEhzOf;GvZ/ X =k{3 jیKs(x^S(P<((KHV6ӎ6-̶F I2`~5`+ac:U'tƬMC+ W<;--0j%%}g cu>".ʎL]/RgJ~r7~AmZc-_݌=9ތlLkĸA#w1^iwn#liW-1AJv󬏨 C!N?+%rgJ~xsS׹--:Xdtd-SɈ4Mo@=y2 , v6 [FV&i);KqpzKG]yc&~k|5pk|,>%jV5 =j>;c=# FBOi8H;|~qGxmx{bsoiyΧ|ŋS)/rS;3Sy\Sߦ.:g16k" I~3Dkrw"vm&/p_/|;y HWrjLn{}a^>+xy5:_=TC{-IDLf q!YyuGXoQ!)1 e~I$ e(u0&arў{UYs0-gvklw F W002&.Slj[ %ZŸjosxmܘ侽l#Yi7FԓW!]0STsa³Avu^q~LTV#0F@2@/y 3L dﴉ3'P5T0T}ea#@w,>H=i1jdZnAa FLJc5 {M`6*RwAQeE gO1Oϻ98][Ҧ;D8?6 G]EF&߹Aýlt8FI$޽N0􋯾_Mӫ*UH{AT6~"XAw%K\zM)"ȳ~Ҿy;yb#J(!/ZV3l Ͱ.(W\[e3c- Hפ3ȱ C31nږyÿ(R(tb1["bQۈ=.xcUUC |0-'J[ 0)1;W[BӍ^v=k.Y( 7'o(-#\~^qs3)f.G ]ob=)%hN|pک 3cAS #"^pđO8 v[|`2f}w V:7pJ$8du~g9nM3j$] a  ė0xL|L1Ƃ\/CX%NJސ%zw죌.%%)7f·' O⁕w;lڢHS)4}31BT+k$!\| )`5NC[ʳ{EZa*$y=3z3EGwayw{;q1{voe9r|tzq;:隊(d\e읖eh{ӺƈOS(3p-z1M{kYxȹ R"wox"FGN&Ƃı(^;k;o Ku yŠCڷVr yfYFe,DCHز0$$A(' ^luF*PkchF`徾 ܵb>۩[H?a؞"pwO_O_~rz(*йK~G}8H+FBϴ ~?5މHv !y$> 9p_<|Y8ĵwmY~ŕa"6kn-x?LIm[)ڳ8Q@@/0Pun'y0I}Fk^Ƅ ͋'pΉի$ϴY0kXE7JcZu03'(Tx< *k1 v`(X]_wϝ"r6`wgP\N/9#go3x2߯I'On[t!tt0i;H.F$ꤏF !L.FmIbY஦Y?럤U^ߵUO l JXE>ptFGW>4x8ҤGHC_[;,7eY>{_J]ّ zM9wZ(g+ע A "Mp^Z~I :*m2=I4ʀީ2Ghý n@d@ԓ;x`Ke8Q5hi_ gN!h*/+1].R0H ?FyOS91&^F]"y;Kɑy4 Y[KUHBhV,D7u5RγԶb|,ҕ'8xm}::z88k4A7#]e1#7e.dhx XC`'1ĥQX)c*..΅y`8y]-3b$O;}THUTl#I3;E p`"b0 (&uaMey/z>d!݊Rfڊ2\O8XR λJHF0fxm9ɏb b<28dz[7Z[wgX]Kh_Er4Jꙿ]}d*$ޘ.gqJ> nonӳ \d~5B19ʳ#,&2`le,VJΪ,;_ #W~6K>ʷ[ӜE^S/维>w.s+"Ty*se6Xw f1?\YT4kay"46=52Cb ?xטe,$WzergQk YV,NvzP)FC]љ*=lK[_)P*9D axh 2).G̣>hʳ^T35#$6hKoJE(wpeYM{rpak:<#oummQxѶalZܗay q\!̅…Q A9`6ƿQFr/CV93? `43?=Dnr*1 i^kۼ54=:':xhm#U. ?d ]ce53raY-A\!580pq@pJat_N m5;+FXC+c`z+]a _\_f*'s5QB,$j/zqFw7-zM\3X9*FFKܼۢ:SߴQG5@ƚA0M\`-j4D ̨Y8~Wo9eڏd EG0f+M.yFS&Yyy0ziI1+=},2 $Qn1!\gPV5:+HEaǗWY?dٷӟ~|_=ϞN|5?rw?O'翜'Lgϧ~sӧ^:e y)1bz>J,ǵL%b 5e͒vp1zmVg- W;[eO_<8-3s/#9$}oZ^HE&zAw*sxjn*gRPjƝO#P:o^MOOӯӟ}b%!J^'Mg.~x?~2x2͟|`x0hAyo7tb譙vLFF,v";䐶-9ɻ1o74/:j4ƃv:ҌcPlD@ڞ~dw<M'b`Q pO?kL8G_`ݼO(ɣ㣽^>ٍB( عQ q#[^R0 )8G̡| '骟~| mڊEi C;2 obH\Uӏ6o_Mc]c-k'qskaԺyON^Go~hg;ӧ16;k;`3mvz$q`N0 iZmMVS%ba~}=}zsςF^5v;'IC@aps(_I+lH"d׬݇\ڬrHj8kxtqiϟ8 Ta}m=Ӳ|5$n8WqׂD"4xC0K&-wB $l<׀y!oe}qWahp$ >4 Z>,n{$Y!VQ/|Yu\?KJңcHY'ad6Wh-wE2BcEOd+٭|?_k6UFol3Di 2|FV -b$E޳Ar»FY_k2Q:mﺝqxݝlllu3 40D49eX#PD1Re$Q.#Y;-m FCEy|E _32 y4:Eٴ#S^LUϯo^O?z2i_>;\Nzq:=;$E e*KX ݍ00̭u:A۳R_CŏvG4~>۟Nw?{4ǻQwGII FQA}Ehgm:XX{k^`mŭ5b'21])OBkk4h_%UM;ӾOc}{z^b~3J! yxNiFLqҔWzu6nN#[$o"w`3=tb{wx$NSGvX|YΥ|vm0ݩkdM: 7NFk C QyYwlm ]\\&w1@6S21Wo.ᑶFz^iZK{xC%0W\.w}Fzm$# ;i F xO==~"FX4(ƀibϧoϾ?r__Mg.X]䢀ݴ&2.^/c@U˻Y@D)4˜N1BSuD,&s8lZSN/; #/Fؾ6mzr5NZ8.<;H&xp [Z C#Xv32u#F6h9o:9Ԩ/<73<ϔa|Dyڈe0yJz<{G)/I]u&mԫSL5 W|5et]On=F;)_|)#m淲" nTՍ0OoR)O9 Ĩݷ"Fq~/_O|~1"/E$ EH'd0 אָc NPߥ>;1o>!X &o$Ro+wv ;m֩bsZx,ֶ"dLW7_OZ-7ڦM$?+iA]5Q7~`1&FIӋΑ6pGNmOWnzb4+u'L7|`%vzob(0^*N )aIQpFz0z: _[˫[<}CzɛVL3r^if$???K snNs\n|xQp@:qKᄶm9U;I3Kԣƕg0'Aϛʡ@^Lj* 7%F:R?q1mLA몶7ڞyJ5d^^5]+t|#O}R*dH7Wj>h__<Շ Yc{hz8+Ӌ/=R<qQ;M ̣cu)~Lga b4~P3;7IAxv+T~yt&4:OWȲ ޢ?ڝ>?؜~x=pkh{u8Qx`K={B9#hXuHY"K[%Ahcezߏ_϶d͔Y ;=̙S> glwq wLq{8FQpG~MsEh'8r:Š5OلI,EF{Σ3–fQ7"6 ;CӬf$Q7cޥ/L_cK۬xyrUFc/Si(k_Qzi+Fa6ڍӑ1^=v-9Hic ֟ A2šP6gv{`}ILG jp@3F@`uG2UX]*L2!Ђt51}o\Z~gtVCOxM4PN滅]Q8?)L<%(1#kxVloF| t剧 om⭳@榈+Ni ~kڒ]kzh<+<21W`lTܑGG,Bcۢ>yʨ\MXg+WT\N(7Fǩ|IwFA zTrކ \)w|uY%Bd7`DV$1𰄨ɫQ7  EG]!NW u`V&2l: `4N`Z) (Eea<D eA 3Uȯ\!syf|/JGԍɳb3<.ÆWfE`bu {)ݽqe܉+ m $@Q")hFʯA:2P운5']6ciOOb0lW[$=/<%.[]Ӑ`hCmxRj@DCD0}W뽂GcS9x2^mdPr)uqWq WƑ# i<M)dfeuEtT&46m(xPfP!T yOҏaƆQ:F|/,3 s뫽Jyf3ѣi'feC0B^ߎ b$֘KZ%(IT! NơۏYãB1yygYVYh׏2PLҖB؄vNUw0,b2͉TLLggiYޏ`.Q~v(o'ߌ!MaJ`NNuwi ǒm;=#C8&m1Qj+c=O~t#J+QB1mMwSW#<ӦXcӶ \;ƒ. z0 oIGL;`4XcZ1"ǫ)==2 BQL3-ngǮ^}yuz|3j{&[!0p2DStejΧ8:6Y36b}vte b{]4xzza8+Mt vl2b;1:M߼+ wַic;ߓ30`Ab om"`9hB(N<vFseݔ#ݥīsfDFc*8;oU_ae=*~kob;\:Ʀ0F vVu*.3Bo@-e&s(CNǤaxTw|1D6hV 剩:zhOCژQhKKG:S7t3Y%Dk3F%G;ǫBT(Q`P&u`JmYm.';1aAݶF_jQo)|rjMj.&2fNL橏9[x#0Q);9gӯL?{v:Y S~g\/N.`n//Rۮs1aM%wڢ3lpa"e?c/^\L_y I.7pLaMvn3Q=iӣi/mL9o <}up7o0L'X=Q+N/vg1;K9\1kTП7Vޥ?l>o}?xc8VfV"7WY PP-m* [ RU l>K?:, Mw`4ݴ;J#dGf(}r2 a#m˧Dl[&|0:&’ЀQP4sp/Q։lpPD"hqLo|nwU hMT7tzkۈ^(? A_4DÛwӑu<"ɮ2\cG~s1ɵXO%E?3BYVN+#\2~1,MF}XÀSd+=6IRnG #$v oGrVf`׿]Y =7.߮wji |Cy*8kӣigw7ƕca$ǽw10oOJ}I{ѻ@+b95k>}"!9թPguGx.[!* !j fx0ij(˴ Ƨ|7*UB($m\r%~P=O` 9Xw F 0p8FT;*Lkd/c0MG La N砤b2>ۚfF}rݢ"oui<i=v/ON0PZ7CѮ=$웶mm~wo?c&_\_^Ng)[{ݺ,K p9W=y֝q xGzOQo/tow%x&qg߅1퓧PbI{N0:*^3Mi}ЪQDžvꔴEYpWvf%_^MU'z[V`lkOh'XK y;m{тoOWbHϮ'HB6y)T!yo# `̻(FKO>']E_k&xwж>`qҾ9=}7֓δ5=飭pkz7cn'}<ڭB6 (\1egmlo}<8<ٓDx翸>?ڞ~Q~?η'$}6Ѱn[m;01S׻wߊau7}x:=Kˏ zbzۘv~֢[O>=E Vi9E7-0B, NJ y׈XgcsD :5o͊~t ZDzxa{ Y 4Sg K:P?bx#/נK#Fi(IinD.g [8V+,5D yV;ҒqMW;z{E&+FV6VȽ&I6wUކm:@,MIՖ҉o 9yxl |~KoVؚ6օh÷wvxm[g&XΗf-ÇyJaB\( FZbWzT *!<){ P+^mxm(a3ĥ\ @y&(Ov0rR05bCYVO \r)&yS֢0Sh0E& o Sk9Z2yb˦]"Ay%pnN^+cvŘCBv2jXMUʳp8^M2Dmd1goLe2b!0Y̶Y&X{ñch0S18E6UciavOb M}v0~Oiғ!lnĀٚoIbh|ApsQ`=`ׯ3z(JZBD);1,yy\Sϯ.siQ@lloOO~/~r@Bimns}Nqxw2yaH0ߛbP}(gW==fg_<+jmBZyYklȹ8?b B1$`ѮNH kdWCvp٫ [oj *xX~CN=E5yDT'^ 0h~)̞# ]L?TO܌<]槾WW^ص+% 9d^<+ %$଒$y+m6Dc(Eߥ!?>lCu]y\wAwy iGrʨ< NĹ%yy ,|h1¬ q,2zɔ2O[elۋ3B xIu{e;': ##UOaxO䛫M}t y'2]D=W!1BI=z^H! `WHFQ/Fu[# }@U"0R @cCy%pA!x=:-(L.K =¸6佻{OcxQm e ֘+C XL?"ۙikPa߆9=<%ܥ07EoJm[ߙ2"WFtDg%Ϯ]wpWurq]+ػgj\̝b:ЋK O.C]ߐ)=B 10B0؇ft4x#k+p +QL5 )O*'s?wSo\hH }/u2==bEy>N?RϮ{Ggw)=ۚ>>؜`D @uۅk:1aDN yDmO^=kaNojX1NM0ϘҞ"58 l_<;}y4ukqNJ$/<<߾0|Y.[M';}t j0 g(<1Mgi Z@x&,פϟWk]f=\G{%G 5c =?Z~y. 7%.0ڳw4#PiC~iYk | W/r`'oͧ߇-. eIc pv8}Ȍw xg5u;sG+]̍n6'yi:oF+ʐۈLzXY pq1@\B I\F] rT&r1™1@ZdGCSԣ| hXIKjٶ5 !I_Z.=Ȍ͍`kh]FZWօtjLz78J.]~iY! D@q2pbZ+E-JPPa.uTF塌0aJg)``dzWn6D NRwM:nU14m [lQ3bX0, 8)`|ѕ _EpupeeQFSJetahsJ7DqQt4J0k;%BehaԦ,mR֕+;J|G[m=c~| ԝ0BlFL[KzRF-v6jMM'?Si[' x+` cwiJtA`Z17fLWIFu7=(*prN>n~Ϣl8F e?:i [8|5!°i i |DvBpé m%?9LaZ*'ڻm= NoPY2TنK[aj@(?߼ʿ*jWvJW&.0׳5+_\i -gazu'x_QBL[@i'\nC餤YڝMHHYڝ_Mzl.wu"ݠ;(CMPa̘6FN郷m@YWNѻ8zZct5#MxokD|5RhSi>cN nj@,m)s(!Gq6Eڽfsc/H9QVu]/ .*N\5D!"Ҷz)֦Xnރ2pC)MM2D6pM!_4D~}ǏIq&xrzl.h9j<O:Ou> o#ڣң,BN+e.KqbxS#CwFlG _ d ^ !g g ހa8 hPX=茐LJ{.丁Uh9et9wR "A?:ti,8 [Dp8;*Bw00 te#JI~aX"Ćd#BG$? Tg7+&6 j3siM14ڵ ޱ0dLʌr1OF[֧ЮosWfos hQpM[Jx3͛f֔YVaz i@4 6uMrJ_ l 5h{>|0<坲m(brUif.Ʃo#ˆs*.:̨ Ϯ'[:b1*IH~{u l_v7N!S 3rLUWu 4w>O7/I HŢ}(5vd#flVLSi~nt:x54"nbcZ GnOu%FQ~LhΎ\VrpAiHY QvSjJEm?9oxSz YY)cstJ ~y!]ZN[do ,]pnekPzrVU~`xe%T Yp %m~tXOnrUJLLjڪȣNڙ,,OVÇnΦ(z&3n%ԩ>xȎ,,pߗ&'П 1Dh䏯T~(xmA~TNm., ]xi%mL4 co(c謰Mf|aXƫ74s  Exp׫gwÃh]d5Bר<ɽ=9(K}vzӶ]jzttT4DTCYG4B ޞuRҡCÈzn*|m˷5v0yg Wr:aפ巻kHg)ɿ8I=lK?wrkjV3u^橴 "6So{ԸKe*?xncnbĽ /k*  O%~*| oL7!v=}7}rXɷT+c]<@0/}`]EO%g= orNSFb4!h8W ŹR];z\ߘ~w}T7m0p28w]ȴ,FMkяCz͛NOH~/sbjVgmo k(6=YNø(Lr=e&xF)A] ^0Sq*D {y^L"2LkMWYyҡk8ꬁiiOywΨHB<6p)>K2FKkM2ât<׶0`*)s-1B(x3F>NxhǨͲdҕg~~ {;Lez/5_x{yߏ0G05ˇ ,Q0xymoY(^8 &TE" ZZF(0P21dxh(fie VGQfQaPeXaF.eGaxEQZjql5,^5-S6izhҮ'sǢa<M'gMϥK~ WL0}wD)sl1z睝i3 1}ƹpIkSo;1Tyݻۃ?OW_~X.׉"$y,! o`@7rd3h:.mD`2}p_~EOU'!t3: Qz7(ϟ>~_ȹ.Q,ΆB*;ڥS7?+_ :ج?$tƸqtkXIn~N[+vuF,fg5y/2E!k+! >V8lMo^L'mث'Qz)79YNPJߜZp?>F%.ZtS3 n8Z |eJ}6#甋~~rn]u[Qja'zˆ!C[1BclspL'.й|)] /#[1¯pv쾵v^,GDAzȕoUi$!s>-I\8#Ɯxw)IMytGJ ӚwH}̘0\;{WfXxy1?:n;u|y0cZn2D)rm4-֧(f{azΚ8:po+pc h(&dO?ٛ~hg: n/eӏGvf;Ǐ^YG[lb[ ftz߄IR1r2}id(TM(L{BHƯ2-̔!JYJ>O[@S~7$F12ӅT!Ճtm>RxQLY/`MxeԬk2@W mf^0iADɷi5m,̂ ̦ӆꨶBl#];NJy9Toяc(\ #>K]_rR׼S2f$9PS6L&a~]_w-lHڏQc O~D!YtT4e.{qp |+X,Z'oj;jz|Hyg_;L=vbHQ5b'#GMpèsG]\ͼށ_MC{BXFL*KMc,2^(u/<Яx^<*2zf$?QEE˰ fޅ~HY0\OxZӞMUF *K3CY'g\ N!x΃F5Db-G|Q*Gpv6B(Aۖsud6|]CG򳦎3Ә}W73F~*F#}F`Gm.087)2eLaF8:(g>1:Gp´d9# ¿S`yM _#Q/O/S۫)؎A  PCLQz(^\{; j:;=i([Q(fH%V^!\đ'5m.V怩Tu`Merp̜B7w C1b‚a:FRʜVNAG?Eᢈ1Ma2wMc6vƩLgA ;ƖmywQ .݋ۆkj˵0]Ϭ`;#Lk *1CzޫM.`lFi'mÐ?N) F\: vp:2yaQ=ӟ0WP/o_]EJ#/h9az2Q֘:~H{VW8ibn迕~K Xc:icڷnpXMZI ̱l>})JKӣOO}nzzzuv7[󒼌~+Xr1ncݭͅxzz=oe=3턞 =ljVhs:~bW_Lg]Cp%~Oy_MԨ4a4$aмӺ_=;iN? 6 o%>);#R68fm1T?@Cԋi73i,(JWx~XO)ql;d\'6f nw$΃8m vӷbZV`C{1F֧6Gq,}-2ýӞ/suyYQjk)hX\e$hYp}*LĜ<6LtJ7q7MQFeNjH: T`<^:è&po]a"|'eQ@ZИ-x2zGG|cꄿ;^Mӏ'HO8!Bk$B0QR0HD1뫳̇'[$  đ_M=cbĻ_ #"ΡW 51 Vt^6,2keLPV$okXXF3tCM`(7_{rNЙBύ6 a1ٖ nCLۗAOyJ~?\ü/Owk|S]3VhAcatOXtèLw/̞0*n&q0FUoWIf@ nL{o{nJ=:ySߣ~-#RfV5żFV]1NZڐkkI8}?d1޶JmճIBvb٪ yA ~Iӳ$",^oGZt~t4w<<{9vJ?}< ݡ#qAz{Aٌ2%Qd5> >9#iR̻KڌVnwi[ 'ϟO|*F (%IOA6lـ6v_ԷҐɷoR?4.EaLfn#iѻIpH3EGu (u\I[PbެXL?Lj8mC$/?2 Jm=S5"uzG5\xI;%67p^^hSH65f #PxNxmc{pPTWyj[@/ e8' MSn"mfC潻/ok$CB@Tep, t_=C"Qĕ'Hsvl {N %XW1=^XB .f$g2T.Oh1#a:߭POX4y!pZVIvG0Bpõ䭭>ÿekD (6U2^g&P\{.gME35̣?~ "qz]R)`q#Xz!㎂Ѥ4 76 ƦLcnaxzxz/NK4^󋫦;Y`(/aoT^NR8;/wr 9i?Fi~fkvۃw& ^8ge( x Le|K/cA]Nb$^#x/ w:!3|hC S|;%mMIJQSb%Xe9i:g#G;NqQcUhwִc`mI<%rs~=[EqϚNwGmL1HY M;ܷNUm1؞<ڟ~?9afGLJ?0;XGÌ h[}1Ȑ59COiy4N iѦѩYQ^LcB|Y14@𤍔 HPYkvI!oP,rOA z坼]7%b] r3zc=h.53Rxl=[C)TtTngwЏQeKΗJc7:nxrj2e]|ɡAñ';95'-w!g8ю\E45BTf< T~>P̻Yvx u}ed]yNJ:Rl:öWgl1qMGN [q锌 <`LBxi璷2$!81=:\&7"[N1j@;mlƈ Kt 8E<)^"AM`Sg (Qz)Wyavw VN(84ʓh:~+7|P4x>x xyjy< t|z1\8:vI bezm e~ځem1SC)/CJzF ^$./,^&m}W}H0lP`j%?14L3}gl+k~eQ#阬z@.<_K8f@xK{05QVe?B:Wxr4{%[8lL9ݙ#9b]7`2N`rv|4卍;@F[UcD*սY#l.  3@Xnw^wgk$(ΦBaR< !ov' ;OQ;gmS:*uAkU;tjPGfO[P@&J21 eoF녾n}C% LGNb|]$^U%| ö!Lイr[#Ti3m@y}U6NW NʝdԘ w:C(ʠc(/Ϙvr#'nv$80C^t__:^P2[d޵3'1V:Nٌ)ʰ$TA\d`Q` k ;ayՔ% %&fv:i;P:m`5p>0I i7oD@;(QPlMGث?mҧDIٯT?Y a^ a°Ft T3}"磜 +B;O齫o8Dxo\A92o Ї]ĵmXU,Nd\Zَ$g F5lg=0WwIF`$Ҁۿ:&W&_0"g }4⧬'%^" Uyz;hima/ !"Âs +ON1<ϸ+(Hp(܋,'Oͷ1߾т2ݙ:bX͠ g]:M:i>v*UT"΀!#ʵ[ğL L˴%N\4<$ْxWQXr HPaߙU b7KXZM _"B 4̌P<塨ZuR 72 s)kN0@.([Ep w 3y>ѝbd؍[V;۝Kɛű2Q`֔ O ?=I}ԧlxfyy=5DC 6"X1z~Y Lɢ#)K~.uϧQʼK)+ Qc+29g5w8ov#U9~i,_{ +C=4FɟiO_pai]3["r SݱЏ~GLySAiBQ1$Ԁ |5WC+-oДrQF] o 5B* w6{gT>=Y#|[xv\0pĂC؍|vq09ִ ċ2|( Y V = k>(5>NY;"lKRL0B/ǩӧ1:th)(EaMDXÄ(*{30>h|2@Rfyd\0|)+vŅCAġ4`&5.HB/zjMvVݢ2$ {# ."F̻(똙҄Cʍj#&ta-! lV p`/Wہj8a(eaP><#-*{k.@5s2QǤ)HFi6bLuWa #7x(?g`l:Q,3B,)boFcG'En:pE$z |p$Np (B5]O!2,5<<{cuIh\5g]9Xd=#9B#RQ=LOm1*GUSD)o]ցcʈ6 y:;;M}C'; $Ϙv1 ʍg@{.VOzm%YӎJ:s3r:M1!P0h{2߈On|.D]>Sy҃ 04tQ l=`MҿES]uGCV;:k}>}ӑajY"tY0Po)ހnx\KV{2;<l:"T&Љw''L'JkϩrШPȻ7ƦM->оvMb0 o+K+] ,z?|PnZ Ot4Ի+բ2Fvg'qv6dJJa fFH[cإO*JBNw Um nIҷA_"_?h! QA*m,m&i#3Fy䇠 6)'6ӂώlzP #A4DtoԻ*I~}|O[. xŮFƐ(h ͮUQVc>- O;3qy_:NtJѰ1RSVZ>d)Oxm/0@ | . ugD ;b߂iORϘmJ>= p4h - q()#W<361-򐠿5i^F ~:B#VIm'/>GBZY^I7jSpq*]өlO?y|T~bښMڄAWyBҁ$Y"G9ЄĻ, YŀpC_'kO.LXcw Ocdtdz_a+y?Ɨ?mN{z{w[it^J"z\ʷ& ^1g_|31" _:i8=ŻG&77cW?/J#!FSy2)|χ-?_7/}GVFdј铦O@"45ΘAhPH|2sRuH ! eVMC Qb(ɏ?pqw4-CC IY-P`Qi5O;kW:"VR(w\e`W R9Jޣ9s8e| *y yټz*]i4<݌r^MߥfrhrD*xPLw<=gBXZ>'[>Yӓwv ]z1GA#s<{ND*ovw'G@1c1qK2t#["A,x)a zf]1є1WU\)ؔ̆A |̆6 Jq1L oȮ2*cHܙ dX^'#M[0jFPŅ|5B.T޴Py 1c0 u݁ 4rlS&E.bہovYzuGܼ( f}z~۩Q]+AViN|^/[y;Ŕ״c1K;&n8͋mMGY )C]!O7EdYx%o4ʹHky'50OxAa 7:v+M&OXp:;ӗ^ю2(6ɲv޴eGJfm02B[Ap wVc"A0g"HڤM NJm=O͂'Sf||m"hk/G ;8o Z( ^^GFqg'/yh4f :iʫ"h$AOQ!#QsㄣxfxLc@ POq˗7;փ0Ct4Hhm81ܬ'p13^$.x?m2x U\Eq2ǚY?j+F8^.GD 0d0*LQ$T uH7ka ¹7鬷2C;Hj(tQ^sL9Gr J˃6b@!R>*pR"x6HBԩ&S]3i= HpJݚVtm_!0JrO_2 (vt#v Q{3UG4B75ҀZ$ i?azQxQOQj1+B% x7oESAuN舐 .G|S:*}¨@Oϝz`hY8љu#K3(+T/3X;pҿy ȊZ/M _fzxdHO.q֠ФIHͿ=>lP??4A⩓|z|/H5OR2<3X1BLkԙ|CGQ/3'J7` hաFQmѕڳֆͧm8I1}Y#l/hDa嚙f#8`(My0> O E",\ 6j7a#RoDrDjPʏ1u0*A|R)ߕ2U 6zfKxȝǃ{W"jTý (oHvD&e' ; myǫd(wEwV=]rF,iF;DH}G|l^y [P?1]l}&E( '^KE"cW(yi 5+"횝r=S٥͵ɃRj=vNJ7j`_M.nڟp0ejUDڶ>HoҜQytrI^ u"u\؜>oH|Mnt=t_H-s6c$ѧ&Qpm:Apj@7 ` aΝmP ӓ3 I0Y~9RC$iS7OF^lY}3Ah<@qt o;a¥a`ƘEy򠴞:qnew~tڈ3oea_'4E1eEIkQ7]{Q> śt(u~,濿~}3JEk7h4u3uJڈ2famzv9 ӭG:eE'NY~anlm-zzIo1솿BaWpؔ9mqk#RS W(ϩƜO.Øf+Y2Kkto, /mЋ q\E2, 5Ǧz 8)p}?ϣ֏|6}zSC›f,F*("(C@ Ic,]WS=!myAhS |G7DF#N&y[!,PKed1t7$ziB2gF= cp;Ȭ<@~/#moLGZQ}Ձ2 ䷍tM˻Gɳ6z>lhX=˷m_)W=WY;Hc?7KCd>0 [CUBD|15AxyG=;= qaKD;{y` j+?,"ZIcK42˫BHɄ;)?eA+Q$)XEw4@.<ڦLafNXR~v93rzwY'E>=~tg'y'ӗϒbzίcSlo[˳2U1.l KF[ԃB%^J%p0PZ"i*!|6]M jwѳxߤMŋN@s*)û=y Xl:(m4(e`SUBe^)A[5-g1%:38Nvݶ>Mqm!% ăcf@2V/_wWmmoO"d.7J/u!.-VOYM0Z-Ŏ G?g?ʮJ@Oau24 ,ii 4 w cCZE E-ExC/ &yd >; MJʶdg9Qchc٨ ̍:FZq&"8} ffm<(I X)-Lj^;a F'?;VU+c ^嵯|R`~-2ZPM8zPpՃ)(6+hT؎.sSQ@C|Ӻhݴ`$}WVYƏ!E9z xІ_(#'0*oB mۑ -[[o WSuX&9ꍶOAcRЛ C@FS&CmakH9$F:֥noof/2|as..h)#8La#ӯxnnƣ"Fѫ+܆~H`ZKUwLAԹ{!e$E(J7+./<=3)Ν9x-1P&r(xyޖQPϣlSyb䃱@u`Y0fJ)FG!ƶ՗Wt֤3BRON: U 7/.ZflRs1X'Der˴E=]j C@~Ph1ڴi +Fī\2"ƕv ]mQe9EcÃU.],  MP u:`ҮRYʈWLH=S7V(^,[cP7V//LjK+N)@3'')[Q]1C [ã}ą3-(a̮Y#פ)|y?7 Sp EPy؃0O?}J\g >XN;q)"KWGG #8#iRly b|gF h1b"]F9Ь_ W܎$o4~)] jo^cH VSb@ԚնAU|i()?Q*2ڭeeN~Ï5xæo闆2":.AW3`䟷|d8X.eq4r<˛ޡWM=ρ wz,h2;Ѭ3BLV*$)"ލO& V֦ȆQXʖcZaxE?؆qrsWv':=EшɊy4@xT 2']gKCd> LD A%d5be*%Boʬ "=#6Iʃa:7^u2M8%"Xϖ2(=<9# 2^ex 33Λ' Eڜ.u8Xmbʹ)Iv{_kKca:vݝbPpEe0L/]"s!Wo/(QVF)smAa` /S&gcCv|J{u;Ue 4(VQ..L  vWm?Uu굛oU 'ڿ)f;907mNgwt` cAP-7Bzu`:\9\<&6d꫏vb`~z~F聰Wnu<31E/M/c,v woӳa{aҙ t:93F۞e$*F_x)M[NvGi nxsw;4Dcd"9)tM6r:ߠ_J;R){ mMP{I2䝋BjxoĬŨ^h!^:Áp!LO&e1EQ~+qӣ> FyTW/KTAc?*^PGVqu&  Ki*7y[2,ÿK| ܌wܺȫ:bpsi5t\צR1U֐|~kpa΋h'PE@WǠasVHU_aܛB3ۛ| ??|- /:ĭ!Ъ{7cCzCvV$O<Vݵp##0N{{<(5偆ᄭh!Y#lA0dHe/ڳ/`<Ur4eMDƒHS"@V{@ƤԒϼvxKa|r= ~4ܼ~;Y4NSW-FEXϣDyo; ZuFX;+X2hKŇ:<5ڥbP*|1'FR ky`kp{xQ ?:b|6p8dƉ Voo2EY7pS~ C7[Zs@\Y0͎c$etr.hǖny'}pIFT1xFn0J{ٲ };ǘ#3souEQ2L f'M&$-{99FƜ;2Xw? k-_GѮ$坻3~%^Ou,i˫sT{)+ň"7Mt/#sÛ -mI 뼊qS?#|Vϻ}G)[uQQݥb':V8l͵γ&]O~&cYXo1pv(ﮜuZbA4.3S&8$t{Myig $4HJy1&m~uM*" _$ u 0)o(@ N:#bSʃ҇3sۻÏrnmhPB TNRoC6uSz7Z[xKLpܚ^cA-[?FT&Na63Hc' "W"l:޿b܈pf $ Ot(C|LҖiJC'ͪPr6Cu)TFb1z=G  0FĔf_FגɌ0YAIs6B rcn#? 4#p*O8Ue2acY~ꎰ޶#])-N]{iӓRˎ9\N.g? !G[Be't5)0pH,Q(j|DPӓgp򆂱6XԁjLfPd\uu>ۻCᜄPۜofǑsywkz:ZnU;7>R f\= l?;J:H{щ4uԑ_Ua\'QDRa=;ӘGsVmggy%>׶Б'*lUDpu oPāt(-wt6!-&=VsMzA& w֌p@Z .ݥ؇64t` #..L iSp"Fs2z%WI9'p7iQG|5 "2kE]E58!(_B-(_:שȭ%]'< AwDnC8CFȎ:|o#恫0 WUb'{86"fX CBtTML ʚJ bޝdŗKėgG%їDPx; j&eQSᰤQ+c:1Bd7#B0QL;l׽V85a8aťvÉx:䱍$Y6G8X~7˳WO/mj?_/_]tuM|R Tf\3BZGD!FpijK3.іk)vudkz9RCQ:K; TJS:q,xܯ4(*EG!ř9Ӥ[E t t1ퟂ=2޽-EPVㆫnHĊS&Dt|+%#ڭxf7!y$x〇*#Tÿ\Xx|Û~2Ί*kj|[yi[?|GǣG':o| ֻf`vĊJw"WU༿{pܚ7& 0ZB;/ٰp?v}9"N9H j60YFoʃkB&B0 3ь2 +# F3 |e[aYz~{:LhGwXg}R3m Yv7৾RQ=Dnn[/hu5(mPG`.mL\މF18f džJGی-\G$W+^by{Ix,h _wf~~e-}%rG 4[~xz֝ 킣$4,\Tږ`!?2<{|畧*"`о!!T7B#$9WO"hX$K]8=LQEx˻e)P, Aa"4aflp(L1y!2bYeqR̴ -agk+NF⻡g#BCEԪ~zgFw 6hVƬ33lR=5M}\HIQKM=) euӌy^ ^kn?Z:۩n6Y'͞!娲?J$uχwm':AO5;;t9;( >H]?Jk`srn3ey=)=.;so|&JS,dp^VTp[2->L:1Mh3"#nqUDҖ :> K`w*OBN؎Q,]E$qm)>y!I34IXT87iǥ7+p_pdgDּԘ2Ho܃*ImFdhi݃!*"_P~X4x/1No}nmq,n\-- ݕ"Ы~a}ti N#Li0J/I Bk5w5>ٿ˛CD`|ʱ:M ^{Nne@'g8*pUy%|}!_쾐/_-QB,Gwwo[K`J:ZtHOHMyR4lUp,[uc#`# IL܌*&&{Q0y%4R;0*R)+&0 ʨc'aNӡPq w0mQ|~Sc n`Ǩ12[KP3jɨ?kOH[&ʗY a-yhag,#ڛJw/jY>?]y/c|)˝.aL6 ,F]nQ!K6Ԧꃲa/ {a(G`p_˸F 0Y'W+uǴyN){r|s!wElz&\k 667:&M:5mٝ*)&(wG_Y^:|:\ޞϾs=?؋"}AFß>(}؃߷ taC8($2wE3zI"uv*<nG1p6&BV5BY2w SN{^PZG;}Oق 422+vzCI~%ylzS'7"?ކUDzIY+/m<'*3EƗo{Z+( խ"rkẽA$UZo͊[g ߀8 3fkkoaK_AL| SBGaQkn{Kd.qtZ9][}NF-sʇڷiTtX=RE$G/+gȰ(!??_^D 9?=+? jZ$̭"rkvT?RBZF:qn|,򇟞%ø6cTc#9~k7.Lpld^Z2 acMXbfuY܌J_!$͚vKm7jmZf-)/a+bH &i*GƍІٓ zdb[ `7LffA"t&]ߘQn0u#ώ$~'I[2#awD)sM^ ~#?9:breiO.x{_{iJȑ?:[^ڇqn%uG08C,Bv2X!0u%JPv{scٓGRFL<:l%EWqN}@DQ4ȩQv{]Fa0GMtysNWCSG˿~lyt>->uxWGug!]'o NNPnS -m:8X? aEpû5AΈ⊃tf?2%m6APwepji:$ Fx7ʱQOK_X7YVF;]X2>ah^t#=Q)9&5#ߜ^4.HLFRzT)%auTK`e0򖷪kۄnT3" &qUxᵷȭ1[ߠ/tsyD> px9imħA> X3hY$z0Bq/si QDo6a*!f"AǗw)vʝ4,f7tog2(!>Z.q5/3%&nwA~zcYu洼<>iw [E|f/F+AacE={h<{ IfP!$^wEFaetxX$QpHGrE@*$Nr2L.Fcz͉R3a)9yY9 1/D0 @$num}NFl"n an ʎr{-~ڏa?TGPĄ}Fg8byI?O4k(j$Pݿ}67L`o??Ħ= ǐM?|僻a6ZM9N9!>~YJw+? ~̄'$c&k&e̠a~:#4&,5Sܕ1 O^y1/$hSB,'zXN/u'_M JL45Y ȭ%t:iDJhAPY/9DF@ ,t!LPoeu%t7UFHsƨ0?y"q+H**yLod0;e1 ˌ,2J$J;+fnxQ@("MZs~X [_z&'7ϯ.IIO?^/~yyJyҤ4yݿ݌0Xq%G.;R;G0~AN}YG)!hSa$O.4o~?:>Xo"EHpJ%P=\F0\ݤm:'3;˽;^#_(|pt/J+QZ?ܭ fYe/{ۣr{n"T/Ja<pݏ"aс7FЙ܄C6Dྶ:̐r]}b Z~t,?>^ϖ/%r͒Y,Н:W ZJK4{ sw-NU ,OgsӑwAA>&|ԂIx,' E?C>7u5qəua EqM+(9̬`y,a:|Bx@1#R۽Gp2Ƥ i_o#|xqpr]fcb' mc=+4E)<B[/a 8Vt#&}0`2^PlFxZE'h  7ѳg%eNw,kuІ̐>I~#CÊ459xf`T1IpuP-}]"] V9A$g-G ?8 ·^x=t(.h5[_|]Eg/{hm337Έܚ_q45r#*I } e!o DH!PQyyb0N ͨcSb|/-~UAWǟ 'y`*r( c02I?-T8m6b.t\ r<ƾuFO܌R,iD}zIœT χ oNifnxql9KX36q6*̃Ò9Y}ww(Ya6-9]o>j~g/,?.{~8;[II`4K)KchwvvDLݏ BXJ@c$(S4ǶcQb?w[pӁS;0.alόAbjɞ kRzv_bi2a*lrjV5&x٠`pj-үcu?xy[pfa,0=v?%wy0:?`- _U20(ϝ*{,–#Ck|ng̚ɓh m}_-ӫӄ)dz'k}=\[7|d?r&JBA7?vХ[&XoOJX4K[Cg=ѹmNo9Ub'!㴉7mdFMIiF9JYIG:{дD2LYpΎ) ݌~6IaNn|& n/ Y2h?xF;|"'NG+oph{WQ텁㖅>04ˠG},jyK\ Um[skEN4g1ϐM= .L}d]N?Lf!BtHt~,ܬʧ?_iQ CƦKOZ$A[ZØq?5t8p9~ʔK4(y_/eO^T_a 60;کlc@*FQxԙ}6xց/^^~17q!?7[E|="F f#ԍI !!4L2vˆ}ſ('d IPN!T IL(HY`nD 잁 [F9 &`Aw Cv7i$-pjQUQ0G M{ɪæt' HwS_xmM''2|vqכw˫("]xOvO_Xu:],óC/OvCWNE&tO.juNIJA>~ЛNP3hr N(:z<:ة)"nE$MQ7qS J3)4p("?ȯGI]b>((n3x{z9˼ ¯<-WsYme L;˝(o,{}򧤗(}X⎇xߍ"O=qG-("fFB{ED):K|nSD[K}3ܲ ӽ(Kz0?Vӓ7ˇ.N f#lޥYyțĽ-ㆾq1T^ AL0ef % ř<㗇7uDXd'ªe@`"?^2b&ILmZyIFN'zxf`MsRVFLIȸc\=c sߔ$d򧚊_fKtb|G]l LF{rOWfc.ʸL YC1 |0<^&CBHhOAl(~ 3o~ioͭ1wi8HP|Y, &uPCW(".JslE;{Ąę+)0wzG_x/+ ]!/iL<=~&4#=I:V~t iCɳIP k}@{{=켳 Ϣzڤ1Ƀ߅r^hxk~q ZFbzϼw '?Di# T:L+D% eYC1#a5!. Sųdt# IR4LqVԌ>FjCLSg%)IjokXIW`9#=-0J/n7X62,ę<Ӷ9j*$qz4S u7r'@Z2Qa2$_e_eSG=1l.a_=rm5oFZZR6^Ճl3t/O/"><*iK{q.EI `uн}h˯Mn>"yNtppJEZU\DxPjڬdHQ??MtDNaG|/m+~|y Vpqֿ(cmG4R湗R\_-{gJjXB !(eMq.Si9a-q2{,UW5؃o[qKoS?$e|E }V~?Z!0+(pN4P0<'zҬa}9l~gm7`L%GiHx2!I=<߇'pk=[%$l{[^6agxSwwwn[oӑ (!m Ʌ0,q`ˉYE.Ks~WN7Fي@֜-VcC6niFyb !v&(DdFP#e tv"`c&({;6FX8nN=0=:Z<͙x꿎KmcLD}t~YDzw 8pˣˢb&MD`VgX,o9~ -  ?0K+ Grɣ(KG\wġԨG-xXJӳSFQ!O>/iDGqEegq)ˏL 4{]qx,q_|rrq9f']/ s]hO].7tug$nkԣchO_>߿8OCmjȫQF ~~`u" nh۴Y_#-a8 m~hj3GY ᠧfͺiiw唎#9}S|~ P u¹]"=&Q~ R]%ka5 cɗn0w(;,jmI9mF=7|m3$z7LGLH!ܒo'ďw~uhhR~kn?5%}ol87K  4O?3TTwWɉ{kWJ>OEZ/ɣ\(w{j֭H: !+FPT#IG:ӷa3Q>t6;꛰=]'( C%r[#JYF 0ĩ.Q4ySHԄ!`IP? IG,&?Z7؂ !c?#g=\`=J9_MRS2`XIbqL-ZF 3nNGe[Ұ\lT)^4iWf ҆-<cA> 0{ˠ|=;eI'#= >pX}FkT@~!ף|8"']5N,;#.N.^.?8[~~}c{*)e\U 4 s'Eib3O8R\vj ?LZ1%#.Qxؓ?<'h?ݏ|uhw5yttniޭac%,%/|C{]Ni1#5Hp-zE[wD0>#m&K޵>%RJ։$L"D6@h i3`` 4 5ņ"W>p""mE\ A'۔}gn+8[e?Wߦ%v3qAy<>=8t= I9/x DN d650pFHΐ'%t} UDBG]XՃi駦_kR-x[~ͷJ Yo7OߠAڇ;b{Q??r,J9Ezk#G;#[EDη|զk%߿4 @C$#<w1#~@B1vSD,cFxL-$n}.kj>]I(b# ] tYGԮS:7e&XUш'xa܇APjln5A$~Is+W!:uIVNi{@!9|BRR6v̼B5wJ|leS# {{yr`ͣ/O. {_^0ws6؛AZL[:63BqsJVFf9܀~|`4 v3(`Vo e^6!(uROn* Q[U!T#0W)k>Nv߇JiOH=L%쁶H[.Wl{>ʀ(XŜ8f Kg6"sr#x:)wlN`;:_Tt*:p|`iʟ_X[2DuhLJ3  -H'Ƙ {^ܚf}>?[ͷo1_{c&'Q;f~5P#7ƒt7̌š+J.a$L<)=m铖( #_};(gU;;\^GxrNG` 8$I_mQ hoͭ&$Y U%tCj $wVM>IS)5/|'1[HJcga{`= >fd͓Ƹ5p*1[jGOC[xOx3{74q$7A?%I[r>ᙝIIW=Y :.)xR&>+w$-}Qt.o-Ƭ:CYj8Y7?{G!M\jQR B tF;O5+6Lfe(%dT'=4RB$8aj mAG)[#32S I J'0@A>BN1 Ųqm0Gv):F zY@yQ^flO|Q}K$8-j>R4V!/Ŗ[% S8.{J*wm_}qAQWKZ 0O,)5)? }"?GM֥\Ý JuسBQp ?QW;w'QzvmeUf->Q֏(AJuF]팈uԓ#EO;=7GIhw`գO:8.G)N N8yv\.DnnԻ̆wis w':rKNPhോ( 9_NhMGݣo >mmE30*9n,T!?o>o?O~M3?u>A;q䷥%^{Zܽ\{pѰj yK-ρ؉)|H'fJ6794T-A+I՟V-woSnͭ3ןp"Rneƕk;_2ExنǾm'*¯'_I'o}xZE$^mߔx x߷U'nG~qcن Oܞ~4}N rYK^<'p ܵeM͉o??֗ zTkFlη|Fg70X .hcf!LԼ=4#hNwu FD9JSTtC / '0 FB#!mUxaٛ2%}a&FN*H &#]~S%*~_Y1aQ*4%.x):cѤ(GS20]|!N^s(ƪ/X:"]p;3-&_ymt %a K=H'ْ'S܇"AR'CPO#dS (vIGqxNLӸqQ{F6EcR&(:ҷAr$5?Yʟ2j[GӞ>?o㫓Ǘo}z~ 77qU$*)!_~QZ"*T{ew =44iٿOҬ5VcO4y05q؄`g^kl޸O^g۰b0~f={>̟"|;~?  2R2k@-JGԌd}U"J/V )$"SpXP?Lc>5ʆ뎆 'w\\-.˫ Rns?p`Sܘg t<)1UY˔!u' qXJRiGo-nҜ@#\{h@U.U t9y#Tt1n|70RBfR%Rɟ"b6cE^Dxp_"?n>EOځ!%Jixͨq<b,a2(,eWq8&*ef"u{0eCQJι<˭&Oূ~H9gXlIP'۔z2oˋUSr-J}1u(k:y;5 D"5 #?wѶqjsyī*>;8͏p[ax~i~ ŭNafпTtt˧⹕}[7K 2^m8=q'm #<ę:'a#'-|Rq2[skcheV7z!_/q8#5g~ц4gPb {[qz>}n0`_S6ך@`0ԼٯavmlGGGr(<]P)R>.+uo *{BO?woS䧏L= Zk)*6Ԭ[ܩ2YA;[ı 1=))E12!"tqFeԤ!il%L(%;׽~ #6p sK  D;(GFY6aK~Ƀ ьcZD$ tz!x*Ĥ{Zzpʣ@Ffa17)#宗Fؗ;zmJS,0mw0C$H,ש.x6%/ !afZ -f4//iڮ?~ |LNsJf7Kt n˞(6 ^1J' Ci"|;6>;~F| UkEз7?_~wa<<]/?<=\Oܢn͋3?:N}xzg rTCߵ]l6%aZGR" NIC]quUʫ8g;}M٤-pnhA[QVb &m6aFR ^/Ӽ.ĽGZNoY7-`T[9 H;XYkz f$Ab<# SSB(F $x<8z6ܔ~<&y8MnXR 2I&O;wr'Nsv>4˳ܖ,r+zkn4{xËe1x6~fC,| < rs$ m^?oL&\: ?4tLӥO]+=!( 3Ѝ0pϒ;H/މ:$޺û-qlυ^|<F | ./]ƹ7+S"rk~cT&flq8a#EUybOb11m )H  ITȽL )'a$D W j5bMhDؖG%ƧLa!{D"w6 F Ub8ix,D&rj 7|[vT5_8<$B]S1sNeg;uJ9 QD>c|c$B+ :"ޯ{Kh{'0yͦ80k˧\LR–) 8R>R|Í;G?8>g>?H{K] XRzjVڛ0->$RFM~GoMm ԇ"d5NJ7x=a=@.O[ڟ,//{W1'F=hcY3c > /ˇsGy(LԇY_eRv0ŽlV w6)cׁF}\IOҡ\HS&qF{hgRA[78`,qA Ơ ,)J=&M{BFY/FڸJx=$(kġ#;RޘUQzLw67jm𸿽39oͭMJо'MC@c&=CHm|{+HŇAUPnKoF 5Ťԩ{G씇n&&&mx'cjqy1,",:s۬lͽM)=pv2ֻ7^,-ºynL̶F0lOO#WiU:>GԎ`Bj-V+#DfDvZ@:zh73 :'>qF{oʲ2oUír?Ļ ޥ~iI4#83<4CB7qIٵK2 [QFFK.nSUDx{q;9xop8@N֯//W'? ɹ7) ^3?0d[m=*!2SamVhb`gc+/+yC}\\i=ay!& o&-`άJGVfsoͭۦA,ztiR"(;սyׯrl'Д>I\IΡ}MƱ%ĽKf@O!{ g}7&'ͽI3fPߒX.ܥmtZȳ^Txr:L|6 asƅkͪnwԷ|{BDG|tF3BtXKHzBEʌFQo!-cY-&4?^g6òO' p|ũMU7# ,a|G(-rGFg#y#LٍrhlOU'Ķ> xG",vy Tϒ ԖBw!U/mrT˒EC\'/)Gg RnV| ⺗N[y.°iVmU,>wpX[u:Og==cWGQ&)8ۑiѸQYD}'Mn(=H3b5u3"tLGxS(/ϢD9I9ԁ8dt,'Qn(.ϮږQ4fX*-Nì( t%ٻÞ ޣD#qKrV_^Љ>U~xqysJ=i(f)YŝȧsGHM{Ixg ކc+Ɵ8F,.79c3|o˹!9iI=_S0phpw ^wT]u2J_yZl駟;#bެ≗i ()O Yܚ@~!bif8^64£X! B%("F-]Gl/K8 p8&išgm򭣗* ,IhO̬Z'5}yA ؤa>ҩ)s"s1q6N)rٕX~U>\[I'cn˛(%t_R3+:uݓ-]8`n4Hڧ6䦔\y,laKJ֛o.Η.QX,5:r&V;NVLMf^,Sly~rEx ifN0a#Q4{Ne?XX`rOJ3k[GC]%`Ԡ^͞>:-r%>U35:{؛oh$]𜰎(QyUb$dMyyy[_EvHlŃ)5M_Wa뗸λ,6ak+=&)TpsLIpbMl6o0$@OI> ,pUb~/ڸy t}zӤY%˸uߟ??<TбKh(|S-/(oܹ[e|6G( w353j' |BL)aH7B.'_($ SpGn}QÇk"s? n=tis'OCW$Kl9/~^wo;r`e!Z~x 8;G9 ]m<{knWlaHo*0 F^*lfv%pL*:s쿰d_>blG"QrB$',ؤybۈKa)"OqqF|l ;iĊ6|2h;KQLPOYHX%/yrؗb;-W=$ɧ36? .|rՋ7^.?-NΫRG:My*D)eVos8`n_al~pc'2c4_lwS2Dkise,3{;^X./^7@,:RJ(UF?61U:qI{% !^ڪKRU ŕg屻R^O2k lEUvK`uGN ܿg,]Rva)i;t_;#gELݫMf'_;&. C;b &&bA4H_n7y%Oq \]{ ۫ | {q_=pg|/dkq7"kc鋻eFg6Cg@ͷNbrL>6P6K;ɳG3T8:+چP$n-KѬ<E6N2OVք}vyyzu)K | 宣c _O$JeQEb&: \g;A䬷I飣wū⎲Xov$vpKhr%Zp)Oܬ8 >tv$'Bgb} uZiY묾e=6k+F7"]onytNK͐ k*AB̆b&_˷Qķ'`n6SG3pS> [K}CGE^Eg}Sp-g^c)L2RX I]8 (S 4D ;(, k Rc-)П(nͭEU?><[ypFx_7ŝr\/mot|ttu֢{8Jk9ÓOZoK2$~ .%9}3—NJ# R5K ܋/^,or_KvHi[^/Uq=q&"xuwV5_Iڎl#rTx":B3Uiw t?{VbG۲,J1J56·u%S:!ӛݨc )I`-CsJ Ӭ0߄œ%|Pg4e*Ccӫ܅q~5#XdwAVkYrb$d3>&aF>zq$7O4L=i̽yLL`1sf-cS/R2t>aoʩv5kAՎ$/x醪Dh︫r+DۣD@V|tNJQA$@!fyt/FJ$'  x |LX~qg40=;]N..;"o)tΦ8h߳>xq\Ss4ИQ8sbOX{V(GfC\VuAQ*Su7PG)G7<Ք/*"`B: VǮ‘FPBhc3?̱ˆȤ=F W&ĩOy$hfcj\J8`M(\@[ŔJelc'gzh]dH3ˑO]e+&3D DūT28$^ e SA-3kܸ M13so@Xu# v:{rr܉rb36( LO}Lu)AWVwl\PN:?.P6\&'N)B|܍$F<8 ,o~:<X(Prf gp/u`]%0Fy ;KR sG{;˯͞k̺ (iK~~س.՛ֻ4椬QyJ<)J2݉i&HywEE0pe%ZhjF$91pRJ yNyZ۫٠1IsA]JFK맼a.GܶPhAJU%$~ *)W1,Suw7Vrqh5)AR`x__oO35ʹ7MY'yO[=1ͻE KUtw_?}2DܤNqgDZ4`pCS`Svִ?ga,#o|E`΅K_+ "Wj fB7CyϠC{ TvJ4ˏn[G!`$5\jdFtIGqbN^# ގK'Vɔߙ3?ċ qmx*今Duf0#20 ':afWF`aXTa5 QBͩILO"|chs1iOY V?eQ/F&`b0_˺ԩF2Ȏ$O`d%%fcnfchv%J]9NVylU7pZ}n{Z,YM ] =:H;ORg"yV|_%mݧd徑D}(%&N][Z+w9h$|J%U rr 50X0'_N愮G":qĿ\Dj{zh9vbՑա)\OJK7KOWh[u 8m_|qff,܏j"NqʤmS"e& ce,f7/S]n'zqS.!+Ǫ'v(QB$.eJ@Δ>e% X7|hR2PooO]40hS4-><8pw0N#dВADFh&SHV1KS\##|\- ;wF KhH@ mcXQFE#۲?;,]*I-3~ϕtT%m?5_)c:"pB!Pz[E7b:mC\te>&ݮ+Gܱ!!V ,AP* /0M3 hiӭ-&f'%VxI[>4/BSޖ/v&<6^q{;tQB'NP=b]g 1ky72pΥ.ܑbtLLݍh(gC8vw89jN\%unv?,ڋ_v(BtU 1_ZQ ^; F,^uYWj <,0 }J(]} R#:ɓϼ '~g9܀40' qیjWSei5-́6@qÿou~7ܘϺ lP৬urM x/ut=ܭLzf[zbW 73j]Twuv­%8~`p #EŀK)4l}A@; _g|uV]4hV/6-OG |՝ ?έWBvR?ĴEsiw{7}>EU%'6H’?~x{ppJ5k5sL]:cM})%,a(j=ThKy7N BntΫ`${̄7<>#a/ JXyO^حc* 8#w-uoX'_Pۺ'aJK@`6-uDUڧepyi#\>3L* sCfw a~𖲣=Gh< q:˲FQLy^3P*E( pm[=uOqw<̉9Y{G(FR,SՀOS Gyfw4wK7'e: F3eո(]:XSLg>V#G~*@Ngjr69M\*կ)R#aṥɔy1C]{q: ߶wU^(۳yN13\JGI_3f3ncoc|>x\tn?|EnQu([{+ۣ}e}s`wqf p0E,=M~u)w)YĢU !cūK܁o+1MFWr_6;8CvJ :˓0I_!ŷ׎̀uӧOuO'jteT7/m~&0(O[b~nܚ[576'\w,$eRQ'19ֻvtc#̩_,j1).a pLg!mq V!X\Ae}WT912`Dv2$$Ĥ& ^e4s)[R wuk6I~D+ܔ}fxF6!}qf=˄FϿz;Ji20eO9?Z)RF;S*a϶Tq5aHsQѵiiZx>HaRi:U/_j)wm`cܘ}&\oX"z˽ҴWjWV֬Z~_8W@/6akv鏸#lYyh _E~b \]6<1A4XuGqrD;|wx tqW ȾꀝN24B\yn 74Oߚ8knL1}/|/#[F(!GKq3;.JdTŁ:3x6Cv3 902͓O4矟-/_2T֢6IHW*ȟ3,Y۸+STRѴ[sk^C%s(G#EIyń?8>6 7O$4 J||O<,g9z6FM"àhOޛ"2 z#䕸a 6BP0-Mu64M.Aky͘`6F=wޙ)IلyF$ma[Y+.7zeŎUFOϗ߿:"iA|~كqeCb'ϺmڒНVJP7Z{,3H}0E:7]:F}(ȽKy#KZI~[{S^F7ʛ-\;u^륕/ϻw|}&f?_cw6x".#F?ic͸|~7kRtXpa:ҽCQԠ:ՑSXfB/p0儛Zs;_M\8@pc[i븛e.JNũ»"})ԳAģh =m I/)j73lœy<$>ø\3unM\g?bD!_< ŇБ:% xS6| (͢,IQFwS3#@/A~P43 l0-cr,6 Ol(u|xj3x{8>0ȘGiEyr^/Uӗ2dt;; ?u-h^'&nǷxu}p/}z_wocx%,y d[vz`R*`-=ӷ#A8}|GŷЬ![E|톐9DoI,4Tal0~m]~Wl3 'gˋ7 /NWBC!nBZ",X%x\  N<# !~B0G f'īs,g" w+FL٠7I J8iY>u܄[x ѾGں =Y8e3I0p1MZ)љ,f!^=_Eض,i.2Ȍb J="cQ ¤c6aHC.?倖u)|߬,%ܛgyFtpN`E;M{RzL rxA$BѕM@I;O=IL`YR收u>PlRsEu#~`E׶:G`˸(#iv$Y&BH=HKimM)/?eb|0rwm4"*&Z eCޜ=;j//0l[@[0>Fzx/qbŬe;i~i f_}4\@w>}7䋠)O-Ly ~`}꓆}_La0%] ?[N{ LclQ{<7o[?f `YSEw%.SV>)J}OEqX^nnVF** Ǐ:+# ?.^~.%w}R*zK[af7>z)Z['L8<8Է=[lַW~_iwӝgWm/7g1kbIc}93/<}<}Qgww`=֡+hWY)Yo6}'p?Gŭ0ǔ^~N1?<,Q+?rWi9GPYoi~knhѼ ug9ÐP &F\ftՌKGC@6Vk[u~%!BĈt8ɗPC̽ 򒎕5@Ǿ]ݍ6;s3Ň7Qfan% ߸' r:>̐+֣iR:x#\˸ >ƐԭGF9Ҹ*a7m& sTn ƍ4w~ڿ H-O쩰hgwqzǻsF6FC mx2n'c`(w BѴy)Y(Ν)T0}kbyszV^ l4N1[)*y?귋drzvw" $$]OXr3O k!oKY1dJo1)5_ myGEB)&́QV.Apڐ7'YBlgљ80RNS[i # G[,1X^; (( v1B8FgCQn r F0̵|-0T{Af_8{dj xWg *ѪQ_086R%k+ʉ((Aiۤm2*S XFyhw)gSٻL܋¥ӞsQ7R/#8z:MM=)0Ns"n7*|́S,3:#>(Sf*S #rQB^it֙W/0޼2bOMo4,L !PvI]iAbZPMtihX-opA-y2]^:&S"Ip>x:})p)%?4_ D>~ W_>6W9^ c7b<|V)[1܄Y-ll2Yb[5<,)xZ^ow7kW{{exWLB4axew/QD953 8m̡~}1ֶ.WH/5,rY? gW<@"w79Je0iqqdp1h=03+`Uҕ𗁗? 7lJx~xCj?p N_HOJ{fvMupx*$sS'ȭ͐BL(憐0Ƕt< (`c|u}=b э9;G†ʜ:iΓt=^s_,A)S S(M}@3b Yv33nv$X3w mFٙ2ƔxN[x?[SJ7':AWfdevۨ$BR(v<6M(Eޓl]ֵ|> LcIW0g A1TI=<ϯϻ<{$T5uy^v*RAi䅪؏bFt0y-"9,xbhSBHl3hG+[z7G6^Oe )?僲ʭxx$qG}@x %47GTU)&Yޥڰ_^=n#y@+VhZf7{>˫Ӌۤit|fv|Kޱ6ܦ3wrik /[pYΞi{r_-MXq,NӚ0.]K^szȟ'&-80j3_W c^5SZ?Ƨ<\O~ֿ1rn +! c\Fi56 +Q  ,.t7@pUape<؍"KUi64*!q0قm+^,yF79Yw߆d;["ͼo*g墄ԭ?*>>?oX J^P̽???5k3Fft@#8"a<$W"\M:-3?S=Q)"|Fx,B(w=~Ex[ጠmQa$.JnSu}&L{ 0mDC_ƂiU!)?) 7!`L ;e,3rle\8LO˿_PFٻ3V?-v/(@`&ۈ5&e6"[)w%H|Mfi(/q0?)G-kJ{^]@~j,YF"mTMeȣ'ҖɺJeDz3ړc6F|cʎpgy3."~u6D08S}qI}1dԷFY .?%zS`^Fv-G<.RI:e:ԝ|RF\>.ߪOˣÃw$CREggyLm;LG~rv>rZTK[O@/u0Sᓸh͛-O݁S2tĭ%jPGA4pDW( >nq΋kū-j4]'iB6\(pԩRP]9콭 sFd0N Ă]HЦWO锞6^.MR>o)XaRwQ^ܪ3Z'7nS-fy=x(]:0[1;wSv,W: _mMsoR,x W;[ N6K~*?G<|yo4Z`#iv? cv+|{*䣏as}:]'}R/X~^?UbS˃#aeqknjP&Tb/!*ވ?D \|x(ˆ\GiR F@`,(;K9"`L>OyAr`7?qj>BtCt"阍#l0TT2o0 4DG\)Ej4׸/#V`WǀGS)-u!x30OKSx;! ?3 k Jt)If\5eû!OSI!ʛ(]] Yi$4~F׶1[f9ٛ9ٛ9 )95ZO(n|R٬޴:feԍ23xeKGLǩҫtV[=ZCq =;6=aD|:w7 Ʃ *)e(TOp&v~25rrz9̷[gF;a޷$m+ 6v -/e%FU, fr-BE].'s^ݾ9`]FeQG" 3e=M)ϣM6¤s3L#5)r=\;Q[yc0 7„1N2S`ZyNM%߅`# 31fSJ6%R+mĔAyGӈAUinB3%.ә'wOSIo6'$l6_}5W"K=̻.q*:z U*ʄcSBRE#ڿy1I%憾ЁԘ5+5ۈ"AP@~:Dm-1W#a ֎lZ<>܍W1= R8zgC:l*apֽl|_`5 N C1tt%{T|- GM;L6vT0?ŵ=ir. kFMLl> |hQFm6drM@1&o\ `K+#㩌”wy'j6NY^uk a̅r #]ߔ4HW:QVֺcpQ 2ԁTH(E(sg2;{>9Z=:LYX8"/82 d#(~l}:+G;*l Q3Hq#?m&#b7fiXWzƦԅ t,FK]o?D(,OB3ىhK!ڭ̌_b 5n 3ֶc>G + ?-UyZ0kz FX v𺆙qtVO=o0Xw-x>`b :l0LBgt[i{~N9MZ]͝eVQbBg>^%| c of㽣&O<ߋ-&,g2BO?q%uMpKU!wRw"g#0|NF9b~ia[ݿq TO̗ÖxvK#xMn`[o\?1;r|qM6L~`ی4leImJGo}FM˒yޫ㣽 JqvKb;.x7[%7ac,|zh]yޚ_c;{P|>t< kyV=%Y }4۷o;ff0^;%\2$wOqʐJ¾3\2_:[COKOk0AZhxnͭJ C9 c 0h,ٱHljGp% qToPo+ W |37]B˜!YI/v) Ubθd;w6 C>u Ĩ7GLp<7aU sI/A %~i5߷̿#(-G%xYW~PjlG[g!4o#OژRaw0[)G27u~Q {M}rs#OwOv:,0d譌.e% L>6W,Ӫcrmbcʟizu QGLԾ6)%1JՇg^(#hD9q/eg[( q^_v%GS’LZŸNXf.ֵo鎂kmjO{31MQE {$*3#X߆qX2^8na?;+˼'Vsxrw9|ag}/`5/Bi5L솃$qf-I iy0m3=!x g?$=KP wch+5.85{d]0,MM)5,S [h?~x6}S|{ww׻OIi6^I}xR|3QQX ngfeyK?Bv?pZ4W^//^\NEoY6rR8gpVS?9082u3Npo*˕nJKZegޚ[q&vyOA肇]@ULFG6DtVOhLJ# 7+!7!-/!^㤁'Z6Ћ D3`T/kN@#ZeJGK\kx5Xf)τ! U&"ĩ#?lIQ40p\`yYafeiǙUꈌg^8y*mߛΦ/̲˩>JE 0&Ӯ" wIyyrRD 6q|"k?EL=h/~|᧓/NY/htq@ sjS,ے:epI:(:oΗ<)$Npy}(!I Y(2#6;cVIQ[fF7FG5m4˰ޫ&Iz2hz}zǓi|u#pvq/:_0XҼ³ldJ:P­wi4}qO+>j}};wJG2 σ(qwz=xX vk=r'pCf#Fl'Zh#]u#'+|&ۀ2%F&-4)(;I|+bPѭ5_h@I!P&`.r1u~ǝ28%敐5Kef KL̬!2B4nI8w7vJ3~$;:u7yU ̌mm^sդ7Qۺ'60nˋc22ˌffZ62b̘KX^L 3Jfs[F)=@ƚ+cLQ&fZ*+@ٳ |&iaE eDӹLN,E ޛdҩkT)o@WԲӭtD c+rʏiϦIGNkAZ泥(JΓ*N6{p-؇?X>>%Oi(R姎 NlFm0i/.b򻟞/WQRS_W=՛Ӻ<9mjJo.t¨G0`V9ɋwmƑ`;>7ܗg5^~E=1[ Ox"|~j1_m~ʇ!sͨv^֘}7~̖F꒟\\3&TX3,2~&Oq*?`%kޱ(!u6_~ 3k~qknfj#!LKtqˣDDputt(cW|6NqjCzq Q*dƽ,;lŜcʲ<|o1!TZ\\nUg?"KӍSRF_r.ZxN˿vL.;,cET3@J&%,}`pP$ w<|kD¬qͬgp1޽%yC +32B0[a= Uu^$*:41/64z~~.= fO[7QN.Q , ]:O OJWTJ 穯0Ҵي3CwdWFzm}j'ʊ N{aY{/!i:46ԓo,^mޞ~v~s<u\F|~&ʈq2v](OulvLqm0m]/"*O"IRi~}ڔ>8eE@ua)h'ڠn 50޼Sn=̓r=x ^m.c mi=6H+K셣9Jqo2頂%wM[N5<j.ykgnѷ{m/("f^x&ZayP.3Ok+%[ .ܪ on8\M3a3 8Z) NSkZgG@xUQ;aWp{v`P?[6ܔ:NK^K18)3>("Sh1ᖝӃ{]_G3&u55eǴ(O؍ۃ`F8~i8F11e*/SosW@B ab &bX5= V ,>(sͩ8c/ ҩ_ŅP&##LZ/ήi:aQî?8ҍ͈u\2먴9tF5(\畯\.q)&`\XaVo~X>\^/ jGYOvu9rSbD˿SN CUSvm^eeGܒMKTf4qLO# -fT.8m"B.>onPkC4nC?=U]/H#PDN[yJG->9(<ݿy;8^n/o.~:>:H* x h zDsthxѭ4[0xE/qpƖ?)||(7aF7ktĽ;NZq'Gc"VKgilw2O?<l9?;]JʒweZ˝9(m9UQSg HV[Fސ 7g0N4R IB\ݚ[՚ !77# B%? JCqJ~;#B=7~` \7Oqr$^+؀S'vr/k<'=XO>Sa6Aqҩ:- c 0Ƃq/Jă($fdn=6 RxKa(q+uLJQ\.ڋPڥ9F٘>y.MҠ]8Tqf^[Z޹ĊW[j%Q{2 JWZAVvrf%rqvQ@TGrg(Jzk?'?|8(w|ٖ)+4'Nlԉ(eEv'1c?f|)BCH&`?E 5 |CS3f>YNȜu#/Bd0;]*6!Q\"J7{)N ^BHBs=k<񷓙)RL5#6IhB(Yo?#n2v#]c_p|~}d.駎u2$yC0c^ Gl;FS:ŝ_Au>ʿ-2ה%i'Z "~)^aRN꾈a/ɝrv:˦7b@咏FU·Ǵ)paK:m=w NcF0ɲumZ .{t̜tŅqp'`E?_܍8u1`.nǺw^G?y+v׊:m 0jQP;=yK,i=kiLu|YLfՕ44ZۻZ1vp:5L(&z7F/ { cgro޽2Mƻ[|vcM-ύU?~`A4xg]HQ=2??įҙ4͜8Qk'-4| G\喔&{ofv| *ÿQ| bsx[/yU÷/%nROsASHWaIx}Q6~0'er{ |rry%冑_ kc$IoCQ7~LG}şfalL'qg6u_?KXi*o4cnfݚXEc'G!!{N=yc#U#0KyAa2qhjWDN嶝$ߍX+&_q)^/[ochݒ)]*"@;#Jx2L9RbEyg EPFKKj2; eFM{vyuv{'R,A1 T3"9kʤd?KܦN t@jx-w#i[M Mqat#m[tr5#Z޵C҉Y]N{pBi]:1ƮѲ<-1KPhWw888tጶi|6I'J&*'Mַ|O;iK(Pόг>5k2%4y4wihC'ˮッtXmoɔ}ڄAIp6) ]2:^m)ےχo$6P:Tpvv()m3񵱺S?&˯WO[pV[N~H` Z^+o8l 5BJLt[ !_&NhK֧*ͲpR5B,oFdèƝ(-ϘxS`<ϗdFlXJɴݔGkkZlv밵|'Ÿ*dӭey ,N0Cp]]Aojn l^nݦU\N{r:s:Z_M.?H]*:ҟpFܖ"7JzQϕfNIKZQ^DZǬ(`3*"6wv~6@JVq.C{۝ˊYWn vh-j8F;ڹ0ã-RRMS"$IOYRD(7ی܄s/RE`sUY7|Q泋%0|mX^]Zj< ֥hT=is#ʭK  I>OG0(BXms7OI9] 4~[ӗmR3(vXC0xryrz&c}Le)k{=o'-ei?mi {l'X3>ޚh߿UDnmm yAK/ A|_^YޚrعU]>;L?N(<6StZӳ.% ZtWg4X Chc]=m?m$>lBWގ_e QD: }#GCӎ :rK'Hb86?ڦd"ry;#2;|3 *L{ /F_-#I/1{|ξKcBߙY&/JmY7- ft}Cm;V6a 2^yt͠^ƏIn6|qܚȱ۬ǭ"rkzs+%@]i"XGأGm6#Eo.a0Zb$]ǃ G<XKA$qqaB1 f?KX\[dTC= Rf&KG\F1>u(zP(:p 9`泌 "W' 1*`o2};b_GOxm%/,:4t"LkYa;+~V (}JS'pGNIon \z f90lPбx@o=ǔщ@tUaK=PZGC (O]r=ځ#DT>! JPv"_Ƙ GG*I=_FQ4rUmP76^ HZ]KEp~]{pH6>7'onڵK4L]7N|I(JW%pvgWۢ{.vkq AhßEҔ,ug>ԡg*~'kk0ԥg_b!@>bb74I]kϴ<., !yL𭺮ϖ~˙>grEӈ 01#""u>]Lڤu~y|K.M*"k7kR7 m΍;Lua*c[ l7%&рX$7 Ee7h/ Nop/Rݤ&:,ӹbDa` yn(KĊOf`/dx? eұ_%mTCW,[ mB)MYyQ8Z &fyg^Č m̕$ا]y?W,cha6AkfRƛN0&  cX6MrD\š . Il^x޵uO7 mJQO7qYsP7Va|m(xPpQu^\}jhue&~7ʇ;BQS*OIcؔvֱ3k9p b; 8-3n fY~¿͛4SHPyjtM˃GQxrOqɷ]{FƝ`-U~\ <:X#ޔKvHĉ H=u4iP 봁Wgⴓ[߭&8{r|K[|jgnqXyȦ|ړP!yU`$_m‘6KY'͍BˡZg 9^_C,h2y|siJiyq^mJ&Om4X51}-Noœ{^_3Zyд#1v0SnA͠=Hȧ -g`KIsš5+r5 7}8,8hiF/*|ɲ(vCև~Gۧ*7ׯؽٿb|;Bc3 {F Q`rn,ʇGQgab{R;ʼIKaˢŒ0^Et<ya܄ZGb[!MӶ#!`=43Ԅߚ c20iap+`LyvLkD0~ :wOD f0N+i(i bO'n:]׷ucOb)?o:wAzR ,Qlt2u&ftFE)L#p)8[> \;w c®Q lQ\V;d*"52 /1Q\/ Hcp~3mIpHq.a}Ļ*J>mmMʭ,}:F]L%2u2xak hBk^/NͧpLm hsɷΚ)UܕW;>_YttM%Ͷ 34ԛzM~(瞊nf{n/¸UD92ޱS7\O̚c𤽃{hCxofqW7W/(!l|#K&U Z6 xOg;ٍU.]")t&e^*>WAyXOq>80% V5CxPҌ0i9 Q𾳾p;ej%:x(e>WT峴OC+u  fxej"ջOqCxTE$F뛥h3<;h+ޅ'}p547 .%0 Bڿ&i=Dz\٘^o&xgOŕ7 >Yڢ5D>lw\JRj t:Hڑn5&< H[ci~Gȭ;TtD"ڈ".s,"Q0wo܊( I\#Ftl|7aLD9oDZ]Gu\HGP¼ptoi#wC,{F<]($/Owwاby?4S#0T ^3uQn2aSg<\6Kĝ -.jq1q $x7f=Ωԛ4f% l[%!~-yoL73ǔ7e:.24E@1(S0~a$u=1@rV(``$L np֛}PO]=FX1~puNyG@{tZ}x(;QGl=' yVLͧ&Y"SLI˕tj1~?閶)" *" 36em: :NYpԅN]]["4J2HċMuZr?_+C}AxJZJ@xʷHS[ၠm;f|6$3!&Z_%>G]fDtڥucYpgdŅ+w[; hlܴoOҮoҐ G9" PݝQ_L4 6K@-y5s;xjХU yg6z^˖sZM"mA6x鞐Y5Jղ}2h;N*3 Oz廛ݓQSxc; nm"rkvc 1 hAL:$a0DK`yUw /:<"=/bH#l2ndӦ2A:wT0^'1pl_ibئJ[$ˡhq0¦|2Իkfh{(d9m2q!;u /)3byk #~>$#=32^~NݫWnfWNE(?1 cFd3P,_|]u)J[$[0([x> i|K^S*i'WnB޵PԋG~ 3Kt}\[1Y6?1j<W@j`L& {B\`vv~~zy'unA|I_߾˛_`k\D57#uFo𱴗wO'η8czbEk};98UDnm̈29b+t8rdE07a*4&w9+[;ontI sXmt11; Γ `^edE`9p^l ]kHxB[;iU<"5fno~ωNF;:"bۉ_ð{+7O'7EuT&< YYsk6]w^l@uK0@0']˔5y³0ϖ=~uF eAIG[DMOwT?q;1iM| tsqÉVwQZ2wυohӱD%E@3[#~JK^IkF'.lFF뒾e7k.K9#eN%[7N{ݷh>b Qt7ZRhیbҶ6k ,KR26("Q*z= 1.o$޶qٮ0r[bGKBqN/fŗ!椡m'I&vzɊW5a;X, prϴ@'=`f$>ulv;nDMMSc.y?I^3< 2,7<)ךpe5}^/e&~ k~B6wó"2ٷJU7|\ԝvm+,yĥOV;2IֈVM] ntkd2Q72ŋ;=iM?2"ҟg(uG}Qw<}w{ϟ=mǒwe{ ϓZ?=g}o9J;h7gˋ_v,یIx SMu&"ϟk#D?/āI gS4v0{Pn#>y?6RP ,σ_+ҩI_v9їCKRմ+3+1-/N]q|0Bm˭iDW7=ӃrK4E4hĐ{} t#*ۑaxno}VYpʇn υ/t׫ߔa w)!#hW0ܓ?Žt)-ceCyh|;ʗs7-e;5qSY|w+4t.@Ų&8Ag_|(~Y}==WN} HfMݤG%|I_gbZ|/<&mZOs_c+z^tƯ۳N!lSoq枛0ܛFgQ9wO|by.Vxu Il /+mЕr9֗ȜR |s?$5m|ůpŔ܋FN 67/yԞJբ懻<ܗt#4:p^^fԑE/n TSF,=1H$Fiۦ^IWŐgC4t(%9NeBIc#%r,ulʥFLdhT mk۸ KffmbnFN)@B@6ekmg8;oc M_\0H9'rg]W~ m Kϗ/_U?ʃ(6Whylq'wD֐_f\:W=F4j%H~yFڪ_5meD'sMV#)ScD?|l~xii] ͽyҚCȲl*N͊!|AS3+ߌ:x޼ιChqP=Te^fqk')ϕ/10F6|۠UާmbL}tWy0J,LqW6t8<-t6hM5rX>3fǹdL8FyYBo:;،"35,5@ó 8}ޝ>uR=}Y? #WM4FPFQs6t,/_CNg$tN\FF`r[t{$_jhmװ#sL*,\qcȪx«6PGu6eNXEyVC%$<~0yM}݁ }$? _Q.wܶkqϧ^i_y$Xy*9cڻaSd ;.~x>ms/-:䷯!;/:hCMޞ=ںH1POtZwSei 0r|vɓ''~<'Fksço-:Wq]V|B<` ߳Yn ?3~QtNx9uyw+^NN:uї@2FH+]O?g#/ -Qdzk dZw>zmn=yQ.`#@@C0 lR%o)|4P\IDATa=ʃ/ͻːخ˅R6\[GNԉ_`]kzppx!ҳ8e S{'urU^8<찄1 s~!Zowڷ/;@zKx$Q0\qc)#$k+#F3(ŜD0yPS#aR6/ѡ(}rKn#:["a4,9՘a0` |#i4w@u҉9"% F|Gd(-W?ָş͛rysvX|ab/mQ>|{v2< 3'}: Gy\Jgѳ}٦lNK-q"nnjN5O?9RW!쎞,տWN;}Zd?z 1,&qxNO"mq i 1/l{5}1J$hj6z\yZ$wyi$Ƈ.zHï  DL/,vOa.ݿj0\FMnFCh!rΔ3oΖoYnݖoSpV * 2'3]/= 輹A7q'Ͼx6oL֩.{?#'3dy "'#x 8ec"A;q[^ş"ʧ%|M3<37ŋcxVAEo|ϘtgO:4Zxw7氹Au<>g'MyJQ=~壮[y麦?G6$=F#"^dC@=Ffʻ2Fr7F`"*o09}OmwwN/R7m_FV0 1t`XUgvN[hW ytpw*Ft"c_S&ummKվj:ⓣ|6ws w}";}Gi v#"G<r@4FogGCr0D4ӠKkGxIl4m$* Pjmq%15p񑆗c|"`!59Uh O{bVF>_/= +@2/վg{_Zj/c"Ǒn9S:#~j2$QA^o-ˀ2 u>}Cfҁш 0/Gy `#:БӔ)ܱ-ųM/S25LKSd =J]ѲI/צ.G7OUa>Pޤ4;)kB"O/|C\t"u>{y'y#D2䪆z@+C_ۿY.b0XM3B7vVtxtPCi2"<\aO:_=>,l/ "o =_䖼:^.N `g #_ԫ|ONf."C ǽϚ9'Y|>!0o+?a#w]Sx7/ M i*R xT=x@3&o~>[U32^G=aҫ8s\Wߵ5+t! :j7OY'hTÀӝ`$}ﰼs0 Kg.M铥N}t<ǻ<Ӱ sib}@l ViM3S>Qjsx0`4.R7-oTŜ{TXYs6iM^ hM䅘A(ˋ X'=FE9@w_]l|C,?2;O90ә$XeH#FD*|fAt5nxx+IKOr``Gnuk.M@#n[h2߫r 0Y/'c)w_ƍ ܏C`UӓӃOSٳ~$|4L Wt! y•%a5ZҮ9l걭t;*uҳ*QѴB}M)-G5NG9NrD~7Dvtؓo} h#8|LYxo/ i w[@_.H Si]q3&346qj4-[ٵH^D.~ \&54S 2B5 vs|B/vY$tR^F۶E(^ P 4i }좋%Q5q{TF:ق׉yQ{|yvzyu~"/h=;yd$KEi q_0R.:=]P1{vyPw!ǝqBS0D^ Oc< 6!׎_> ٓ/._~xyq{zm}~[F3P%q\YQSI9Лrq&fw<:K+#%O@[< "īG`!0x}`p}G-۷\wϘw6!H[ѡVy/woojHI:y%%<8<}wtiĦ,⇁8t6 "wuJ P;ROm=tf4wt m.xNOW>:5.rCu; 'N& >w}:;i9k\Yquwp;(FAw|1|f]Isv]We mڀNJ܋}}}";}$/c<b9Yx-E1= ٛ+`5@6FIqc0Oiz`#@XbA '/F~il4iT8[ h]f 駱Ë/ieXo0rq tMVT_xmOv`6Ojx+N8f_k)~!}A/12 /Cs5хSLk35wy9yQk쎖hO  mK~_ r\e|C^* =&iÒգq!8m#}]M o+O3dc00Viޅk)/a~ocLnsz>gPA0@|X;.(͐hiE S!@k=wDsηFszC ot:!z憓ky;=yʅ3I |Bۈ51"qIH`h9ԗN 6BZ)iLc o4H ȑ'd:h̳NG&- ̈́˵(pk_:5꒼?~!;P\\=},`Yɣ'nfMH*O a?{u<5|<6_g|rr`(@;9>,\-/s B<ܗëmսRg+@|w ]-7W)#}@xɇL5"_RW]r7\5qrIN֟P= !cOYT{FNUDۅa?Y#z ѥ>s'=aB*i4mq=ܯL[潷"Q C?_wrrߕQNemH[<2p;^X]v:t;5MU"a"7˿ YHVizFuBaxovD/=<~A/Sρ!:TQmg>2H[=u̻N{40{gZH~=qN|6MV'y{Mk @ki\uFѫuW`V'rm`#w*X^!vhpyrx_i!@̀ yU }` N5 1?c@^f!7c"(/W=ztДrօcęyp0La:L+) yc yMU(Uf:#i&# մ~sf RcQiiyEqܓךK/9da|7q-eu]*+tq/ɓ?\,O|2yU/i-֬2T/\ =`kY< FFCqnx+147"= [`|5`ua!gL`I^/N .X[_یvZًg!ӧKu}ajAݶC%Voz=4\ΎQ9ϐ7 z3ͅSP24 )}嵷GNnSI@x%a4dlįdnv*77m_V#*1jEf<60wuv\Ft y&o\{ (^ a܋g4AS8^,į:+2e\ƞQ ks_:_=>`eV1" c4/ %WέUdպ"mc6̔͹k~0w^23x~ey/]xM`8ǟ;|)q ?  SaP.O/oFӃԱ5\#¨:e[ޛ5:$zpuyQcWڞ]l s@Дf3zG{ppd3@k٧`F/\.?X~|͋W5d.4:mO]׉YӆA%9j|x纣]krkHefĈhFh`)@lѦjӥ/S(kjCy0`1>L}Q4\u m4k9{#q~8Hqp@°&N wcmj5 >o5rkAi:pzs7ƨ}0>~)cd =:} ;}rT$vsF[uy&̫7w4__t3ϟgS|y̳6b\x]\lSqpto.vCdO"yhLsV&yzP߼|BxyRZMn:M!Hc\s/pr+F1YP#Ɍk la +|H(H('zm4MP H+~q^!P ѧFGfZ<`֔1M; ?Y"Zeԋ=L} 9@wFv=B%R1uK|1,e? &$O!yl]AƧ咣3u PgKo4X=Ha,:_HCnym=_(e"1xdT5dUD.e(5Fwvc5~~1"T𗿩gXc7a[[ͩ~h?\1-)ƁtMHuO]vZSgG-N!Xe7d+'iw*玈MrGb@YÊ{!"=O''IɥWC$"k{eM.yI+|WCDy6rK]A߳Aʓ.?We> i^1Hb8|}֑1T+cL9~Wa9T3=)b4>־X}O,T}4^Zʇ1BNONϞ?y._vIzo*U#/u[酪>p;]G.^Իʽ h.mؤ4q{ D,7+?צYȜBDU'1FF#e|O-:~~g 31 >$ү!pX ߁y`߰NZ%KrVWio^f7m4 G4SS&^tdz|$N8g`șD'tdFF?d% +, xj"Vu tzmޖv1huQҺ:m=pm?'l_~G^'G5dlx|xϘ)o.f:A퓆)K[_#GGQ~Sr#%aEYyvW5FZ;nn#Cj[S͚ԩ/⼣x JHVFLZ~9fS we?>~/; zJ /_WxʡHB569‡ԳouG[$ OKqPKV֩{uHI]jln<~Nm\ʚ^7=q'{{㌹w$B$ :կOi~Gtӥi{ @v`"c1Oy$F] /^g/5 .9T͹eyi(?QWyA_K+4ȁ78b]yl<7w_G:nZO7dڎشo:5*g Y0Lj@zWU޷W摣XË. #_{pⵁYg2p h}CyLelk(kls3:uű]wBC:OGI/Q Ƙ{ㅷ 6Բ{Lt#b@z;WxY[/?|%cW[%'5RkmAby(fDgEY+ ߾x8<쑧9Y:5+}~ykù5uqF*Bq&Eq[ߓ-]#HqlF!̮:|\Km&-B?8DFLE3"C2=>#ٱL<+ 029)mұ@[ckvݞkU( k6)7cOn/fxxk5Իq9N}6C9򓲓TC$SG4!vj|æA]G&tt:_eJFqCo1[UT,?i1mF/sG{?|4-9EˡEvd~W!>;鑆z S!( @Fl=s.hpƱ?wb ,8 LF[o -57۫X0x޽m͛j@wd~AaQzq д{xgvG[qjyq~|o.߾:_~|u~oE15OI#9\V2;G*&eвC=;SU2K/1}GhS2DGx]O:B&kFLU8"-nF 3DGyjn؍h׺8M\.HMUo#U"IVd32?4tYy:r=9mGF:N[|rPtD#";}tp9m5zHZ 6qZ^x^xF ç bF_|v1RZAb0gJCżv&ca&5wa M칲j30CGӎ M|qmτӻK<0|9. E tMf񶝰+Hs$RG=r (H q@꺦\=.\K;Hn |Iq>PӉخV2 GD2kTs1=@RGJg~F93OryxfxG[OSRkǦDA}r s`dz>"uT ߛYB7(|/]%^% #LYxo횕$dO1Z\S#WLQŝnr uAVngS^<#<[G%zҐZ)-!FuRM^m9vuڳΈWK] ;k֚ZǠߪ+::aϗyuصsyQ^a: 1fLݕ~G@vY;} ژ=(2F{bry bp?<'ks6; mM=])R:+2}(̽ hğt$Hp03匡sL/tXu8EF-{5O2&.')ArH= 1lxvqbX'onW˫\F} n\"rhk9Dȫ<x~|epFB UKz (|{ LJ' :eS5s#VھN,c2>4vǒ8_I8ĭ{vF#y+L0ml uoM9x5;u2i2߿mzD8SNk%Wөn06YV5Is1j  )OؖmMK\ zٮvrs^6̔5.^YvG}FVY*G:$:5E9~n(F䗟njԋ5qo'z5DB݄ s"5"[nee$zѲЙb eFa%i_ϫ MSN-_,%_u#^.XNw";}0HA iT5`_V@Y8M@̇[k8i]A5BWm^69rYײ55v %lU|q|LzcKW:d2Hmo8d` M7i4ᾠ>dg(Q5n0LbM 5knF u,w#+IWO[d&Ȗ-P9ef$?Ƿ7Fc>#yg! '4VЕXs6+G Χ5UOu)ndF>e\?WUY֝if:gx/>=>\IH>kL˖q뻀1b x.ʓ0kO~#ְ©mfBa 0"y>Ot[\z1I'o.*Op)3BLz3e#L)9h!e%}4a'# "v}铦G"ڹi izeMrZ2*|iZD>1M,n<R)<('0r+?n31nƸWKT w{|{Γ>pu>]pObO\ qʄakzqj!{:,~;7߈V؇~6W5(-R@6]`06=WQM!!X}j#Tj.| @3]x!bw8e_8ݙfW,[cm$n 痜4ȆCĨtRGD'3/w|hMoHTvg$t.L&Gb K@xzTy\{yג߇3[W7]]g[AK~v4h7DvnH |83Ӎ8بȻ7 S`J[vf҈PmQ~>=M PHjpDh mh0#ƝtZx l`A<(#_?D62Pm&+J %6_txd^$} 7z?>xTp^,fTe7ȂrπܧwkT02~4_v>ȍ+(Uή[u,67M/jp@SR w1 ̑3j k\uJeE~9˘ g$Dw|E'9ŬQ[IzR@NK'm+ybh|ϖs4 8V^JgWAӷV$G1hRk\xmyٰkBl$ŗ?5<ͳRody}gQG׺|F=qۀmˡ>]9?{OM;&pM΍u4? _ @nn7ݹCyxl2MxS*9|t6)gz%<]˟:ErM=/}QdiO" wda4M1ӠG񟏨]yw.p^Ä?1_k7 0c?Q]' 6pn隳|I.G9ӑ0f=<0X~vK"~HXWFpf) -eQ@bD%0\ZQFF<|]V2X`3),)K7m1@F3.cW/ݚ(|!6J]5amF-_eL>1ȩG^94x_^'c/%^g- B֎o7"OO( ]+-$!Ǖqbzez<8<^z\(AHxa mI#mgm`Jd]߿ErNy}vu,4#񛴕Ϟwѿ7`+[giKP9dtMo}rRo|TQ>27]#{b$fIuZt8[s ? Ʃ~y梲<}Ҹ;ӧE w0mb? ɽцHѺƽ_7&xFP/ HLN[#]c hj˗+ [Q>* L0LhmPWC.ul'9_ F9A wHbOrd n6!k>4 o:brq՞8 '~GCrlxh+}tw ʀNkR:R5Ӹ 5nX3n݄֫t=K@o4*KA!_`G^}8 "//n9︝]-o{Qi3iS#$"CoG^::wVIѩ&eYc@ӽ#(nn W(O+c3Rh!즫V^9N 8K C]PCzE6#ɣC3l,yIp5@3&DŽ@;C> ;݌+GyII1c2ęgS5n}]d UiN8zW6~(7Bswet -?~'LԬ>i:x0L՘k!|sqyi&5\n=]_PfTeQ"$; R75L0(&ig1(o Æہ4ZbL25V(=;9@ ^t];]a{ &%wcṕ1Vc9ngD}ö]w)'2҅8rSȄE,~Wݺg Et蜃PQFYF}wS c`k:OGD"], 3iv#z{S\O,=o0ճT:Vgy9ZyYMl)OR&Pӣ,B!3^x_+)>]6y[/ݖkyza~^96S :.Hٖ@?yS!_|:_=֓U70YF[ ^:΢>qxi/!ryv͚)v@vOC: }T'<ƒO8z&ԍXCu/Ebת%Uff@ut(f#M~z.qV z2"~,?}'A0F)<#k2wGrgQ "\wiOvCdONch<۠^׆7 YOcm%s k!z^_,4wK 6lRͽg<<d⯩=L!NWZW꩞2bVc1%pKx[î(0"s%@O<%07RM1s=nj0DXI/gǽҚo:mpEE 7;X[dfduݓ= mvk8`Ф+R@ dǓ?],kHV73S^]ހ4 m yfq@p~tx[ԃdQ5rQˍlt/qC&n1_ӧ}\^]Y)@ F>UUWnV~)b>l"y[HI5bߦ`W_S'dB? _G!B.Սڙ:9wCyz[ω+Mz$rpg06CཀྵsxtD3 ~vuSdgM+9k4yamF`ģabލ'^6p4ˋ:ĸ y. 8>s";nI4j-5 trw{1BF4'uLqN+0Q?idLñ 7 b [{ tFҊL`ip|5\*a,8^'O4=8W! g<ѐ5=No4WFpgyHs,mRM ,8:jr/,=GiXRv .H P5F j%-\Ȣ>sC Ye)M)$ƀ&DgW:׷0u_]876Y"x1Z~űeu.֦틳o~<_~|BN +(s8hGeפTW q+o{zVNg $1D5\xV'#2i#"GDWs{uax':Z#^ֈ్D3 /Yk!8:7g){7G8ĭK ^k$^:#|k<2VĹr촫tIΌu%3T7g[‹: c}>WXN;}ڴ";}(ilӨk ={݊3 "|a5BۛMyhBk!5핎cN2=gp9ՌU|FXv⭼˂>\|@FHF~#8-B\wPw0@܆V>]ПFWan"VHs0r((g+ HȀ$iP|uZ]|444F8Fc1#, >Ҕ`'<D>a3 [Jr%r{3V7]?zԺr*ִ.z#~RLiY 5^^\(!qgW˫+ s8>] E)7CǦ{^Z .ruy|xw,(mӮMJp9>2r+Gšj6LN߾x0Si-KnX"SGll]gtTVה1#ɴ@|ߞ)1A&<)T~>#!'d" AHƓLRGx{:̿Ƀ?Zaٚwo9NYsNmFl)N=WL< vi7Dv^! m?F\A5@éѴ8Y84=wldmĵ_\4Sma}"$振)z=#bTZdJDN=E,.:e)̒o|D_ҹw/AzgjYxvK@I"[Ux_ '@,Ol,V5[CDn.k‘;y|RԶ1B&=2q0cLyNlqɈqiy5Rc IG31j<ASmӔaeXOXWϹ(teŴ(]%1(jaDb/UoZ$Dnƻ<)Wu1v9??/r#F,?{|JȊWu}.G] ^i?w]^S*3NaL\x;. \DұU 9f3qjXnH$+͋',; + OS}@ gυk$ҙgs0ϓ窧>.1|#ǣu$EV{ڦm6+Z?d)mZ$wYW6xUn\O!N>yON,M×*F4|{D{8v;C8}a Sƴ= s 4M<\l 6pXk=,h7сOa <@bz'N1D9pZ-aL{<ݚo79~(_n'oArHS7Q'n)]N` (y}қ30HI K7sz*ْO0@=FF׸`›srhGӣz;T!' ]:69k<:YciFOS2G4cG=mB} '3 {N#_lx\\^W#BE=?$ٻyD.<hYJsT'c>~{:j=yJnbN$Yz)s7i51͝V p^pvݣ7ܻcyǔas,WI1'?e7;m-~e}f@6*M Ic 3u|vC}DdOLiܶ<Fp c_TMF pP=Ќ Lo#uK km 6 5xQJ3 G-M[ , :5#89Nm-;_xnnկ/3RL94%A԰}Bt+vruTOV:1dqFŐ7JGq[o5pMFYƂxtmBa83/9h1)ǔ!uEf8 qe?ukeI ˘.G2*ۼ~*W ԝۄo(VHVoNf>/ꤾ<#Hͳg)a/. 23N][+GV$EӠdL߰_Y Un|{Fu$KȈ8ʌ.A<ӑr!0d%lɁw;%ݲ3Xfk}Q:!*in#~i>iڧfIFN`lOkWZ۞ws~,pA\LϽF崙=:ȹ#44𾁞A7&(-.ijem7V\cow"ӐrY0Bv/Q@ #N95PYã 5כ5!fS$< 7$<?MZ¡nfı) NX|.QW^܄UW]B0rPLOKd#QC3?~V51bzrg%,}6j$-%{{GgTɓ1ZsmjVs5 9;vzzzY-~vK. uX5z[oίބ"Vm%4u^H'fO)LSE5OK]sRȤ?>"FF}:y5B"{GnwCpYF$њó=gG xC~@xP>Fhk"S柳vmޛ ~ ?X,N <ճmZVG#Tv铦 +FZ׭ksֈ#o _1mT# uz\K(Q tȥ]i&--|H k&\#7 \*X%p9~.rHYm3"Qr+c;<-}LIѢ]#Eۨ @Y?E1(\dt˽3'V!5}f]UF:cC{}H񨍕z:Lf$4V Yo=Nڼ^%7} aK)*Ou3g:"c<4oxluѳ&0 7ǐ;C9×g0kEN"~zf<.;ρgpC=TpX:oڞ\!qxtoy6N;}";}dF>t 8֨k{ )pW:6BmpXh3%C^8r'!? h4ꭴͧ^N|3 S/_E'2gܭ/Aj 5t0.^"2ꕖnXWw_~#'yX?}LQxd4U0'P,mUp^*&x}-~勜;ƔȾ *d"FN E47QfH_9}3 ۪$3GY}Jܣ/F 1~zE Ó~6}x3jEPr Ӳ MGAw s̔6n5Lb<}zҩ5=MfHYҦ?U#jT1@vy##w&䪯lv^ҭa#@}ܽ6ψw:a_ώr`>q$Dg5#r>xM/a@)1;e.awCd>} >i:y4 FGsFT1B^GG˯Zg-ǧIu|4ԕ5|u:l9FȀ ƃ%m0ms*` OS,W7*5׀qD;詮l!gqzۓIߟ(@,@':AЂSq@RB5% 2&+S o_X;dM%۰ wG #/^k/fjYh;qœNnyǨ릃qbĿ-ujK{nާN}Ψ Z^Q x+;=ē'C5kUɔl~{'xM@Yӭ0O)_%89\fyW2\ooo; 2` \]ԐSsAi㢽IÇ 'iśrȴ/y]mt3uQOp|5LCxj˶Hֈ\"QpIyOs %4J${GᆄӱU76yqtgN}ƇCXnjʸy&Hu1oMJِ*ZSBL q#:6_#Ñn~7Dvӧ铦cN5울Nq2(~`zo$99gӶf~r|9]}ٓ0Gi@sn?Y##<@&fh5dx41*?I>5܀⽟˄3 gxO^lZ'L`(@ cT{wCxCƎEPl<-kH$E3R3`Utl{A}1ۓYMؖe)- LT= b{8SV4 f->ҦmN;InWO 5wsn_EӨ;!? 0Vk%vmp1'nqTUɓ'㜿?[NcX1XMOyxr_p$q zXmW\7' q;; _~lb uß0v2$<=ut Öh'ڌz4͜jh?^"]2D`ЉQoȃ?3 ]xuʨS SGB'F!T"mYz~45Hrt Muk0F gN2i`?|=QSi]=`я'1HNOOq ryIø@9k?4Uw֡P-dw\c$x1+-XC;uW4q m\~Ydv1, V{ר v ӠjZeֳ/nX-ypѨ:e\hLS8eaVikpMDmU߼tF7㨛'Q0OJnxv{Md ]OIڸ:e؇ZI|-39k~ۨZJ9L 3ō*0EWƤ'ߖ˟9\^z\_ߤ7//#A ?ȿmV_X71 ϚUG΍?䙓F9驇O D~ү7k8u3A(Vl#aY臏iȽHDBYCvaQ{y_mCT50⸗0wiݓ\I1Y5֜q{yi\wi?$ >Y: 4@@/ø it5mFCl4!T57ۋYuh236/. V4T=֢3'|=#tH?k5^o5D!7 Aui*!cg{ISzFD|]~{'͗G.{( yO9ȓw*IM6+vfO#%?yve(y-pT>œ0Wwi?8 >Yzt_#>f f7Q7 0@A Հ \!FS>_ ^1J_ 2Xl|u& ‘ђ'Ogϟ-_}(q ރYy~]EX ?@7`5 (-у{1Oo$6]FvI{Çp3J,|M.e]xORYr!\V?ZD7M];| lM)[ |u3ߋ~"o_gu4\ =9#nK . #iק-'wuMhʪ`7vj yd'yz:CǞֺa#HiV`m/al6 ʫn޶#A"eyK}5׳u;⻘Id+GzBύLRxqS4G~isѵz"qx͑r.+zYay`Y'28Ωoc'G׏a˸ WuoI}"A9QS;z=t9yS6Z\ D5 kFX*^IQqc,"s] qtxb9;|[PmzM/-;ox+ xӾ"ʡ_NtTE1P/d|Ee uo9!ݍTw|mT6u<@dORf{ٷ6b|d ,֑&Wʣ8bK Q0Iw3uGwT4%bָhm!j֩|q|?G}>~=;~J1  9P~5bo|]74k8key|]ُ!,)QyG9L"3Y%|3"2t7 ٪\ѩJl*ޖn;Lb twv24 ϓv oCF#ppxڎJ#zgAq*tQ;n]/4t̐a1OUV~?CN;%/h`E[#{ &wQOZpS,*6]O2> D hw}A6MLlCuO-,'y.8%6ES9?{dOx;w._~ŗ_Fm=dӓ$rW4 _KK|.kLc6歹xqiGoݑFL!0/V:!RS-xW{>r0cHCpq{j-ҷ5p SGty:2(}3P<>\ys߿^ S0B9~ 0d@؂# 9s|'CmpV]o|×-'95}|ॼQ\x{Ng&7xҤ1t*FQiLORO!j'Pҋgoo(މ#fIVvPfP!PM*C;0Ww#"SS$4r&:-  Űmwq=Sٌ!;i}c(7[[0vi";}+˴E0E`Ƒcxha17u _ա2dvع[ JRJطғ`q`cf}$鈱1l^ %qYר2$FP,ϗjyiצFˑkpU~(2?z; ?@xn?[z^t!y#+alO5|O GG9CFЏRqċW`W)GI' k 1he_rxw0aԅψHNk;0&]Ȝ0*:u%(H-vksx)UwUƢU =cD,6H"O!bzrPop7Ue*z/GJ,<+P|uE}śٺȮDNϊs0 suEzKuj0c阮H ސrrE _x7e#OcQctt,9F_ 2"VCd[b!zchk5Ƞ+e`p3]Ĵ*  =z*T*ND>??nї) I3wJWˆ_Nj^5,4=x0׵/,'AcQQ 'Ͽ\H}|i((`(5,m@VE 8:W$|@9ތ1^_aYR>t[ބ7.BdMLn&eJ؜vw$wTX5M"Vo:m~Tޛ2EƁ=PW(d3y _u>–6\tK0[cLD62QxJè  РќMFl_Փ10jyŸ3C$nM|7:0;5k5D/'@ `PB& &jM=i@;aP42q!An3˂%n-}P~MbduQ(LI /FNejy$:*}?.ӻ7a6:J:ҚO\m[/M!]"*lTh2qJYyA/P߸30FFQ0VYTDEîy؀_Am܌24z.m@Қ'븽'񰗞)Cd7#P2n!ɯ|#Od' $s87 u ʄqDO'`qq+nUh7Q+QS!U&w:U˭‡֫Q%F,/~'nGJSxo f #<ё pM(#т]0⎟xio8TL;j4%{sWM#_mTdX9>9]>g-s<_NcWPKD˅Y@0C3 3ji>!AiyM|zp܍ty\& v{`oۯhGW@hn?YTXɇ'Ӆux>dG5[ czz 5ZiG6T5#uw0x%-?uBzH]NM!t:cE]sSu-J5u>8,N!r}յyak>J5D5:.V?i緆_FyjtGQ (n3CoS7fshY'FZ(!t6Wp5<QQ4es@chN}J~mtXST[ċ\)í/7[V[y I )YɰN;vCdObh570i-l_nz{Zo8ࣁH\dQړhH,XqSonL !!>`fĶV`#J ܁2p[D~dh\C)f(/6ګ˫ǯ7ÀHIu''1D=]h_.'O-Oj ( `0iJ!K'g/dۂG3L6C'S:t¬|kEB>^3ήo+l{үlʟ)y;y`-wM  I yWֈX8jR(u8!BO)`ãIp={yG %aySi#\T(RU9մ/W֌ ˏ/IeM@W?]'r}u{4O9}%?Q(WƆwҁtQ~%᠓Nnus7j#9gG] GGYףSom3i?\9r?\;%St]2B7/Qm$,ƣrё\W'Xy-{]ܕQtiH]YƄV5f OOʇ-vA a!] D?`9Ya 83+}01Dr$??eکhtZHt^;[yUV)e9:s>|߿:o9-|Fx[&y '|\3XՉTZ_wd>/".20h Z gQwdACb'3%S8zfcedZyy^p! %Z$|9{>V曑H5riX;?N,=XLc_7g@x!g\Vb  _@s`F?[4 : ~*,rgĄ!Q0@v\Q2 E^r9Y:]%r cml0: ݞQWe]cTC 3K8%|漠T\22? %K1x,?|曯ov1V,b6 C`[q?=k@$]L_Ȝ%oHN9< }n]IIcKaaȠg^}}a«mF2T>zd `}=\9,roqb4̨4nVg5XTbu=YGBގ/1??[./[=")}qkTO.'yfȰCӦUT'oX]"Vަ2N. eu3hF`(\&n;y'?d0:ztDE35K]3'M\7XϚV<}^>a?ro&JHI`}܋\#;ih7Dvd(^amӻ~1Z{ď~i@}xATst/ ^n SŽZ1df*2=I =|8i#1B$,|"\‡mY8| p6ە7%q<cnxJnn>cii+;o=zлku11 OIxٓg˗_r;a LW%굞Fp,YЩ]nB]0r*_:_ص'1!4;='\g4;6`݊Y"Mih#y5I^"t٦YoBB8ֻWc00X\,m2Xb<1,Wo7wÄR*ȉ^}W9&0+"]8iv שѣ됄~""Ա;ZJt$"iy#^ҳтem&OvD(q3BF)C Cdne$ł{3CT.ONm G'˽/0H9E.?3sm!_鯒(QQ2F-Sk1uaݲC(=O䖆g׾ssU,5Gr'q)XG"t#"c525@h5n, P)oE >wb_NM\<:V~Uw[9tAN;铥o;qOmz4[==(_ @O*x̀@_ 7eHo,Haj28y@Ĥ;@1#)Qy2K"}' r<$JM34@hV:r7UIrz GtJvY?R: poZ 3?:xɓQ1P"Ldٳ/?_Oh?_r-ϖ'281XPF i @T.쎻)S]{L:|)FUL221oG?-i͋c':6aTdHw Әl'cF C9 2rMf頓#=צ%OYMu#Em kDe˷2ڜ |wv5x}cԮcHޏb-믖o'gw}~YŇONN :owxN%g"rOJ%92^!}S}K"x8ˬSS54Ih&uⷖI1l&"ڗWEZAxēpS#)vG9#/NT[ 6%n{Y=6ˇ9?F6ϔӊO#H}51A/#$80"%3@3>(}s_O2p.clB݀ieG>H/C  Cl`Dބ5ѩ39xEȠ0u(ISяkkH8I{6!{y "=8:KfAszV5@p#+I{@p͈ь)rYr@Q/z?ӎX4}|W]FNX}E$'Lgߚ5Aa77@K_%+B .^#<Ǟo3r2>b3D /|x{f1$8,[IO8^di~h7Dv[|t'9?9yp8S[ @6҈9_qE.؉\Y> w~ȊAXoN¤J܁@xvz8K0 #jJA|GkxFY1(BT+L;c?3! #]xI< O4_Mǹ/\G/ <3+5šH SMsnc!N.Zi5-;_!d':(F_ϗ5NW?w-}rF RvZ)\GUڨW#R 5qykن)RY(ԉW>XDſ[\;@O>򲆛dԝ7h-=M_u cRWU&.q`$=gu! 1 GF6]ֻMm$ZƘj]6*mMg$XSM]|!g23rzʏ;f+CD|wi~7h7Dv'WZ7ӓ"| A-#!.(&9XH@A,+3 @ =?WCeh\zH#].@ o~G+'ԝMPi;32uIc޸3|/1L!6@h 0>XgZVgY{M#cX]GGʂRll,55x9w,.P6J4kpfvvӣ55f"_dy˗_}|~G~9aGM9BWu> vDu>:H5DrahE K#Ubgt{5>r{?`} ɫa ,G;yx,ZrRr00Bp~ʕ1㞟:Q9_T%?p߾h=u6BƈxF f/3mNwʡ~ϳtڞMضr:^+ka~tXs!qd;W}z 'KSg}j4nM=K))vi5 v /r\ P (  @ìI@)`#@0n0MᎤWrzhr[rM-iLOtA]6][ѹ3n0jnvR:aVI`F!8)G4A֯_o"@?GApGˉ%ye A%dGXn߫\kp[ΨfryݤiʗQiDzg;˞/..n!r3h?|w??of/O.`~>XO4C!×z5Jܐ?,hcHUhq\@Wot.o{(!|+{~cU ʓuӖ?ˠ@jOp6F}G:4Fv)BS;1"SC)y~! N;nnӿG ya0 /} i /]djiI hF[ PAUsū=a PZpY0& ;%٩F"I)S/ bD︓yvY1e u}{D>Ҫ&}hʼvl%kxٿN;n~; ݾfP7Bt$go!9z%ȴ V~&<HdYD&L\-|yΨ&܀y@lmSl{ф[GyNN~:1‘B(0.iŸ``?i%g͹צ['A"I7 `"<٥lJ6~7 $SɟE=qu*QGƒt-ȋtǮ4mcZZ/0!ku?%8۔#7w#(ob !Ջӧ]ͷ_/?^Oh_bb/N]:YM1~YּU)? e SYxV7ت}-~H9ѡ{i} m!L_ܦ :CegOe(tPthB:V E V,IE q!51f>_iz`&N;N;-5;+cFR-OeѬzDZx'ࡂYx>> tv?gZ@j):Q$2r$RÛ?`!vĂ %]P1}FˬM%`,aS=phi4> H110ςj28& KAtzjZ/`(C~w 6}^V΍!XFA|"S. 4_Fʸ;cȋ4LvgFdG^, +e'>BYk'I>W,OrG)DiCdKq?ѧ'>t7lCcvvCd~ɺ dyxJNF1@*wp: & =[z /Z8$\x}d(FWVcg҄_ys<6@c@ZgV4@$ pΐ]EۦwΙn3 L!z}vٰ5%rǏO㣦e(@ ɔEWo2|2H2܂^G>ܿ{*FfDĻ-HMN`)lgkV3Rq՛7ˋob4#3Q}+ft|WϿXEjH[Hzm_z' ǘU-rgJAz@^&:u*͵8h1KQѡc3j|\)WGG؛0FNLfyŭ]y-tdG67NBO'M1;㣮0N||.IkviW v=% 7CFw`c:  0Tkжh!т `f:Puיlā|Fojm K+n[+Osg(iw&;erocYe^HO7H;,V֣kʌrS^[#+ˇ$140Ѱ8^-1 ^cяU YWɦ N*˖rOyvdv})͏rXnʺŸP 5l`a3ZyneCg-7|5 ׉n{6 Hk$FFyޒLwvӡi?.Č\/ 0~#T).M0;l7 ު4`*k r]V,ڔN3fh"㨠nVL׺rm R@-Մ+׀%p-xS"4Z`m] #YKSL1h'ȿQ  ~f퉴Kv 7;qlT玿Q+#*10;t/(ɫ"v2RQiq֮0^[:֊h|2y.de'~ m+2p5 œYW4b8H(ߑz?Uiv=!"}e:H+ k9Y%vu4RߝviOvCdM@^%E]ru~9=0~@: V܁6~u [p_@qDgs Gwљ e6[÷ge]@9_F/{ +5kz'1V욅 t( Mq|`0Xk)1Þ`*tm 0]o#2)NX1E &6i( C^ ؛l:tn9NPdFG ]W~T>0v7.c>F\'!l\uѣKބGS VHy/*7^ć:ɈoɻbL'&f@L}F."Qܥ;>˩򌛴2ft$1az'qJQvi>a v!ƈ)^>a0Rf`s 0\6@r?L@zq sӣfX`(hMA&80ݸ |pvTbosov:A{ң 3b$db'F(3rѐF`V3pg c''1D軆<' 9sF ՃtbhP/[ۢl;(ÙI[9+O8F{#oU+i-`>LOn_Us ^)|91G_q5 7u. a3 ]E%[|ZDw<:cFMc//;N>1DmN;Ar,M@hz3<` Cks@r&EqqG[/,.S' u*Ni' W#HϏ?لjRS.$Sk.zi O9OYq2wOz[\>k_/VjutN-/.fN; mav0N/.D1R_rٝ:%1 0lw& ~@5c`Im]<q֠#'rT3#nU ZCm fTf@+Ɓ|hmW qɹg>  n8]0F oU e*#n^?`ޤGxI£ã~EYp+ gL󣯭L| cG?嵆L`CbW"EIUR^:m5F3|fj7qj cU_bVl-:l`4,ۓk l{7+ p `@(`8mk N0H#cŒk@g 眿Miu8臯!1p i~~2!C[1D\&HG>mtQ=#M u/fKG]+v;rfNwnˈF''a9-hcH{yN֊l#=c]//۝Ic+?Ԙ_RqϿ@.s3$psrlm|`%aM ˶߶dvvCdvF?]//c~ŇO:b: V|MJ'0?{(|(ZOܤ3Hܯ»@ׁOfJݴG@fg0[B Y̡,mo' 0&ݔ0 If\P폯֏ 7уe,1FJM#7g7cD-/t𹸼L떉1Zesh nR`7:М>kHrnȞ0syFTeΎ5K+V?Z>^·ɷx^>;~ }111bֵdF]3x)&s#}͖ҝy}}Kӳ"#y6P{F^Dގ=H> qgz]?ag팠bsq=Eo]R'E6t 66QS(D"c\;7Fy;N;;,W_xݛˏzLr}C! (@ !{n>v} 9 _sx>1:V7rʠqmrfl;Yzkm`'|r>GzuocfkP֙qm׮Ær;cq3:hӝ|U<tv:ךgZ6yd{}8C.>4?˦%t$hPP7wZHt[Hl 7SF;N;";xn!1L.x^)91w TMz;S`JA>-V`;; ceΓ qzxkCan52346$ D80#DҺۙu"vābu$be+m71kT$77~5~Vh̄s~QC!#S> 1D~X.c0hAQD4jpPxr<)Ʊ^SsFt,`=X=NGÃߔtm\~Xndviu v铠߼v9 x`ys{o99:w3FXϼHi~[w5 kb4`>le[Imq"85.8a9^zF¤%o®FLY0?bK\܌;a|16 8~Q~ッNٺu( SXTog˛$F]_ټKeCT 3.z=4WbNn03moyQGh364&} o#( #-’[n.͔nCl!7|yAҵ%ȗޛdj3B1b`Z- R)q/`9vivO!N;ovjLz89XsG!|o\[3pHbدlu?o@V5 YT0"5Np4F6 054ݐ k(h5" '֔Sۂy[]ƈP^}svMx1S#%Gn騿8J =t_4x5f<:s~viC";N+=c\{دǛd.I{Φ 00 ;6lф`({܀^&6cj"OX`!"N܀p Ԩ3S仮#xoaA u!2SfDh܏!FG $ÇɤǏB*+N.Lh!i]B3rV'9ff9^1ϸʆNzm~F?ʱ/BivB!N;|o񹋷ONO'Gvb tzO9̴'#$zs?j"=C㌆m튀# 6R~zQ"mLI a _:3"#(L"ä9|0"эDh^& d;)32C;c̴)LG3ڑ#v𲓖]>/w$SхQٺ|mo |fsg䨼˻{N;A!N;WW7ǧ58wk4՘iWc g7U)kT< %fhtt[ĉ6ήXOgZSr(8OnO7a;F60EM)3ҏY&'<0 vѲFm7O 3{`ܻVk~(D~IV^k~G> BN;A!N;Ho_]~{~!ӂY@}o`7b@y  \$okM[VBg$mTmc(>0^93k]ሬN-xu7SОCZlnx/sl `Q<%ݨ}ď RЙUZn&׀[ +ISfD X?Poǽ;~@!> mo? _G c,kK H f?eʇ/'鼝ia֮ p[-?躋bבq1xոplD8EmKcp7(}=<8T<ivN;$zuNjAy`h]rt:BIh; sހfx g4A^Ā•'#(F?`xG'-v1 J#5>z# 9 ["FLJcFd6wFƦ#Fn'b.b,6N;Ni7Dvi~7˫ePrh99 㗷iv?N; o(wo||$@QE88mt+Aוw]X] A G—qadQxF@?F5fxhN0_'b"pus6f`l&3޽YݓM邌fā1dr;wivG!N;{LjW7r<{|>z4@^ئh03⃇.͂m0?5|8.Fcd48}Vur4zm1F:$aĂ ށu(Sb<0*iFhmIo׌yχ+ N;vCdv$_b;X?WtXpLobt()Ksb/F|}21"5>xquݯw!n},T g}Ȱu..q0k\Fa3Zn, r?FG>$FT8ofiv?N;'NϾ}|/Ϟ-?WrpxQӶB g䂁qcd ӷ>t$Wg݈sb o7PF"nTg ƟWΌ$c|\+:rrvBiv]iv菿|g˯ vˣG: 7~# cHA#eYf] G D# |g:qbP${MO,$rD(חowdvw/?۝vi~߈qA^nǪnnQÎ0xXqu h|-o[?_]^,߼Y?K~#")wdAjC&rr׌FC:G1r!F`\ΉÛ8H^<.)X;Ntzz";Nov/%t_,G+YF@L##E@M Q@>py^ Qu!˗߿eԇ'5nn'X°@H "?]')(a0jg6튁e$Feivݦiv=->*Mr}G%Xhߏr)J'GqZ˫7gsY..7gF?Η>iU @1bx|0[e|;IY[UU]Ջ{ml 3,b|WpO~eC @2 L#׮-r5/BB #/-ùE8%[pAR?VaF`㽟xOW¹hZ]@E uzjQ{ Ki+}Oتg9((((MU7T'X67AG/ro" E7 a4~|" 8X0en$uH/8oZ^ޜ5Dy!V0c^?>3V :(+AAAAAo!:$oEUۍnO@V0wOx[J6s(_[%3G:@p@VyiE'(JF= \};B<$K%|+%]w,xiVΡ5Qo J:MZY)Vҽ5mxHBrEtZڊ87vt8K[F u6ޞ?_KPPPP?zW l{UH2'_֕uxAҗq.s߫MnjoNH{XמG4b,8!4s+$lD@@g/ȀmNy n<{̈́YM' >#d^zfҾ|.ʖ+m tw6:9= xikW$,WCy8!H_΍'&)<ʵwDחm'$7" &J{^O=.%2!@ ilYsADcttn`5gums-Y' +OGM"8ON?PPPPP?yGv:LlC5Sݱ}N PmEeql 䋼܋}q|O@>::$I,qå*܄[fwvw{ksmuַ2x@P6앨?DjL$S MW f¯H.'l ^ ¯ZHƢ{d29**+o k]# t 4O P+yF~jRĵ$4gfuyL~'((((}n_|u췑"AAAA hd(A:HU=d2X ^A%q"cտ^yjiî{H#,$XcZ;W++KuZ,føի&ʡÙãx%t !7/IEc+AAW[R=!TmQh͢Unʡ<`U%Ǐ9`-7]0q۳`NW]g'vquyy-lplvysc<_Uo޷P`hO탷h Ϡq\/%+nŠ@8Fug 02 m4[f~@>Ս]^\٧/>7WkIڵA$#\xhGF9p@XGT,c\^{6Zo cܷ;شtiT<ɪ^Leya^ 5Qw.^v",kE-h(  [h^+"vOr3Ho~}. D `/®o- t1 Yx#?GPPPPз: x Nv|829HPPPӣibOO#H$' ª龇ht%2{@׆hy h\/I0rovںƢe 8ZO YOLG¼"U܍ơ [c=<$$Pzqk%4 >P҃LJBPR@SWJ[U6쓰 Dtos8~`~BX2O>8rC}mo_ϖ~_Oث10h1>@H=e,J[Z]pyG1߽?$>c-('{P ˠ7Uf 6 TIENDB`Zuzu-Typ-PyGLM-e113a8a/MANIFEST.in000066400000000000000000000002701511156275200163360ustar00rootroot00000000000000include LICENSE include COPYING include README.md include setup.py include setup.cfg include VERSION include glm/py.typed recursive-include pyglm-stubs * recursive-include PyGLM_lib * Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/000077500000000000000000000000001511156275200163575ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM.cpp000066400000000000000000001043051511156275200200160ustar00rootroot00000000000000#include "version.h" #include "license.h" #include "build_options.h" #include "PyGLM/imports.h" #include "PyGLM/compiler_setup.h" //TYPES #include "PyGLM/types/all.h" // INTERNAL FUNCTIONS #include "PyGLM/internal_functions/all.h" // TYPE METHODS #include "PyGLM/type_methods/all.h" #if !(PyGLM_BUILD & PyGLM_NO_FUNCTIONS) // PyGLM FUNCTIONS #include "PyGLM/functions/all.h" //static PyObject* //test(PyObject*, PyObject* arg) { //} //#define HAS_TEST //#define TEST_FUNC_TYPE METH_O static PyMethodDef glmmethods[] = { // DETAIL // func_packing FUNC_PACKING_METHODS, // func_integer FUNC_INTEGER_METHODS, // func_vector_relational FUNC_VECTOR_RELATIONAL_METHODS, // func_exponential FUNC_EXPONENTIAL, // func_common FUNC_COMMON_METHODS, // func_geometric FUNC_GEOMETRIC_METHODS, // func_matrix FUNC_MATRIX_METHODS, // func_trigonometric FUNC_TRIGONOMETRIC_METHODS, // EXTENSIONS // color_space COLOR_SPACE_METHODS, // constants CONSTANTS_METHODS, // epsilon EPSILON_METHODS, // integer INTEGER_METHODS, // matrix_inverse MATRIX_INVERSE_METHODS, // matrix_transform MATRIX_TRANSFORM_METHODS, // matrix_projection MATRIX_PROJECTION_METHODS, // matrix_clip_space MATRIX_CLIP_SPACE_METHODS, // quaternion QUATERNION_METHODS, // quaternion_common QUATERNION_COMMON_METHODS, // quaternion_trigonometric QUATERNION_TRIGONOMETRIC_METHODS, // matrix_access MATRIX_ACCESS_METHODS, // noise NOISE_METHODS, // packing PACKING_METHODS, // random RANDOM_METHODS, // round ROUND_METHODS, // reciprocal RECIPROCAL_METHODS, // type_ptr TYPE_PTR_METHODS, // ulp ULP_METHODS, // UNSTABLE EXTENSIONS // polar_coordinates POLAR_COORDINATES_METHODS, // norm NORM_METHODS, // decompose DECOMPOSE_METHODS, // matrix_transform_2d MATRIX_TRANSFORM_2D_METHODS, // rotate_vector ROTATE_VECTOR_METHODS, // compatibility COMPATIBILITY_METHODS, // unary UNARY_METHODS, // binary BINARY_METHODS, // ternary TERNARY_METHODS, // PyGLM functions CUSTOM_METHODS, { "silence", (PyCFunction)silence, METH_O, silence_docstr }, //{ "_get_type_info", (PyCFunction)_get_type_info, METH_VARARGS, "_get_type_info(accepted_types, object) -> None\nAn internal testing funtion to check wether or not the type checking works correctly." }, #ifdef HAS_TEST {"test", (PyCFunction)test, TEST_FUNC_TYPE, ""}, #endif { NULL, NULL, 0, NULL } }; #endif static void glm_clear(PyObject*) { #if !(PyGLM_NO_FUNCTIONS & PyGLM_BUILD) Py_XDECREF(ctypes_float_p); Py_XDECREF(ctypes_double_p); Py_XDECREF(ctypes_int64_p); Py_XDECREF(ctypes_int32_p); Py_XDECREF(ctypes_int16_p); Py_XDECREF(ctypes_int8_p); Py_XDECREF(ctypes_uint64_p); Py_XDECREF(ctypes_uint32_p); Py_XDECREF(ctypes_uint16_p); Py_XDECREF(ctypes_uint8_p); Py_XDECREF(ctypes_bool_p); #endif Py_XDECREF(ctypes_cast); Py_XDECREF(ctypes_void_p); Py_XDECREF(PyGLM_VERSION_STRING); Py_XDECREF(PyGLM_LICENSE_STRING); #if !(PyGLM_NO_ITER_TYPECHECKING & PyGLM_BUILD) PTI0 = PyGLMTypeInfo(); PTI1 = PyGLMTypeInfo(); PTI2 = PyGLMTypeInfo(); PTI3 = PyGLMTypeInfo(); #endif } static PyModuleDef glmmodule = { PyModuleDef_HEAD_INIT, "glm", "Features that implement the GLSL specification as close as possible.", -1, #if !(PyGLM_BUILD & PyGLM_NO_FUNCTIONS) glmmethods, #else NULL, #endif NULL, NULL, NULL, (freefunc)glm_clear }; extern "C" { PyMODINIT_FUNC PyInit_glm(void) { std::setlocale(LC_ALL, "en_US.UTF-8"); PyObject* mainmod = PyImport_AddModule("__main__"); PyObject* maindict = PyModule_GetDict(mainmod); PyObject* ctypes_list = Py_BuildValue("(s, s, s, s, s, s, s, s, s, s, s, s, s, s)", "cast", "c_void_p", "POINTER", "c_float", "c_double", "c_int64", "c_int32", "c_int16", "c_int8", "c_uint64", "c_uint32", "c_uint16", "c_uint8", "c_bool"); PyObject* ctypes_module = PyImport_ImportModuleEx("ctypes", maindict, maindict, ctypes_list); Py_DECREF(ctypes_list); // Don't need to DECREF these, because they're added to glm ctypes_float = PyObject_GetAttrString(ctypes_module, "c_float"); ctypes_double = PyObject_GetAttrString(ctypes_module, "c_double"); ctypes_int64 = PyObject_GetAttrString(ctypes_module, "c_int64"); ctypes_int32 = PyObject_GetAttrString(ctypes_module, "c_int32"); ctypes_int16 = PyObject_GetAttrString(ctypes_module, "c_int16"); ctypes_int8 = PyObject_GetAttrString(ctypes_module, "c_int8"); ctypes_uint64 = PyObject_GetAttrString(ctypes_module, "c_uint64"); ctypes_uint32 = PyObject_GetAttrString(ctypes_module, "c_uint32"); ctypes_uint16 = PyObject_GetAttrString(ctypes_module, "c_uint16"); ctypes_uint8 = PyObject_GetAttrString(ctypes_module, "c_uint8"); ctypes_bool = PyObject_GetAttrString(ctypes_module, "c_bool"); ctypes_dealloc = ((PyTypeObject*)ctypes_float)->tp_dealloc; ctypes_cast = PyObject_GetAttrString(ctypes_module, "cast"); ctypes_void_p = PyObject_GetAttrString(ctypes_module, "c_void_p"); #if !(PyGLM_BUILD & PyGLM_NO_FUNCTIONS) PyObject* ctypes_POINTER = PyObject_GetAttrString(ctypes_module, "POINTER"); ctypes_float_p = PyObject_CallFunctionObjArgs(ctypes_POINTER, ctypes_float, NULL); //Py_DECREF(ctypes_float); ctypes_double_p = PyObject_CallFunctionObjArgs(ctypes_POINTER, ctypes_double, NULL); //Py_DECREF(ctypes_double); ctypes_int64_p = PyObject_CallFunctionObjArgs(ctypes_POINTER, ctypes_int64, NULL); //Py_DECREF(ctypes_int64); ctypes_int32_p = PyObject_CallFunctionObjArgs(ctypes_POINTER, ctypes_int32, NULL); //Py_DECREF(ctypes_int32); ctypes_int16_p = PyObject_CallFunctionObjArgs(ctypes_POINTER, ctypes_int16, NULL); //Py_DECREF(ctypes_int16); ctypes_int8_p = PyObject_CallFunctionObjArgs(ctypes_POINTER, ctypes_int8, NULL); //Py_DECREF(ctypes_int8); ctypes_uint64_p = PyObject_CallFunctionObjArgs(ctypes_POINTER, ctypes_uint64, NULL); //Py_DECREF(ctypes_uint64); ctypes_uint32_p = PyObject_CallFunctionObjArgs(ctypes_POINTER, ctypes_uint32, NULL); //Py_DECREF(ctypes_uint32); ctypes_uint16_p = PyObject_CallFunctionObjArgs(ctypes_POINTER, ctypes_uint16, NULL); //Py_DECREF(ctypes_uint16); ctypes_uint8_p = PyObject_CallFunctionObjArgs(ctypes_POINTER, ctypes_uint8, NULL); //Py_DECREF(ctypes_uint8); ctypes_bool_p = PyObject_CallFunctionObjArgs(ctypes_POINTER, ctypes_bool, NULL); //Py_DECREF(ctypes_bool); Py_DECREF(ctypes_POINTER); #endif Py_DECREF(ctypes_module); PyObject* module_glm; if (PyType_Ready(&hfvec1Type) < 0 || PyType_Ready(&hfvec1IterType) < 0 || PyType_Ready(&hfvec2Type) < 0 || PyType_Ready(&hfvec2IterType) < 0 || PyType_Ready(&hfvec3Type) < 0 || PyType_Ready(&hfvec3IterType) < 0 || PyType_Ready(&hfvec4Type) < 0 || PyType_Ready(&hfvec4IterType) < 0 || PyType_Ready(&hdvec1Type) < 0 || PyType_Ready(&hdvec1IterType) < 0 || PyType_Ready(&hdvec2Type) < 0 || PyType_Ready(&hdvec2IterType) < 0 || PyType_Ready(&hdvec3Type) < 0 || PyType_Ready(&hdvec3IterType) < 0 || PyType_Ready(&hdvec4Type) < 0 || PyType_Ready(&hdvec4IterType) < 0 || PyType_Ready(&hi8vec1Type) < 0 || PyType_Ready(&hi8vec1IterType) < 0 || PyType_Ready(&hi8vec2Type) < 0 || PyType_Ready(&hi8vec2IterType) < 0 || PyType_Ready(&hi8vec3Type) < 0 || PyType_Ready(&hi8vec3IterType) < 0 || PyType_Ready(&hi8vec4Type) < 0 || PyType_Ready(&hi8vec4IterType) < 0 || PyType_Ready(&hi16vec1Type) < 0 || PyType_Ready(&hi16vec1IterType) < 0 || PyType_Ready(&hi16vec2Type) < 0 || PyType_Ready(&hi16vec2IterType) < 0 || PyType_Ready(&hi16vec3Type) < 0 || PyType_Ready(&hi16vec3IterType) < 0 || PyType_Ready(&hi16vec4Type) < 0 || PyType_Ready(&hi16vec4IterType) < 0 || PyType_Ready(&hivec1Type) < 0 || PyType_Ready(&hivec1IterType) < 0 || PyType_Ready(&hivec2Type) < 0 || PyType_Ready(&hivec2IterType) < 0 || PyType_Ready(&hivec3Type) < 0 || PyType_Ready(&hivec3IterType) < 0 || PyType_Ready(&hivec4Type) < 0 || PyType_Ready(&hivec4IterType) < 0 || PyType_Ready(&hi64vec1Type) < 0 || PyType_Ready(&hi64vec1IterType) < 0 || PyType_Ready(&hi64vec2Type) < 0 || PyType_Ready(&hi64vec2IterType) < 0 || PyType_Ready(&hi64vec3Type) < 0 || PyType_Ready(&hi64vec3IterType) < 0 || PyType_Ready(&hi64vec4Type) < 0 || PyType_Ready(&hi64vec4IterType) < 0 || PyType_Ready(&hu8vec1Type) < 0 || PyType_Ready(&hu8vec1IterType) < 0 || PyType_Ready(&hu8vec2Type) < 0 || PyType_Ready(&hu8vec2IterType) < 0 || PyType_Ready(&hu8vec3Type) < 0 || PyType_Ready(&hu8vec3IterType) < 0 || PyType_Ready(&hu8vec4Type) < 0 || PyType_Ready(&hu8vec4IterType) < 0 || PyType_Ready(&hu16vec1Type) < 0 || PyType_Ready(&hu16vec1IterType) < 0 || PyType_Ready(&hu16vec2Type) < 0 || PyType_Ready(&hu16vec2IterType) < 0 || PyType_Ready(&hu16vec3Type) < 0 || PyType_Ready(&hu16vec3IterType) < 0 || PyType_Ready(&hu16vec4Type) < 0 || PyType_Ready(&hu16vec4IterType) < 0 || PyType_Ready(&huvec1Type) < 0 || PyType_Ready(&huvec1IterType) < 0 || PyType_Ready(&huvec2Type) < 0 || PyType_Ready(&huvec2IterType) < 0 || PyType_Ready(&huvec3Type) < 0 || PyType_Ready(&huvec3IterType) < 0 || PyType_Ready(&huvec4Type) < 0 || PyType_Ready(&huvec4IterType) < 0 || PyType_Ready(&hu64vec1Type) < 0 || PyType_Ready(&hu64vec1IterType) < 0 || PyType_Ready(&hu64vec2Type) < 0 || PyType_Ready(&hu64vec2IterType) < 0 || PyType_Ready(&hu64vec3Type) < 0 || PyType_Ready(&hu64vec3IterType) < 0 || PyType_Ready(&hu64vec4Type) < 0 || PyType_Ready(&hu64vec4IterType) < 0 || PyType_Ready(&hbvec1Type) < 0 || PyType_Ready(&hbvec1IterType) < 0 || PyType_Ready(&hbvec2Type) < 0 || PyType_Ready(&hbvec2IterType) < 0 || PyType_Ready(&hbvec3Type) < 0 || PyType_Ready(&hbvec3IterType) < 0 || PyType_Ready(&hbvec4Type) < 0 || PyType_Ready(&hbvec4IterType) < 0 || PyType_Ready(&hfmvec2Type) < 0 || PyType_Ready(&hfmvec2IterType) < 0 || PyType_Ready(&hfmvec3Type) < 0 || PyType_Ready(&hfmvec3IterType) < 0 || PyType_Ready(&hfmvec4Type) < 0 || PyType_Ready(&hfmvec4IterType) < 0 || PyType_Ready(&hdmvec2Type) < 0 || PyType_Ready(&hdmvec2IterType) < 0 || PyType_Ready(&hdmvec3Type) < 0 || PyType_Ready(&hdmvec3IterType) < 0 || PyType_Ready(&hdmvec4Type) < 0 || PyType_Ready(&hdmvec4IterType) < 0 || PyType_Ready(&himvec2Type) < 0 || PyType_Ready(&himvec2IterType) < 0 || PyType_Ready(&himvec3Type) < 0 || PyType_Ready(&himvec3IterType) < 0 || PyType_Ready(&himvec4Type) < 0 || PyType_Ready(&himvec4IterType) < 0 || PyType_Ready(&humvec2Type) < 0 || PyType_Ready(&humvec2IterType) < 0 || PyType_Ready(&humvec3Type) < 0 || PyType_Ready(&humvec3IterType) < 0 || PyType_Ready(&humvec4Type) < 0 || PyType_Ready(&humvec4IterType) < 0 || PyType_Ready(&hfmat2x2Type) < 0 || PyType_Ready(&hfmat2x2IterType) < 0 || PyType_Ready(&hfmat2x3Type) < 0 || PyType_Ready(&hfmat2x3IterType) < 0 || PyType_Ready(&hfmat2x4Type) < 0 || PyType_Ready(&hfmat2x4IterType) < 0 || PyType_Ready(&hfmat3x2Type) < 0 || PyType_Ready(&hfmat3x2IterType) < 0 || PyType_Ready(&hfmat3x3Type) < 0 || PyType_Ready(&hfmat3x3IterType) < 0 || PyType_Ready(&hfmat3x4Type) < 0 || PyType_Ready(&hfmat3x4IterType) < 0 || PyType_Ready(&hfmat4x2Type) < 0 || PyType_Ready(&hfmat4x2IterType) < 0 || PyType_Ready(&hfmat4x3Type) < 0 || PyType_Ready(&hfmat4x3IterType) < 0 || PyType_Ready(&hfmat4x4Type) < 0 || PyType_Ready(&hfmat4x4IterType) < 0 || PyType_Ready(&hdmat2x2Type) < 0 || PyType_Ready(&hdmat2x2IterType) < 0 || PyType_Ready(&hdmat2x3Type) < 0 || PyType_Ready(&hdmat2x3IterType) < 0 || PyType_Ready(&hdmat2x4Type) < 0 || PyType_Ready(&hdmat2x4IterType) < 0 || PyType_Ready(&hdmat3x2Type) < 0 || PyType_Ready(&hdmat3x2IterType) < 0 || PyType_Ready(&hdmat3x3Type) < 0 || PyType_Ready(&hdmat3x3IterType) < 0 || PyType_Ready(&hdmat3x4Type) < 0 || PyType_Ready(&hdmat3x4IterType) < 0 || PyType_Ready(&hdmat4x2Type) < 0 || PyType_Ready(&hdmat4x2IterType) < 0 || PyType_Ready(&hdmat4x3Type) < 0 || PyType_Ready(&hdmat4x3IterType) < 0 || PyType_Ready(&hdmat4x4Type) < 0 || PyType_Ready(&hdmat4x4IterType) < 0 || PyType_Ready(&himat2x2Type) < 0 || PyType_Ready(&himat2x2IterType) < 0 || PyType_Ready(&himat2x3Type) < 0 || PyType_Ready(&himat2x3IterType) < 0 || PyType_Ready(&himat2x4Type) < 0 || PyType_Ready(&himat2x4IterType) < 0 || PyType_Ready(&himat3x2Type) < 0 || PyType_Ready(&himat3x2IterType) < 0 || PyType_Ready(&himat3x3Type) < 0 || PyType_Ready(&himat3x3IterType) < 0 || PyType_Ready(&himat3x4Type) < 0 || PyType_Ready(&himat3x4IterType) < 0 || PyType_Ready(&himat4x2Type) < 0 || PyType_Ready(&himat4x2IterType) < 0 || PyType_Ready(&himat4x3Type) < 0 || PyType_Ready(&himat4x3IterType) < 0 || PyType_Ready(&himat4x4Type) < 0 || PyType_Ready(&himat4x4IterType) < 0 || PyType_Ready(&humat2x2Type) < 0 || PyType_Ready(&humat2x2IterType) < 0 || PyType_Ready(&humat2x3Type) < 0 || PyType_Ready(&humat2x3IterType) < 0 || PyType_Ready(&humat2x4Type) < 0 || PyType_Ready(&humat2x4IterType) < 0 || PyType_Ready(&humat3x2Type) < 0 || PyType_Ready(&humat3x2IterType) < 0 || PyType_Ready(&humat3x3Type) < 0 || PyType_Ready(&humat3x3IterType) < 0 || PyType_Ready(&humat3x4Type) < 0 || PyType_Ready(&humat3x4IterType) < 0 || PyType_Ready(&humat4x2Type) < 0 || PyType_Ready(&humat4x2IterType) < 0 || PyType_Ready(&humat4x3Type) < 0 || PyType_Ready(&humat4x3IterType) < 0 || PyType_Ready(&humat4x4Type) < 0 || PyType_Ready(&humat4x4IterType) < 0 || PyType_Ready(&hfquaType) < 0 || PyType_Ready(&hfquaIterType) < 0 || PyType_Ready(&hdquaType) < 0 || PyType_Ready(&hdquaIterType) < 0 || PyType_Ready(&glmArrayType) < 0 || PyType_Ready(&glmArrayIterType) < 0) return NULL; module_glm = PyModule_Create(&glmmodule); if (module_glm == NULL) return NULL; // float PyModule_AddObject(module_glm, "c_float", ctypes_float); Py_INCREF(ctypes_float); PyModule_AddObject(module_glm, "float_", ctypes_float); Py_INCREF(ctypes_float); PyModule_AddObject(module_glm, "float32", ctypes_float); // double PyModule_AddObject(module_glm, "c_double", ctypes_double); Py_INCREF(ctypes_double); PyModule_AddObject(module_glm, "double", ctypes_double); Py_INCREF(ctypes_double); PyModule_AddObject(module_glm, "float64", ctypes_double); // int64 PyModule_AddObject(module_glm, "c_int64", ctypes_int64); Py_INCREF(ctypes_int64); PyModule_AddObject(module_glm, "int64", ctypes_int64); // int32 PyModule_AddObject(module_glm, "c_int32", ctypes_int32); Py_INCREF(ctypes_int32); PyModule_AddObject(module_glm, "int32", ctypes_int32); // int16 PyModule_AddObject(module_glm, "c_int16", ctypes_int16); Py_INCREF(ctypes_int16); PyModule_AddObject(module_glm, "int16", ctypes_int16); // int8 PyModule_AddObject(module_glm, "c_int8", ctypes_int8); Py_INCREF(ctypes_int8); PyModule_AddObject(module_glm, "int8", ctypes_int8); // uint64 PyModule_AddObject(module_glm, "c_uint64", ctypes_uint64); Py_INCREF(ctypes_uint64); PyModule_AddObject(module_glm, "uint64", ctypes_uint64); // uint32 PyModule_AddObject(module_glm, "c_uint32", ctypes_uint32); Py_INCREF(ctypes_uint32); PyModule_AddObject(module_glm, "uint32", ctypes_uint32); // uint16 PyModule_AddObject(module_glm, "c_uint16", ctypes_uint16); Py_INCREF(ctypes_uint16); PyModule_AddObject(module_glm, "uint16", ctypes_uint16); // uint8 PyModule_AddObject(module_glm, "c_uint8", ctypes_uint8); Py_INCREF(ctypes_uint8); PyModule_AddObject(module_glm, "uint8", ctypes_uint8); PyModule_AddObject(module_glm, "c_bool", ctypes_bool); Py_INCREF(ctypes_bool); PyModule_AddObject(module_glm, "bool_", ctypes_bool); Py_INCREF(&hfvec1Type); PyModule_AddObject(module_glm, "vec1", (PyObject *)&hfvec1Type); Py_INCREF(&hfvec2Type); PyModule_AddObject(module_glm, "vec2", (PyObject *)&hfvec2Type); Py_INCREF(&hfvec3Type); PyModule_AddObject(module_glm, "vec3", (PyObject *)&hfvec3Type); Py_INCREF(&hfvec4Type); PyModule_AddObject(module_glm, "vec4", (PyObject *)&hfvec4Type); Py_INCREF(&hfmat2x2Type); PyModule_AddObject(module_glm, "mat2x2", (PyObject *)&hfmat2x2Type); Py_INCREF(&hfmat2x3Type); PyModule_AddObject(module_glm, "mat2x3", (PyObject *)&hfmat2x3Type); Py_INCREF(&hfmat2x4Type); PyModule_AddObject(module_glm, "mat2x4", (PyObject *)&hfmat2x4Type); Py_INCREF(&hfmat3x2Type); PyModule_AddObject(module_glm, "mat3x2", (PyObject *)&hfmat3x2Type); Py_INCREF(&hfmat3x3Type); PyModule_AddObject(module_glm, "mat3x3", (PyObject *)&hfmat3x3Type); Py_INCREF(&hfmat3x4Type); PyModule_AddObject(module_glm, "mat3x4", (PyObject *)&hfmat3x4Type); Py_INCREF(&hfmat4x2Type); PyModule_AddObject(module_glm, "mat4x2", (PyObject *)&hfmat4x2Type); Py_INCREF(&hfmat4x3Type); PyModule_AddObject(module_glm, "mat4x3", (PyObject *)&hfmat4x3Type); Py_INCREF(&hfmat4x4Type); PyModule_AddObject(module_glm, "mat4x4", (PyObject *)&hfmat4x4Type); Py_INCREF(&hfmat2x2Type); PyModule_AddObject(module_glm, "mat2", (PyObject *)&hfmat2x2Type); Py_INCREF(&hfmat3x3Type); PyModule_AddObject(module_glm, "mat3", (PyObject *)&hfmat3x3Type); Py_INCREF(&hfmat4x4Type); PyModule_AddObject(module_glm, "mat4", (PyObject *)&hfmat4x4Type); Py_INCREF(&hfquaType); PyModule_AddObject(module_glm, "quat", (PyObject *)&hfquaType); Py_INCREF(&hfquaType); PyModule_AddObject(module_glm, "fquat", (PyObject *)&hfquaType); Py_INCREF(&hdquaType); PyModule_AddObject(module_glm, "dquat", (PyObject *)&hdquaType); Py_INCREF(&hfquaType); PyModule_AddObject(module_glm, "f32quat", (PyObject *)&hfquaType); Py_INCREF(&hdquaType); PyModule_AddObject(module_glm, "f64quat", (PyObject *)&hdquaType); Py_INCREF(&hfmat2x2Type); PyModule_AddObject(module_glm, "fmat2x2", (PyObject *)&hfmat2x2Type); Py_INCREF(&hfmat2x3Type); PyModule_AddObject(module_glm, "fmat2x3", (PyObject *)&hfmat2x3Type); Py_INCREF(&hfmat2x4Type); PyModule_AddObject(module_glm, "fmat2x4", (PyObject *)&hfmat2x4Type); Py_INCREF(&hfmat3x2Type); PyModule_AddObject(module_glm, "fmat3x2", (PyObject *)&hfmat3x2Type); Py_INCREF(&hfmat3x3Type); PyModule_AddObject(module_glm, "fmat3x3", (PyObject *)&hfmat3x3Type); Py_INCREF(&hfmat3x4Type); PyModule_AddObject(module_glm, "fmat3x4", (PyObject *)&hfmat3x4Type); Py_INCREF(&hfmat4x2Type); PyModule_AddObject(module_glm, "fmat4x2", (PyObject *)&hfmat4x2Type); Py_INCREF(&hfmat4x3Type); PyModule_AddObject(module_glm, "fmat4x3", (PyObject *)&hfmat4x3Type); Py_INCREF(&hfmat4x4Type); PyModule_AddObject(module_glm, "fmat4x4", (PyObject *)&hfmat4x4Type); Py_INCREF(&hfmat2x2Type); PyModule_AddObject(module_glm, "fmat2", (PyObject *)&hfmat2x2Type); Py_INCREF(&hfmat3x3Type); PyModule_AddObject(module_glm, "fmat3", (PyObject *)&hfmat3x3Type); Py_INCREF(&hfmat4x4Type); PyModule_AddObject(module_glm, "fmat4", (PyObject *)&hfmat4x4Type); Py_INCREF(&hdmat2x2Type); PyModule_AddObject(module_glm, "dmat2x2", (PyObject *)&hdmat2x2Type); Py_INCREF(&hdmat2x3Type); PyModule_AddObject(module_glm, "dmat2x3", (PyObject *)&hdmat2x3Type); Py_INCREF(&hdmat2x4Type); PyModule_AddObject(module_glm, "dmat2x4", (PyObject *)&hdmat2x4Type); Py_INCREF(&hdmat3x2Type); PyModule_AddObject(module_glm, "dmat3x2", (PyObject *)&hdmat3x2Type); Py_INCREF(&hdmat3x3Type); PyModule_AddObject(module_glm, "dmat3x3", (PyObject *)&hdmat3x3Type); Py_INCREF(&hdmat3x4Type); PyModule_AddObject(module_glm, "dmat3x4", (PyObject *)&hdmat3x4Type); Py_INCREF(&hdmat4x2Type); PyModule_AddObject(module_glm, "dmat4x2", (PyObject *)&hdmat4x2Type); Py_INCREF(&hdmat4x3Type); PyModule_AddObject(module_glm, "dmat4x3", (PyObject *)&hdmat4x3Type); Py_INCREF(&hdmat4x4Type); PyModule_AddObject(module_glm, "dmat4x4", (PyObject *)&hdmat4x4Type); Py_INCREF(&hdmat2x2Type); PyModule_AddObject(module_glm, "dmat2", (PyObject *)&hdmat2x2Type); Py_INCREF(&hdmat3x3Type); PyModule_AddObject(module_glm, "dmat3", (PyObject *)&hdmat3x3Type); Py_INCREF(&hdmat4x4Type); PyModule_AddObject(module_glm, "dmat4", (PyObject *)&hdmat4x4Type); Py_INCREF(&himat2x2Type); PyModule_AddObject(module_glm, "imat2x2", (PyObject *)&himat2x2Type); Py_INCREF(&himat2x3Type); PyModule_AddObject(module_glm, "imat2x3", (PyObject *)&himat2x3Type); Py_INCREF(&himat2x4Type); PyModule_AddObject(module_glm, "imat2x4", (PyObject *)&himat2x4Type); Py_INCREF(&himat3x2Type); PyModule_AddObject(module_glm, "imat3x2", (PyObject *)&himat3x2Type); Py_INCREF(&himat3x3Type); PyModule_AddObject(module_glm, "imat3x3", (PyObject *)&himat3x3Type); Py_INCREF(&himat3x4Type); PyModule_AddObject(module_glm, "imat3x4", (PyObject *)&himat3x4Type); Py_INCREF(&himat4x2Type); PyModule_AddObject(module_glm, "imat4x2", (PyObject *)&himat4x2Type); Py_INCREF(&himat4x3Type); PyModule_AddObject(module_glm, "imat4x3", (PyObject *)&himat4x3Type); Py_INCREF(&himat4x4Type); PyModule_AddObject(module_glm, "imat4x4", (PyObject *)&himat4x4Type); Py_INCREF(&himat2x2Type); PyModule_AddObject(module_glm, "imat2", (PyObject *)&himat2x2Type); Py_INCREF(&himat3x3Type); PyModule_AddObject(module_glm, "imat3", (PyObject *)&himat3x3Type); Py_INCREF(&himat4x4Type); PyModule_AddObject(module_glm, "imat4", (PyObject *)&himat4x4Type); Py_INCREF(&humat2x2Type); PyModule_AddObject(module_glm, "umat2x2", (PyObject *)&humat2x2Type); Py_INCREF(&humat2x3Type); PyModule_AddObject(module_glm, "umat2x3", (PyObject *)&humat2x3Type); Py_INCREF(&humat2x4Type); PyModule_AddObject(module_glm, "umat2x4", (PyObject *)&humat2x4Type); Py_INCREF(&humat3x2Type); PyModule_AddObject(module_glm, "umat3x2", (PyObject *)&humat3x2Type); Py_INCREF(&humat3x3Type); PyModule_AddObject(module_glm, "umat3x3", (PyObject *)&humat3x3Type); Py_INCREF(&humat3x4Type); PyModule_AddObject(module_glm, "umat3x4", (PyObject *)&humat3x4Type); Py_INCREF(&humat4x2Type); PyModule_AddObject(module_glm, "umat4x2", (PyObject *)&humat4x2Type); Py_INCREF(&humat4x3Type); PyModule_AddObject(module_glm, "umat4x3", (PyObject *)&humat4x3Type); Py_INCREF(&humat4x4Type); PyModule_AddObject(module_glm, "umat4x4", (PyObject *)&humat4x4Type); Py_INCREF(&humat2x2Type); PyModule_AddObject(module_glm, "umat2", (PyObject *)&humat2x2Type); Py_INCREF(&humat3x3Type); PyModule_AddObject(module_glm, "umat3", (PyObject *)&humat3x3Type); Py_INCREF(&humat4x4Type); PyModule_AddObject(module_glm, "umat4", (PyObject *)&humat4x4Type); Py_INCREF(&hfmat2x2Type); PyModule_AddObject(module_glm, "f32mat2x2", (PyObject *)&hfmat2x2Type); Py_INCREF(&hfmat2x3Type); PyModule_AddObject(module_glm, "f32mat2x3", (PyObject *)&hfmat2x3Type); Py_INCREF(&hfmat2x4Type); PyModule_AddObject(module_glm, "f32mat2x4", (PyObject *)&hfmat2x4Type); Py_INCREF(&hfmat3x2Type); PyModule_AddObject(module_glm, "f32mat3x2", (PyObject *)&hfmat3x2Type); Py_INCREF(&hfmat3x3Type); PyModule_AddObject(module_glm, "f32mat3x3", (PyObject *)&hfmat3x3Type); Py_INCREF(&hfmat3x4Type); PyModule_AddObject(module_glm, "f32mat3x4", (PyObject *)&hfmat3x4Type); Py_INCREF(&hfmat4x2Type); PyModule_AddObject(module_glm, "f32mat4x2", (PyObject *)&hfmat4x2Type); Py_INCREF(&hfmat4x3Type); PyModule_AddObject(module_glm, "f32mat4x3", (PyObject *)&hfmat4x3Type); Py_INCREF(&hfmat4x4Type); PyModule_AddObject(module_glm, "f32mat4x4", (PyObject *)&hfmat4x4Type); Py_INCREF(&hfmat2x2Type); PyModule_AddObject(module_glm, "f32mat2", (PyObject *)&hfmat2x2Type); Py_INCREF(&hfmat3x3Type); PyModule_AddObject(module_glm, "f32mat3", (PyObject *)&hfmat3x3Type); Py_INCREF(&hfmat4x4Type); PyModule_AddObject(module_glm, "f32mat4", (PyObject *)&hfmat4x4Type); Py_INCREF(&hdmat2x2Type); PyModule_AddObject(module_glm, "f64mat2x2", (PyObject *)&hdmat2x2Type); Py_INCREF(&hdmat2x3Type); PyModule_AddObject(module_glm, "f64mat2x3", (PyObject *)&hdmat2x3Type); Py_INCREF(&hdmat2x4Type); PyModule_AddObject(module_glm, "f64mat2x4", (PyObject *)&hdmat2x4Type); Py_INCREF(&hdmat3x2Type); PyModule_AddObject(module_glm, "f64mat3x2", (PyObject *)&hdmat3x2Type); Py_INCREF(&hdmat3x3Type); PyModule_AddObject(module_glm, "f64mat3x3", (PyObject *)&hdmat3x3Type); Py_INCREF(&hdmat3x4Type); PyModule_AddObject(module_glm, "f64mat3x4", (PyObject *)&hdmat3x4Type); Py_INCREF(&hdmat4x2Type); PyModule_AddObject(module_glm, "f64mat4x2", (PyObject *)&hdmat4x2Type); Py_INCREF(&hdmat4x3Type); PyModule_AddObject(module_glm, "f64mat4x3", (PyObject *)&hdmat4x3Type); Py_INCREF(&hdmat4x4Type); PyModule_AddObject(module_glm, "f64mat4x4", (PyObject *)&hdmat4x4Type); Py_INCREF(&hdmat2x2Type); PyModule_AddObject(module_glm, "f64mat2", (PyObject *)&hdmat2x2Type); Py_INCREF(&hdmat3x3Type); PyModule_AddObject(module_glm, "f64mat3", (PyObject *)&hdmat3x3Type); Py_INCREF(&hdmat4x4Type); PyModule_AddObject(module_glm, "f64mat4", (PyObject *)&hdmat4x4Type); Py_INCREF(&himat2x2Type); PyModule_AddObject(module_glm, "i32mat2x2", (PyObject *)&himat2x2Type); Py_INCREF(&himat2x3Type); PyModule_AddObject(module_glm, "i32mat2x3", (PyObject *)&himat2x3Type); Py_INCREF(&himat2x4Type); PyModule_AddObject(module_glm, "i32mat2x4", (PyObject *)&himat2x4Type); Py_INCREF(&himat3x2Type); PyModule_AddObject(module_glm, "i32mat3x2", (PyObject *)&himat3x2Type); Py_INCREF(&himat3x3Type); PyModule_AddObject(module_glm, "i32mat3x3", (PyObject *)&himat3x3Type); Py_INCREF(&himat3x4Type); PyModule_AddObject(module_glm, "i32mat3x4", (PyObject *)&himat3x4Type); Py_INCREF(&himat4x2Type); PyModule_AddObject(module_glm, "i32mat4x2", (PyObject *)&himat4x2Type); Py_INCREF(&himat4x3Type); PyModule_AddObject(module_glm, "i32mat4x3", (PyObject *)&himat4x3Type); Py_INCREF(&himat4x4Type); PyModule_AddObject(module_glm, "i32mat4x4", (PyObject *)&himat4x4Type); Py_INCREF(&himat2x2Type); PyModule_AddObject(module_glm, "i32mat2", (PyObject *)&himat2x2Type); Py_INCREF(&himat3x3Type); PyModule_AddObject(module_glm, "i32mat3", (PyObject *)&himat3x3Type); Py_INCREF(&himat4x4Type); PyModule_AddObject(module_glm, "i32mat4", (PyObject *)&himat4x4Type); Py_INCREF(&humat2x2Type); PyModule_AddObject(module_glm, "u32mat2x2", (PyObject *)&humat2x2Type); Py_INCREF(&humat2x3Type); PyModule_AddObject(module_glm, "u32mat2x3", (PyObject *)&humat2x3Type); Py_INCREF(&humat2x4Type); PyModule_AddObject(module_glm, "u32mat2x4", (PyObject *)&humat2x4Type); Py_INCREF(&humat3x2Type); PyModule_AddObject(module_glm, "u32mat3x2", (PyObject *)&humat3x2Type); Py_INCREF(&humat3x3Type); PyModule_AddObject(module_glm, "u32mat3x3", (PyObject *)&humat3x3Type); Py_INCREF(&humat3x4Type); PyModule_AddObject(module_glm, "u32mat3x4", (PyObject *)&humat3x4Type); Py_INCREF(&humat4x2Type); PyModule_AddObject(module_glm, "u32mat4x2", (PyObject *)&humat4x2Type); Py_INCREF(&humat4x3Type); PyModule_AddObject(module_glm, "u32mat4x3", (PyObject *)&humat4x3Type); Py_INCREF(&humat4x4Type); PyModule_AddObject(module_glm, "u32mat4x4", (PyObject *)&humat4x4Type); Py_INCREF(&humat2x2Type); PyModule_AddObject(module_glm, "u32mat2", (PyObject *)&humat2x2Type); Py_INCREF(&humat3x3Type); PyModule_AddObject(module_glm, "u32mat3", (PyObject *)&humat3x3Type); Py_INCREF(&humat4x4Type); PyModule_AddObject(module_glm, "u32mat4", (PyObject *)&humat4x4Type); Py_INCREF(&hfvec1Type); PyModule_AddObject(module_glm, "fvec1", (PyObject *)&hfvec1Type); Py_INCREF(&hfvec2Type); PyModule_AddObject(module_glm, "fvec2", (PyObject *)&hfvec2Type); Py_INCREF(&hfvec3Type); PyModule_AddObject(module_glm, "fvec3", (PyObject *)&hfvec3Type); Py_INCREF(&hfvec4Type); PyModule_AddObject(module_glm, "fvec4", (PyObject *)&hfvec4Type); Py_INCREF(&hdvec1Type); PyModule_AddObject(module_glm, "dvec1", (PyObject *)&hdvec1Type); Py_INCREF(&hdvec2Type); PyModule_AddObject(module_glm, "dvec2", (PyObject *)&hdvec2Type); Py_INCREF(&hdvec3Type); PyModule_AddObject(module_glm, "dvec3", (PyObject *)&hdvec3Type); Py_INCREF(&hdvec4Type); PyModule_AddObject(module_glm, "dvec4", (PyObject *)&hdvec4Type); Py_INCREF(&hfvec1Type); PyModule_AddObject(module_glm, "f32vec1", (PyObject *)&hfvec1Type); Py_INCREF(&hfvec2Type); PyModule_AddObject(module_glm, "f32vec2", (PyObject *)&hfvec2Type); Py_INCREF(&hfvec3Type); PyModule_AddObject(module_glm, "f32vec3", (PyObject *)&hfvec3Type); Py_INCREF(&hfvec4Type); PyModule_AddObject(module_glm, "f32vec4", (PyObject *)&hfvec4Type); Py_INCREF(&hdvec1Type); PyModule_AddObject(module_glm, "f64vec1", (PyObject *)&hdvec1Type); Py_INCREF(&hdvec2Type); PyModule_AddObject(module_glm, "f64vec2", (PyObject *)&hdvec2Type); Py_INCREF(&hdvec3Type); PyModule_AddObject(module_glm, "f64vec3", (PyObject *)&hdvec3Type); Py_INCREF(&hdvec4Type); PyModule_AddObject(module_glm, "f64vec4", (PyObject *)&hdvec4Type); Py_INCREF(&hi8vec1Type); PyModule_AddObject(module_glm, "i8vec1", (PyObject *)&hi8vec1Type); Py_INCREF(&hi8vec2Type); PyModule_AddObject(module_glm, "i8vec2", (PyObject *)&hi8vec2Type); Py_INCREF(&hi8vec3Type); PyModule_AddObject(module_glm, "i8vec3", (PyObject *)&hi8vec3Type); Py_INCREF(&hi8vec4Type); PyModule_AddObject(module_glm, "i8vec4", (PyObject *)&hi8vec4Type); Py_INCREF(&hi16vec1Type); PyModule_AddObject(module_glm, "i16vec1", (PyObject *)&hi16vec1Type); Py_INCREF(&hi16vec2Type); PyModule_AddObject(module_glm, "i16vec2", (PyObject *)&hi16vec2Type); Py_INCREF(&hi16vec3Type); PyModule_AddObject(module_glm, "i16vec3", (PyObject *)&hi16vec3Type); Py_INCREF(&hi16vec4Type); PyModule_AddObject(module_glm, "i16vec4", (PyObject *)&hi16vec4Type); Py_INCREF(&hivec1Type); PyModule_AddObject(module_glm, "i32vec1", (PyObject *)&hivec1Type); Py_INCREF(&hivec2Type); PyModule_AddObject(module_glm, "i32vec2", (PyObject *)&hivec2Type); Py_INCREF(&hivec3Type); PyModule_AddObject(module_glm, "i32vec3", (PyObject *)&hivec3Type); Py_INCREF(&hivec4Type); PyModule_AddObject(module_glm, "i32vec4", (PyObject *)&hivec4Type); Py_INCREF(&hivec1Type); PyModule_AddObject(module_glm, "ivec1", (PyObject *)&hivec1Type); Py_INCREF(&hivec2Type); PyModule_AddObject(module_glm, "ivec2", (PyObject *)&hivec2Type); Py_INCREF(&hivec3Type); PyModule_AddObject(module_glm, "ivec3", (PyObject *)&hivec3Type); Py_INCREF(&hivec4Type); PyModule_AddObject(module_glm, "ivec4", (PyObject *)&hivec4Type); Py_INCREF(&hi64vec1Type); PyModule_AddObject(module_glm, "i64vec1", (PyObject *)&hi64vec1Type); Py_INCREF(&hi64vec2Type); PyModule_AddObject(module_glm, "i64vec2", (PyObject *)&hi64vec2Type); Py_INCREF(&hi64vec3Type); PyModule_AddObject(module_glm, "i64vec3", (PyObject *)&hi64vec3Type); Py_INCREF(&hi64vec4Type); PyModule_AddObject(module_glm, "i64vec4", (PyObject *)&hi64vec4Type); Py_INCREF(&hu8vec1Type); PyModule_AddObject(module_glm, "u8vec1", (PyObject *)&hu8vec1Type); Py_INCREF(&hu8vec2Type); PyModule_AddObject(module_glm, "u8vec2", (PyObject *)&hu8vec2Type); Py_INCREF(&hu8vec3Type); PyModule_AddObject(module_glm, "u8vec3", (PyObject *)&hu8vec3Type); Py_INCREF(&hu8vec4Type); PyModule_AddObject(module_glm, "u8vec4", (PyObject *)&hu8vec4Type); Py_INCREF(&hu16vec1Type); PyModule_AddObject(module_glm, "u16vec1", (PyObject *)&hu16vec1Type); Py_INCREF(&hu16vec2Type); PyModule_AddObject(module_glm, "u16vec2", (PyObject *)&hu16vec2Type); Py_INCREF(&hu16vec3Type); PyModule_AddObject(module_glm, "u16vec3", (PyObject *)&hu16vec3Type); Py_INCREF(&hu16vec4Type); PyModule_AddObject(module_glm, "u16vec4", (PyObject *)&hu16vec4Type); Py_INCREF(&huvec1Type); PyModule_AddObject(module_glm, "u32vec1", (PyObject *)&huvec1Type); Py_INCREF(&huvec2Type); PyModule_AddObject(module_glm, "u32vec2", (PyObject *)&huvec2Type); Py_INCREF(&huvec3Type); PyModule_AddObject(module_glm, "u32vec3", (PyObject *)&huvec3Type); Py_INCREF(&huvec4Type); PyModule_AddObject(module_glm, "u32vec4", (PyObject *)&huvec4Type); Py_INCREF(&huvec1Type); PyModule_AddObject(module_glm, "uvec1", (PyObject *)&huvec1Type); Py_INCREF(&huvec2Type); PyModule_AddObject(module_glm, "uvec2", (PyObject *)&huvec2Type); Py_INCREF(&huvec3Type); PyModule_AddObject(module_glm, "uvec3", (PyObject *)&huvec3Type); Py_INCREF(&huvec4Type); PyModule_AddObject(module_glm, "uvec4", (PyObject *)&huvec4Type); Py_INCREF(&hu64vec1Type); PyModule_AddObject(module_glm, "u64vec1", (PyObject *)&hu64vec1Type); Py_INCREF(&hu64vec2Type); PyModule_AddObject(module_glm, "u64vec2", (PyObject *)&hu64vec2Type); Py_INCREF(&hu64vec3Type); PyModule_AddObject(module_glm, "u64vec3", (PyObject *)&hu64vec3Type); Py_INCREF(&hu64vec4Type); PyModule_AddObject(module_glm, "u64vec4", (PyObject *)&hu64vec4Type); Py_INCREF(&hbvec1Type); PyModule_AddObject(module_glm, "bvec1", (PyObject *)&hbvec1Type); Py_INCREF(&hbvec2Type); PyModule_AddObject(module_glm, "bvec2", (PyObject *)&hbvec2Type); Py_INCREF(&hbvec3Type); PyModule_AddObject(module_glm, "bvec3", (PyObject *)&hbvec3Type); Py_INCREF(&hbvec4Type); PyModule_AddObject(module_glm, "bvec4", (PyObject *)&hbvec4Type); Py_INCREF(&hfmvec2Type); PyModule_AddObject(module_glm, "mvec2", (PyObject*)&hfmvec2Type); Py_INCREF(&hfmvec3Type); PyModule_AddObject(module_glm, "mvec3", (PyObject*)&hfmvec3Type); Py_INCREF(&hfmvec4Type); PyModule_AddObject(module_glm, "mvec4", (PyObject*)&hfmvec4Type); Py_INCREF(&hdmvec2Type); PyModule_AddObject(module_glm, "dmvec2", (PyObject*)&hdmvec2Type); Py_INCREF(&hdmvec3Type); PyModule_AddObject(module_glm, "dmvec3", (PyObject*)&hdmvec3Type); Py_INCREF(&hdmvec4Type); PyModule_AddObject(module_glm, "dmvec4", (PyObject*)&hdmvec4Type); Py_INCREF(&himvec2Type); PyModule_AddObject(module_glm, "imvec2", (PyObject*)&himvec2Type); Py_INCREF(&himvec3Type); PyModule_AddObject(module_glm, "imvec3", (PyObject*)&himvec3Type); Py_INCREF(&himvec4Type); PyModule_AddObject(module_glm, "imvec4", (PyObject*)&himvec4Type); Py_INCREF(&humvec2Type); PyModule_AddObject(module_glm, "umvec2", (PyObject*)&humvec2Type); Py_INCREF(&humvec3Type); PyModule_AddObject(module_glm, "umvec3", (PyObject*)&humvec3Type); Py_INCREF(&humvec4Type); PyModule_AddObject(module_glm, "umvec4", (PyObject*)&humvec4Type); Py_INCREF(&glmArrayType); PyModule_AddObject(module_glm, "array", (PyObject*)&glmArrayType); PyGLM_VERSION_STRING = PyUnicode_FromString("PyGLM (" PyGLM_BUILD_STRING ") version " PyGLM_VERSION); Py_INCREF(PyGLM_VERSION_STRING); PyModule_AddObject(module_glm, "version", PyGLM_VERSION_STRING); PyGLM_LICENSE_STRING = PyUnicode_FromString(PyGLM_LICENSE); Py_INCREF(PyGLM_LICENSE_STRING); PyModule_AddObject(module_glm, "license", PyGLM_LICENSE_STRING); PyModule_AddStringConstant(module_glm, "__version__", PyGLM_VERSION); return module_glm; } } #if GLM_COMPILER & GLM_COMPILER_VC #pragma warning(pop) #elif GLM_COMPILER & GLM_COMPILER_GCC #pragma GCC diagnostic pop #elif GLM_COMPILER & GLM_COMPILER_CLANG #pragma clang diagnostic pop #endif Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/000077500000000000000000000000001511156275200173075ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/compiler_setup.h000066400000000000000000000006261511156275200225160ustar00rootroot00000000000000#pragma once #include "imports.h" #if GLM_COMPILER & GLM_COMPILER_VC #pragma warning(push) #pragma warning(disable : 4127) #elif GLM_COMPILER & GLM_COMPILER_GCC #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunknown-pragmas" #elif GLM_COMPILER & GLM_COMPILER_CLANG #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wmissing-braces" #endif #define UNBRACKET(...) __VA_ARGS__Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/000077500000000000000000000000001511156275200213175ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/all.h000066400000000000000000000002571511156275200222440ustar00rootroot00000000000000#pragma once #include "function_generator_macros.h" #include "detail/all.h" #include "stable_extensions/all.h" #include "unstable_extensions/all.h" #include "other/all.h"Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/detail/000077500000000000000000000000001511156275200225615ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/detail/all.h000066400000000000000000000003701511156275200235020ustar00rootroot00000000000000#pragma once #include "func_packing.h" #include "func_integer.h" #include "func_vector_relational.h" #include "func_exponential.h" #include "func_common.h" #include "func_geometric.h" #include "func_matrix.h" #include "func_trigonometric.h"Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/detail/func_common.h000066400000000000000000007664661511156275200252660ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" #include "../function_generator_macros.h" PyDoc_STRVAR(abs_docstr, "abs(x: float) -> float\n" " Returns `x` if `x >= 0`; otherwise it returns `-x`.\n" "abs(x: vecN) -> vecN\n" " For each component `c` of `x`,\n" " Returns `c` if `c >= 0`; otherwise it returns `-c`.\n" ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(abs) PyDoc_STRVAR(sign_docstr, "sign(x: number) -> float\n" " Returns `1.0` if `x > 0`, `0.0` if `x == 0`, or `-1.0` if `x < 0`.\n" "sign(x: vecN) -> vecN\n" " For every component `c` of `x`:\n" " Returns `1.0` if `x > 0`, `0.0` if `x == 0`, or `-1.0` if `x < 0`." ); static PyObject* sign_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::sign(PyGLM_Number_FromPyObject(arg))); } PyGLM_PTI_Init0(arg, PyGLM_T_ANY_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD | PyGLM_DT_INT | PyGLM_DT_INT64 | PyGLM_DT_INT16 | PyGLM_DT_INT8); if (PyGLM_Vec_PTI_Check0(1, float, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(1, float, arg))); } if (PyGLM_Vec_PTI_Check0(1, double, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(1, double, arg))); } if (PyGLM_Vec_PTI_Check0(1, int32, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(1, int32, arg))); } if (PyGLM_Vec_PTI_Check0(1, int64, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(1, int64, arg))); } if (PyGLM_Vec_PTI_Check0(1, int16, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(1, int16, arg))); } if (PyGLM_Vec_PTI_Check0(1, int8, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(1, int8, arg))); } if (PyGLM_Vec_PTI_Check0(2, float, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(2, float, arg))); } if (PyGLM_Vec_PTI_Check0(2, double, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(2, double, arg))); } if (PyGLM_Vec_PTI_Check0(2, int32, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(2, int32, arg))); } if (PyGLM_Vec_PTI_Check0(2, int64, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(2, int64, arg))); } if (PyGLM_Vec_PTI_Check0(2, int16, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(2, int16, arg))); } if (PyGLM_Vec_PTI_Check0(2, int8, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(2, int8, arg))); } if (PyGLM_Vec_PTI_Check0(3, float, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(3, float, arg))); } if (PyGLM_Vec_PTI_Check0(3, double, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(3, double, arg))); } if (PyGLM_Vec_PTI_Check0(3, int32, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(3, int32, arg))); } if (PyGLM_Vec_PTI_Check0(3, int64, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(3, int64, arg))); } if (PyGLM_Vec_PTI_Check0(3, int16, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(3, int16, arg))); } if (PyGLM_Vec_PTI_Check0(3, int8, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(3, int8, arg))); } if (PyGLM_Vec_PTI_Check0(4, float, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(4, float, arg))); } if (PyGLM_Vec_PTI_Check0(4, double, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(4, double, arg))); } if (PyGLM_Vec_PTI_Check0(4, int32, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(4, int32, arg))); } if (PyGLM_Vec_PTI_Check0(4, int64, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(4, int64, arg))); } if (PyGLM_Vec_PTI_Check0(4, int16, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(4, int16, arg))); } if (PyGLM_Vec_PTI_Check0(4, int8, arg)) { return pack(glm::sign(PyGLM_Vec_PTI_Get0(4, int8, arg))); } PyGLM_TYPEERROR_O("invalid argument type for sign(): ", arg); return NULL; } PyDoc_STRVAR(floor_docstr, "floor(x: float) -> float\n" " Returns a value equal to the nearest integer that is less then or equal to `x`.\n" "floor(v: vecN) -> vecN\n" " For each component `c` of `v`:\n" " Returns a value equal to the nearest integer that is less then or equal to `c`." ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(floor) PyDoc_STRVAR(trunc_docstr, "trunc(x: number) -> float\n" " Returns a value equal to the nearest integer to `x` whose absolute value is not larger than\n" " the absolute value of `x`.\n" "trunc(x: vecN) -> vecN\n" " For every component `c` of `x`:\n" " Returns a value equal to the nearest integer to `c` whose absolute value is not larger than\n" " the absolute value of `c`." ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(trunc) PyDoc_STRVAR(round_docstr, "round(x: number) -> float\n" " Returns a value equal to the nearest integer to `x`. The fraction `0.5` will round in a\n" " direction chosen by the implementation, presumably the direction that is fastest. This\n" " includes the possibility that `round(x)` returns the same value as `roundEven(x)`\n" "round(x: vecN) -> vecN\n" " Returns a value equal to the nearest integer to `x`. The fraction `0.5` will round in a\n" " direction chosen by the implementation, presumably the direction that is fastest. This\n" " includes the possibility that `round(x)` returns the same value as `roundEven(x)` for all\n" " values of `x`." ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(round) PyDoc_STRVAR(roundEven_docstr, "roundEven(x: number) -> float\n" " Returns a value equal to the nearest integer to `x`. A fractional part of `0.5` will round\n" " toward the nearest even integer. (Both `3.5` and `4.5` for `x` will return `4.0`.)\n" "roundEven(x: vecN) -> vecN\n" " Returns a value equal to the nearest integer to `x`. A fractional part of `0.5` will round\n" " toward the nearest even integer. (Both `3.5` and `4.5` for `x` will return `4.0`.)" ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(roundEven) PyDoc_STRVAR(ceil_docstr, "ceil(x: float) -> float\n" " Returns a value equal to the nearest integer that is greater than or equal to `x`.\n" "ceil(x: vecN) -> vecN\n" " For each component `c` of `x`,\n" " Returns a value equal to the nearest integer that is greater than or equal to `c`.\n" ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(ceil) PyDoc_STRVAR(fract_docstr, "fract(x: float) -> float\n" " Returns `x - floor(x)`.\n" "fract(c: vecN) -> vecN\n" " Returns `x - floor(x)`." ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(fract) PyDoc_STRVAR(mod_docstr, "mod(x: vecN, y: vecN) -> vecN\n" " Returns `x - y * floor(x / y)` for each component in `x` using the floating point value `y`.\n" "mod(x: vecN, y: number) -> vecN\n" " Returns `x - y * floor(x / y)` for each component in `x` using the floating point value `y`.\n" "mod(x: number, y: number) -> number\n" " Returns `x - y * floor(x / y)` for each component in `x` using the floating point value `y`." ); PyGLM_MAKE_GLM_FUNC_NN_VV_VN__tfF(mod) PyDoc_STRVAR(min_docstr, "min(x: number, y: number) -> float\n" " Returns `y` if `y < x`; otherwise, it returns `x`.\n" "min(x: vecN, y: number) -> vecN\n" " Returns `y` if `y < x`; otherwise, it returns `x`.\n" "min(x: vecN, y: vecN) -> vecN\n" " Returns `y` if `y < x`; otherwise, it returns `x`.\n" "min(a: number, b: number, c: number) -> float\n" " Returns the minimum value of 3 inputs.\n" "min(a: vecN, b: vecN, c: vecN) -> vecN\n" " Returns the minimum component wise value of 3 inputs.\n" "min(a: number, b: number, c: number, d: number) -> float\n" " Returns the minimum value of 4 inputs.\n" "min(a: vecN, b: vecN, c: vecN, d: vecN) -> vecN\n" " Returns the minimum component wise value of 4 inputs.\n" "min(iterable) -> any\n" " Returns the smallest number or the minimum component wise value respectively." ); template static T apply_min(std::vector& items) { T minimum = items[0]; for (T item : items) { if (item == minimum) { continue; } minimum = glm::min(item, minimum); } return minimum; } template static inline PyObject* apply_min_from_PyObject_number_vector(std::vector& items) { std::vector itemsAsT = std::vector(items.size()); for (size_t i = 0; i < items.size(); i++) { PyObject* item = items[i]; itemsAsT[i] = PyGLM_Number_FromPyObject(item); Py_DECREF(item); } return pack(apply_min(itemsAsT)); } template static inline PyObject* apply_min_from_PyObject_vector_vector(std::vector& items) { std::vector> itemsAsVecT = std::vector>(items.size()); for (size_t i = 0; i < items.size(); i++) { PyObject* item = items[i]; itemsAsVecT[i] = reinterpret_cast*>(item)->super_type; Py_DECREF(item); } return pack(apply_min(itemsAsVecT)); } #define min_GEN_TYPE_SWITCH_STATEMENT_FOR_VECTOR(L) \ switch (pti->format) { \ case get_format_specifier(): \ return apply_min_from_PyObject_vector_vector(items); \ case get_format_specifier(): \ return apply_min_from_PyObject_vector_vector(items); \ case get_format_specifier(): \ return apply_min_from_PyObject_vector_vector(items); \ case get_format_specifier(): \ return apply_min_from_PyObject_vector_vector(items); \ case get_format_specifier(): \ return apply_min_from_PyObject_vector_vector(items); \ case get_format_specifier(): \ return apply_min_from_PyObject_vector_vector(items); \ case get_format_specifier(): \ return apply_min_from_PyObject_vector_vector(items); \ case get_format_specifier(): \ return apply_min_from_PyObject_vector_vector(items); \ case get_format_specifier(): \ return apply_min_from_PyObject_vector_vector(items); \ case get_format_specifier(): \ return apply_min_from_PyObject_vector_vector(items); \ case get_format_specifier(): \ return apply_min_from_PyObject_vector_vector(items); \ } static PyObject* min_(PyObject*, PyObject* args) { PyObject *arg1, *arg2 = NULL, *arg3 = NULL, *arg4 = NULL; if (!PyArg_UnpackTuple(args, "min", 1, 4, &arg1, &arg2, &arg3, &arg4)) return NULL; if (arg2 == NULL) { if (PyObject_IterCheck(arg1)) { PyObject* iterator = PyObject_GetIter(arg1); std::vector items{}; PyTypeObject* type = NULL; PyObject* currentItem; while ((currentItem = PyIter_Next(iterator))) { if (type == NULL) { if ((currentItem->ob_type->tp_dealloc != (destructor)vec_dealloc) && !PyLong_Check(currentItem) && !PyFloat_Check(currentItem) && !PyBool_Check(currentItem)) { Py_DECREF(currentItem); Py_DECREF(iterator); PyGLM_TYPEERROR_O("invalid item type(s) for 'min()'. Expected number or PyGLM type, got ", currentItem); return NULL; } type = Py_TYPE(currentItem); } else if (type != Py_TYPE(currentItem)) { Py_DECREF(currentItem); for (PyObject* item : items) { Py_DECREF(item); } Py_DECREF(iterator); PyGLM_TYPEERROR_2O("invalid item type(s) for 'min()'. Expected items of equal type, got ", currentItem, items[0]); return NULL; } items.push_back(currentItem); } Py_DECREF(iterator); if (PyErr_Occurred()) { for (PyObject* item : items) { Py_DECREF(item); } return NULL; } if (items.size() == 0) { PyErr_SetString(PyExc_ValueError, "invalid argument value for 'min()'. Iterable has no items."); return NULL; } if (type == &PyLong_Type) { return apply_min_from_PyObject_number_vector(items); } else if (type == &PyFloat_Type) { return apply_min_from_PyObject_number_vector(items); } else if (type == &PyBool_Type) { return apply_min_from_PyObject_number_vector(items); } else { PyGLMTypeObject* pti = (PyGLMTypeObject*)type; switch (pti->C) { case 1: min_GEN_TYPE_SWITCH_STATEMENT_FOR_VECTOR(1); break; case 2: min_GEN_TYPE_SWITCH_STATEMENT_FOR_VECTOR(2); break; case 3: min_GEN_TYPE_SWITCH_STATEMENT_FOR_VECTOR(3); break; case 4: min_GEN_TYPE_SWITCH_STATEMENT_FOR_VECTOR(4); break; } } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for min()"); return NULL; } if (arg3 == NULL) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_ALL); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_ALL); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2))); } if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, int, arg1), PyGLM_Vec_PTI_Get1(1, int, arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(1, glm::uint, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::uint, arg1), PyGLM_Vec_PTI_Get1(1, glm::uint, arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i64, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::i64, arg1), PyGLM_Vec_PTI_Get1(1, glm::i64, arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u64, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::u64, arg1), PyGLM_Vec_PTI_Get1(1, glm::u64, arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i16, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::i16, arg1), PyGLM_Vec_PTI_Get1(1, glm::i16, arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u16, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::u16, arg1), PyGLM_Vec_PTI_Get1(1, glm::u16, arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i8, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::i8, arg1), PyGLM_Vec_PTI_Get1(1, glm::i8, arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u8, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::u8, arg1), PyGLM_Vec_PTI_Get1(1, glm::u8, arg2))); } if (PyGLM_Vec_PTI_Check0(1, bool, arg1) && PyGLM_Vec_PTI_Check1(1, bool, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, bool, arg1), PyGLM_Vec_PTI_Get1(1, bool, arg2))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2))); } if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, int, arg1), PyGLM_Vec_PTI_Get1(2, int, arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(2, glm::uint, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::uint, arg1), PyGLM_Vec_PTI_Get1(2, glm::uint, arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i64, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::i64, arg1), PyGLM_Vec_PTI_Get1(2, glm::i64, arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u64, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::u64, arg1), PyGLM_Vec_PTI_Get1(2, glm::u64, arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i16, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::i16, arg1), PyGLM_Vec_PTI_Get1(2, glm::i16, arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u16, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::u16, arg1), PyGLM_Vec_PTI_Get1(2, glm::u16, arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i8, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::i8, arg1), PyGLM_Vec_PTI_Get1(2, glm::i8, arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u8, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::u8, arg1), PyGLM_Vec_PTI_Get1(2, glm::u8, arg2))); } if (PyGLM_Vec_PTI_Check0(2, bool, arg1) && PyGLM_Vec_PTI_Check1(2, bool, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, bool, arg1), PyGLM_Vec_PTI_Get1(2, bool, arg2))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2))); } if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, int, arg1), PyGLM_Vec_PTI_Get1(3, int, arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(3, glm::uint, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::uint, arg1), PyGLM_Vec_PTI_Get1(3, glm::uint, arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i64, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::i64, arg1), PyGLM_Vec_PTI_Get1(3, glm::i64, arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u64, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::u64, arg1), PyGLM_Vec_PTI_Get1(3, glm::u64, arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i16, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::i16, arg1), PyGLM_Vec_PTI_Get1(3, glm::i16, arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u16, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::u16, arg1), PyGLM_Vec_PTI_Get1(3, glm::u16, arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i8, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::i8, arg1), PyGLM_Vec_PTI_Get1(3, glm::i8, arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u8, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::u8, arg1), PyGLM_Vec_PTI_Get1(3, glm::u8, arg2))); } if (PyGLM_Vec_PTI_Check0(3, bool, arg1) && PyGLM_Vec_PTI_Check1(3, bool, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, bool, arg1), PyGLM_Vec_PTI_Get1(3, bool, arg2))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2))); } if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, int, arg1), PyGLM_Vec_PTI_Get1(4, int, arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(4, glm::uint, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::uint, arg1), PyGLM_Vec_PTI_Get1(4, glm::uint, arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i64, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::i64, arg1), PyGLM_Vec_PTI_Get1(4, glm::i64, arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u64, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::u64, arg1), PyGLM_Vec_PTI_Get1(4, glm::u64, arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i16, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::i16, arg1), PyGLM_Vec_PTI_Get1(4, glm::i16, arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u16, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::u16, arg1), PyGLM_Vec_PTI_Get1(4, glm::u16, arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i8, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::i8, arg1), PyGLM_Vec_PTI_Get1(4, glm::i8, arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u8, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::u8, arg1), PyGLM_Vec_PTI_Get1(4, glm::u8, arg2))); } if (PyGLM_Vec_PTI_Check0(4, bool, arg1) && PyGLM_Vec_PTI_Check1(4, bool, arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, bool, arg1), PyGLM_Vec_PTI_Get1(4, bool, arg2))); } if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, int, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::uint, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::uint, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::i64, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::i64, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::u64, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::u64, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::i16, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::i16, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::u16, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::u16, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::i8, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::i8, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::u8, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::u8, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, int, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::uint, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::uint, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::i64, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::i64, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::u64, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::u64, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::i16, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::i16, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::u16, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::u16, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::i8, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::i8, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::u8, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::u8, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, int, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::uint, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::uint, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::i64, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::i64, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::u64, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::u64, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::i16, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::i16, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::u16, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::u16, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::i8, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::i8, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::u8, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::u8, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, int, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::uint, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::uint, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::i64, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::i64, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::u64, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::u64, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::i16, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::i16, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::u16, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::u16, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::i8, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::i8, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::u8, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::u8, arg1), PyGLM_Number_FromPyObject(arg2))); } } else { if (arg4 == NULL) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::min(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I | PyGLM_DT_FD); PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2) && PyGLM_Vec_PTI_Check2(1, float, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2), PyGLM_Vec_PTI_Get2(1, float, arg3))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2) && PyGLM_Vec_PTI_Check2(1, double, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2), PyGLM_Vec_PTI_Get2(1, double, arg3))); } if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2) && PyGLM_Vec_PTI_Check2(1, int, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, int, arg1), PyGLM_Vec_PTI_Get1(1, int, arg2), PyGLM_Vec_PTI_Get2(1, int, arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(1, glm::uint, arg2) && PyGLM_Vec_PTI_Check2(1, glm::uint, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::uint, arg1), PyGLM_Vec_PTI_Get1(1, glm::uint, arg2), PyGLM_Vec_PTI_Get2(1, glm::uint, arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i64, arg2) && PyGLM_Vec_PTI_Check2(1, glm::i64, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::i64, arg1), PyGLM_Vec_PTI_Get1(1, glm::i64, arg2), PyGLM_Vec_PTI_Get2(1, glm::i64, arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u64, arg2) && PyGLM_Vec_PTI_Check2(1, glm::u64, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::u64, arg1), PyGLM_Vec_PTI_Get1(1, glm::u64, arg2), PyGLM_Vec_PTI_Get2(1, glm::u64, arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i16, arg2) && PyGLM_Vec_PTI_Check2(1, glm::i16, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::i16, arg1), PyGLM_Vec_PTI_Get1(1, glm::i16, arg2), PyGLM_Vec_PTI_Get2(1, glm::i16, arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u16, arg2) && PyGLM_Vec_PTI_Check2(1, glm::u16, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::u16, arg1), PyGLM_Vec_PTI_Get1(1, glm::u16, arg2), PyGLM_Vec_PTI_Get2(1, glm::u16, arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i8, arg2) && PyGLM_Vec_PTI_Check2(1, glm::i8, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::i8, arg1), PyGLM_Vec_PTI_Get1(1, glm::i8, arg2), PyGLM_Vec_PTI_Get2(1, glm::i8, arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u8, arg2) && PyGLM_Vec_PTI_Check2(1, glm::u8, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::u8, arg1), PyGLM_Vec_PTI_Get1(1, glm::u8, arg2), PyGLM_Vec_PTI_Get2(1, glm::u8, arg3))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2) && PyGLM_Vec_PTI_Check2(2, float, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2), PyGLM_Vec_PTI_Get2(2, float, arg3))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2) && PyGLM_Vec_PTI_Check2(2, double, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2), PyGLM_Vec_PTI_Get2(2, double, arg3))); } if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2) && PyGLM_Vec_PTI_Check2(2, int, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, int, arg1), PyGLM_Vec_PTI_Get1(2, int, arg2), PyGLM_Vec_PTI_Get2(2, int, arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(2, glm::uint, arg2) && PyGLM_Vec_PTI_Check2(2, glm::uint, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::uint, arg1), PyGLM_Vec_PTI_Get1(2, glm::uint, arg2), PyGLM_Vec_PTI_Get2(2, glm::uint, arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i64, arg2) && PyGLM_Vec_PTI_Check2(2, glm::i64, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::i64, arg1), PyGLM_Vec_PTI_Get1(2, glm::i64, arg2), PyGLM_Vec_PTI_Get2(2, glm::i64, arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u64, arg2) && PyGLM_Vec_PTI_Check2(2, glm::u64, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::u64, arg1), PyGLM_Vec_PTI_Get1(2, glm::u64, arg2), PyGLM_Vec_PTI_Get2(2, glm::u64, arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i16, arg2) && PyGLM_Vec_PTI_Check2(2, glm::i16, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::i16, arg1), PyGLM_Vec_PTI_Get1(2, glm::i16, arg2), PyGLM_Vec_PTI_Get2(2, glm::i16, arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u16, arg2) && PyGLM_Vec_PTI_Check2(2, glm::u16, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::u16, arg1), PyGLM_Vec_PTI_Get1(2, glm::u16, arg2), PyGLM_Vec_PTI_Get2(2, glm::u16, arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i8, arg2) && PyGLM_Vec_PTI_Check2(2, glm::i8, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::i8, arg1), PyGLM_Vec_PTI_Get1(2, glm::i8, arg2), PyGLM_Vec_PTI_Get2(2, glm::i8, arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u8, arg2) && PyGLM_Vec_PTI_Check2(2, glm::u8, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::u8, arg1), PyGLM_Vec_PTI_Get1(2, glm::u8, arg2), PyGLM_Vec_PTI_Get2(2, glm::u8, arg3))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2) && PyGLM_Vec_PTI_Check2(3, float, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2), PyGLM_Vec_PTI_Get2(3, float, arg3))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2) && PyGLM_Vec_PTI_Check2(3, double, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2), PyGLM_Vec_PTI_Get2(3, double, arg3))); } if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2) && PyGLM_Vec_PTI_Check2(3, int, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, int, arg1), PyGLM_Vec_PTI_Get1(3, int, arg2), PyGLM_Vec_PTI_Get2(3, int, arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(3, glm::uint, arg2) && PyGLM_Vec_PTI_Check2(3, glm::uint, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::uint, arg1), PyGLM_Vec_PTI_Get1(3, glm::uint, arg2), PyGLM_Vec_PTI_Get2(3, glm::uint, arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i64, arg2) && PyGLM_Vec_PTI_Check2(3, glm::i64, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::i64, arg1), PyGLM_Vec_PTI_Get1(3, glm::i64, arg2), PyGLM_Vec_PTI_Get2(3, glm::i64, arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u64, arg2) && PyGLM_Vec_PTI_Check2(3, glm::u64, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::u64, arg1), PyGLM_Vec_PTI_Get1(3, glm::u64, arg2), PyGLM_Vec_PTI_Get2(3, glm::u64, arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i16, arg2) && PyGLM_Vec_PTI_Check2(3, glm::i16, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::i16, arg1), PyGLM_Vec_PTI_Get1(3, glm::i16, arg2), PyGLM_Vec_PTI_Get2(3, glm::i16, arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u16, arg2) && PyGLM_Vec_PTI_Check2(3, glm::u16, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::u16, arg1), PyGLM_Vec_PTI_Get1(3, glm::u16, arg2), PyGLM_Vec_PTI_Get2(3, glm::u16, arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i8, arg2) && PyGLM_Vec_PTI_Check2(3, glm::i8, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::i8, arg1), PyGLM_Vec_PTI_Get1(3, glm::i8, arg2), PyGLM_Vec_PTI_Get2(3, glm::i8, arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u8, arg2) && PyGLM_Vec_PTI_Check2(3, glm::u8, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::u8, arg1), PyGLM_Vec_PTI_Get1(3, glm::u8, arg2), PyGLM_Vec_PTI_Get2(3, glm::u8, arg3))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2) && PyGLM_Vec_PTI_Check2(4, float, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2), PyGLM_Vec_PTI_Get2(4, float, arg3))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2) && PyGLM_Vec_PTI_Check2(4, double, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2), PyGLM_Vec_PTI_Get2(4, double, arg3))); } if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2) && PyGLM_Vec_PTI_Check2(4, int, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, int, arg1), PyGLM_Vec_PTI_Get1(4, int, arg2), PyGLM_Vec_PTI_Get2(4, int, arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(4, glm::uint, arg2) && PyGLM_Vec_PTI_Check2(4, glm::uint, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::uint, arg1), PyGLM_Vec_PTI_Get1(4, glm::uint, arg2), PyGLM_Vec_PTI_Get2(4, glm::uint, arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i64, arg2) && PyGLM_Vec_PTI_Check2(4, glm::i64, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::i64, arg1), PyGLM_Vec_PTI_Get1(4, glm::i64, arg2), PyGLM_Vec_PTI_Get2(4, glm::i64, arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u64, arg2) && PyGLM_Vec_PTI_Check2(4, glm::u64, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::u64, arg1), PyGLM_Vec_PTI_Get1(4, glm::u64, arg2), PyGLM_Vec_PTI_Get2(4, glm::u64, arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i16, arg2) && PyGLM_Vec_PTI_Check2(4, glm::i16, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::i16, arg1), PyGLM_Vec_PTI_Get1(4, glm::i16, arg2), PyGLM_Vec_PTI_Get2(4, glm::i16, arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u16, arg2) && PyGLM_Vec_PTI_Check2(4, glm::u16, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::u16, arg1), PyGLM_Vec_PTI_Get1(4, glm::u16, arg2), PyGLM_Vec_PTI_Get2(4, glm::u16, arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i8, arg2) && PyGLM_Vec_PTI_Check2(4, glm::i8, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::i8, arg1), PyGLM_Vec_PTI_Get1(4, glm::i8, arg2), PyGLM_Vec_PTI_Get2(4, glm::i8, arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u8, arg2) && PyGLM_Vec_PTI_Check2(4, glm::u8, arg3)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::u8, arg1), PyGLM_Vec_PTI_Get1(4, glm::u8, arg2), PyGLM_Vec_PTI_Get2(4, glm::u8, arg3))); } } else { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4)) { return pack(glm::min(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3), PyGLM_Number_FromPyObject(arg4))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I | PyGLM_DT_FD); PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I | PyGLM_DT_FD); PyGLM_PTI_Init3(arg4, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2) && PyGLM_Vec_PTI_Check2(1, float, arg3) && PyGLM_Vec_PTI_Check3(1, float, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2), PyGLM_Vec_PTI_Get2(1, float, arg3), PyGLM_Vec_PTI_Get3(1, float, arg4))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2) && PyGLM_Vec_PTI_Check2(1, double, arg3) && PyGLM_Vec_PTI_Check3(1, double, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2), PyGLM_Vec_PTI_Get2(1, double, arg3), PyGLM_Vec_PTI_Get3(1, double, arg4))); } if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2) && PyGLM_Vec_PTI_Check2(1, int, arg3) && PyGLM_Vec_PTI_Check3(1, int, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, int, arg1), PyGLM_Vec_PTI_Get1(1, int, arg2), PyGLM_Vec_PTI_Get2(1, int, arg3), PyGLM_Vec_PTI_Get3(1, int, arg4))); } if (PyGLM_Vec_PTI_Check0(1, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(1, glm::uint, arg2) && PyGLM_Vec_PTI_Check2(1, glm::uint, arg3) && PyGLM_Vec_PTI_Check3(1, glm::uint, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::uint, arg1), PyGLM_Vec_PTI_Get1(1, glm::uint, arg2), PyGLM_Vec_PTI_Get2(1, glm::uint, arg3), PyGLM_Vec_PTI_Get3(1, glm::uint, arg4))); } if (PyGLM_Vec_PTI_Check0(1, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i64, arg2) && PyGLM_Vec_PTI_Check2(1, glm::i64, arg3) && PyGLM_Vec_PTI_Check3(1, glm::i64, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::i64, arg1), PyGLM_Vec_PTI_Get1(1, glm::i64, arg2), PyGLM_Vec_PTI_Get2(1, glm::i64, arg3), PyGLM_Vec_PTI_Get3(1, glm::i64, arg4))); } if (PyGLM_Vec_PTI_Check0(1, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u64, arg2) && PyGLM_Vec_PTI_Check2(1, glm::u64, arg3) && PyGLM_Vec_PTI_Check3(1, glm::u64, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::u64, arg1), PyGLM_Vec_PTI_Get1(1, glm::u64, arg2), PyGLM_Vec_PTI_Get2(1, glm::u64, arg3), PyGLM_Vec_PTI_Get3(1, glm::u64, arg4))); } if (PyGLM_Vec_PTI_Check0(1, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i16, arg2) && PyGLM_Vec_PTI_Check2(1, glm::i16, arg3) && PyGLM_Vec_PTI_Check3(1, glm::i16, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::i16, arg1), PyGLM_Vec_PTI_Get1(1, glm::i16, arg2), PyGLM_Vec_PTI_Get2(1, glm::i16, arg3), PyGLM_Vec_PTI_Get3(1, glm::i16, arg4))); } if (PyGLM_Vec_PTI_Check0(1, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u16, arg2) && PyGLM_Vec_PTI_Check2(1, glm::u16, arg3) && PyGLM_Vec_PTI_Check3(1, glm::u16, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::u16, arg1), PyGLM_Vec_PTI_Get1(1, glm::u16, arg2), PyGLM_Vec_PTI_Get2(1, glm::u16, arg3), PyGLM_Vec_PTI_Get3(1, glm::u16, arg4))); } if (PyGLM_Vec_PTI_Check0(1, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i8, arg2) && PyGLM_Vec_PTI_Check2(1, glm::i8, arg3) && PyGLM_Vec_PTI_Check3(1, glm::i8, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::i8, arg1), PyGLM_Vec_PTI_Get1(1, glm::i8, arg2), PyGLM_Vec_PTI_Get2(1, glm::i8, arg3), PyGLM_Vec_PTI_Get3(1, glm::i8, arg4))); } if (PyGLM_Vec_PTI_Check0(1, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u8, arg2) && PyGLM_Vec_PTI_Check2(1, glm::u8, arg3) && PyGLM_Vec_PTI_Check3(1, glm::u8, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(1, glm::u8, arg1), PyGLM_Vec_PTI_Get1(1, glm::u8, arg2), PyGLM_Vec_PTI_Get2(1, glm::u8, arg3), PyGLM_Vec_PTI_Get3(1, glm::u8, arg4))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2) && PyGLM_Vec_PTI_Check2(2, float, arg3) && PyGLM_Vec_PTI_Check3(2, float, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2), PyGLM_Vec_PTI_Get2(2, float, arg3), PyGLM_Vec_PTI_Get3(2, float, arg4))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2) && PyGLM_Vec_PTI_Check2(2, double, arg3) && PyGLM_Vec_PTI_Check3(2, double, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2), PyGLM_Vec_PTI_Get2(2, double, arg3), PyGLM_Vec_PTI_Get3(2, double, arg4))); } if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2) && PyGLM_Vec_PTI_Check2(2, int, arg3) && PyGLM_Vec_PTI_Check3(2, int, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, int, arg1), PyGLM_Vec_PTI_Get1(2, int, arg2), PyGLM_Vec_PTI_Get2(2, int, arg3), PyGLM_Vec_PTI_Get3(2, int, arg4))); } if (PyGLM_Vec_PTI_Check0(2, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(2, glm::uint, arg2) && PyGLM_Vec_PTI_Check2(2, glm::uint, arg3) && PyGLM_Vec_PTI_Check3(2, glm::uint, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::uint, arg1), PyGLM_Vec_PTI_Get1(2, glm::uint, arg2), PyGLM_Vec_PTI_Get2(2, glm::uint, arg3), PyGLM_Vec_PTI_Get3(2, glm::uint, arg4))); } if (PyGLM_Vec_PTI_Check0(2, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i64, arg2) && PyGLM_Vec_PTI_Check2(2, glm::i64, arg3) && PyGLM_Vec_PTI_Check3(2, glm::i64, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::i64, arg1), PyGLM_Vec_PTI_Get1(2, glm::i64, arg2), PyGLM_Vec_PTI_Get2(2, glm::i64, arg3), PyGLM_Vec_PTI_Get3(2, glm::i64, arg4))); } if (PyGLM_Vec_PTI_Check0(2, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u64, arg2) && PyGLM_Vec_PTI_Check2(2, glm::u64, arg3) && PyGLM_Vec_PTI_Check3(2, glm::u64, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::u64, arg1), PyGLM_Vec_PTI_Get1(2, glm::u64, arg2), PyGLM_Vec_PTI_Get2(2, glm::u64, arg3), PyGLM_Vec_PTI_Get3(2, glm::u64, arg4))); } if (PyGLM_Vec_PTI_Check0(2, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i16, arg2) && PyGLM_Vec_PTI_Check2(2, glm::i16, arg3) && PyGLM_Vec_PTI_Check3(2, glm::i16, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::i16, arg1), PyGLM_Vec_PTI_Get1(2, glm::i16, arg2), PyGLM_Vec_PTI_Get2(2, glm::i16, arg3), PyGLM_Vec_PTI_Get3(2, glm::i16, arg4))); } if (PyGLM_Vec_PTI_Check0(2, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u16, arg2) && PyGLM_Vec_PTI_Check2(2, glm::u16, arg3) && PyGLM_Vec_PTI_Check3(2, glm::u16, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::u16, arg1), PyGLM_Vec_PTI_Get1(2, glm::u16, arg2), PyGLM_Vec_PTI_Get2(2, glm::u16, arg3), PyGLM_Vec_PTI_Get3(2, glm::u16, arg4))); } if (PyGLM_Vec_PTI_Check0(2, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i8, arg2) && PyGLM_Vec_PTI_Check2(2, glm::i8, arg3) && PyGLM_Vec_PTI_Check3(2, glm::i8, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::i8, arg1), PyGLM_Vec_PTI_Get1(2, glm::i8, arg2), PyGLM_Vec_PTI_Get2(2, glm::i8, arg3), PyGLM_Vec_PTI_Get3(2, glm::i8, arg4))); } if (PyGLM_Vec_PTI_Check0(2, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u8, arg2) && PyGLM_Vec_PTI_Check2(2, glm::u8, arg3) && PyGLM_Vec_PTI_Check3(2, glm::u8, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(2, glm::u8, arg1), PyGLM_Vec_PTI_Get1(2, glm::u8, arg2), PyGLM_Vec_PTI_Get2(2, glm::u8, arg3), PyGLM_Vec_PTI_Get3(2, glm::u8, arg4))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2) && PyGLM_Vec_PTI_Check2(3, float, arg3) && PyGLM_Vec_PTI_Check3(3, float, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2), PyGLM_Vec_PTI_Get2(3, float, arg3), PyGLM_Vec_PTI_Get3(3, float, arg4))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2) && PyGLM_Vec_PTI_Check2(3, double, arg3) && PyGLM_Vec_PTI_Check3(3, double, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2), PyGLM_Vec_PTI_Get2(3, double, arg3), PyGLM_Vec_PTI_Get3(3, double, arg4))); } if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2) && PyGLM_Vec_PTI_Check2(3, int, arg3) && PyGLM_Vec_PTI_Check3(3, int, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, int, arg1), PyGLM_Vec_PTI_Get1(3, int, arg2), PyGLM_Vec_PTI_Get2(3, int, arg3), PyGLM_Vec_PTI_Get3(3, int, arg4))); } if (PyGLM_Vec_PTI_Check0(3, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(3, glm::uint, arg2) && PyGLM_Vec_PTI_Check2(3, glm::uint, arg3) && PyGLM_Vec_PTI_Check3(3, glm::uint, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::uint, arg1), PyGLM_Vec_PTI_Get1(3, glm::uint, arg2), PyGLM_Vec_PTI_Get2(3, glm::uint, arg3), PyGLM_Vec_PTI_Get3(3, glm::uint, arg4))); } if (PyGLM_Vec_PTI_Check0(3, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i64, arg2) && PyGLM_Vec_PTI_Check2(3, glm::i64, arg3) && PyGLM_Vec_PTI_Check3(3, glm::i64, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::i64, arg1), PyGLM_Vec_PTI_Get1(3, glm::i64, arg2), PyGLM_Vec_PTI_Get2(3, glm::i64, arg3), PyGLM_Vec_PTI_Get3(3, glm::i64, arg4))); } if (PyGLM_Vec_PTI_Check0(3, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u64, arg2) && PyGLM_Vec_PTI_Check2(3, glm::u64, arg3) && PyGLM_Vec_PTI_Check3(3, glm::u64, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::u64, arg1), PyGLM_Vec_PTI_Get1(3, glm::u64, arg2), PyGLM_Vec_PTI_Get2(3, glm::u64, arg3), PyGLM_Vec_PTI_Get3(3, glm::u64, arg4))); } if (PyGLM_Vec_PTI_Check0(3, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i16, arg2) && PyGLM_Vec_PTI_Check2(3, glm::i16, arg3) && PyGLM_Vec_PTI_Check3(3, glm::i16, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::i16, arg1), PyGLM_Vec_PTI_Get1(3, glm::i16, arg2), PyGLM_Vec_PTI_Get2(3, glm::i16, arg3), PyGLM_Vec_PTI_Get3(3, glm::i16, arg4))); } if (PyGLM_Vec_PTI_Check0(3, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u16, arg2) && PyGLM_Vec_PTI_Check2(3, glm::u16, arg3) && PyGLM_Vec_PTI_Check3(3, glm::u16, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::u16, arg1), PyGLM_Vec_PTI_Get1(3, glm::u16, arg2), PyGLM_Vec_PTI_Get2(3, glm::u16, arg3), PyGLM_Vec_PTI_Get3(3, glm::u16, arg4))); } if (PyGLM_Vec_PTI_Check0(3, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i8, arg2) && PyGLM_Vec_PTI_Check2(3, glm::i8, arg3) && PyGLM_Vec_PTI_Check3(3, glm::i8, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::i8, arg1), PyGLM_Vec_PTI_Get1(3, glm::i8, arg2), PyGLM_Vec_PTI_Get2(3, glm::i8, arg3), PyGLM_Vec_PTI_Get3(3, glm::i8, arg4))); } if (PyGLM_Vec_PTI_Check0(3, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u8, arg2) && PyGLM_Vec_PTI_Check2(3, glm::u8, arg3) && PyGLM_Vec_PTI_Check3(3, glm::u8, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(3, glm::u8, arg1), PyGLM_Vec_PTI_Get1(3, glm::u8, arg2), PyGLM_Vec_PTI_Get2(3, glm::u8, arg3), PyGLM_Vec_PTI_Get3(3, glm::u8, arg4))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2) && PyGLM_Vec_PTI_Check2(4, float, arg3) && PyGLM_Vec_PTI_Check3(4, float, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2), PyGLM_Vec_PTI_Get2(4, float, arg3), PyGLM_Vec_PTI_Get3(4, float, arg4))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2) && PyGLM_Vec_PTI_Check2(4, double, arg3) && PyGLM_Vec_PTI_Check3(4, double, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2), PyGLM_Vec_PTI_Get2(4, double, arg3), PyGLM_Vec_PTI_Get3(4, double, arg4))); } if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2) && PyGLM_Vec_PTI_Check2(4, int, arg3) && PyGLM_Vec_PTI_Check3(4, int, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, int, arg1), PyGLM_Vec_PTI_Get1(4, int, arg2), PyGLM_Vec_PTI_Get2(4, int, arg3), PyGLM_Vec_PTI_Get3(4, int, arg4))); } if (PyGLM_Vec_PTI_Check0(4, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(4, glm::uint, arg2) && PyGLM_Vec_PTI_Check2(4, glm::uint, arg3) && PyGLM_Vec_PTI_Check3(4, glm::uint, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::uint, arg1), PyGLM_Vec_PTI_Get1(4, glm::uint, arg2), PyGLM_Vec_PTI_Get2(4, glm::uint, arg3), PyGLM_Vec_PTI_Get3(4, glm::uint, arg4))); } if (PyGLM_Vec_PTI_Check0(4, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i64, arg2) && PyGLM_Vec_PTI_Check2(4, glm::i64, arg3) && PyGLM_Vec_PTI_Check3(4, glm::i64, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::i64, arg1), PyGLM_Vec_PTI_Get1(4, glm::i64, arg2), PyGLM_Vec_PTI_Get2(4, glm::i64, arg3), PyGLM_Vec_PTI_Get3(4, glm::i64, arg4))); } if (PyGLM_Vec_PTI_Check0(4, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u64, arg2) && PyGLM_Vec_PTI_Check2(4, glm::u64, arg3) && PyGLM_Vec_PTI_Check3(4, glm::u64, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::u64, arg1), PyGLM_Vec_PTI_Get1(4, glm::u64, arg2), PyGLM_Vec_PTI_Get2(4, glm::u64, arg3), PyGLM_Vec_PTI_Get3(4, glm::u64, arg4))); } if (PyGLM_Vec_PTI_Check0(4, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i16, arg2) && PyGLM_Vec_PTI_Check2(4, glm::i16, arg3) && PyGLM_Vec_PTI_Check3(4, glm::i16, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::i16, arg1), PyGLM_Vec_PTI_Get1(4, glm::i16, arg2), PyGLM_Vec_PTI_Get2(4, glm::i16, arg3), PyGLM_Vec_PTI_Get3(4, glm::i16, arg4))); } if (PyGLM_Vec_PTI_Check0(4, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u16, arg2) && PyGLM_Vec_PTI_Check2(4, glm::u16, arg3) && PyGLM_Vec_PTI_Check3(4, glm::u16, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::u16, arg1), PyGLM_Vec_PTI_Get1(4, glm::u16, arg2), PyGLM_Vec_PTI_Get2(4, glm::u16, arg3), PyGLM_Vec_PTI_Get3(4, glm::u16, arg4))); } if (PyGLM_Vec_PTI_Check0(4, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i8, arg2) && PyGLM_Vec_PTI_Check2(4, glm::i8, arg3) && PyGLM_Vec_PTI_Check3(4, glm::i8, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::i8, arg1), PyGLM_Vec_PTI_Get1(4, glm::i8, arg2), PyGLM_Vec_PTI_Get2(4, glm::i8, arg3), PyGLM_Vec_PTI_Get3(4, glm::i8, arg4))); } if (PyGLM_Vec_PTI_Check0(4, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u8, arg2) && PyGLM_Vec_PTI_Check2(4, glm::u8, arg3) && PyGLM_Vec_PTI_Check3(4, glm::u8, arg4)) { return pack(glm::min(PyGLM_Vec_PTI_Get0(4, glm::u8, arg1), PyGLM_Vec_PTI_Get1(4, glm::u8, arg2), PyGLM_Vec_PTI_Get2(4, glm::u8, arg3), PyGLM_Vec_PTI_Get3(4, glm::u8, arg4))); } } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for min()"); return NULL; } PyDoc_STRVAR(max_docstr, "max(x: number, y: number) -> float\n" " Returns `y` if `x < y`; otherwise, it returns `x`.\n" "max(x: vecN, y: number) -> vecN\n" " Returns `y` if `x < y`; otherwise, it returns `x`.\n" "max(x: vecN, y: vecN) -> vecN\n" " Returns `y` if `x < y`; otherwise, it returns `x`.\n" "max(a: number, b: number, c: number) -> float\n" " Returns the maximum value of 3 inputs.\n" "max(a: vecN, b: vecN, c: vecN) -> vecN\n" " Returns the maximum component wise value of 3 inputs.\n" "max(a: number, b: number, c: number, d: number) -> float\n" " Returns the maximum value of 4 inputs.\n" "max(a: vecN, b: vecN, c: vecN, d: vecN) -> vecN\n" " Returns the maximum component wise value of 4 inputs.\n" "max(iterable) -> any\n" " Returns the greatest number or the maximum component wise value respectively." ); template static T apply_max(std::vector& items) { T maximum = items[0]; for (T item : items) { if (item == maximum) { continue; } maximum = glm::max(item, maximum); } return maximum; } template static inline PyObject* apply_max_from_PyObject_number_vector(std::vector& items) { std::vector itemsAsT = std::vector(items.size()); for (size_t i = 0; i < items.size(); i++) { PyObject* item = items[i]; itemsAsT[i] = PyGLM_Number_FromPyObject(item); Py_DECREF(item); } return pack(apply_max(itemsAsT)); } template static inline PyObject* apply_max_from_PyObject_vector_vector(std::vector& items) { std::vector> itemsAsVecT = std::vector>(items.size()); for (size_t i = 0; i < items.size(); i++) { PyObject* item = items[i]; itemsAsVecT[i] = reinterpret_cast*>(item)->super_type; Py_DECREF(item); } return pack(apply_max(itemsAsVecT)); } #define max_GEN_TYPE_SWITCH_STATEMENT_FOR_VECTOR(L) \ switch (pti->format) { \ case get_format_specifier(): \ return apply_max_from_PyObject_vector_vector(items); \ case get_format_specifier(): \ return apply_max_from_PyObject_vector_vector(items); \ case get_format_specifier(): \ return apply_max_from_PyObject_vector_vector(items); \ case get_format_specifier(): \ return apply_max_from_PyObject_vector_vector(items); \ case get_format_specifier(): \ return apply_max_from_PyObject_vector_vector(items); \ case get_format_specifier(): \ return apply_max_from_PyObject_vector_vector(items); \ case get_format_specifier(): \ return apply_max_from_PyObject_vector_vector(items); \ case get_format_specifier(): \ return apply_max_from_PyObject_vector_vector(items); \ case get_format_specifier(): \ return apply_max_from_PyObject_vector_vector(items); \ case get_format_specifier(): \ return apply_max_from_PyObject_vector_vector(items); \ case get_format_specifier(): \ return apply_max_from_PyObject_vector_vector(items); \ } static PyObject* max_(PyObject*, PyObject* args) { PyObject *arg1, *arg2 = NULL, *arg3 = NULL, *arg4 = NULL; if (!PyArg_UnpackTuple(args, "max", 1, 4, &arg1, &arg2, &arg3, &arg4)) return NULL; if (arg2 == NULL) { if (PyObject_IterCheck(arg1)) { PyObject* iterator = PyObject_GetIter(arg1); std::vector items{}; PyTypeObject* type = NULL; PyObject* currentItem; while ((currentItem = PyIter_Next(iterator))) { if (type == NULL) { if ((currentItem->ob_type->tp_dealloc != (destructor)vec_dealloc) && !PyLong_Check(currentItem) && !PyFloat_Check(currentItem) && !PyBool_Check(currentItem)) { Py_DECREF(currentItem); Py_DECREF(iterator); PyGLM_TYPEERROR_O("invalid item type(s) for 'max()'. Expected number or PyGLM type, got ", currentItem); return NULL; } type = Py_TYPE(currentItem); } else if (type != Py_TYPE(currentItem)) { Py_DECREF(currentItem); for (PyObject* item : items) { Py_DECREF(item); } Py_DECREF(iterator); PyGLM_TYPEERROR_2O("invalid item type(s) for 'max()'. Expected items of equal type, got ", currentItem, items[0]); return NULL; } items.push_back(currentItem); } Py_DECREF(iterator); if (PyErr_Occurred()) { for (PyObject* item : items) { Py_DECREF(item); } return NULL; } if (items.size() == 0) { PyErr_SetString(PyExc_ValueError, "invalid argument value for 'max()'. Iterable has no items."); return NULL; } if (type == &PyLong_Type) { return apply_max_from_PyObject_number_vector(items); } else if (type == &PyFloat_Type) { return apply_max_from_PyObject_number_vector(items); } else if (type == &PyBool_Type) { return apply_max_from_PyObject_number_vector(items); } else { PyGLMTypeObject* pti = (PyGLMTypeObject*)type; switch (pti->C) { case 1: max_GEN_TYPE_SWITCH_STATEMENT_FOR_VECTOR(1); break; case 2: max_GEN_TYPE_SWITCH_STATEMENT_FOR_VECTOR(2); break; case 3: max_GEN_TYPE_SWITCH_STATEMENT_FOR_VECTOR(3); break; case 4: max_GEN_TYPE_SWITCH_STATEMENT_FOR_VECTOR(4); break; } } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for max()"); return NULL; } if (arg3 == NULL) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_ALL); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_ALL); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2))); } if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, int, arg1), PyGLM_Vec_PTI_Get1(1, int, arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(1, glm::uint, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::uint, arg1), PyGLM_Vec_PTI_Get1(1, glm::uint, arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i64, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::i64, arg1), PyGLM_Vec_PTI_Get1(1, glm::i64, arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u64, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::u64, arg1), PyGLM_Vec_PTI_Get1(1, glm::u64, arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i16, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::i16, arg1), PyGLM_Vec_PTI_Get1(1, glm::i16, arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u16, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::u16, arg1), PyGLM_Vec_PTI_Get1(1, glm::u16, arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i8, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::i8, arg1), PyGLM_Vec_PTI_Get1(1, glm::i8, arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u8, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::u8, arg1), PyGLM_Vec_PTI_Get1(1, glm::u8, arg2))); } if (PyGLM_Vec_PTI_Check0(1, bool, arg1) && PyGLM_Vec_PTI_Check1(1, bool, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, bool, arg1), PyGLM_Vec_PTI_Get1(1, bool, arg2))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2))); } if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, int, arg1), PyGLM_Vec_PTI_Get1(2, int, arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(2, glm::uint, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::uint, arg1), PyGLM_Vec_PTI_Get1(2, glm::uint, arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i64, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::i64, arg1), PyGLM_Vec_PTI_Get1(2, glm::i64, arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u64, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::u64, arg1), PyGLM_Vec_PTI_Get1(2, glm::u64, arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i16, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::i16, arg1), PyGLM_Vec_PTI_Get1(2, glm::i16, arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u16, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::u16, arg1), PyGLM_Vec_PTI_Get1(2, glm::u16, arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i8, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::i8, arg1), PyGLM_Vec_PTI_Get1(2, glm::i8, arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u8, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::u8, arg1), PyGLM_Vec_PTI_Get1(2, glm::u8, arg2))); } if (PyGLM_Vec_PTI_Check0(2, bool, arg1) && PyGLM_Vec_PTI_Check1(2, bool, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, bool, arg1), PyGLM_Vec_PTI_Get1(2, bool, arg2))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2))); } if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, int, arg1), PyGLM_Vec_PTI_Get1(3, int, arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(3, glm::uint, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::uint, arg1), PyGLM_Vec_PTI_Get1(3, glm::uint, arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i64, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::i64, arg1), PyGLM_Vec_PTI_Get1(3, glm::i64, arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u64, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::u64, arg1), PyGLM_Vec_PTI_Get1(3, glm::u64, arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i16, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::i16, arg1), PyGLM_Vec_PTI_Get1(3, glm::i16, arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u16, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::u16, arg1), PyGLM_Vec_PTI_Get1(3, glm::u16, arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i8, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::i8, arg1), PyGLM_Vec_PTI_Get1(3, glm::i8, arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u8, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::u8, arg1), PyGLM_Vec_PTI_Get1(3, glm::u8, arg2))); } if (PyGLM_Vec_PTI_Check0(3, bool, arg1) && PyGLM_Vec_PTI_Check1(3, bool, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, bool, arg1), PyGLM_Vec_PTI_Get1(3, bool, arg2))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2))); } if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, int, arg1), PyGLM_Vec_PTI_Get1(4, int, arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(4, glm::uint, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::uint, arg1), PyGLM_Vec_PTI_Get1(4, glm::uint, arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i64, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::i64, arg1), PyGLM_Vec_PTI_Get1(4, glm::i64, arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u64, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::u64, arg1), PyGLM_Vec_PTI_Get1(4, glm::u64, arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i16, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::i16, arg1), PyGLM_Vec_PTI_Get1(4, glm::i16, arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u16, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::u16, arg1), PyGLM_Vec_PTI_Get1(4, glm::u16, arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i8, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::i8, arg1), PyGLM_Vec_PTI_Get1(4, glm::i8, arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u8, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::u8, arg1), PyGLM_Vec_PTI_Get1(4, glm::u8, arg2))); } if (PyGLM_Vec_PTI_Check0(4, bool, arg1) && PyGLM_Vec_PTI_Check1(4, bool, arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, bool, arg1), PyGLM_Vec_PTI_Get1(4, bool, arg2))); } if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, int, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::uint, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::uint, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::i64, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::i64, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::u64, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::u64, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::i16, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::i16, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::u16, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::u16, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::i8, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::i8, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(1, glm::u8, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::u8, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, int, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::uint, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::uint, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::i64, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::i64, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::u64, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::u64, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::i16, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::i16, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::u16, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::u16, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::i8, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::i8, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, glm::u8, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::u8, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, int, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::uint, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::uint, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::i64, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::i64, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::u64, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::u64, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::i16, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::i16, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::u16, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::u16, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::i8, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::i8, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, glm::u8, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::u8, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, int, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::uint, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::uint, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::i64, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::i64, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::u64, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::u64, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::i16, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::i16, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::u16, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::u16, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::i8, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::i8, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, glm::u8, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::u8, arg1), PyGLM_Number_FromPyObject(arg2))); } } else { if (arg4 == NULL) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::max(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I | PyGLM_DT_FD); PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2) && PyGLM_Vec_PTI_Check2(1, float, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2), PyGLM_Vec_PTI_Get2(1, float, arg3))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2) && PyGLM_Vec_PTI_Check2(1, double, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2), PyGLM_Vec_PTI_Get2(1, double, arg3))); } if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2) && PyGLM_Vec_PTI_Check2(1, int, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, int, arg1), PyGLM_Vec_PTI_Get1(1, int, arg2), PyGLM_Vec_PTI_Get2(1, int, arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(1, glm::uint, arg2) && PyGLM_Vec_PTI_Check2(1, glm::uint, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::uint, arg1), PyGLM_Vec_PTI_Get1(1, glm::uint, arg2), PyGLM_Vec_PTI_Get2(1, glm::uint, arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i64, arg2) && PyGLM_Vec_PTI_Check2(1, glm::i64, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::i64, arg1), PyGLM_Vec_PTI_Get1(1, glm::i64, arg2), PyGLM_Vec_PTI_Get2(1, glm::i64, arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u64, arg2) && PyGLM_Vec_PTI_Check2(1, glm::u64, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::u64, arg1), PyGLM_Vec_PTI_Get1(1, glm::u64, arg2), PyGLM_Vec_PTI_Get2(1, glm::u64, arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i16, arg2) && PyGLM_Vec_PTI_Check2(1, glm::i16, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::i16, arg1), PyGLM_Vec_PTI_Get1(1, glm::i16, arg2), PyGLM_Vec_PTI_Get2(1, glm::i16, arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u16, arg2) && PyGLM_Vec_PTI_Check2(1, glm::u16, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::u16, arg1), PyGLM_Vec_PTI_Get1(1, glm::u16, arg2), PyGLM_Vec_PTI_Get2(1, glm::u16, arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i8, arg2) && PyGLM_Vec_PTI_Check2(1, glm::i8, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::i8, arg1), PyGLM_Vec_PTI_Get1(1, glm::i8, arg2), PyGLM_Vec_PTI_Get2(1, glm::i8, arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u8, arg2) && PyGLM_Vec_PTI_Check2(1, glm::u8, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::u8, arg1), PyGLM_Vec_PTI_Get1(1, glm::u8, arg2), PyGLM_Vec_PTI_Get2(1, glm::u8, arg3))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2) && PyGLM_Vec_PTI_Check2(2, float, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2), PyGLM_Vec_PTI_Get2(2, float, arg3))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2) && PyGLM_Vec_PTI_Check2(2, double, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2), PyGLM_Vec_PTI_Get2(2, double, arg3))); } if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2) && PyGLM_Vec_PTI_Check2(2, int, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, int, arg1), PyGLM_Vec_PTI_Get1(2, int, arg2), PyGLM_Vec_PTI_Get2(2, int, arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(2, glm::uint, arg2) && PyGLM_Vec_PTI_Check2(2, glm::uint, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::uint, arg1), PyGLM_Vec_PTI_Get1(2, glm::uint, arg2), PyGLM_Vec_PTI_Get2(2, glm::uint, arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i64, arg2) && PyGLM_Vec_PTI_Check2(2, glm::i64, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::i64, arg1), PyGLM_Vec_PTI_Get1(2, glm::i64, arg2), PyGLM_Vec_PTI_Get2(2, glm::i64, arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u64, arg2) && PyGLM_Vec_PTI_Check2(2, glm::u64, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::u64, arg1), PyGLM_Vec_PTI_Get1(2, glm::u64, arg2), PyGLM_Vec_PTI_Get2(2, glm::u64, arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i16, arg2) && PyGLM_Vec_PTI_Check2(2, glm::i16, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::i16, arg1), PyGLM_Vec_PTI_Get1(2, glm::i16, arg2), PyGLM_Vec_PTI_Get2(2, glm::i16, arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u16, arg2) && PyGLM_Vec_PTI_Check2(2, glm::u16, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::u16, arg1), PyGLM_Vec_PTI_Get1(2, glm::u16, arg2), PyGLM_Vec_PTI_Get2(2, glm::u16, arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i8, arg2) && PyGLM_Vec_PTI_Check2(2, glm::i8, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::i8, arg1), PyGLM_Vec_PTI_Get1(2, glm::i8, arg2), PyGLM_Vec_PTI_Get2(2, glm::i8, arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u8, arg2) && PyGLM_Vec_PTI_Check2(2, glm::u8, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::u8, arg1), PyGLM_Vec_PTI_Get1(2, glm::u8, arg2), PyGLM_Vec_PTI_Get2(2, glm::u8, arg3))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2) && PyGLM_Vec_PTI_Check2(3, float, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2), PyGLM_Vec_PTI_Get2(3, float, arg3))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2) && PyGLM_Vec_PTI_Check2(3, double, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2), PyGLM_Vec_PTI_Get2(3, double, arg3))); } if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2) && PyGLM_Vec_PTI_Check2(3, int, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, int, arg1), PyGLM_Vec_PTI_Get1(3, int, arg2), PyGLM_Vec_PTI_Get2(3, int, arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(3, glm::uint, arg2) && PyGLM_Vec_PTI_Check2(3, glm::uint, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::uint, arg1), PyGLM_Vec_PTI_Get1(3, glm::uint, arg2), PyGLM_Vec_PTI_Get2(3, glm::uint, arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i64, arg2) && PyGLM_Vec_PTI_Check2(3, glm::i64, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::i64, arg1), PyGLM_Vec_PTI_Get1(3, glm::i64, arg2), PyGLM_Vec_PTI_Get2(3, glm::i64, arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u64, arg2) && PyGLM_Vec_PTI_Check2(3, glm::u64, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::u64, arg1), PyGLM_Vec_PTI_Get1(3, glm::u64, arg2), PyGLM_Vec_PTI_Get2(3, glm::u64, arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i16, arg2) && PyGLM_Vec_PTI_Check2(3, glm::i16, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::i16, arg1), PyGLM_Vec_PTI_Get1(3, glm::i16, arg2), PyGLM_Vec_PTI_Get2(3, glm::i16, arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u16, arg2) && PyGLM_Vec_PTI_Check2(3, glm::u16, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::u16, arg1), PyGLM_Vec_PTI_Get1(3, glm::u16, arg2), PyGLM_Vec_PTI_Get2(3, glm::u16, arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i8, arg2) && PyGLM_Vec_PTI_Check2(3, glm::i8, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::i8, arg1), PyGLM_Vec_PTI_Get1(3, glm::i8, arg2), PyGLM_Vec_PTI_Get2(3, glm::i8, arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u8, arg2) && PyGLM_Vec_PTI_Check2(3, glm::u8, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::u8, arg1), PyGLM_Vec_PTI_Get1(3, glm::u8, arg2), PyGLM_Vec_PTI_Get2(3, glm::u8, arg3))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2) && PyGLM_Vec_PTI_Check2(4, float, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2), PyGLM_Vec_PTI_Get2(4, float, arg3))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2) && PyGLM_Vec_PTI_Check2(4, double, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2), PyGLM_Vec_PTI_Get2(4, double, arg3))); } if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2) && PyGLM_Vec_PTI_Check2(4, int, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, int, arg1), PyGLM_Vec_PTI_Get1(4, int, arg2), PyGLM_Vec_PTI_Get2(4, int, arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(4, glm::uint, arg2) && PyGLM_Vec_PTI_Check2(4, glm::uint, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::uint, arg1), PyGLM_Vec_PTI_Get1(4, glm::uint, arg2), PyGLM_Vec_PTI_Get2(4, glm::uint, arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i64, arg2) && PyGLM_Vec_PTI_Check2(4, glm::i64, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::i64, arg1), PyGLM_Vec_PTI_Get1(4, glm::i64, arg2), PyGLM_Vec_PTI_Get2(4, glm::i64, arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u64, arg2) && PyGLM_Vec_PTI_Check2(4, glm::u64, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::u64, arg1), PyGLM_Vec_PTI_Get1(4, glm::u64, arg2), PyGLM_Vec_PTI_Get2(4, glm::u64, arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i16, arg2) && PyGLM_Vec_PTI_Check2(4, glm::i16, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::i16, arg1), PyGLM_Vec_PTI_Get1(4, glm::i16, arg2), PyGLM_Vec_PTI_Get2(4, glm::i16, arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u16, arg2) && PyGLM_Vec_PTI_Check2(4, glm::u16, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::u16, arg1), PyGLM_Vec_PTI_Get1(4, glm::u16, arg2), PyGLM_Vec_PTI_Get2(4, glm::u16, arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i8, arg2) && PyGLM_Vec_PTI_Check2(4, glm::i8, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::i8, arg1), PyGLM_Vec_PTI_Get1(4, glm::i8, arg2), PyGLM_Vec_PTI_Get2(4, glm::i8, arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u8, arg2) && PyGLM_Vec_PTI_Check2(4, glm::u8, arg3)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::u8, arg1), PyGLM_Vec_PTI_Get1(4, glm::u8, arg2), PyGLM_Vec_PTI_Get2(4, glm::u8, arg3))); } } else { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4)) { return pack(glm::max(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3), PyGLM_Number_FromPyObject(arg4))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I | PyGLM_DT_FD); PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I | PyGLM_DT_FD); PyGLM_PTI_Init3(arg4, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2) && PyGLM_Vec_PTI_Check2(1, float, arg3) && PyGLM_Vec_PTI_Check3(1, float, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2), PyGLM_Vec_PTI_Get2(1, float, arg3), PyGLM_Vec_PTI_Get3(1, float, arg4))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2) && PyGLM_Vec_PTI_Check2(1, double, arg3) && PyGLM_Vec_PTI_Check3(1, double, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2), PyGLM_Vec_PTI_Get2(1, double, arg3), PyGLM_Vec_PTI_Get3(1, double, arg4))); } if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2) && PyGLM_Vec_PTI_Check2(1, int, arg3) && PyGLM_Vec_PTI_Check3(1, int, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, int, arg1), PyGLM_Vec_PTI_Get1(1, int, arg2), PyGLM_Vec_PTI_Get2(1, int, arg3), PyGLM_Vec_PTI_Get3(1, int, arg4))); } if (PyGLM_Vec_PTI_Check0(1, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(1, glm::uint, arg2) && PyGLM_Vec_PTI_Check2(1, glm::uint, arg3) && PyGLM_Vec_PTI_Check3(1, glm::uint, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::uint, arg1), PyGLM_Vec_PTI_Get1(1, glm::uint, arg2), PyGLM_Vec_PTI_Get2(1, glm::uint, arg3), PyGLM_Vec_PTI_Get3(1, glm::uint, arg4))); } if (PyGLM_Vec_PTI_Check0(1, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i64, arg2) && PyGLM_Vec_PTI_Check2(1, glm::i64, arg3) && PyGLM_Vec_PTI_Check3(1, glm::i64, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::i64, arg1), PyGLM_Vec_PTI_Get1(1, glm::i64, arg2), PyGLM_Vec_PTI_Get2(1, glm::i64, arg3), PyGLM_Vec_PTI_Get3(1, glm::i64, arg4))); } if (PyGLM_Vec_PTI_Check0(1, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u64, arg2) && PyGLM_Vec_PTI_Check2(1, glm::u64, arg3) && PyGLM_Vec_PTI_Check3(1, glm::u64, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::u64, arg1), PyGLM_Vec_PTI_Get1(1, glm::u64, arg2), PyGLM_Vec_PTI_Get2(1, glm::u64, arg3), PyGLM_Vec_PTI_Get3(1, glm::u64, arg4))); } if (PyGLM_Vec_PTI_Check0(1, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i16, arg2) && PyGLM_Vec_PTI_Check2(1, glm::i16, arg3) && PyGLM_Vec_PTI_Check3(1, glm::i16, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::i16, arg1), PyGLM_Vec_PTI_Get1(1, glm::i16, arg2), PyGLM_Vec_PTI_Get2(1, glm::i16, arg3), PyGLM_Vec_PTI_Get3(1, glm::i16, arg4))); } if (PyGLM_Vec_PTI_Check0(1, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u16, arg2) && PyGLM_Vec_PTI_Check2(1, glm::u16, arg3) && PyGLM_Vec_PTI_Check3(1, glm::u16, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::u16, arg1), PyGLM_Vec_PTI_Get1(1, glm::u16, arg2), PyGLM_Vec_PTI_Get2(1, glm::u16, arg3), PyGLM_Vec_PTI_Get3(1, glm::u16, arg4))); } if (PyGLM_Vec_PTI_Check0(1, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i8, arg2) && PyGLM_Vec_PTI_Check2(1, glm::i8, arg3) && PyGLM_Vec_PTI_Check3(1, glm::i8, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::i8, arg1), PyGLM_Vec_PTI_Get1(1, glm::i8, arg2), PyGLM_Vec_PTI_Get2(1, glm::i8, arg3), PyGLM_Vec_PTI_Get3(1, glm::i8, arg4))); } if (PyGLM_Vec_PTI_Check0(1, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u8, arg2) && PyGLM_Vec_PTI_Check2(1, glm::u8, arg3) && PyGLM_Vec_PTI_Check3(1, glm::u8, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(1, glm::u8, arg1), PyGLM_Vec_PTI_Get1(1, glm::u8, arg2), PyGLM_Vec_PTI_Get2(1, glm::u8, arg3), PyGLM_Vec_PTI_Get3(1, glm::u8, arg4))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2) && PyGLM_Vec_PTI_Check2(2, float, arg3) && PyGLM_Vec_PTI_Check3(2, float, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2), PyGLM_Vec_PTI_Get2(2, float, arg3), PyGLM_Vec_PTI_Get3(2, float, arg4))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2) && PyGLM_Vec_PTI_Check2(2, double, arg3) && PyGLM_Vec_PTI_Check3(2, double, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2), PyGLM_Vec_PTI_Get2(2, double, arg3), PyGLM_Vec_PTI_Get3(2, double, arg4))); } if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2) && PyGLM_Vec_PTI_Check2(2, int, arg3) && PyGLM_Vec_PTI_Check3(2, int, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, int, arg1), PyGLM_Vec_PTI_Get1(2, int, arg2), PyGLM_Vec_PTI_Get2(2, int, arg3), PyGLM_Vec_PTI_Get3(2, int, arg4))); } if (PyGLM_Vec_PTI_Check0(2, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(2, glm::uint, arg2) && PyGLM_Vec_PTI_Check2(2, glm::uint, arg3) && PyGLM_Vec_PTI_Check3(2, glm::uint, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::uint, arg1), PyGLM_Vec_PTI_Get1(2, glm::uint, arg2), PyGLM_Vec_PTI_Get2(2, glm::uint, arg3), PyGLM_Vec_PTI_Get3(2, glm::uint, arg4))); } if (PyGLM_Vec_PTI_Check0(2, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i64, arg2) && PyGLM_Vec_PTI_Check2(2, glm::i64, arg3) && PyGLM_Vec_PTI_Check3(2, glm::i64, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::i64, arg1), PyGLM_Vec_PTI_Get1(2, glm::i64, arg2), PyGLM_Vec_PTI_Get2(2, glm::i64, arg3), PyGLM_Vec_PTI_Get3(2, glm::i64, arg4))); } if (PyGLM_Vec_PTI_Check0(2, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u64, arg2) && PyGLM_Vec_PTI_Check2(2, glm::u64, arg3) && PyGLM_Vec_PTI_Check3(2, glm::u64, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::u64, arg1), PyGLM_Vec_PTI_Get1(2, glm::u64, arg2), PyGLM_Vec_PTI_Get2(2, glm::u64, arg3), PyGLM_Vec_PTI_Get3(2, glm::u64, arg4))); } if (PyGLM_Vec_PTI_Check0(2, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i16, arg2) && PyGLM_Vec_PTI_Check2(2, glm::i16, arg3) && PyGLM_Vec_PTI_Check3(2, glm::i16, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::i16, arg1), PyGLM_Vec_PTI_Get1(2, glm::i16, arg2), PyGLM_Vec_PTI_Get2(2, glm::i16, arg3), PyGLM_Vec_PTI_Get3(2, glm::i16, arg4))); } if (PyGLM_Vec_PTI_Check0(2, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u16, arg2) && PyGLM_Vec_PTI_Check2(2, glm::u16, arg3) && PyGLM_Vec_PTI_Check3(2, glm::u16, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::u16, arg1), PyGLM_Vec_PTI_Get1(2, glm::u16, arg2), PyGLM_Vec_PTI_Get2(2, glm::u16, arg3), PyGLM_Vec_PTI_Get3(2, glm::u16, arg4))); } if (PyGLM_Vec_PTI_Check0(2, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i8, arg2) && PyGLM_Vec_PTI_Check2(2, glm::i8, arg3) && PyGLM_Vec_PTI_Check3(2, glm::i8, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::i8, arg1), PyGLM_Vec_PTI_Get1(2, glm::i8, arg2), PyGLM_Vec_PTI_Get2(2, glm::i8, arg3), PyGLM_Vec_PTI_Get3(2, glm::i8, arg4))); } if (PyGLM_Vec_PTI_Check0(2, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u8, arg2) && PyGLM_Vec_PTI_Check2(2, glm::u8, arg3) && PyGLM_Vec_PTI_Check3(2, glm::u8, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(2, glm::u8, arg1), PyGLM_Vec_PTI_Get1(2, glm::u8, arg2), PyGLM_Vec_PTI_Get2(2, glm::u8, arg3), PyGLM_Vec_PTI_Get3(2, glm::u8, arg4))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2) && PyGLM_Vec_PTI_Check2(3, float, arg3) && PyGLM_Vec_PTI_Check3(3, float, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2), PyGLM_Vec_PTI_Get2(3, float, arg3), PyGLM_Vec_PTI_Get3(3, float, arg4))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2) && PyGLM_Vec_PTI_Check2(3, double, arg3) && PyGLM_Vec_PTI_Check3(3, double, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2), PyGLM_Vec_PTI_Get2(3, double, arg3), PyGLM_Vec_PTI_Get3(3, double, arg4))); } if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2) && PyGLM_Vec_PTI_Check2(3, int, arg3) && PyGLM_Vec_PTI_Check3(3, int, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, int, arg1), PyGLM_Vec_PTI_Get1(3, int, arg2), PyGLM_Vec_PTI_Get2(3, int, arg3), PyGLM_Vec_PTI_Get3(3, int, arg4))); } if (PyGLM_Vec_PTI_Check0(3, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(3, glm::uint, arg2) && PyGLM_Vec_PTI_Check2(3, glm::uint, arg3) && PyGLM_Vec_PTI_Check3(3, glm::uint, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::uint, arg1), PyGLM_Vec_PTI_Get1(3, glm::uint, arg2), PyGLM_Vec_PTI_Get2(3, glm::uint, arg3), PyGLM_Vec_PTI_Get3(3, glm::uint, arg4))); } if (PyGLM_Vec_PTI_Check0(3, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i64, arg2) && PyGLM_Vec_PTI_Check2(3, glm::i64, arg3) && PyGLM_Vec_PTI_Check3(3, glm::i64, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::i64, arg1), PyGLM_Vec_PTI_Get1(3, glm::i64, arg2), PyGLM_Vec_PTI_Get2(3, glm::i64, arg3), PyGLM_Vec_PTI_Get3(3, glm::i64, arg4))); } if (PyGLM_Vec_PTI_Check0(3, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u64, arg2) && PyGLM_Vec_PTI_Check2(3, glm::u64, arg3) && PyGLM_Vec_PTI_Check3(3, glm::u64, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::u64, arg1), PyGLM_Vec_PTI_Get1(3, glm::u64, arg2), PyGLM_Vec_PTI_Get2(3, glm::u64, arg3), PyGLM_Vec_PTI_Get3(3, glm::u64, arg4))); } if (PyGLM_Vec_PTI_Check0(3, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i16, arg2) && PyGLM_Vec_PTI_Check2(3, glm::i16, arg3) && PyGLM_Vec_PTI_Check3(3, glm::i16, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::i16, arg1), PyGLM_Vec_PTI_Get1(3, glm::i16, arg2), PyGLM_Vec_PTI_Get2(3, glm::i16, arg3), PyGLM_Vec_PTI_Get3(3, glm::i16, arg4))); } if (PyGLM_Vec_PTI_Check0(3, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u16, arg2) && PyGLM_Vec_PTI_Check2(3, glm::u16, arg3) && PyGLM_Vec_PTI_Check3(3, glm::u16, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::u16, arg1), PyGLM_Vec_PTI_Get1(3, glm::u16, arg2), PyGLM_Vec_PTI_Get2(3, glm::u16, arg3), PyGLM_Vec_PTI_Get3(3, glm::u16, arg4))); } if (PyGLM_Vec_PTI_Check0(3, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i8, arg2) && PyGLM_Vec_PTI_Check2(3, glm::i8, arg3) && PyGLM_Vec_PTI_Check3(3, glm::i8, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::i8, arg1), PyGLM_Vec_PTI_Get1(3, glm::i8, arg2), PyGLM_Vec_PTI_Get2(3, glm::i8, arg3), PyGLM_Vec_PTI_Get3(3, glm::i8, arg4))); } if (PyGLM_Vec_PTI_Check0(3, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u8, arg2) && PyGLM_Vec_PTI_Check2(3, glm::u8, arg3) && PyGLM_Vec_PTI_Check3(3, glm::u8, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(3, glm::u8, arg1), PyGLM_Vec_PTI_Get1(3, glm::u8, arg2), PyGLM_Vec_PTI_Get2(3, glm::u8, arg3), PyGLM_Vec_PTI_Get3(3, glm::u8, arg4))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2) && PyGLM_Vec_PTI_Check2(4, float, arg3) && PyGLM_Vec_PTI_Check3(4, float, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2), PyGLM_Vec_PTI_Get2(4, float, arg3), PyGLM_Vec_PTI_Get3(4, float, arg4))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2) && PyGLM_Vec_PTI_Check2(4, double, arg3) && PyGLM_Vec_PTI_Check3(4, double, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2), PyGLM_Vec_PTI_Get2(4, double, arg3), PyGLM_Vec_PTI_Get3(4, double, arg4))); } if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2) && PyGLM_Vec_PTI_Check2(4, int, arg3) && PyGLM_Vec_PTI_Check3(4, int, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, int, arg1), PyGLM_Vec_PTI_Get1(4, int, arg2), PyGLM_Vec_PTI_Get2(4, int, arg3), PyGLM_Vec_PTI_Get3(4, int, arg4))); } if (PyGLM_Vec_PTI_Check0(4, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(4, glm::uint, arg2) && PyGLM_Vec_PTI_Check2(4, glm::uint, arg3) && PyGLM_Vec_PTI_Check3(4, glm::uint, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::uint, arg1), PyGLM_Vec_PTI_Get1(4, glm::uint, arg2), PyGLM_Vec_PTI_Get2(4, glm::uint, arg3), PyGLM_Vec_PTI_Get3(4, glm::uint, arg4))); } if (PyGLM_Vec_PTI_Check0(4, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i64, arg2) && PyGLM_Vec_PTI_Check2(4, glm::i64, arg3) && PyGLM_Vec_PTI_Check3(4, glm::i64, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::i64, arg1), PyGLM_Vec_PTI_Get1(4, glm::i64, arg2), PyGLM_Vec_PTI_Get2(4, glm::i64, arg3), PyGLM_Vec_PTI_Get3(4, glm::i64, arg4))); } if (PyGLM_Vec_PTI_Check0(4, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u64, arg2) && PyGLM_Vec_PTI_Check2(4, glm::u64, arg3) && PyGLM_Vec_PTI_Check3(4, glm::u64, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::u64, arg1), PyGLM_Vec_PTI_Get1(4, glm::u64, arg2), PyGLM_Vec_PTI_Get2(4, glm::u64, arg3), PyGLM_Vec_PTI_Get3(4, glm::u64, arg4))); } if (PyGLM_Vec_PTI_Check0(4, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i16, arg2) && PyGLM_Vec_PTI_Check2(4, glm::i16, arg3) && PyGLM_Vec_PTI_Check3(4, glm::i16, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::i16, arg1), PyGLM_Vec_PTI_Get1(4, glm::i16, arg2), PyGLM_Vec_PTI_Get2(4, glm::i16, arg3), PyGLM_Vec_PTI_Get3(4, glm::i16, arg4))); } if (PyGLM_Vec_PTI_Check0(4, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u16, arg2) && PyGLM_Vec_PTI_Check2(4, glm::u16, arg3) && PyGLM_Vec_PTI_Check3(4, glm::u16, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::u16, arg1), PyGLM_Vec_PTI_Get1(4, glm::u16, arg2), PyGLM_Vec_PTI_Get2(4, glm::u16, arg3), PyGLM_Vec_PTI_Get3(4, glm::u16, arg4))); } if (PyGLM_Vec_PTI_Check0(4, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i8, arg2) && PyGLM_Vec_PTI_Check2(4, glm::i8, arg3) && PyGLM_Vec_PTI_Check3(4, glm::i8, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::i8, arg1), PyGLM_Vec_PTI_Get1(4, glm::i8, arg2), PyGLM_Vec_PTI_Get2(4, glm::i8, arg3), PyGLM_Vec_PTI_Get3(4, glm::i8, arg4))); } if (PyGLM_Vec_PTI_Check0(4, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u8, arg2) && PyGLM_Vec_PTI_Check2(4, glm::u8, arg3) && PyGLM_Vec_PTI_Check3(4, glm::u8, arg4)) { return pack(glm::max(PyGLM_Vec_PTI_Get0(4, glm::u8, arg1), PyGLM_Vec_PTI_Get1(4, glm::u8, arg2), PyGLM_Vec_PTI_Get2(4, glm::u8, arg3), PyGLM_Vec_PTI_Get3(4, glm::u8, arg4))); } } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for max()"); return NULL; } PyDoc_STRVAR(fmin_docstr, "fmin(x: number, y: number) -> float\n" " Returns `y` if `y < x`; otherwise, it returns `x`. If one of the two arguments is `NaN`, the value\n" " of the other argument is returned.\n" "fmin(x: vecN, y: number) -> vecN\n" " For each component `c` of `x`:\n" " Returns `y` if `y < c`; otherwise, it returns `c`. If one of the two arguments is `NaN`, the value\n" " of the other argument is returned.\n" "fmin(x: vecN, y: vecN) -> vecN\n" " For every index `i`:\n" " Returns `y[i]` if `y[i] < x[i]`; otherwise, it returns `x[i]`. If one of the two arguments is\n" " `NaN`, the value of the other argument is returned.\n" "fmin(a: vecN, b: vecN, c : vecN) -> vecN\n" " Returns `fmin(fmin(a, b), c)`.\n" "fmin(a: vecN, b: vecN, c : vecN, d: vecN) -> vecN\n" " Returns `fmin(fmin(a, b), fmin(c, d))`." ); static PyObject* fmin_(PyObject*, PyObject* args) { PyObject *arg1, *arg2, *arg3 = NULL, *arg4 = NULL; if (!PyArg_UnpackTuple(args, "fmin", 2, 4, &arg1, &arg2, &arg3, &arg4)) return NULL; if (arg3 == NULL) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::fmin(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2))); } if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Number_FromPyObject(arg2))); } } else { if (arg4 == NULL) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::fmin(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2) && PyGLM_Vec_PTI_Check2(1, float, arg3)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2), PyGLM_Vec_PTI_Get2(1, float, arg3))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2) && PyGLM_Vec_PTI_Check2(1, double, arg3)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2), PyGLM_Vec_PTI_Get2(1, double, arg3))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2) && PyGLM_Vec_PTI_Check2(2, float, arg3)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2), PyGLM_Vec_PTI_Get2(2, float, arg3))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2) && PyGLM_Vec_PTI_Check2(2, double, arg3)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2), PyGLM_Vec_PTI_Get2(2, double, arg3))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2) && PyGLM_Vec_PTI_Check2(3, float, arg3)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2), PyGLM_Vec_PTI_Get2(3, float, arg3))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2) && PyGLM_Vec_PTI_Check2(3, double, arg3)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2), PyGLM_Vec_PTI_Get2(3, double, arg3))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2) && PyGLM_Vec_PTI_Check2(4, float, arg3)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2), PyGLM_Vec_PTI_Get2(4, float, arg3))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2) && PyGLM_Vec_PTI_Check2(4, double, arg3)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2), PyGLM_Vec_PTI_Get2(4, double, arg3))); } } else { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4)) { return pack(glm::fmin(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3), PyGLM_Number_FromPyObject(arg4))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init3(arg4, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2) && PyGLM_Vec_PTI_Check2(1, float, arg3) && PyGLM_Vec_PTI_Check3(1, float, arg4)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2), PyGLM_Vec_PTI_Get2(1, float, arg3), PyGLM_Vec_PTI_Get3(1, float, arg4))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2) && PyGLM_Vec_PTI_Check2(1, double, arg3) && PyGLM_Vec_PTI_Check3(1, double, arg4)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2), PyGLM_Vec_PTI_Get2(1, double, arg3), PyGLM_Vec_PTI_Get3(1, double, arg4))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2) && PyGLM_Vec_PTI_Check2(2, float, arg3) && PyGLM_Vec_PTI_Check3(2, float, arg4)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2), PyGLM_Vec_PTI_Get2(2, float, arg3), PyGLM_Vec_PTI_Get3(2, float, arg4))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2) && PyGLM_Vec_PTI_Check2(2, double, arg3) && PyGLM_Vec_PTI_Check3(2, double, arg4)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2), PyGLM_Vec_PTI_Get2(2, double, arg3), PyGLM_Vec_PTI_Get3(2, double, arg4))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2) && PyGLM_Vec_PTI_Check2(3, float, arg3) && PyGLM_Vec_PTI_Check3(3, float, arg4)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2), PyGLM_Vec_PTI_Get2(3, float, arg3), PyGLM_Vec_PTI_Get3(3, float, arg4))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2) && PyGLM_Vec_PTI_Check2(3, double, arg3) && PyGLM_Vec_PTI_Check3(3, double, arg4)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2), PyGLM_Vec_PTI_Get2(3, double, arg3), PyGLM_Vec_PTI_Get3(3, double, arg4))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2) && PyGLM_Vec_PTI_Check2(4, float, arg3) && PyGLM_Vec_PTI_Check3(4, float, arg4)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2), PyGLM_Vec_PTI_Get2(4, float, arg3), PyGLM_Vec_PTI_Get3(4, float, arg4))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2) && PyGLM_Vec_PTI_Check2(4, double, arg3) && PyGLM_Vec_PTI_Check3(4, double, arg4)) { return pack(glm::fmin(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2), PyGLM_Vec_PTI_Get2(4, double, arg3), PyGLM_Vec_PTI_Get3(4, double, arg4))); } } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for fmin()"); return NULL; } PyDoc_STRVAR(fmax_docstr, "fmax(x: number, y: number) -> float\n" " Returns `y` if `x < y`; otherwise, it returns `x`. If one of the two arguments is `NaN`, the value\n" " of the other argument is returned.\n" "fmax(x: vecN, y: number) -> vecN\n" " For each component `c` of `x`:\n" " Returns `y` if `c < y`; otherwise, it returns `c`. If one of the two arguments is `NaN`, the value\n" " of the other argument is returned.\n" "fmax(x: vecN, y: vecN) -> vecN\n" " For every index `i`:\n" " Returns `y[i]` if `x[i] < y[i]`; otherwise, it returns `x[i]`. If one of the two arguments is\n" " `NaN`, the value of the other argument is returned.\n" "fmax(a: vecN, b: vecN, c: vecN) -> vecN\n" " Returns `fmax(fmax(a, b), c)`.\n" "fmax(a: vecN, b: vecN, c: vecN, d: vecN) -> vecN\n" " Returns `fmax(fmax(a, b), fmax(c, d))`." ); static PyObject* fmax_(PyObject*, PyObject* args) { PyObject *arg1, *arg2, *arg3 = NULL, *arg4 = NULL; if (!PyArg_UnpackTuple(args, "fmax", 2, 4, &arg1, &arg2, &arg3, &arg4)) return NULL; if (arg3 == NULL) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::fmax(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2))); } if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Number_FromPyObject(arg2))); } } else { if (arg4 == NULL) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::fmax(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2) && PyGLM_Vec_PTI_Check2(1, float, arg3)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2), PyGLM_Vec_PTI_Get2(1, float, arg3))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2) && PyGLM_Vec_PTI_Check2(1, double, arg3)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2), PyGLM_Vec_PTI_Get2(1, double, arg3))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2) && PyGLM_Vec_PTI_Check2(2, float, arg3)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2), PyGLM_Vec_PTI_Get2(2, float, arg3))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2) && PyGLM_Vec_PTI_Check2(2, double, arg3)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2), PyGLM_Vec_PTI_Get2(2, double, arg3))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2) && PyGLM_Vec_PTI_Check2(3, float, arg3)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2), PyGLM_Vec_PTI_Get2(3, float, arg3))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2) && PyGLM_Vec_PTI_Check2(3, double, arg3)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2), PyGLM_Vec_PTI_Get2(3, double, arg3))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2) && PyGLM_Vec_PTI_Check2(4, float, arg3)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2), PyGLM_Vec_PTI_Get2(4, float, arg3))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2) && PyGLM_Vec_PTI_Check2(4, double, arg3)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2), PyGLM_Vec_PTI_Get2(4, double, arg3))); } } else { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4)) { return pack(glm::fmax(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3), PyGLM_Number_FromPyObject(arg4))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init3(arg4, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2) && PyGLM_Vec_PTI_Check2(1, float, arg3) && PyGLM_Vec_PTI_Check3(1, float, arg4)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2), PyGLM_Vec_PTI_Get2(1, float, arg3), PyGLM_Vec_PTI_Get3(1, float, arg4))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2) && PyGLM_Vec_PTI_Check2(1, double, arg3) && PyGLM_Vec_PTI_Check3(1, double, arg4)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2), PyGLM_Vec_PTI_Get2(1, double, arg3), PyGLM_Vec_PTI_Get3(1, double, arg4))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2) && PyGLM_Vec_PTI_Check2(2, float, arg3) && PyGLM_Vec_PTI_Check3(2, float, arg4)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2), PyGLM_Vec_PTI_Get2(2, float, arg3), PyGLM_Vec_PTI_Get3(2, float, arg4))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2) && PyGLM_Vec_PTI_Check2(2, double, arg3) && PyGLM_Vec_PTI_Check3(2, double, arg4)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2), PyGLM_Vec_PTI_Get2(2, double, arg3), PyGLM_Vec_PTI_Get3(2, double, arg4))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2) && PyGLM_Vec_PTI_Check2(3, float, arg3) && PyGLM_Vec_PTI_Check3(3, float, arg4)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2), PyGLM_Vec_PTI_Get2(3, float, arg3), PyGLM_Vec_PTI_Get3(3, float, arg4))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2) && PyGLM_Vec_PTI_Check2(3, double, arg3) && PyGLM_Vec_PTI_Check3(3, double, arg4)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2), PyGLM_Vec_PTI_Get2(3, double, arg3), PyGLM_Vec_PTI_Get3(3, double, arg4))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2) && PyGLM_Vec_PTI_Check2(4, float, arg3) && PyGLM_Vec_PTI_Check3(4, float, arg4)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2), PyGLM_Vec_PTI_Get2(4, float, arg3), PyGLM_Vec_PTI_Get3(4, float, arg4))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2) && PyGLM_Vec_PTI_Check2(4, double, arg3) && PyGLM_Vec_PTI_Check3(4, double, arg4)) { return pack(glm::fmax(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2), PyGLM_Vec_PTI_Get2(4, double, arg3), PyGLM_Vec_PTI_Get3(4, double, arg4))); } } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for fmax()"); return NULL; } PyDoc_STRVAR(clamp_docstr, "clamp(x: number, minVal: number, maxVal: number) -> number\n" " Returns `min(max(x, minVal), maxVal)`.\n" "clamp(x: vecN, minVal: number, maxVal: number) -> vecN\n" " Returns `min(max(x, minVal), maxVal)` for each component in `x` using the floating-point values\n" " `minVal` and `maxVal`.\n" "clamp(x: vecN, minVal: vecN, maxVal: vecN) -> vecN\n" " Returns `min(max(x, minVal), maxVal)` for each component in `x` using the floating-point values\n" " `minVal` and `maxVal`.\n" ); static PyObject* clamp_(PyObject*, PyObject* args) { PyObject *arg1, *arg2, *arg3; PyGLM_Arg_Unpack_3O(args, "clamp", arg1, arg2, arg3); if (PyFloat_Check(arg1) && PyFloat_Check(arg2) && PyFloat_Check(arg3)) { return pack(glm::clamp(PyFloat_AS_DOUBLE(arg1), PyFloat_AS_DOUBLE(arg2), PyFloat_AS_DOUBLE(arg3))); } if (PyLong_Check(arg1) && PyLong_Check(arg2) && PyLong_Check(arg3)) { return pack(glm::clamp(PyLong_AS_LONG(arg1), PyLong_AS_LONG(arg2), PyLong_AS_LONG(arg3))); } if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I | PyGLM_DT_FD); PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2) && PyGLM_Vec_PTI_Check2(1, float, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2), PyGLM_Vec_PTI_Get2(1, float, arg3))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2) && PyGLM_Vec_PTI_Check2(2, float, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2), PyGLM_Vec_PTI_Get2(2, float, arg3))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2) && PyGLM_Vec_PTI_Check2(3, float, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2), PyGLM_Vec_PTI_Get2(3, float, arg3))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2) && PyGLM_Vec_PTI_Check2(4, float, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2), PyGLM_Vec_PTI_Get2(4, float, arg3))); } if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2) && PyGLM_Vec_PTI_Check2(1, double, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2), PyGLM_Vec_PTI_Get2(1, double, arg3))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2) && PyGLM_Vec_PTI_Check2(2, double, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2), PyGLM_Vec_PTI_Get2(2, double, arg3))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2) && PyGLM_Vec_PTI_Check2(3, double, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2), PyGLM_Vec_PTI_Get2(3, double, arg3))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2) && PyGLM_Vec_PTI_Check2(4, double, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2), PyGLM_Vec_PTI_Get2(4, double, arg3))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2) && PyGLM_Vec_PTI_Check2(1, int, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(1, int, arg1), PyGLM_Vec_PTI_Get1(1, int, arg2), PyGLM_Vec_PTI_Get2(1, int, arg3))); } if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2) && PyGLM_Vec_PTI_Check2(2, int, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(2, int, arg1), PyGLM_Vec_PTI_Get1(2, int, arg2), PyGLM_Vec_PTI_Get2(2, int, arg3))); } if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2) && PyGLM_Vec_PTI_Check2(3, int, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(3, int, arg1), PyGLM_Vec_PTI_Get1(3, int, arg2), PyGLM_Vec_PTI_Get2(3, int, arg3))); } if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2) && PyGLM_Vec_PTI_Check2(4, int, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(4, int, arg1), PyGLM_Vec_PTI_Get1(4, int, arg2), PyGLM_Vec_PTI_Get2(4, int, arg3))); } if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(1, int, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(2, int, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(3, int, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(4, int, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(1, glm::uint, arg2) && PyGLM_Vec_PTI_Check2(1, glm::uint, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(1, glm::uint, arg1), PyGLM_Vec_PTI_Get1(1, glm::uint, arg2), PyGLM_Vec_PTI_Get2(1, glm::uint, arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(2, glm::uint, arg2) && PyGLM_Vec_PTI_Check2(2, glm::uint, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(2, glm::uint, arg1), PyGLM_Vec_PTI_Get1(2, glm::uint, arg2), PyGLM_Vec_PTI_Get2(2, glm::uint, arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(3, glm::uint, arg2) && PyGLM_Vec_PTI_Check2(3, glm::uint, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(3, glm::uint, arg1), PyGLM_Vec_PTI_Get1(3, glm::uint, arg2), PyGLM_Vec_PTI_Get2(3, glm::uint, arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(4, glm::uint, arg2) && PyGLM_Vec_PTI_Check2(4, glm::uint, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(4, glm::uint, arg1), PyGLM_Vec_PTI_Get1(4, glm::uint, arg2), PyGLM_Vec_PTI_Get2(4, glm::uint, arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::uint, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(1, glm::uint, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::uint, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(2, glm::uint, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::uint, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(3, glm::uint, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::uint, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(4, glm::uint, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i64, arg2) && PyGLM_Vec_PTI_Check2(1, glm::i64, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(1, glm::i64, arg1), PyGLM_Vec_PTI_Get1(1, glm::i64, arg2), PyGLM_Vec_PTI_Get2(1, glm::i64, arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i64, arg2) && PyGLM_Vec_PTI_Check2(2, glm::i64, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(2, glm::i64, arg1), PyGLM_Vec_PTI_Get1(2, glm::i64, arg2), PyGLM_Vec_PTI_Get2(2, glm::i64, arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i64, arg2) && PyGLM_Vec_PTI_Check2(3, glm::i64, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(3, glm::i64, arg1), PyGLM_Vec_PTI_Get1(3, glm::i64, arg2), PyGLM_Vec_PTI_Get2(3, glm::i64, arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i64, arg2) && PyGLM_Vec_PTI_Check2(4, glm::i64, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(4, glm::i64, arg1), PyGLM_Vec_PTI_Get1(4, glm::i64, arg2), PyGLM_Vec_PTI_Get2(4, glm::i64, arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::i64, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(1, glm::i64, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::i64, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(2, glm::i64, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::i64, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(3, glm::i64, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::i64, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(4, glm::i64, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u64, arg2) && PyGLM_Vec_PTI_Check2(1, glm::u64, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(1, glm::u64, arg1), PyGLM_Vec_PTI_Get1(1, glm::u64, arg2), PyGLM_Vec_PTI_Get2(1, glm::u64, arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u64, arg2) && PyGLM_Vec_PTI_Check2(2, glm::u64, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(2, glm::u64, arg1), PyGLM_Vec_PTI_Get1(2, glm::u64, arg2), PyGLM_Vec_PTI_Get2(2, glm::u64, arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u64, arg2) && PyGLM_Vec_PTI_Check2(3, glm::u64, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(3, glm::u64, arg1), PyGLM_Vec_PTI_Get1(3, glm::u64, arg2), PyGLM_Vec_PTI_Get2(3, glm::u64, arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u64, arg2) && PyGLM_Vec_PTI_Check2(4, glm::u64, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(4, glm::u64, arg1), PyGLM_Vec_PTI_Get1(4, glm::u64, arg2), PyGLM_Vec_PTI_Get2(4, glm::u64, arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::u64, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(1, glm::u64, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::u64, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(2, glm::u64, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::u64, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(3, glm::u64, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::u64, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(4, glm::u64, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i16, arg2) && PyGLM_Vec_PTI_Check2(1, glm::i16, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(1, glm::i16, arg1), PyGLM_Vec_PTI_Get1(1, glm::i16, arg2), PyGLM_Vec_PTI_Get2(1, glm::i16, arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i16, arg2) && PyGLM_Vec_PTI_Check2(2, glm::i16, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(2, glm::i16, arg1), PyGLM_Vec_PTI_Get1(2, glm::i16, arg2), PyGLM_Vec_PTI_Get2(2, glm::i16, arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i16, arg2) && PyGLM_Vec_PTI_Check2(3, glm::i16, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(3, glm::i16, arg1), PyGLM_Vec_PTI_Get1(3, glm::i16, arg2), PyGLM_Vec_PTI_Get2(3, glm::i16, arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i16, arg2) && PyGLM_Vec_PTI_Check2(4, glm::i16, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(4, glm::i16, arg1), PyGLM_Vec_PTI_Get1(4, glm::i16, arg2), PyGLM_Vec_PTI_Get2(4, glm::i16, arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::i16, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(1, glm::i16, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::i16, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(2, glm::i16, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::i16, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(3, glm::i16, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::i16, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(4, glm::i16, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u16, arg2) && PyGLM_Vec_PTI_Check2(1, glm::u16, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(1, glm::u16, arg1), PyGLM_Vec_PTI_Get1(1, glm::u16, arg2), PyGLM_Vec_PTI_Get2(1, glm::u16, arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u16, arg2) && PyGLM_Vec_PTI_Check2(2, glm::u16, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(2, glm::u16, arg1), PyGLM_Vec_PTI_Get1(2, glm::u16, arg2), PyGLM_Vec_PTI_Get2(2, glm::u16, arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u16, arg2) && PyGLM_Vec_PTI_Check2(3, glm::u16, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(3, glm::u16, arg1), PyGLM_Vec_PTI_Get1(3, glm::u16, arg2), PyGLM_Vec_PTI_Get2(3, glm::u16, arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u16, arg2) && PyGLM_Vec_PTI_Check2(4, glm::u16, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(4, glm::u16, arg1), PyGLM_Vec_PTI_Get1(4, glm::u16, arg2), PyGLM_Vec_PTI_Get2(4, glm::u16, arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::u16, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(1, glm::u16, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::u16, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(2, glm::u16, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::u16, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(3, glm::u16, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::u16, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(4, glm::u16, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i8, arg2) && PyGLM_Vec_PTI_Check2(1, glm::i8, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(1, glm::i8, arg1), PyGLM_Vec_PTI_Get1(1, glm::i8, arg2), PyGLM_Vec_PTI_Get2(1, glm::i8, arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i8, arg2) && PyGLM_Vec_PTI_Check2(2, glm::i8, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(2, glm::i8, arg1), PyGLM_Vec_PTI_Get1(2, glm::i8, arg2), PyGLM_Vec_PTI_Get2(2, glm::i8, arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i8, arg2) && PyGLM_Vec_PTI_Check2(3, glm::i8, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(3, glm::i8, arg1), PyGLM_Vec_PTI_Get1(3, glm::i8, arg2), PyGLM_Vec_PTI_Get2(3, glm::i8, arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i8, arg2) && PyGLM_Vec_PTI_Check2(4, glm::i8, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(4, glm::i8, arg1), PyGLM_Vec_PTI_Get1(4, glm::i8, arg2), PyGLM_Vec_PTI_Get2(4, glm::i8, arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::i8, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(1, glm::i8, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::i8, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(2, glm::i8, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::i8, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(3, glm::i8, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::i8, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(4, glm::i8, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u8, arg2) && PyGLM_Vec_PTI_Check2(1, glm::u8, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(1, glm::u8, arg1), PyGLM_Vec_PTI_Get1(1, glm::u8, arg2), PyGLM_Vec_PTI_Get2(1, glm::u8, arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u8, arg2) && PyGLM_Vec_PTI_Check2(2, glm::u8, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(2, glm::u8, arg1), PyGLM_Vec_PTI_Get1(2, glm::u8, arg2), PyGLM_Vec_PTI_Get2(2, glm::u8, arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u8, arg2) && PyGLM_Vec_PTI_Check2(3, glm::u8, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(3, glm::u8, arg1), PyGLM_Vec_PTI_Get1(3, glm::u8, arg2), PyGLM_Vec_PTI_Get2(3, glm::u8, arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u8, arg2) && PyGLM_Vec_PTI_Check2(4, glm::u8, arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(4, glm::u8, arg1), PyGLM_Vec_PTI_Get1(4, glm::u8, arg2), PyGLM_Vec_PTI_Get2(4, glm::u8, arg3))); } if (PyGLM_Vec_PTI_Check0(1, glm::u8, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(1, glm::u8, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(2, glm::u8, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(2, glm::u8, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, glm::u8, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(3, glm::u8, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, glm::u8, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return pack(glm::clamp(PyGLM_Vec_PTI_Get0(4, glm::u8, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for " "clamp" "()"); return NULL; } PyDoc_STRVAR(mix_docstr, "mix(x: number, y: number, a: float) -> number\n" " Returns `x * (1.0 - a) + y * a`, i.e., the linear blend of `x` and `y` using the floating-point\n" " value `a`. The value for `a` is not restricted to the range `[0, 1]`.\n" "mix(x: number, y: number, a: bool) -> number\n" " Returns `y` if `a` is `True` and `x` otherwise.\n" "mix(x: vecN, y: vecN, a: fvecN) -> vecN\n" " Returns `x * (1.0 - a) + y * a`, i.e., the linear blend of `x` and `y` using the floating-point\n" " value `a`. The value for `a` is not restricted to the range `[0, 1]`.\n" "mix(x: vecN, y: vecN, a: bvecN) -> vecN\n" " For each component index `i`:\n" " Returns `y[i]` if `a[i]` is `True` and `x[i]` otherwise.\n" "mix(x: matNxM, y: matNxM, a: fmatNxM) -> matNxM\n" " Returns `x * (1.0 - a) + y * a`, i.e., the linear blend of `x` and `y` using the floating-point\n" " value `a` for each component. The value for `a` is not restricted to the range `[0, 1]`.\n" "mix(x: matNxM, y: matNxM, a: float) -> matNxM\n" " Returns `x * (1.0 - a) + y * a`, i.e., the linear blend of `x` and `y` using the floating-point\n" " value `a` for each component. The value for `a` is not restricted to the range `[0, 1]`.\n" "mix(x: quat, y: quat, a: float) -> quat\n" " Spherical linear interpolation of two quaternions. The interpolation is oriented and the\n" " rotation is performed at constant speed. For short path spherical linear interpolation, use\n" " the `slerp` function." ); static PyObject* mix_(PyObject*, PyObject* args) { PyObject *arg1, *arg2, *arg3; PyGLM_Arg_Unpack_3O(args, "mix", arg1, arg2, arg3); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyBool_Check(arg3)) { return PyGLM_PyObject_FromNumber(glm::mix(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { return PyGLM_PyObject_FromNumber(glm::mix(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init0(arg1, PyGLM_T_ALL | PyGLM_SHAPE_ALL | PyGLM_DT_ALL); PyGLM_PTI_Init1(arg2, PyGLM_T_ALL | PyGLM_SHAPE_ALL | PyGLM_DT_ALL); if (PyGLM_Qua_PTI_Check0(float, arg1) && PyGLM_Qua_PTI_Check1(float, arg2) && PyGLM_Number_Check(arg3)) { glm::quat o = PyGLM_Qua_PTI_Get0(float, arg1); glm::quat o2 = PyGLM_Qua_PTI_Get1(float, arg2); return pack_qua(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Qua_PTI_Check0(double, arg1) && PyGLM_Qua_PTI_Check1(double, arg2) && PyGLM_Number_Check(arg3)) { glm::dquat o = PyGLM_Qua_PTI_Get0(double, arg1); glm::dquat o2 = PyGLM_Qua_PTI_Get1(double, arg2); return pack_qua(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg1); glm::vec<1, float> o2 = PyGLM_Vec_PTI_Get1(1, float, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(1, float, arg3)) { glm::vec<1, float> o3 = PyGLM_Vec_PTI_Get2(1, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, double, arg3)) { glm::vec<1, double> o3 = PyGLM_Vec_PTI_Get2(1, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, bool, arg3)) { glm::vec<1, bool> o3 = PyGLM_Vec_PTI_Get2(1, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) { glm::vec<1, double> o = PyGLM_Vec_PTI_Get0(1, double, arg1); glm::vec<1, double> o2 = PyGLM_Vec_PTI_Get1(1, double, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(1, float, arg3)) { glm::vec<1, float> o3 = PyGLM_Vec_PTI_Get2(1, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, double, arg3)) { glm::vec<1, double> o3 = PyGLM_Vec_PTI_Get2(1, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, bool, arg3)) { glm::vec<1, bool> o3 = PyGLM_Vec_PTI_Get2(1, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2)) { glm::vec<1, int> o = PyGLM_Vec_PTI_Get0(1, int, arg1); glm::vec<1, int> o2 = PyGLM_Vec_PTI_Get1(1, int, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(1, float, arg3)) { glm::vec<1, float> o3 = PyGLM_Vec_PTI_Get2(1, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, double, arg3)) { glm::vec<1, double> o3 = PyGLM_Vec_PTI_Get2(1, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, bool, arg3)) { glm::vec<1, bool> o3 = PyGLM_Vec_PTI_Get2(1, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(1, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(1, glm::uint, arg2)) { glm::vec<1, glm::uint> o = PyGLM_Vec_PTI_Get0(1, glm::uint, arg1); glm::vec<1, glm::uint> o2 = PyGLM_Vec_PTI_Get1(1, glm::uint, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(1, float, arg3)) { glm::vec<1, float> o3 = PyGLM_Vec_PTI_Get2(1, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, double, arg3)) { glm::vec<1, double> o3 = PyGLM_Vec_PTI_Get2(1, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, bool, arg3)) { glm::vec<1, bool> o3 = PyGLM_Vec_PTI_Get2(1, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(1, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i64, arg2)) { glm::vec<1, glm::i64> o = PyGLM_Vec_PTI_Get0(1, glm::i64, arg1); glm::vec<1, glm::i64> o2 = PyGLM_Vec_PTI_Get1(1, glm::i64, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(1, float, arg3)) { glm::vec<1, float> o3 = PyGLM_Vec_PTI_Get2(1, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, double, arg3)) { glm::vec<1, double> o3 = PyGLM_Vec_PTI_Get2(1, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, bool, arg3)) { glm::vec<1, bool> o3 = PyGLM_Vec_PTI_Get2(1, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(1, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u64, arg2)) { glm::vec<1, glm::u64> o = PyGLM_Vec_PTI_Get0(1, glm::u64, arg1); glm::vec<1, glm::u64> o2 = PyGLM_Vec_PTI_Get1(1, glm::u64, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(1, float, arg3)) { glm::vec<1, float> o3 = PyGLM_Vec_PTI_Get2(1, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, double, arg3)) { glm::vec<1, double> o3 = PyGLM_Vec_PTI_Get2(1, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, bool, arg3)) { glm::vec<1, bool> o3 = PyGLM_Vec_PTI_Get2(1, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(1, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i16, arg2)) { glm::vec<1, glm::i16> o = PyGLM_Vec_PTI_Get0(1, glm::i16, arg1); glm::vec<1, glm::i16> o2 = PyGLM_Vec_PTI_Get1(1, glm::i16, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(1, float, arg3)) { glm::vec<1, float> o3 = PyGLM_Vec_PTI_Get2(1, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, double, arg3)) { glm::vec<1, double> o3 = PyGLM_Vec_PTI_Get2(1, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, bool, arg3)) { glm::vec<1, bool> o3 = PyGLM_Vec_PTI_Get2(1, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(1, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u16, arg2)) { glm::vec<1, glm::u16> o = PyGLM_Vec_PTI_Get0(1, glm::u16, arg1); glm::vec<1, glm::u16> o2 = PyGLM_Vec_PTI_Get1(1, glm::u16, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(1, float, arg3)) { glm::vec<1, float> o3 = PyGLM_Vec_PTI_Get2(1, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, double, arg3)) { glm::vec<1, double> o3 = PyGLM_Vec_PTI_Get2(1, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, bool, arg3)) { glm::vec<1, bool> o3 = PyGLM_Vec_PTI_Get2(1, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(1, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i8, arg2)) { glm::vec<1, glm::i8> o = PyGLM_Vec_PTI_Get0(1, glm::i8, arg1); glm::vec<1, glm::i8> o2 = PyGLM_Vec_PTI_Get1(1, glm::i8, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(1, float, arg3)) { glm::vec<1, float> o3 = PyGLM_Vec_PTI_Get2(1, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, double, arg3)) { glm::vec<1, double> o3 = PyGLM_Vec_PTI_Get2(1, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, bool, arg3)) { glm::vec<1, bool> o3 = PyGLM_Vec_PTI_Get2(1, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(1, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u8, arg2)) { glm::vec<1, glm::u8> o = PyGLM_Vec_PTI_Get0(1, glm::u8, arg1); glm::vec<1, glm::u8> o2 = PyGLM_Vec_PTI_Get1(1, glm::u8, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(1, float, arg3)) { glm::vec<1, float> o3 = PyGLM_Vec_PTI_Get2(1, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, double, arg3)) { glm::vec<1, double> o3 = PyGLM_Vec_PTI_Get2(1, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, bool, arg3)) { glm::vec<1, bool> o3 = PyGLM_Vec_PTI_Get2(1, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(1, bool, arg1) && PyGLM_Vec_PTI_Check1(1, bool, arg2)) { glm::vec<1, bool> o = PyGLM_Vec_PTI_Get0(1, bool, arg1); glm::vec<1, bool> o2 = PyGLM_Vec_PTI_Get1(1, bool, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(1, float, arg3)) { glm::vec<1, float> o3 = PyGLM_Vec_PTI_Get2(1, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, double, arg3)) { glm::vec<1, double> o3 = PyGLM_Vec_PTI_Get2(1, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(1, bool, arg3)) { glm::vec<1, bool> o3 = PyGLM_Vec_PTI_Get2(1, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg1); glm::vec<2, float> o2 = PyGLM_Vec_PTI_Get1(2, float, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(2, float, arg3)) { glm::vec<2, float> o3 = PyGLM_Vec_PTI_Get2(2, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, double, arg3)) { glm::vec<2, double> o3 = PyGLM_Vec_PTI_Get2(2, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, bool, arg3)) { glm::vec<2, bool> o3 = PyGLM_Vec_PTI_Get2(2, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg1); glm::vec<2, double> o2 = PyGLM_Vec_PTI_Get1(2, double, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(2, float, arg3)) { glm::vec<2, float> o3 = PyGLM_Vec_PTI_Get2(2, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, double, arg3)) { glm::vec<2, double> o3 = PyGLM_Vec_PTI_Get2(2, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, bool, arg3)) { glm::vec<2, bool> o3 = PyGLM_Vec_PTI_Get2(2, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2)) { glm::vec<2, int> o = PyGLM_Vec_PTI_Get0(2, int, arg1); glm::vec<2, int> o2 = PyGLM_Vec_PTI_Get1(2, int, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(2, float, arg3)) { glm::vec<2, float> o3 = PyGLM_Vec_PTI_Get2(2, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, double, arg3)) { glm::vec<2, double> o3 = PyGLM_Vec_PTI_Get2(2, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, bool, arg3)) { glm::vec<2, bool> o3 = PyGLM_Vec_PTI_Get2(2, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(2, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(2, glm::uint, arg2)) { glm::vec<2, glm::uint> o = PyGLM_Vec_PTI_Get0(2, glm::uint, arg1); glm::vec<2, glm::uint> o2 = PyGLM_Vec_PTI_Get1(2, glm::uint, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(2, float, arg3)) { glm::vec<2, float> o3 = PyGLM_Vec_PTI_Get2(2, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, double, arg3)) { glm::vec<2, double> o3 = PyGLM_Vec_PTI_Get2(2, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, bool, arg3)) { glm::vec<2, bool> o3 = PyGLM_Vec_PTI_Get2(2, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(2, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i64, arg2)) { glm::vec<2, glm::i64> o = PyGLM_Vec_PTI_Get0(2, glm::i64, arg1); glm::vec<2, glm::i64> o2 = PyGLM_Vec_PTI_Get1(2, glm::i64, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(2, float, arg3)) { glm::vec<2, float> o3 = PyGLM_Vec_PTI_Get2(2, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, double, arg3)) { glm::vec<2, double> o3 = PyGLM_Vec_PTI_Get2(2, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, bool, arg3)) { glm::vec<2, bool> o3 = PyGLM_Vec_PTI_Get2(2, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(2, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u64, arg2)) { glm::vec<2, glm::u64> o = PyGLM_Vec_PTI_Get0(2, glm::u64, arg1); glm::vec<2, glm::u64> o2 = PyGLM_Vec_PTI_Get1(2, glm::u64, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(2, float, arg3)) { glm::vec<2, float> o3 = PyGLM_Vec_PTI_Get2(2, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, double, arg3)) { glm::vec<2, double> o3 = PyGLM_Vec_PTI_Get2(2, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, bool, arg3)) { glm::vec<2, bool> o3 = PyGLM_Vec_PTI_Get2(2, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(2, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i16, arg2)) { glm::vec<2, glm::i16> o = PyGLM_Vec_PTI_Get0(2, glm::i16, arg1); glm::vec<2, glm::i16> o2 = PyGLM_Vec_PTI_Get1(2, glm::i16, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(2, float, arg3)) { glm::vec<2, float> o3 = PyGLM_Vec_PTI_Get2(2, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, double, arg3)) { glm::vec<2, double> o3 = PyGLM_Vec_PTI_Get2(2, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, bool, arg3)) { glm::vec<2, bool> o3 = PyGLM_Vec_PTI_Get2(2, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(2, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u16, arg2)) { glm::vec<2, glm::u16> o = PyGLM_Vec_PTI_Get0(2, glm::u16, arg1); glm::vec<2, glm::u16> o2 = PyGLM_Vec_PTI_Get1(2, glm::u16, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(2, float, arg3)) { glm::vec<2, float> o3 = PyGLM_Vec_PTI_Get2(2, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, double, arg3)) { glm::vec<2, double> o3 = PyGLM_Vec_PTI_Get2(2, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, bool, arg3)) { glm::vec<2, bool> o3 = PyGLM_Vec_PTI_Get2(2, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(2, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i8, arg2)) { glm::vec<2, glm::i8> o = PyGLM_Vec_PTI_Get0(2, glm::i8, arg1); glm::vec<2, glm::i8> o2 = PyGLM_Vec_PTI_Get1(2, glm::i8, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(2, float, arg3)) { glm::vec<2, float> o3 = PyGLM_Vec_PTI_Get2(2, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, double, arg3)) { glm::vec<2, double> o3 = PyGLM_Vec_PTI_Get2(2, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, bool, arg3)) { glm::vec<2, bool> o3 = PyGLM_Vec_PTI_Get2(2, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(2, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u8, arg2)) { glm::vec<2, glm::u8> o = PyGLM_Vec_PTI_Get0(2, glm::u8, arg1); glm::vec<2, glm::u8> o2 = PyGLM_Vec_PTI_Get1(2, glm::u8, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(2, float, arg3)) { glm::vec<2, float> o3 = PyGLM_Vec_PTI_Get2(2, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, double, arg3)) { glm::vec<2, double> o3 = PyGLM_Vec_PTI_Get2(2, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, bool, arg3)) { glm::vec<2, bool> o3 = PyGLM_Vec_PTI_Get2(2, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(2, bool, arg1) && PyGLM_Vec_PTI_Check1(2, bool, arg2)) { glm::vec<2, bool> o = PyGLM_Vec_PTI_Get0(2, bool, arg1); glm::vec<2, bool> o2 = PyGLM_Vec_PTI_Get1(2, bool, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(2, float, arg3)) { glm::vec<2, float> o3 = PyGLM_Vec_PTI_Get2(2, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, double, arg3)) { glm::vec<2, double> o3 = PyGLM_Vec_PTI_Get2(2, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, bool, arg3)) { glm::vec<2, bool> o3 = PyGLM_Vec_PTI_Get2(2, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg1); glm::vec<3, float> o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::vec<3, float> o3 = PyGLM_Vec_PTI_Get2(3, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::vec<3, double> o3 = PyGLM_Vec_PTI_Get2(3, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, bool, arg3)) { glm::vec<3, bool> o3 = PyGLM_Vec_PTI_Get2(3, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg1); glm::vec<3, double> o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::vec<3, float> o3 = PyGLM_Vec_PTI_Get2(3, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::vec<3, double> o3 = PyGLM_Vec_PTI_Get2(3, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, bool, arg3)) { glm::vec<3, bool> o3 = PyGLM_Vec_PTI_Get2(3, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2)) { glm::vec<3, int> o = PyGLM_Vec_PTI_Get0(3, int, arg1); glm::vec<3, int> o2 = PyGLM_Vec_PTI_Get1(3, int, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::vec<3, float> o3 = PyGLM_Vec_PTI_Get2(3, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::vec<3, double> o3 = PyGLM_Vec_PTI_Get2(3, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, bool, arg3)) { glm::vec<3, bool> o3 = PyGLM_Vec_PTI_Get2(3, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(3, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(3, glm::uint, arg2)) { glm::vec<3, glm::uint> o = PyGLM_Vec_PTI_Get0(3, glm::uint, arg1); glm::vec<3, glm::uint> o2 = PyGLM_Vec_PTI_Get1(3, glm::uint, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::vec<3, float> o3 = PyGLM_Vec_PTI_Get2(3, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::vec<3, double> o3 = PyGLM_Vec_PTI_Get2(3, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, bool, arg3)) { glm::vec<3, bool> o3 = PyGLM_Vec_PTI_Get2(3, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(3, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i64, arg2)) { glm::vec<3, glm::i64> o = PyGLM_Vec_PTI_Get0(3, glm::i64, arg1); glm::vec<3, glm::i64> o2 = PyGLM_Vec_PTI_Get1(3, glm::i64, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::vec<3, float> o3 = PyGLM_Vec_PTI_Get2(3, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::vec<3, double> o3 = PyGLM_Vec_PTI_Get2(3, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, bool, arg3)) { glm::vec<3, bool> o3 = PyGLM_Vec_PTI_Get2(3, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(3, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u64, arg2)) { glm::vec<3, glm::u64> o = PyGLM_Vec_PTI_Get0(3, glm::u64, arg1); glm::vec<3, glm::u64> o2 = PyGLM_Vec_PTI_Get1(3, glm::u64, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::vec<3, float> o3 = PyGLM_Vec_PTI_Get2(3, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::vec<3, double> o3 = PyGLM_Vec_PTI_Get2(3, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, bool, arg3)) { glm::vec<3, bool> o3 = PyGLM_Vec_PTI_Get2(3, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(3, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i16, arg2)) { glm::vec<3, glm::i16> o = PyGLM_Vec_PTI_Get0(3, glm::i16, arg1); glm::vec<3, glm::i16> o2 = PyGLM_Vec_PTI_Get1(3, glm::i16, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::vec<3, float> o3 = PyGLM_Vec_PTI_Get2(3, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::vec<3, double> o3 = PyGLM_Vec_PTI_Get2(3, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, bool, arg3)) { glm::vec<3, bool> o3 = PyGLM_Vec_PTI_Get2(3, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(3, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u16, arg2)) { glm::vec<3, glm::u16> o = PyGLM_Vec_PTI_Get0(3, glm::u16, arg1); glm::vec<3, glm::u16> o2 = PyGLM_Vec_PTI_Get1(3, glm::u16, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::vec<3, float> o3 = PyGLM_Vec_PTI_Get2(3, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::vec<3, double> o3 = PyGLM_Vec_PTI_Get2(3, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, bool, arg3)) { glm::vec<3, bool> o3 = PyGLM_Vec_PTI_Get2(3, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(3, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i8, arg2)) { glm::vec<3, glm::i8> o = PyGLM_Vec_PTI_Get0(3, glm::i8, arg1); glm::vec<3, glm::i8> o2 = PyGLM_Vec_PTI_Get1(3, glm::i8, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::vec<3, float> o3 = PyGLM_Vec_PTI_Get2(3, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::vec<3, double> o3 = PyGLM_Vec_PTI_Get2(3, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, bool, arg3)) { glm::vec<3, bool> o3 = PyGLM_Vec_PTI_Get2(3, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(3, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u8, arg2)) { glm::vec<3, glm::u8> o = PyGLM_Vec_PTI_Get0(3, glm::u8, arg1); glm::vec<3, glm::u8> o2 = PyGLM_Vec_PTI_Get1(3, glm::u8, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::vec<3, float> o3 = PyGLM_Vec_PTI_Get2(3, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::vec<3, double> o3 = PyGLM_Vec_PTI_Get2(3, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, bool, arg3)) { glm::vec<3, bool> o3 = PyGLM_Vec_PTI_Get2(3, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(3, bool, arg1) && PyGLM_Vec_PTI_Check1(3, bool, arg2)) { glm::vec<3, bool> o = PyGLM_Vec_PTI_Get0(3, bool, arg1); glm::vec<3, bool> o2 = PyGLM_Vec_PTI_Get1(3, bool, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::vec<3, float> o3 = PyGLM_Vec_PTI_Get2(3, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::vec<3, double> o3 = PyGLM_Vec_PTI_Get2(3, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(3, bool, arg3)) { glm::vec<3, bool> o3 = PyGLM_Vec_PTI_Get2(3, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg1); glm::vec<4, float> o2 = PyGLM_Vec_PTI_Get1(4, float, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(4, float, arg3)) { glm::vec<4, float> o3 = PyGLM_Vec_PTI_Get2(4, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, double, arg3)) { glm::vec<4, double> o3 = PyGLM_Vec_PTI_Get2(4, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, bool, arg3)) { glm::vec<4, bool> o3 = PyGLM_Vec_PTI_Get2(4, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg1); glm::vec<4, double> o2 = PyGLM_Vec_PTI_Get1(4, double, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(4, float, arg3)) { glm::vec<4, float> o3 = PyGLM_Vec_PTI_Get2(4, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, double, arg3)) { glm::vec<4, double> o3 = PyGLM_Vec_PTI_Get2(4, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, bool, arg3)) { glm::vec<4, bool> o3 = PyGLM_Vec_PTI_Get2(4, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2)) { glm::vec<4, int> o = PyGLM_Vec_PTI_Get0(4, int, arg1); glm::vec<4, int> o2 = PyGLM_Vec_PTI_Get1(4, int, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(4, float, arg3)) { glm::vec<4, float> o3 = PyGLM_Vec_PTI_Get2(4, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, double, arg3)) { glm::vec<4, double> o3 = PyGLM_Vec_PTI_Get2(4, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, bool, arg3)) { glm::vec<4, bool> o3 = PyGLM_Vec_PTI_Get2(4, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(4, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(4, glm::uint, arg2)) { glm::vec<4, glm::uint> o = PyGLM_Vec_PTI_Get0(4, glm::uint, arg1); glm::vec<4, glm::uint> o2 = PyGLM_Vec_PTI_Get1(4, glm::uint, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(4, float, arg3)) { glm::vec<4, float> o3 = PyGLM_Vec_PTI_Get2(4, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, double, arg3)) { glm::vec<4, double> o3 = PyGLM_Vec_PTI_Get2(4, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, bool, arg3)) { glm::vec<4, bool> o3 = PyGLM_Vec_PTI_Get2(4, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(4, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i64, arg2)) { glm::vec<4, glm::i64> o = PyGLM_Vec_PTI_Get0(4, glm::i64, arg1); glm::vec<4, glm::i64> o2 = PyGLM_Vec_PTI_Get1(4, glm::i64, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(4, float, arg3)) { glm::vec<4, float> o3 = PyGLM_Vec_PTI_Get2(4, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, double, arg3)) { glm::vec<4, double> o3 = PyGLM_Vec_PTI_Get2(4, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, bool, arg3)) { glm::vec<4, bool> o3 = PyGLM_Vec_PTI_Get2(4, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(4, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u64, arg2)) { glm::vec<4, glm::u64> o = PyGLM_Vec_PTI_Get0(4, glm::u64, arg1); glm::vec<4, glm::u64> o2 = PyGLM_Vec_PTI_Get1(4, glm::u64, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(4, float, arg3)) { glm::vec<4, float> o3 = PyGLM_Vec_PTI_Get2(4, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, double, arg3)) { glm::vec<4, double> o3 = PyGLM_Vec_PTI_Get2(4, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, bool, arg3)) { glm::vec<4, bool> o3 = PyGLM_Vec_PTI_Get2(4, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(4, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i16, arg2)) { glm::vec<4, glm::i16> o = PyGLM_Vec_PTI_Get0(4, glm::i16, arg1); glm::vec<4, glm::i16> o2 = PyGLM_Vec_PTI_Get1(4, glm::i16, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(4, float, arg3)) { glm::vec<4, float> o3 = PyGLM_Vec_PTI_Get2(4, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, double, arg3)) { glm::vec<4, double> o3 = PyGLM_Vec_PTI_Get2(4, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, bool, arg3)) { glm::vec<4, bool> o3 = PyGLM_Vec_PTI_Get2(4, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(4, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u16, arg2)) { glm::vec<4, glm::u16> o = PyGLM_Vec_PTI_Get0(4, glm::u16, arg1); glm::vec<4, glm::u16> o2 = PyGLM_Vec_PTI_Get1(4, glm::u16, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(4, float, arg3)) { glm::vec<4, float> o3 = PyGLM_Vec_PTI_Get2(4, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, double, arg3)) { glm::vec<4, double> o3 = PyGLM_Vec_PTI_Get2(4, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, bool, arg3)) { glm::vec<4, bool> o3 = PyGLM_Vec_PTI_Get2(4, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(4, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i8, arg2)) { glm::vec<4, glm::i8> o = PyGLM_Vec_PTI_Get0(4, glm::i8, arg1); glm::vec<4, glm::i8> o2 = PyGLM_Vec_PTI_Get1(4, glm::i8, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(4, float, arg3)) { glm::vec<4, float> o3 = PyGLM_Vec_PTI_Get2(4, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, double, arg3)) { glm::vec<4, double> o3 = PyGLM_Vec_PTI_Get2(4, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, bool, arg3)) { glm::vec<4, bool> o3 = PyGLM_Vec_PTI_Get2(4, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(4, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u8, arg2)) { glm::vec<4, glm::u8> o = PyGLM_Vec_PTI_Get0(4, glm::u8, arg1); glm::vec<4, glm::u8> o2 = PyGLM_Vec_PTI_Get1(4, glm::u8, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(4, float, arg3)) { glm::vec<4, float> o3 = PyGLM_Vec_PTI_Get2(4, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, double, arg3)) { glm::vec<4, double> o3 = PyGLM_Vec_PTI_Get2(4, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, bool, arg3)) { glm::vec<4, bool> o3 = PyGLM_Vec_PTI_Get2(4, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check0(4, bool, arg1) && PyGLM_Vec_PTI_Check1(4, bool, arg2)) { glm::vec<4, bool> o = PyGLM_Vec_PTI_Get0(4, bool, arg1); glm::vec<4, bool> o2 = PyGLM_Vec_PTI_Get1(4, bool, arg2); if (PyGLM_Number_Check(arg3)) { return pack_vec(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FD | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check2(4, float, arg3)) { glm::vec<4, float> o3 = PyGLM_Vec_PTI_Get2(4, float, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, double, arg3)) { glm::vec<4, double> o3 = PyGLM_Vec_PTI_Get2(4, double, arg3); return pack_vec(glm::mix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(4, bool, arg3)) { glm::vec<4, bool> o3 = PyGLM_Vec_PTI_Get2(4, bool, arg3); return pack_vec(glm::mix(o, o2, o3)); } } if (PyGLM_Mat_PTI_Check0(2, 2, float, arg1) && PyGLM_Mat_PTI_Check1(2, 2, float, arg2)) { glm::mat<2, 2, float> o = PyGLM_Mat_PTI_Get0(2, 2, float, arg1); glm::mat<2, 2, float> o2 = PyGLM_Mat_PTI_Get1(2, 2, float, arg2); if (PyGLM_Number_Check(arg3)) { return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_MAT | PyGLM_SHAPE_2x2 | PyGLM_DT_FD); if (PyGLM_Mat_PTI_Check2(2, 2, float, arg3)) { glm::mat<2, 2, float> o3 = PyGLM_Mat_PTI_Get2(2, 2, float, arg3); return pack(glm::mix(o, o2, o3)); } if (PyGLM_Mat_PTI_Check2(2, 2, double, arg3)) { glm::mat<2, 2, double> o3 = PyGLM_Mat_PTI_Get2(2, 2, double, arg3); return pack(glm::mix(o, o2, o3)); } } if (PyGLM_Mat_PTI_Check0(2, 2, double, arg1) && PyGLM_Mat_PTI_Check1(2, 2, double, arg2)) { glm::mat<2, 2, double> o = PyGLM_Mat_PTI_Get0(2, 2, double, arg1); glm::mat<2, 2, double> o2 = PyGLM_Mat_PTI_Get1(2, 2, double, arg2); if (PyGLM_Number_Check(arg3)) { return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_MAT | PyGLM_SHAPE_2x2 | PyGLM_DT_FD); if (PyGLM_Mat_PTI_Check2(2, 2, float, arg3)) { glm::mat<2, 2, float> o3 = PyGLM_Mat_PTI_Get2(2, 2, float, arg3); return pack(glm::mix(o, o2, o3)); } if (PyGLM_Mat_PTI_Check2(2, 2, double, arg3)) { glm::mat<2, 2, double> o3 = PyGLM_Mat_PTI_Get2(2, 2, double, arg3); return pack(glm::mix(o, o2, o3)); } } if (PyGLM_Mat_PTI_Check0(2, 2, int, arg1) && PyGLM_Mat_PTI_Check1(2, 2, int, arg2)) { glm::mat<2, 2, int> o = PyGLM_Mat_PTI_Get0(2, 2, int, arg1); glm::mat<2, 2, int> o2 = PyGLM_Mat_PTI_Get1(2, 2, int, arg2); if (PyGLM_Number_Check(arg3)) { return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_MAT | PyGLM_SHAPE_2x2 | PyGLM_DT_FD); if (PyGLM_Mat_PTI_Check2(2, 2, float, arg3)) { glm::mat<2, 2, float> o3 = PyGLM_Mat_PTI_Get2(2, 2, float, arg3); return pack(glm::mix(o, o2, o3)); } if (PyGLM_Mat_PTI_Check2(2, 2, double, arg3)) { glm::mat<2, 2, double> o3 = PyGLM_Mat_PTI_Get2(2, 2, double, arg3); return pack(glm::mix(o, o2, o3)); } } if (PyGLM_Mat_PTI_Check0(2, 2, glm::uint, arg1) && PyGLM_Mat_PTI_Check1(2, 2, glm::uint, arg2)) { glm::mat<2, 2, glm::uint> o = PyGLM_Mat_PTI_Get0(2, 2, glm::uint, arg1); glm::mat<2, 2, glm::uint> o2 = PyGLM_Mat_PTI_Get1(2, 2, glm::uint, arg2); if (PyGLM_Number_Check(arg3)) { return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_MAT | PyGLM_SHAPE_2x2 | PyGLM_DT_FD); if (PyGLM_Mat_PTI_Check2(2, 2, float, arg3)) { glm::mat<2, 2, float> o3 = PyGLM_Mat_PTI_Get2(2, 2, float, arg3); return pack(glm::mix(o, o2, o3)); } if (PyGLM_Mat_PTI_Check2(2, 2, double, arg3)) { glm::mat<2, 2, double> o3 = PyGLM_Mat_PTI_Get2(2, 2, double, arg3); return pack(glm::mix(o, o2, o3)); } } //if (PyGLM_Mat_PTI_Check0(2, 3, float, arg1) && PyGLM_Mat_PTI_Check0(2, 3, float, arg2)) { // glm::mat<2, 3, float> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(2, 3, float, arg3)) { // glm::mat<2, 3, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(2, 3, double, arg3)) { // glm::mat<2, 3, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(2, 3, double, arg1) && PyGLM_Mat_PTI_Check0(2, 3, double, arg2)) { // glm::mat<2, 3, double> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(2, 3, float, arg3)) { // glm::mat<2, 3, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(2, 3, double, arg3)) { // glm::mat<2, 3, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(2, 3, int, arg1) && PyGLM_Mat_PTI_Check0(2, 3, int, arg2)) { // glm::mat<2, 3, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(2, 3, float, arg3)) { // glm::mat<2, 3, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(2, 3, double, arg3)) { // glm::mat<2, 3, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(2, 3, glm::uint, arg1) && PyGLM_Mat_PTI_Check0(2, 3, glm::uint, arg2)) { // glm::mat<2, 3, glm::uint> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(2, 3, float, arg3)) { // glm::mat<2, 3, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(2, 3, double, arg3)) { // glm::mat<2, 3, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(2, 4, float, arg1) && PyGLM_Mat_PTI_Check0(2, 4, float, arg2)) { // glm::mat<2, 4, float> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(2, 4, float, arg3)) { // glm::mat<2, 4, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(2, 4, double, arg3)) { // glm::mat<2, 4, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(2, 4, double, arg1) && PyGLM_Mat_PTI_Check0(2, 4, double, arg2)) { // glm::mat<2, 4, double> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(2, 4, float, arg3)) { // glm::mat<2, 4, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(2, 4, double, arg3)) { // glm::mat<2, 4, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(2, 4, int, arg1) && PyGLM_Mat_PTI_Check0(2, 4, int, arg2)) { // glm::mat<2, 4, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(2, 4, float, arg3)) { // glm::mat<2, 4, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(2, 4, double, arg3)) { // glm::mat<2, 4, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(2, 4, glm::uint, arg1) && PyGLM_Mat_PTI_Check0(2, 4, glm::uint, arg2)) { // glm::mat<2, 4, glm::uint> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(2, 4, float, arg3)) { // glm::mat<2, 4, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(2, 4, double, arg3)) { // glm::mat<2, 4, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(3, 2, float, arg1) && PyGLM_Mat_PTI_Check0(3, 2, float, arg2)) { // glm::mat<3, 2, float> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(3, 2, float, arg3)) { // glm::mat<3, 2, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(3, 2, double, arg3)) { // glm::mat<3, 2, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(3, 2, double, arg1) && PyGLM_Mat_PTI_Check0(3, 2, double, arg2)) { // glm::mat<3, 2, double> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(3, 2, float, arg3)) { // glm::mat<3, 2, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(3, 2, double, arg3)) { // glm::mat<3, 2, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(3, 2, int, arg1) && PyGLM_Mat_PTI_Check0(3, 2, int, arg2)) { // glm::mat<3, 2, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(3, 2, float, arg3)) { // glm::mat<3, 2, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(3, 2, double, arg3)) { // glm::mat<3, 2, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(3, 2, glm::uint, arg1) && PyGLM_Mat_PTI_Check0(3, 2, glm::uint, arg2)) { // glm::mat<3, 2, glm::uint> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(3, 2, float, arg3)) { // glm::mat<3, 2, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(3, 2, double, arg3)) { // glm::mat<3, 2, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} if (PyGLM_Mat_PTI_Check0(3, 3, float, arg1) && PyGLM_Mat_PTI_Check1(3, 3, float, arg2)) { glm::mat<3, 3, float> o = PyGLM_Mat_PTI_Get0(3, 3, float, arg1); glm::mat<3, 3, float> o2 = PyGLM_Mat_PTI_Get1(3, 3, float, arg2); if (PyGLM_Number_Check(arg3)) { return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_MAT | PyGLM_SHAPE_3x3 | PyGLM_DT_FD); if (PyGLM_Mat_PTI_Check2(3, 3, float, arg3)) { glm::mat<3, 3, float> o3 = PyGLM_Mat_PTI_Get2(3, 3, float, arg3); return pack(glm::mix(o, o2, o3)); } if (PyGLM_Mat_PTI_Check2(3, 3, double, arg3)) { glm::mat<3, 3, double> o3 = PyGLM_Mat_PTI_Get2(3, 3, double, arg3); return pack(glm::mix(o, o2, o3)); } } if (PyGLM_Mat_PTI_Check0(3, 3, double, arg1) && PyGLM_Mat_PTI_Check1(3, 3, double, arg2)) { glm::mat<3, 3, double> o = PyGLM_Mat_PTI_Get0(3, 3, double, arg1); glm::mat<3, 3, double> o2 = PyGLM_Mat_PTI_Get1(3, 3, double, arg2); if (PyGLM_Number_Check(arg3)) { return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_MAT | PyGLM_SHAPE_3x3 | PyGLM_DT_FD); if (PyGLM_Mat_PTI_Check2(3, 3, float, arg3)) { glm::mat<3, 3, float> o3 = PyGLM_Mat_PTI_Get2(3, 3, float, arg3); return pack(glm::mix(o, o2, o3)); } if (PyGLM_Mat_PTI_Check2(3, 3, double, arg3)) { glm::mat<3, 3, double> o3 = PyGLM_Mat_PTI_Get2(3, 3, double, arg3); return pack(glm::mix(o, o2, o3)); } } if (PyGLM_Mat_PTI_Check0(3, 3, int, arg1) && PyGLM_Mat_PTI_Check1(3, 3, int, arg2)) { glm::mat<3, 3, int> o = PyGLM_Mat_PTI_Get0(3, 3, int, arg1); glm::mat<3, 3, int> o2 = PyGLM_Mat_PTI_Get1(3, 3, int, arg2); if (PyGLM_Number_Check(arg3)) { return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_MAT | PyGLM_SHAPE_3x3 | PyGLM_DT_FD); if (PyGLM_Mat_PTI_Check2(3, 3, float, arg3)) { glm::mat<3, 3, float> o3 = PyGLM_Mat_PTI_Get2(3, 3, float, arg3); return pack(glm::mix(o, o2, o3)); } if (PyGLM_Mat_PTI_Check2(3, 3, double, arg3)) { glm::mat<3, 3, double> o3 = PyGLM_Mat_PTI_Get2(3, 3, double, arg3); return pack(glm::mix(o, o2, o3)); } } if (PyGLM_Mat_PTI_Check0(3, 3, glm::uint, arg1) && PyGLM_Mat_PTI_Check1(3, 3, glm::uint, arg2)) { glm::mat<3, 3, glm::uint> o = PyGLM_Mat_PTI_Get0(3, 3, glm::uint, arg1); glm::mat<3, 3, glm::uint> o2 = PyGLM_Mat_PTI_Get1(3, 3, glm::uint, arg2); if (PyGLM_Number_Check(arg3)) { return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_MAT | PyGLM_SHAPE_3x3 | PyGLM_DT_FD); if (PyGLM_Mat_PTI_Check2(3, 3, float, arg3)) { glm::mat<3, 3, float> o3 = PyGLM_Mat_PTI_Get2(3, 3, float, arg3); return pack(glm::mix(o, o2, o3)); } if (PyGLM_Mat_PTI_Check2(3, 3, double, arg3)) { glm::mat<3, 3, double> o3 = PyGLM_Mat_PTI_Get2(3, 3, double, arg3); return pack(glm::mix(o, o2, o3)); } } //if (PyGLM_Mat_PTI_Check0(3, 4, float, arg1) && PyGLM_Mat_PTI_Check0(3, 4, float, arg2)) { // glm::mat<3, 4, float> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(3, 4, float, arg3)) { // glm::mat<3, 4, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(3, 4, double, arg3)) { // glm::mat<3, 4, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(3, 4, double, arg1) && PyGLM_Mat_PTI_Check0(3, 4, double, arg2)) { // glm::mat<3, 4, double> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(3, 4, float, arg3)) { // glm::mat<3, 4, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(3, 4, double, arg3)) { // glm::mat<3, 4, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(3, 4, int, arg1) && PyGLM_Mat_PTI_Check0(3, 4, int, arg2)) { // glm::mat<3, 4, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(3, 4, float, arg3)) { // glm::mat<3, 4, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(3, 4, double, arg3)) { // glm::mat<3, 4, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(3, 4, glm::uint, arg1) && PyGLM_Mat_PTI_Check0(3, 4, glm::uint, arg2)) { // glm::mat<3, 4, glm::uint> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(3, 4, float, arg3)) { // glm::mat<3, 4, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(3, 4, double, arg3)) { // glm::mat<3, 4, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(4, 2, float, arg1) && PyGLM_Mat_PTI_Check0(4, 2, float, arg2)) { // glm::mat<4, 2, float> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(4, 2, float, arg3)) { // glm::mat<4, 2, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(4, 2, double, arg3)) { // glm::mat<4, 2, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(4, 2, double, arg1) && PyGLM_Mat_PTI_Check0(4, 2, double, arg2)) { // glm::mat<4, 2, double> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(4, 2, float, arg3)) { // glm::mat<4, 2, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(4, 2, double, arg3)) { // glm::mat<4, 2, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(4, 2, int, arg1) && PyGLM_Mat_PTI_Check0(4, 2, int, arg2)) { // glm::mat<4, 2, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(4, 2, float, arg3)) { // glm::mat<4, 2, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(4, 2, double, arg3)) { // glm::mat<4, 2, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(4, 2, glm::uint, arg1) && PyGLM_Mat_PTI_Check0(4, 2, glm::uint, arg2)) { // glm::mat<4, 2, glm::uint> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(4, 2, float, arg3)) { // glm::mat<4, 2, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(4, 2, double, arg3)) { // glm::mat<4, 2, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(4, 3, float, arg1) && PyGLM_Mat_PTI_Check0(4, 3, float, arg2)) { // glm::mat<4, 3, float> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(4, 3, float, arg3)) { // glm::mat<4, 3, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(4, 3, double, arg3)) { // glm::mat<4, 3, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(4, 3, double, arg1) && PyGLM_Mat_PTI_Check0(4, 3, double, arg2)) { // glm::mat<4, 3, double> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(4, 3, float, arg3)) { // glm::mat<4, 3, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(4, 3, double, arg3)) { // glm::mat<4, 3, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(4, 3, int, arg1) && PyGLM_Mat_PTI_Check0(4, 3, int, arg2)) { // glm::mat<4, 3, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(4, 3, float, arg3)) { // glm::mat<4, 3, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(4, 3, double, arg3)) { // glm::mat<4, 3, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} //if (PyGLM_Mat_PTI_Check0(4, 3, glm::uint, arg1) && PyGLM_Mat_PTI_Check0(4, 3, glm::uint, arg2)) { // glm::mat<4, 3, glm::uint> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // if (PyGLM_Number_Check(arg3)) { // return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); // } // if (PyGLM_Mat_PTI_Check0(4, 3, float, arg3)) { // glm::mat<4, 3, float> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } // if (PyGLM_Mat_PTI_Check0(4, 3, double, arg3)) { // glm::mat<4, 3, double> o3; // unpack_mat(arg3, o3); // return pack(glm::mix(o, o2, o3)); // } //} if (PyGLM_Mat_PTI_Check0(4, 4, float, arg1) && PyGLM_Mat_PTI_Check1(4, 4, float, arg2)) { glm::mat<4, 4, float> o = PyGLM_Mat_PTI_Get0(4, 4, float, arg1); glm::mat<4, 4, float> o2 = PyGLM_Mat_PTI_Get1(4, 4, float, arg2); if (PyGLM_Number_Check(arg3)) { return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_MAT | PyGLM_SHAPE_4x4 | PyGLM_DT_FD); if (PyGLM_Mat_PTI_Check2(4, 4, float, arg3)) { glm::mat<4, 4, float> o3 = PyGLM_Mat_PTI_Get2(4, 4, float, arg3); return pack(glm::mix(o, o2, o3)); } if (PyGLM_Mat_PTI_Check2(4, 4, double, arg3)) { glm::mat<4, 4, double> o3 = PyGLM_Mat_PTI_Get2(4, 4, double, arg3); return pack(glm::mix(o, o2, o3)); } } if (PyGLM_Mat_PTI_Check0(4, 4, double, arg1) && PyGLM_Mat_PTI_Check1(4, 4, double, arg2)) { glm::mat<4, 4, double> o = PyGLM_Mat_PTI_Get0(4, 4, double, arg1); glm::mat<4, 4, double> o2 = PyGLM_Mat_PTI_Get1(4, 4, double, arg2); if (PyGLM_Number_Check(arg3)) { return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_MAT | PyGLM_SHAPE_4x4 | PyGLM_DT_FD); if (PyGLM_Mat_PTI_Check2(4, 4, float, arg3)) { glm::mat<4, 4, float> o3 = PyGLM_Mat_PTI_Get2(4, 4, float, arg3); return pack(glm::mix(o, o2, o3)); } if (PyGLM_Mat_PTI_Check2(4, 4, double, arg3)) { glm::mat<4, 4, double> o3 = PyGLM_Mat_PTI_Get2(4, 4, double, arg3); return pack(glm::mix(o, o2, o3)); } } if (PyGLM_Mat_PTI_Check0(4, 4, int, arg1) && PyGLM_Mat_PTI_Check1(4, 4, int, arg2)) { glm::mat<4, 4, int> o = PyGLM_Mat_PTI_Get0(4, 4, int, arg1); glm::mat<4, 4, int> o2 = PyGLM_Mat_PTI_Get1(4, 4, int, arg2); if (PyGLM_Number_Check(arg3)) { return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_MAT | PyGLM_SHAPE_4x4 | PyGLM_DT_FD); if (PyGLM_Mat_PTI_Check2(4, 4, float, arg3)) { glm::mat<4, 4, float> o3 = PyGLM_Mat_PTI_Get2(4, 4, float, arg3); return pack(glm::mix(o, o2, o3)); } if (PyGLM_Mat_PTI_Check2(4, 4, double, arg3)) { glm::mat<4, 4, double> o3 = PyGLM_Mat_PTI_Get2(4, 4, double, arg3); return pack(glm::mix(o, o2, o3)); } } if (PyGLM_Mat_PTI_Check0(4, 4, glm::uint, arg1) && PyGLM_Mat_PTI_Check1(4, 4, glm::uint, arg2)) { glm::mat<4, 4, glm::uint> o = PyGLM_Mat_PTI_Get0(4, 4, glm::uint, arg1); glm::mat<4, 4, glm::uint> o2 = PyGLM_Mat_PTI_Get1(4, 4, glm::uint, arg2); if (PyGLM_Number_Check(arg3)) { return pack(glm::mix(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_MAT | PyGLM_SHAPE_4x4 | PyGLM_DT_FD); if (PyGLM_Mat_PTI_Check2(4, 4, float, arg3)) { glm::mat<4, 4, float> o3 = PyGLM_Mat_PTI_Get2(4, 4, float, arg3); return pack(glm::mix(o, o2, o3)); } if (PyGLM_Mat_PTI_Check2(4, 4, double, arg3)) { glm::mat<4, 4, double> o3 = PyGLM_Mat_PTI_Get2(4, 4, double, arg3); return pack(glm::mix(o, o2, o3)); } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mix()"); return NULL; } PyDoc_STRVAR(step_docstr, "step(edge: number, x: number) -> float\n" " Returns `0.0` if `x < edge`, otherwise it returns `1.0`.\n" "step(edge: number, x: vecN) -> vecN\n" " For every component `c` of `x`:\n" " Returns `0.0` if `c < edge`, otherwise it returns `1.0`.\n" "step(edge: vecN, x: vecN) -> vecN\n" " For every index `i`:\n" " Returns `0.0` if `x[i] < edge[i]`, otherwise it returns `1.0`." ); static PyObject* step_(PyObject*, PyObject* args) { PyObject *arg1, *arg2; PyGLM_Arg_Unpack_2O(args, "step", arg1, arg2); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { return PyGLM_PyObject_FromNumber(glm::step(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_ALL); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_ALL); if (PyGLM_Vec_PTI_Check1(1, float, arg2)) { glm::vec<1, float> o2 = PyGLM_Vec_PTI_Get1(1, float, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(1, float, arg1)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(1, double, arg2)) { glm::vec<1, double> o2 = PyGLM_Vec_PTI_Get1(1, double, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(1, double, arg1)) { glm::vec<1, double> o = PyGLM_Vec_PTI_Get0(1, double, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(1, int, arg2)) { glm::vec<1, int> o2 = PyGLM_Vec_PTI_Get1(1, int, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(1, int, arg1)) { glm::vec<1, int> o = PyGLM_Vec_PTI_Get0(1, int, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(1, glm::uint, arg2)) { glm::vec<1, glm::uint> o2 = PyGLM_Vec_PTI_Get1(1, glm::uint, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(1, glm::uint, arg1)) { glm::vec<1, glm::uint> o = PyGLM_Vec_PTI_Get0(1, glm::uint, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(1, glm::i64, arg2)) { glm::vec<1, glm::i64> o2 = PyGLM_Vec_PTI_Get1(1, glm::i64, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(1, glm::i64, arg1)) { glm::vec<1, glm::i64> o = PyGLM_Vec_PTI_Get0(1, glm::i64, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(1, glm::u64, arg2)) { glm::vec<1, glm::u64> o2 = PyGLM_Vec_PTI_Get1(1, glm::u64, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(1, glm::u64, arg1)) { glm::vec<1, glm::u64> o = PyGLM_Vec_PTI_Get0(1, glm::u64, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(1, glm::i16, arg2)) { glm::vec<1, glm::i16> o2 = PyGLM_Vec_PTI_Get1(1, glm::i16, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(1, glm::i16, arg1)) { glm::vec<1, glm::i16> o = PyGLM_Vec_PTI_Get0(1, glm::i16, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(1, glm::u16, arg2)) { glm::vec<1, glm::u16> o2 = PyGLM_Vec_PTI_Get1(1, glm::u16, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(1, glm::u16, arg1)) { glm::vec<1, glm::u16> o = PyGLM_Vec_PTI_Get0(1, glm::u16, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(1, glm::i8, arg2)) { glm::vec<1, glm::i8> o2 = PyGLM_Vec_PTI_Get1(1, glm::i8, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(1, glm::i8, arg1)) { glm::vec<1, glm::i8> o = PyGLM_Vec_PTI_Get0(1, glm::i8, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(1, glm::u8, arg2)) { glm::vec<1, glm::u8> o2 = PyGLM_Vec_PTI_Get1(1, glm::u8, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(1, glm::u8, arg1)) { glm::vec<1, glm::u8> o = PyGLM_Vec_PTI_Get0(1, glm::u8, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(1, bool, arg2)) { glm::vec<1, bool> o2 = PyGLM_Vec_PTI_Get1(1, bool, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(1, bool, arg1)) { glm::vec<1, bool> o = PyGLM_Vec_PTI_Get0(1, bool, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(2, float, arg2)) { glm::vec<2, float> o2 = PyGLM_Vec_PTI_Get1(2, float, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(2, float, arg1)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(2, double, arg2)) { glm::vec<2, double> o2 = PyGLM_Vec_PTI_Get1(2, double, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(2, int, arg2)) { glm::vec<2, int> o2 = PyGLM_Vec_PTI_Get1(2, int, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(2, int, arg1)) { glm::vec<2, int> o = PyGLM_Vec_PTI_Get0(2, int, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(2, glm::uint, arg2)) { glm::vec<2, glm::uint> o2 = PyGLM_Vec_PTI_Get1(2, glm::uint, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(2, glm::uint, arg1)) { glm::vec<2, glm::uint> o = PyGLM_Vec_PTI_Get0(2, glm::uint, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(2, glm::i64, arg2)) { glm::vec<2, glm::i64> o2 = PyGLM_Vec_PTI_Get1(2, glm::i64, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(2, glm::i64, arg1)) { glm::vec<2, glm::i64> o = PyGLM_Vec_PTI_Get0(2, glm::i64, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(2, glm::u64, arg2)) { glm::vec<2, glm::u64> o2 = PyGLM_Vec_PTI_Get1(2, glm::u64, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(2, glm::u64, arg1)) { glm::vec<2, glm::u64> o = PyGLM_Vec_PTI_Get0(2, glm::u64, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(2, glm::i16, arg2)) { glm::vec<2, glm::i16> o2 = PyGLM_Vec_PTI_Get1(2, glm::i16, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(2, glm::i16, arg1)) { glm::vec<2, glm::i16> o = PyGLM_Vec_PTI_Get0(2, glm::i16, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(2, glm::u16, arg2)) { glm::vec<2, glm::u16> o2 = PyGLM_Vec_PTI_Get1(2, glm::u16, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(2, glm::u16, arg1)) { glm::vec<2, glm::u16> o = PyGLM_Vec_PTI_Get0(2, glm::u16, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(2, glm::i8, arg2)) { glm::vec<2, glm::i8> o2 = PyGLM_Vec_PTI_Get1(2, glm::i8, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(2, glm::i8, arg1)) { glm::vec<2, glm::i8> o = PyGLM_Vec_PTI_Get0(2, glm::i8, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(2, glm::u8, arg2)) { glm::vec<2, glm::u8> o2 = PyGLM_Vec_PTI_Get1(2, glm::u8, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(2, glm::u8, arg1)) { glm::vec<2, glm::u8> o = PyGLM_Vec_PTI_Get0(2, glm::u8, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(2, bool, arg2)) { glm::vec<2, bool> o2 = PyGLM_Vec_PTI_Get1(2, bool, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(2, bool, arg1)) { glm::vec<2, bool> o = PyGLM_Vec_PTI_Get0(2, bool, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(3, float, arg2)) { glm::vec<3, float> o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(3, double, arg2)) { glm::vec<3, double> o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(3, int, arg2)) { glm::vec<3, int> o2 = PyGLM_Vec_PTI_Get1(3, int, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(3, int, arg1)) { glm::vec<3, int> o = PyGLM_Vec_PTI_Get0(3, int, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(3, glm::uint, arg2)) { glm::vec<3, glm::uint> o2 = PyGLM_Vec_PTI_Get1(3, glm::uint, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(3, glm::uint, arg1)) { glm::vec<3, glm::uint> o = PyGLM_Vec_PTI_Get0(3, glm::uint, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(3, glm::i64, arg2)) { glm::vec<3, glm::i64> o2 = PyGLM_Vec_PTI_Get1(3, glm::i64, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(3, glm::i64, arg1)) { glm::vec<3, glm::i64> o = PyGLM_Vec_PTI_Get0(3, glm::i64, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(3, glm::u64, arg2)) { glm::vec<3, glm::u64> o2 = PyGLM_Vec_PTI_Get1(3, glm::u64, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(3, glm::u64, arg1)) { glm::vec<3, glm::u64> o = PyGLM_Vec_PTI_Get0(3, glm::u64, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(3, glm::i16, arg2)) { glm::vec<3, glm::i16> o2 = PyGLM_Vec_PTI_Get1(3, glm::i16, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(3, glm::i16, arg1)) { glm::vec<3, glm::i16> o = PyGLM_Vec_PTI_Get0(3, glm::i16, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(3, glm::u16, arg2)) { glm::vec<3, glm::u16> o2 = PyGLM_Vec_PTI_Get1(3, glm::u16, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(3, glm::u16, arg1)) { glm::vec<3, glm::u16> o = PyGLM_Vec_PTI_Get0(3, glm::u16, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(3, glm::i8, arg2)) { glm::vec<3, glm::i8> o2 = PyGLM_Vec_PTI_Get1(3, glm::i8, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(3, glm::i8, arg1)) { glm::vec<3, glm::i8> o = PyGLM_Vec_PTI_Get0(3, glm::i8, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(3, glm::u8, arg2)) { glm::vec<3, glm::u8> o2 = PyGLM_Vec_PTI_Get1(3, glm::u8, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(3, glm::u8, arg1)) { glm::vec<3, glm::u8> o = PyGLM_Vec_PTI_Get0(3, glm::u8, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(3, bool, arg2)) { glm::vec<3, bool> o2 = PyGLM_Vec_PTI_Get1(3, bool, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(3, bool, arg1)) { glm::vec<3, bool> o = PyGLM_Vec_PTI_Get0(3, bool, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(4, float, arg2)) { glm::vec<4, float> o2 = PyGLM_Vec_PTI_Get1(4, float, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(4, double, arg2)) { glm::vec<4, double> o2 = PyGLM_Vec_PTI_Get1(4, double, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(4, int, arg2)) { glm::vec<4, int> o2 = PyGLM_Vec_PTI_Get1(4, int, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(4, int, arg1)) { glm::vec<4, int> o = PyGLM_Vec_PTI_Get0(4, int, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(4, glm::uint, arg2)) { glm::vec<4, glm::uint> o2 = PyGLM_Vec_PTI_Get1(4, glm::uint, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(4, glm::uint, arg1)) { glm::vec<4, glm::uint> o = PyGLM_Vec_PTI_Get0(4, glm::uint, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(4, glm::i64, arg2)) { glm::vec<4, glm::i64> o2 = PyGLM_Vec_PTI_Get1(4, glm::i64, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(4, glm::i64, arg1)) { glm::vec<4, glm::i64> o = PyGLM_Vec_PTI_Get0(4, glm::i64, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(4, glm::u64, arg2)) { glm::vec<4, glm::u64> o2 = PyGLM_Vec_PTI_Get1(4, glm::u64, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(4, glm::u64, arg1)) { glm::vec<4, glm::u64> o = PyGLM_Vec_PTI_Get0(4, glm::u64, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(4, glm::i16, arg2)) { glm::vec<4, glm::i16> o2 = PyGLM_Vec_PTI_Get1(4, glm::i16, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(4, glm::i16, arg1)) { glm::vec<4, glm::i16> o = PyGLM_Vec_PTI_Get0(4, glm::i16, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(4, glm::u16, arg2)) { glm::vec<4, glm::u16> o2 = PyGLM_Vec_PTI_Get1(4, glm::u16, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(4, glm::u16, arg1)) { glm::vec<4, glm::u16> o = PyGLM_Vec_PTI_Get0(4, glm::u16, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(4, glm::i8, arg2)) { glm::vec<4, glm::i8> o2 = PyGLM_Vec_PTI_Get1(4, glm::i8, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(4, glm::i8, arg1)) { glm::vec<4, glm::i8> o = PyGLM_Vec_PTI_Get0(4, glm::i8, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(4, glm::u8, arg2)) { glm::vec<4, glm::u8> o2 = PyGLM_Vec_PTI_Get1(4, glm::u8, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(4, glm::u8, arg1)) { glm::vec<4, glm::u8> o = PyGLM_Vec_PTI_Get0(4, glm::u8, arg1); return pack_vec(glm::step(o, o2)); } } if (PyGLM_Vec_PTI_Check1(4, bool, arg2)) { glm::vec<4, bool> o2 = PyGLM_Vec_PTI_Get1(4, bool, arg2); if (PyGLM_Number_Check(arg1)) { return pack_vec(glm::step(PyGLM_Number_FromPyObject(arg1), o2)); } if (PyGLM_Vec_PTI_Check0(4, bool, arg1)) { glm::vec<4, bool> o = PyGLM_Vec_PTI_Get0(4, bool, arg1); return pack_vec(glm::step(o, o2)); } } PyGLM_TYPEERROR_2O("invalid argument type(s) for step(): ", arg1, arg2); return NULL; } PyDoc_STRVAR(smoothstep_docstr, "smoothstep(edge0: number, edge1: number, x: number) -> float\n" " Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation\n" " between `0` and `1` when `edge0 < x < edge1`. This is useful in cases where you would want a\n" " threshold function with a smooth transition. This is equivalent to :\n" " `t = clamp((x - edge0) / (edge1 - edge0), 0, 1)`\n" " `return t * t * (3 - 2 * t)`\n" " Results are undefined if `edge0 >= edge1`.\n" "smoothstep(edge0: number, edge1: number, x: vecN) -> vecN\n" " Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation\n" " between `0` and `1` when `edge0 < x < edge1`. This is useful in cases where you would want a\n" " threshold function with a smooth transition. This is equivalent to :\n" " `t = clamp((x - edge0) / (edge1 - edge0), 0, 1)`\n" " `return t * t * (3 - 2 * t)`\n" " Results are undefined if `edge0 >= edge1`.\n" "smoothstep(edge0: vecN, edge1: vecN, x: vecN) -> vecN\n" " Returns `0.0` if `x <= edge0` and `1.0` if `x >= edge1` and performs smooth Hermite interpolation\n" " between `0` and `1` when `edge0 < x < edge1`. This is useful in cases where you would want a\n" " threshold function with a smooth transition. This is equivalent to :\n" " `t = clamp((x - edge0) / (edge1 - edge0), 0, 1)`\n" " `return t * t * (3 - 2 * t)`\n" " Results are undefined if `edge0 >= edge1`." ); static PyObject* smoothstep_(PyObject*, PyObject* args) { PyObject *arg1, *arg2, *arg3; PyGLM_Arg_Unpack_3O(args, "smoothstep", arg1, arg2, arg3); if (PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { return PyGLM_PyObject_FromNumber(glm::smoothstep(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check2(1, float, arg3)) { glm::vec<1, float> o3 = PyGLM_Vec_PTI_Get2(1, float, arg3); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { return pack_vec(glm::smoothstep(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), o3)); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_FLOAT); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg1); glm::vec<1, float> o2 = PyGLM_Vec_PTI_Get1(1, float, arg2); return pack_vec(glm::smoothstep(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check2(1, double, arg3)) { glm::vec<1, double> o3 = PyGLM_Vec_PTI_Get2(1, double, arg3); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { return pack_vec(glm::smoothstep(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), o3)); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_DOUBLE); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_DOUBLE); if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) { glm::vec<1, double> o = PyGLM_Vec_PTI_Get0(1, double, arg1); glm::vec<1, double> o2 = PyGLM_Vec_PTI_Get1(1, double, arg2); return pack_vec(glm::smoothstep(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check2(2, float, arg3)) { glm::vec<2, float> o3 = PyGLM_Vec_PTI_Get2(2, float, arg3); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { return pack_vec(glm::smoothstep(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), o3)); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FLOAT); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg1); glm::vec<2, float> o2 = PyGLM_Vec_PTI_Get1(2, float, arg2); return pack_vec(glm::smoothstep(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check2(2, double, arg3)) { glm::vec<2, double> o3 = PyGLM_Vec_PTI_Get2(2, double, arg3); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { return pack_vec(glm::smoothstep(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), o3)); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_DOUBLE); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_DOUBLE); if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg1); glm::vec<2, double> o2 = PyGLM_Vec_PTI_Get1(2, double, arg2); return pack_vec(glm::smoothstep(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::vec<3, float> o3 = PyGLM_Vec_PTI_Get2(3, float, arg3); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { return pack_vec(glm::smoothstep(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), o3)); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FLOAT); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg1); glm::vec<3, float> o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); return pack_vec(glm::smoothstep(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::vec<3, double> o3 = PyGLM_Vec_PTI_Get2(3, double, arg3); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { return pack_vec(glm::smoothstep(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), o3)); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_DOUBLE); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_DOUBLE); if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg1); glm::vec<3, double> o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); return pack_vec(glm::smoothstep(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check2(4, float, arg3)) { glm::vec<4, float> o3 = PyGLM_Vec_PTI_Get2(4, float, arg3); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { return pack_vec(glm::smoothstep(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), o3)); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FLOAT); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg1); glm::vec<4, float> o2 = PyGLM_Vec_PTI_Get1(4, float, arg2); return pack_vec(glm::smoothstep(o, o2, o3)); } } if (PyGLM_Vec_PTI_Check2(4, double, arg3)) { glm::vec<4, double> o3 = PyGLM_Vec_PTI_Get2(4, double, arg3); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { return pack_vec(glm::smoothstep(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), o3)); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_DOUBLE); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_DOUBLE); if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg1); glm::vec<4, double> o2 = PyGLM_Vec_PTI_Get1(4, double, arg2); return pack_vec(glm::smoothstep(o, o2, o3)); } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for smoothstep()"); return NULL; } PyDoc_STRVAR(isnan_docstr, "isnan(x: float) -> bool\n" " Returns `True` if `x` holds a `NaN` (not a number) representation in the underlying\n" " implementation's set of floating point representations.\n" " Returns `False` otherwise, including for implementations with no `NaN` representations.\n" "isnan(x: vecN) -> bvecN\n" " Returns `True` if `x` holds a `NaN` (not a number) representation in the underlying\n" " implementation's set of floating point representations.\n" " Returns `False` otherwise, including for implementations with no `NaN` representations.\n" "isnan(x: quat) -> bvecN\n" " Returns `True` if `x` holds a `NaN` (not a number) representation in the underlying\n" " implementation's set of floating point representations.\n" " Returns `False` otherwise, including for implementations with no `NaN` representations." ); PyGLM_MAKE_GLM_FUNC_N_V_Q__tfF(isnan) PyDoc_STRVAR(isinf_docstr, "isinf(x: float) -> bool\n" " Returns `True` if `x` holds a positive infinity or negative infinity representation in the\n" " underlying implementation's set of floating point representations.\n" " Returns `False` otherwise, including for implementations with no infinity representations.\n" "isinf(x: vecN) -> bvecN\n" " Returns `True` if `x` holds a positive infinity or negative infinity representation in the\n" " underlying implementation's set of floating point representations.\n" " Returns `False` otherwise, including for implementations with no infinity representations.\n" "isinf(x: quat) -> bvecN\n" " Returns `True` if `x` holds a positive infinity or negative infinity representation in the\n" " underlying implementation's set of floating point representations.\n" " Returns `False` otherwise, including for implementations with no infinity representations." ); PyGLM_MAKE_GLM_FUNC_N_V_Q__tfF(isinf) PyDoc_STRVAR(fma_docstr, "fma(a: float, b: float, c: float) -> float\n" " Computes and returns `a * b + c`." ); static PyObject* fma_(PyObject*, PyObject* args) { PyObject *arg1, *arg2, *arg3; PyGLM_Arg_Unpack_3O(args, "fma", arg1, arg2, arg3); if (PyGLM_Number_Check(arg1), PyGLM_Number_Check(arg2), PyGLM_Number_Check(arg3)) { return PyGLM_PyObject_FromNumber(glm::fma(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for fma()"); return NULL; } PyDoc_STRVAR(frexp_docstr, "frexp(x: float) -> (significant: float, exponent: int)\n" " Splits `x` into a floating-point significand in the range `[0.5, 1.0)` and an integral exponent\n" " of two, such that: `x = significand * exp(2, exponent)`\n" "frexp(x: vecN, exp: ivecN) -> vecN\n" " Splits `x` into a floating-point significand in the range `[0.5, 1.0)` and an integral exponent\n" " of two, such that: `x = significand * exp(2, exponent)`\n" " The significand is returned by the function and the exponent is returned in the parameter\n" " `exp`. For a floating-point value of zero, the significantand exponent are both zero. For a\n" " floating-point value that is an infinity or is not a number, the results are undefined." ); static PyObject* frexp_(PyObject*, PyObject* args) { if (PyTuple_Check(args) && PyTuple_GET_SIZE(args) == 1) { PyObject* arg = PyTuple_GET_ITEM(args, 0); if (PyGLM_Number_Check(arg)) { int e; double m = glm::frexp(PyGLM_Number_FromPyObject(arg), e); return Py_BuildValue("(d, i)", m, e); } PyGLM_TYPEERROR_O("invalid argument type for frexp(): ", arg); return NULL; } PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "frexp", arg1, arg2); PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyObject_TypeCheck(arg2, &hivec1Type)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg1); return pack_vec(glm::frexp(o, ((vec<1, int>*)arg2)->super_type)); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyObject_TypeCheck(arg2, &hivec1Type)) { glm::vec<1, double> o = PyGLM_Vec_PTI_Get0(1, double, arg1); return pack_vec(glm::frexp(o, ((vec<1, int>*)arg2)->super_type)); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyObject_TypeCheck(arg2, &hivec2Type)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg1); return pack_vec(glm::frexp(o, ((vec<2, int>*)arg2)->super_type)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyObject_TypeCheck(arg2, &hivec2Type)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg1); return pack_vec(glm::frexp(o, ((vec<2, int>*)arg2)->super_type)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyObject_TypeCheck(arg2, &hivec3Type)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg1); return pack_vec(glm::frexp(o, ((vec<3, int>*)arg2)->super_type)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyObject_TypeCheck(arg2, &hivec3Type)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg1); return pack_vec(glm::frexp(o, ((vec<3, int>*)arg2)->super_type)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyObject_TypeCheck(arg2, &hivec4Type)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg1); return pack_vec(glm::frexp(o, ((vec<4, int>*)arg2)->super_type)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyObject_TypeCheck(arg2, &hivec4Type)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg1); return pack_vec(glm::frexp(o, ((vec<4, int>*)arg2)->super_type)); } PyGLM_TYPEERROR_2O("invalid argument type(s) for frexp(): ", arg1, arg2); return NULL; } PyDoc_STRVAR(ldexp_docstr, "ldexp(x: number, exp: int) -> float\n" " Builds a floating-point number from `x` and the corresponding integral exponent of two in\n" " `exp`, returning: `significand * exp(2, exponent)`. If this product is too large to be\n" " represented in the floating-point type, the result is undefined.\n" "ldexp(x: vecN, exp: ivecN) -> vecN\n" " Builds a floating-point number from `x` and the corresponding integral exponent of two in\n" " `exp`, returning: `significand * exp(2, exponent)`. If this product is too large to be\n" " represented in the floating-point type, the result is undefined." ); static PyObject* ldexp_(PyObject*, PyObject* args) { PyObject *arg1, *arg2; PyGLM_Arg_Unpack_2O(args, "ldexp", arg1, arg2); if (PyGLM_Number_Check(arg1), PyGLM_Number_Check(arg2)) { return PyGLM_PyObject_FromNumber(glm::ldexp(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyObject_TypeCheck(arg2, &hivec1Type)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg1); return pack_vec(glm::ldexp(o, ((vec<1, int>*)arg2)->super_type)); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyObject_TypeCheck(arg2, &hivec1Type)) { glm::vec<1, double> o = PyGLM_Vec_PTI_Get0(1, double, arg1); return pack_vec(glm::ldexp(o, ((vec<1, int>*)arg2)->super_type)); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyObject_TypeCheck(arg2, &hivec2Type)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg1); return pack_vec(glm::ldexp(o, ((vec<2, int>*)arg2)->super_type)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyObject_TypeCheck(arg2, &hivec2Type)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg1); return pack_vec(glm::ldexp(o, ((vec<2, int>*)arg2)->super_type)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyObject_TypeCheck(arg2, &hivec3Type)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg1); return pack_vec(glm::ldexp(o, ((vec<3, int>*)arg2)->super_type)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyObject_TypeCheck(arg2, &hivec3Type)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg1); return pack_vec(glm::ldexp(o, ((vec<3, int>*)arg2)->super_type)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyObject_TypeCheck(arg2, &hivec4Type)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg1); return pack_vec(glm::ldexp(o, ((vec<4, int>*)arg2)->super_type)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyObject_TypeCheck(arg2, &hivec4Type)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg1); return pack_vec(glm::ldexp(o, ((vec<4, int>*)arg2)->super_type)); } PyGLM_TYPEERROR_2O("invalid argument type(s) for ldexp(): ", arg1, arg2); return NULL; } PyDoc_STRVAR(floatBitsToInt_docstr, "floatBitsToInt(v: float) -> int\n" " Returns a signed integer value representing the encoding of a floating-point value.\n" " The floating-point value's bit-level representation is preserved.\n" "floatBitsToInt(v: fvecN) -> ivecN\n" " Returns a signed integer value representing the encoding of a floating-point value.\n" " The floating-point value's bit-level representation is preserved.\n" ); static PyObject* floatBitsToInt_(PyObject*, PyObject* arg) { if (PyFloat_Check(arg)) { float f = static_cast(PyFloat_AS_DOUBLE(arg)); return PyGLM_PyObject_FromNumber(glm::floatBitsToInt(f)); } PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(1, float, arg)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg); return pack_vec(glm::floatBitsToInt(o)); } if (PyGLM_Vec_PTI_Check0(2, float, arg)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg); return pack_vec(glm::floatBitsToInt(o)); } if (PyGLM_Vec_PTI_Check0(3, float, arg)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg); return pack_vec(glm::floatBitsToInt(o)); } if (PyGLM_Vec_PTI_Check0(4, float, arg)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg); return pack_vec(glm::floatBitsToInt(o)); } PyGLM_TYPEERROR_O("invalid argument type(s) for floatBitsToInt(): ", arg); return NULL; } PyDoc_STRVAR(floatBitsToUint_docstr, "floatBitsToUint(v: float) -> int\n" " Returns an unsigned integer value representing the encoding of a floating-point value.\n" " The floating-point value's bit-level representation is preserved.\n" "floatBitsToUint(v: fvecN) -> uvecN\n" " Returns an unsigned integer value representing the encoding of a floating-point value.\n" " The floating-point value's bit-level representation is preserved.\n" ); static PyObject* floatBitsToUint_(PyObject*, PyObject* arg) { if (PyFloat_Check(arg)) { float f = static_cast(PyFloat_AS_DOUBLE(arg)); return PyGLM_PyObject_FromNumber(glm::floatBitsToUint(f)); } PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(1, float, arg)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg); return pack_vec(glm::floatBitsToUint(o)); } if (PyGLM_Vec_PTI_Check0(2, float, arg)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg); return pack_vec(glm::floatBitsToUint(o)); } if (PyGLM_Vec_PTI_Check0(3, float, arg)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg); return pack_vec(glm::floatBitsToUint(o)); } if (PyGLM_Vec_PTI_Check0(4, float, arg)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg); return pack_vec(glm::floatBitsToUint(o)); } PyGLM_TYPEERROR_O("invalid argument type(s) for floatBitsToUint(): ", arg); return NULL; } PyDoc_STRVAR(intBitsToFloat_docstr, "intBitsToFloat(v: int) -> float\n" " Returns a floating-point value corresponding to a signed integer encoding of a floating-point\n" " value. If an `inf` or `NaN` is passed in, it will not signal, and the resulting floating point\n" " value is unspecified. Otherwise, the bit-level representation is preserved.\n" "intBitsToFloat(v: ivecN) -> fvecN\n" " Returns a floating-point value corresponding to a signed integer encoding of a floating-point\n" " value. If an `inf` or `NaN` is passed in, it will not signal, and the resulting floating point\n" " value is unspecified. Otherwise, the bit-level representation is preserved." ); static PyObject* intBitsToFloat_(PyObject*, PyObject* arg) { if (PyLong_Check(arg)) { int i = static_cast(PyLong_AS_LONG(arg)); return PyGLM_PyObject_FromNumber(glm::intBitsToFloat(i)); } PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_INT); if (PyGLM_Vec_PTI_Check0(1, int32, arg)) { glm::vec<1, int32> o = PyGLM_Vec_PTI_Get0(1, int32, arg); return pack_vec(glm::intBitsToFloat(o)); } if (PyGLM_Vec_PTI_Check0(2, int32, arg)) { glm::vec<2, int32> o = PyGLM_Vec_PTI_Get0(2, int32, arg); return pack_vec(glm::intBitsToFloat(o)); } if (PyGLM_Vec_PTI_Check0(3, int32, arg)) { glm::vec<3, int32> o = PyGLM_Vec_PTI_Get0(3, int32, arg); return pack_vec(glm::intBitsToFloat(o)); } if (PyGLM_Vec_PTI_Check0(4, int32, arg)) { glm::vec<4, int32> o = PyGLM_Vec_PTI_Get0(4, int32, arg); return pack_vec(glm::intBitsToFloat(o)); } PyGLM_TYPEERROR_O("invalid argument type(s) for intBitsToFloat(): ", arg); return NULL; } PyDoc_STRVAR(uintBitsToFloat_docstr, "uintBitsToFloat(v: int) -> float\n" " Returns a floating-point value corresponding to an unsigned integer encoding of a floating-point\n" " value. If an `inf` or `NaN` is passed in, it will not signal, and the resulting floating point\n" " value is unspecified. Otherwise, the bit-level representation is preserved.\n" "uintBitsToFloat(v: ivecN) -> fvecN\n" " Returns a floating-point value corresponding to an unsigned integer encoding of a floating-point\n" " value. If an `inf` or `NaN` is passed in, it will not signal, and the resulting floating point\n" " value is unspecified. Otherwise, the bit-level representation is preserved." ); static PyObject* uintBitsToFloat_(PyObject*, PyObject* arg) { if (PyLong_Check(arg)) { unsigned int i = static_cast(PyLong_AsUnsignedLong(arg)); return PyGLM_PyObject_FromNumber(glm::uintBitsToFloat(i)); } PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_UINT); if (PyGLM_Vec_PTI_Check0(1, uint32, arg)) { glm::vec<1, uint32> o = PyGLM_Vec_PTI_Get0(1, uint32, arg); return pack_vec(glm::uintBitsToFloat(o)); } if (PyGLM_Vec_PTI_Check0(2, uint32, arg)) { glm::vec<2, uint32> o = PyGLM_Vec_PTI_Get0(2, uint32, arg); return pack_vec(glm::uintBitsToFloat(o)); } if (PyGLM_Vec_PTI_Check0(3, uint32, arg)) { glm::vec<3, uint32> o = PyGLM_Vec_PTI_Get0(3, uint32, arg); return pack_vec(glm::uintBitsToFloat(o)); } if (PyGLM_Vec_PTI_Check0(4, uint32, arg)) { glm::vec<4, uint32> o = PyGLM_Vec_PTI_Get0(4, uint32, arg); return pack_vec(glm::uintBitsToFloat(o)); } PyGLM_TYPEERROR_O("invalid argument type(s) for uintBitsToFloat(): ", arg); return NULL; } PyDoc_STRVAR(modf_docstr, "modf(x: float) -> (fraction, integer)\n" " Returns the fractional part of `x` and the integer part (as a whole number floating point value).\n" "modf(x: vecN, i: vecN) -> vecN\n" " Returns the fractional part of `x` and sets `i` to the integer part (as a whole number floating\n" " point value)." ); static PyObject* modf_(PyObject*, PyObject* args) { if (PyTuple_GET_SIZE(args) == 1) { PyObject* arg = PyTuple_GET_ITEM(args, 0); if (PyGLM_Number_Check(arg)) { double i; double x = PyGLM_Number_AsDouble(arg); double f = glm::modf(x, i); return Py_BuildValue("(d, d)", f, i); } PyGLM_TYPEERROR_O("invalid argument type(s) for intBitsToFloat(): ", arg); return NULL; } PyObject *arg1, *arg2; PyGLM_Arg_Unpack_2O(args, "modf", arg1, arg2); PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyObject_TypeCheck(arg2, &hfvec1Type)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg1); return pack_vec(glm::modf(o, ((vec<1, float>*)arg2)->super_type)); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyObject_TypeCheck(arg2, &hdvec1Type)) { glm::vec<1, double> o = PyGLM_Vec_PTI_Get0(1, double, arg1); return pack_vec(glm::modf(o, ((vec<1, double>*)arg2)->super_type)); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyObject_TypeCheck(arg2, &hfvec2Type)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg1); return pack_vec(glm::modf(o, ((vec<2, float>*)arg2)->super_type)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyObject_TypeCheck(arg2, &hdvec2Type)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg1); return pack_vec(glm::modf(o, ((vec<2, double>*)arg2)->super_type)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyObject_TypeCheck(arg2, &hfvec3Type)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg1); return pack_vec(glm::modf(o, ((vec<3, float>*)arg2)->super_type)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyObject_TypeCheck(arg2, &hdvec3Type)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg1); return pack_vec(glm::modf(o, ((vec<3, double>*)arg2)->super_type)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyObject_TypeCheck(arg2, &hfvec4Type)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg1); return pack_vec(glm::modf(o, ((vec<4, float>*)arg2)->super_type)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyObject_TypeCheck(arg2, &hdvec4Type)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg1); return pack_vec(glm::modf(o, ((vec<4, double>*)arg2)->super_type)); } PyGLM_TYPEERROR_2O("invalid argument type(s) for modf(): ", arg1, arg2); return NULL; } #define FUNC_COMMON_METHODS \ { "abs", (PyCFunction)abs_, METH_O, abs_docstr }, \ { "sign", (PyCFunction)sign_, METH_O, sign_docstr }, \ { "floor", (PyCFunction)floor_, METH_O, floor_docstr }, \ { "trunc", (PyCFunction)trunc_, METH_O, trunc_docstr }, \ { "round", (PyCFunction)round_, METH_O, round_docstr }, \ { "roundEven", (PyCFunction)roundEven_, METH_O, roundEven_docstr }, \ { "ceil", (PyCFunction)ceil_, METH_O, ceil_docstr }, \ { "fract", (PyCFunction)fract_, METH_O, fract_docstr }, \ { "mod", (PyCFunction)mod_, METH_VARARGS, mod_docstr }, \ { "min", (PyCFunction)min_, METH_VARARGS, min_docstr }, \ { "max", (PyCFunction)max_, METH_VARARGS, max_docstr }, \ { "fmin", (PyCFunction)fmin_, METH_VARARGS, fmin_docstr }, \ { "fmax", (PyCFunction)fmax_, METH_VARARGS, fmax_docstr }, \ { "clamp", (PyCFunction)clamp_, METH_VARARGS, clamp_docstr }, \ { "mix", (PyCFunction)mix_, METH_VARARGS, mix_docstr }, \ { "step", (PyCFunction)step_, METH_VARARGS, step_docstr }, \ { "smoothstep", (PyCFunction)smoothstep_, METH_VARARGS, smoothstep_docstr }, \ { "isnan", (PyCFunction)isnan_, METH_O, isnan_docstr }, \ { "isinf", (PyCFunction)isinf_, METH_O, isinf_docstr }, \ { "fma", (PyCFunction)fma_, METH_VARARGS, fma_docstr }, \ { "frexp", (PyCFunction)frexp_, METH_VARARGS, frexp_docstr }, \ { "ldexp", (PyCFunction)ldexp_, METH_VARARGS, ldexp_docstr }, \ { "floatBitsToInt", (PyCFunction)floatBitsToInt_, METH_O, floatBitsToInt_docstr }, \ { "floatBitsToUint", (PyCFunction)floatBitsToUint_, METH_O, floatBitsToUint_docstr }, \ { "intBitsToFloat", (PyCFunction)intBitsToFloat_, METH_O, intBitsToFloat_docstr }, \ { "uintBitsToFloat", (PyCFunction)uintBitsToFloat_, METH_O, uintBitsToFloat_docstr }, \ { "modf", (PyCFunction)modf_, METH_VARARGS, modf_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/detail/func_exponential.h000066400000000000000000000125311511156275200262750ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" #include "../function_generator_macros.h" PyDoc_STRVAR(pow_docstr, "pow(base: float, exponent: float) -> float\n" " Returns base raised to the power exponent.\n" "pow(base: vecN, exponent: vecN) -> vecN\n" " For every index `i`:\n" " Returns `base[i]` raised to the power `exponent[i]`.\n" "pow(base: quat, exponent: quat) -> quat\n" " Returns a quaternion raised to a power." ); static PyObject* pow_(PyObject*, PyObject* args) { PyObject *arg1, *arg2; PyGLM_Arg_Unpack_2O(args, "pow", arg1, arg2); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::pow(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_QUA | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) { return pack(glm::pow(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) { return pack(glm::pow(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { return pack(glm::pow(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { return pack(glm::pow(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { return pack(glm::pow(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { return pack(glm::pow(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { return pack(glm::pow(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { return pack(glm::pow(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2))); } if (PyGLM_Qua_PTI_Check0(float, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::pow(PyGLM_Qua_PTI_Get0(float, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Qua_PTI_Check0(double, arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::pow(PyGLM_Qua_PTI_Get0(double, arg1), PyGLM_Number_FromPyObject(arg2))); } PyGLM_TYPEERROR_2O("invalid argument type(s) for pow(): ", arg1, arg2); return NULL; } PyDoc_STRVAR(exp_docstr, "exp(x: float) -> float\n" " Returns the natural exponentiation of `x`, i.e., `e^x`.\n" "exp(x: vecN) -> vecN\n" " For every component c of x:\n" " Returns the natural exponentiation of `c`, i.e., `e^c`.\n" "exp(x: quat) -> quat\n" " Returns an exponential of a quaternion." ); PyGLM_MAKE_GLM_FUNC_N_V_Q__tfF(exp) PyDoc_STRVAR(log_docstr, "log(x: float) -> float\n" " Returns the natural logarithm of `x`, i.e., returns the value `y` which satisfies the equation\n" " `x = e^y`. Results are undefined if `x <= 0`.\n" "log(x: vecN) -> vecN\n" " For every component `c` of `x`:\n" " Returns the natural logarithm of `c`, i.e., returns the value `y` which satisfies the equation\n" " `c = e^y`. Results are undefined if `c <= 0`.\n" "log(x: quat) -> quat\n" " Returns a logarithm of a quaternion." ); PyGLM_MAKE_GLM_FUNC_N_V_Q__tfF(log) PyDoc_STRVAR(exp2_docstr, "exp2(x: float) -> float\n" " Returns `2` raised to the `x` power.\n" "exp2(x: vecN) -> vecN\n" " For every component `c` of `x`:\n" " Returns `2` raised to the `c` power." ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(exp2) PyDoc_STRVAR(log2_docstr, "log2(x: float) -> float\n" " Returns the base `2` log of `x`, i.e., returns the value `y`, which satisfies the equation\n" " `x = 2 ^ y`.\n" "log2(x: vecN) -> vecN\n" " For every component `c` of `x`:\n" " Returns the base `2` log of `c`, i.e., returns the value `y`, which satisfies the equation\n" " `c = 2 ^ y`." ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(log2) PyDoc_STRVAR(sqrt_docstr, "sqrt(x: float) -> float\n" " Returns the positive square root of `x`.\n" "sqrt(x: vecN) -> vecN\n" " For every component `c` of `x`:\n" " Returns the positive square root of `c`.\n" "sqrt(x: quat) -> quat\n" " Returns the square root of a quaternion." ); PyGLM_MAKE_GLM_FUNC_N_V_Q__tfF(sqrt) PyDoc_STRVAR(inversesqrt_docstr, "inversesqrt(x: float) -> float\n" " Returns the reciprocal of the positive square root of `x`.\n" "inversesqrt(x: vecN) -> vecN\n" " For every component `c` of `x`:\n" " Returns the reciprocal of the positive square root of `c`." ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(inversesqrt) #define FUNC_EXPONENTIAL \ { "pow", (PyCFunction)pow_, METH_VARARGS, pow_docstr }, \ { "exp", (PyCFunction)exp_, METH_O, exp_docstr }, \ { "log", (PyCFunction)log_, METH_O, log_docstr }, \ { "exp2", (PyCFunction)exp2_, METH_O, exp2_docstr }, \ { "log2", (PyCFunction)log2_, METH_O, log2_docstr }, \ { "sqrt", (PyCFunction)sqrt_, METH_O, sqrt_docstr }, \ { "inversesqrt", (PyCFunction)inversesqrt_, METH_O, inversesqrt_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/detail/func_geometric.h000066400000000000000000000325071511156275200257320ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" #include "../function_generator_macros.h" PyDoc_STRVAR(length_docstr, "length(x: float) -> float\n" " Returns the length of `x`, i.e., `abs(x)`.\n" "length(x: vecN) -> float\n" " Returns the length of `x`, i.e., `sqrt(x * x)`.\n" "length(x: quat) -> float\n" " Returns the norm of a quaternion." ); PyGLM_MAKE_GLM_FUNC_N_V_Q__tfF(length) PyDoc_STRVAR(distance_docstr, "distance(p0: float, p1: float) -> float\n" " Returns the distance between `p0` and `p1`, i.e., `length(p0 - p1)`.\n" "distance(p0: vecN, p1: vecN) -> float\n" " Returns the distance between `p0` and `p1`, i.e., `length(p0 - p1)`." ); PyGLM_MAKE_GLM_FUNC_NN_VV__tfF(distance) PyDoc_STRVAR(dot_docstr, "dot(x: number, y: number) -> float\n" " Returns the dot product of `x` and `y`, i.e., `result = x * y`.\n" "dot(x: vecN, y: vecN) -> number\n" " Returns the dot product of `x` and `y`, i.e., `result = x[0] * y[0] + x[1] * y[1] + ...`\n" "dot(x: quat, y: quat) -> float\n" " Returns dot product of `x` and `y`, i.e., `x[0] * y[0] + x[1] * y[1] + ...`" ); static PyObject* dot_(PyObject*, PyObject* args) { PyObject *arg1, *arg2; PyGLM_Arg_Unpack_2O(args, "dot", arg1, arg2); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::custom::dot(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_QUA | PyGLM_SHAPE_ALL | PyGLM_DT_FD | PyGLM_DT_I); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_T_QUA | PyGLM_SHAPE_ALL | PyGLM_DT_FD | PyGLM_DT_I); if (PyGLM_PTI_IsVec(0)) { if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2))); } if (PyGLM_Vec_PTI_Check0(1, int32, arg1) && PyGLM_Vec_PTI_Check1(1, int32, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(1, int32, arg1), PyGLM_Vec_PTI_Get1(1, int32, arg2))); } if (PyGLM_Vec_PTI_Check0(1, uint32, arg1) && PyGLM_Vec_PTI_Check1(1, uint32, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(1, uint32, arg1), PyGLM_Vec_PTI_Get1(1, uint32, arg2))); } if (PyGLM_Vec_PTI_Check0(1, int64, arg1) && PyGLM_Vec_PTI_Check1(1, int64, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(1, int64, arg1), PyGLM_Vec_PTI_Get1(1, int64, arg2))); } if (PyGLM_Vec_PTI_Check0(1, uint64, arg1) && PyGLM_Vec_PTI_Check1(1, uint64, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(1, uint64, arg1), PyGLM_Vec_PTI_Get1(1, uint64, arg2))); } if (PyGLM_Vec_PTI_Check0(1, int16, arg1) && PyGLM_Vec_PTI_Check1(1, int16, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(1, int16, arg1), PyGLM_Vec_PTI_Get1(1, int16, arg2))); } if (PyGLM_Vec_PTI_Check0(1, uint16, arg1) && PyGLM_Vec_PTI_Check1(1, uint16, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(1, uint16, arg1), PyGLM_Vec_PTI_Get1(1, uint16, arg2))); } if (PyGLM_Vec_PTI_Check0(1, int8, arg1) && PyGLM_Vec_PTI_Check1(1, int8, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(1, int8, arg1), PyGLM_Vec_PTI_Get1(1, int8, arg2))); } if (PyGLM_Vec_PTI_Check0(1, uint8, arg1) && PyGLM_Vec_PTI_Check1(1, uint8, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(1, uint8, arg1), PyGLM_Vec_PTI_Get1(1, uint8, arg2))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2))); } if (PyGLM_Vec_PTI_Check0(2, int32, arg1) && PyGLM_Vec_PTI_Check1(2, int32, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(2, int32, arg1), PyGLM_Vec_PTI_Get1(2, int32, arg2))); } if (PyGLM_Vec_PTI_Check0(2, uint32, arg1) && PyGLM_Vec_PTI_Check1(2, uint32, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(2, uint32, arg1), PyGLM_Vec_PTI_Get1(2, uint32, arg2))); } if (PyGLM_Vec_PTI_Check0(2, int64, arg1) && PyGLM_Vec_PTI_Check1(2, int64, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(2, int64, arg1), PyGLM_Vec_PTI_Get1(2, int64, arg2))); } if (PyGLM_Vec_PTI_Check0(2, uint64, arg1) && PyGLM_Vec_PTI_Check1(2, uint64, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(2, uint64, arg1), PyGLM_Vec_PTI_Get1(2, uint64, arg2))); } if (PyGLM_Vec_PTI_Check0(2, int16, arg1) && PyGLM_Vec_PTI_Check1(2, int16, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(2, int16, arg1), PyGLM_Vec_PTI_Get1(2, int16, arg2))); } if (PyGLM_Vec_PTI_Check0(2, uint16, arg1) && PyGLM_Vec_PTI_Check1(2, uint16, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(2, uint16, arg1), PyGLM_Vec_PTI_Get1(2, uint16, arg2))); } if (PyGLM_Vec_PTI_Check0(2, int8, arg1) && PyGLM_Vec_PTI_Check1(2, int8, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(2, int8, arg1), PyGLM_Vec_PTI_Get1(2, int8, arg2))); } if (PyGLM_Vec_PTI_Check0(2, uint8, arg1) && PyGLM_Vec_PTI_Check1(2, uint8, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(2, uint8, arg1), PyGLM_Vec_PTI_Get1(2, uint8, arg2))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2))); } if (PyGLM_Vec_PTI_Check0(3, int32, arg1) && PyGLM_Vec_PTI_Check1(3, int32, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(3, int32, arg1), PyGLM_Vec_PTI_Get1(3, int32, arg2))); } if (PyGLM_Vec_PTI_Check0(3, uint32, arg1) && PyGLM_Vec_PTI_Check1(3, uint32, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(3, uint32, arg1), PyGLM_Vec_PTI_Get1(3, uint32, arg2))); } if (PyGLM_Vec_PTI_Check0(3, int64, arg1) && PyGLM_Vec_PTI_Check1(3, int64, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(3, int64, arg1), PyGLM_Vec_PTI_Get1(3, int64, arg2))); } if (PyGLM_Vec_PTI_Check0(3, uint64, arg1) && PyGLM_Vec_PTI_Check1(3, uint64, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(3, uint64, arg1), PyGLM_Vec_PTI_Get1(3, uint64, arg2))); } if (PyGLM_Vec_PTI_Check0(3, int16, arg1) && PyGLM_Vec_PTI_Check1(3, int16, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(3, int16, arg1), PyGLM_Vec_PTI_Get1(3, int16, arg2))); } if (PyGLM_Vec_PTI_Check0(3, uint16, arg1) && PyGLM_Vec_PTI_Check1(3, uint16, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(3, uint16, arg1), PyGLM_Vec_PTI_Get1(3, uint16, arg2))); } if (PyGLM_Vec_PTI_Check0(3, int8, arg1) && PyGLM_Vec_PTI_Check1(3, int8, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(3, int8, arg1), PyGLM_Vec_PTI_Get1(3, int8, arg2))); } if (PyGLM_Vec_PTI_Check0(3, uint8, arg1) && PyGLM_Vec_PTI_Check1(3, uint8, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(3, uint8, arg1), PyGLM_Vec_PTI_Get1(3, uint8, arg2))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2))); } if (PyGLM_Vec_PTI_Check0(4, int32, arg1) && PyGLM_Vec_PTI_Check1(4, int32, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(4, int32, arg1), PyGLM_Vec_PTI_Get1(4, int32, arg2))); } if (PyGLM_Vec_PTI_Check0(4, uint32, arg1) && PyGLM_Vec_PTI_Check1(4, uint32, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(4, uint32, arg1), PyGLM_Vec_PTI_Get1(4, uint32, arg2))); } if (PyGLM_Vec_PTI_Check0(4, int64, arg1) && PyGLM_Vec_PTI_Check1(4, int64, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(4, int64, arg1), PyGLM_Vec_PTI_Get1(4, int64, arg2))); } if (PyGLM_Vec_PTI_Check0(4, uint64, arg1) && PyGLM_Vec_PTI_Check1(4, uint64, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(4, uint64, arg1), PyGLM_Vec_PTI_Get1(4, uint64, arg2))); } if (PyGLM_Vec_PTI_Check0(4, int16, arg1) && PyGLM_Vec_PTI_Check1(4, int16, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(4, int16, arg1), PyGLM_Vec_PTI_Get1(4, int16, arg2))); } if (PyGLM_Vec_PTI_Check0(4, uint16, arg1) && PyGLM_Vec_PTI_Check1(4, uint16, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(4, uint16, arg1), PyGLM_Vec_PTI_Get1(4, uint16, arg2))); } if (PyGLM_Vec_PTI_Check0(4, int8, arg1) && PyGLM_Vec_PTI_Check1(4, int8, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(4, int8, arg1), PyGLM_Vec_PTI_Get1(4, int8, arg2))); } if (PyGLM_Vec_PTI_Check0(4, uint8, arg1) && PyGLM_Vec_PTI_Check1(4, uint8, arg2)) { return pack(glm::custom::dot(PyGLM_Vec_PTI_Get0(4, uint8, arg1), PyGLM_Vec_PTI_Get1(4, uint8, arg2))); } } if (PyGLM_Qua_PTI_Check0(float, arg1) && PyGLM_Qua_PTI_Check1(float, arg2)) { return pack(glm::custom::dot(PyGLM_Qua_PTI_Get0(float, arg1), PyGLM_Qua_PTI_Get1(float, arg2))); } if (PyGLM_Qua_PTI_Check0(double, arg1) && PyGLM_Qua_PTI_Check1(double, arg2)) { return pack(glm::custom::dot(PyGLM_Qua_PTI_Get0(double, arg1), PyGLM_Qua_PTI_Get1(double, arg2))); } PyGLM_TYPEERROR_2O("invalid argument type(s) for dot(): ", arg1, arg2); return NULL; } PyDoc_STRVAR(cross_docstr, "cross(x: vec3, y: vec3) -> vec3\n" " Returns the cross product of `x` and `y`.\n" "cross(x: quat, y: quat) -> quat\n" " Compute a cross product." ); static PyObject* cross_(PyObject*, PyObject* args) { PyObject *arg1, *arg2; PyGLM_Arg_Unpack_2O(args, "cross", arg1, arg2); PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_QUA | PyGLM_SHAPE_3 | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_T_QUA | PyGLM_SHAPE_3 | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg1); glm::vec<3, float> o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); return pack(glm::cross(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg1); glm::vec<3, double> o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); return pack(glm::cross(o, o2)); } if (PyGLM_Qua_PTI_Check0(float, arg1) && PyGLM_Qua_PTI_Check1(float, arg2)) { glm::qua o = PyGLM_Qua_PTI_Get0(float, arg1); glm::qua o2 = PyGLM_Qua_PTI_Get1(float, arg2); return pack(glm::cross(o, o2)); } if (PyGLM_Qua_PTI_Check0(double, arg1) && PyGLM_Qua_PTI_Check1(double, arg2)) { glm::qua o = PyGLM_Qua_PTI_Get0(double, arg1); glm::qua o2 = PyGLM_Qua_PTI_Get1(double, arg2); return pack(glm::cross(o, o2)); } PyGLM_TYPEERROR_2O("invalid argument type(s) for cross(): ", arg1, arg2); return NULL; } PyDoc_STRVAR(normalize_docstr, "normalize(x: vecN) -> vecN\n" " Returns a vector in the same direction as `x` but with length of `1`.\n" "normalize(x: quat) -> quat\n" " Returns the normalized quaternion." ); PyGLM_MAKE_GLM_FUNC_V_Q__tfF(normalize) PyDoc_STRVAR(faceforward_docstr, "faceforward(N: float, I: float, Nref: float) -> float\n" " If `dot(Nref, I) < 0.0`, return `N`, otherwise, return `-N`.\n" "faceforward(N: vecN, I: vecN, Nref: vecN) -> vecN\n" " For every index `i`:\n" " If `dot(Nref[i], I[i]) < 0.0`, return `N[i]`, otherwise, return `-N[i]`." ); PyGLM_MAKE_GLM_FUNC_NNN_VVV__tfF(faceforward) PyDoc_STRVAR(reflect_docstr, "reflect(I: float, N: float) -> float\n" " For the incident vector `I` and surface orientation `N`, returns the reflection direction:\n" " `result = I - 2.0 * dot(N, I) * N`.\n" "reflect(I: vecN, N: vecN) -> vecN\n" " For the incident vector `I` and surface orientation `N`, returns the reflection direction:\n" " `result = I - 2.0 * dot(N, I) * N`." ); PyGLM_MAKE_GLM_FUNC_NN_VV__tfF(reflect) PyDoc_STRVAR(refract_docstr, "refract(I: float, N: float, eta: float) -> float\n" " For the incident vector `I` and surface normal `N`, and the ratio of indices of refraction `eta`,\n" " return the refraction vector.\n" "refract(I: vecN, N: vecN, eta: float) -> vecN\n" " For the incident vector `I` and surface normal `N`, and the ratio of indices of refraction `eta`,\n" " return the refraction vector." ); PyGLM_MAKE_GLM_FUNC_NNN_VVN__tfF(refract) #define FUNC_GEOMETRIC_METHODS \ { "length", (PyCFunction)length_, METH_O, length_docstr }, \ { "distance", (PyCFunction)distance_, METH_VARARGS, distance_docstr }, \ { "dot", (PyCFunction)dot_, METH_VARARGS, dot_docstr }, \ { "cross", (PyCFunction)cross_, METH_VARARGS, cross_docstr }, \ { "normalize", (PyCFunction)normalize_, METH_O, normalize_docstr }, \ { "faceforward", (PyCFunction)faceforward_, METH_VARARGS, faceforward_docstr }, \ { "reflect", (PyCFunction)reflect_, METH_VARARGS, reflect_docstr }, \ { "refract", (PyCFunction)refract_, METH_VARARGS, refract_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/detail/func_integer.h000066400000000000000000001377141511156275200254170ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" PyDoc_STRVAR(uaddCarry_docstr, "uaddCarry(x: int, y: int) -> (result: int, carry: int)\n" " Adds 32-bit unsigned integer `x` and `y`, returning the `sum` modulo `pow(2, 32)`. The value carry\n" " is set to `0` if the `sum` was less than `pow(2, 32)`, or to `1` otherwise.\n" "uaddCarry(x: uvecN, y: uvecN, carry: uvecN) -> uvecN\n" " Adds 32-bit unsigned integer `x` and `y`, returning the `sum` modulo `pow(2, 32)`. The value carry\n" " is set to `0` if the `sum` was less than `pow(2, 32)`, or to `1` otherwise." ); static PyObject* uaddCarry_(PyObject*, PyObject* args) { PyObject *arg1, *arg2, *arg3 = NULL; if (!PyArg_UnpackTuple(args, "uaddCarry", 2, 3, &arg1, &arg2, &arg3)) return NULL; if (arg3 == NULL) { if (PyLong_Check(arg1) && PyLong_Check(arg2) ) { glm::uint carry; glm::uint result = glm::uaddCarry(_PyGLM_Long_As_Number_No_Error(arg1), _PyGLM_Long_As_Number_No_Error(arg2), carry); return Py_BuildValue("(I,I)", result, carry); } } else { PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_UINT); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_UINT); if (PyGLM_Vec_PTI_Check0(1, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(1, glm::uint, arg2) && Py_TYPE(arg3) == &huvec1Type) { glm::uvec1 o = PyGLM_Vec_PTI_Get0(1, glm::uint, arg1); glm::uvec1 o2 = PyGLM_Vec_PTI_Get1(1, glm::uint, arg2); return pack_vec(glm::uaddCarry(o, o2, ((vec<1, glm::uint>*)arg3)->super_type)); } if (PyGLM_Vec_PTI_Check0(2, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(2, glm::uint, arg2) && Py_TYPE(arg3) == &huvec2Type) { glm::uvec2 o = PyGLM_Vec_PTI_Get0(2, glm::uint, arg1); glm::uvec2 o2 = PyGLM_Vec_PTI_Get1(2, glm::uint, arg2); return pack_vec(glm::uaddCarry(o, o2, ((vec<2, glm::uint>*)arg3)->super_type)); } if (PyGLM_Vec_PTI_Check0(3, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(3, glm::uint, arg2) && Py_TYPE(arg3) == &huvec3Type) { glm::uvec3 o = PyGLM_Vec_PTI_Get0(3, glm::uint, arg1); glm::uvec3 o2 = PyGLM_Vec_PTI_Get1(3, glm::uint, arg2); return pack_vec(glm::uaddCarry(o, o2, ((vec<3, glm::uint>*)arg3)->super_type)); } if (PyGLM_Vec_PTI_Check0(4, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(4, glm::uint, arg2) && Py_TYPE(arg3) == &huvec4Type) { glm::uvec4 o = PyGLM_Vec_PTI_Get0(4, glm::uint, arg1); glm::uvec4 o2 = PyGLM_Vec_PTI_Get1(4, glm::uint, arg2); return pack_vec(glm::uaddCarry(o, o2, ((vec<4, glm::uint>*)arg3)->super_type)); } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for uaddCarry()"); return NULL; } PyDoc_STRVAR(usubBorrow_docstr, "usubBorrow(x: int, y: int) -> (result: int, borrow: int)\n" " Subtracts the 32-bit unsigned integer `y` from `x`, returning the difference if non-negative,\n" " or `pow(2, 32)` plus the difference otherwise. The value borrow is set to `0` if `x >= y`, or to\n" " `1` otherwise.\n" "usubBorrow(x: uvecN, y: uvecN, borrow: uvecN) -> uvecN\n" " Subtracts the 32-bit unsigned integer `y` from `x`, returning the difference if non-negative,\n" " or `pow(2, 32)` plus the difference otherwise. The value borrow is set to `0` if `x >= y`, or to\n" " `1` otherwise." ); static PyObject* usubBorrow_(PyObject*, PyObject* args) { PyObject *arg1, *arg2, *arg3 = NULL; if (!PyArg_UnpackTuple(args, "usubBorrow", 2, 3, &arg1, &arg2, &arg3)) return NULL; if (arg3 == NULL) { if (PyLong_Check(arg1) && PyLong_Check(arg2)) { glm::uint borrow; glm::uint result = glm::usubBorrow(_PyGLM_Long_As_Number_No_Error(arg1), _PyGLM_Long_As_Number_No_Error(arg2), borrow); return Py_BuildValue("(I,I)", result, borrow); } } else { PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_UINT); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_UINT); if (PyGLM_Vec_PTI_Check0(1, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(1, glm::uint, arg2) && Py_TYPE(arg3) == &huvec1Type) { glm::uvec1 o = PyGLM_Vec_PTI_Get0(1, glm::uint, arg1); glm::uvec1 o2 = PyGLM_Vec_PTI_Get1(1, glm::uint, arg2); return pack_vec(glm::usubBorrow(o, o2, ((vec<1, glm::uint>*)arg3)->super_type)); } if (PyGLM_Vec_PTI_Check0(2, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(2, glm::uint, arg2) && Py_TYPE(arg3) == &huvec2Type) { glm::uvec2 o = PyGLM_Vec_PTI_Get0(2, glm::uint, arg1); glm::uvec2 o2 = PyGLM_Vec_PTI_Get1(2, glm::uint, arg2); return pack_vec(glm::usubBorrow(o, o2, ((vec<2, glm::uint>*)arg3)->super_type)); } if (PyGLM_Vec_PTI_Check0(3, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(3, glm::uint, arg2) && Py_TYPE(arg3) == &huvec3Type) { glm::uvec3 o = PyGLM_Vec_PTI_Get0(3, glm::uint, arg1); glm::uvec3 o2 = PyGLM_Vec_PTI_Get1(3, glm::uint, arg2); return pack_vec(glm::usubBorrow(o, o2, ((vec<3, glm::uint>*)arg3)->super_type)); } if (PyGLM_Vec_PTI_Check0(4, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(4, glm::uint, arg2) && Py_TYPE(arg3) == &huvec4Type) { glm::uvec4 o = PyGLM_Vec_PTI_Get0(4, glm::uint, arg1); glm::uvec4 o2 = PyGLM_Vec_PTI_Get1(4, glm::uint, arg2); return pack_vec(glm::usubBorrow(o, o2, ((vec<4, glm::uint>*)arg3)->super_type)); } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for usubBorrow()"); return NULL; } PyDoc_STRVAR(umulExtended_docstr, "umulExtended(x: int, y: int) -> (msb: int, lsb: int)\n" " Multiplies 32-bit integers `x` and `y`, producing a 64-bit result. The 32 least-significant\n" " bits are returned in `lsb`. The 32 most-significant bits are returned in `msb`.\n" "umulExtended(x: uvecN, y: uvecN, msb: uvecN, lsb: uvecN) -> uvecN\n" " Multiplies 32-bit integers `x` and `y`, producing a 64-bit result. The 32 least-significant\n" " bits are returned in `lsb`. The 32 most-significant bits are returned in `msb`." ); static PyObject* umulExtended_(PyObject*, PyObject* args) { PyObject *arg1, *arg2, *arg3 = NULL, *arg4 = NULL; if (!PyArg_UnpackTuple(args, "umulExtended", 2, 4, &arg1, &arg2, &arg3, &arg4)) return NULL; if (arg3 == NULL) { if (PyLong_Check(arg1) && PyLong_Check(arg2)) { glm::uint msb, lsb; glm::umulExtended(_PyGLM_Long_As_Number_No_Error(arg1), _PyGLM_Long_As_Number_No_Error(arg2), msb, lsb); return Py_BuildValue("(I,I)", msb, lsb); } } else if (arg4 != NULL) { PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_UINT); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_UINT); if (PyGLM_Vec_PTI_Check0(1, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(1, glm::uint, arg2) && Py_TYPE(arg3) == &huvec1Type && Py_TYPE(arg4) == &huvec1Type) { glm::uvec1 o = PyGLM_Vec_PTI_Get0(1, glm::uint, arg1); glm::uvec1 o2 = PyGLM_Vec_PTI_Get1(1, glm::uint, arg2); glm::umulExtended(o, o2, ((vec<1, glm::uint>*)arg3)->super_type, ((vec<1, glm::uint>*)arg4)->super_type); Py_RETURN_NONE; } if (PyGLM_Vec_PTI_Check0(2, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(2, glm::uint, arg2) && Py_TYPE(arg3) == &huvec2Type && Py_TYPE(arg4) == &huvec2Type) { glm::uvec2 o = PyGLM_Vec_PTI_Get0(2, glm::uint, arg1); glm::uvec2 o2 = PyGLM_Vec_PTI_Get1(2, glm::uint, arg2); glm::umulExtended(o, o2, ((vec<2, glm::uint>*)arg3)->super_type, ((vec<2, glm::uint>*)arg4)->super_type); Py_RETURN_NONE; } if (PyGLM_Vec_PTI_Check0(3, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(3, glm::uint, arg2) && Py_TYPE(arg3) == &huvec3Type && Py_TYPE(arg4) == &huvec3Type) { glm::uvec3 o = PyGLM_Vec_PTI_Get0(3, glm::uint, arg1); glm::uvec3 o2 = PyGLM_Vec_PTI_Get1(3, glm::uint, arg2); glm::umulExtended(o, o2, ((vec<3, glm::uint>*)arg3)->super_type, ((vec<3, glm::uint>*)arg4)->super_type); Py_RETURN_NONE; } if (PyGLM_Vec_PTI_Check0(4, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(4, glm::uint, arg2) && Py_TYPE(arg3) == &huvec4Type && Py_TYPE(arg4) == &huvec4Type) { glm::uvec4 o = PyGLM_Vec_PTI_Get0(4, glm::uint, arg1); glm::uvec4 o2 = PyGLM_Vec_PTI_Get1(4, glm::uint, arg2); glm::umulExtended(o, o2, ((vec<4, glm::uint>*)arg3)->super_type, ((vec<4, glm::uint>*)arg4)->super_type); Py_RETURN_NONE; } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for umulExtended()"); return NULL; } PyDoc_STRVAR(imulExtended_docstr, "imulExtended(x: int, y: int) -> (msb: int, lsb: int)\n" " Multiplies 32-bit integers `x` and `y`, producing a 64-bit result. The 32 least-significant\n" " bits are returned in `lsb`. The 32 most-significant bits are returned in `msb`.\n" "imulExtended(x: ivecN, y: ivecN, msb: ivecN, lsb: ivecN) -> ivecN\n" " Multiplies 32-bit integers `x` and `y`, producing a 64-bit result. The 32 least-significant\n" " bits are returned in `lsb`. The 32 most-significant bits are returned in `msb`." ); static PyObject* imulExtended_(PyObject*, PyObject* args) { PyObject* arg1, * arg2, * arg3 = NULL, * arg4 = NULL; if (!PyArg_UnpackTuple(args, "imulExtended", 2, 4, &arg1, &arg2, &arg3, &arg4)) return NULL; if (arg3 == NULL) { if (PyLong_Check(arg1) && PyLong_Check(arg2)) { int msb, lsb; glm::imulExtended(_PyGLM_Long_As_Number_No_Error(arg1), _PyGLM_Long_As_Number_No_Error(arg2), msb, lsb); return Py_BuildValue("(i,i)", msb, lsb); } } else if (arg4 != NULL) { PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_INT); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_INT); if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2) && Py_TYPE(arg3) == &hivec1Type && Py_TYPE(arg4) == &hivec1Type) { glm::ivec1 o = PyGLM_Vec_PTI_Get0(1, int, arg1); glm::ivec1 o2 = PyGLM_Vec_PTI_Get1(1, int, arg2); glm::imulExtended(o, o2, ((vec<1, int>*)arg3)->super_type, ((vec<1, int>*)arg4)->super_type); Py_RETURN_NONE; } if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2) && Py_TYPE(arg3) == &hivec2Type && Py_TYPE(arg4) == &hivec2Type) { glm::ivec2 o = PyGLM_Vec_PTI_Get0(2, int, arg1); glm::ivec2 o2 = PyGLM_Vec_PTI_Get1(2, int, arg2); glm::imulExtended(o, o2, ((vec<2, int>*)arg3)->super_type, ((vec<2, int>*)arg4)->super_type); Py_RETURN_NONE; } if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2) && Py_TYPE(arg3) == &hivec3Type && Py_TYPE(arg4) == &hivec3Type) { glm::ivec3 o = PyGLM_Vec_PTI_Get0(3, int, arg1); glm::ivec3 o2 = PyGLM_Vec_PTI_Get1(3, int, arg2); glm::imulExtended(o, o2, ((vec<3, int>*)arg3)->super_type, ((vec<3, int>*)arg4)->super_type); Py_RETURN_NONE; } if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2) && Py_TYPE(arg3) == &hivec4Type && Py_TYPE(arg4) == &hivec4Type) { glm::ivec4 o = PyGLM_Vec_PTI_Get0(4, int, arg1); glm::ivec4 o2 = PyGLM_Vec_PTI_Get1(4, int, arg2); glm::imulExtended(o, o2, ((vec<4, int>*)arg3)->super_type, ((vec<4, int>*)arg4)->super_type); Py_RETURN_NONE; } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for imulExtended()"); return NULL; } PyDoc_STRVAR(bitfieldExtract_docstr, "bitfieldExtract(value: ctypes, offset: int, bits: int) -> int\n" " Extracts bits `[offset, offset + bits - 1]` from value, returning them in the least\n" " significant bits of the result. For unsigned data types, the most significant bits of the\n" " result will be set to zero. For signed data types, the most significant bits will be set to\n" " the value of bit `offset + base - 1`. If `bits` is zero, the result will be zero. The result\n" " will be undefined if `offset` or `bits` is negative, or if the sum of `offset` and `bits` is\n" " greater than the number of bits used to store the operand.\n" " You can use `int32`, `uint32`, `int64` or `uint64` types to specify the number of bits and the\n" " sign.\n" "bitfieldExtract(value: vecN, offset: int, bits: int) -> vecN\n" " Returns `bitfieldExtract(c, offset, bits)` for every component `c` of `value`." ); static PyObject* bitfieldExtract_(PyObject*, PyObject* args) { PyObject *arg1, *arg2, *arg3; PyGLM_Arg_Unpack_3O(args, "bitfieldExtract", arg1, arg2, arg3); if (PyLong_Check(arg2) && PyLong_Check(arg3)) { int i = (int)PyLong_AS_LONG(arg2), i2 = (int)PyLong_AS_LONG(arg3); if (PyGLM_Ctypes_Check(arg1)) { if (PyGLM_Ctypes_TypeCheck(arg1, int32)) { return pack(glm::bitfieldExtract(PyGLM_Ctypes_Get(arg1, int32), i, i2)); } if (PyGLM_Ctypes_TypeCheck(arg1, uint32)) { return pack(glm::bitfieldExtract(PyGLM_Ctypes_Get(arg1, uint32), i, i2)); } if (PyGLM_Ctypes_TypeCheck(arg1, int64)) { return pack(glm::bitfieldExtract(PyGLM_Ctypes_Get(arg1, int64), i, i2)); } if (PyGLM_Ctypes_TypeCheck(arg1, uint64)) { return pack(glm::bitfieldExtract(PyGLM_Ctypes_Get(arg1, uint64), i, i2)); } } if (PyLong_Check(arg1)) { PyGLM_WARN_TYPE(PyGLM_ARGUMENT_DEPRECATION_WARNING, PyExc_DeprecationWarning, "Using bitfieldExtract(int, [...]) is deprecated. Please use ctypes-integers with 32 or 64 bits instead (e.g. glm.int32)"); int sign1 = PyLong_Sign(arg1); int overflow; if (sign1 == -1) { long l = PyLong_AsLongAndOverflow(arg1, &overflow); if (overflow) { return pack(glm::bitfieldExtract(_PyGLM_Long_As_Number_No_Error(arg1), i, i2)); } return pack(glm::bitfieldExtract(l, i, i2)); } unsigned long ul = PyLong_AsUnsignedLongAndOverflow(arg1, &overflow); if (overflow) { return pack(glm::bitfieldExtract(_PyGLM_Long_As_Number_No_Error(arg1), i, i2)); } return pack(glm::bitfieldExtract(ul, i, i2)); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I); if (PyGLM_Vec_PTI_Check0(1, int32, arg1)) { glm::vec<1, int32> o = PyGLM_Vec_PTI_Get0(1, int32, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(2, int32, arg1)) { glm::vec<2, int32> o = PyGLM_Vec_PTI_Get0(2, int32, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(3, int32, arg1)) { glm::vec<3, int32> o = PyGLM_Vec_PTI_Get0(3, int32, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(4, int32, arg1)) { glm::vec<4, int32> o = PyGLM_Vec_PTI_Get0(4, int32, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(1, uint32, arg1)) { glm::vec<1, uint32> o = PyGLM_Vec_PTI_Get0(1, uint32, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(2, uint32, arg1)) { glm::vec<2, uint32> o = PyGLM_Vec_PTI_Get0(2, uint32, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(3, uint32, arg1)) { glm::vec<3, uint32> o = PyGLM_Vec_PTI_Get0(3, uint32, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(4, uint32, arg1)) { glm::vec<4, uint32> o = PyGLM_Vec_PTI_Get0(4, uint32, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(1, int64, arg1)) { glm::vec<1, int64> o = PyGLM_Vec_PTI_Get0(1, int64, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(2, int64, arg1)) { glm::vec<2, int64> o = PyGLM_Vec_PTI_Get0(2, int64, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(3, int64, arg1)) { glm::vec<3, int64> o = PyGLM_Vec_PTI_Get0(3, int64, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(4, int64, arg1)) { glm::vec<4, int64> o = PyGLM_Vec_PTI_Get0(4, int64, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(1, uint64, arg1)) { glm::vec<1, uint64> o = PyGLM_Vec_PTI_Get0(1, uint64, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(2, uint64, arg1)) { glm::vec<2, uint64> o = PyGLM_Vec_PTI_Get0(2, uint64, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(3, uint64, arg1)) { glm::vec<3, uint64> o = PyGLM_Vec_PTI_Get0(3, uint64, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(4, uint64, arg1)) { glm::vec<4, uint64> o = PyGLM_Vec_PTI_Get0(4, uint64, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(1, int16, arg1)) { glm::vec<1, int16> o = PyGLM_Vec_PTI_Get0(1, int16, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(2, int16, arg1)) { glm::vec<2, int16> o = PyGLM_Vec_PTI_Get0(2, int16, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(3, int16, arg1)) { glm::vec<3, int16> o = PyGLM_Vec_PTI_Get0(3, int16, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(4, int16, arg1)) { glm::vec<4, int16> o = PyGLM_Vec_PTI_Get0(4, int16, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(1, uint16, arg1)) { glm::vec<1, uint16> o = PyGLM_Vec_PTI_Get0(1, uint16, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(2, uint16, arg1)) { glm::vec<2, uint16> o = PyGLM_Vec_PTI_Get0(2, uint16, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(3, uint16, arg1)) { glm::vec<3, uint16> o = PyGLM_Vec_PTI_Get0(3, uint16, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(4, uint16, arg1)) { glm::vec<4, uint16> o = PyGLM_Vec_PTI_Get0(4, uint16, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(1, int8, arg1)) { glm::vec<1, int8> o = PyGLM_Vec_PTI_Get0(1, int8, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(2, int8, arg1)) { glm::vec<2, int8> o = PyGLM_Vec_PTI_Get0(2, int8, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(3, int8, arg1)) { glm::vec<3, int8> o = PyGLM_Vec_PTI_Get0(3, int8, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(4, int8, arg1)) { glm::vec<4, int8> o = PyGLM_Vec_PTI_Get0(4, int8, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(1, uint8, arg1)) { glm::vec<1, uint8> o = PyGLM_Vec_PTI_Get0(1, uint8, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(2, uint8, arg1)) { glm::vec<2, uint8> o = PyGLM_Vec_PTI_Get0(2, uint8, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(3, uint8, arg1)) { glm::vec<3, uint8> o = PyGLM_Vec_PTI_Get0(3, uint8, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } if (PyGLM_Vec_PTI_Check0(4, uint8, arg1)) { glm::vec<4, uint8> o = PyGLM_Vec_PTI_Get0(4, uint8, arg1); return pack_vec(glm::bitfieldExtract(o, i, i2)); } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for bitfieldExtract()"); return NULL; } PyDoc_STRVAR(bitfieldInsert_docstr, "bitfieldInsert(base: ctypes, insert: ctypes, offset: int, bits: int) -> int\n" " Returns the insertion the bits least-significant bits of insert into base. The result will\n" " have `bits[offset, offset + bits - 1]` taken from `bits[0, bits - 1]` of `insert`, and all other\n" " bits taken directly from the corresponding bits of `base`. If `bits` is zero, the result will\n" " simply be `base`. The result will be undefined if `offset` or `bits` is negative, or if the sum of\n" " `offset` and `bits` is greater than the number of bits used to store the operand.\n" " You can use `int32`, `uint32`, `int64` or `uint64` types to specify the number of bits and the\n" " sign.\n" "bitfieldInsert(base: vecN, insert: vecN, offset: int, bits: int) -> vecN\n" " Returns `bitfieldInsert(base[i], insert[i], offset, bits)` for every index `i`." ); static PyObject* bitfieldInsert_(PyObject*, PyObject* args) { PyObject *arg1, *arg2, *arg3, *arg4; PyGLM_Arg_Unpack_4O(args, "bitfieldInsert", arg1, arg2, arg3, arg4); if (PyLong_Check(arg3) && PyLong_Check(arg4)) { int i = (int)PyLong_AS_LONG(arg3), i2 = (int)PyLong_AS_LONG(arg4); if (PyGLM_Ctypes_Check(arg1) && PyGLM_Ctypes_Check(arg2)) { if (PyGLM_Ctypes_TypeCheck(arg1, int32) && PyGLM_Ctypes_TypeCheck(arg2, int32)) { return pack(glm::bitfieldInsert(PyGLM_Ctypes_Get(arg1, int32), PyGLM_Ctypes_Get(arg2, int32), i, i2)); } if (PyGLM_Ctypes_TypeCheck(arg1, uint32) && PyGLM_Ctypes_TypeCheck(arg2, uint32)) { return pack(glm::bitfieldInsert(PyGLM_Ctypes_Get(arg1, uint32), PyGLM_Ctypes_Get(arg2, uint32), i, i2)); } if (PyGLM_Ctypes_TypeCheck(arg1, int64) && PyGLM_Ctypes_TypeCheck(arg2, int64)) { return pack(glm::bitfieldInsert(PyGLM_Ctypes_Get(arg1, int64), PyGLM_Ctypes_Get(arg2, int64), i, i2)); } if (PyGLM_Ctypes_TypeCheck(arg1, uint64) && PyGLM_Ctypes_TypeCheck(arg2, uint64)) { return pack(glm::bitfieldInsert(PyGLM_Ctypes_Get(arg1, uint64), PyGLM_Ctypes_Get(arg2, uint64), i, i2)); } } if (PyLong_Check(arg1) && PyLong_Check(arg2)) { PyGLM_WARN_TYPE(PyGLM_ARGUMENT_DEPRECATION_WARNING, PyExc_DeprecationWarning, "Using bitfieldInsert(int, int, [...]) is deprecated. Please use ctypes-integers with 32 or 64 bits instead (e.g. glm.int32)"); int sign1 = PyLong_Sign(arg1); int sign2 = PyLong_Sign(arg2); int overflow1, overflow2; if (sign1 == -1 || sign2 == -1) { long l1 = PyLong_AsLongAndOverflow(arg1, &overflow1); long l2 = PyLong_AsLongAndOverflow(arg2, &overflow2); if (overflow1 || overflow2) { return pack(glm::bitfieldInsert(_PyGLM_Long_As_Number_No_Error(arg1), _PyGLM_Long_As_Number_No_Error(arg2), i, i2)); } return pack(glm::bitfieldInsert(l1, l2, i, i2)); } unsigned long ul1 = PyLong_AsUnsignedLongAndOverflow(arg1, &overflow1); unsigned long ul2 = PyLong_AsUnsignedLongAndOverflow(arg2, &overflow2); if (overflow1 || overflow2) { return pack(glm::bitfieldInsert(_PyGLM_Long_As_Number_No_Error(arg1), _PyGLM_Long_As_Number_No_Error(arg2), i, i2)); } return pack(glm::bitfieldInsert(ul1, ul2, i, i2)); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I32 | PyGLM_DT_I64); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I32 | PyGLM_DT_I64); if (PyGLM_Vec_PTI_Check0(1, int32, arg1) && PyGLM_Vec_PTI_Check1(1, int32, arg2)) { glm::vec<1, int32> o = PyGLM_Vec_PTI_Get0(1, int32, arg1); glm::vec<1, int32> o2 = PyGLM_Vec_PTI_Get1(1, int32, arg2); return pack_vec(glm::bitfieldInsert(o, o2, i, i2)); } if (PyGLM_Vec_PTI_Check0(2, int32, arg1) && PyGLM_Vec_PTI_Check1(2, int32, arg2)) { glm::vec<2, int32> o = PyGLM_Vec_PTI_Get0(2, int32, arg1); glm::vec<2, int32> o2 = PyGLM_Vec_PTI_Get1(2, int32, arg2); return pack_vec(glm::bitfieldInsert(o, o2, i, i2)); } if (PyGLM_Vec_PTI_Check0(3, int32, arg1) && PyGLM_Vec_PTI_Check1(3, int32, arg2)) { glm::vec<3, int32> o = PyGLM_Vec_PTI_Get0(3, int32, arg1); glm::vec<3, int32> o2 = PyGLM_Vec_PTI_Get1(3, int32, arg2); return pack_vec(glm::bitfieldInsert(o, o2, i, i2)); } if (PyGLM_Vec_PTI_Check0(4, int32, arg1) && PyGLM_Vec_PTI_Check1(4, int32, arg2)) { glm::vec<4, int32> o = PyGLM_Vec_PTI_Get0(4, int32, arg1); glm::vec<4, int32> o2 = PyGLM_Vec_PTI_Get1(4, int32, arg2); return pack_vec(glm::bitfieldInsert(o, o2, i, i2)); } if (PyGLM_Vec_PTI_Check0(1, uint32, arg1) && PyGLM_Vec_PTI_Check1(1, uint32, arg2)) { glm::vec<1, uint32> o = PyGLM_Vec_PTI_Get0(1, uint32, arg1); glm::vec<1, uint32> o2 = PyGLM_Vec_PTI_Get1(1, uint32, arg2); return pack_vec(glm::bitfieldInsert(o, o2, i, i2)); } if (PyGLM_Vec_PTI_Check0(2, uint32, arg1) && PyGLM_Vec_PTI_Check1(2, uint32, arg2)) { glm::vec<2, uint32> o = PyGLM_Vec_PTI_Get0(2, uint32, arg1); glm::vec<2, uint32> o2 = PyGLM_Vec_PTI_Get1(2, uint32, arg2); return pack_vec(glm::bitfieldInsert(o, o2, i, i2)); } if (PyGLM_Vec_PTI_Check0(3, uint32, arg1) && PyGLM_Vec_PTI_Check1(3, uint32, arg2)) { glm::vec<3, uint32> o = PyGLM_Vec_PTI_Get0(3, uint32, arg1); glm::vec<3, uint32> o2 = PyGLM_Vec_PTI_Get1(3, uint32, arg2); return pack_vec(glm::bitfieldInsert(o, o2, i, i2)); } if (PyGLM_Vec_PTI_Check0(4, uint32, arg1) && PyGLM_Vec_PTI_Check1(4, uint32, arg2)) { glm::vec<4, uint32> o = PyGLM_Vec_PTI_Get0(4, uint32, arg1); glm::vec<4, uint32> o2 = PyGLM_Vec_PTI_Get1(4, uint32, arg2); return pack_vec(glm::bitfieldInsert(o, o2, i, i2)); } if (PyGLM_Vec_PTI_Check0(1, int64, arg1) && PyGLM_Vec_PTI_Check1(1, int64, arg2)) { glm::vec<1, int64> o = PyGLM_Vec_PTI_Get0(1, int64, arg1); glm::vec<1, int64> o2 = PyGLM_Vec_PTI_Get1(1, int64, arg2); return pack_vec(glm::bitfieldInsert(o, o2, i, i2)); } if (PyGLM_Vec_PTI_Check0(2, int64, arg1) && PyGLM_Vec_PTI_Check1(2, int64, arg2)) { glm::vec<2, int64> o = PyGLM_Vec_PTI_Get0(2, int64, arg1); glm::vec<2, int64> o2 = PyGLM_Vec_PTI_Get1(2, int64, arg2); return pack_vec(glm::bitfieldInsert(o, o2, i, i2)); } if (PyGLM_Vec_PTI_Check0(3, int64, arg1) && PyGLM_Vec_PTI_Check1(3, int64, arg2)) { glm::vec<3, int64> o = PyGLM_Vec_PTI_Get0(3, int64, arg1); glm::vec<3, int64> o2 = PyGLM_Vec_PTI_Get1(3, int64, arg2); return pack_vec(glm::bitfieldInsert(o, o2, i, i2)); } if (PyGLM_Vec_PTI_Check0(4, int64, arg1) && PyGLM_Vec_PTI_Check1(4, int64, arg2)) { glm::vec<4, int64> o = PyGLM_Vec_PTI_Get0(4, int64, arg1); glm::vec<4, int64> o2 = PyGLM_Vec_PTI_Get1(4, int64, arg2); return pack_vec(glm::bitfieldInsert(o, o2, i, i2)); } if (PyGLM_Vec_PTI_Check0(1, uint64, arg1) && PyGLM_Vec_PTI_Check1(1, uint64, arg2)) { glm::vec<1, uint64> o = PyGLM_Vec_PTI_Get0(1, uint64, arg1); glm::vec<1, uint64> o2 = PyGLM_Vec_PTI_Get1(1, uint64, arg2); return pack_vec(glm::bitfieldInsert(o, o2, i, i2)); } if (PyGLM_Vec_PTI_Check0(2, uint64, arg1) && PyGLM_Vec_PTI_Check1(2, uint64, arg2)) { glm::vec<2, uint64> o = PyGLM_Vec_PTI_Get0(2, uint64, arg1); glm::vec<2, uint64> o2 = PyGLM_Vec_PTI_Get1(2, uint64, arg2); return pack_vec(glm::bitfieldInsert(o, o2, i, i2)); } if (PyGLM_Vec_PTI_Check0(3, uint64, arg1) && PyGLM_Vec_PTI_Check1(3, uint64, arg2)) { glm::vec<3, uint64> o = PyGLM_Vec_PTI_Get0(3, uint64, arg1); glm::vec<3, uint64> o2 = PyGLM_Vec_PTI_Get1(3, uint64, arg2); return pack_vec(glm::bitfieldInsert(o, o2, i, i2)); } if (PyGLM_Vec_PTI_Check0(4, uint64, arg1) && PyGLM_Vec_PTI_Check1(4, uint64, arg2)) { glm::vec<4, uint64> o = PyGLM_Vec_PTI_Get0(4, uint64, arg1); glm::vec<4, uint64> o2 = PyGLM_Vec_PTI_Get1(4, uint64, arg2); return pack_vec(glm::bitfieldInsert(o, o2, i, i2)); } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for bitfieldInsert()"); return NULL; } PyDoc_STRVAR(bitfieldReverse_docstr, "bitfieldReverse(value: ctypes) -> int\n" " Returns the reversal of the bits of `value`. The bit numbered `n` of the result will be taken\n" " from `bit(bits - 1) - n` of `value`, where `bits` is the total number of bits used to represent\n" " `value`. You can use `int32`, `uint32`, `int64` or `uint64` types to specify the number of bits\n" " and the sign.\n" "bitfieldReverse(value: vecN) -> vecN\n" " Returns the reversal of the bits of `value`. The bit numbered `n` of the result will be taken\n" " from `bit(bits - 1) - n` of `value`, where `bits` is the total number of bits used to represent\n" " `value`." ); static PyObject* bitfieldReverse_(PyObject*, PyObject* arg) { if (PyGLM_Ctypes_Check(arg)) { if (PyGLM_Ctypes_TypeCheck(arg, int32)) { return pack(glm::bitfieldReverse(PyGLM_Ctypes_Get(arg, int32))); } if (PyGLM_Ctypes_TypeCheck(arg, uint32)) { return pack(glm::bitfieldReverse(PyGLM_Ctypes_Get(arg, uint32))); } if (PyGLM_Ctypes_TypeCheck(arg, int64)) { return pack(glm::bitfieldReverse(PyGLM_Ctypes_Get(arg, int64))); } if (PyGLM_Ctypes_TypeCheck(arg, uint64)) { return pack(glm::bitfieldReverse(PyGLM_Ctypes_Get(arg, uint64))); } } if (PyLong_Check(arg)) { PyGLM_WARN_TYPE(PyGLM_ARGUMENT_DEPRECATION_WARNING, PyExc_DeprecationWarning, "Using bitfieldReverse(int) is deprecated. Please use ctypes-integers with 32 or 64 bits instead (e.g. glm.int32)"); int sign1 = PyLong_Sign(arg); int overflow; if (sign1 == -1) { long l = PyLong_AsLongAndOverflow(arg, &overflow); if (overflow) { return pack(glm::bitfieldReverse(_PyGLM_Long_As_Number_No_Error(arg))); } return pack(glm::bitfieldReverse(l)); } unsigned long ul = PyLong_AsUnsignedLongAndOverflow(arg, &overflow); if (overflow) { return pack(glm::bitfieldReverse(_PyGLM_Long_As_Number_No_Error(arg))); } return pack(glm::bitfieldReverse(ul)); } PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I32 | PyGLM_DT_I64); if (PyGLM_Vec_PTI_Check0(1, int32, arg)) { return pack_vec(glm::bitfieldReverse(PyGLM_Vec_PTI_Get0(1, int32, arg))); } if (PyGLM_Vec_PTI_Check0(2, int32, arg)) { return pack_vec(glm::bitfieldReverse(PyGLM_Vec_PTI_Get0(2, int32, arg))); } if (PyGLM_Vec_PTI_Check0(3, int32, arg)) { return pack_vec(glm::bitfieldReverse(PyGLM_Vec_PTI_Get0(3, int32, arg))); } if (PyGLM_Vec_PTI_Check0(4, int32, arg)) { return pack_vec(glm::bitfieldReverse(PyGLM_Vec_PTI_Get0(4, int32, arg))); } if (PyGLM_Vec_PTI_Check0(1, uint32, arg)) { return pack_vec(glm::bitfieldReverse(PyGLM_Vec_PTI_Get0(1, uint32, arg))); } if (PyGLM_Vec_PTI_Check0(2, uint32, arg)) { return pack_vec(glm::bitfieldReverse(PyGLM_Vec_PTI_Get0(2, uint32, arg))); } if (PyGLM_Vec_PTI_Check0(3, uint32, arg)) { return pack_vec(glm::bitfieldReverse(PyGLM_Vec_PTI_Get0(3, uint32, arg))); } if (PyGLM_Vec_PTI_Check0(4, uint32, arg)) { return pack_vec(glm::bitfieldReverse(PyGLM_Vec_PTI_Get0(4, uint32, arg))); } if (PyGLM_Vec_PTI_Check0(1, int64, arg)) { return pack_vec(glm::bitfieldReverse(PyGLM_Vec_PTI_Get0(1, int64, arg))); } if (PyGLM_Vec_PTI_Check0(2, int64, arg)) { return pack_vec(glm::bitfieldReverse(PyGLM_Vec_PTI_Get0(2, int64, arg))); } if (PyGLM_Vec_PTI_Check0(3, int64, arg)) { return pack_vec(glm::bitfieldReverse(PyGLM_Vec_PTI_Get0(3, int64, arg))); } if (PyGLM_Vec_PTI_Check0(4, int64, arg)) { return pack_vec(glm::bitfieldReverse(PyGLM_Vec_PTI_Get0(4, int64, arg))); } if (PyGLM_Vec_PTI_Check0(1, uint64, arg)) { return pack_vec(glm::bitfieldReverse(PyGLM_Vec_PTI_Get0(1, uint64, arg))); } if (PyGLM_Vec_PTI_Check0(2, uint64, arg)) { return pack_vec(glm::bitfieldReverse(PyGLM_Vec_PTI_Get0(2, uint64, arg))); } if (PyGLM_Vec_PTI_Check0(3, uint64, arg)) { return pack_vec(glm::bitfieldReverse(PyGLM_Vec_PTI_Get0(3, uint64, arg))); } if (PyGLM_Vec_PTI_Check0(4, uint64, arg)) { return pack_vec(glm::bitfieldReverse(PyGLM_Vec_PTI_Get0(4, uint64, arg))); } PyGLM_TYPEERROR_O("invalid argument type for bitfieldReverse(): ", arg); return NULL; } PyDoc_STRVAR(bitCount_docstr, "bitCount(v: int) -> int\n" " Returns the number of bits set to `1` in the binary representation of `value`.\n" "bitCount(v: vecN) -> ivecN\n" " For every component `c` of `v`:\n" " Returns the number of bits set to `1` in the binary representation of `c`." ); static PyObject* bitCount_(PyObject*, PyObject* arg) { if (PyLong_Check(arg)) { int sign1 = PyLong_Sign(arg); int overflow; if (sign1 == -1) { long l = PyLong_AsLongAndOverflow(arg, &overflow); if (overflow) { return pack(glm::bitCount(_PyGLM_Long_As_Number_No_Error(arg))); } return pack(glm::bitCount(l)); } unsigned long ul = PyLong_AsUnsignedLongAndOverflow(arg, &overflow); if (overflow) { return pack(glm::bitCount(_PyGLM_Long_As_Number_No_Error(arg))); } return pack(glm::bitCount(ul)); } PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I); if (PyGLM_Vec_PTI_Check0(1, int32, arg)) { glm::vec<1, int32> o = PyGLM_Vec_PTI_Get0(1, int32, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(2, int32, arg)) { glm::vec<2, int32> o = PyGLM_Vec_PTI_Get0(2, int32, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(3, int32, arg)) { glm::vec<3, int32> o = PyGLM_Vec_PTI_Get0(3, int32, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(4, int32, arg)) { glm::vec<4, int32> o = PyGLM_Vec_PTI_Get0(4, int32, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(1, uint32, arg)) { glm::vec<1, uint32> o = PyGLM_Vec_PTI_Get0(1, uint32, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(2, uint32, arg)) { glm::vec<2, uint32> o = PyGLM_Vec_PTI_Get0(2, uint32, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(3, uint32, arg)) { glm::vec<3, uint32> o = PyGLM_Vec_PTI_Get0(3, uint32, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(4, uint32, arg)) { glm::vec<4, uint32> o = PyGLM_Vec_PTI_Get0(4, uint32, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(1, int64, arg)) { glm::vec<1, int64> o = PyGLM_Vec_PTI_Get0(1, int64, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(2, int64, arg)) { glm::vec<2, int64> o = PyGLM_Vec_PTI_Get0(2, int64, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(3, int64, arg)) { glm::vec<3, int64> o = PyGLM_Vec_PTI_Get0(3, int64, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(4, int64, arg)) { glm::vec<4, int64> o = PyGLM_Vec_PTI_Get0(4, int64, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(1, uint64, arg)) { glm::vec<1, uint64> o = PyGLM_Vec_PTI_Get0(1, uint64, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(2, uint64, arg)) { glm::vec<2, uint64> o = PyGLM_Vec_PTI_Get0(2, uint64, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(3, uint64, arg)) { glm::vec<3, uint64> o = PyGLM_Vec_PTI_Get0(3, uint64, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(4, uint64, arg)) { glm::vec<4, uint64> o = PyGLM_Vec_PTI_Get0(4, uint64, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(1, int16, arg)) { glm::vec<1, int16> o = PyGLM_Vec_PTI_Get0(1, int16, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(2, int16, arg)) { glm::vec<2, int16> o = PyGLM_Vec_PTI_Get0(2, int16, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(3, int16, arg)) { glm::vec<3, int16> o = PyGLM_Vec_PTI_Get0(3, int16, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(4, int16, arg)) { glm::vec<4, int16> o = PyGLM_Vec_PTI_Get0(4, int16, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(1, uint16, arg)) { glm::vec<1, uint16> o = PyGLM_Vec_PTI_Get0(1, uint16, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(2, uint16, arg)) { glm::vec<2, uint16> o = PyGLM_Vec_PTI_Get0(2, uint16, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(3, uint16, arg)) { glm::vec<3, uint16> o = PyGLM_Vec_PTI_Get0(3, uint16, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(4, uint16, arg)) { glm::vec<4, uint16> o = PyGLM_Vec_PTI_Get0(4, uint16, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(1, int8, arg)) { glm::vec<1, int8> o = PyGLM_Vec_PTI_Get0(1, int8, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(2, int8, arg)) { glm::vec<2, int8> o = PyGLM_Vec_PTI_Get0(2, int8, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(3, int8, arg)) { glm::vec<3, int8> o = PyGLM_Vec_PTI_Get0(3, int8, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(4, int8, arg)) { glm::vec<4, int8> o = PyGLM_Vec_PTI_Get0(4, int8, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(1, uint8, arg)) { glm::vec<1, uint8> o = PyGLM_Vec_PTI_Get0(1, uint8, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(2, uint8, arg)) { glm::vec<2, uint8> o = PyGLM_Vec_PTI_Get0(2, uint8, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(3, uint8, arg)) { glm::vec<3, uint8> o = PyGLM_Vec_PTI_Get0(3, uint8, arg); return pack_vec(glm::bitCount(o)); } if (PyGLM_Vec_PTI_Check0(4, uint8, arg)) { glm::vec<4, uint8> o = PyGLM_Vec_PTI_Get0(4, uint8, arg); return pack_vec(glm::bitCount(o)); } PyGLM_TYPEERROR_O("invalid argument type for bitCount(): ", arg); return NULL; } PyDoc_STRVAR(findLSB_docstr, "findLSB(value: int) -> int\n" " Returns the bit number of the least significant bit set to `1` in the binary representation\n" " of `value`. If `value` is zero, `-1` will be returned.\n" "findLSB(value: vecN) -> ivecN\n" " Returns the bit number of the least significant bit set to `1` in the binary representation\n" " of `value`. If `value` is zero, `-1` will be returned." ); static PyObject* findLSB_(PyObject*, PyObject* arg) { if (PyLong_Check(arg)) { int sign1 = PyLong_Sign(arg); int overflow; if (sign1 == -1) { long l = PyLong_AsLongAndOverflow(arg, &overflow); if (overflow) { return pack(glm::findLSB(_PyGLM_Long_As_Number_No_Error(arg))); } return pack(glm::findLSB(l)); } unsigned long ul = PyLong_AsUnsignedLongAndOverflow(arg, &overflow); if (overflow) { return pack(glm::findLSB(_PyGLM_Long_As_Number_No_Error(arg))); } return pack(glm::findLSB(ul)); } PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I); if (PyGLM_Vec_PTI_Check0(1, int32, arg)) { glm::vec<1, int32> o = PyGLM_Vec_PTI_Get0(1, int32, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(2, int32, arg)) { glm::vec<2, int32> o = PyGLM_Vec_PTI_Get0(2, int32, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(3, int32, arg)) { glm::vec<3, int32> o = PyGLM_Vec_PTI_Get0(3, int32, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(4, int32, arg)) { glm::vec<4, int32> o = PyGLM_Vec_PTI_Get0(4, int32, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(1, uint32, arg)) { glm::vec<1, uint32> o = PyGLM_Vec_PTI_Get0(1, uint32, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(2, uint32, arg)) { glm::vec<2, uint32> o = PyGLM_Vec_PTI_Get0(2, uint32, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(3, uint32, arg)) { glm::vec<3, uint32> o = PyGLM_Vec_PTI_Get0(3, uint32, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(4, uint32, arg)) { glm::vec<4, uint32> o = PyGLM_Vec_PTI_Get0(4, uint32, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(1, int64, arg)) { glm::vec<1, int64> o = PyGLM_Vec_PTI_Get0(1, int64, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(2, int64, arg)) { glm::vec<2, int64> o = PyGLM_Vec_PTI_Get0(2, int64, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(3, int64, arg)) { glm::vec<3, int64> o = PyGLM_Vec_PTI_Get0(3, int64, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(4, int64, arg)) { glm::vec<4, int64> o = PyGLM_Vec_PTI_Get0(4, int64, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(1, uint64, arg)) { glm::vec<1, uint64> o = PyGLM_Vec_PTI_Get0(1, uint64, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(2, uint64, arg)) { glm::vec<2, uint64> o = PyGLM_Vec_PTI_Get0(2, uint64, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(3, uint64, arg)) { glm::vec<3, uint64> o = PyGLM_Vec_PTI_Get0(3, uint64, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(4, uint64, arg)) { glm::vec<4, uint64> o = PyGLM_Vec_PTI_Get0(4, uint64, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(1, int16, arg)) { glm::vec<1, int16> o = PyGLM_Vec_PTI_Get0(1, int16, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(2, int16, arg)) { glm::vec<2, int16> o = PyGLM_Vec_PTI_Get0(2, int16, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(3, int16, arg)) { glm::vec<3, int16> o = PyGLM_Vec_PTI_Get0(3, int16, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(4, int16, arg)) { glm::vec<4, int16> o = PyGLM_Vec_PTI_Get0(4, int16, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(1, uint16, arg)) { glm::vec<1, uint16> o = PyGLM_Vec_PTI_Get0(1, uint16, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(2, uint16, arg)) { glm::vec<2, uint16> o = PyGLM_Vec_PTI_Get0(2, uint16, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(3, uint16, arg)) { glm::vec<3, uint16> o = PyGLM_Vec_PTI_Get0(3, uint16, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(4, uint16, arg)) { glm::vec<4, uint16> o = PyGLM_Vec_PTI_Get0(4, uint16, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(1, int8, arg)) { glm::vec<1, int8> o = PyGLM_Vec_PTI_Get0(1, int8, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(2, int8, arg)) { glm::vec<2, int8> o = PyGLM_Vec_PTI_Get0(2, int8, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(3, int8, arg)) { glm::vec<3, int8> o = PyGLM_Vec_PTI_Get0(3, int8, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(4, int8, arg)) { glm::vec<4, int8> o = PyGLM_Vec_PTI_Get0(4, int8, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(1, uint8, arg)) { glm::vec<1, uint8> o = PyGLM_Vec_PTI_Get0(1, uint8, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(2, uint8, arg)) { glm::vec<2, uint8> o = PyGLM_Vec_PTI_Get0(2, uint8, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(3, uint8, arg)) { glm::vec<3, uint8> o = PyGLM_Vec_PTI_Get0(3, uint8, arg); return pack_vec(glm::findLSB(o)); } if (PyGLM_Vec_PTI_Check0(4, uint8, arg)) { glm::vec<4, uint8> o = PyGLM_Vec_PTI_Get0(4, uint8, arg); return pack_vec(glm::findLSB(o)); } PyGLM_TYPEERROR_O("invalid argument type for findLSB(): ", arg); return NULL; } PyDoc_STRVAR(findMSB_docstr, "findMSB(value: int) -> int\n" " Returns the bit number of the most significant bit in the binary representation of `value`.\n" " For positive integers, the result will be the bit number of the most significant bit set to\n" " `1`. For negative integers, the result will be the bit number of the most significant bit set\n" " to `0`. For a value of zero or negative one, `-1` will be returned.\n" "findMSB(value: vecN) -> ivecN\n" " Returns the bit number of the least significant bit set to `1` in the binary representation\n" " of `value`. If `value` is zero, `-1` will be returned." ); static PyObject* findMSB_(PyObject*, PyObject* arg) { if (PyLong_Check(arg)) { int sign1 = PyLong_Sign(arg); int overflow; if (sign1 == -1) { long l = PyLong_AsLongAndOverflow(arg, &overflow); if (overflow) { return pack(glm::findMSB(_PyGLM_Long_As_Number_No_Error(arg))); } return pack(glm::findMSB(l)); } unsigned long ul = PyLong_AsUnsignedLongAndOverflow(arg, &overflow); if (overflow) { return pack(glm::findMSB(_PyGLM_Long_As_Number_No_Error(arg))); } return pack(glm::findMSB(ul)); } PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I); if (PyGLM_Vec_PTI_Check0(1, int32, arg)) { glm::vec<1, int32> o = PyGLM_Vec_PTI_Get0(1, int32, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(2, int32, arg)) { glm::vec<2, int32> o = PyGLM_Vec_PTI_Get0(2, int32, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(3, int32, arg)) { glm::vec<3, int32> o = PyGLM_Vec_PTI_Get0(3, int32, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(4, int32, arg)) { glm::vec<4, int32> o = PyGLM_Vec_PTI_Get0(4, int32, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(1, uint32, arg)) { glm::vec<1, uint32> o = PyGLM_Vec_PTI_Get0(1, uint32, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(2, uint32, arg)) { glm::vec<2, uint32> o = PyGLM_Vec_PTI_Get0(2, uint32, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(3, uint32, arg)) { glm::vec<3, uint32> o = PyGLM_Vec_PTI_Get0(3, uint32, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(4, uint32, arg)) { glm::vec<4, uint32> o = PyGLM_Vec_PTI_Get0(4, uint32, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(1, int64, arg)) { glm::vec<1, int64> o = PyGLM_Vec_PTI_Get0(1, int64, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(2, int64, arg)) { glm::vec<2, int64> o = PyGLM_Vec_PTI_Get0(2, int64, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(3, int64, arg)) { glm::vec<3, int64> o = PyGLM_Vec_PTI_Get0(3, int64, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(4, int64, arg)) { glm::vec<4, int64> o = PyGLM_Vec_PTI_Get0(4, int64, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(1, uint64, arg)) { glm::vec<1, uint64> o = PyGLM_Vec_PTI_Get0(1, uint64, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(2, uint64, arg)) { glm::vec<2, uint64> o = PyGLM_Vec_PTI_Get0(2, uint64, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(3, uint64, arg)) { glm::vec<3, uint64> o = PyGLM_Vec_PTI_Get0(3, uint64, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(4, uint64, arg)) { glm::vec<4, uint64> o = PyGLM_Vec_PTI_Get0(4, uint64, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(1, int16, arg)) { glm::vec<1, int16> o = PyGLM_Vec_PTI_Get0(1, int16, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(2, int16, arg)) { glm::vec<2, int16> o = PyGLM_Vec_PTI_Get0(2, int16, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(3, int16, arg)) { glm::vec<3, int16> o = PyGLM_Vec_PTI_Get0(3, int16, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(4, int16, arg)) { glm::vec<4, int16> o = PyGLM_Vec_PTI_Get0(4, int16, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(1, uint16, arg)) { glm::vec<1, uint16> o = PyGLM_Vec_PTI_Get0(1, uint16, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(2, uint16, arg)) { glm::vec<2, uint16> o = PyGLM_Vec_PTI_Get0(2, uint16, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(3, uint16, arg)) { glm::vec<3, uint16> o = PyGLM_Vec_PTI_Get0(3, uint16, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(4, uint16, arg)) { glm::vec<4, uint16> o = PyGLM_Vec_PTI_Get0(4, uint16, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(1, int8, arg)) { glm::vec<1, int8> o = PyGLM_Vec_PTI_Get0(1, int8, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(2, int8, arg)) { glm::vec<2, int8> o = PyGLM_Vec_PTI_Get0(2, int8, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(3, int8, arg)) { glm::vec<3, int8> o = PyGLM_Vec_PTI_Get0(3, int8, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(4, int8, arg)) { glm::vec<4, int8> o = PyGLM_Vec_PTI_Get0(4, int8, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(1, uint8, arg)) { glm::vec<1, uint8> o = PyGLM_Vec_PTI_Get0(1, uint8, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(2, uint8, arg)) { glm::vec<2, uint8> o = PyGLM_Vec_PTI_Get0(2, uint8, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(3, uint8, arg)) { glm::vec<3, uint8> o = PyGLM_Vec_PTI_Get0(3, uint8, arg); return pack_vec(glm::findMSB(o)); } if (PyGLM_Vec_PTI_Check0(4, uint8, arg)) { glm::vec<4, uint8> o = PyGLM_Vec_PTI_Get0(4, uint8, arg); return pack_vec(glm::findMSB(o)); } PyGLM_TYPEERROR_O("invalid argument type for findMSB(): ", arg); return NULL; } #define FUNC_INTEGER_METHODS \ { "uaddCarry", (PyCFunction)uaddCarry_, METH_VARARGS, uaddCarry_docstr }, \ { "usubBorrow", (PyCFunction)usubBorrow_, METH_VARARGS, usubBorrow_docstr }, \ { "umulExtended", (PyCFunction)umulExtended_, METH_VARARGS, umulExtended_docstr }, \ { "imulExtended", (PyCFunction)imulExtended_, METH_VARARGS, imulExtended_docstr }, \ { "bitfieldExtract", (PyCFunction)bitfieldExtract_, METH_VARARGS, bitfieldExtract_docstr }, \ { "bitfieldInsert", (PyCFunction)bitfieldInsert_, METH_VARARGS, bitfieldInsert_docstr }, \ { "bitfieldReverse", (PyCFunction)bitfieldReverse_, METH_O, bitfieldReverse_docstr }, \ { "bitCount", (PyCFunction)bitCount_, METH_O, bitCount_docstr }, \ { "findLSB", (PyCFunction)findLSB_, METH_O, findLSB_docstr }, \ { "findMSB", (PyCFunction)findMSB_, METH_O, findMSB_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/detail/func_matrix.h000066400000000000000000000142561511156275200252610ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" #include "../function_generator_macros.h" PyDoc_STRVAR(outerProduct_docstr, "outerProduct(c: vecC, r: vecR) -> matRxC\n" " Treats the first parameter `c` as a column vector and the second parameter `r` as a row vector\n" " and does a linear algebraic matrix multiply `c * r`." ); static PyObject* outerProduct_(PyObject*, PyObject* args) { PyObject *arg1, *arg2; PyGLM_Arg_Unpack_2O(args, "outerProduct", arg1, arg2); PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { glm::vec2 o = PyGLM_Vec_PTI_Get0(2, float, arg1); glm::vec2 o2 = PyGLM_Vec_PTI_Get1(2, float, arg2); return pack(glm::outerProduct(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { glm::vec2 o = PyGLM_Vec_PTI_Get0(2, float, arg1); glm::vec3 o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); return pack(glm::outerProduct(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { glm::vec2 o = PyGLM_Vec_PTI_Get0(2, float, arg1); glm::vec4 o2 = PyGLM_Vec_PTI_Get1(4, float, arg2); return pack(glm::outerProduct(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { glm::vec3 o = PyGLM_Vec_PTI_Get0(3, float, arg1); glm::vec2 o2 = PyGLM_Vec_PTI_Get1(2, float, arg2); return pack(glm::outerProduct(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { glm::vec3 o = PyGLM_Vec_PTI_Get0(3, float, arg1); glm::vec3 o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); return pack(glm::outerProduct(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { glm::vec3 o = PyGLM_Vec_PTI_Get0(3, float, arg1); glm::vec4 o2 = PyGLM_Vec_PTI_Get1(4, float, arg2); return pack(glm::outerProduct(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { glm::vec4 o = PyGLM_Vec_PTI_Get0(4, float, arg1); glm::vec2 o2 = PyGLM_Vec_PTI_Get1(2, float, arg2); return pack(glm::outerProduct(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { glm::vec4 o = PyGLM_Vec_PTI_Get0(4, float, arg1); glm::vec3 o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); return pack(glm::outerProduct(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { glm::vec4 o = PyGLM_Vec_PTI_Get0(4, float, arg1); glm::vec4 o2 = PyGLM_Vec_PTI_Get1(4, float, arg2); return pack(glm::outerProduct(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { glm::dvec2 o = PyGLM_Vec_PTI_Get0(2, double, arg1); glm::dvec2 o2 = PyGLM_Vec_PTI_Get1(2, double, arg2); return pack(glm::outerProduct(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { glm::dvec2 o = PyGLM_Vec_PTI_Get0(2, double, arg1); glm::dvec3 o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); return pack(glm::outerProduct(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { glm::dvec2 o = PyGLM_Vec_PTI_Get0(2, double, arg1); glm::dvec4 o2 = PyGLM_Vec_PTI_Get1(4, double, arg2); return pack(glm::outerProduct(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { glm::dvec3 o = PyGLM_Vec_PTI_Get0(3, double, arg1); glm::dvec2 o2 = PyGLM_Vec_PTI_Get1(2, double, arg2); return pack(glm::outerProduct(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { glm::dvec3 o = PyGLM_Vec_PTI_Get0(3, double, arg1); glm::dvec3 o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); return pack(glm::outerProduct(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { glm::dvec3 o = PyGLM_Vec_PTI_Get0(3, double, arg1); glm::dvec4 o2 = PyGLM_Vec_PTI_Get1(4, double, arg2); return pack(glm::outerProduct(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { glm::dvec4 o = PyGLM_Vec_PTI_Get0(4, double, arg1); glm::dvec2 o2 = PyGLM_Vec_PTI_Get1(2, double, arg2); return pack(glm::outerProduct(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { glm::dvec4 o = PyGLM_Vec_PTI_Get0(4, double, arg1); glm::dvec3 o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); return pack(glm::outerProduct(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { glm::dvec4 o = PyGLM_Vec_PTI_Get0(4, double, arg1); glm::dvec4 o2 = PyGLM_Vec_PTI_Get1(4, double, arg2); return pack(glm::outerProduct(o, o2)); } PyGLM_TYPEERROR_2O("invalid argument type(s) for outerProduct(): ", arg1, arg2); return NULL; } PyDoc_STRVAR(matrixCompMult_docstr, "matrixCompMult(x: matNxM, y: matNxM) -> matNxM\n" " Multiply matrix `x` by matrix `y` component-wise, i.e., `result[i][j]` is the scalar product of\n" " `x[i][j]` and `y[i][j]`." ); PyGLM_MAKE_GLM_FUNC_MM__tfF(matrixCompMult) PyDoc_STRVAR(transpose_docstr, "transpose(x: matNxM) -> matMxN\n" " Returns the transposed matrix of `x`." ); PyGLM_MAKE_GLM_FUNC_M(transpose) PyDoc_STRVAR(determinant_docstr, "determinant(m: matSxS) -> float\n" " Return the determinant of a squared matrix." ); PyGLM_MAKE_GLM_FUNC_S__tfF(determinant) PyDoc_STRVAR(inverse_docstr, "inverse(m: matSxS) -> matSxS\n" " Return the inverse of a squared matrix.\n" "inverse(q: quat) -> quat\n" " Return the inverse of a quaternion." ); PyGLM_MAKE_GLM_FUNC_S_Q__tfF(inverse) #define FUNC_MATRIX_METHODS \ { "matrixCompMult", (PyCFunction)matrixCompMult_, METH_VARARGS, matrixCompMult_docstr }, \ { "outerProduct", (PyCFunction)outerProduct_, METH_VARARGS, outerProduct_docstr }, \ { "transpose", (PyCFunction)transpose_, METH_O, transpose_docstr }, \ { "determinant", (PyCFunction)determinant_, METH_O, determinant_docstr }, \ { "inverse", (PyCFunction)inverse_, METH_O, inverse_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/detail/func_packing.h000066400000000000000000000271761511156275200253760ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" PyDoc_STRVAR(packDouble2x32_docstr, "packDouble2x32(v: uvec2) -> float\n" " Returns a double-qualifier value obtained by packing the components of `v` into a 64-bit\n" " value. If an IEEE 754 `Inf` or `NaN` is created, it will not signal, and the resulting floating\n" " point value is unspecified. Otherwise, the bit-level representation of `v` is preserved. The\n" " first vector component specifies the 32 least significant bits; the second component\n" " specifies the 32 most significant bits." ); static PyObject* packDouble2x32_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_UINT); if (PyGLM_Vec_PTI_Check0(2, glm::uint, arg)) { glm::uvec2 o = PyGLM_Vec_PTI_Get0(2, glm::uint, arg); return PyFloat_FromDouble(glm::packDouble2x32(o)); } PyGLM_TYPEERROR_O("invalid argument type for packDouble2x32(): ", arg); return NULL; } PyDoc_STRVAR(packUnorm2x16_docstr, "packUnorm2x16(v: vec2) -> int\n" " First, converts each component of the normalized floating-point value `v` into 8- or 16-bit\n" " integer values. Then, the results are packed into the returned 32-bit unsigned integer.\n" " The conversion for component `c` of `v` to fixed point is done as follows :\n" " `round(clamp(c, 0, +1) * 65535.0)`. The first component of the vector will be written to the\n" " least significant bits of the output; the last component will be written to the most\n" " significant bits." ); static PyObject* packUnorm2x16_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(2, float, arg)) { glm::vec2 o = PyGLM_Vec_PTI_Get0(2, float, arg); return PyLong_FromLong((long)glm::packUnorm2x16(o)); } PyGLM_TYPEERROR_O("invalid argument type for packUnorm2x16(): ", arg); return NULL; } PyDoc_STRVAR(packSnorm2x16_docstr, "packSnorm2x16(v: vec2) -> int\n" " First, converts each component of the normalized floating-point value `v` into 8- or 16-bit\n" " integer values. Then, the results are packed into the returned 32-bit unsigned integer.\n" " The conversion for component `c` of `v` to fixed point is done as follows :\n" " `round(clamp(v, -1, +1) * 32767.0)`. The first component of the vector will be written to\n" " the least significant bits of the output; the last component will be written to the most\n" " significant bits." ); static PyObject* packSnorm2x16_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(2, float, arg)) { glm::vec2 o = PyGLM_Vec_PTI_Get0(2, float, arg); return PyLong_FromLong((long)glm::packSnorm2x16(o)); } PyGLM_TYPEERROR_O("invalid argument type for packSnorm2x16(): ", arg); return NULL; } PyDoc_STRVAR(packUnorm4x8_docstr, "packUnorm4x8(v: vec4) -> int\n" " First, converts each component of the normalized floating-point value `v` into 8- or 16-bit\n" " integer values. Then, the results are packed into the returned 32-bit unsigned integer.\n" " The conversion for component `c` of `v` to fixed point is done as follows :\n" " `round(clamp(c, 0, +1) * 255.0)`. The first component of the vector will be written to the\n" " least significant bits of the output; the last component will be written to the most\n" " significant bits." ); static PyObject* packUnorm4x8_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(4, float, arg)) { glm::vec4 o = PyGLM_Vec_PTI_Get0(4, float, arg); return PyLong_FromLong((long)glm::packUnorm4x8(o)); } PyGLM_TYPEERROR_O("invalid argument type for packUnorm4x8(): ", arg); return NULL; } PyDoc_STRVAR(packSnorm4x8_docstr, "packSnorm4x8(v: vec4) -> int\n" " First, converts each component of the normalized floating-point value `v` into 8- or 16-bit\n" " integer values. Then, the results are packed into the returned 32-bit unsigned integer.\n" " The conversion for component `c` of `v` to fixed point is done as follows :\n" " `round(clamp(c, -1, +1) * 127.0)`. The first component of the vector will be written to\n" " the least significant bits of the output; the last component will be written to the most\n" " significant bits." ); static PyObject* packSnorm4x8_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(4, float, arg)) { glm::vec4 o = PyGLM_Vec_PTI_Get0(4, float, arg); return PyLong_FromLong((long)glm::packSnorm4x8(o)); } PyGLM_TYPEERROR_O("invalid argument type for packSnorm4x8(): ", arg); return NULL; } PyDoc_STRVAR(packHalf2x16_docstr, "packHalf2x16(v: vec2) -> int\n" " Returns an unsigned integer obtained by converting the components of a two-component\n" " floating-point vector to the 16-bit floating-point representation found in the OpenGL\n" " Specification, and then packing these two 16-bit integers into a 32-bit unsigned integer.\n" " The first vector component specifies the 16 least-significant bits of the result; the\n" " second component specifies the 16 most-significant bits." ); static PyObject* packHalf2x16_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(2, float, arg)) { glm::vec2 o = PyGLM_Vec_PTI_Get0(2, float, arg); return PyLong_FromUnsignedLong((unsigned long)glm::packHalf2x16(o)); } PyGLM_TYPEERROR_O("invalid argument type for packHalf2x16(): ", arg); return NULL; } PyDoc_STRVAR(unpackDouble2x32_docstr, "unpackDouble2x32(v: double) -> uvec2\n" " Returns a two-component unsigned integer vector representation of `v`. The bit-level\n" " representation of `v` is preserved. The first component of the vector contains the 32 least\n" " significant bits of the double; the second component consists the 32 most significant bits." ); static PyObject* unpackDouble2x32_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackDouble2x32(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackDouble2x32(): ", arg); return NULL; } PyDoc_STRVAR(unpackUnorm2x16_docstr, "unpackUnorm2x16(p: int) -> vec2\n" " First, unpacks a single 32-bit unsigned integer `p` into a pair of 16-bit unsigned integers,\n" " four 8-bit unsigned integers, or four 8-bit signed integers. Then, each component is\n" " converted to a normalized floating-point value to generate the returned two- or\n" " four-component vector. The conversion for unpacked fixed-point value `f` to floating point\n" " is done as follows : `f / 65535.0`. The first component of the returned\n" " vector will be extracted from the least significant bits of the input; the last component\n" " will be extracted from the most significant bits." ); static PyObject* unpackUnorm2x16_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackUnorm2x16(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackUnorm2x16(): ", arg); return NULL; } PyDoc_STRVAR(unpackSnorm2x16_docstr, "unpackSnorm2x16(p: int) -> vec2\n" " First, unpacks a single 32-bit unsigned integer `p` into a pair of 16-bit unsigned integers,\n" " four 8-bit unsigned integers, or four 8-bit signed integers. Then, each component is\n" " converted to a normalized floating-point value to generate the returned two- or\n" " four-component vector. The conversion for unpacked fixed-point value `f` to floating point\n" " is done as follows : `clamp(f / 32767.0, -1, +1)`. The first component of\n" " the returned vector will be extracted from the least significant bits of the input; the\n" " last component will be extracted from the most significant bits." ); static PyObject* unpackSnorm2x16_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackSnorm2x16(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackSnorm2x16(): ", arg); return NULL; } PyDoc_STRVAR(unpackUnorm4x8_docstr, "unpackUnorm4x8(p: int) -> vec4\n" " First, unpacks a single 32-bit unsigned integer `p` into a pair of 16-bit unsigned integers,\n" " four 8-bit unsigned integers, or four 8-bit signed integers. Then, each component is\n" " converted to a normalized floating-point value to generate the returned two- or\n" " four-component vector. The conversion for unpacked fixed-point value `f` to floating point\n" " is done as follows : `f / 255.0`. The first component of the returned vector\n" " will be extracted from the least significant bits of the input; the last component will be\n" " extracted from the most significant bits." ); static PyObject* unpackUnorm4x8_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackUnorm4x8(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackUnorm4x8(): ", arg); return NULL; } PyDoc_STRVAR(unpackSnorm4x8_docstr, "unpackSnorm4x8(p: int) -> vec4\n" " First, unpacks a single 32-bit unsigned integer `p` into a pair of 16-bit unsigned integers,\n" " four 8-bit unsigned integers, or four 8-bit signed integers. Then, each component is\n" " converted to a normalized floating-point value to generate the returned two- or\n" " four-component vector. The conversion for unpacked fixed-point value `f` to floating point\n" " is done as follows : `clamp(f / 127.0, -1, +1)`. The first component of the\n" " returned vector will be extracted from the least significant bits of the input; the last\n" " component will be extracted from the most significant bits." ); static PyObject* unpackSnorm4x8_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackSnorm4x8(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackSnorm4x8(): ", arg); return NULL; } PyDoc_STRVAR(unpackHalf2x16_docstr, "unpackHalf2x16(v: int) -> vec2\n" " Returns a two-component floating-point vector with components obtained by unpacking a\n" " 32-bit unsigned integer into a pair of 16-bit values, interpreting those values as 16-bit\n" " floating-point numbers according to the OpenGL Specification, and converting them to 32-bit\n" " floating-point values. The first component of the vector is obtained from the 16\n" " least-significant bits of `v`; the second component is obtained from the 16\n" " most-significant bits of `v`." ); static PyObject* unpackHalf2x16_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackHalf2x16(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackHalf2x16(): ", arg); return NULL; } #define FUNC_PACKING_METHODS \ { "packDouble2x32", (PyCFunction)packDouble2x32_, METH_O, packDouble2x32_docstr }, \ { "packUnorm2x16", (PyCFunction)packUnorm2x16_, METH_O, packUnorm2x16_docstr }, \ { "packSnorm2x16", (PyCFunction)packSnorm2x16_, METH_O, packSnorm2x16_docstr }, \ { "packSnorm4x8", (PyCFunction)packSnorm4x8_, METH_O, packSnorm4x8_docstr }, \ { "packUnorm4x8", (PyCFunction)packUnorm4x8_, METH_O, packUnorm4x8_docstr }, \ { "packHalf2x16", (PyCFunction)packHalf2x16_, METH_O, packHalf2x16_docstr }, \ { "unpackDouble2x32", (PyCFunction)unpackDouble2x32_, METH_O, unpackDouble2x32_docstr }, \ { "unpackUnorm2x16", (PyCFunction)unpackUnorm2x16_, METH_O, unpackUnorm2x16_docstr }, \ { "unpackSnorm2x16", (PyCFunction)unpackSnorm2x16_, METH_O, unpackSnorm2x16_docstr }, \ { "unpackSnorm4x8", (PyCFunction)unpackSnorm4x8_, METH_O, unpackSnorm4x8_docstr }, \ { "unpackUnorm4x8", (PyCFunction)unpackUnorm4x8_, METH_O, unpackUnorm4x8_docstr }, \ { "unpackHalf2x16", (PyCFunction)unpackHalf2x16_, METH_O, unpackHalf2x16_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/detail/func_trigonometric.h000066400000000000000000000216351511156275200266410ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" #include "../function_generator_macros.h" PyDoc_STRVAR(radians_docstr, "radians(angle: float) -> float\n" " Converts degrees to radians and returns the result.\n" "radians(angle: vecN) -> vecN\n" " Returns `radians(c)` for every component `c` of `x`." ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(radians) PyDoc_STRVAR(degrees_docstr, "degrees(angle: float) -> float\n" " Converts radians to degrees and returns the result.\n" "degrees(angle: vecN) -> vecN\n" " Returns `degrees(c)` for every component `c` of `x`." ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(degrees) PyDoc_STRVAR(sin_docstr, "sin(angle: float) -> float\n" " The standard trigonometric sine function. The values returned by this function will range\n" " from `[-1, 1]`.\n" "sin(angle: vecN) -> vecN\n" " Returns `sin(c)` for every component `c` of `x`." ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(sin) PyDoc_STRVAR(cos_docstr, "cos(angle: float) -> float\n" " The standard trigonometric cosine function. The values returned by this function will range\n" " from `[-1, 1]`.\n" "cos(angle: vecN) -> vecN\n" " Returns `cos(c)` for every component `c` of `x`." ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(cos) PyDoc_STRVAR(tan_docstr, "tan(angle: float) -> float\n" " The standard trigonometric tangent function.\n" "tan(angle: vecN) -> vecN\n" " Returns `tan(c)` for every component `c` of `x`." ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(tan) PyDoc_STRVAR(asin_docstr, "asin(x: float) -> float\n" " Arc sine. Returns an angle whose sine is `x`. The range of values returned by this function\n" " is `[0, PI]`. Results are undefined if `|x| > 1`.\n" "asin(x: vecN) -> vecN\n" " Returns `asin(c)` for every component `c` of `x`." ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(asin) PyDoc_STRVAR(acos_docstr, "acos(x: float) -> float\n" " Arc cosine. Returns an angle whose cosine is `x`. The range of values returned by this function\n" " is `[0, PI]`. Results are undefined if `|x| > 1`.\n" "acos(x: vecN) -> vecN\n" " Returns `acos(c)` for every component `c` of `x`." ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(acos) PyDoc_STRVAR(atan_docstr, "atan(y_over_x: float) -> float\n" " Arc tangent. Returns an angle whose tangent is `y_over_x`. The range of values returned by\n" " this function is `[-PI / 2, PI / 2]`.\n" "atan(y_over_x: vecN) -> vecN\n" " Returns `atan(c)` for every component `c` of `x`.\n" "atan(y: float, x: float) -> float\n" " Arc tangent. Returns an angle whose tangent is `y / x`. The signs of `x` and `y` are used to\n" " determine what quadrant the angle is in. The range of values returned by this function\n" " is `[-PI, PI]`. Results are undefined if `x` and `y` are both `0`.\n" "atan(y: vecN, x: vecN) -> vecN\n" " Returns `atan(y[i], x[i])` for every index `i`." ); static PyObject* atan_(PyObject*, PyObject* args) { PyObject* arg1 = NULL, *arg2 = NULL; if (!PyArg_UnpackTuple(args, "atan", 1, 2, &arg1, &arg2)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for atan()"); return NULL; } if (arg2 != NULL) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::atan(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) { glm::vec1 o = PyGLM_Vec_PTI_Get0(1, float, arg1); glm::vec1 o2 = PyGLM_Vec_PTI_Get1(1, float, arg2); return pack(glm::atan(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { glm::vec2 o = PyGLM_Vec_PTI_Get0(2, float, arg1); glm::vec2 o2 = PyGLM_Vec_PTI_Get1(2, float, arg2); return pack(glm::atan(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { glm::vec3 o = PyGLM_Vec_PTI_Get0(3, float, arg1); glm::vec3 o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); return pack(glm::atan(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { glm::vec4 o = PyGLM_Vec_PTI_Get0(4, float, arg1); glm::vec4 o2 = PyGLM_Vec_PTI_Get1(4, float, arg2); return pack(glm::atan(o, o2)); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) { glm::dvec1 o = PyGLM_Vec_PTI_Get0(1, double, arg1); glm::dvec1 o2 = PyGLM_Vec_PTI_Get1(1, double, arg2); return pack(glm::atan(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { glm::dvec2 o = PyGLM_Vec_PTI_Get0(2, double, arg1); glm::dvec2 o2 = PyGLM_Vec_PTI_Get1(2, double, arg2); return pack(glm::atan(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { glm::dvec3 o = PyGLM_Vec_PTI_Get0(3, double, arg1); glm::dvec3 o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); return pack(glm::atan(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { glm::dvec4 o = PyGLM_Vec_PTI_Get0(4, double, arg1); glm::dvec4 o2 = PyGLM_Vec_PTI_Get1(4, double, arg2); return pack(glm::atan(o, o2)); } PyGLM_TYPEERROR_2O("invalid argument type(s) for atan(): ", arg1, arg2); return NULL; } if (PyGLM_Number_Check(arg1)) { return pack(glm::atan(PyGLM_Number_FromPyObject(arg1))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1)) { glm::vec1 o = PyGLM_Vec_PTI_Get0(1, float, arg1); return pack(glm::atan(o)); } if (PyGLM_Vec_PTI_Check0(2, float, arg1)) { glm::vec2 o = PyGLM_Vec_PTI_Get0(2, float, arg1); return pack(glm::atan(o)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1)) { glm::vec3 o = PyGLM_Vec_PTI_Get0(3, float, arg1); return pack(glm::atan(o)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1)) { glm::vec4 o = PyGLM_Vec_PTI_Get0(4, float, arg1); return pack(glm::atan(o)); } if (PyGLM_Vec_PTI_Check0(1, double, arg1)) { glm::dvec1 o = PyGLM_Vec_PTI_Get0(1, double, arg1); return pack(glm::atan(o)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1)) { glm::dvec2 o = PyGLM_Vec_PTI_Get0(2, double, arg1); return pack(glm::atan(o)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1)) { glm::dvec3 o = PyGLM_Vec_PTI_Get0(3, double, arg1); return pack(glm::atan(o)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1)) { glm::dvec4 o = PyGLM_Vec_PTI_Get0(4, double, arg1); return pack(glm::atan(o)); } PyGLM_TYPEERROR_O("invalid argument type for atan(): ", arg1); return NULL; } PyDoc_STRVAR(sinh_docstr, "sinh(angle: float) -> float\n" " Returns the hyperbolic sine function, `(exp(angle) - exp(-angle)) / 2`.\n" "sinh(angle: vecN) -> vecN\n" " Returns `sinh(c)` for every component `c` of `x`." ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(sinh) PyDoc_STRVAR(cosh_docstr, "cosh(angle: float) -> float\n" " Returns the hyperbolic cosine function, `(exp(angle) + exp(-angle)) / 2`.\n" "cosh(angle: vecN) -> vecN\n" " Returns `cosh(c)` for every component `c` of `x`." ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(cosh) PyDoc_STRVAR(tanh_docstr, "tanh(angle: float) -> float\n" " Returns the hyperbolic tangent function, `sinh(angle) / cosh(angle)`\n" "tanh(angle: vecN) -> vecN\n" " Returns `tanh(c)` for every component `c` of `x`." ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(tanh) PyDoc_STRVAR(asinh_docstr, "asinh(x: float) -> float\n" " Arc hyperbolic sine; returns the inverse of `sinh`.\n" "asinh(x: vecN) -> vecN\n" " Returns `asinh(c)` for every component `c` of `x`." ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(asinh) PyDoc_STRVAR(acosh_docstr, "acosh(x: float) -> float\n" " Arc hyperbolic cosine; returns the non-negative inverse of `cosh`. Results are undefined\n" " if `x < 1`.\n" "acosh(x: vecN) -> vecN\n" " Returns `acosh(c)` for every component `c` of `x`." ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(acosh) PyDoc_STRVAR(atanh_docstr, "atanh(x: float) -> float\n" " Arc hyperbolic tangent; returns the inverse of `tanh`. Results are undefined if `abs(x) >= 1`.\n" "atanh(x: vecN) -> vecN\n" " Returns `atanh(c)` for every component `c` of `x`." ); PyGLM_MAKE_GLM_FUNC_N_V__tfF(atanh) #define FUNC_TRIGONOMETRIC_METHODS \ { "radians", (PyCFunction)radians_, METH_O, radians_docstr }, \ { "degrees", (PyCFunction)degrees_, METH_O, degrees_docstr }, \ { "sin", (PyCFunction)sin_, METH_O, sin_docstr }, \ { "cos", (PyCFunction)cos_, METH_O, cos_docstr }, \ { "tan", (PyCFunction)tan_, METH_O, tan_docstr }, \ { "asin", (PyCFunction)asin_, METH_O, asin_docstr }, \ { "acos", (PyCFunction)acos_, METH_O, acos_docstr }, \ { "atan", (PyCFunction)atan_, METH_VARARGS, atan_docstr }, \ { "sinh", (PyCFunction)sinh_, METH_O, sinh_docstr }, \ { "cosh", (PyCFunction)cosh_, METH_O, cosh_docstr }, \ { "tanh", (PyCFunction)tanh_, METH_O, tanh_docstr }, \ { "asinh", (PyCFunction)asinh_, METH_O, asinh_docstr }, \ { "acosh", (PyCFunction)acosh_, METH_O, acosh_docstr }, \ { "atanh", (PyCFunction)atanh_, METH_O, atanh_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/detail/func_vector_relational.h000066400000000000000000003433041511156275200274700ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" #include "../function_generator_macros.h" PyDoc_STRVAR(equal_docstr, "equal(x: vecN, y: vecN) -> bvecN\n" " Returns the component-wise comparison of result `x == y`.\n" "equal(x: quat, y: quat) -> bvec4\n" " Returns the component-wise comparison of result `x == y`.\n" "equal(x: matNxM, y: matNxM) -> bvecN\n" " Perform a component-wise equal-to comparison of two matrices. Return a boolean vector which\n" " components value is `True` if this expression is satisfied per column of the matrices.\n" "equal(x: number, y: number, ULPs: int) -> bool\n" " Returns the component-wise comparison between two scalars in term of `ULPs`.\n" "equal(x: vecN, y: vecN, ULPs: int) -> bvecN\n" " Returns the component-wise comparison between two vectors in term of `ULPs`.\n" "equal(x: matNxM, y: matNxM, ULPs: int) -> bvecN\n" " Returns the component-wise comparison between two matrices in term of `ULPs`.\n" "equal(x: vecN, y: vecN, ULPs: ivecN) -> bvecN\n" " Returns the component-wise comparison between two vectors in term of `ULPs`.\n" "equal(x: matNxM, y: matNxM, ULPs: ivecN) -> bvecN\n" " Returns the component-wise comparison between two matrices in term of `ULPs`.\n" "equal(x: number, y: number, epsilon: number) -> bool\n" " Returns the comparison of `|x - y| < epsilon`.\n" "equal(x: vecN, y: vecN, epsilon: number) -> bvecN\n" " Returns the component-wise comparison of `|x - y| < epsilon`.\n" "equal(x: quat, y: quat, epsilon: number) -> bvec4\n" " Returns the component-wise comparison of `|x - y| < epsilon`.\n" "equal(x: matNxM, y: matNxM, epsilon: number) -> bvecN\n" " Returns the component-wise comparison of `|x - y| < epsilon`.\n" "equal(x: vecN, y: vecN, epsilon: vecN) -> bvecN\n" " Returns the component-wise comparison of `|x - y| < epsilon`.\n" "equal(x: matNxM, y: matNxM, epsilon: vecN) -> bvecN\n" " Returns the component-wise comparison of `|x - y| < epsilon`." ); static PyObject* equal(PyObject*, PyObject* args) { PyObject *arg1, *arg2, *arg3 = NULL; if (!PyArg_UnpackTuple(args, "equal", 2, 3, &arg1, &arg2, &arg3)) return NULL; if (arg3 == NULL) { PyGLM_PTI_Init0(arg1, PyGLM_T_ALL | PyGLM_SHAPE_ALL | PyGLM_DT_ALL); PyGLM_PTI_Init1(arg2, PyGLM_T_ALL | PyGLM_SHAPE_ALL | PyGLM_DT_ALL); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg1); glm::vec<1, float> o2 = PyGLM_Vec_PTI_Get1(1, float, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) { glm::vec<1, double> o = PyGLM_Vec_PTI_Get0(1, double, arg1); glm::vec<1, double> o2 = PyGLM_Vec_PTI_Get1(1, double, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2)) { glm::vec<1, int> o = PyGLM_Vec_PTI_Get0(1, int, arg1); glm::vec<1, int> o2 = PyGLM_Vec_PTI_Get1(1, int, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(1, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(1, glm::uint, arg2)) { glm::vec<1, glm::uint> o = PyGLM_Vec_PTI_Get0(1, glm::uint, arg1); glm::vec<1, glm::uint> o2 = PyGLM_Vec_PTI_Get1(1, glm::uint, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(1, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i64, arg2)) { glm::vec<1, glm::i64> o = PyGLM_Vec_PTI_Get0(1, glm::i64, arg1); glm::vec<1, glm::i64> o2 = PyGLM_Vec_PTI_Get1(1, glm::i64, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(1, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u64, arg2)) { glm::vec<1, glm::u64> o = PyGLM_Vec_PTI_Get0(1, glm::u64, arg1); glm::vec<1, glm::u64> o2 = PyGLM_Vec_PTI_Get1(1, glm::u64, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(1, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i16, arg2)) { glm::vec<1, glm::i16> o = PyGLM_Vec_PTI_Get0(1, glm::i16, arg1); glm::vec<1, glm::i16> o2 = PyGLM_Vec_PTI_Get1(1, glm::i16, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(1, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u16, arg2)) { glm::vec<1, glm::u16> o = PyGLM_Vec_PTI_Get0(1, glm::u16, arg1); glm::vec<1, glm::u16> o2 = PyGLM_Vec_PTI_Get1(1, glm::u16, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(1, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i8, arg2)) { glm::vec<1, glm::i8> o = PyGLM_Vec_PTI_Get0(1, glm::i8, arg1); glm::vec<1, glm::i8> o2 = PyGLM_Vec_PTI_Get1(1, glm::i8, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(1, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u8, arg2)) { glm::vec<1, glm::u8> o = PyGLM_Vec_PTI_Get0(1, glm::u8, arg1); glm::vec<1, glm::u8> o2 = PyGLM_Vec_PTI_Get1(1, glm::u8, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(1, bool, arg1) && PyGLM_Vec_PTI_Check1(1, bool, arg2)) { glm::vec<1, bool> o = PyGLM_Vec_PTI_Get0(1, bool, arg1); glm::vec<1, bool> o2 = PyGLM_Vec_PTI_Get1(1, bool, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg1); glm::vec<2, float> o2 = PyGLM_Vec_PTI_Get1(2, float, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg1); glm::vec<2, double> o2 = PyGLM_Vec_PTI_Get1(2, double, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2)) { glm::vec<2, int> o = PyGLM_Vec_PTI_Get0(2, int, arg1); glm::vec<2, int> o2 = PyGLM_Vec_PTI_Get1(2, int, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(2, glm::uint, arg2)) { glm::vec<2, glm::uint> o = PyGLM_Vec_PTI_Get0(2, glm::uint, arg1); glm::vec<2, glm::uint> o2 = PyGLM_Vec_PTI_Get1(2, glm::uint, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i64, arg2)) { glm::vec<2, glm::i64> o = PyGLM_Vec_PTI_Get0(2, glm::i64, arg1); glm::vec<2, glm::i64> o2 = PyGLM_Vec_PTI_Get1(2, glm::i64, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u64, arg2)) { glm::vec<2, glm::u64> o = PyGLM_Vec_PTI_Get0(2, glm::u64, arg1); glm::vec<2, glm::u64> o2 = PyGLM_Vec_PTI_Get1(2, glm::u64, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i16, arg2)) { glm::vec<2, glm::i16> o = PyGLM_Vec_PTI_Get0(2, glm::i16, arg1); glm::vec<2, glm::i16> o2 = PyGLM_Vec_PTI_Get1(2, glm::i16, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u16, arg2)) { glm::vec<2, glm::u16> o = PyGLM_Vec_PTI_Get0(2, glm::u16, arg1); glm::vec<2, glm::u16> o2 = PyGLM_Vec_PTI_Get1(2, glm::u16, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i8, arg2)) { glm::vec<2, glm::i8> o = PyGLM_Vec_PTI_Get0(2, glm::i8, arg1); glm::vec<2, glm::i8> o2 = PyGLM_Vec_PTI_Get1(2, glm::i8, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u8, arg2)) { glm::vec<2, glm::u8> o = PyGLM_Vec_PTI_Get0(2, glm::u8, arg1); glm::vec<2, glm::u8> o2 = PyGLM_Vec_PTI_Get1(2, glm::u8, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, bool, arg1) && PyGLM_Vec_PTI_Check1(2, bool, arg2)) { glm::vec<2, bool> o = PyGLM_Vec_PTI_Get0(2, bool, arg1); glm::vec<2, bool> o2 = PyGLM_Vec_PTI_Get1(2, bool, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg1); glm::vec<3, float> o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg1); glm::vec<3, double> o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2)) { glm::vec<3, int> o = PyGLM_Vec_PTI_Get0(3, int, arg1); glm::vec<3, int> o2 = PyGLM_Vec_PTI_Get1(3, int, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(3, glm::uint, arg2)) { glm::vec<3, glm::uint> o = PyGLM_Vec_PTI_Get0(3, glm::uint, arg1); glm::vec<3, glm::uint> o2 = PyGLM_Vec_PTI_Get1(3, glm::uint, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i64, arg2)) { glm::vec<3, glm::i64> o = PyGLM_Vec_PTI_Get0(3, glm::i64, arg1); glm::vec<3, glm::i64> o2 = PyGLM_Vec_PTI_Get1(3, glm::i64, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u64, arg2)) { glm::vec<3, glm::u64> o = PyGLM_Vec_PTI_Get0(3, glm::u64, arg1); glm::vec<3, glm::u64> o2 = PyGLM_Vec_PTI_Get1(3, glm::u64, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i16, arg2)) { glm::vec<3, glm::i16> o = PyGLM_Vec_PTI_Get0(3, glm::i16, arg1); glm::vec<3, glm::i16> o2 = PyGLM_Vec_PTI_Get1(3, glm::i16, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u16, arg2)) { glm::vec<3, glm::u16> o = PyGLM_Vec_PTI_Get0(3, glm::u16, arg1); glm::vec<3, glm::u16> o2 = PyGLM_Vec_PTI_Get1(3, glm::u16, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i8, arg2)) { glm::vec<3, glm::i8> o = PyGLM_Vec_PTI_Get0(3, glm::i8, arg1); glm::vec<3, glm::i8> o2 = PyGLM_Vec_PTI_Get1(3, glm::i8, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u8, arg2)) { glm::vec<3, glm::u8> o = PyGLM_Vec_PTI_Get0(3, glm::u8, arg1); glm::vec<3, glm::u8> o2 = PyGLM_Vec_PTI_Get1(3, glm::u8, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, bool, arg1) && PyGLM_Vec_PTI_Check1(3, bool, arg2)) { glm::vec<3, bool> o = PyGLM_Vec_PTI_Get0(3, bool, arg1); glm::vec<3, bool> o2 = PyGLM_Vec_PTI_Get1(3, bool, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg1); glm::vec<4, float> o2 = PyGLM_Vec_PTI_Get1(4, float, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg1); glm::vec<4, double> o2 = PyGLM_Vec_PTI_Get1(4, double, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2)) { glm::vec<4, int> o = PyGLM_Vec_PTI_Get0(4, int, arg1); glm::vec<4, int> o2 = PyGLM_Vec_PTI_Get1(4, int, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(4, glm::uint, arg2)) { glm::vec<4, glm::uint> o = PyGLM_Vec_PTI_Get0(4, glm::uint, arg1); glm::vec<4, glm::uint> o2 = PyGLM_Vec_PTI_Get1(4, glm::uint, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i64, arg2)) { glm::vec<4, glm::i64> o = PyGLM_Vec_PTI_Get0(4, glm::i64, arg1); glm::vec<4, glm::i64> o2 = PyGLM_Vec_PTI_Get1(4, glm::i64, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u64, arg2)) { glm::vec<4, glm::u64> o = PyGLM_Vec_PTI_Get0(4, glm::u64, arg1); glm::vec<4, glm::u64> o2 = PyGLM_Vec_PTI_Get1(4, glm::u64, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i16, arg2)) { glm::vec<4, glm::i16> o = PyGLM_Vec_PTI_Get0(4, glm::i16, arg1); glm::vec<4, glm::i16> o2 = PyGLM_Vec_PTI_Get1(4, glm::i16, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u16, arg2)) { glm::vec<4, glm::u16> o = PyGLM_Vec_PTI_Get0(4, glm::u16, arg1); glm::vec<4, glm::u16> o2 = PyGLM_Vec_PTI_Get1(4, glm::u16, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i8, arg2)) { glm::vec<4, glm::i8> o = PyGLM_Vec_PTI_Get0(4, glm::i8, arg1); glm::vec<4, glm::i8> o2 = PyGLM_Vec_PTI_Get1(4, glm::i8, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u8, arg2)) { glm::vec<4, glm::u8> o = PyGLM_Vec_PTI_Get0(4, glm::u8, arg1); glm::vec<4, glm::u8> o2 = PyGLM_Vec_PTI_Get1(4, glm::u8, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, bool, arg1) && PyGLM_Vec_PTI_Check1(4, bool, arg2)) { glm::vec<4, bool> o = PyGLM_Vec_PTI_Get0(4, bool, arg1); glm::vec<4, bool> o2 = PyGLM_Vec_PTI_Get1(4, bool, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Mat_Check(2, 2, float, arg1) && PyGLM_Mat_Check(2, 2, float, arg2)) { glm::mat<2, 2, float> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } if (PyGLM_Mat_Check(2, 2, double, arg1) && PyGLM_Mat_Check(2, 2, double, arg2)) { glm::mat<2, 2, double> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } //if (PyGLM_Mat_Check(2, 2, int, arg1) && PyGLM_Mat_Check(2, 2, int, arg2)) { // glm::mat<2, 2, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::equal(o, o2)); //} if (PyGLM_Mat_Check(2, 2, glm::uint, arg1) && PyGLM_Mat_Check(2, 2, glm::uint, arg2)) { glm::mat<2, 2, glm::uint> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } if (PyGLM_Mat_Check(2, 3, float, arg1) && PyGLM_Mat_Check(2, 3, float, arg2)) { glm::mat<2, 3, float> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } if (PyGLM_Mat_Check(2, 3, double, arg1) && PyGLM_Mat_Check(2, 3, double, arg2)) { glm::mat<2, 3, double> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } //if (PyGLM_Mat_Check(2, 3, int, arg1) && PyGLM_Mat_Check(2, 3, int, arg2)) { // glm::mat<2, 3, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::equal(o, o2)); //} if (PyGLM_Mat_Check(2, 3, glm::uint, arg1) && PyGLM_Mat_Check(2, 3, glm::uint, arg2)) { glm::mat<2, 3, glm::uint> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } if (PyGLM_Mat_Check(2, 4, float, arg1) && PyGLM_Mat_Check(2, 4, float, arg2)) { glm::mat<2, 4, float> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } if (PyGLM_Mat_Check(2, 4, double, arg1) && PyGLM_Mat_Check(2, 4, double, arg2)) { glm::mat<2, 4, double> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } //if (PyGLM_Mat_Check(2, 4, int, arg1) && PyGLM_Mat_Check(2, 4, int, arg2)) { // glm::mat<2, 4, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::equal(o, o2)); //} if (PyGLM_Mat_Check(2, 4, glm::uint, arg1) && PyGLM_Mat_Check(2, 4, glm::uint, arg2)) { glm::mat<2, 4, glm::uint> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } if (PyGLM_Mat_Check(3, 2, float, arg1) && PyGLM_Mat_Check(3, 2, float, arg2)) { glm::mat<3, 2, float> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } if (PyGLM_Mat_Check(3, 2, double, arg1) && PyGLM_Mat_Check(3, 2, double, arg2)) { glm::mat<3, 2, double> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } //if (PyGLM_Mat_Check(3, 2, int, arg1) && PyGLM_Mat_Check(3, 2, int, arg2)) { // glm::mat<3, 2, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::equal(o, o2)); //} if (PyGLM_Mat_Check(3, 2, glm::uint, arg1) && PyGLM_Mat_Check(3, 2, glm::uint, arg2)) { glm::mat<3, 2, glm::uint> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } if (PyGLM_Mat_Check(3, 3, float, arg1) && PyGLM_Mat_Check(3, 3, float, arg2)) { glm::mat<3, 3, float> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } if (PyGLM_Mat_Check(3, 3, double, arg1) && PyGLM_Mat_Check(3, 3, double, arg2)) { glm::mat<3, 3, double> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } //if (PyGLM_Mat_Check(3, 3, int, arg1) && PyGLM_Mat_Check(3, 3, int, arg2)) { // glm::mat<3, 3, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::equal(o, o2)); //} if (PyGLM_Mat_Check(3, 3, glm::uint, arg1) && PyGLM_Mat_Check(3, 3, glm::uint, arg2)) { glm::mat<3, 3, glm::uint> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } if (PyGLM_Mat_Check(3, 4, float, arg1) && PyGLM_Mat_Check(3, 4, float, arg2)) { glm::mat<3, 4, float> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } if (PyGLM_Mat_Check(3, 4, double, arg1) && PyGLM_Mat_Check(3, 4, double, arg2)) { glm::mat<3, 4, double> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } //if (PyGLM_Mat_Check(3, 4, int, arg1) && PyGLM_Mat_Check(3, 4, int, arg2)) { // glm::mat<3, 4, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::equal(o, o2)); //} if (PyGLM_Mat_Check(3, 4, glm::uint, arg1) && PyGLM_Mat_Check(3, 4, glm::uint, arg2)) { glm::mat<3, 4, glm::uint> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } if (PyGLM_Mat_Check(4, 2, float, arg1) && PyGLM_Mat_Check(4, 2, float, arg2)) { glm::mat<4, 2, float> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } if (PyGLM_Mat_Check(4, 2, double, arg1) && PyGLM_Mat_Check(4, 2, double, arg2)) { glm::mat<4, 2, double> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } //if (PyGLM_Mat_Check(4, 2, int, arg1) && PyGLM_Mat_Check(4, 2, int, arg2)) { // glm::mat<4, 2, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::equal(o, o2)); //} if (PyGLM_Mat_Check(4, 2, glm::uint, arg1) && PyGLM_Mat_Check(4, 2, glm::uint, arg2)) { glm::mat<4, 2, glm::uint> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } if (PyGLM_Mat_Check(4, 3, float, arg1) && PyGLM_Mat_Check(4, 3, float, arg2)) { glm::mat<4, 3, float> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } if (PyGLM_Mat_Check(4, 3, double, arg1) && PyGLM_Mat_Check(4, 3, double, arg2)) { glm::mat<4, 3, double> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } //if (PyGLM_Mat_Check(4, 3, int, arg1) && PyGLM_Mat_Check(4, 3, int, arg2)) { // glm::mat<4, 3, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::equal(o, o2)); //} if (PyGLM_Mat_Check(4, 3, glm::uint, arg1) && PyGLM_Mat_Check(4, 3, glm::uint, arg2)) { glm::mat<4, 3, glm::uint> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } if (PyGLM_Mat_Check(4, 4, float, arg1) && PyGLM_Mat_Check(4, 4, float, arg2)) { glm::mat<4, 4, float> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } if (PyGLM_Mat_Check(4, 4, double, arg1) && PyGLM_Mat_Check(4, 4, double, arg2)) { glm::mat<4, 4, double> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } //if (PyGLM_Mat_Check(4, 4, int, arg1) && PyGLM_Mat_Check(4, 4, int, arg2)) { // glm::mat<4, 4, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::equal(o, o2)); //} if (PyGLM_Mat_Check(4, 4, glm::uint, arg1) && PyGLM_Mat_Check(4, 4, glm::uint, arg2)) { glm::mat<4, 4, glm::uint> o, o2; unpack_mat(arg1, o); unpack_mat(arg2, o2); return pack(glm::equal(o, o2)); } if (PyGLM_Qua_PTI_Check0(float, arg1) && PyGLM_Qua_PTI_Check1(float, arg2)) { glm::qua o = PyGLM_Qua_PTI_Get0(float, arg1); glm::qua o2 = PyGLM_Qua_PTI_Get1(float, arg2); return pack(glm::equal(o, o2)); } if (PyGLM_Qua_PTI_Check0(double, arg1) && PyGLM_Qua_PTI_Check1(double, arg2)) { glm::qua o = PyGLM_Qua_PTI_Get0(double, arg1); glm::qua o2 = PyGLM_Qua_PTI_Get1(double, arg2); return pack(glm::equal(o, o2)); } PyGLM_TYPEERROR_2O("invalid argument type(s) for equal(): ", arg1, arg2); return NULL; } if (PyLong_Check(arg3)) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::equal(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg1); glm::vec<1, float> o2 = PyGLM_Vec_PTI_Get1(1, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) { glm::vec<1, double> o = PyGLM_Vec_PTI_Get0(1, double, arg1); glm::vec<1, double> o2 = PyGLM_Vec_PTI_Get1(1, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg1); glm::vec<2, float> o2 = PyGLM_Vec_PTI_Get1(2, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg1); glm::vec<2, double> o2 = PyGLM_Vec_PTI_Get1(2, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg1); glm::vec<3, float> o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg1); glm::vec<3, double> o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg1); glm::vec<4, float> o2 = PyGLM_Vec_PTI_Get1(4, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg1); glm::vec<4, double> o2 = PyGLM_Vec_PTI_Get1(4, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 2, float, arg1) && PyGLM_Mat_PTI_Check1(2, 2, float, arg2)) { glm::mat<2, 2, float> o = PyGLM_Mat_PTI_Get0(2, 2, float, arg1); glm::mat<2, 2, float> o2 = PyGLM_Mat_PTI_Get1(2, 2, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 2, double, arg1) && PyGLM_Mat_PTI_Check1(2, 2, double, arg2)) { glm::mat<2, 2, double> o = PyGLM_Mat_PTI_Get0(2, 2, double, arg1); glm::mat<2, 2, double> o2 = PyGLM_Mat_PTI_Get1(2, 2, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 3, float, arg1) && PyGLM_Mat_PTI_Check1(2, 3, float, arg2)) { glm::mat<2, 3, float> o = PyGLM_Mat_PTI_Get0(2, 3, float, arg1); glm::mat<2, 3, float> o2 = PyGLM_Mat_PTI_Get1(2, 3, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 3, double, arg1) && PyGLM_Mat_PTI_Check1(2, 3, double, arg2)) { glm::mat<2, 3, double> o = PyGLM_Mat_PTI_Get0(2, 3, double, arg1); glm::mat<2, 3, double> o2 = PyGLM_Mat_PTI_Get1(2, 3, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 4, float, arg1) && PyGLM_Mat_PTI_Check1(2, 4, float, arg2)) { glm::mat<2, 4, float> o = PyGLM_Mat_PTI_Get0(2, 4, float, arg1); glm::mat<2, 4, float> o2 = PyGLM_Mat_PTI_Get1(2, 4, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 4, double, arg1) && PyGLM_Mat_PTI_Check1(2, 4, double, arg2)) { glm::mat<2, 4, double> o = PyGLM_Mat_PTI_Get0(2, 4, double, arg1); glm::mat<2, 4, double> o2 = PyGLM_Mat_PTI_Get1(2, 4, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 2, float, arg1) && PyGLM_Mat_PTI_Check1(3, 2, float, arg2)) { glm::mat<3, 2, float> o = PyGLM_Mat_PTI_Get0(3, 2, float, arg1); glm::mat<3, 2, float> o2 = PyGLM_Mat_PTI_Get1(3, 2, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 2, double, arg1) && PyGLM_Mat_PTI_Check1(3, 2, double, arg2)) { glm::mat<3, 2, double> o = PyGLM_Mat_PTI_Get0(3, 2, double, arg1); glm::mat<3, 2, double> o2 = PyGLM_Mat_PTI_Get1(3, 2, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 3, float, arg1) && PyGLM_Mat_PTI_Check1(3, 3, float, arg2)) { glm::mat<3, 3, float> o = PyGLM_Mat_PTI_Get0(3, 3, float, arg1); glm::mat<3, 3, float> o2 = PyGLM_Mat_PTI_Get1(3, 3, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 3, double, arg1) && PyGLM_Mat_PTI_Check1(3, 3, double, arg2)) { glm::mat<3, 3, double> o = PyGLM_Mat_PTI_Get0(3, 3, double, arg1); glm::mat<3, 3, double> o2 = PyGLM_Mat_PTI_Get1(3, 3, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 4, float, arg1) && PyGLM_Mat_PTI_Check1(3, 4, float, arg2)) { glm::mat<3, 4, float> o = PyGLM_Mat_PTI_Get0(3, 4, float, arg1); glm::mat<3, 4, float> o2 = PyGLM_Mat_PTI_Get1(3, 4, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 4, double, arg1) && PyGLM_Mat_PTI_Check1(3, 4, double, arg2)) { glm::mat<3, 4, double> o = PyGLM_Mat_PTI_Get0(3, 4, double, arg1); glm::mat<3, 4, double> o2 = PyGLM_Mat_PTI_Get1(3, 4, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 2, float, arg1) && PyGLM_Mat_PTI_Check1(4, 2, float, arg2)) { glm::mat<4, 2, float> o = PyGLM_Mat_PTI_Get0(4, 2, float, arg1); glm::mat<4, 2, float> o2 = PyGLM_Mat_PTI_Get1(4, 2, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 2, double, arg1) && PyGLM_Mat_PTI_Check1(4, 2, double, arg2)) { glm::mat<4, 2, double> o = PyGLM_Mat_PTI_Get0(4, 2, double, arg1); glm::mat<4, 2, double> o2 = PyGLM_Mat_PTI_Get1(4, 2, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 3, float, arg1) && PyGLM_Mat_PTI_Check1(4, 3, float, arg2)) { glm::mat<4, 3, float> o = PyGLM_Mat_PTI_Get0(4, 3, float, arg1); glm::mat<4, 3, float> o2 = PyGLM_Mat_PTI_Get1(4, 3, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 3, double, arg1) && PyGLM_Mat_PTI_Check1(4, 3, double, arg2)) { glm::mat<4, 3, double> o = PyGLM_Mat_PTI_Get0(4, 3, double, arg1); glm::mat<4, 3, double> o2 = PyGLM_Mat_PTI_Get1(4, 3, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 4, float, arg1) && PyGLM_Mat_PTI_Check1(4, 4, float, arg2)) { glm::mat<4, 4, float> o = PyGLM_Mat_PTI_Get0(4, 4, float, arg1); glm::mat<4, 4, float> o2 = PyGLM_Mat_PTI_Get1(4, 4, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 4, double, arg1) && PyGLM_Mat_PTI_Check1(4, 4, double, arg2)) { glm::mat<4, 4, double> o = PyGLM_Mat_PTI_Get0(4, 4, double, arg1); glm::mat<4, 4, double> o2 = PyGLM_Mat_PTI_Get1(4, 4, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for equal()"); return NULL; } if (PyGLM_Number_Check(arg3)) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::equal(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_T_QUA | PyGLM_SHAPE_NxM | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_T_QUA | PyGLM_SHAPE_NxM | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg1); glm::vec<1, float> o2 = PyGLM_Vec_PTI_Get1(1, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) { glm::vec<1, double> o = PyGLM_Vec_PTI_Get0(1, double, arg1); glm::vec<1, double> o2 = PyGLM_Vec_PTI_Get1(1, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg1); glm::vec<2, float> o2 = PyGLM_Vec_PTI_Get1(2, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg1); glm::vec<2, double> o2 = PyGLM_Vec_PTI_Get1(2, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg1); glm::vec<3, float> o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg1); glm::vec<3, double> o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg1); glm::vec<4, float> o2 = PyGLM_Vec_PTI_Get1(4, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg1); glm::vec<4, double> o2 = PyGLM_Vec_PTI_Get1(4, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 2, float, arg1) && PyGLM_Mat_PTI_Check1(2, 2, float, arg2)) { glm::mat<2, 2, float> o = PyGLM_Mat_PTI_Get0(2, 2, float, arg1); glm::mat<2, 2, float> o2 = PyGLM_Mat_PTI_Get1(2, 2, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 2, double, arg1) && PyGLM_Mat_PTI_Check1(2, 2, double, arg2)) { glm::mat<2, 2, double> o = PyGLM_Mat_PTI_Get0(2, 2, double, arg1); glm::mat<2, 2, double> o2 = PyGLM_Mat_PTI_Get1(2, 2, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 3, float, arg1) && PyGLM_Mat_PTI_Check1(2, 3, float, arg2)) { glm::mat<2, 3, float> o = PyGLM_Mat_PTI_Get0(2, 3, float, arg1); glm::mat<2, 3, float> o2 = PyGLM_Mat_PTI_Get1(2, 3, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 3, double, arg1) && PyGLM_Mat_PTI_Check1(2, 3, double, arg2)) { glm::mat<2, 3, double> o = PyGLM_Mat_PTI_Get0(2, 3, double, arg1); glm::mat<2, 3, double> o2 = PyGLM_Mat_PTI_Get1(2, 3, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 4, float, arg1) && PyGLM_Mat_PTI_Check1(2, 4, float, arg2)) { glm::mat<2, 4, float> o = PyGLM_Mat_PTI_Get0(2, 4, float, arg1); glm::mat<2, 4, float> o2 = PyGLM_Mat_PTI_Get1(2, 4, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 4, double, arg1) && PyGLM_Mat_PTI_Check1(2, 4, double, arg2)) { glm::mat<2, 4, double> o = PyGLM_Mat_PTI_Get0(2, 4, double, arg1); glm::mat<2, 4, double> o2 = PyGLM_Mat_PTI_Get1(2, 4, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 2, float, arg1) && PyGLM_Mat_PTI_Check1(3, 2, float, arg2)) { glm::mat<3, 2, float> o = PyGLM_Mat_PTI_Get0(3, 2, float, arg1); glm::mat<3, 2, float> o2 = PyGLM_Mat_PTI_Get1(3, 2, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 2, double, arg1) && PyGLM_Mat_PTI_Check1(3, 2, double, arg2)) { glm::mat<3, 2, double> o = PyGLM_Mat_PTI_Get0(3, 2, double, arg1); glm::mat<3, 2, double> o2 = PyGLM_Mat_PTI_Get1(3, 2, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 3, float, arg1) && PyGLM_Mat_PTI_Check1(3, 3, float, arg2)) { glm::mat<3, 3, float> o = PyGLM_Mat_PTI_Get0(3, 3, float, arg1); glm::mat<3, 3, float> o2 = PyGLM_Mat_PTI_Get1(3, 3, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 3, double, arg1) && PyGLM_Mat_PTI_Check1(3, 3, double, arg2)) { glm::mat<3, 3, double> o = PyGLM_Mat_PTI_Get0(3, 3, double, arg1); glm::mat<3, 3, double> o2 = PyGLM_Mat_PTI_Get1(3, 3, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 4, float, arg1) && PyGLM_Mat_PTI_Check1(3, 4, float, arg2)) { glm::mat<3, 4, float> o = PyGLM_Mat_PTI_Get0(3, 4, float, arg1); glm::mat<3, 4, float> o2 = PyGLM_Mat_PTI_Get1(3, 4, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 4, double, arg1) && PyGLM_Mat_PTI_Check1(3, 4, double, arg2)) { glm::mat<3, 4, double> o = PyGLM_Mat_PTI_Get0(3, 4, double, arg1); glm::mat<3, 4, double> o2 = PyGLM_Mat_PTI_Get1(3, 4, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 2, float, arg1) && PyGLM_Mat_PTI_Check1(4, 2, float, arg2)) { glm::mat<4, 2, float> o = PyGLM_Mat_PTI_Get0(4, 2, float, arg1); glm::mat<4, 2, float> o2 = PyGLM_Mat_PTI_Get1(4, 2, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 2, double, arg1) && PyGLM_Mat_PTI_Check1(4, 2, double, arg2)) { glm::mat<4, 2, double> o = PyGLM_Mat_PTI_Get0(4, 2, double, arg1); glm::mat<4, 2, double> o2 = PyGLM_Mat_PTI_Get1(4, 2, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 3, float, arg1) && PyGLM_Mat_PTI_Check1(4, 3, float, arg2)) { glm::mat<4, 3, float> o = PyGLM_Mat_PTI_Get0(4, 3, float, arg1); glm::mat<4, 3, float> o2 = PyGLM_Mat_PTI_Get1(4, 3, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 3, double, arg1) && PyGLM_Mat_PTI_Check1(4, 3, double, arg2)) { glm::mat<4, 3, double> o = PyGLM_Mat_PTI_Get0(4, 3, double, arg1); glm::mat<4, 3, double> o2 = PyGLM_Mat_PTI_Get1(4, 3, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 4, float, arg1) && PyGLM_Mat_PTI_Check1(4, 4, float, arg2)) { glm::mat<4, 4, float> o = PyGLM_Mat_PTI_Get0(4, 4, float, arg1); glm::mat<4, 4, float> o2 = PyGLM_Mat_PTI_Get1(4, 4, float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 4, double, arg1) && PyGLM_Mat_PTI_Check1(4, 4, double, arg2)) { glm::mat<4, 4, double> o = PyGLM_Mat_PTI_Get0(4, 4, double, arg1); glm::mat<4, 4, double> o2 = PyGLM_Mat_PTI_Get1(4, 4, double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Qua_PTI_Check0(float, arg1) && PyGLM_Qua_PTI_Check1(float, arg2)) { glm::qua o = PyGLM_Qua_PTI_Get0(float, arg1); glm::qua o2 = PyGLM_Qua_PTI_Get1(float, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Qua_PTI_Check0(double, arg1) && PyGLM_Qua_PTI_Check1(double, arg2)) { glm::qua o = PyGLM_Qua_PTI_Get0(double, arg1); glm::qua o2 = PyGLM_Qua_PTI_Get1(double, arg2); return pack(glm::equal(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for equal()"); return NULL; } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_INT | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check2(1, int, arg3)) { glm::vec<1, int> o3 = PyGLM_Vec_PTI_Get2(1, int, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg1); glm::vec<1, float> o2 = PyGLM_Vec_PTI_Get1(1, float, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) { glm::vec<1, double> o = PyGLM_Vec_PTI_Get0(1, double, arg1); glm::vec<1, double> o2 = PyGLM_Vec_PTI_Get1(1, double, arg2); return pack(glm::equal(o, o2, o3)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for equal()"); return NULL; } if (PyGLM_Vec_PTI_Check2(2, int, arg3)) { glm::vec<2, int> o3 = PyGLM_Vec_PTI_Get2(2, int, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_SHAPE_2 | PyGLM_SHAPE_2xM | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_SHAPE_2 | PyGLM_SHAPE_2xM | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg1); glm::vec<2, float> o2 = PyGLM_Vec_PTI_Get1(2, float, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg1); glm::vec<2, double> o2 = PyGLM_Vec_PTI_Get1(2, double, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(2, 2, float, arg1) && PyGLM_Mat_PTI_Check1(2, 2, float, arg2)) { glm::mat<2, 2, float> o = PyGLM_Mat_PTI_Get0(2, 2, float, arg1); glm::mat<2, 2, float> o2 = PyGLM_Mat_PTI_Get1(2, 2, float, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(2, 2, double, arg1) && PyGLM_Mat_PTI_Check1(2, 2, double, arg2)) { glm::mat<2, 2, double> o = PyGLM_Mat_PTI_Get0(2, 2, double, arg1); glm::mat<2, 2, double> o2 = PyGLM_Mat_PTI_Get1(2, 2, double, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(2, 3, float, arg1) && PyGLM_Mat_PTI_Check1(2, 3, float, arg2)) { glm::mat<2, 3, float> o = PyGLM_Mat_PTI_Get0(2, 3, float, arg1); glm::mat<2, 3, float> o2 = PyGLM_Mat_PTI_Get1(2, 3, float, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(2, 3, double, arg1) && PyGLM_Mat_PTI_Check1(2, 3, double, arg2)) { glm::mat<2, 3, double> o = PyGLM_Mat_PTI_Get0(2, 3, double, arg1); glm::mat<2, 3, double> o2 = PyGLM_Mat_PTI_Get1(2, 3, double, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(2, 4, float, arg1) && PyGLM_Mat_PTI_Check1(2, 4, float, arg2)) { glm::mat<2, 4, float> o = PyGLM_Mat_PTI_Get0(2, 4, float, arg1); glm::mat<2, 4, float> o2 = PyGLM_Mat_PTI_Get1(2, 4, float, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(2, 4, double, arg1) && PyGLM_Mat_PTI_Check1(2, 4, double, arg2)) { glm::mat<2, 4, double> o = PyGLM_Mat_PTI_Get0(2, 4, double, arg1); glm::mat<2, 4, double> o2 = PyGLM_Mat_PTI_Get1(2, 4, double, arg2); return pack(glm::equal(o, o2, o3)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for equal()"); return NULL; } if (PyGLM_Vec_PTI_Check2(3, int, arg3)) { glm::vec<3, int> o3 = PyGLM_Vec_PTI_Get2(3, int, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_SHAPE_3 | PyGLM_SHAPE_3xM | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_SHAPE_3 | PyGLM_SHAPE_3xM | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg1); glm::vec<3, float> o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg1); glm::vec<3, double> o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(3, 2, float, arg1) && PyGLM_Mat_PTI_Check1(3, 2, float, arg2)) { glm::mat<3, 2, float> o = PyGLM_Mat_PTI_Get0(3, 2, float, arg1); glm::mat<3, 2, float> o2 = PyGLM_Mat_PTI_Get1(3, 2, float, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(3, 2, double, arg1) && PyGLM_Mat_PTI_Check1(3, 2, double, arg2)) { glm::mat<3, 2, double> o = PyGLM_Mat_PTI_Get0(3, 2, double, arg1); glm::mat<3, 2, double> o2 = PyGLM_Mat_PTI_Get1(3, 2, double, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(3, 3, float, arg1) && PyGLM_Mat_PTI_Check1(3, 3, float, arg2)) { glm::mat<3, 3, float> o = PyGLM_Mat_PTI_Get0(3, 3, float, arg1); glm::mat<3, 3, float> o2 = PyGLM_Mat_PTI_Get1(3, 3, float, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(3, 3, double, arg1) && PyGLM_Mat_PTI_Check1(3, 3, double, arg2)) { glm::mat<3, 3, double> o = PyGLM_Mat_PTI_Get0(3, 3, double, arg1); glm::mat<3, 3, double> o2 = PyGLM_Mat_PTI_Get1(3, 3, double, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(3, 4, float, arg1) && PyGLM_Mat_PTI_Check1(3, 4, float, arg2)) { glm::mat<3, 4, float> o = PyGLM_Mat_PTI_Get0(3, 4, float, arg1); glm::mat<3, 4, float> o2 = PyGLM_Mat_PTI_Get1(3, 4, float, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(3, 4, double, arg1) && PyGLM_Mat_PTI_Check1(3, 4, double, arg2)) { glm::mat<3, 4, double> o = PyGLM_Mat_PTI_Get0(3, 4, double, arg1); glm::mat<3, 4, double> o2 = PyGLM_Mat_PTI_Get1(3, 4, double, arg2); return pack(glm::equal(o, o2, o3)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for equal()"); return NULL; } if (PyGLM_Vec_PTI_Check2(4, int, arg3)) { glm::vec<4, int> o3 = PyGLM_Vec_PTI_Get2(4, int, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_SHAPE_4 | PyGLM_SHAPE_4xM | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_SHAPE_4 | PyGLM_SHAPE_4xM | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg1); glm::vec<4, float> o2 = PyGLM_Vec_PTI_Get1(4, float, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg1); glm::vec<4, double> o2 = PyGLM_Vec_PTI_Get1(4, double, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(4, 2, float, arg1) && PyGLM_Mat_PTI_Check1(4, 2, float, arg2)) { glm::mat<4, 2, float> o = PyGLM_Mat_PTI_Get0(4, 2, float, arg1); glm::mat<4, 2, float> o2 = PyGLM_Mat_PTI_Get1(4, 2, float, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(4, 2, double, arg1) && PyGLM_Mat_PTI_Check1(4, 2, double, arg2)) { glm::mat<4, 2, double> o = PyGLM_Mat_PTI_Get0(4, 2, double, arg1); glm::mat<4, 2, double> o2 = PyGLM_Mat_PTI_Get1(4, 2, double, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(4, 3, float, arg1) && PyGLM_Mat_PTI_Check1(4, 3, float, arg2)) { glm::mat<4, 3, float> o = PyGLM_Mat_PTI_Get0(4, 3, float, arg1); glm::mat<4, 3, float> o2 = PyGLM_Mat_PTI_Get1(4, 3, float, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(4, 3, double, arg1) && PyGLM_Mat_PTI_Check1(4, 3, double, arg2)) { glm::mat<4, 3, double> o = PyGLM_Mat_PTI_Get0(4, 3, double, arg1); glm::mat<4, 3, double> o2 = PyGLM_Mat_PTI_Get1(4, 3, double, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(4, 4, float, arg1) && PyGLM_Mat_PTI_Check1(4, 4, float, arg2)) { glm::mat<4, 4, float> o = PyGLM_Mat_PTI_Get0(4, 4, float, arg1); glm::mat<4, 4, float> o2 = PyGLM_Mat_PTI_Get1(4, 4, float, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(4, 4, double, arg1) && PyGLM_Mat_PTI_Check1(4, 4, double, arg2)) { glm::mat<4, 4, double> o = PyGLM_Mat_PTI_Get0(4, 4, double, arg1); glm::mat<4, 4, double> o2 = PyGLM_Mat_PTI_Get1(4, 4, double, arg2); return pack(glm::equal(o, o2, o3)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for equal()"); return NULL; } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2) && PyGLM_Vec_PTI_Check2(1, float, arg3)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg1); glm::vec<1, float> o2 = PyGLM_Vec_PTI_Get1(1, float, arg2); glm::vec<1, float> o3 = PyGLM_Vec_PTI_Get2(1, float, arg3); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2) && PyGLM_Vec_PTI_Check2(1, double, arg3)) { glm::vec<1, double> o = PyGLM_Vec_PTI_Get0(1, double, arg1); glm::vec<1, double> o2 = PyGLM_Vec_PTI_Get1(1, double, arg2); glm::vec<1, double> o3 = PyGLM_Vec_PTI_Get2(1, double, arg3); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2) && PyGLM_Vec_PTI_Check2(2, float, arg3)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg1); glm::vec<2, float> o2 = PyGLM_Vec_PTI_Get1(2, float, arg2); glm::vec<2, float> o3 = PyGLM_Vec_PTI_Get2(2, float, arg3); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2) && PyGLM_Vec_PTI_Check2(2, double, arg3)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg1); glm::vec<2, double> o2 = PyGLM_Vec_PTI_Get1(2, double, arg2); glm::vec<2, double> o3 = PyGLM_Vec_PTI_Get2(2, double, arg3); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2) && PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg1); glm::vec<3, float> o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); glm::vec<3, float> o3 = PyGLM_Vec_PTI_Get2(3, float, arg3); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2) && PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg1); glm::vec<3, double> o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); glm::vec<3, double> o3 = PyGLM_Vec_PTI_Get2(3, double, arg3); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2) && PyGLM_Vec_PTI_Check2(4, float, arg3)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg1); glm::vec<4, float> o2 = PyGLM_Vec_PTI_Get1(4, float, arg2); glm::vec<4, float> o3 = PyGLM_Vec_PTI_Get2(4, float, arg3); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2) && PyGLM_Vec_PTI_Check2(4, double, arg3)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg1); glm::vec<4, double> o2 = PyGLM_Vec_PTI_Get1(4, double, arg2); glm::vec<4, double> o3 = PyGLM_Vec_PTI_Get2(4, double, arg3); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, float, arg3)) { glm::vec<2, float> o3 = PyGLM_Vec_PTI_Get2(2, float, arg3); if (PyGLM_Mat_PTI_Check0(2, 2, float, arg1) && PyGLM_Mat_PTI_Check1(2, 2, float, arg2)) { glm::mat<2, 2, float> o = PyGLM_Mat_PTI_Get0(2, 2, float, arg1); glm::mat<2, 2, float> o2 = PyGLM_Mat_PTI_Get1(2, 2, float, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(2, 3, float, arg1) && PyGLM_Mat_PTI_Check1(2, 3, float, arg2)) { glm::mat<2, 3, float> o = PyGLM_Mat_PTI_Get0(2, 3, float, arg1); glm::mat<2, 3, float> o2 = PyGLM_Mat_PTI_Get1(2, 3, float, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(2, 4, float, arg1) && PyGLM_Mat_PTI_Check1(2, 4, float, arg2)) { glm::mat<2, 4, float> o = PyGLM_Mat_PTI_Get0(2, 4, float, arg1); glm::mat<2, 4, float> o2 = PyGLM_Mat_PTI_Get1(2, 4, float, arg2); return pack(glm::equal(o, o2, o3)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for equal()"); return NULL; } if (PyGLM_Vec_PTI_Check2(2, double, arg3)) { glm::vec<2, double> o3 = PyGLM_Vec_PTI_Get2(2, double, arg3); if (PyGLM_Mat_PTI_Check0(2, 2, double, arg1) && PyGLM_Mat_PTI_Check1(2, 2, double, arg2)) { glm::mat<2, 2, double> o = PyGLM_Mat_PTI_Get0(2, 2, double, arg1); glm::mat<2, 2, double> o2 = PyGLM_Mat_PTI_Get1(2, 2, double, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(2, 3, double, arg1) && PyGLM_Mat_PTI_Check1(2, 3, double, arg2)) { glm::mat<2, 3, double> o = PyGLM_Mat_PTI_Get0(2, 3, double, arg1); glm::mat<2, 3, double> o2 = PyGLM_Mat_PTI_Get1(2, 3, double, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(2, 4, double, arg1) && PyGLM_Mat_PTI_Check1(2, 4, double, arg2)) { glm::mat<2, 4, double> o = PyGLM_Mat_PTI_Get0(2, 4, double, arg1); glm::mat<2, 4, double> o2 = PyGLM_Mat_PTI_Get1(2, 4, double, arg2); return pack(glm::equal(o, o2, o3)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for equal()"); return NULL; } if (PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::vec<3, float> o3 = PyGLM_Vec_PTI_Get2(3, float, arg3); if (PyGLM_Mat_PTI_Check0(3, 2, float, arg1) && PyGLM_Mat_PTI_Check1(3, 2, float, arg2)) { glm::mat<3, 2, float> o = PyGLM_Mat_PTI_Get0(3, 2, float, arg1); glm::mat<3, 2, float> o2 = PyGLM_Mat_PTI_Get1(3, 2, float, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(3, 3, float, arg1) && PyGLM_Mat_PTI_Check1(3, 3, float, arg2)) { glm::mat<3, 3, float> o = PyGLM_Mat_PTI_Get0(3, 3, float, arg1); glm::mat<3, 3, float> o2 = PyGLM_Mat_PTI_Get1(3, 3, float, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(3, 4, float, arg1) && PyGLM_Mat_PTI_Check1(3, 4, float, arg2)) { glm::mat<3, 4, float> o = PyGLM_Mat_PTI_Get0(3, 4, float, arg1); glm::mat<3, 4, float> o2 = PyGLM_Mat_PTI_Get1(3, 4, float, arg2); return pack(glm::equal(o, o2, o3)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for equal()"); return NULL; } if (PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::vec<3, double> o3 = PyGLM_Vec_PTI_Get2(3, double, arg3); if (PyGLM_Mat_PTI_Check0(3, 2, double, arg1) && PyGLM_Mat_PTI_Check1(3, 2, double, arg2)) { glm::mat<3, 2, double> o = PyGLM_Mat_PTI_Get0(3, 2, double, arg1); glm::mat<3, 2, double> o2 = PyGLM_Mat_PTI_Get1(3, 2, double, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(3, 3, double, arg1) && PyGLM_Mat_PTI_Check1(3, 3, double, arg2)) { glm::mat<3, 3, double> o = PyGLM_Mat_PTI_Get0(3, 3, double, arg1); glm::mat<3, 3, double> o2 = PyGLM_Mat_PTI_Get1(3, 3, double, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(3, 4, double, arg1) && PyGLM_Mat_PTI_Check1(3, 4, double, arg2)) { glm::mat<3, 4, double> o = PyGLM_Mat_PTI_Get0(3, 4, double, arg1); glm::mat<3, 4, double> o2 = PyGLM_Mat_PTI_Get1(3, 4, double, arg2); return pack(glm::equal(o, o2, o3)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for equal()"); return NULL; } if (PyGLM_Vec_PTI_Check2(4, float, arg3)) { glm::vec<4, float> o3 = PyGLM_Vec_PTI_Get2(4, float, arg3); if (PyGLM_Mat_PTI_Check0(4, 2, float, arg1) && PyGLM_Mat_PTI_Check1(4, 2, float, arg2)) { glm::mat<4, 2, float> o = PyGLM_Mat_PTI_Get0(4, 2, float, arg1); glm::mat<4, 2, float> o2 = PyGLM_Mat_PTI_Get1(4, 2, float, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(4, 3, float, arg1) && PyGLM_Mat_PTI_Check1(4, 3, float, arg2)) { glm::mat<4, 3, float> o = PyGLM_Mat_PTI_Get0(4, 3, float, arg1); glm::mat<4, 3, float> o2 = PyGLM_Mat_PTI_Get1(4, 3, float, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(4, 4, float, arg1) && PyGLM_Mat_PTI_Check1(4, 4, float, arg2)) { glm::mat<4, 4, float> o = PyGLM_Mat_PTI_Get0(4, 4, float, arg1); glm::mat<4, 4, float> o2 = PyGLM_Mat_PTI_Get1(4, 4, float, arg2); return pack(glm::equal(o, o2, o3)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for equal()"); return NULL; } if (PyGLM_Vec_PTI_Check2(4, double, arg3)) { glm::vec<4, double> o3 = PyGLM_Vec_PTI_Get2(4, double, arg3); if (PyGLM_Mat_PTI_Check0(4, 2, double, arg1) && PyGLM_Mat_PTI_Check1(4, 2, double, arg2)) { glm::mat<4, 2, double> o = PyGLM_Mat_PTI_Get0(4, 2, double, arg1); glm::mat<4, 2, double> o2 = PyGLM_Mat_PTI_Get1(4, 2, double, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(4, 3, double, arg1) && PyGLM_Mat_PTI_Check1(4, 3, double, arg2)) { glm::mat<4, 3, double> o = PyGLM_Mat_PTI_Get0(4, 3, double, arg1); glm::mat<4, 3, double> o2 = PyGLM_Mat_PTI_Get1(4, 3, double, arg2); return pack(glm::equal(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(4, 4, double, arg1) && PyGLM_Mat_PTI_Check1(4, 4, double, arg2)) { glm::mat<4, 4, double> o = PyGLM_Mat_PTI_Get0(4, 4, double, arg1); glm::mat<4, 4, double> o2 = PyGLM_Mat_PTI_Get1(4, 4, double, arg2); return pack(glm::equal(o, o2, o3)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for equal()"); return NULL; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for equal()"); return NULL; } PyDoc_STRVAR(notEqual_docstr, "notEqual(*args) -> bvecN\n" " Returns `not equal(*args)`." ); static PyObject* notEqual(PyObject*, PyObject* args) { PyObject *arg1, *arg2, *arg3 = NULL; if (!PyArg_UnpackTuple(args, "notEqual", 2, 3, &arg1, &arg2, &arg3)) return NULL; if (arg3 == NULL) { PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_QUA | PyGLM_SHAPE_ALL | PyGLM_DT_ALL); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_T_QUA | PyGLM_SHAPE_ALL | PyGLM_DT_ALL); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg1); glm::vec<1, float> o2 = PyGLM_Vec_PTI_Get1(1, float, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) { glm::vec<1, double> o = PyGLM_Vec_PTI_Get0(1, double, arg1); glm::vec<1, double> o2 = PyGLM_Vec_PTI_Get1(1, double, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2)) { glm::vec<1, int> o = PyGLM_Vec_PTI_Get0(1, int, arg1); glm::vec<1, int> o2 = PyGLM_Vec_PTI_Get1(1, int, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(1, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(1, glm::uint, arg2)) { glm::vec<1, glm::uint> o = PyGLM_Vec_PTI_Get0(1, glm::uint, arg1); glm::vec<1, glm::uint> o2 = PyGLM_Vec_PTI_Get1(1, glm::uint, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(1, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i64, arg2)) { glm::vec<1, glm::i64> o = PyGLM_Vec_PTI_Get0(1, glm::i64, arg1); glm::vec<1, glm::i64> o2 = PyGLM_Vec_PTI_Get1(1, glm::i64, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(1, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u64, arg2)) { glm::vec<1, glm::u64> o = PyGLM_Vec_PTI_Get0(1, glm::u64, arg1); glm::vec<1, glm::u64> o2 = PyGLM_Vec_PTI_Get1(1, glm::u64, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(1, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i16, arg2)) { glm::vec<1, glm::i16> o = PyGLM_Vec_PTI_Get0(1, glm::i16, arg1); glm::vec<1, glm::i16> o2 = PyGLM_Vec_PTI_Get1(1, glm::i16, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(1, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u16, arg2)) { glm::vec<1, glm::u16> o = PyGLM_Vec_PTI_Get0(1, glm::u16, arg1); glm::vec<1, glm::u16> o2 = PyGLM_Vec_PTI_Get1(1, glm::u16, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(1, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(1, glm::i8, arg2)) { glm::vec<1, glm::i8> o = PyGLM_Vec_PTI_Get0(1, glm::i8, arg1); glm::vec<1, glm::i8> o2 = PyGLM_Vec_PTI_Get1(1, glm::i8, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(1, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(1, glm::u8, arg2)) { glm::vec<1, glm::u8> o = PyGLM_Vec_PTI_Get0(1, glm::u8, arg1); glm::vec<1, glm::u8> o2 = PyGLM_Vec_PTI_Get1(1, glm::u8, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(1, bool, arg1) && PyGLM_Vec_PTI_Check1(1, bool, arg2)) { glm::vec<1, bool> o = PyGLM_Vec_PTI_Get0(1, bool, arg1); glm::vec<1, bool> o2 = PyGLM_Vec_PTI_Get1(1, bool, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg1); glm::vec<2, float> o2 = PyGLM_Vec_PTI_Get1(2, float, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg1); glm::vec<2, double> o2 = PyGLM_Vec_PTI_Get1(2, double, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2)) { glm::vec<2, int> o = PyGLM_Vec_PTI_Get0(2, int, arg1); glm::vec<2, int> o2 = PyGLM_Vec_PTI_Get1(2, int, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(2, glm::uint, arg2)) { glm::vec<2, glm::uint> o = PyGLM_Vec_PTI_Get0(2, glm::uint, arg1); glm::vec<2, glm::uint> o2 = PyGLM_Vec_PTI_Get1(2, glm::uint, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i64, arg2)) { glm::vec<2, glm::i64> o = PyGLM_Vec_PTI_Get0(2, glm::i64, arg1); glm::vec<2, glm::i64> o2 = PyGLM_Vec_PTI_Get1(2, glm::i64, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u64, arg2)) { glm::vec<2, glm::u64> o = PyGLM_Vec_PTI_Get0(2, glm::u64, arg1); glm::vec<2, glm::u64> o2 = PyGLM_Vec_PTI_Get1(2, glm::u64, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i16, arg2)) { glm::vec<2, glm::i16> o = PyGLM_Vec_PTI_Get0(2, glm::i16, arg1); glm::vec<2, glm::i16> o2 = PyGLM_Vec_PTI_Get1(2, glm::i16, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u16, arg2)) { glm::vec<2, glm::u16> o = PyGLM_Vec_PTI_Get0(2, glm::u16, arg1); glm::vec<2, glm::u16> o2 = PyGLM_Vec_PTI_Get1(2, glm::u16, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(2, glm::i8, arg2)) { glm::vec<2, glm::i8> o = PyGLM_Vec_PTI_Get0(2, glm::i8, arg1); glm::vec<2, glm::i8> o2 = PyGLM_Vec_PTI_Get1(2, glm::i8, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(2, glm::u8, arg2)) { glm::vec<2, glm::u8> o = PyGLM_Vec_PTI_Get0(2, glm::u8, arg1); glm::vec<2, glm::u8> o2 = PyGLM_Vec_PTI_Get1(2, glm::u8, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, bool, arg1) && PyGLM_Vec_PTI_Check1(2, bool, arg2)) { glm::vec<2, bool> o = PyGLM_Vec_PTI_Get0(2, bool, arg1); glm::vec<2, bool> o2 = PyGLM_Vec_PTI_Get1(2, bool, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg1); glm::vec<3, float> o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg1); glm::vec<3, double> o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2)) { glm::vec<3, int> o = PyGLM_Vec_PTI_Get0(3, int, arg1); glm::vec<3, int> o2 = PyGLM_Vec_PTI_Get1(3, int, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(3, glm::uint, arg2)) { glm::vec<3, glm::uint> o = PyGLM_Vec_PTI_Get0(3, glm::uint, arg1); glm::vec<3, glm::uint> o2 = PyGLM_Vec_PTI_Get1(3, glm::uint, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i64, arg2)) { glm::vec<3, glm::i64> o = PyGLM_Vec_PTI_Get0(3, glm::i64, arg1); glm::vec<3, glm::i64> o2 = PyGLM_Vec_PTI_Get1(3, glm::i64, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u64, arg2)) { glm::vec<3, glm::u64> o = PyGLM_Vec_PTI_Get0(3, glm::u64, arg1); glm::vec<3, glm::u64> o2 = PyGLM_Vec_PTI_Get1(3, glm::u64, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i16, arg2)) { glm::vec<3, glm::i16> o = PyGLM_Vec_PTI_Get0(3, glm::i16, arg1); glm::vec<3, glm::i16> o2 = PyGLM_Vec_PTI_Get1(3, glm::i16, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u16, arg2)) { glm::vec<3, glm::u16> o = PyGLM_Vec_PTI_Get0(3, glm::u16, arg1); glm::vec<3, glm::u16> o2 = PyGLM_Vec_PTI_Get1(3, glm::u16, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(3, glm::i8, arg2)) { glm::vec<3, glm::i8> o = PyGLM_Vec_PTI_Get0(3, glm::i8, arg1); glm::vec<3, glm::i8> o2 = PyGLM_Vec_PTI_Get1(3, glm::i8, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(3, glm::u8, arg2)) { glm::vec<3, glm::u8> o = PyGLM_Vec_PTI_Get0(3, glm::u8, arg1); glm::vec<3, glm::u8> o2 = PyGLM_Vec_PTI_Get1(3, glm::u8, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, bool, arg1) && PyGLM_Vec_PTI_Check1(3, bool, arg2)) { glm::vec<3, bool> o = PyGLM_Vec_PTI_Get0(3, bool, arg1); glm::vec<3, bool> o2 = PyGLM_Vec_PTI_Get1(3, bool, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg1); glm::vec<4, float> o2 = PyGLM_Vec_PTI_Get1(4, float, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg1); glm::vec<4, double> o2 = PyGLM_Vec_PTI_Get1(4, double, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2)) { glm::vec<4, int> o = PyGLM_Vec_PTI_Get0(4, int, arg1); glm::vec<4, int> o2 = PyGLM_Vec_PTI_Get1(4, int, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, glm::uint, arg1) && PyGLM_Vec_PTI_Check1(4, glm::uint, arg2)) { glm::vec<4, glm::uint> o = PyGLM_Vec_PTI_Get0(4, glm::uint, arg1); glm::vec<4, glm::uint> o2 = PyGLM_Vec_PTI_Get1(4, glm::uint, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, glm::i64, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i64, arg2)) { glm::vec<4, glm::i64> o = PyGLM_Vec_PTI_Get0(4, glm::i64, arg1); glm::vec<4, glm::i64> o2 = PyGLM_Vec_PTI_Get1(4, glm::i64, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, glm::u64, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u64, arg2)) { glm::vec<4, glm::u64> o = PyGLM_Vec_PTI_Get0(4, glm::u64, arg1); glm::vec<4, glm::u64> o2 = PyGLM_Vec_PTI_Get1(4, glm::u64, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, glm::i16, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i16, arg2)) { glm::vec<4, glm::i16> o = PyGLM_Vec_PTI_Get0(4, glm::i16, arg1); glm::vec<4, glm::i16> o2 = PyGLM_Vec_PTI_Get1(4, glm::i16, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, glm::u16, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u16, arg2)) { glm::vec<4, glm::u16> o = PyGLM_Vec_PTI_Get0(4, glm::u16, arg1); glm::vec<4, glm::u16> o2 = PyGLM_Vec_PTI_Get1(4, glm::u16, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, glm::i8, arg1) && PyGLM_Vec_PTI_Check1(4, glm::i8, arg2)) { glm::vec<4, glm::i8> o = PyGLM_Vec_PTI_Get0(4, glm::i8, arg1); glm::vec<4, glm::i8> o2 = PyGLM_Vec_PTI_Get1(4, glm::i8, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, glm::u8, arg1) && PyGLM_Vec_PTI_Check1(4, glm::u8, arg2)) { glm::vec<4, glm::u8> o = PyGLM_Vec_PTI_Get0(4, glm::u8, arg1); glm::vec<4, glm::u8> o2 = PyGLM_Vec_PTI_Get1(4, glm::u8, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, bool, arg1) && PyGLM_Vec_PTI_Check1(4, bool, arg2)) { glm::vec<4, bool> o = PyGLM_Vec_PTI_Get0(4, bool, arg1); glm::vec<4, bool> o2 = PyGLM_Vec_PTI_Get1(4, bool, arg2); return pack(glm::notEqual(o, o2)); } //if (PyGLM_Mat_Check(2, 2, float, arg1) && PyGLM_Mat_Check(2, 2, float, arg2)) { // glm::mat<2, 2, float> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(2, 2, double, arg1) && PyGLM_Mat_Check(2, 2, double, arg2)) { // glm::mat<2, 2, double> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(2, 2, int, arg1) && PyGLM_Mat_Check(2, 2, int, arg2)) { // glm::mat<2, 2, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(2, 2, glm::uint, arg1) && PyGLM_Mat_Check(2, 2, glm::uint, arg2)) { // glm::mat<2, 2, glm::uint> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(2, 3, float, arg1) && PyGLM_Mat_Check(2, 3, float, arg2)) { // glm::mat<2, 3, float> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(2, 3, double, arg1) && PyGLM_Mat_Check(2, 3, double, arg2)) { // glm::mat<2, 3, double> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(2, 3, int, arg1) && PyGLM_Mat_Check(2, 3, int, arg2)) { // glm::mat<2, 3, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(2, 3, glm::uint, arg1) && PyGLM_Mat_Check(2, 3, glm::uint, arg2)) { // glm::mat<2, 3, glm::uint> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(2, 4, float, arg1) && PyGLM_Mat_Check(2, 4, float, arg2)) { // glm::mat<2, 4, float> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(2, 4, double, arg1) && PyGLM_Mat_Check(2, 4, double, arg2)) { // glm::mat<2, 4, double> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(2, 4, int, arg1) && PyGLM_Mat_Check(2, 4, int, arg2)) { // glm::mat<2, 4, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(2, 4, glm::uint, arg1) && PyGLM_Mat_Check(2, 4, glm::uint, arg2)) { // glm::mat<2, 4, glm::uint> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(3, 2, float, arg1) && PyGLM_Mat_Check(3, 2, float, arg2)) { // glm::mat<3, 2, float> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(3, 2, double, arg1) && PyGLM_Mat_Check(3, 2, double, arg2)) { // glm::mat<3, 2, double> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(3, 2, int, arg1) && PyGLM_Mat_Check(3, 2, int, arg2)) { // glm::mat<3, 2, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(3, 2, glm::uint, arg1) && PyGLM_Mat_Check(3, 2, glm::uint, arg2)) { // glm::mat<3, 2, glm::uint> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(3, 3, float, arg1) && PyGLM_Mat_Check(3, 3, float, arg2)) { // glm::mat<3, 3, float> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(3, 3, double, arg1) && PyGLM_Mat_Check(3, 3, double, arg2)) { // glm::mat<3, 3, double> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(3, 3, int, arg1) && PyGLM_Mat_Check(3, 3, int, arg2)) { // glm::mat<3, 3, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(3, 3, glm::uint, arg1) && PyGLM_Mat_Check(3, 3, glm::uint, arg2)) { // glm::mat<3, 3, glm::uint> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(3, 4, float, arg1) && PyGLM_Mat_Check(3, 4, float, arg2)) { // glm::mat<3, 4, float> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(3, 4, double, arg1) && PyGLM_Mat_Check(3, 4, double, arg2)) { // glm::mat<3, 4, double> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(3, 4, int, arg1) && PyGLM_Mat_Check(3, 4, int, arg2)) { // glm::mat<3, 4, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(3, 4, glm::uint, arg1) && PyGLM_Mat_Check(3, 4, glm::uint, arg2)) { // glm::mat<3, 4, glm::uint> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(4, 2, float, arg1) && PyGLM_Mat_Check(4, 2, float, arg2)) { // glm::mat<4, 2, float> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(4, 2, double, arg1) && PyGLM_Mat_Check(4, 2, double, arg2)) { // glm::mat<4, 2, double> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(4, 2, int, arg1) && PyGLM_Mat_Check(4, 2, int, arg2)) { // glm::mat<4, 2, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(4, 2, glm::uint, arg1) && PyGLM_Mat_Check(4, 2, glm::uint, arg2)) { // glm::mat<4, 2, glm::uint> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(4, 3, float, arg1) && PyGLM_Mat_Check(4, 3, float, arg2)) { // glm::mat<4, 3, float> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(4, 3, double, arg1) && PyGLM_Mat_Check(4, 3, double, arg2)) { // glm::mat<4, 3, double> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(4, 3, int, arg1) && PyGLM_Mat_Check(4, 3, int, arg2)) { // glm::mat<4, 3, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(4, 3, glm::uint, arg1) && PyGLM_Mat_Check(4, 3, glm::uint, arg2)) { // glm::mat<4, 3, glm::uint> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(4, 4, float, arg1) && PyGLM_Mat_Check(4, 4, float, arg2)) { // glm::mat<4, 4, float> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(4, 4, double, arg1) && PyGLM_Mat_Check(4, 4, double, arg2)) { // glm::mat<4, 4, double> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(4, 4, int, arg1) && PyGLM_Mat_Check(4, 4, int, arg2)) { // glm::mat<4, 4, int> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} //if (PyGLM_Mat_Check(4, 4, glm::uint, arg1) && PyGLM_Mat_Check(4, 4, glm::uint, arg2)) { // glm::mat<4, 4, glm::uint> o, o2; // unpack_mat(arg1, o); // unpack_mat(arg2, o2); // return pack(glm::notEqual(o, o2)); //} if (PyGLM_Qua_PTI_Check0(float, arg1) && PyGLM_Qua_PTI_Check1(float, arg2)) { glm::qua o = PyGLM_Qua_PTI_Get0(float, arg1); glm::qua o2 = PyGLM_Qua_PTI_Get1(float, arg2); return pack(glm::notEqual(o, o2)); } if (PyGLM_Qua_PTI_Check0(double, arg1) && PyGLM_Qua_PTI_Check1(double, arg2)) { glm::qua o = PyGLM_Qua_PTI_Get0(double, arg1); glm::qua o2 = PyGLM_Qua_PTI_Get1(double, arg2); return pack(glm::notEqual(o, o2)); } PyGLM_TYPEERROR_2O("invalid argument type(s) for notEqual(): ", arg1, arg2); return NULL; } if (PyLong_Check(arg3)) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { return pack(glm::notEqual(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg1); glm::vec<1, float> o2 = PyGLM_Vec_PTI_Get1(1, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) { glm::vec<1, double> o = PyGLM_Vec_PTI_Get0(1, double, arg1); glm::vec<1, double> o2 = PyGLM_Vec_PTI_Get1(1, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg1); glm::vec<2, float> o2 = PyGLM_Vec_PTI_Get1(2, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg1); glm::vec<2, double> o2 = PyGLM_Vec_PTI_Get1(2, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg1); glm::vec<3, float> o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg1); glm::vec<3, double> o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg1); glm::vec<4, float> o2 = PyGLM_Vec_PTI_Get1(4, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg1); glm::vec<4, double> o2 = PyGLM_Vec_PTI_Get1(4, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 2, float, arg1) && PyGLM_Mat_PTI_Check1(2, 2, float, arg2)) { glm::mat<2, 2, float> o = PyGLM_Mat_PTI_Get0(2, 2, float, arg1); glm::mat<2, 2, float> o2 = PyGLM_Mat_PTI_Get1(2, 2, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 2, double, arg1) && PyGLM_Mat_PTI_Check1(2, 2, double, arg2)) { glm::mat<2, 2, double> o = PyGLM_Mat_PTI_Get0(2, 2, double, arg1); glm::mat<2, 2, double> o2 = PyGLM_Mat_PTI_Get1(2, 2, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 3, float, arg1) && PyGLM_Mat_PTI_Check1(2, 3, float, arg2)) { glm::mat<2, 3, float> o = PyGLM_Mat_PTI_Get0(2, 3, float, arg1); glm::mat<2, 3, float> o2 = PyGLM_Mat_PTI_Get1(2, 3, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 3, double, arg1) && PyGLM_Mat_PTI_Check1(2, 3, double, arg2)) { glm::mat<2, 3, double> o = PyGLM_Mat_PTI_Get0(2, 3, double, arg1); glm::mat<2, 3, double> o2 = PyGLM_Mat_PTI_Get1(2, 3, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 4, float, arg1) && PyGLM_Mat_PTI_Check1(2, 4, float, arg2)) { glm::mat<2, 4, float> o = PyGLM_Mat_PTI_Get0(2, 4, float, arg1); glm::mat<2, 4, float> o2 = PyGLM_Mat_PTI_Get1(2, 4, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 4, double, arg1) && PyGLM_Mat_PTI_Check1(2, 4, double, arg2)) { glm::mat<2, 4, double> o = PyGLM_Mat_PTI_Get0(2, 4, double, arg1); glm::mat<2, 4, double> o2 = PyGLM_Mat_PTI_Get1(2, 4, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 2, float, arg1) && PyGLM_Mat_PTI_Check1(3, 2, float, arg2)) { glm::mat<3, 2, float> o = PyGLM_Mat_PTI_Get0(3, 2, float, arg1); glm::mat<3, 2, float> o2 = PyGLM_Mat_PTI_Get1(3, 2, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 2, double, arg1) && PyGLM_Mat_PTI_Check1(3, 2, double, arg2)) { glm::mat<3, 2, double> o = PyGLM_Mat_PTI_Get0(3, 2, double, arg1); glm::mat<3, 2, double> o2 = PyGLM_Mat_PTI_Get1(3, 2, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 3, float, arg1) && PyGLM_Mat_PTI_Check1(3, 3, float, arg2)) { glm::mat<3, 3, float> o = PyGLM_Mat_PTI_Get0(3, 3, float, arg1); glm::mat<3, 3, float> o2 = PyGLM_Mat_PTI_Get1(3, 3, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 3, double, arg1) && PyGLM_Mat_PTI_Check1(3, 3, double, arg2)) { glm::mat<3, 3, double> o = PyGLM_Mat_PTI_Get0(3, 3, double, arg1); glm::mat<3, 3, double> o2 = PyGLM_Mat_PTI_Get1(3, 3, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 4, float, arg1) && PyGLM_Mat_PTI_Check1(3, 4, float, arg2)) { glm::mat<3, 4, float> o = PyGLM_Mat_PTI_Get0(3, 4, float, arg1); glm::mat<3, 4, float> o2 = PyGLM_Mat_PTI_Get1(3, 4, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 4, double, arg1) && PyGLM_Mat_PTI_Check1(3, 4, double, arg2)) { glm::mat<3, 4, double> o = PyGLM_Mat_PTI_Get0(3, 4, double, arg1); glm::mat<3, 4, double> o2 = PyGLM_Mat_PTI_Get1(3, 4, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 2, float, arg1) && PyGLM_Mat_PTI_Check1(4, 2, float, arg2)) { glm::mat<4, 2, float> o = PyGLM_Mat_PTI_Get0(4, 2, float, arg1); glm::mat<4, 2, float> o2 = PyGLM_Mat_PTI_Get1(4, 2, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 2, double, arg1) && PyGLM_Mat_PTI_Check1(4, 2, double, arg2)) { glm::mat<4, 2, double> o = PyGLM_Mat_PTI_Get0(4, 2, double, arg1); glm::mat<4, 2, double> o2 = PyGLM_Mat_PTI_Get1(4, 2, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 3, float, arg1) && PyGLM_Mat_PTI_Check1(4, 3, float, arg2)) { glm::mat<4, 3, float> o = PyGLM_Mat_PTI_Get0(4, 3, float, arg1); glm::mat<4, 3, float> o2 = PyGLM_Mat_PTI_Get1(4, 3, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 3, double, arg1) && PyGLM_Mat_PTI_Check1(4, 3, double, arg2)) { glm::mat<4, 3, double> o = PyGLM_Mat_PTI_Get0(4, 3, double, arg1); glm::mat<4, 3, double> o2 = PyGLM_Mat_PTI_Get1(4, 3, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 4, float, arg1) && PyGLM_Mat_PTI_Check1(4, 4, float, arg2)) { glm::mat<4, 4, float> o = PyGLM_Mat_PTI_Get0(4, 4, float, arg1); glm::mat<4, 4, float> o2 = PyGLM_Mat_PTI_Get1(4, 4, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 4, double, arg1) && PyGLM_Mat_PTI_Check1(4, 4, double, arg2)) { glm::mat<4, 4, double> o = PyGLM_Mat_PTI_Get0(4, 4, double, arg1); glm::mat<4, 4, double> o2 = PyGLM_Mat_PTI_Get1(4, 4, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for notEqual()"); return NULL; } if (PyGLM_Number_Check(arg3)) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { pack(glm::notEqual(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_T_QUA | PyGLM_SHAPE_NxM | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_T_QUA | PyGLM_SHAPE_NxM | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg1); glm::vec<2, float> o2 = PyGLM_Vec_PTI_Get1(2, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg1); glm::vec<2, double> o2 = PyGLM_Vec_PTI_Get1(2, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg1); glm::vec<3, float> o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg1); glm::vec<3, double> o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg1); glm::vec<4, float> o2 = PyGLM_Vec_PTI_Get1(4, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg1); glm::vec<4, double> o2 = PyGLM_Vec_PTI_Get1(4, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 2, float, arg1) && PyGLM_Mat_PTI_Check1(2, 2, float, arg2)) { glm::mat<2, 2, float> o = PyGLM_Mat_PTI_Get0(2, 2, float, arg1); glm::mat<2, 2, float> o2 = PyGLM_Mat_PTI_Get1(2, 2, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 2, double, arg1) && PyGLM_Mat_PTI_Check1(2, 2, double, arg2)) { glm::mat<2, 2, double> o = PyGLM_Mat_PTI_Get0(2, 2, double, arg1); glm::mat<2, 2, double> o2 = PyGLM_Mat_PTI_Get1(2, 2, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 3, float, arg1) && PyGLM_Mat_PTI_Check1(2, 3, float, arg2)) { glm::mat<2, 3, float> o = PyGLM_Mat_PTI_Get0(2, 3, float, arg1); glm::mat<2, 3, float> o2 = PyGLM_Mat_PTI_Get1(2, 3, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 3, double, arg1) && PyGLM_Mat_PTI_Check1(2, 3, double, arg2)) { glm::mat<2, 3, double> o = PyGLM_Mat_PTI_Get0(2, 3, double, arg1); glm::mat<2, 3, double> o2 = PyGLM_Mat_PTI_Get1(2, 3, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 4, float, arg1) && PyGLM_Mat_PTI_Check1(2, 4, float, arg2)) { glm::mat<2, 4, float> o = PyGLM_Mat_PTI_Get0(2, 4, float, arg1); glm::mat<2, 4, float> o2 = PyGLM_Mat_PTI_Get1(2, 4, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(2, 4, double, arg1) && PyGLM_Mat_PTI_Check1(2, 4, double, arg2)) { glm::mat<2, 4, double> o = PyGLM_Mat_PTI_Get0(2, 4, double, arg1); glm::mat<2, 4, double> o2 = PyGLM_Mat_PTI_Get1(2, 4, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 2, float, arg1) && PyGLM_Mat_PTI_Check1(3, 2, float, arg2)) { glm::mat<3, 2, float> o = PyGLM_Mat_PTI_Get0(3, 2, float, arg1); glm::mat<3, 2, float> o2 = PyGLM_Mat_PTI_Get1(3, 2, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 2, double, arg1) && PyGLM_Mat_PTI_Check1(3, 2, double, arg2)) { glm::mat<3, 2, double> o = PyGLM_Mat_PTI_Get0(3, 2, double, arg1); glm::mat<3, 2, double> o2 = PyGLM_Mat_PTI_Get1(3, 2, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 3, float, arg1) && PyGLM_Mat_PTI_Check1(3, 3, float, arg2)) { glm::mat<3, 3, float> o = PyGLM_Mat_PTI_Get0(3, 3, float, arg1); glm::mat<3, 3, float> o2 = PyGLM_Mat_PTI_Get1(3, 3, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 3, double, arg1) && PyGLM_Mat_PTI_Check1(3, 3, double, arg2)) { glm::mat<3, 3, double> o = PyGLM_Mat_PTI_Get0(3, 3, double, arg1); glm::mat<3, 3, double> o2 = PyGLM_Mat_PTI_Get1(3, 3, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 4, float, arg1) && PyGLM_Mat_PTI_Check1(3, 4, float, arg2)) { glm::mat<3, 4, float> o = PyGLM_Mat_PTI_Get0(3, 4, float, arg1); glm::mat<3, 4, float> o2 = PyGLM_Mat_PTI_Get1(3, 4, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(3, 4, double, arg1) && PyGLM_Mat_PTI_Check1(3, 4, double, arg2)) { glm::mat<3, 4, double> o = PyGLM_Mat_PTI_Get0(3, 4, double, arg1); glm::mat<3, 4, double> o2 = PyGLM_Mat_PTI_Get1(3, 4, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 2, float, arg1) && PyGLM_Mat_PTI_Check1(4, 2, float, arg2)) { glm::mat<4, 2, float> o = PyGLM_Mat_PTI_Get0(4, 2, float, arg1); glm::mat<4, 2, float> o2 = PyGLM_Mat_PTI_Get1(4, 2, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 2, double, arg1) && PyGLM_Mat_PTI_Check1(4, 2, double, arg2)) { glm::mat<4, 2, double> o = PyGLM_Mat_PTI_Get0(4, 2, double, arg1); glm::mat<4, 2, double> o2 = PyGLM_Mat_PTI_Get1(4, 2, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 3, float, arg1) && PyGLM_Mat_PTI_Check1(4, 3, float, arg2)) { glm::mat<4, 3, float> o = PyGLM_Mat_PTI_Get0(4, 3, float, arg1); glm::mat<4, 3, float> o2 = PyGLM_Mat_PTI_Get1(4, 3, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 3, double, arg1) && PyGLM_Mat_PTI_Check1(4, 3, double, arg2)) { glm::mat<4, 3, double> o = PyGLM_Mat_PTI_Get0(4, 3, double, arg1); glm::mat<4, 3, double> o2 = PyGLM_Mat_PTI_Get1(4, 3, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 4, float, arg1) && PyGLM_Mat_PTI_Check1(4, 4, float, arg2)) { glm::mat<4, 4, float> o = PyGLM_Mat_PTI_Get0(4, 4, float, arg1); glm::mat<4, 4, float> o2 = PyGLM_Mat_PTI_Get1(4, 4, float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Mat_PTI_Check0(4, 4, double, arg1) && PyGLM_Mat_PTI_Check1(4, 4, double, arg2)) { glm::mat<4, 4, double> o = PyGLM_Mat_PTI_Get0(4, 4, double, arg1); glm::mat<4, 4, double> o2 = PyGLM_Mat_PTI_Get1(4, 4, double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Qua_PTI_Check0(float, arg1) && PyGLM_Qua_PTI_Check1(float, arg2)) { glm::qua o = PyGLM_Qua_PTI_Get0(float, arg1); glm::qua o2 = PyGLM_Qua_PTI_Get1(float, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Qua_PTI_Check0(double, arg1) && PyGLM_Qua_PTI_Check1(double, arg2)) { glm::qua o = PyGLM_Qua_PTI_Get0(double, arg1); glm::qua o2 = PyGLM_Qua_PTI_Get1(double, arg2); return pack(glm::notEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for notEqual()"); return NULL; } PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_DT_INT | PyGLM_DT_FD) if (PyGLM_Vec_PTI_Check2(2, int, arg3)) { glm::vec<2, int> o3 = PyGLM_Vec_PTI_Get2(2, int, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_SHAPE_2 | PyGLM_SHAPE_2xM | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_SHAPE_2 | PyGLM_SHAPE_2xM | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg1); glm::vec<2, float> o2 = PyGLM_Vec_PTI_Get1(2, float, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg1); glm::vec<2, double> o2 = PyGLM_Vec_PTI_Get1(2, double, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(2, 2, float, arg1) && PyGLM_Mat_PTI_Check1(2, 2, float, arg2)) { glm::mat<2, 2, float> o = PyGLM_Mat_PTI_Get0(2, 2, float, arg1); glm::mat<2, 2, float> o2 = PyGLM_Mat_PTI_Get1(2, 2, float, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(2, 2, double, arg1) && PyGLM_Mat_PTI_Check1(2, 2, double, arg2)) { glm::mat<2, 2, double> o = PyGLM_Mat_PTI_Get0(2, 2, double, arg1); glm::mat<2, 2, double> o2 = PyGLM_Mat_PTI_Get1(2, 2, double, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(2, 3, float, arg1) && PyGLM_Mat_PTI_Check1(2, 3, float, arg2)) { glm::mat<2, 3, float> o = PyGLM_Mat_PTI_Get0(2, 3, float, arg1); glm::mat<2, 3, float> o2 = PyGLM_Mat_PTI_Get1(2, 3, float, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(2, 3, double, arg1) && PyGLM_Mat_PTI_Check1(2, 3, double, arg2)) { glm::mat<2, 3, double> o = PyGLM_Mat_PTI_Get0(2, 3, double, arg1); glm::mat<2, 3, double> o2 = PyGLM_Mat_PTI_Get1(2, 3, double, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(2, 4, float, arg1) && PyGLM_Mat_PTI_Check1(2, 4, float, arg2)) { glm::mat<2, 4, float> o = PyGLM_Mat_PTI_Get0(2, 4, float, arg1); glm::mat<2, 4, float> o2 = PyGLM_Mat_PTI_Get1(2, 4, float, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(2, 4, double, arg1) && PyGLM_Mat_PTI_Check1(2, 4, double, arg2)) { glm::mat<2, 4, double> o = PyGLM_Mat_PTI_Get0(2, 4, double, arg1); glm::mat<2, 4, double> o2 = PyGLM_Mat_PTI_Get1(2, 4, double, arg2); return pack(glm::notEqual(o, o2, o3)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for notEqual()"); return NULL; } if (PyGLM_Vec_PTI_Check2(3, int, arg3)) { glm::vec<3, int> o3 = PyGLM_Vec_PTI_Get2(3, int, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_SHAPE_3 | PyGLM_SHAPE_3xM | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_SHAPE_3 | PyGLM_SHAPE_3xM | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg1); glm::vec<3, float> o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg1); glm::vec<3, double> o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(3, 2, float, arg1) && PyGLM_Mat_PTI_Check1(3, 2, float, arg2)) { glm::mat<3, 2, float> o = PyGLM_Mat_PTI_Get0(3, 2, float, arg1); glm::mat<3, 2, float> o2 = PyGLM_Mat_PTI_Get1(3, 2, float, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(3, 2, double, arg1) && PyGLM_Mat_PTI_Check1(3, 2, double, arg2)) { glm::mat<3, 2, double> o = PyGLM_Mat_PTI_Get0(3, 2, double, arg1); glm::mat<3, 2, double> o2 = PyGLM_Mat_PTI_Get1(3, 2, double, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(3, 3, float, arg1) && PyGLM_Mat_PTI_Check1(3, 3, float, arg2)) { glm::mat<3, 3, float> o = PyGLM_Mat_PTI_Get0(3, 3, float, arg1); glm::mat<3, 3, float> o2 = PyGLM_Mat_PTI_Get1(3, 3, float, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(3, 3, double, arg1) && PyGLM_Mat_PTI_Check1(3, 3, double, arg2)) { glm::mat<3, 3, double> o = PyGLM_Mat_PTI_Get0(3, 3, double, arg1); glm::mat<3, 3, double> o2 = PyGLM_Mat_PTI_Get1(3, 3, double, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(3, 4, float, arg1) && PyGLM_Mat_PTI_Check1(3, 4, float, arg2)) { glm::mat<3, 4, float> o = PyGLM_Mat_PTI_Get0(3, 4, float, arg1); glm::mat<3, 4, float> o2 = PyGLM_Mat_PTI_Get1(3, 4, float, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(3, 4, double, arg1) && PyGLM_Mat_PTI_Check1(3, 4, double, arg2)) { glm::mat<3, 4, double> o = PyGLM_Mat_PTI_Get0(3, 4, double, arg1); glm::mat<3, 4, double> o2 = PyGLM_Mat_PTI_Get1(3, 4, double, arg2); return pack(glm::notEqual(o, o2, o3)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for notEqual()"); return NULL; } if (PyGLM_Vec_PTI_Check2(4, int, arg3)) { glm::vec<4, int> o3 = PyGLM_Vec_PTI_Get2(4, int, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_SHAPE_4 | PyGLM_SHAPE_4xM | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_SHAPE_4 | PyGLM_SHAPE_4xM | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg1); glm::vec<4, float> o2 = PyGLM_Vec_PTI_Get1(4, float, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg1); glm::vec<4, double> o2 = PyGLM_Vec_PTI_Get1(4, double, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(4, 2, float, arg1) && PyGLM_Mat_PTI_Check1(4, 2, float, arg2)) { glm::mat<4, 2, float> o = PyGLM_Mat_PTI_Get0(4, 2, float, arg1); glm::mat<4, 2, float> o2 = PyGLM_Mat_PTI_Get1(4, 2, float, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(4, 2, double, arg1) && PyGLM_Mat_PTI_Check1(4, 2, double, arg2)) { glm::mat<4, 2, double> o = PyGLM_Mat_PTI_Get0(4, 2, double, arg1); glm::mat<4, 2, double> o2 = PyGLM_Mat_PTI_Get1(4, 2, double, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(4, 3, float, arg1) && PyGLM_Mat_PTI_Check1(4, 3, float, arg2)) { glm::mat<4, 3, float> o = PyGLM_Mat_PTI_Get0(4, 3, float, arg1); glm::mat<4, 3, float> o2 = PyGLM_Mat_PTI_Get1(4, 3, float, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(4, 3, double, arg1) && PyGLM_Mat_PTI_Check1(4, 3, double, arg2)) { glm::mat<4, 3, double> o = PyGLM_Mat_PTI_Get0(4, 3, double, arg1); glm::mat<4, 3, double> o2 = PyGLM_Mat_PTI_Get1(4, 3, double, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(4, 4, float, arg1) && PyGLM_Mat_PTI_Check1(4, 4, float, arg2)) { glm::mat<4, 4, float> o = PyGLM_Mat_PTI_Get0(4, 4, float, arg1); glm::mat<4, 4, float> o2 = PyGLM_Mat_PTI_Get1(4, 4, float, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(4, 4, double, arg1) && PyGLM_Mat_PTI_Check1(4, 4, double, arg2)) { glm::mat<4, 4, double> o = PyGLM_Mat_PTI_Get0(4, 4, double, arg1); glm::mat<4, 4, double> o2 = PyGLM_Mat_PTI_Get1(4, 4, double, arg2); return pack(glm::notEqual(o, o2, o3)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for notEqual()"); return NULL; } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2) && PyGLM_Vec_PTI_Check2(1, float, arg3)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg1); glm::vec<1, float> o2 = PyGLM_Vec_PTI_Get1(1, float, arg2); glm::vec<1, float> o3 = PyGLM_Vec_PTI_Get2(1, float, arg3); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2) && PyGLM_Vec_PTI_Check2(1, double, arg3)) { glm::vec<1, double> o = PyGLM_Vec_PTI_Get0(1, double, arg1); glm::vec<1, double> o2 = PyGLM_Vec_PTI_Get1(1, double, arg2); glm::vec<1, double> o3 = PyGLM_Vec_PTI_Get2(1, double, arg3); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2) && PyGLM_Vec_PTI_Check2(2, float, arg3)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg1); glm::vec<2, float> o2 = PyGLM_Vec_PTI_Get1(2, float, arg2); glm::vec<2, float> o3 = PyGLM_Vec_PTI_Get2(2, float, arg3); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2) && PyGLM_Vec_PTI_Check2(2, double, arg3)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg1); glm::vec<2, double> o2 = PyGLM_Vec_PTI_Get1(2, double, arg2); glm::vec<2, double> o3 = PyGLM_Vec_PTI_Get2(2, double, arg3); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2) && PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg1); glm::vec<3, float> o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); glm::vec<3, float> o3 = PyGLM_Vec_PTI_Get2(3, float, arg3); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2) && PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg1); glm::vec<3, double> o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); glm::vec<3, double> o3 = PyGLM_Vec_PTI_Get2(3, double, arg3); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2) && PyGLM_Vec_PTI_Check2(4, float, arg3)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg1); glm::vec<4, float> o2 = PyGLM_Vec_PTI_Get1(4, float, arg2); glm::vec<4, float> o3 = PyGLM_Vec_PTI_Get2(4, float, arg3); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2) && PyGLM_Vec_PTI_Check2(4, double, arg3)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg1); glm::vec<4, double> o2 = PyGLM_Vec_PTI_Get1(4, double, arg2); glm::vec<4, double> o3 = PyGLM_Vec_PTI_Get2(4, double, arg3); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check2(2, float, arg3)) { glm::vec<2, float> o3 = PyGLM_Vec_PTI_Get2(2, float, arg3); if (PyGLM_Mat_PTI_Check0(2, 2, float, arg1) && PyGLM_Mat_PTI_Check1(2, 2, float, arg2)) { glm::mat<2, 2, float> o = PyGLM_Mat_PTI_Get0(2, 2, float, arg1); glm::mat<2, 2, float> o2 = PyGLM_Mat_PTI_Get1(2, 2, float, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(2, 3, float, arg1) && PyGLM_Mat_PTI_Check1(2, 3, float, arg2)) { glm::mat<2, 3, float> o = PyGLM_Mat_PTI_Get0(2, 3, float, arg1); glm::mat<2, 3, float> o2 = PyGLM_Mat_PTI_Get1(2, 3, float, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(2, 4, float, arg1) && PyGLM_Mat_PTI_Check1(2, 4, float, arg2)) { glm::mat<2, 4, float> o = PyGLM_Mat_PTI_Get0(2, 4, float, arg1); glm::mat<2, 4, float> o2 = PyGLM_Mat_PTI_Get1(2, 4, float, arg2); return pack(glm::notEqual(o, o2, o3)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for notEqual()"); return NULL; } if (PyGLM_Vec_PTI_Check2(2, double, arg3)) { glm::vec<2, double> o3 = PyGLM_Vec_PTI_Get2(2, double, arg3); if (PyGLM_Mat_PTI_Check0(2, 2, double, arg1) && PyGLM_Mat_PTI_Check1(2, 2, double, arg2)) { glm::mat<2, 2, double> o = PyGLM_Mat_PTI_Get0(2, 2, double, arg1); glm::mat<2, 2, double> o2 = PyGLM_Mat_PTI_Get1(2, 2, double, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(2, 3, double, arg1) && PyGLM_Mat_PTI_Check1(2, 3, double, arg2)) { glm::mat<2, 3, double> o = PyGLM_Mat_PTI_Get0(2, 3, double, arg1); glm::mat<2, 3, double> o2 = PyGLM_Mat_PTI_Get1(2, 3, double, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(2, 4, double, arg1) && PyGLM_Mat_PTI_Check1(2, 4, double, arg2)) { glm::mat<2, 4, double> o = PyGLM_Mat_PTI_Get0(2, 4, double, arg1); glm::mat<2, 4, double> o2 = PyGLM_Mat_PTI_Get1(2, 4, double, arg2); return pack(glm::notEqual(o, o2, o3)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for notEqual()"); return NULL; } if (PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::vec<3, float> o3 = PyGLM_Vec_PTI_Get2(3, float, arg3); if (PyGLM_Mat_PTI_Check0(3, 2, float, arg1) && PyGLM_Mat_PTI_Check1(3, 2, float, arg2)) { glm::mat<3, 2, float> o = PyGLM_Mat_PTI_Get0(3, 2, float, arg1); glm::mat<3, 2, float> o2 = PyGLM_Mat_PTI_Get1(3, 2, float, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(3, 3, float, arg1) && PyGLM_Mat_PTI_Check1(3, 3, float, arg2)) { glm::mat<3, 3, float> o = PyGLM_Mat_PTI_Get0(3, 3, float, arg1); glm::mat<3, 3, float> o2 = PyGLM_Mat_PTI_Get1(3, 3, float, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(3, 4, float, arg1) && PyGLM_Mat_PTI_Check1(3, 4, float, arg2)) { glm::mat<3, 4, float> o = PyGLM_Mat_PTI_Get0(3, 4, float, arg1); glm::mat<3, 4, float> o2 = PyGLM_Mat_PTI_Get1(3, 4, float, arg2); return pack(glm::notEqual(o, o2, o3)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for notEqual()"); return NULL; } if (PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::vec<3, double> o3 = PyGLM_Vec_PTI_Get2(3, double, arg3); if (PyGLM_Mat_PTI_Check0(3, 2, double, arg1) && PyGLM_Mat_PTI_Check1(3, 2, double, arg2)) { glm::mat<3, 2, double> o = PyGLM_Mat_PTI_Get0(3, 2, double, arg1); glm::mat<3, 2, double> o2 = PyGLM_Mat_PTI_Get1(3, 2, double, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(3, 3, double, arg1) && PyGLM_Mat_PTI_Check1(3, 3, double, arg2)) { glm::mat<3, 3, double> o = PyGLM_Mat_PTI_Get0(3, 3, double, arg1); glm::mat<3, 3, double> o2 = PyGLM_Mat_PTI_Get1(3, 3, double, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(3, 4, double, arg1) && PyGLM_Mat_PTI_Check1(3, 4, double, arg2)) { glm::mat<3, 4, double> o = PyGLM_Mat_PTI_Get0(3, 4, double, arg1); glm::mat<3, 4, double> o2 = PyGLM_Mat_PTI_Get1(3, 4, double, arg2); return pack(glm::notEqual(o, o2, o3)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for notEqual()"); return NULL; } if (PyGLM_Vec_PTI_Check2(4, float, arg3)) { glm::vec<4, float> o3 = PyGLM_Vec_PTI_Get2(4, float, arg3); if (PyGLM_Mat_PTI_Check0(4, 2, float, arg1) && PyGLM_Mat_PTI_Check1(4, 2, float, arg2)) { glm::mat<4, 2, float> o = PyGLM_Mat_PTI_Get0(4, 2, float, arg1); glm::mat<4, 2, float> o2 = PyGLM_Mat_PTI_Get1(4, 2, float, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(4, 3, float, arg1) && PyGLM_Mat_PTI_Check1(4, 3, float, arg2)) { glm::mat<4, 3, float> o = PyGLM_Mat_PTI_Get0(4, 3, float, arg1); glm::mat<4, 3, float> o2 = PyGLM_Mat_PTI_Get1(4, 3, float, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(4, 4, float, arg1) && PyGLM_Mat_PTI_Check1(4, 4, float, arg2)) { glm::mat<4, 4, float> o = PyGLM_Mat_PTI_Get0(4, 4, float, arg1); glm::mat<4, 4, float> o2 = PyGLM_Mat_PTI_Get1(4, 4, float, arg2); return pack(glm::notEqual(o, o2, o3)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for notEqual()"); return NULL; } if (PyGLM_Vec_PTI_Check2(4, double, arg3)) { glm::vec<4, double> o3 = PyGLM_Vec_PTI_Get2(4, double, arg3); if (PyGLM_Mat_PTI_Check0(4, 2, double, arg1) && PyGLM_Mat_PTI_Check1(4, 2, double, arg2)) { glm::mat<4, 2, double> o = PyGLM_Mat_PTI_Get0(4, 2, double, arg1); glm::mat<4, 2, double> o2 = PyGLM_Mat_PTI_Get1(4, 2, double, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(4, 3, double, arg1) && PyGLM_Mat_PTI_Check1(4, 3, double, arg2)) { glm::mat<4, 3, double> o = PyGLM_Mat_PTI_Get0(4, 3, double, arg1); glm::mat<4, 3, double> o2 = PyGLM_Mat_PTI_Get1(4, 3, double, arg2); return pack(glm::notEqual(o, o2, o3)); } if (PyGLM_Mat_PTI_Check0(4, 4, double, arg1) && PyGLM_Mat_PTI_Check1(4, 4, double, arg2)) { glm::mat<4, 4, double> o = PyGLM_Mat_PTI_Get0(4, 4, double, arg1); glm::mat<4, 4, double> o2 = PyGLM_Mat_PTI_Get1(4, 4, double, arg2); return pack(glm::notEqual(o, o2, o3)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for notEqual()"); return NULL; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for notEqual()"); return NULL; } PyDoc_STRVAR(lessThan_docstr, "lessThan(x: vecN, y: vecN) -> bvecN\n" " Returns the component-wise comparison of result `x < y`.\n" "lessThan(x: quat, y: quat) -> bvec4\n" " Returns the component-wise comparison of result `x < y`." ); PyGLM_MAKE_GLM_FUNC_VV_QQ(lessThan) PyDoc_STRVAR(lessThanEqual_docstr, "lessThanEqual(x: vecN, y: vecN) -> bvecN\n" " Returns the component-wise comparison of result `x <= y`.\n" "lessThanEqual(x: quat, y: quat) -> bvec4\n" " Returns the component-wise comparison of result `x <= y`." ); PyGLM_MAKE_GLM_FUNC_VV_QQ(lessThanEqual) PyDoc_STRVAR(greaterThan_docstr, "greaterThan(x: vecN, y: vecN) -> bvecN\n" " Returns the component-wise comparison of result `x > y`.\n" "greaterThan(x: quat, y: quat) -> bvec4\n" " Returns the component-wise comparison of result `x > y`." ); PyGLM_MAKE_GLM_FUNC_VV_QQ(greaterThan) PyDoc_STRVAR(greaterThanEqual_docstr, "greaterThanEqual(x: vecN, y: vecN) -> bvecN\n" " Returns the component-wise comparison of result `x >= y`.\n" "greaterThanEqual(x: quat, y: quat) -> bvec4\n" " Returns the component-wise comparison of result `x >= y`." ); PyGLM_MAKE_GLM_FUNC_VV_QQ(greaterThanEqual) PyDoc_STRVAR(any_docstr, "any(v: bvecN) -> bool\n" " Returns `True` if any component of `x` is `True`." ); static PyObject* any(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check0(1, bool, arg)) { if (glm::any(PyGLM_Vec_PTI_Get0(1, bool, arg))) { Py_RETURN_TRUE; } Py_RETURN_FALSE; } if (PyGLM_Vec_PTI_Check0(2, bool, arg)) { if (glm::any(PyGLM_Vec_PTI_Get0(2, bool, arg))) { Py_RETURN_TRUE; } Py_RETURN_FALSE; } if (PyGLM_Vec_PTI_Check0(3, bool, arg)) { if (glm::any(PyGLM_Vec_PTI_Get0(3, bool, arg))) { Py_RETURN_TRUE; } Py_RETURN_FALSE; } if (PyGLM_Vec_PTI_Check0(4, bool, arg)) { if (glm::any(PyGLM_Vec_PTI_Get0(4, bool, arg))) { Py_RETURN_TRUE; } Py_RETURN_FALSE; } PyGLM_TYPEERROR_O("invalid argument type for any(): ", arg); return NULL; } PyDoc_STRVAR(all_docstr, "all(v: bvecN) -> bool\n" " Returns `True` if all components of `x` are `True`." ); static PyObject* all(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check0(1, bool, arg)) { if (glm::all(PyGLM_Vec_PTI_Get0(1, bool, arg))) { Py_RETURN_TRUE; } Py_RETURN_FALSE; } if (PyGLM_Vec_PTI_Check0(2, bool, arg)) { if (glm::all(PyGLM_Vec_PTI_Get0(2, bool, arg))) { Py_RETURN_TRUE; } Py_RETURN_FALSE; } if (PyGLM_Vec_PTI_Check0(3, bool, arg)) { if (glm::all(PyGLM_Vec_PTI_Get0(3, bool, arg))) { Py_RETURN_TRUE; } Py_RETURN_FALSE; } if (PyGLM_Vec_PTI_Check0(4, bool, arg)) { if (glm::all(PyGLM_Vec_PTI_Get0(4, bool, arg))) { Py_RETURN_TRUE; } Py_RETURN_FALSE; } PyGLM_TYPEERROR_O("invalid argument type for all(): ", arg); return NULL; } PyDoc_STRVAR(not_docstr, "not_(v: bvecN) -> bool\n" " Returns the component-wise logical complement of `x`." ); static PyObject* not_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_BOOL); if (PyGLM_Vec_PTI_Check0(1, bool, arg)) { return pack_vec(glm::not_(PyGLM_Vec_PTI_Get0(1, bool, arg))); } if (PyGLM_Vec_PTI_Check0(2, bool, arg)) { return pack_vec(glm::not_(PyGLM_Vec_PTI_Get0(2, bool, arg))); } if (PyGLM_Vec_PTI_Check0(3, bool, arg)) { return pack_vec(glm::not_(PyGLM_Vec_PTI_Get0(3, bool, arg))); } if (PyGLM_Vec_PTI_Check0(4, bool, arg)) { return pack_vec(glm::not_(PyGLM_Vec_PTI_Get0(4, bool, arg))); } PyGLM_TYPEERROR_O("invalid argument type for not_(): ", arg); return NULL; } #define FUNC_VECTOR_RELATIONAL_METHODS \ { "equal", (PyCFunction)equal, METH_VARARGS, equal_docstr }, \ { "notEqual", (PyCFunction)notEqual, METH_VARARGS, notEqual_docstr }, \ { "lessThan", (PyCFunction)lessThan_, METH_VARARGS, lessThan_docstr }, \ { "lessThanEqual", (PyCFunction)lessThanEqual_, METH_VARARGS, lessThanEqual_docstr }, \ { "greaterThan", (PyCFunction)greaterThan_, METH_VARARGS, greaterThan_docstr }, \ { "greaterThanEqual", (PyCFunction)greaterThanEqual_, METH_VARARGS, greaterThanEqual_docstr }, \ { "any", (PyCFunction)any, METH_O, any_docstr }, \ { "all", (PyCFunction)all, METH_O, all_docstr }, \ { "not_", (PyCFunction)not_, METH_O, not_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/function_generator_macros.h000066400000000000000000002604721511156275200267420ustar00rootroot00000000000000#pragma once #include "../compiler_setup.h" #include "../types/all.h" #include "../internal_functions/all.h" #define PyGLM_MAKE_GLM_FUNC_V3__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* arg) {\ PyGLM_PTI_Init0(arg, PyGLM_T_ANY_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD);\ if (PyGLM_Vec_PTI_Check0(3, float, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg)));\ }\ PyGLM_TYPEERROR_O("invalid argument type for " #NAME "(): ", arg);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_V2__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* arg) {\ PyGLM_PTI_Init0(arg, PyGLM_T_ANY_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FD);\ if (PyGLM_Vec_PTI_Check0(2, float, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, float, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(2, double, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, double, arg)));\ }\ PyGLM_TYPEERROR_O("invalid argument type for " #NAME "(): ", arg);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_N_V__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* arg) {\ if (PyGLM_Number_Check(arg)) {\ return pack(glm::NAME(PyGLM_Number_FromPyObject(arg)));\ }\ PyGLM_PTI_Init0(arg, PyGLM_T_ANY_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ if (PyGLM_Vec_PTI_Check0(1, float, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, float, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(1, double, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, double, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(2, float, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, float, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(2, double, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, double, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(3, float, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(4, float, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, float, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(4, double, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, double, arg)));\ }\ PyGLM_TYPEERROR_O("invalid argument type for " #NAME "(): ", arg);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_NN_VV_VN__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2;\ PyGLM_Arg_Unpack_2O(args, #NAME, arg1, arg2);\ if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ PyGLM_PTI_Init0(arg1, PyGLM_T_ANY_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ PyGLM_PTI_Init1(arg2, PyGLM_T_ANY_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ PyGLM_TYPEERROR_2O("invalid argument type(s) for " #NAME "(): ", arg1, arg2);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_NNN_VVV_VNN__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2, *arg3;\ PyGLM_Arg_Unpack_3O(args, #NAME, arg1, arg2, arg3);\ if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ PyGLM_PTI_Init0(arg1, PyGLM_T_ANY_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ PyGLM_PTI_Init1(arg2, PyGLM_T_ANY_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ PyGLM_PTI_Init2(arg3, PyGLM_T_ANY_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2) && PyGLM_Vec_PTI_Check2(1, float, arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2), PyGLM_Vec_PTI_Get2(1, float, arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2) && PyGLM_Vec_PTI_Check2(2, float, arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2), PyGLM_Vec_PTI_Get2(2, float, arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2) && PyGLM_Vec_PTI_Check2(3, float, arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2), PyGLM_Vec_PTI_Get2(3, float, arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2) && PyGLM_Vec_PTI_Check2(4, float, arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2), PyGLM_Vec_PTI_Get2(4, float, arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2) && PyGLM_Vec_PTI_Check2(1, double, arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2), PyGLM_Vec_PTI_Get2(1, double, arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2) && PyGLM_Vec_PTI_Check2(2, double, arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2), PyGLM_Vec_PTI_Get2(2, double, arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2) && PyGLM_Vec_PTI_Check2(3, double, arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2), PyGLM_Vec_PTI_Get2(3, double, arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2) && PyGLM_Vec_PTI_Check2(4, double, arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2), PyGLM_Vec_PTI_Get2(4, double, arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for " #NAME "()");\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_N_V_Q__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* arg) {\ if (PyGLM_Number_Check(arg)) {\ return pack(glm::NAME(PyGLM_Number_FromPyObject(arg)));\ }\ PyGLM_PTI_Init0(arg, PyGLM_T_ANY_VEC | PyGLM_T_QUA | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ if (PyGLM_PTI_IsVec(0)) {\ if (PyGLM_Vec_PTI_Check0(1, float, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, float, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(1, double, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, double, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(2, float, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, float, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(2, double, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, double, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(3, float, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(4, float, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, float, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(4, double, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, double, arg)));\ }\ }\ if (PyGLM_Qua_PTI_Check0(float, arg)) {\ return pack(glm::NAME(PyGLM_Qua_PTI_Get0(float, arg)));\ }\ if (PyGLM_Qua_PTI_Check0(double, arg)) {\ return pack(glm::NAME(PyGLM_Qua_PTI_Get0(double, arg)));\ }\ PyGLM_TYPEERROR_O("invalid argument type for " #NAME "(): ", arg);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_NN_VV__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2;\ PyGLM_Arg_Unpack_2O(args, #NAME, arg1, arg2);\ if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ PyGLM_PTI_Init0(arg1, PyGLM_T_ANY_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ PyGLM_PTI_Init1(arg2, PyGLM_T_ANY_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2)));\ }\ PyGLM_TYPEERROR_2O("invalid argument type(s) for " #NAME "(): ", arg1, arg2);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_V_Q__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* arg) {\ PyGLM_PTI_Init0(arg, PyGLM_T_ANY_VEC | PyGLM_T_QUA | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ if (PyGLM_PTI_IsVec(0)) {\ if (PyGLM_Vec_PTI_Check0(1, float, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, float, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(1, double, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, double, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(2, float, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, float, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(2, double, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, double, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(3, float, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(4, float, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, float, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(4, double, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, double, arg)));\ }\ }\ if (PyGLM_Qua_PTI_Check0(float, arg)) {\ return pack(glm::NAME(PyGLM_Qua_PTI_Get0(float, arg)));\ }\ if (PyGLM_Qua_PTI_Check0(double, arg)) {\ return pack(glm::NAME(PyGLM_Qua_PTI_Get0(double, arg)));\ }\ PyGLM_TYPEERROR_O("invalid argument type for " #NAME "(): ", arg);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_NNN_VVV__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2, *arg3;\ PyGLM_Arg_Unpack_3O(args, #NAME, arg1, arg2, arg3);\ if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ PyGLM_PTI_Init0(arg1, PyGLM_T_ANY_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ PyGLM_PTI_Init1(arg2, PyGLM_T_ANY_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ PyGLM_PTI_Init2(arg3, PyGLM_T_ANY_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2) && PyGLM_Vec_PTI_Check2(1, float, arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2), PyGLM_Vec_PTI_Get2(1, float, arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2) && PyGLM_Vec_PTI_Check2(1, double, arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2), PyGLM_Vec_PTI_Get2(1, double, arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2) && PyGLM_Vec_PTI_Check2(2, float, arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2), PyGLM_Vec_PTI_Get2(2, float, arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2) && PyGLM_Vec_PTI_Check2(2, double, arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2), PyGLM_Vec_PTI_Get2(2, double, arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2) && PyGLM_Vec_PTI_Check2(3, float, arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2), PyGLM_Vec_PTI_Get2(3, float, arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2) && PyGLM_Vec_PTI_Check2(3, double, arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2), PyGLM_Vec_PTI_Get2(3, double, arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2) && PyGLM_Vec_PTI_Check2(4, float, arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2), PyGLM_Vec_PTI_Get2(4, float, arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2) && PyGLM_Vec_PTI_Check2(4, double, arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2), PyGLM_Vec_PTI_Get2(4, double, arg3)));\ }\ PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for " #NAME "()");\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_NNN_VVN__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2, *arg3;\ PyGLM_Arg_Unpack_3O(args, #NAME, arg1, arg2, arg3);\ if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ PyGLM_PTI_Init0(arg1, PyGLM_T_ANY_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ PyGLM_PTI_Init1(arg2, PyGLM_T_ANY_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for " #NAME "()");\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_MM__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2;\ PyGLM_Arg_Unpack_2O(args, #NAME, arg1, arg2);\ PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ PyGLM_PTI_Init1(arg2, PyGLM_T_MAT | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ if (PyGLM_Mat_PTI_Check0(2, 2, float, arg1) && PyGLM_Mat_PTI_Check1(2, 2, float, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 2, float, arg1), PyGLM_Mat_PTI_Get1(2, 2, float, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 2, double, arg1) && PyGLM_Mat_PTI_Check1(2, 2, double, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 2, double, arg1), PyGLM_Mat_PTI_Get1(2, 2, double, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 3, float, arg1) && PyGLM_Mat_PTI_Check1(2, 3, float, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 3, float, arg1), PyGLM_Mat_PTI_Get1(2, 3, float, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 3, double, arg1) && PyGLM_Mat_PTI_Check1(2, 3, double, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 3, double, arg1), PyGLM_Mat_PTI_Get1(2, 3, double, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 4, float, arg1) && PyGLM_Mat_PTI_Check1(2, 4, float, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 4, float, arg1), PyGLM_Mat_PTI_Get1(2, 4, float, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 4, double, arg1) && PyGLM_Mat_PTI_Check1(2, 4, double, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 4, double, arg1), PyGLM_Mat_PTI_Get1(2, 4, double, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 2, float, arg1) && PyGLM_Mat_PTI_Check1(3, 2, float, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 2, float, arg1), PyGLM_Mat_PTI_Get1(3, 2, float, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 2, double, arg1) && PyGLM_Mat_PTI_Check1(3, 2, double, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 2, double, arg1), PyGLM_Mat_PTI_Get1(3, 2, double, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 3, float, arg1) && PyGLM_Mat_PTI_Check1(3, 3, float, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 3, float, arg1), PyGLM_Mat_PTI_Get1(3, 3, float, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 3, double, arg1) && PyGLM_Mat_PTI_Check1(3, 3, double, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 3, double, arg1), PyGLM_Mat_PTI_Get1(3, 3, double, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 4, float, arg1) && PyGLM_Mat_PTI_Check1(3, 4, float, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 4, float, arg1), PyGLM_Mat_PTI_Get1(3, 4, float, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 4, double, arg1) && PyGLM_Mat_PTI_Check1(3, 4, double, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 4, double, arg1), PyGLM_Mat_PTI_Get1(3, 4, double, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 2, float, arg1) && PyGLM_Mat_PTI_Check1(4, 2, float, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 2, float, arg1), PyGLM_Mat_PTI_Get1(4, 2, float, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 2, double, arg1) && PyGLM_Mat_PTI_Check1(4, 2, double, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 2, double, arg1), PyGLM_Mat_PTI_Get1(4, 2, double, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 3, float, arg1) && PyGLM_Mat_PTI_Check1(4, 3, float, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 3, float, arg1), PyGLM_Mat_PTI_Get1(4, 3, float, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 3, double, arg1) && PyGLM_Mat_PTI_Check1(4, 3, double, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 3, double, arg1), PyGLM_Mat_PTI_Get1(4, 3, double, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 4, float, arg1) && PyGLM_Mat_PTI_Check1(4, 4, float, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, float, arg1), PyGLM_Mat_PTI_Get1(4, 4, float, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 4, double, arg1) && PyGLM_Mat_PTI_Check1(4, 4, double, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, double, arg1), PyGLM_Mat_PTI_Get1(4, 4, double, arg2)));\ }\ PyGLM_TYPEERROR_2O("invalid argument type(s) for " #NAME "(): ", arg1, arg2);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_M__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* arg) {\ PyGLM_PTI_Init0(arg, PyGLM_T_MAT | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ if (PyGLM_Mat_PTI_Check0(2, 2, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 2, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 2, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 2, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 3, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 3, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 3, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 3, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 4, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 4, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 4, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 4, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 2, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 2, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 2, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 2, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 3, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 3, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 3, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 3, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 4, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 4, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 4, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 4, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 2, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 2, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 2, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 2, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 3, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 3, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 3, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 3, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 4, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 4, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, double, arg)));\ }\ PyGLM_TYPEERROR_O("invalid argument type for " #NAME "(): ", arg);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_M(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* arg) {\ PyGLM_PTI_Init0(arg, PyGLM_T_MAT | PyGLM_SHAPE_ALL | PyGLM_DT_ALL);\ if (PyGLM_Mat_PTI_Check0(2, 2, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 2, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 2, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 2, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 2, int32, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 2, int32, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 2, uint32, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 2, uint32, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 3, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 3, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 3, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 3, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 3, int32, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 3, int32, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 3, uint32, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 3, uint32, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 4, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 4, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 4, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 4, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 4, int32, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 4, int32, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 4, uint32, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 4, uint32, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 2, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 2, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 2, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 2, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 2, int32, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 2, int32, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 2, uint32, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 2, uint32, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 3, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 3, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 3, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 3, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 3, int32, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 3, int32, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 3, uint32, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 3, uint32, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 4, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 4, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 4, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 4, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 4, int32, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 4, int32, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 4, uint32, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 4, uint32, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 2, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 2, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 2, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 2, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 2, int32, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 2, int32, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 2, uint32, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 2, uint32, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 3, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 3, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 3, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 3, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 3, int32, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 3, int32, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 3, uint32, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 3, uint32, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 4, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 4, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 4, int32, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, int32, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 4, uint32, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, uint32, arg)));\ }\ PyGLM_TYPEERROR_O("invalid argument type for " #NAME "(): ", arg);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_S__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* arg) {\ PyGLM_PTI_Init0(arg, PyGLM_T_MAT | PyGLM_SHAPE_SQUARE | PyGLM_DT_FD);\ if (PyGLM_Mat_PTI_Check0(2, 2, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 2, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 2, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 2, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 3, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 3, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 3, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 3, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 4, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 4, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, double, arg)));\ }\ PyGLM_TYPEERROR_O("invalid argument type for " #NAME "(): ", arg);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_S_Q__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* arg) {\ PyGLM_PTI_Init0(arg, PyGLM_T_MAT | PyGLM_T_QUA | PyGLM_SHAPE_SQUARE | PyGLM_DT_FD);\ if (PyGLM_PTI_IsMat(0)) {\ if (PyGLM_Mat_PTI_Check0(2, 2, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 2, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(2, 2, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(2, 2, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 3, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 3, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 3, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 3, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 4, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 4, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, double, arg)));\ }\ }\ if (PyGLM_Qua_PTI_Check0(float, arg)) {\ return pack(glm::NAME(PyGLM_Qua_PTI_Get0(float, arg)));\ }\ if (PyGLM_Qua_PTI_Check0(double, arg)) {\ return pack(glm::NAME(PyGLM_Qua_PTI_Get0(double, arg)));\ }\ PyGLM_TYPEERROR_O("invalid argument type for " #NAME "(): ", arg);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC__rF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject*) {\ return pack(glm::NAME());\ } #define PyGLM_MAKE_GLM_FUNC_M3V2_M4V3__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2;\ PyGLM_Arg_Unpack_2O(args, #NAME, arg1, arg2);\ PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_3x3 | PyGLM_SHAPE_4x4 | PyGLM_DT_NORMAL);\ PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_DT_NORMAL);\ if (PyGLM_Mat_PTI_Check0(4, 4, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 4, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 4, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, int, arg1), PyGLM_Vec_PTI_Get1(3, int, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 4, uint32, arg1) && PyGLM_Vec_PTI_Check1(3, uint32, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, uint32, arg1), PyGLM_Vec_PTI_Get1(3, uint32, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 3, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 3, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 3, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 3, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2)));\ }\ PyGLM_TYPEERROR_2O("invalid argument type(s) for " #NAME "(): ", arg1, arg2);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_M3N__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2;\ PyGLM_Arg_Unpack_2O(args, #NAME, arg1, arg2);\ if (PyGLM_Number_Check(arg2)) {\ PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_3x3 | PyGLM_DT_FD);\ if (PyGLM_Mat_PTI_Check0(3, 3, float, arg1)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 3, float, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 3, double, arg1)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 3, double, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ }\ PyGLM_TYPEERROR_2O("invalid argument type(s) for " #NAME "(): ", arg1, arg2);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_M4V3__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2;\ PyGLM_Arg_Unpack_2O(args, #NAME, arg1, arg2);\ PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_4x4 | PyGLM_DT_NORMAL);\ PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_NORMAL);\ if (PyGLM_Mat_PTI_Check0(4, 4, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 4, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 4, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, int, arg1), PyGLM_Vec_PTI_Get1(3, int, arg2)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 4, uint32, arg1) && PyGLM_Vec_PTI_Check1(3, uint32, arg2)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, uint32, arg1), PyGLM_Vec_PTI_Get1(3, uint32, arg2)));\ }\ PyGLM_TYPEERROR_2O("invalid argument type(s) for " #NAME "(): ", arg1, arg2);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_NNNNNN__tf(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2, *arg3, *arg4, *arg5, *arg6;\ PyGLM_Arg_Unpack_6O(args, #NAME, arg1, arg2, arg3, arg4, arg5, arg6);\ if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4) && PyGLM_Number_Check(arg5) && PyGLM_Number_Check(arg6)) {\ return pack(glm::NAME(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3), PyGLM_Number_FromPyObject(arg4), PyGLM_Number_FromPyObject(arg5), PyGLM_Number_FromPyObject(arg6)));\ }\ PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for " #NAME "()");\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_NNNN__tf(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2, *arg3, *arg4;\ PyGLM_Arg_Unpack_4O(args, #NAME, arg1, arg2, arg3, arg4);\ if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4)) {\ return pack(glm::NAME(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3), PyGLM_Number_FromPyObject(arg4)));\ }\ PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for " #NAME "()");\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_NNN__tf(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2, *arg3;\ PyGLM_Arg_Unpack_3O(args, #NAME, arg1, arg2, arg3);\ if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for " #NAME "()");\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_V3M4M4V4__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2, *arg3, *arg4;\ PyGLM_Arg_Unpack_4O(args, #NAME, arg1, arg2, arg3, arg4);\ PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD);\ PyGLM_PTI_Init1(arg2, PyGLM_T_MAT | PyGLM_SHAPE_4x4 | PyGLM_DT_FD);\ PyGLM_PTI_Init2(arg3, PyGLM_T_MAT | PyGLM_SHAPE_4x4 | PyGLM_DT_FD);\ PyGLM_PTI_Init3(arg4, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FD);\ if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Mat_PTI_Check1(4, 4, float, arg2) && PyGLM_Mat_PTI_Check2(4, 4, float, arg3) && PyGLM_Vec_PTI_Check3(4, float, arg4)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Mat_PTI_Get1(4, 4, float, arg2), PyGLM_Mat_PTI_Get2(4, 4, float, arg3), PyGLM_Vec_PTI_Get3(4, float, arg4)));\ }\ if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Mat_PTI_Check1(4, 4, float, arg2) && PyGLM_Mat_PTI_Check2(4, 4, float, arg3) && PyGLM_Vec_PTI_Check3(4, double, arg4)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Mat_PTI_Get1(4, 4, float, arg2), PyGLM_Mat_PTI_Get2(4, 4, float, arg3), PyGLM_Vec_PTI_Get3(4, double, arg4)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Mat_PTI_Check1(4, 4, double, arg2) && PyGLM_Mat_PTI_Check2(4, 4, double, arg3) && PyGLM_Vec_PTI_Check3(4, float, arg4)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Mat_PTI_Get1(4, 4, double, arg2), PyGLM_Mat_PTI_Get2(4, 4, double, arg3), PyGLM_Vec_PTI_Get3(4, float, arg4)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Mat_PTI_Check1(4, 4, double, arg2) && PyGLM_Mat_PTI_Check2(4, 4, double, arg3) && PyGLM_Vec_PTI_Check3(4, double, arg4)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Mat_PTI_Get1(4, 4, double, arg2), PyGLM_Mat_PTI_Get2(4, 4, double, arg3), PyGLM_Vec_PTI_Get3(4, double, arg4)));\ }\ PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for " #NAME "()");\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_V3V3V3__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2, *arg3;\ PyGLM_Arg_Unpack_3O(args, #NAME, arg1, arg2, arg3);\ PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD);\ PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD);\ PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD);\ if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2) && PyGLM_Vec_PTI_Check2(3, float, arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2), PyGLM_Vec_PTI_Get2(3, float, arg3)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2) && PyGLM_Vec_PTI_Check2(3, double, arg3)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2), PyGLM_Vec_PTI_Get2(3, double, arg3)));\ }\ PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for " #NAME "()");\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_V3V3__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2;\ PyGLM_Arg_Unpack_2O(args, #NAME, arg1, arg2);\ PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD);\ PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD);\ if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2)));\ }\ PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for " #NAME "()");\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_V3_V3V3__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2 = NULL;\ if (!PyArg_UnpackTuple(args, #NAME, 1, 2, &arg1, &arg2)) return NULL;\ if (arg2 == NULL) {\ PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD);\ if (PyGLM_Vec_PTI_Check0(3, float, arg1)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg1)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg1)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg1)));\ }\ }\ else {\ PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD);\ PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD);\ if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2)));\ }\ }\ PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for " #NAME "()");\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_QQN__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2, *arg3;\ PyGLM_Arg_Unpack_3O(args, #NAME, arg1, arg2, arg3);\ PyGLM_PTI_Init0(arg1, PyGLM_T_QUA | PyGLM_DT_FD);\ PyGLM_PTI_Init1(arg2, PyGLM_T_QUA | PyGLM_DT_FD);\ if (PyGLM_Qua_PTI_Check0(float, arg1) && PyGLM_Qua_PTI_Check1(float, arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Qua_PTI_Get0(float, arg1), PyGLM_Qua_PTI_Get1(float, arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ if (PyGLM_Qua_PTI_Check0(double, arg1) && PyGLM_Qua_PTI_Check1(double, arg2) && PyGLM_Number_Check(arg3)) {\ return pack(glm::NAME(PyGLM_Qua_PTI_Get0(double, arg1), PyGLM_Qua_PTI_Get1(double, arg2), PyGLM_Number_FromPyObject(arg3)));\ }\ PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for " #NAME "()");\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_Q(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* arg) {\ PyGLM_PTI_Init0(arg, PyGLM_T_QUA | PyGLM_DT_FD);\ if (PyGLM_Qua_PTI_Check0(float, arg)) {\ return pack(glm::NAME(PyGLM_Qua_PTI_Get0(float, arg)));\ }\ if (PyGLM_Qua_PTI_Check0(double, arg)) {\ return pack(glm::NAME(PyGLM_Qua_PTI_Get0(double, arg)));\ }\ PyGLM_TYPEERROR_O("invalid argument type for " #NAME "(): ", arg);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_M3_M4__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* arg) {\ PyGLM_PTI_Init0(arg, PyGLM_T_MAT | PyGLM_SHAPE_3x3 | PyGLM_SHAPE_4x4 | PyGLM_DT_FD);\ if (PyGLM_Mat_PTI_Check0(3, 3, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 3, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(3, 3, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(3, 3, double, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 4, float, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, float, arg)));\ }\ if (PyGLM_Mat_PTI_Check0(4, 4, double, arg)) {\ return pack(glm::NAME(PyGLM_Mat_PTI_Get0(4, 4, double, arg)));\ }\ PyGLM_TYPEERROR_O("invalid argument type for " #NAME "(): ", arg);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_NN_VV(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2;\ PyGLM_Arg_Unpack_2O(args, #NAME, arg1, arg2);\ if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_ALL);\ PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_ALL);\ if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int, arg1), PyGLM_Vec_PTI_Get1(1, int, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, uint32, arg1) && PyGLM_Vec_PTI_Check1(1, uint32, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, uint32, arg1), PyGLM_Vec_PTI_Get1(1, uint32, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int64, arg1) && PyGLM_Vec_PTI_Check1(1, int64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int64, arg1), PyGLM_Vec_PTI_Get1(1, int64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, uint64, arg1) && PyGLM_Vec_PTI_Check1(1, uint64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, uint64, arg1), PyGLM_Vec_PTI_Get1(1, uint64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int16, arg1) && PyGLM_Vec_PTI_Check1(1, int16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int16, arg1), PyGLM_Vec_PTI_Get1(1, int16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, uint16, arg1) && PyGLM_Vec_PTI_Check1(1, uint16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, uint16, arg1), PyGLM_Vec_PTI_Get1(1, uint16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int8, arg1) && PyGLM_Vec_PTI_Check1(1, int8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int8, arg1), PyGLM_Vec_PTI_Get1(1, int8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, uint8, arg1) && PyGLM_Vec_PTI_Check1(1, uint8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, uint8, arg1), PyGLM_Vec_PTI_Get1(1, uint8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, bool, arg1) && PyGLM_Vec_PTI_Check1(1, bool, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, bool, arg1), PyGLM_Vec_PTI_Get1(1, bool, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int, arg1), PyGLM_Vec_PTI_Get1(2, int, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, uint32, arg1) && PyGLM_Vec_PTI_Check1(2, uint32, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, uint32, arg1), PyGLM_Vec_PTI_Get1(2, uint32, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int64, arg1) && PyGLM_Vec_PTI_Check1(2, int64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int64, arg1), PyGLM_Vec_PTI_Get1(2, int64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, uint64, arg1) && PyGLM_Vec_PTI_Check1(2, uint64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, uint64, arg1), PyGLM_Vec_PTI_Get1(2, uint64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int16, arg1) && PyGLM_Vec_PTI_Check1(2, int16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int16, arg1), PyGLM_Vec_PTI_Get1(2, int16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, uint16, arg1) && PyGLM_Vec_PTI_Check1(2, uint16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, uint16, arg1), PyGLM_Vec_PTI_Get1(2, uint16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int8, arg1) && PyGLM_Vec_PTI_Check1(2, int8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int8, arg1), PyGLM_Vec_PTI_Get1(2, int8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, uint8, arg1) && PyGLM_Vec_PTI_Check1(2, uint8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, uint8, arg1), PyGLM_Vec_PTI_Get1(2, uint8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, bool, arg1) && PyGLM_Vec_PTI_Check1(2, bool, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, bool, arg1), PyGLM_Vec_PTI_Get1(2, bool, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int, arg1), PyGLM_Vec_PTI_Get1(3, int, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, uint32, arg1) && PyGLM_Vec_PTI_Check1(3, uint32, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, uint32, arg1), PyGLM_Vec_PTI_Get1(3, uint32, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int64, arg1) && PyGLM_Vec_PTI_Check1(3, int64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int64, arg1), PyGLM_Vec_PTI_Get1(3, int64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, uint64, arg1) && PyGLM_Vec_PTI_Check1(3, uint64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, uint64, arg1), PyGLM_Vec_PTI_Get1(3, uint64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int16, arg1) && PyGLM_Vec_PTI_Check1(3, int16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int16, arg1), PyGLM_Vec_PTI_Get1(3, int16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, uint16, arg1) && PyGLM_Vec_PTI_Check1(3, uint16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, uint16, arg1), PyGLM_Vec_PTI_Get1(3, uint16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int8, arg1) && PyGLM_Vec_PTI_Check1(3, int8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int8, arg1), PyGLM_Vec_PTI_Get1(3, int8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, uint8, arg1) && PyGLM_Vec_PTI_Check1(3, uint8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, uint8, arg1), PyGLM_Vec_PTI_Get1(3, uint8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, bool, arg1) && PyGLM_Vec_PTI_Check1(3, bool, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, bool, arg1), PyGLM_Vec_PTI_Get1(3, bool, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int, arg1), PyGLM_Vec_PTI_Get1(4, int, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, uint32, arg1) && PyGLM_Vec_PTI_Check1(4, uint32, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, uint32, arg1), PyGLM_Vec_PTI_Get1(4, uint32, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int64, arg1) && PyGLM_Vec_PTI_Check1(4, int64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int64, arg1), PyGLM_Vec_PTI_Get1(4, int64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, uint64, arg1) && PyGLM_Vec_PTI_Check1(4, uint64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, uint64, arg1), PyGLM_Vec_PTI_Get1(4, uint64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int16, arg1) && PyGLM_Vec_PTI_Check1(4, int16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int16, arg1), PyGLM_Vec_PTI_Get1(4, int16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, uint16, arg1) && PyGLM_Vec_PTI_Check1(4, uint16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, uint16, arg1), PyGLM_Vec_PTI_Get1(4, uint16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int8, arg1) && PyGLM_Vec_PTI_Check1(4, int8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int8, arg1), PyGLM_Vec_PTI_Get1(4, int8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, uint8, arg1) && PyGLM_Vec_PTI_Check1(4, uint8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, uint8, arg1), PyGLM_Vec_PTI_Get1(4, uint8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, bool, arg1) && PyGLM_Vec_PTI_Check1(4, bool, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, bool, arg1), PyGLM_Vec_PTI_Get1(4, bool, arg2)));\ }\ PyGLM_TYPEERROR_2O("invalid argument type(s) for " #NAME "(): ", arg1, arg2);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_NN_VV__tGPL(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2;\ PyGLM_Arg_Unpack_2O(args, #NAME, arg1, arg2);\ if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I | PyGLM_DT_FD);\ PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I | PyGLM_DT_FD);\ if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int, arg1), PyGLM_Vec_PTI_Get1(1, int, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, uint32, arg1) && PyGLM_Vec_PTI_Check1(1, uint32, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, uint32, arg1), PyGLM_Vec_PTI_Get1(1, uint32, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int64, arg1) && PyGLM_Vec_PTI_Check1(1, int64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int64, arg1), PyGLM_Vec_PTI_Get1(1, int64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, uint64, arg1) && PyGLM_Vec_PTI_Check1(1, uint64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, uint64, arg1), PyGLM_Vec_PTI_Get1(1, uint64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int16, arg1) && PyGLM_Vec_PTI_Check1(1, int16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int16, arg1), PyGLM_Vec_PTI_Get1(1, int16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, uint16, arg1) && PyGLM_Vec_PTI_Check1(1, uint16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, uint16, arg1), PyGLM_Vec_PTI_Get1(1, uint16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int8, arg1) && PyGLM_Vec_PTI_Check1(1, int8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int8, arg1), PyGLM_Vec_PTI_Get1(1, int8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, uint8, arg1) && PyGLM_Vec_PTI_Check1(1, uint8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, uint8, arg1), PyGLM_Vec_PTI_Get1(1, uint8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int, arg1), PyGLM_Vec_PTI_Get1(2, int, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, uint32, arg1) && PyGLM_Vec_PTI_Check1(2, uint32, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, uint32, arg1), PyGLM_Vec_PTI_Get1(2, uint32, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int64, arg1) && PyGLM_Vec_PTI_Check1(2, int64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int64, arg1), PyGLM_Vec_PTI_Get1(2, int64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, uint64, arg1) && PyGLM_Vec_PTI_Check1(2, uint64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, uint64, arg1), PyGLM_Vec_PTI_Get1(2, uint64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int16, arg1) && PyGLM_Vec_PTI_Check1(2, int16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int16, arg1), PyGLM_Vec_PTI_Get1(2, int16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, uint16, arg1) && PyGLM_Vec_PTI_Check1(2, uint16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, uint16, arg1), PyGLM_Vec_PTI_Get1(2, uint16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int8, arg1) && PyGLM_Vec_PTI_Check1(2, int8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int8, arg1), PyGLM_Vec_PTI_Get1(2, int8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, uint8, arg1) && PyGLM_Vec_PTI_Check1(2, uint8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, uint8, arg1), PyGLM_Vec_PTI_Get1(2, uint8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int, arg1), PyGLM_Vec_PTI_Get1(3, int, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, uint32, arg1) && PyGLM_Vec_PTI_Check1(3, uint32, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, uint32, arg1), PyGLM_Vec_PTI_Get1(3, uint32, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int64, arg1) && PyGLM_Vec_PTI_Check1(3, int64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int64, arg1), PyGLM_Vec_PTI_Get1(3, int64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, uint64, arg1) && PyGLM_Vec_PTI_Check1(3, uint64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, uint64, arg1), PyGLM_Vec_PTI_Get1(3, uint64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int16, arg1) && PyGLM_Vec_PTI_Check1(3, int16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int16, arg1), PyGLM_Vec_PTI_Get1(3, int16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, uint16, arg1) && PyGLM_Vec_PTI_Check1(3, uint16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, uint16, arg1), PyGLM_Vec_PTI_Get1(3, uint16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int8, arg1) && PyGLM_Vec_PTI_Check1(3, int8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int8, arg1), PyGLM_Vec_PTI_Get1(3, int8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, uint8, arg1) && PyGLM_Vec_PTI_Check1(3, uint8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, uint8, arg1), PyGLM_Vec_PTI_Get1(3, uint8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int, arg1), PyGLM_Vec_PTI_Get1(4, int, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, uint32, arg1) && PyGLM_Vec_PTI_Check1(4, uint32, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, uint32, arg1), PyGLM_Vec_PTI_Get1(4, uint32, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int64, arg1) && PyGLM_Vec_PTI_Check1(4, int64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int64, arg1), PyGLM_Vec_PTI_Get1(4, int64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, uint64, arg1) && PyGLM_Vec_PTI_Check1(4, uint64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, uint64, arg1), PyGLM_Vec_PTI_Get1(4, uint64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int16, arg1) && PyGLM_Vec_PTI_Check1(4, int16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int16, arg1), PyGLM_Vec_PTI_Get1(4, int16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, uint16, arg1) && PyGLM_Vec_PTI_Check1(4, uint16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, uint16, arg1), PyGLM_Vec_PTI_Get1(4, uint16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int8, arg1) && PyGLM_Vec_PTI_Check1(4, int8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int8, arg1), PyGLM_Vec_PTI_Get1(4, int8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, uint8, arg1) && PyGLM_Vec_PTI_Check1(4, uint8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, uint8, arg1), PyGLM_Vec_PTI_Get1(4, uint8, arg2)));\ }\ PyGLM_TYPEERROR_2O("invalid argument type(s) for " #NAME "(): ", arg1, arg2);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_NN_VV_QQ__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2;\ PyGLM_Arg_Unpack_2O(args, #NAME, arg1, arg2);\ if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_QUA | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_T_QUA | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ if (PyGLM_PTI_IsVec(0)) {\ if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2)));\ }\ }\ if (PyGLM_Qua_PTI_Check0(float, arg1) && PyGLM_Qua_PTI_Check1(float, arg2)) {\ return pack(glm::NAME(PyGLM_Qua_PTI_Get0(float, arg1), PyGLM_Qua_PTI_Get1(float, arg2)));\ }\ if (PyGLM_Qua_PTI_Check0(double, arg1) && PyGLM_Qua_PTI_Check1(double, arg2)) {\ return pack(glm::NAME(PyGLM_Qua_PTI_Get0(double, arg1), PyGLM_Qua_PTI_Get1(double, arg2)));\ }\ PyGLM_TYPEERROR_2O("invalid argument type(s) for " #NAME "(): ", arg1, arg2);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_N_V__tiqsu(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* arg) {\ if (PyGLM_Number_Check(arg)) {\ return pack(glm::NAME(PyGLM_Number_FromPyObject(arg)));\ }\ PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_INT | PyGLM_DT_INT64 | PyGLM_DT_INT16 | PyGLM_DT_INT8);\ if (PyGLM_Vec_PTI_Check0(1, int, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int64, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int64, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int16, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int16, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int8, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int8, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int64, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int64, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int16, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int16, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int8, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int8, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int64, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int64, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int16, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int16, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int8, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int8, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int64, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int64, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int16, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int16, arg)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int8, arg)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int8, arg)));\ }\ PyGLM_TYPEERROR_O("invalid argument type for " #NAME "(): ", arg);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_NN_VV_VN__tiqsu(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2;\ PyGLM_Arg_Unpack_2O(args, #NAME, arg1, arg2);\ if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_INT | PyGLM_DT_INT64 | PyGLM_DT_INT16 | PyGLM_DT_INT8);\ PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_INT | PyGLM_DT_INT64 | PyGLM_DT_INT16 | PyGLM_DT_INT8);\ if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int, arg1), PyGLM_Vec_PTI_Get1(1, int, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int64, arg1) && PyGLM_Vec_PTI_Check1(1, int64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int64, arg1), PyGLM_Vec_PTI_Get1(1, int64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int16, arg1) && PyGLM_Vec_PTI_Check1(1, int16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int16, arg1), PyGLM_Vec_PTI_Get1(1, int16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int8, arg1) && PyGLM_Vec_PTI_Check1(1, int8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int8, arg1), PyGLM_Vec_PTI_Get1(1, int8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int, arg1), PyGLM_Vec_PTI_Get1(2, int, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int64, arg1) && PyGLM_Vec_PTI_Check1(2, int64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int64, arg1), PyGLM_Vec_PTI_Get1(2, int64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int16, arg1) && PyGLM_Vec_PTI_Check1(2, int16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int16, arg1), PyGLM_Vec_PTI_Get1(2, int16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int8, arg1) && PyGLM_Vec_PTI_Check1(2, int8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int8, arg1), PyGLM_Vec_PTI_Get1(2, int8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int, arg1), PyGLM_Vec_PTI_Get1(3, int, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int64, arg1) && PyGLM_Vec_PTI_Check1(3, int64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int64, arg1), PyGLM_Vec_PTI_Get1(3, int64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int16, arg1) && PyGLM_Vec_PTI_Check1(3, int16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int16, arg1), PyGLM_Vec_PTI_Get1(3, int16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int8, arg1) && PyGLM_Vec_PTI_Check1(3, int8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int8, arg1), PyGLM_Vec_PTI_Get1(3, int8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int, arg1), PyGLM_Vec_PTI_Get1(4, int, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int64, arg1) && PyGLM_Vec_PTI_Check1(4, int64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int64, arg1), PyGLM_Vec_PTI_Get1(4, int64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int16, arg1) && PyGLM_Vec_PTI_Check1(4, int16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int16, arg1), PyGLM_Vec_PTI_Get1(4, int16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int8, arg1) && PyGLM_Vec_PTI_Check1(4, int8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int8, arg1), PyGLM_Vec_PTI_Get1(4, int8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int64, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int64, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int16, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int16, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int8, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int8, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int64, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int64, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int16, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int16, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int8, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int8, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int64, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int64, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int16, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int16, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int8, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int8, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int64, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int64, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int16, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int16, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int8, arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int8, arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ PyGLM_TYPEERROR_2O("invalid argument type(s) for " #NAME "(): ", arg1, arg2);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_NN_VV__tiqsu(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2;\ PyGLM_Arg_Unpack_2O(args, #NAME, arg1, arg2);\ if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) {\ return pack(glm::NAME(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2)));\ }\ PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_INT | PyGLM_DT_INT64 | PyGLM_DT_INT16 | PyGLM_DT_INT8);\ PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_INT | PyGLM_DT_INT64 | PyGLM_DT_INT16 | PyGLM_DT_INT8);\ if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int, arg1), PyGLM_Vec_PTI_Get1(1, int, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int64, arg1) && PyGLM_Vec_PTI_Check1(1, int64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int64, arg1), PyGLM_Vec_PTI_Get1(1, int64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int16, arg1) && PyGLM_Vec_PTI_Check1(1, int16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int16, arg1), PyGLM_Vec_PTI_Get1(1, int16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int8, arg1) && PyGLM_Vec_PTI_Check1(1, int8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int8, arg1), PyGLM_Vec_PTI_Get1(1, int8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int, arg1), PyGLM_Vec_PTI_Get1(2, int, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int64, arg1) && PyGLM_Vec_PTI_Check1(2, int64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int64, arg1), PyGLM_Vec_PTI_Get1(2, int64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int16, arg1) && PyGLM_Vec_PTI_Check1(2, int16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int16, arg1), PyGLM_Vec_PTI_Get1(2, int16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int8, arg1) && PyGLM_Vec_PTI_Check1(2, int8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int8, arg1), PyGLM_Vec_PTI_Get1(2, int8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int, arg1), PyGLM_Vec_PTI_Get1(3, int, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int64, arg1) && PyGLM_Vec_PTI_Check1(3, int64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int64, arg1), PyGLM_Vec_PTI_Get1(3, int64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int16, arg1) && PyGLM_Vec_PTI_Check1(3, int16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int16, arg1), PyGLM_Vec_PTI_Get1(3, int16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int8, arg1) && PyGLM_Vec_PTI_Check1(3, int8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int8, arg1), PyGLM_Vec_PTI_Get1(3, int8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int, arg1), PyGLM_Vec_PTI_Get1(4, int, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int64, arg1) && PyGLM_Vec_PTI_Check1(4, int64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int64, arg1), PyGLM_Vec_PTI_Get1(4, int64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int16, arg1) && PyGLM_Vec_PTI_Check1(4, int16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int16, arg1), PyGLM_Vec_PTI_Get1(4, int16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int8, arg1) && PyGLM_Vec_PTI_Check1(4, int8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int8, arg1), PyGLM_Vec_PTI_Get1(4, int8, arg2)));\ }\ PyGLM_TYPEERROR_2O("invalid argument type(s) for " #NAME "(): ", arg1, arg2);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_VV_QQ(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2;\ PyGLM_Arg_Unpack_2O(args, #NAME, arg1, arg2);\ PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_QUA | PyGLM_SHAPE_ALL | PyGLM_DT_ALL);\ PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_T_QUA | PyGLM_SHAPE_ALL | PyGLM_DT_ALL);\ if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int, arg1), PyGLM_Vec_PTI_Get1(1, int, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, uint32, arg1) && PyGLM_Vec_PTI_Check1(1, uint32, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, uint32, arg1), PyGLM_Vec_PTI_Get1(1, uint32, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int64, arg1) && PyGLM_Vec_PTI_Check1(1, int64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int64, arg1), PyGLM_Vec_PTI_Get1(1, int64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, uint64, arg1) && PyGLM_Vec_PTI_Check1(1, uint64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, uint64, arg1), PyGLM_Vec_PTI_Get1(1, uint64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int16, arg1) && PyGLM_Vec_PTI_Check1(1, int16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int16, arg1), PyGLM_Vec_PTI_Get1(1, int16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, uint16, arg1) && PyGLM_Vec_PTI_Check1(1, uint16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, uint16, arg1), PyGLM_Vec_PTI_Get1(1, uint16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, int8, arg1) && PyGLM_Vec_PTI_Check1(1, int8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, int8, arg1), PyGLM_Vec_PTI_Get1(1, int8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, uint8, arg1) && PyGLM_Vec_PTI_Check1(1, uint8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, uint8, arg1), PyGLM_Vec_PTI_Get1(1, uint8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, bool, arg1) && PyGLM_Vec_PTI_Check1(1, bool, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, bool, arg1), PyGLM_Vec_PTI_Get1(1, bool, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int, arg1), PyGLM_Vec_PTI_Get1(2, int, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, uint32, arg1) && PyGLM_Vec_PTI_Check1(2, uint32, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, uint32, arg1), PyGLM_Vec_PTI_Get1(2, uint32, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int64, arg1) && PyGLM_Vec_PTI_Check1(2, int64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int64, arg1), PyGLM_Vec_PTI_Get1(2, int64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, uint64, arg1) && PyGLM_Vec_PTI_Check1(2, uint64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, uint64, arg1), PyGLM_Vec_PTI_Get1(2, uint64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int16, arg1) && PyGLM_Vec_PTI_Check1(2, int16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int16, arg1), PyGLM_Vec_PTI_Get1(2, int16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, uint16, arg1) && PyGLM_Vec_PTI_Check1(2, uint16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, uint16, arg1), PyGLM_Vec_PTI_Get1(2, uint16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, int8, arg1) && PyGLM_Vec_PTI_Check1(2, int8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, int8, arg1), PyGLM_Vec_PTI_Get1(2, int8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, uint8, arg1) && PyGLM_Vec_PTI_Check1(2, uint8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, uint8, arg1), PyGLM_Vec_PTI_Get1(2, uint8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, bool, arg1) && PyGLM_Vec_PTI_Check1(2, bool, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, bool, arg1), PyGLM_Vec_PTI_Get1(2, bool, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int, arg1), PyGLM_Vec_PTI_Get1(3, int, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, uint32, arg1) && PyGLM_Vec_PTI_Check1(3, uint32, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, uint32, arg1), PyGLM_Vec_PTI_Get1(3, uint32, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int64, arg1) && PyGLM_Vec_PTI_Check1(3, int64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int64, arg1), PyGLM_Vec_PTI_Get1(3, int64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, uint64, arg1) && PyGLM_Vec_PTI_Check1(3, uint64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, uint64, arg1), PyGLM_Vec_PTI_Get1(3, uint64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int16, arg1) && PyGLM_Vec_PTI_Check1(3, int16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int16, arg1), PyGLM_Vec_PTI_Get1(3, int16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, uint16, arg1) && PyGLM_Vec_PTI_Check1(3, uint16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, uint16, arg1), PyGLM_Vec_PTI_Get1(3, uint16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, int8, arg1) && PyGLM_Vec_PTI_Check1(3, int8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, int8, arg1), PyGLM_Vec_PTI_Get1(3, int8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, uint8, arg1) && PyGLM_Vec_PTI_Check1(3, uint8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, uint8, arg1), PyGLM_Vec_PTI_Get1(3, uint8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, bool, arg1) && PyGLM_Vec_PTI_Check1(3, bool, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, bool, arg1), PyGLM_Vec_PTI_Get1(3, bool, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int, arg1), PyGLM_Vec_PTI_Get1(4, int, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, uint32, arg1) && PyGLM_Vec_PTI_Check1(4, uint32, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, uint32, arg1), PyGLM_Vec_PTI_Get1(4, uint32, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int64, arg1) && PyGLM_Vec_PTI_Check1(4, int64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int64, arg1), PyGLM_Vec_PTI_Get1(4, int64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, uint64, arg1) && PyGLM_Vec_PTI_Check1(4, uint64, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, uint64, arg1), PyGLM_Vec_PTI_Get1(4, uint64, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int16, arg1) && PyGLM_Vec_PTI_Check1(4, int16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int16, arg1), PyGLM_Vec_PTI_Get1(4, int16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, uint16, arg1) && PyGLM_Vec_PTI_Check1(4, uint16, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, uint16, arg1), PyGLM_Vec_PTI_Get1(4, uint16, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, int8, arg1) && PyGLM_Vec_PTI_Check1(4, int8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, int8, arg1), PyGLM_Vec_PTI_Get1(4, int8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, uint8, arg1) && PyGLM_Vec_PTI_Check1(4, uint8, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, uint8, arg1), PyGLM_Vec_PTI_Get1(4, uint8, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, bool, arg1) && PyGLM_Vec_PTI_Check1(4, bool, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, bool, arg1), PyGLM_Vec_PTI_Get1(4, bool, arg2)));\ }\ if (PyGLM_Qua_PTI_Check0(float, arg1) && PyGLM_Qua_PTI_Check1(float, arg2)) {\ return pack(glm::NAME(PyGLM_Qua_PTI_Get0(float, arg1), PyGLM_Qua_PTI_Get1(float, arg2)));\ }\ if (PyGLM_Qua_PTI_Check0(double, arg1) && PyGLM_Qua_PTI_Check1(double, arg2)) {\ return pack(glm::NAME(PyGLM_Qua_PTI_Get0(double, arg1), PyGLM_Qua_PTI_Get1(double, arg2)));\ }\ PyGLM_TYPEERROR_2O("invalid argument type(s) for " #NAME "(): ", arg1, arg2);\ return NULL;\ } #define PyGLM_MAKE_GLM_FUNC_VV__tfF(NAME)\ static PyObject*\ NAME##_(PyObject*, PyObject* args) {\ PyObject *arg1, *arg2;\ PyGLM_Arg_Unpack_2O(args, #NAME, arg1, arg2);\ PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD);\ if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2)));\ }\ if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) {\ return pack(glm::NAME(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2)));\ }\ PyGLM_TYPEERROR_2O("invalid argument type(s) for " #NAME "(): ", arg1, arg2);\ return NULL;\ } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/other/000077500000000000000000000000001511156275200224405ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/other/all.h000066400000000000000000000001411511156275200233550ustar00rootroot00000000000000#pragma once #include "unary.h" #include "binary.h" #include "ternary.h" #include "custom.h" Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/other/binary.h000066400000000000000000000135121511156275200240770ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../internal_functions/all.h" PyDoc_STRVAR(binary_add_docstr, "add(a, b) -> Any\n" " Equivalent to `a + b`." ); static PyObject* binary_add(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "add", arg1, arg2); PyGLM_WARN_TYPE(PyGLM_OPERATOR_DEPRECATION_WARNING, PyExc_DeprecationWarning, "glm.add is deprecated. Use operator.add instead"); return PyNumber_Add(arg1, arg2); } PyDoc_STRVAR(binary_sub_docstr, "sub(a, b) -> Any\n" " Equivalent to `a - b`." ); static PyObject* binary_sub(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "sub", arg1, arg2); PyGLM_WARN_TYPE(PyGLM_OPERATOR_DEPRECATION_WARNING, PyExc_DeprecationWarning, "glm.sub is deprecated. Use operator.sub instead"); return PyNumber_Subtract(arg1, arg2); } PyDoc_STRVAR(binary_mul_docstr, "mul(a, b) -> Any\n" " Equivalent to `a * b`." ); static PyObject* binary_mul(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "mul", arg1, arg2); PyGLM_WARN_TYPE(PyGLM_OPERATOR_DEPRECATION_WARNING, PyExc_DeprecationWarning, "glm.mul is deprecated. Use operator.mul instead"); return PyNumber_Multiply(arg1, arg2); } PyDoc_STRVAR(binary_div_docstr, "div(a, b) -> Any\n" " Equivalent to `a / b`." ); static PyObject* binary_div(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "div", arg1, arg2); PyGLM_WARN_TYPE(PyGLM_OPERATOR_DEPRECATION_WARNING, PyExc_DeprecationWarning, "glm.div is deprecated. Use operator.truediv instead"); return PyNumber_TrueDivide(arg1, arg2); } PyDoc_STRVAR(binary_floordiv_docstr, "floordiv(a, b) -> Any\n" " Equivalent to `a // b`." ); static PyObject* binary_floordiv(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "floordiv", arg1, arg2); PyGLM_WARN_TYPE(PyGLM_OPERATOR_DEPRECATION_WARNING, PyExc_DeprecationWarning, "glm.floordiv is deprecated. Use operator.floordiv instead"); return PyNumber_FloorDivide(arg1, arg2); } PyDoc_STRVAR(binary_mod_docstr, "mod(a, b) -> Any\n" " Equivalent to `a % b`." ); static PyObject* binary_mod(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "mod", arg1, arg2); PyGLM_WARN_TYPE(PyGLM_OPERATOR_DEPRECATION_WARNING, PyExc_DeprecationWarning, "glm.mod is deprecated. Use operator.mod instead"); return PyNumber_Remainder(arg1, arg2); } PyDoc_STRVAR(binary_lshift_docstr, "lshift(a, b) -> Any\n" " Equivalent to `a << b`." ); static PyObject* binary_lshift(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "lshift", arg1, arg2); PyGLM_WARN_TYPE(PyGLM_OPERATOR_DEPRECATION_WARNING, PyExc_DeprecationWarning, "glm.lshift is deprecated. Use operator.lshift instead"); return PyNumber_Lshift(arg1, arg2); } PyDoc_STRVAR(binary_rshift_docstr, "rshift(a, b) -> Any\n" " Equivalent to `a >> b`." ); static PyObject* binary_rshift(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "rshift", arg1, arg2); PyGLM_WARN_TYPE(PyGLM_OPERATOR_DEPRECATION_WARNING, PyExc_DeprecationWarning, "glm.rshift is deprecated. Use operator.rshift instead"); return PyNumber_Rshift(arg1, arg2); } PyDoc_STRVAR(binary_and_docstr, "and_(a, b) -> Any\n" " Equivalent to `a & b`." ); static PyObject* binary_and(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "band", arg1, arg2); PyGLM_WARN_TYPE(PyGLM_OPERATOR_DEPRECATION_WARNING, PyExc_DeprecationWarning, "glm.band is deprecated. Use operator.and_ instead"); return PyNumber_And(arg1, arg2); } PyDoc_STRVAR(binary_xor_docstr, "xor(a, b) -> Any\n" " Equivalent to `a ^ b`." ); static PyObject* binary_xor(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "bxor", arg1, arg2); PyGLM_WARN_TYPE(PyGLM_OPERATOR_DEPRECATION_WARNING, PyExc_DeprecationWarning, "glm.bxor is deprecated. Use operator.xor instead"); return PyNumber_Xor(arg1, arg2); } PyDoc_STRVAR(binary_or_docstr, "or_(a, b) -> Any\n" " Equivalent to `a | b`." ); static PyObject* binary_or(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "bor", arg1, arg2); PyGLM_WARN_TYPE(PyGLM_OPERATOR_DEPRECATION_WARNING, PyExc_DeprecationWarning, "glm.bor is deprecated. Use operator.or_ instead"); return PyNumber_Or(arg1, arg2); } PyDoc_STRVAR(binary_cmp_docstr, "cmp(a, b) -> Any\n" " Equivalent to `-1 if a < b else 1 if a > b else 0`." ); static PyObject* binary_cmp(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "cmp", arg1, arg2); int cmpResult = PyObject_RichCompareBool(arg1, arg2, Py_EQ); if (cmpResult == 1) { return PyGLM_PyObject_FromNumber(0); } if (cmpResult == -1) { return NULL; } cmpResult = PyObject_RichCompareBool(arg1, arg2, Py_LT); if (cmpResult == 1) { return PyGLM_PyObject_FromNumber(-1); } if (cmpResult == -1) { return NULL; } return PyGLM_PyObject_FromNumber(1); } #define BINARY_METHODS \ { "add", (PyCFunction)binary_add, METH_VARARGS, binary_add_docstr }, \ { "sub", (PyCFunction)binary_sub, METH_VARARGS, binary_sub_docstr }, \ { "mul", (PyCFunction)binary_mul, METH_VARARGS, binary_mul_docstr }, \ { "div", (PyCFunction)binary_div, METH_VARARGS, binary_div_docstr }, \ { "floordiv", (PyCFunction)binary_floordiv, METH_VARARGS, binary_floordiv_docstr }, \ { "mod", (PyCFunction)binary_mod, METH_VARARGS, binary_mod_docstr }, \ { "lshift", (PyCFunction)binary_lshift, METH_VARARGS, binary_lshift_docstr }, \ { "rshift", (PyCFunction)binary_rshift, METH_VARARGS, binary_rshift_docstr }, \ { "and_", (PyCFunction)binary_and, METH_VARARGS, binary_and_docstr }, \ { "xor", (PyCFunction)binary_xor, METH_VARARGS, binary_xor_docstr }, \ { "or_", (PyCFunction)binary_or, METH_VARARGS, binary_or_docstr }, \ { "cmp", (PyCFunction)binary_cmp, METH_VARARGS, binary_cmp_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/other/custom.h000066400000000000000000000027031511156275200241250ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../internal_functions/all.h" PyDoc_STRVAR(quat_to_vec4_docstr, "quat_to_vec4(quat) -> vec4\n" " Component wise conversion of quat to vec4." ); static PyObject* quat_to_vec4_(PyObject*, PyObject* arg) { if (Py_TYPE(arg) == PyGLM_QUA_TYPE()) { glm::qua q = unpack_qua(arg); return pack(glm::vec<4, float>(q.x, q.y, q.z, q.w)); } if (Py_TYPE(arg) == PyGLM_QUA_TYPE()) { glm::qua q = unpack_qua(arg); return pack(glm::vec<4, double>(q.x, q.y, q.z, q.w)); } PyGLM_TYPEERROR_O("Invalid argument type for 'quat_to_vec4'. Expected 'quat', got ", arg); return NULL; } PyDoc_STRVAR(vec4_to_quat_docstr, "vec4_to_quat(vec4) -> quat\n" " Component wise conversion of vec4 to quat." ); static PyObject* vec4_to_quat_(PyObject*, PyObject* arg) { if (Py_TYPE(arg) == PyGLM_VEC_TYPE<4, float>()) { glm::vec<4, float> v = unpack_vec<4, float>(arg); return pack(glm::qua(v.w, v.x, v.y, v.z)); } if (Py_TYPE(arg) == PyGLM_VEC_TYPE<4, double>()) { glm::vec<4, double> v = unpack_vec<4, double>(arg); return pack(glm::qua(v.w, v.x, v.y, v.z)); } PyGLM_TYPEERROR_O("Invalid argument type for 'vec4_to_quat'. Expected 'vec4', got ", arg); return NULL; } #define CUSTOM_METHODS \ { "quat_to_vec4", (PyCFunction)quat_to_vec4_, METH_O, quat_to_vec4_docstr }, \ { "vec4_to_quat", (PyCFunction)vec4_to_quat_, METH_O, vec4_to_quat_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/other/ternary.h000066400000000000000000000010121511156275200242670ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../internal_functions/all.h" PyDoc_STRVAR(ternary_if_else_docstr, "if_else(b, x, y) -> Any\n" " Equivalent to `x if b else y`." ); static PyObject* ternary_if_else(PyObject*, PyObject* args) { PyObject* b, * x, * y; PyGLM_Arg_Unpack_3O(args, "if_else", b, x, y); if (PyObject_IsTrue(b)) { return PyGLM_INCREF(x); } return PyGLM_INCREF(y); } #define TERNARY_METHODS \ { "if_else", (PyCFunction)ternary_if_else, METH_VARARGS, ternary_if_else_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/other/unary.h000066400000000000000000000024011511156275200237440ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" //#include "../../types/all.h" // //#include "../../internal_functions/all.h" // //#include "../function_generator_macros.h" PyDoc_STRVAR(unary_pos_docstr, "pos(a) -> Any\n" " Equivalent to `+a`." ); static PyObject* unary_pos(PyObject*, PyObject* arg) { PyGLM_WARN_TYPE(PyGLM_OPERATOR_DEPRECATION_WARNING, PyExc_DeprecationWarning, "glm.pos is deprecated. Use operator.pos instead"); return PyNumber_Positive(arg); } PyDoc_STRVAR(unary_neg_docstr, "neg(a) -> Any\n" " Equivalent to `-a`." ); static PyObject* unary_neg(PyObject*, PyObject* arg) { PyGLM_WARN_TYPE(PyGLM_OPERATOR_DEPRECATION_WARNING, PyExc_DeprecationWarning, "glm.neg is deprecated. Use operator.neg instead"); return PyNumber_Negative(arg); } PyDoc_STRVAR(unary_inv_docstr, "inv(a) -> Any\n" " Equivalent to `~a`." ); static PyObject* unary_inv(PyObject*, PyObject* arg) { PyGLM_WARN_TYPE(PyGLM_OPERATOR_DEPRECATION_WARNING, PyExc_DeprecationWarning, "glm.inv is deprecated. Use operator.invert instead"); return PyNumber_Invert(arg); } #define UNARY_METHODS \ { "pos", (PyCFunction)unary_pos, METH_O, unary_pos_docstr }, \ { "neg", (PyCFunction)unary_neg, METH_O, unary_neg_docstr }, \ { "inv", (PyCFunction)unary_inv, METH_O, unary_inv_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/stable_extensions/000077500000000000000000000000001511156275200250505ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/stable_extensions/all.h000066400000000000000000000007671511156275200260030ustar00rootroot00000000000000#pragma once #include "color_space.h" #include "constants.h" #include "epsilon.h" #include "integer.h" #include "matrix_inverse.h" #include "matrix_transform.h" #include "matrix_projection.h" #include "matrix_clip_space.h" #include "quaternion.h" #include "quaternion_common.h" #include "quaternion_trigonometric.h" #include "matrix_access.h" #include "noise.h" #include "packing.h" #include "random.h" #include "round.h" #include "reciprocal.h" #include "type_ptr.h" #include "ulp.h"Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/stable_extensions/color_space.h000066400000000000000000000146001511156275200275130ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" #include "../function_generator_macros.h" PyDoc_STRVAR(convertLinearToSRGB_docstr, "convertLinearToSRGB(ColorLinear: vecN) -> vecN\n" " Convert a linear color to sRGB color using a standard gamma correction.\n" "convertLinearToSRGB(ColorLinear: vecN, Gamma: number) -> vecN\n" " Convert a linear color to sRGB color using a custom gamma correction." ); static PyObject* convertLinearToSRGB_(PyObject*, PyObject* args) { PyObject* arg1; PyObject* arg2 = NULL; if (!PyArg_UnpackTuple(args, "convertLinearToSRGB", 1, 2, &arg1, &arg2)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for convertLinearToSRGB()"); return NULL; } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1)) { glm::vec1 o = PyGLM_Vec_PTI_Get0(1, float, arg1); if (arg2 != NULL && PyGLM_Number_Check(arg2)) { return pack(glm::convertLinearToSRGB(o, PyGLM_Number_FromPyObject(arg2))); } return pack(glm::convertLinearToSRGB(o)); } if (PyGLM_Vec_PTI_Check0(2, float, arg1)) { glm::vec2 o = PyGLM_Vec_PTI_Get0(2, float, arg1); if (arg2 != NULL && PyGLM_Number_Check(arg2)) { return pack(glm::convertLinearToSRGB(o, PyGLM_Number_FromPyObject(arg2))); } return pack(glm::convertLinearToSRGB(o)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1)) { glm::vec3 o = PyGLM_Vec_PTI_Get0(3, float, arg1); if (arg2 != NULL && PyGLM_Number_Check(arg2)) { return pack(glm::convertLinearToSRGB(o, PyGLM_Number_FromPyObject(arg2))); } return pack(glm::convertLinearToSRGB(o)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1)) { glm::vec4 o = PyGLM_Vec_PTI_Get0(4, float, arg1); if (arg2 != NULL && PyGLM_Number_Check(arg2)) { return pack(glm::convertLinearToSRGB(o, PyGLM_Number_FromPyObject(arg2))); } return pack(glm::convertLinearToSRGB(o)); } if (PyGLM_Vec_PTI_Check0(1, double, arg1)) { glm::dvec1 o = PyGLM_Vec_PTI_Get0(1, double, arg1); if (arg2 != NULL && PyGLM_Number_Check(arg2)) { return pack(glm::convertLinearToSRGB(o, PyGLM_Number_FromPyObject(arg2))); } return pack(glm::convertLinearToSRGB(o)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1)) { glm::dvec2 o = PyGLM_Vec_PTI_Get0(2, double, arg1); if (arg2 != NULL && PyGLM_Number_Check(arg2)) { return pack(glm::convertLinearToSRGB(o, PyGLM_Number_FromPyObject(arg2))); } return pack(glm::convertLinearToSRGB(o)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1)) { glm::dvec3 o = PyGLM_Vec_PTI_Get0(3, double, arg1); if (arg2 != NULL && PyGLM_Number_Check(arg2)) { return pack(glm::convertLinearToSRGB(o, PyGLM_Number_FromPyObject(arg2))); } return pack(glm::convertLinearToSRGB(o)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1)) { glm::dvec4 o = PyGLM_Vec_PTI_Get0(4, double, arg1); if (arg2 != NULL && PyGLM_Number_Check(arg2)) { return pack(glm::convertLinearToSRGB(o, PyGLM_Number_FromPyObject(arg2))); } return pack(glm::convertLinearToSRGB(o)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for convertLinearToSRGB()"); return NULL; } PyDoc_STRVAR(convertSRGBToLinear_docstr, "convertSRGBToLinear(ColorLinear: vecN) -> vecN\n" " Convert a sRGB color to linear color using a standard gamma correction.\n" "convertSRGBToLinear(ColorLinear: vecN, Gamma: number) -> vecN\n" " Convert a sRGB color to linear color using a custom gamma correction." ); static PyObject* convertSRGBToLinear_(PyObject*, PyObject* args) { PyObject* arg1; PyObject* arg2 = NULL; if (!PyArg_UnpackTuple(args, "convertSRGBToLinear", 1, 2, &arg1, &arg2)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for convertSRGBToLinear()"); return NULL; } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1)) { glm::vec1 o = PyGLM_Vec_PTI_Get0(1, float, arg1); if (arg2 != NULL && PyGLM_Number_Check(arg2)) { return pack(glm::convertSRGBToLinear(o, PyGLM_Number_FromPyObject(arg2))); } return pack(glm::convertSRGBToLinear(o)); } if (PyGLM_Vec_PTI_Check0(2, float, arg1)) { glm::vec2 o = PyGLM_Vec_PTI_Get0(2, float, arg1); if (arg2 != NULL && PyGLM_Number_Check(arg2)) { return pack(glm::convertSRGBToLinear(o, PyGLM_Number_FromPyObject(arg2))); } return pack(glm::convertSRGBToLinear(o)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1)) { glm::vec3 o = PyGLM_Vec_PTI_Get0(3, float, arg1); if (arg2 != NULL && PyGLM_Number_Check(arg2)) { return pack(glm::convertSRGBToLinear(o, PyGLM_Number_FromPyObject(arg2))); } return pack(glm::convertSRGBToLinear(o)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1)) { glm::vec4 o = PyGLM_Vec_PTI_Get0(4, float, arg1); if (arg2 != NULL && PyGLM_Number_Check(arg2)) { return pack(glm::convertSRGBToLinear(o, PyGLM_Number_FromPyObject(arg2))); } return pack(glm::convertSRGBToLinear(o)); } if (PyGLM_Vec_PTI_Check0(1, double, arg1)) { glm::dvec1 o = PyGLM_Vec_PTI_Get0(1, double, arg1); if (arg2 != NULL && PyGLM_Number_Check(arg2)) { return pack(glm::convertSRGBToLinear(o, PyGLM_Number_FromPyObject(arg2))); } return pack(glm::convertSRGBToLinear(o)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1)) { glm::dvec2 o = PyGLM_Vec_PTI_Get0(2, double, arg1); if (arg2 != NULL && PyGLM_Number_Check(arg2)) { return pack(glm::convertSRGBToLinear(o, PyGLM_Number_FromPyObject(arg2))); } return pack(glm::convertSRGBToLinear(o)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1)) { glm::dvec3 o = PyGLM_Vec_PTI_Get0(3, double, arg1); if (arg2 != NULL && PyGLM_Number_Check(arg2)) { return pack(glm::convertSRGBToLinear(o, PyGLM_Number_FromPyObject(arg2))); } return pack(glm::convertSRGBToLinear(o)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1)) { glm::dvec4 o = PyGLM_Vec_PTI_Get0(4, double, arg1); if (arg2 != NULL && PyGLM_Number_Check(arg2)) { return pack(glm::convertSRGBToLinear(o, PyGLM_Number_FromPyObject(arg2))); } return pack(glm::convertSRGBToLinear(o)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for convertSRGBToLinear()"); return NULL; } #define COLOR_SPACE_METHODS \ { "convertLinearToSRGB", (PyCFunction)convertLinearToSRGB_, METH_VARARGS, convertLinearToSRGB_docstr }, \ { "convertSRGBToLinear", (PyCFunction)convertSRGBToLinear_, METH_VARARGS, convertSRGBToLinear_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/stable_extensions/constants.h000066400000000000000000000132071511156275200272400ustar00rootroot00000000000000#pragma once #include "../function_generator_macros.h" PyGLM_MAKE_GLM_FUNC__rF(epsilon) PyGLM_MAKE_GLM_FUNC__rF(zero) PyGLM_MAKE_GLM_FUNC__rF(one) PyGLM_MAKE_GLM_FUNC__rF(pi) PyGLM_MAKE_GLM_FUNC__rF(two_pi) PyGLM_MAKE_GLM_FUNC__rF(root_pi) PyGLM_MAKE_GLM_FUNC__rF(half_pi) PyGLM_MAKE_GLM_FUNC__rF(three_over_two_pi) PyGLM_MAKE_GLM_FUNC__rF(quarter_pi) PyGLM_MAKE_GLM_FUNC__rF(one_over_pi) PyGLM_MAKE_GLM_FUNC__rF(one_over_two_pi) PyGLM_MAKE_GLM_FUNC__rF(two_over_pi) PyGLM_MAKE_GLM_FUNC__rF(four_over_pi) PyGLM_MAKE_GLM_FUNC__rF(two_over_root_pi) PyGLM_MAKE_GLM_FUNC__rF(one_over_root_two) PyGLM_MAKE_GLM_FUNC__rF(root_half_pi) PyGLM_MAKE_GLM_FUNC__rF(root_two_pi) PyGLM_MAKE_GLM_FUNC__rF(root_ln_four) PyGLM_MAKE_GLM_FUNC__rF(e) PyGLM_MAKE_GLM_FUNC__rF(euler) PyGLM_MAKE_GLM_FUNC__rF(root_two) PyGLM_MAKE_GLM_FUNC__rF(root_three) PyGLM_MAKE_GLM_FUNC__rF(root_five) PyGLM_MAKE_GLM_FUNC__rF(ln_two) PyGLM_MAKE_GLM_FUNC__rF(ln_ten) PyGLM_MAKE_GLM_FUNC__rF(ln_ln_two) PyGLM_MAKE_GLM_FUNC__rF(third) PyGLM_MAKE_GLM_FUNC__rF(two_thirds) PyGLM_MAKE_GLM_FUNC__rF(golden_ratio) PyDoc_STRVAR(epsilon_docstr, "epsilon() -> float\n" " Return the `epsilon` constant for floating point types." ); PyDoc_STRVAR(pi_docstr, "pi() -> float\n" " Return the `pi` constant for floating point types." ); PyDoc_STRVAR(e_docstr, "e() -> float\n" " Return `e` constant." ); PyDoc_STRVAR(euler_docstr, "euler() -> float\n" " Return Euler's constant." ); PyDoc_STRVAR(four_over_pi_docstr, "four_over_pi() -> float\n" " Return `4 / pi`." ); PyDoc_STRVAR(golden_ratio_docstr, "golden_ratio() -> float\n" " Return the golden ratio constant." ); PyDoc_STRVAR(half_pi_docstr, "half_pi() -> float\n" " Return `pi / 2`." ); PyDoc_STRVAR(ln_ln_two_docstr, "ln_ln_two() -> float\n" " Return `ln(ln(2))`." ); PyDoc_STRVAR(ln_ten_docstr, "ln_ten() -> float\n" " Return `ln(10)`." ); PyDoc_STRVAR(ln_two_docstr, "ln_two() -> float\n" " Return `ln(2)`." ); PyDoc_STRVAR(one_docstr, "one() -> float\n" " Return `1`." ); PyDoc_STRVAR(one_over_pi_docstr, "one_over_pi() -> float\n" " Return `1 / pi`." ); PyDoc_STRVAR(one_over_root_two_docstr, "one_over_root_two() -> float\n" " Return `1 / sqrt(2)`." ); PyDoc_STRVAR(one_over_two_pi_docstr, "one_over_two_pi() -> float\n" " Return `1 / (pi * 2)`." ); PyDoc_STRVAR(quarter_pi_docstr, "quarter_pi() -> float\n" " Return `pi / 4`." ); PyDoc_STRVAR(root_five_docstr, "root_five() -> float\n" " Return `sqrt(5)`." ); PyDoc_STRVAR(root_half_pi_docstr, "root_half_pi() -> float\n" " Return `sqrt(pi / 2)`." ); PyDoc_STRVAR(root_ln_four_docstr, "root_ln_four() -> float\n" " Return `sqrt(ln(4))`." ); PyDoc_STRVAR(root_pi_docstr, "root_pi() -> float\n" " Return square root of `pi`." ); PyDoc_STRVAR(root_three_docstr, "root_three() -> float\n" " Return `sqrt(3)`." ); PyDoc_STRVAR(root_two_docstr, "root_two() -> float\n" " Return `sqrt(2)`." ); PyDoc_STRVAR(root_two_pi_docstr, "root_two_pi() -> float\n" " Return `sqrt(2 * pi)`." ); PyDoc_STRVAR(third_docstr, "third() -> float\n" " Return `1 / 3`." ); PyDoc_STRVAR(three_over_two_pi_docstr, "three_over_two_pi() -> float\n" " Return `pi / 2 * 3`." ); PyDoc_STRVAR(two_over_pi_docstr, "two_over_pi() -> float\n" " Return `2 / pi`." ); PyDoc_STRVAR(two_over_root_pi_docstr, "two_over_root_pi() -> float\n" " Return `2 / sqrt(pi)`." ); PyDoc_STRVAR(two_pi_docstr, "two_pi() -> float\n" " Return `pi * 2`." ); PyDoc_STRVAR(two_thirds_docstr, "two_thirds() -> float\n" " Return `2 / 3`." ); PyDoc_STRVAR(zero_docstr, "zero() -> float\n" " Return `0`." ); #define CONSTANTS_METHODS \ { "epsilon", (PyCFunction)epsilon_, METH_NOARGS, epsilon_docstr }, \ { "zero", (PyCFunction)zero_, METH_NOARGS, zero_docstr }, \ { "one", (PyCFunction)one_, METH_NOARGS, one_docstr }, \ { "pi", (PyCFunction)pi_, METH_NOARGS, pi_docstr }, \ { "two_pi", (PyCFunction)two_pi_, METH_NOARGS, two_pi_docstr }, \ { "root_pi", (PyCFunction)root_pi_, METH_NOARGS, root_pi_docstr }, \ { "half_pi", (PyCFunction)half_pi_, METH_NOARGS, half_pi_docstr }, \ { "three_over_two_pi", (PyCFunction)three_over_two_pi_, METH_NOARGS, three_over_two_pi_docstr }, \ { "quarter_pi", (PyCFunction)quarter_pi_, METH_NOARGS, quarter_pi_docstr }, \ { "one_over_pi", (PyCFunction)one_over_pi_, METH_NOARGS, one_over_pi_docstr }, \ { "one_over_two_pi", (PyCFunction)one_over_two_pi_, METH_NOARGS, one_over_two_pi_docstr }, \ { "two_over_pi", (PyCFunction)two_over_pi_, METH_NOARGS, two_over_pi_docstr }, \ { "four_over_pi", (PyCFunction)four_over_pi_, METH_NOARGS, four_over_pi_docstr }, \ { "two_over_root_pi", (PyCFunction)two_over_root_pi_, METH_NOARGS, two_over_root_pi_docstr }, \ { "one_over_root_two", (PyCFunction)one_over_root_two_, METH_NOARGS, one_over_root_two_docstr }, \ { "root_half_pi", (PyCFunction)root_half_pi_, METH_NOARGS, root_half_pi_docstr }, \ { "root_two_pi", (PyCFunction)root_two_pi_, METH_NOARGS, root_two_pi_docstr }, \ { "root_ln_four", (PyCFunction)root_ln_four_, METH_NOARGS, root_ln_four_docstr }, \ { "e", (PyCFunction)e_, METH_NOARGS, e_docstr }, \ { "euler", (PyCFunction)euler_, METH_NOARGS, euler_docstr }, \ { "root_two", (PyCFunction)root_two_, METH_NOARGS, root_two_docstr }, \ { "root_three", (PyCFunction)root_three_, METH_NOARGS, root_three_docstr }, \ { "root_five", (PyCFunction)root_five_, METH_NOARGS, root_five_docstr }, \ { "ln_two", (PyCFunction)ln_two_, METH_NOARGS, ln_two_docstr }, \ { "ln_ten", (PyCFunction)ln_ten_, METH_NOARGS, ln_ten_docstr }, \ { "ln_ln_two", (PyCFunction)ln_ln_two_, METH_NOARGS, ln_ln_two_docstr }, \ { "third", (PyCFunction)third_, METH_NOARGS, third_docstr }, \ { "two_thirds", (PyCFunction)two_thirds_, METH_NOARGS, two_thirds_docstr }, \ { "golden_ratio", (PyCFunction)golden_ratio_, METH_NOARGS, golden_ratio_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/stable_extensions/epsilon.h000066400000000000000000000336531511156275200267040ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" static PyObject* epsilonEqual_(PyObject*, PyObject* args) { PyObject *arg1, *arg2, *arg3; PyGLM_Arg_Unpack_3O(args, "epsilonEqual", arg1, arg2, arg3); if (PyGLM_Number_Check(arg3)) { if (PyGLM_Number_Check(arg1), PyGLM_Number_Check(arg2)) { if (glm::epsilonEqual(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))) { Py_RETURN_TRUE; } else { Py_RETURN_FALSE; } } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_QUA | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_T_QUA | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) { glm::vec1 o = PyGLM_Vec_PTI_Get0(1, float, arg1); glm::vec1 o2 = PyGLM_Vec_PTI_Get1(1, float, arg2); return pack_vec(glm::epsilonEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { glm::vec2 o = PyGLM_Vec_PTI_Get0(2, float, arg1); glm::vec2 o2 = PyGLM_Vec_PTI_Get1(2, float, arg2); return pack_vec(glm::epsilonEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { glm::vec3 o = PyGLM_Vec_PTI_Get0(3, float, arg1); glm::vec3 o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); return pack_vec(glm::epsilonEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { glm::vec4 o = PyGLM_Vec_PTI_Get0(4, float, arg1); glm::vec4 o2 = PyGLM_Vec_PTI_Get1(4, float, arg2); return pack_vec(glm::epsilonEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) { glm::dvec1 o = PyGLM_Vec_PTI_Get0(1, double, arg1); glm::dvec1 o2 = PyGLM_Vec_PTI_Get1(1, double, arg2); return pack_vec(glm::epsilonEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { glm::dvec2 o = PyGLM_Vec_PTI_Get0(2, double, arg1); glm::dvec2 o2 = PyGLM_Vec_PTI_Get1(2, double, arg2); return pack_vec(glm::epsilonEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { glm::dvec3 o = PyGLM_Vec_PTI_Get0(3, double, arg1); glm::dvec3 o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); return pack_vec(glm::epsilonEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { glm::dvec4 o = PyGLM_Vec_PTI_Get0(4, double, arg1); glm::dvec4 o2 = PyGLM_Vec_PTI_Get1(4, double, arg2); return pack_vec(glm::epsilonEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Qua_PTI_Check0(float, arg1) && PyGLM_Qua_PTI_Check1(float, arg2)) { glm::quat o = PyGLM_Qua_PTI_Get0(float, arg1); glm::quat o2 = PyGLM_Qua_PTI_Get1(float, arg2); return pack(glm::epsilonEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Qua_PTI_Check0(double, arg1) && PyGLM_Qua_PTI_Check1(double, arg2)) { glm::dquat o = PyGLM_Qua_PTI_Get0(double, arg1); glm::dquat o2 = PyGLM_Qua_PTI_Get1(double, arg2); return pack(glm::epsilonEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } } else { PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2) && PyGLM_Vec_PTI_Check2(1, float, arg3)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg1); glm::vec<1, float> o2 = PyGLM_Vec_PTI_Get1(1, float, arg2); glm::vec<1, float> o3 = PyGLM_Vec_PTI_Get2(1, float, arg3); return pack(glm::epsilonEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2) && PyGLM_Vec_PTI_Check2(2, float, arg3)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg1); glm::vec<2, float> o2 = PyGLM_Vec_PTI_Get1(2, float, arg2); glm::vec<2, float> o3 = PyGLM_Vec_PTI_Get2(2, float, arg3); return pack(glm::epsilonEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2) && PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg1); glm::vec<3, float> o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); glm::vec<3, float> o3 = PyGLM_Vec_PTI_Get2(3, float, arg3); return pack(glm::epsilonEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2) && PyGLM_Vec_PTI_Check2(4, float, arg3)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg1); glm::vec<4, float> o2 = PyGLM_Vec_PTI_Get1(4, float, arg2); glm::vec<4, float> o3 = PyGLM_Vec_PTI_Get2(4, float, arg3); return pack(glm::epsilonEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2) && PyGLM_Vec_PTI_Check2(1, double, arg3)) { glm::vec<1, double> o = PyGLM_Vec_PTI_Get0(1, double, arg1); glm::vec<1, double> o2 = PyGLM_Vec_PTI_Get1(1, double, arg2); glm::vec<1, double> o3 = PyGLM_Vec_PTI_Get2(1, double, arg3); return pack(glm::epsilonEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2) && PyGLM_Vec_PTI_Check2(2, double, arg3)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg1); glm::vec<2, double> o2 = PyGLM_Vec_PTI_Get1(2, double, arg2); glm::vec<2, double> o3 = PyGLM_Vec_PTI_Get2(2, double, arg3); return pack(glm::epsilonEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2) && PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg1); glm::vec<3, double> o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); glm::vec<3, double> o3 = PyGLM_Vec_PTI_Get2(3, double, arg3); return pack(glm::epsilonEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2) && PyGLM_Vec_PTI_Check2(4, double, arg3)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg1); glm::vec<4, double> o2 = PyGLM_Vec_PTI_Get1(4, double, arg2); glm::vec<4, double> o3 = PyGLM_Vec_PTI_Get2(4, double, arg3); return pack(glm::epsilonEqual(o, o2, o3)); } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for epsilonEqual()"); return NULL; } static PyObject* epsilonNotEqual_(PyObject*, PyObject* args) { PyObject *arg1, *arg2, *arg3; PyGLM_Arg_Unpack_3O(args, "epsilonNotEqual", arg1, arg2, arg3); if (PyGLM_Number_Check(arg3)) { if (PyGLM_Number_Check(arg1), PyGLM_Number_Check(arg2)) { if (glm::epsilonNotEqual(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))) { Py_RETURN_TRUE; } else { Py_RETURN_FALSE; } } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_QUA | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_T_QUA | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2)) { glm::vec1 o = PyGLM_Vec_PTI_Get0(1, float, arg1); glm::vec1 o2 = PyGLM_Vec_PTI_Get1(1, float, arg2); return pack_vec(glm::epsilonNotEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { glm::vec2 o = PyGLM_Vec_PTI_Get0(2, float, arg1); glm::vec2 o2 = PyGLM_Vec_PTI_Get1(2, float, arg2); return pack_vec(glm::epsilonNotEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { glm::vec3 o = PyGLM_Vec_PTI_Get0(3, float, arg1); glm::vec3 o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); return pack_vec(glm::epsilonNotEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { glm::vec4 o = PyGLM_Vec_PTI_Get0(4, float, arg1); glm::vec4 o2 = PyGLM_Vec_PTI_Get1(4, float, arg2); return pack_vec(glm::epsilonNotEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2)) { glm::dvec1 o = PyGLM_Vec_PTI_Get0(1, double, arg1); glm::dvec1 o2 = PyGLM_Vec_PTI_Get1(1, double, arg2); return pack_vec(glm::epsilonNotEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { glm::dvec2 o = PyGLM_Vec_PTI_Get0(2, double, arg1); glm::dvec2 o2 = PyGLM_Vec_PTI_Get1(2, double, arg2); return pack_vec(glm::epsilonNotEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { glm::dvec3 o = PyGLM_Vec_PTI_Get0(3, double, arg1); glm::dvec3 o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); return pack_vec(glm::epsilonNotEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { glm::dvec4 o = PyGLM_Vec_PTI_Get0(4, double, arg1); glm::dvec4 o2 = PyGLM_Vec_PTI_Get1(4, double, arg2); return pack_vec(glm::epsilonNotEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Qua_PTI_Check0(float, arg1) && PyGLM_Qua_PTI_Check1(float, arg2)) { glm::quat o = PyGLM_Qua_PTI_Get0(float, arg1); glm::quat o2 = PyGLM_Qua_PTI_Get1(float, arg2); return pack(glm::epsilonNotEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Qua_PTI_Check0(double, arg1) && PyGLM_Qua_PTI_Check1(double, arg2)) { glm::dquat o = PyGLM_Qua_PTI_Get0(double, arg1); glm::dquat o2 = PyGLM_Qua_PTI_Get1(double, arg2); return pack(glm::epsilonNotEqual(o, o2, PyGLM_Number_FromPyObject(arg3))); } } else { PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, float, arg2) && PyGLM_Vec_PTI_Check2(1, float, arg3)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg1); glm::vec<1, float> o2 = PyGLM_Vec_PTI_Get1(1, float, arg2); glm::vec<1, float> o3 = PyGLM_Vec_PTI_Get2(1, float, arg3); return pack(glm::epsilonNotEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2) && PyGLM_Vec_PTI_Check2(2, float, arg3)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg1); glm::vec<2, float> o2 = PyGLM_Vec_PTI_Get1(2, float, arg2); glm::vec<2, float> o3 = PyGLM_Vec_PTI_Get2(2, float, arg3); return pack(glm::epsilonNotEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2) && PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg1); glm::vec<3, float> o2 = PyGLM_Vec_PTI_Get1(3, float, arg2); glm::vec<3, float> o3 = PyGLM_Vec_PTI_Get2(3, float, arg3); return pack(glm::epsilonNotEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2) && PyGLM_Vec_PTI_Check2(4, float, arg3)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg1); glm::vec<4, float> o2 = PyGLM_Vec_PTI_Get1(4, float, arg2); glm::vec<4, float> o3 = PyGLM_Vec_PTI_Get2(4, float, arg3); return pack(glm::epsilonNotEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, double, arg2) && PyGLM_Vec_PTI_Check2(1, double, arg3)) { glm::vec<1, double> o = PyGLM_Vec_PTI_Get0(1, double, arg1); glm::vec<1, double> o2 = PyGLM_Vec_PTI_Get1(1, double, arg2); glm::vec<1, double> o3 = PyGLM_Vec_PTI_Get2(1, double, arg3); return pack(glm::epsilonNotEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2) && PyGLM_Vec_PTI_Check2(2, double, arg3)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg1); glm::vec<2, double> o2 = PyGLM_Vec_PTI_Get1(2, double, arg2); glm::vec<2, double> o3 = PyGLM_Vec_PTI_Get2(2, double, arg3); return pack(glm::epsilonNotEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2) && PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg1); glm::vec<3, double> o2 = PyGLM_Vec_PTI_Get1(3, double, arg2); glm::vec<3, double> o3 = PyGLM_Vec_PTI_Get2(3, double, arg3); return pack(glm::epsilonNotEqual(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2) && PyGLM_Vec_PTI_Check2(4, double, arg3)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg1); glm::vec<4, double> o2 = PyGLM_Vec_PTI_Get1(4, double, arg2); glm::vec<4, double> o3 = PyGLM_Vec_PTI_Get2(4, double, arg3); return pack(glm::epsilonNotEqual(o, o2, o3)); } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for epsilonNotEqual()"); return NULL; } PyDoc_STRVAR(epsilonEqual_docstr, "epsilonEqual(x: number, y: number, epsilon: number) -> bool\n" " Returns the component-wise comparison of `|x - y| < epsilon`.\n" "epsilonEqual(x: vecN, y: vecN, epsilon: number) -> bvecN\n" " Returns the component-wise comparison of `|x - y| < epsilon`." ); PyDoc_STRVAR(epsilonNotEqual_docstr, "epsilonNotEqual(*args) -> not epsilonEqual(*args)" ); #define EPSILON_METHODS \ { "epsilonEqual", (PyCFunction)epsilonEqual_, METH_VARARGS, epsilonEqual_docstr }, \ { "epsilonNotEqual", (PyCFunction)epsilonNotEqual_, METH_VARARGS, epsilonNotEqual_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/stable_extensions/integer.h000066400000000000000000000136641511156275200266700ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" static PyObject* iround_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { double d = PyGLM_Number_FromPyObject(arg); PyGLM_ASSERT((0.0 <= d), "x has to be greater than or equal to 0"); return pack(glm::iround(d)); } PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_T_QUA | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg); PyGLM_ASSERT((glm::all(glm::lessThanEqual(glm::vec<1, float>(0), o))), "x has to be greater than or equal to 0"); return pack(glm::iround(o)); } if (PyGLM_Vec_PTI_Check0(1, double, arg)) { glm::vec<1, double> o = PyGLM_Vec_PTI_Get0(1, double, arg); PyGLM_ASSERT((glm::all(glm::lessThanEqual(glm::vec<1, double>(0), o))), "x has to be greater than or equal to 0"); return pack(glm::iround(o)); } if (PyGLM_Vec_PTI_Check0(2, float, arg)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg); PyGLM_ASSERT((glm::all(glm::lessThanEqual(glm::vec<2, float>(0), o))), "x has to be greater than or equal to 0"); return pack(glm::iround(o)); } if (PyGLM_Vec_PTI_Check0(2, double, arg)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg); PyGLM_ASSERT((glm::all(glm::lessThanEqual(glm::vec<2, double>(0), o))), "x has to be greater than or equal to 0"); return pack(glm::iround(o)); } if (PyGLM_Vec_PTI_Check0(3, float, arg)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg); PyGLM_ASSERT((glm::all(glm::lessThanEqual(glm::vec<3, float>(0), o))), "x has to be greater than or equal to 0"); return pack(glm::iround(o)); } if (PyGLM_Vec_PTI_Check0(3, double, arg)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg); PyGLM_ASSERT((glm::all(glm::lessThanEqual(glm::vec<3, double>(0), o))), "x has to be greater than or equal to 0"); return pack(glm::iround(o)); } if (PyGLM_Vec_PTI_Check0(4, float, arg)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg); PyGLM_ASSERT((glm::all(glm::lessThanEqual(glm::vec<4, float>(0), o))), "x has to be greater than or equal to 0"); return pack(glm::iround(o)); } if (PyGLM_Vec_PTI_Check0(4, double, arg)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg); PyGLM_ASSERT((glm::all(glm::lessThanEqual(glm::vec<4, double>(0), o))), "x has to be greater than or equal to 0"); return pack(glm::iround(o)); } PyGLM_TYPEERROR_O("invalid argument type for iround(): ", arg); return NULL; } static PyObject* uround_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { double d = PyGLM_Number_FromPyObject(arg); PyGLM_ASSERT((0.0 <= d), "x has to be greater than or equal to 0"); return pack(glm::uround(d)); } PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg); PyGLM_ASSERT((glm::all(glm::lessThanEqual(glm::vec<1, float>(0), o))), "x has to be greater than or equal to 0"); return pack(glm::uround(o)); } if (PyGLM_Vec_PTI_Check0(1, double, arg)) { glm::vec<1, double> o = PyGLM_Vec_PTI_Get0(1, double, arg); PyGLM_ASSERT((glm::all(glm::lessThanEqual(glm::vec<1, double>(0), o))), "x has to be greater than or equal to 0"); return pack(glm::uround(o)); } if (PyGLM_Vec_PTI_Check0(2, float, arg)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg); PyGLM_ASSERT((glm::all(glm::lessThanEqual(glm::vec<2, float>(0), o))), "x has to be greater than or equal to 0"); return pack(glm::uround(o)); } if (PyGLM_Vec_PTI_Check0(2, double, arg)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg); PyGLM_ASSERT((glm::all(glm::lessThanEqual(glm::vec<2, double>(0), o))), "x has to be greater than or equal to 0"); return pack(glm::uround(o)); } if (PyGLM_Vec_PTI_Check0(3, float, arg)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg); PyGLM_ASSERT((glm::all(glm::lessThanEqual(glm::vec<3, float>(0), o))), "x has to be greater than or equal to 0"); return pack(glm::uround(o)); } if (PyGLM_Vec_PTI_Check0(3, double, arg)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg); PyGLM_ASSERT((glm::all(glm::lessThanEqual(glm::vec<3, double>(0), o))), "x has to be greater than or equal to 0"); return pack(glm::uround(o)); } if (PyGLM_Vec_PTI_Check0(4, float, arg)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg); PyGLM_ASSERT((glm::all(glm::lessThanEqual(glm::vec<4, float>(0), o))), "x has to be greater than or equal to 0"); return pack(glm::uround(o)); } if (PyGLM_Vec_PTI_Check0(4, double, arg)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg); PyGLM_ASSERT((glm::all(glm::lessThanEqual(glm::vec<4, double>(0), o))), "x has to be greater than or equal to 0"); return pack(glm::uround(o)); } PyGLM_TYPEERROR_O("invalid argument type for uround(): ", arg); return NULL; } PyDoc_STRVAR(iround_docstr, "iround(x: number) -> int\n" " Returns a value equal to the nearest integer to `x`. The fraction `0.5` will round in a\n" " direction chosen by the implementation, presumably the direction that is fastest.\n" "iround(x: vecN) -> ivecN\n" " Returns a value equal to the nearest integer to `x`. The fraction `0.5` will round in a\n" " direction chosen by the implementation, presumably the direction that is fastest." ); PyDoc_STRVAR(uround_docstr, "uround(x: number) -> int\n" " Returns a value equal to the nearest integer to `x`. The fraction `0.5` will round in a\n" " direction chosen by the implementation, presumably the direction that is fastest.\n" "uround(x: vecN) -> uvecN\n" " Returns a value equal to the nearest integer to `x`. The fraction `0.5` will round in a\n" " direction chosen by the implementation, presumably the direction that is fastest." ); #define INTEGER_METHODS \ { "iround", (PyCFunction)iround_, METH_O, iround_docstr }, \ { "uround", (PyCFunction)uround_, METH_O, uround_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/stable_extensions/matrix_access.h000066400000000000000000002753321511156275200300620ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" static PyObject* row_(PyObject*, PyObject* args) { PyObject *arg1, *arg2, *arg3 = NULL; if (!PyArg_UnpackTuple(args, "row", 2, 3, &arg1, &arg2, &arg3) || !PyGLM_Number_Check(arg2)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for row()"); return NULL; } glm::length_t index = PyGLM_Number_FromPyObject(arg2); if (index < 0) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } if (arg3 != NULL) { PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_DT_ALL); if (PyGLM_Vec_PTI_Check2(2, float, arg3)) { glm::vec<2, float> x = PyGLM_Vec_PTI_Get2(2, float, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_2xM | PyGLM_DT_FLOAT); if (PyGLM_Mat_PTI_Check0(2, 2, float, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 2, float> m = PyGLM_Mat_PTI_Get0(2, 2, float, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(2, 3, float, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 3, float> m = PyGLM_Mat_PTI_Get0(2, 3, float, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(2, 4, float, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 4, float> m = PyGLM_Mat_PTI_Get0(2, 4, float, arg1); return pack(glm::row(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::vec<3, float> x = PyGLM_Vec_PTI_Get2(3, float, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_3xM | PyGLM_DT_FLOAT); if (PyGLM_Mat_PTI_Check0(3, 2, float, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 2, float> m = PyGLM_Mat_PTI_Get0(3, 2, float, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(3, 3, float, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 3, float> m = PyGLM_Mat_PTI_Get0(3, 3, float, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(3, 4, float, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 4, float> m = PyGLM_Mat_PTI_Get0(3, 4, float, arg1); return pack(glm::row(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(4, float, arg3)) { glm::vec<4, float> x = PyGLM_Vec_PTI_Get2(4, float, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_4xM | PyGLM_DT_FLOAT); if (PyGLM_Mat_PTI_Check0(4, 2, float, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 2, float> m = PyGLM_Mat_PTI_Get0(4, 2, float, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(4, 3, float, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 3, float> m = PyGLM_Mat_PTI_Get0(4, 3, float, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(4, 4, float, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 4, float> m = PyGLM_Mat_PTI_Get0(4, 4, float, arg1); return pack(glm::row(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(2, double, arg3)) { glm::vec<2, double> x = PyGLM_Vec_PTI_Get2(2, double, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_2xM | PyGLM_DT_DOUBLE); if (PyGLM_Mat_PTI_Check0(2, 2, double, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 2, double> m = PyGLM_Mat_PTI_Get0(2, 2, double, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(2, 3, double, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 3, double> m = PyGLM_Mat_PTI_Get0(2, 3, double, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(2, 4, double, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 4, double> m = PyGLM_Mat_PTI_Get0(2, 4, double, arg1); return pack(glm::row(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::vec<3, double> x = PyGLM_Vec_PTI_Get2(3, double, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_3xM | PyGLM_DT_DOUBLE); if (PyGLM_Mat_PTI_Check0(3, 2, double, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 2, double> m = PyGLM_Mat_PTI_Get0(3, 2, double, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(3, 3, double, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 3, double> m = PyGLM_Mat_PTI_Get0(3, 3, double, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(3, 4, double, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 4, double> m = PyGLM_Mat_PTI_Get0(3, 4, double, arg1); return pack(glm::row(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(4, double, arg3)) { glm::vec<4, double> x = PyGLM_Vec_PTI_Get2(4, double, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_4xM | PyGLM_DT_DOUBLE); if (PyGLM_Mat_PTI_Check0(4, 2, double, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 2, double> m = PyGLM_Mat_PTI_Get0(4, 2, double, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(4, 3, double, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 3, double> m = PyGLM_Mat_PTI_Get0(4, 3, double, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(4, 4, double, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 4, double> m = PyGLM_Mat_PTI_Get0(4, 4, double, arg1); return pack(glm::row(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(2, int, arg3)) { glm::vec<2, int> x = PyGLM_Vec_PTI_Get2(2, int, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_2xM | PyGLM_DT_INT); if (PyGLM_Mat_PTI_Check0(2, 2, int, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 2, int> m = PyGLM_Mat_PTI_Get0(2, 2, int, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(2, 3, int, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 3, int> m = PyGLM_Mat_PTI_Get0(2, 3, int, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(2, 4, int, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 4, int> m = PyGLM_Mat_PTI_Get0(2, 4, int, arg1); return pack(glm::row(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(3, int, arg3)) { glm::vec<3, int> x = PyGLM_Vec_PTI_Get2(3, int, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_3xM | PyGLM_DT_INT); if (PyGLM_Mat_PTI_Check0(3, 2, int, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 2, int> m = PyGLM_Mat_PTI_Get0(3, 2, int, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(3, 3, int, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 3, int> m = PyGLM_Mat_PTI_Get0(3, 3, int, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(3, 4, int, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 4, int> m = PyGLM_Mat_PTI_Get0(3, 4, int, arg1); return pack(glm::row(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(4, int, arg3)) { glm::vec<4, int> x = PyGLM_Vec_PTI_Get2(4, int, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_4xM | PyGLM_DT_INT); if (PyGLM_Mat_PTI_Check0(4, 2, int, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 2, int> m = PyGLM_Mat_PTI_Get0(4, 2, int, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(4, 3, int, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 3, int> m = PyGLM_Mat_PTI_Get0(4, 3, int, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(4, 4, int, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 4, int> m = PyGLM_Mat_PTI_Get0(4, 4, int, arg1); return pack(glm::row(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(2, glm::uint, arg3)) { glm::vec<2, uint32> x = PyGLM_Vec_PTI_Get2(2, uint32, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_2xM | PyGLM_DT_UINT); if (PyGLM_Mat_PTI_Check0(2, 2, glm::uint, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 2, uint32> m = PyGLM_Mat_PTI_Get0(2, 2, uint32, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(2, 3, glm::uint, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 3, uint32> m = PyGLM_Mat_PTI_Get0(2, 3, uint32, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(2, 4, glm::uint, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 4, uint32> m = PyGLM_Mat_PTI_Get0(2, 4, uint32, arg1); return pack(glm::row(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(3, glm::uint, arg3)) { glm::vec<3, uint32> x = PyGLM_Vec_PTI_Get2(3, uint32, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_3xM | PyGLM_DT_UINT); if (PyGLM_Mat_PTI_Check0(3, 2, glm::uint, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 2, uint32> m = PyGLM_Mat_PTI_Get0(3, 2, uint32, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(3, 3, glm::uint, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 3, uint32> m = PyGLM_Mat_PTI_Get0(3, 3, uint32, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(3, 4, glm::uint, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 4, uint32> m = PyGLM_Mat_PTI_Get0(3, 4, uint32, arg1); return pack(glm::row(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(4, glm::uint, arg3)) { glm::vec<4, uint32> x = PyGLM_Vec_PTI_Get2(4, uint32, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_4xM | PyGLM_DT_UINT); if (PyGLM_Mat_PTI_Check0(4, 2, glm::uint, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 2, uint32> m = PyGLM_Mat_PTI_Get0(4, 2, uint32, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(4, 3, glm::uint, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 3, uint32> m = PyGLM_Mat_PTI_Get0(4, 3, uint32, arg1); return pack(glm::row(m, index, x)); } if (PyGLM_Mat_PTI_Check0(4, 4, glm::uint, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 4, uint32> m = PyGLM_Mat_PTI_Get0(4, 4, uint32, arg1); return pack(glm::row(m, index, x)); } } //if (PyGLM_Vec_PTI_Check2(2, glm::i64, arg3)) { // glm::vec<2, int64> x = PyGLM_Vec_PTI_Get2(2, int64, arg3); // if (PyGLM_Mat_Check(2, 2, glm::i64, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 2, glm::i64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(2, 3, glm::i64, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 3, glm::i64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(2, 4, glm::i64, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 4, glm::i64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } //} //if (PyGLM_Vec_PTI_Check2(3, glm::i64, arg3)) { // glm::vec<3, int64> x = PyGLM_Vec_PTI_Get2(3, int64, arg3); // if (PyGLM_Mat_Check(3, 2, glm::i64, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 2, glm::i64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(3, 3, glm::i64, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 3, glm::i64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(3, 4, glm::i64, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 4, glm::i64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } //} //if (PyGLM_Vec_PTI_Check2(4, glm::i64, arg3)) { // glm::vec<4, int64> x = PyGLM_Vec_PTI_Get2(4, int64, arg3); // if (PyGLM_Mat_Check(4, 2, glm::i64, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 2, glm::i64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(4, 3, glm::i64, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 3, glm::i64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(4, 4, glm::i64, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 4, glm::i64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } //} //if (PyGLM_Vec_PTI_Check2(2, glm::u64, arg3)) { // glm::vec<2, uint64> x = PyGLM_Vec_PTI_Get2(2, uint64, arg3); // if (PyGLM_Mat_Check(2, 2, glm::u64, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 2, glm::u64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(2, 3, glm::u64, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 3, glm::u64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(2, 4, glm::u64, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 4, glm::u64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } //} //if (PyGLM_Vec_PTI_Check2(3, glm::u64, arg3)) { // glm::vec<3, uint64> x = PyGLM_Vec_PTI_Get2(3, uint64, arg3); // if (PyGLM_Mat_Check(3, 2, glm::u64, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 2, glm::u64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(3, 3, glm::u64, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 3, glm::u64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(3, 4, glm::u64, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 4, glm::u64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } //} //if (PyGLM_Vec_PTI_Check2(4, glm::u64, arg3)) { // glm::vec<4, uint64> x = PyGLM_Vec_PTI_Get2(4, uint64, arg3); // if (PyGLM_Mat_Check(4, 2, glm::u64, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 2, glm::u64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(4, 3, glm::u64, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 3, glm::u64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(4, 4, glm::u64, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 4, glm::u64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } //} //if (PyGLM_Vec_PTI_Check2(2, glm::i16, arg3)) { // glm::vec<2, int16> x = PyGLM_Vec_PTI_Get2(2, int16, arg3); // if (PyGLM_Mat_Check(2, 2, glm::i16, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 2, glm::i16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(2, 3, glm::i16, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 3, glm::i16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(2, 4, glm::i16, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 4, glm::i16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } //} //if (PyGLM_Vec_PTI_Check2(3, glm::i16, arg3)) { // glm::vec<3, int16> x = PyGLM_Vec_PTI_Get2(3, int16, arg3); // if (PyGLM_Mat_Check(3, 2, glm::i16, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 2, glm::i16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(3, 3, glm::i16, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 3, glm::i16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(3, 4, glm::i16, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 4, glm::i16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } //} //if (PyGLM_Vec_PTI_Check2(4, glm::i16, arg3)) { // glm::vec<4, int16> x = PyGLM_Vec_PTI_Get2(4, int16, arg3); // if (PyGLM_Mat_Check(4, 2, glm::i16, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 2, glm::i16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(4, 3, glm::i16, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 3, glm::i16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(4, 4, glm::i16, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 4, glm::i16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } //} //if (PyGLM_Vec_PTI_Check2(2, glm::u16, arg3)) { // glm::vec<2, uint16> x = PyGLM_Vec_PTI_Get2(2, uint16, arg3); // if (PyGLM_Mat_Check(2, 2, glm::u16, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 2, glm::u16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(2, 3, glm::u16, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 3, glm::u16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(2, 4, glm::u16, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 4, glm::u16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } //} //if (PyGLM_Vec_PTI_Check2(3, glm::u16, arg3)) { // glm::vec<3, uint16> x = PyGLM_Vec_PTI_Get2(3, uint16, arg3); // if (PyGLM_Mat_Check(3, 2, glm::u16, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 2, glm::u16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(3, 3, glm::u16, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 3, glm::u16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(3, 4, glm::u16, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 4, glm::u16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } //} //if (PyGLM_Vec_PTI_Check2(4, glm::u16, arg3)) { // glm::vec<4, uint16> x = PyGLM_Vec_PTI_Get2(4, uint16, arg3); // if (PyGLM_Mat_Check(4, 2, glm::u16, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 2, glm::u16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(4, 3, glm::u16, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 3, glm::u16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(4, 4, glm::u16, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 4, glm::u16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } //} //if (PyGLM_Vec_PTI_Check2(2, glm::i8, arg3)) { // glm::vec<2, int8> x = PyGLM_Vec_PTI_Get2(2, int8, arg3); // if (PyGLM_Mat_Check(2, 2, glm::i8, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 2, glm::i8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(2, 3, glm::i8, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 3, glm::i8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(2, 4, glm::i8, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 4, glm::i8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } //} //if (PyGLM_Vec_PTI_Check2(3, glm::i8, arg3)) { // glm::vec<3, int8> x = PyGLM_Vec_PTI_Get2(3, int8, arg3); // if (PyGLM_Mat_Check(3, 2, glm::i8, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 2, glm::i8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(3, 3, glm::i8, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 3, glm::i8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(3, 4, glm::i8, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 4, glm::i8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } //} //if (PyGLM_Vec_PTI_Check2(4, glm::i8, arg3)) { // glm::vec<4, int8> x = PyGLM_Vec_PTI_Get2(4, int8, arg3); // if (PyGLM_Mat_Check(4, 2, glm::i8, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 2, glm::i8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(4, 3, glm::i8, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 3, glm::i8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(4, 4, glm::i8, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 4, glm::i8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } //} //if (PyGLM_Vec_PTI_Check2(2, glm::u8, arg3)) { // glm::vec<2, uint8> x = PyGLM_Vec_PTI_Get2(2, uint8, arg3); // if (PyGLM_Mat_Check(2, 2, glm::u8, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 2, glm::u8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(2, 3, glm::u8, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 3, glm::u8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(2, 4, glm::u8, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 4, glm::u8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } //} //if (PyGLM_Vec_PTI_Check2(3, glm::u8, arg3)) { // glm::vec<3, uint8> x = PyGLM_Vec_PTI_Get2(3, uint8, arg3); // if (PyGLM_Mat_Check(3, 2, glm::u8, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 2, glm::u8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(3, 3, glm::u8, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 3, glm::u8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(3, 4, glm::u8, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 4, glm::u8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } //} //if (PyGLM_Vec_PTI_Check2(4, glm::u8, arg3)) { // glm::vec<4, uint8> x = PyGLM_Vec_PTI_Get2(4, uint8, arg3); // if (PyGLM_Mat_Check(4, 2, glm::u8, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 2, glm::u8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(4, 3, glm::u8, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 3, glm::u8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(4, 4, glm::u8, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 4, glm::u8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } //} //if (PyGLM_Vec_PTI_Check2(2, bool, arg3)) { // glm::vec<2, bool> x = PyGLM_Vec_PTI_Get2(2, bool, arg3); // if (PyGLM_Mat_Check(2, 2, bool, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 2, bool> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(2, 3, bool, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 3, bool> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(2, 4, bool, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 4, bool> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } //} //if (PyGLM_Vec_PTI_Check2(3, bool, arg3)) { // glm::vec<3, bool> x = PyGLM_Vec_PTI_Get2(3, bool, arg3); // if (PyGLM_Mat_Check(3, 2, bool, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 2, bool> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(3, 3, bool, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 3, bool> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(3, 4, bool, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 4, bool> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } //} //if (PyGLM_Vec_PTI_Check2(4, bool, arg3)) { // glm::vec<4, bool> x = PyGLM_Vec_PTI_Get2(4, bool, arg3); // if (PyGLM_Mat_Check(4, 2, bool, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 2, bool> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(4, 3, bool, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 3, bool> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } // if (PyGLM_Mat_Check(4, 4, bool, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 4, bool> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index, x)); // } //} } else { PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_ALL | PyGLM_DT_ALL); if (PyGLM_Mat_PTI_Check0(2, 2, float, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 2, float> m = PyGLM_Mat_PTI_Get0(2, 2, float, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(2, 3, float, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 3, float> m = PyGLM_Mat_PTI_Get0(2, 3, float, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(2, 4, float, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 4, float> m = PyGLM_Mat_PTI_Get0(2, 4, float, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(3, 2, float, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 2, float> m = PyGLM_Mat_PTI_Get0(3, 2, float, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(3, 3, float, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 3, float> m = PyGLM_Mat_PTI_Get0(3, 3, float, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(3, 4, float, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 4, float> m = PyGLM_Mat_PTI_Get0(3, 4, float, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(4, 2, float, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 2, float> m = PyGLM_Mat_PTI_Get0(4, 2, float, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(4, 3, float, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 3, float> m = PyGLM_Mat_PTI_Get0(4, 3, float, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(4, 4, float, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 4, float> m = PyGLM_Mat_PTI_Get0(4, 4, float, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(2, 2, double, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 2, double> m = PyGLM_Mat_PTI_Get0(2, 2, double, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(2, 3, double, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 3, double> m = PyGLM_Mat_PTI_Get0(2, 3, double, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(2, 4, double, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 4, double> m = PyGLM_Mat_PTI_Get0(2, 4, double, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(3, 2, double, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 2, double> m = PyGLM_Mat_PTI_Get0(3, 2, double, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(3, 3, double, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 3, double> m = PyGLM_Mat_PTI_Get0(3, 3, double, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(3, 4, double, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 4, double> m = PyGLM_Mat_PTI_Get0(3, 4, double, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(4, 2, double, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 2, double> m = PyGLM_Mat_PTI_Get0(4, 2, double, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(4, 3, double, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 3, double> m = PyGLM_Mat_PTI_Get0(4, 3, double, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(4, 4, double, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 4, double> m = PyGLM_Mat_PTI_Get0(4, 4, double, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(2, 2, int, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 2, int> m = PyGLM_Mat_PTI_Get0(2, 2, int, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(2, 3, int, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 3, int> m = PyGLM_Mat_PTI_Get0(2, 3, int, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(2, 4, int, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 4, int> m = PyGLM_Mat_PTI_Get0(2, 4, int, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(3, 2, int, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 2, int> m = PyGLM_Mat_PTI_Get0(3, 2, int, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(3, 3, int, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 3, int> m = PyGLM_Mat_PTI_Get0(3, 3, int, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(3, 4, int, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 4, int> m = PyGLM_Mat_PTI_Get0(3, 4, int, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(4, 2, int, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 2, int> m = PyGLM_Mat_PTI_Get0(4, 2, int, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(4, 3, int, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 3, int> m = PyGLM_Mat_PTI_Get0(4, 3, int, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(4, 4, int, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 4, int> m = PyGLM_Mat_PTI_Get0(4, 4, int, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(2, 2, glm::uint, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 2, glm::uint> m = PyGLM_Mat_PTI_Get0(2, 2, glm::uint, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(2, 3, glm::uint, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 3, glm::uint> m = PyGLM_Mat_PTI_Get0(2, 3, glm::uint, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(2, 4, glm::uint, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 4, glm::uint> m = PyGLM_Mat_PTI_Get0(2, 4, glm::uint, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(3, 2, glm::uint, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 2, glm::uint> m = PyGLM_Mat_PTI_Get0(3, 2, glm::uint, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(3, 3, glm::uint, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 3, glm::uint> m = PyGLM_Mat_PTI_Get0(3, 3, glm::uint, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(3, 4, glm::uint, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 4, glm::uint> m = PyGLM_Mat_PTI_Get0(3, 4, glm::uint, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(4, 2, glm::uint, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 2, glm::uint> m = PyGLM_Mat_PTI_Get0(4, 2, glm::uint, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(4, 3, glm::uint, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 3, glm::uint> m = PyGLM_Mat_PTI_Get0(4, 3, glm::uint, arg1); return pack(glm::row(m, index)); } if (PyGLM_Mat_PTI_Check0(4, 4, glm::uint, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 4, glm::uint> m = PyGLM_Mat_PTI_Get0(4, 4, glm::uint, arg1); return pack(glm::row(m, index)); } //if (PyGLM_Mat_Check(2, 2, glm::i64, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 2, glm::i64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(2, 3, glm::i64, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 3, glm::i64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(2, 4, glm::i64, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 4, glm::i64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(3, 2, glm::i64, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 2, glm::i64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(3, 3, glm::i64, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 3, glm::i64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(3, 4, glm::i64, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 4, glm::i64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(4, 2, glm::i64, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 2, glm::i64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(4, 3, glm::i64, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 3, glm::i64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(4, 4, glm::i64, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 4, glm::i64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(2, 2, glm::u64, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 2, glm::u64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(2, 3, glm::u64, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 3, glm::u64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(2, 4, glm::u64, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 4, glm::u64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(3, 2, glm::u64, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 2, glm::u64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(3, 3, glm::u64, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 3, glm::u64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(3, 4, glm::u64, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 4, glm::u64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(4, 2, glm::u64, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 2, glm::u64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(4, 3, glm::u64, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 3, glm::u64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(4, 4, glm::u64, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 4, glm::u64> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(2, 2, glm::i16, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 2, glm::i16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(2, 3, glm::i16, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 3, glm::i16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(2, 4, glm::i16, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 4, glm::i16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(3, 2, glm::i16, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 2, glm::i16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(3, 3, glm::i16, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 3, glm::i16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(3, 4, glm::i16, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 4, glm::i16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(4, 2, glm::i16, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 2, glm::i16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(4, 3, glm::i16, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 3, glm::i16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(4, 4, glm::i16, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 4, glm::i16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(2, 2, glm::u16, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 2, glm::u16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(2, 3, glm::u16, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 3, glm::u16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(2, 4, glm::u16, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 4, glm::u16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(3, 2, glm::u16, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 2, glm::u16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(3, 3, glm::u16, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 3, glm::u16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(3, 4, glm::u16, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 4, glm::u16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(4, 2, glm::u16, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 2, glm::u16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(4, 3, glm::u16, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 3, glm::u16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(4, 4, glm::u16, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 4, glm::u16> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(2, 2, glm::i8, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 2, glm::i8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(2, 3, glm::i8, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 3, glm::i8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(2, 4, glm::i8, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 4, glm::i8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(3, 2, glm::i8, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 2, glm::i8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(3, 3, glm::i8, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 3, glm::i8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(3, 4, glm::i8, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 4, glm::i8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(4, 2, glm::i8, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 2, glm::i8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(4, 3, glm::i8, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 3, glm::i8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(4, 4, glm::i8, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 4, glm::i8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(2, 2, glm::u8, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 2, glm::u8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(2, 3, glm::u8, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 3, glm::u8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(2, 4, glm::u8, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 4, glm::u8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(3, 2, glm::u8, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 2, glm::u8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(3, 3, glm::u8, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 3, glm::u8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(3, 4, glm::u8, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 4, glm::u8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(4, 2, glm::u8, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 2, glm::u8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(4, 3, glm::u8, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 3, glm::u8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(4, 4, glm::u8, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 4, glm::u8> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(2, 2, bool, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 2, bool> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(2, 3, bool, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 3, bool> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(2, 4, bool, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 4, bool> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(3, 2, bool, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 2, bool> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(3, 3, bool, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 3, bool> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(3, 4, bool, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 4, bool> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(4, 2, bool, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 2, bool> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(4, 3, bool, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 3, bool> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} //if (PyGLM_Mat_Check(4, 4, bool, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 4, bool> m; // unpack_mat(arg1, m); // return pack(glm::row(m, index)); //} } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for row()"); return NULL; } static PyObject* column_(PyObject*, PyObject* args) { PyObject *arg1, *arg2, *arg3 = NULL; if (!PyArg_UnpackTuple(args, "column", 2, 3, &arg1, &arg2, &arg3) || !PyGLM_Number_Check(arg2)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for column()"); return NULL; } glm::length_t index = PyGLM_Number_FromPyObject(arg2); if (index < 0) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } if (arg3 != NULL) { PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_DT_ALL); if (PyGLM_Vec_PTI_Check2(2, float, arg3)) { glm::vec<2, float> x = PyGLM_Vec_PTI_Get2(2, float, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_Nx2 | PyGLM_DT_FLOAT); if (PyGLM_Mat_PTI_Check0(2, 2, float, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 2, float> m = PyGLM_Mat_PTI_Get0(2, 2, float, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(3, 2, float, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 2, float> m = PyGLM_Mat_PTI_Get0(3, 2, float, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(4, 2, float, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 2, float> m = PyGLM_Mat_PTI_Get0(4, 2, float, arg1); return pack(glm::column(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::vec<3, float> x = PyGLM_Vec_PTI_Get2(3, float, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_Nx3 | PyGLM_DT_FLOAT); if (PyGLM_Mat_PTI_Check0(2, 3, float, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 3, float> m = PyGLM_Mat_PTI_Get0(2, 3, float, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(3, 3, float, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 3, float> m = PyGLM_Mat_PTI_Get0(3, 3, float, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(4, 3, float, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 3, float> m = PyGLM_Mat_PTI_Get0(4, 3, float, arg1); return pack(glm::column(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(4, float, arg3)) { glm::vec<4, float> x = PyGLM_Vec_PTI_Get2(4, float, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_Nx4 | PyGLM_DT_FLOAT); if (PyGLM_Mat_PTI_Check0(2, 4, float, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 4, float> m = PyGLM_Mat_PTI_Get0(2, 4, float, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(3, 4, float, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 4, float> m = PyGLM_Mat_PTI_Get0(3, 4, float, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(4, 4, float, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 4, float> m = PyGLM_Mat_PTI_Get0(4, 4, float, arg1); return pack(glm::column(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(2, double, arg3)) { glm::vec<2, double> x = PyGLM_Vec_PTI_Get2(2, double, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_Nx2 | PyGLM_DT_DOUBLE); if (PyGLM_Mat_PTI_Check0(2, 2, double, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 2, double> m = PyGLM_Mat_PTI_Get0(2, 2, double, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(3, 2, double, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 2, double> m = PyGLM_Mat_PTI_Get0(3, 2, double, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(4, 2, double, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 2, double> m = PyGLM_Mat_PTI_Get0(4, 2, double, arg1); return pack(glm::column(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::vec<3, double> x = PyGLM_Vec_PTI_Get2(3, double, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_Nx3 | PyGLM_DT_DOUBLE); if (PyGLM_Mat_PTI_Check0(2, 3, double, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 3, double> m = PyGLM_Mat_PTI_Get0(2, 3, double, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(3, 3, double, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 3, double> m = PyGLM_Mat_PTI_Get0(3, 3, double, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(4, 3, double, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 3, double> m = PyGLM_Mat_PTI_Get0(4, 3, double, arg1); return pack(glm::column(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(4, double, arg3)) { glm::vec<4, double> x = PyGLM_Vec_PTI_Get2(4, double, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_Nx4 | PyGLM_DT_DOUBLE); if (PyGLM_Mat_PTI_Check0(2, 4, double, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 4, double> m = PyGLM_Mat_PTI_Get0(2, 4, double, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(3, 4, double, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 4, double> m = PyGLM_Mat_PTI_Get0(3, 4, double, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(4, 4, double, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 4, double> m = PyGLM_Mat_PTI_Get0(4, 4, double, arg1); return pack(glm::column(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(2, int, arg3)) { glm::vec<2, int> x = PyGLM_Vec_PTI_Get2(2, int, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_Nx2 | PyGLM_DT_INT); if (PyGLM_Mat_PTI_Check0(2, 2, int, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 2, int> m = PyGLM_Mat_PTI_Get0(2, 2, int, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(3, 2, int, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 2, int> m = PyGLM_Mat_PTI_Get0(3, 2, int, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(4, 2, int, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 2, int> m = PyGLM_Mat_PTI_Get0(4, 2, int, arg1); return pack(glm::column(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(3, int, arg3)) { glm::vec<3, int> x = PyGLM_Vec_PTI_Get2(3, int, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_Nx3 | PyGLM_DT_INT); if (PyGLM_Mat_PTI_Check0(2, 3, int, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 3, int> m = PyGLM_Mat_PTI_Get0(2, 3, int, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(3, 3, int, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 3, int> m = PyGLM_Mat_PTI_Get0(3, 3, int, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(4, 3, int, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 3, int> m = PyGLM_Mat_PTI_Get0(4, 3, int, arg1); return pack(glm::column(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(4, int, arg3)) { glm::vec<4, int> x = PyGLM_Vec_PTI_Get2(4, int, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_Nx4 | PyGLM_DT_INT); if (PyGLM_Mat_PTI_Check0(2, 4, int, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 4, int> m = PyGLM_Mat_PTI_Get0(2, 4, int, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(3, 4, int, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 4, int> m = PyGLM_Mat_PTI_Get0(3, 4, int, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(4, 4, int, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 4, int> m = PyGLM_Mat_PTI_Get0(4, 4, int, arg1); return pack(glm::column(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(2, glm::uint, arg3)) { glm::vec<2, glm::uint> x = PyGLM_Vec_PTI_Get2(2, glm::uint, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_Nx2 | PyGLM_DT_UINT); if (PyGLM_Mat_PTI_Check0(2, 2, glm::uint, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 2, glm::uint> m = PyGLM_Mat_PTI_Get0(2, 2, glm::uint, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(3, 2, glm::uint, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 2, glm::uint> m = PyGLM_Mat_PTI_Get0(3, 2, glm::uint, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(4, 2, glm::uint, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 2, glm::uint> m = PyGLM_Mat_PTI_Get0(4, 2, glm::uint, arg1); return pack(glm::column(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(3, glm::uint, arg3)) { glm::vec<3, glm::uint> x = PyGLM_Vec_PTI_Get2(3, glm::uint, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_Nx3 | PyGLM_DT_UINT); if (PyGLM_Mat_PTI_Check0(2, 3, glm::uint, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 3, glm::uint> m = PyGLM_Mat_PTI_Get0(2, 3, glm::uint, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(3, 3, glm::uint, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 3, glm::uint> m = PyGLM_Mat_PTI_Get0(3, 3, glm::uint, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(4, 3, glm::uint, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 3, glm::uint> m = PyGLM_Mat_PTI_Get0(4, 3, glm::uint, arg1); return pack(glm::column(m, index, x)); } } if (PyGLM_Vec_PTI_Check2(4, glm::uint, arg3)) { glm::vec<4, glm::uint> x = PyGLM_Vec_PTI_Get2(4, glm::uint, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_Nx4 | PyGLM_DT_UINT); if (PyGLM_Mat_PTI_Check0(2, 4, glm::uint, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 4, glm::uint> m = PyGLM_Mat_PTI_Get0(2, 4, glm::uint, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(3, 4, glm::uint, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 4, glm::uint> m = PyGLM_Mat_PTI_Get0(3, 4, glm::uint, arg1); return pack(glm::column(m, index, x)); } if (PyGLM_Mat_PTI_Check0(4, 4, glm::uint, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 4, glm::uint> m = PyGLM_Mat_PTI_Get0(4, 4, glm::uint, arg1); return pack(glm::column(m, index, x)); } } } else { PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_ALL | PyGLM_DT_ALL); if (PyGLM_Mat_PTI_Check0(2, 2, float, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 2, float> m = PyGLM_Mat_PTI_Get0(2, 2, float, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(2, 3, float, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 3, float> m = PyGLM_Mat_PTI_Get0(2, 3, float, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(2, 4, float, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 4, float> m = PyGLM_Mat_PTI_Get0(2, 4, float, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(3, 2, float, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 2, float> m = PyGLM_Mat_PTI_Get0(3, 2, float, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(3, 3, float, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 3, float> m = PyGLM_Mat_PTI_Get0(3, 3, float, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(3, 4, float, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 4, float> m = PyGLM_Mat_PTI_Get0(3, 4, float, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(4, 2, float, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 2, float> m = PyGLM_Mat_PTI_Get0(4, 2, float, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(4, 3, float, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 3, float> m = PyGLM_Mat_PTI_Get0(4, 3, float, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(4, 4, float, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 4, float> m = PyGLM_Mat_PTI_Get0(4, 4, float, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(2, 2, double, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 2, double> m = PyGLM_Mat_PTI_Get0(2, 2, double, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(2, 3, double, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 3, double> m = PyGLM_Mat_PTI_Get0(2, 3, double, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(2, 4, double, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 4, double> m = PyGLM_Mat_PTI_Get0(2, 4, double, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(3, 2, double, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 2, double> m = PyGLM_Mat_PTI_Get0(3, 2, double, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(3, 3, double, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 3, double> m = PyGLM_Mat_PTI_Get0(3, 3, double, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(3, 4, double, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 4, double> m = PyGLM_Mat_PTI_Get0(3, 4, double, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(4, 2, double, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 2, double> m = PyGLM_Mat_PTI_Get0(4, 2, double, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(4, 3, double, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 3, double> m = PyGLM_Mat_PTI_Get0(4, 3, double, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(4, 4, double, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 4, double> m = PyGLM_Mat_PTI_Get0(4, 4, double, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(2, 2, int, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 2, int> m = PyGLM_Mat_PTI_Get0(2, 2, int, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(2, 3, int, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 3, int> m = PyGLM_Mat_PTI_Get0(2, 3, int, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(2, 4, int, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 4, int> m = PyGLM_Mat_PTI_Get0(2, 4, int, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(3, 2, int, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 2, int> m = PyGLM_Mat_PTI_Get0(3, 2, int, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(3, 3, int, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 3, int> m = PyGLM_Mat_PTI_Get0(3, 3, int, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(3, 4, int, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 4, int> m = PyGLM_Mat_PTI_Get0(3, 4, int, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(4, 2, int, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 2, int> m = PyGLM_Mat_PTI_Get0(4, 2, int, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(4, 3, int, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 3, int> m = PyGLM_Mat_PTI_Get0(4, 3, int, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(4, 4, int, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 4, int> m = PyGLM_Mat_PTI_Get0(4, 4, int, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(2, 2, glm::uint, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 2, glm::uint> m = PyGLM_Mat_PTI_Get0(2, 2, glm::uint, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(2, 3, glm::uint, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 3, glm::uint> m = PyGLM_Mat_PTI_Get0(2, 3, glm::uint, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(2, 4, glm::uint, arg1)) { if (index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<2, 4, glm::uint> m = PyGLM_Mat_PTI_Get0(2, 4, glm::uint, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(3, 2, glm::uint, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 2, glm::uint> m = PyGLM_Mat_PTI_Get0(3, 2, glm::uint, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(3, 3, glm::uint, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 3, glm::uint> m = PyGLM_Mat_PTI_Get0(3, 3, glm::uint, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(3, 4, glm::uint, arg1)) { if (index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<3, 4, glm::uint> m = PyGLM_Mat_PTI_Get0(3, 4, glm::uint, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(4, 2, glm::uint, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 2, glm::uint> m = PyGLM_Mat_PTI_Get0(4, 2, glm::uint, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(4, 3, glm::uint, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 3, glm::uint> m = PyGLM_Mat_PTI_Get0(4, 3, glm::uint, arg1); return pack(m[index]); } if (PyGLM_Mat_PTI_Check0(4, 4, glm::uint, arg1)) { if (index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } glm::mat<4, 4, glm::uint> m = PyGLM_Mat_PTI_Get0(4, 4, glm::uint, arg1); return pack(m[index]); } //if (PyGLM_Mat_Check(2, 2, glm::i64, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 2, glm::i64> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(2, 3, glm::i64, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 3, glm::i64> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(2, 4, glm::i64, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 4, glm::i64> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(3, 2, glm::i64, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 2, glm::i64> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(3, 3, glm::i64, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 3, glm::i64> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(3, 4, glm::i64, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 4, glm::i64> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(4, 2, glm::i64, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 2, glm::i64> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(4, 3, glm::i64, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 3, glm::i64> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(4, 4, glm::i64, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 4, glm::i64> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(2, 2, glm::u64, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 2, glm::u64> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(2, 3, glm::u64, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 3, glm::u64> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(2, 4, glm::u64, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 4, glm::u64> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(3, 2, glm::u64, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 2, glm::u64> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(3, 3, glm::u64, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 3, glm::u64> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(3, 4, glm::u64, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 4, glm::u64> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(4, 2, glm::u64, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 2, glm::u64> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(4, 3, glm::u64, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 3, glm::u64> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(4, 4, glm::u64, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 4, glm::u64> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(2, 2, glm::i16, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 2, glm::i16> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(2, 3, glm::i16, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 3, glm::i16> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(2, 4, glm::i16, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 4, glm::i16> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(3, 2, glm::i16, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 2, glm::i16> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(3, 3, glm::i16, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 3, glm::i16> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(3, 4, glm::i16, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 4, glm::i16> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(4, 2, glm::i16, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 2, glm::i16> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(4, 3, glm::i16, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 3, glm::i16> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(4, 4, glm::i16, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 4, glm::i16> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(2, 2, glm::u16, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 2, glm::u16> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(2, 3, glm::u16, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 3, glm::u16> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(2, 4, glm::u16, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 4, glm::u16> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(3, 2, glm::u16, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 2, glm::u16> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(3, 3, glm::u16, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 3, glm::u16> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(3, 4, glm::u16, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 4, glm::u16> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(4, 2, glm::u16, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 2, glm::u16> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(4, 3, glm::u16, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 3, glm::u16> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(4, 4, glm::u16, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 4, glm::u16> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(2, 2, glm::i8, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 2, glm::i8> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(2, 3, glm::i8, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 3, glm::i8> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(2, 4, glm::i8, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 4, glm::i8> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(3, 2, glm::i8, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 2, glm::i8> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(3, 3, glm::i8, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 3, glm::i8> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(3, 4, glm::i8, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 4, glm::i8> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(4, 2, glm::i8, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 2, glm::i8> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(4, 3, glm::i8, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 3, glm::i8> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(4, 4, glm::i8, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 4, glm::i8> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(2, 2, glm::u8, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 2, glm::u8> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(2, 3, glm::u8, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 3, glm::u8> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(2, 4, glm::u8, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 4, glm::u8> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(3, 2, glm::u8, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 2, glm::u8> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(3, 3, glm::u8, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 3, glm::u8> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(3, 4, glm::u8, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 4, glm::u8> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(4, 2, glm::u8, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 2, glm::u8> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(4, 3, glm::u8, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 3, glm::u8> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(4, 4, glm::u8, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 4, glm::u8> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(2, 2, bool, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 2, bool> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(2, 3, bool, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 3, bool> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(2, 4, bool, arg1)) { // if (index > 1) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<2, 4, bool> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(3, 2, bool, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 2, bool> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(3, 3, bool, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 3, bool> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(3, 4, bool, arg1)) { // if (index > 2) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<3, 4, bool> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(4, 2, bool, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 2, bool> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(4, 3, bool, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 3, bool> m; // unpack_mat(arg1, m); // return pack(m[index]); //} //if (PyGLM_Mat_Check(4, 4, bool, arg1)) { // if (index > 3) { // PyErr_SetString(PyExc_IndexError, "index out of range"); // return NULL; // } // glm::mat<4, 4, bool> m; // unpack_mat(arg1, m); // return pack(m[index]); //} } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for column()"); return NULL; } PyDoc_STRVAR(row_docstr, "row(m: matNxM, index: int) -> vecN\n" " Get a specific row of a matrix.\n" "row(m: matNxM, index: int, x: vecN) -> matNxM\n" " Set a specific row to a matrix." ); PyDoc_STRVAR(column_docstr, "column(m: matNxM, index: int) -> vecM\n" " Get a specific column of a matrix.\n" "column(m: matNxM, index: int, x: vecM) -> matNxM\n" " Set a specific column to a matrix." ); #define MATRIX_ACCESS_METHODS \ { "row", (PyCFunction)row_, METH_VARARGS, row_docstr }, \ { "column", (PyCFunction)column_, METH_VARARGS, column_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/stable_extensions/matrix_clip_space.h000066400000000000000000000621241511156275200307140ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" #include "../function_generator_macros.h" static PyObject* ortho_(PyObject*, PyObject* args) { PyObject* arg1, * arg2, * arg3, * arg4, * arg5 = NULL, * arg6 = NULL; if (!PyArg_UnpackTuple(args, "ortho", 4, 6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for ortho()"); return NULL; } if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4)) { if (arg5 != NULL && arg6 != NULL && PyGLM_Number_Check(arg5) && PyGLM_Number_Check(arg6)) return pack(glm::ortho(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3), PyGLM_Number_FromPyObject(arg4), PyGLM_Number_FromPyObject(arg5), PyGLM_Number_FromPyObject(arg6))); if (arg5 == NULL && arg6 == NULL) return pack(glm::ortho(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3), PyGLM_Number_FromPyObject(arg4))); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for ortho()"); return NULL; } PyGLM_MAKE_GLM_FUNC_NNNNNN__tf(orthoLH_ZO) PyGLM_MAKE_GLM_FUNC_NNNNNN__tf(orthoLH_NO) PyGLM_MAKE_GLM_FUNC_NNNNNN__tf(orthoRH_ZO) PyGLM_MAKE_GLM_FUNC_NNNNNN__tf(orthoRH_NO) PyGLM_MAKE_GLM_FUNC_NNNNNN__tf(orthoLH) PyGLM_MAKE_GLM_FUNC_NNNNNN__tf(orthoZO) PyGLM_MAKE_GLM_FUNC_NNNNNN__tf(orthoRH) PyGLM_MAKE_GLM_FUNC_NNNNNN__tf(orthoNO) PyGLM_MAKE_GLM_FUNC_NNNNNN__tf(frustum) PyGLM_MAKE_GLM_FUNC_NNNNNN__tf(frustumLH_ZO) PyGLM_MAKE_GLM_FUNC_NNNNNN__tf(frustumLH_NO) PyGLM_MAKE_GLM_FUNC_NNNNNN__tf(frustumRH_ZO) PyGLM_MAKE_GLM_FUNC_NNNNNN__tf(frustumRH_NO) PyGLM_MAKE_GLM_FUNC_NNNNNN__tf(frustumLH) PyGLM_MAKE_GLM_FUNC_NNNNNN__tf(frustumZO) PyGLM_MAKE_GLM_FUNC_NNNNNN__tf(frustumRH) PyGLM_MAKE_GLM_FUNC_NNNNNN__tf(frustumNO) PyGLM_MAKE_GLM_FUNC_NNNN__tf(perspective) PyGLM_MAKE_GLM_FUNC_NNNN__tf(perspectiveLH_ZO) PyGLM_MAKE_GLM_FUNC_NNNN__tf(perspectiveLH_NO) PyGLM_MAKE_GLM_FUNC_NNNN__tf(perspectiveRH_ZO) PyGLM_MAKE_GLM_FUNC_NNNN__tf(perspectiveRH_NO) PyGLM_MAKE_GLM_FUNC_NNNN__tf(perspectiveLH) PyGLM_MAKE_GLM_FUNC_NNNN__tf(perspectiveZO) PyGLM_MAKE_GLM_FUNC_NNNN__tf(perspectiveRH) PyGLM_MAKE_GLM_FUNC_NNNN__tf(perspectiveNO) static PyObject* perspectiveFov_(PyObject*, PyObject* args) { PyObject* arg1, * arg2, * arg3, * arg4, * arg5; PyGLM_Arg_Unpack_5O(args, "perspectiveFov", arg1, arg2, arg3, arg4, arg5); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4) && PyGLM_Number_Check(arg5)) { float f = PyGLM_Number_FromPyObject(arg1), f2 = PyGLM_Number_FromPyObject(arg2), f3 = PyGLM_Number_FromPyObject(arg3); if (!(f > 0 && f2 > 0 && f3 > 0)) { PyErr_SetString(PyExc_ValueError, "fov, width and height arguments of perspectiveFov() must be greater than 0"); return NULL; } return pack(glm::perspectiveFov(f, f2, f3, PyGLM_Number_FromPyObject(arg4), PyGLM_Number_FromPyObject(arg5))); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for perspectiveFov()"); return NULL; } static PyObject* perspectiveFovLH_ZO_(PyObject*, PyObject* args) { PyObject* arg1, * arg2, * arg3, * arg4, * arg5; PyGLM_Arg_Unpack_5O(args, "perspectiveFovLH_ZO", arg1, arg2, arg3, arg4, arg5); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4) && PyGLM_Number_Check(arg5)) { float f = PyGLM_Number_FromPyObject(arg1), f2 = PyGLM_Number_FromPyObject(arg2), f3 = PyGLM_Number_FromPyObject(arg3); if (!(f > 0 && f2 > 0 && f3 > 0)) { PyErr_SetString(PyExc_ValueError, "fov, width and height arguments of perspectiveFovLH_ZO() must be greater than 0"); return NULL; } return pack(glm::perspectiveFovLH_ZO(f, f2, f3, PyGLM_Number_FromPyObject(arg4), PyGLM_Number_FromPyObject(arg5))); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for perspectiveFovLH_ZO()"); return NULL; } static PyObject* perspectiveFovLH_NO_(PyObject*, PyObject* args) { PyObject* arg1, * arg2, * arg3, * arg4, * arg5; PyGLM_Arg_Unpack_5O(args, "perspectiveFovLH_NO", arg1, arg2, arg3, arg4, arg5); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4) && PyGLM_Number_Check(arg5)) { float f = PyGLM_Number_FromPyObject(arg1), f2 = PyGLM_Number_FromPyObject(arg2), f3 = PyGLM_Number_FromPyObject(arg3); if (!(f > 0 && f2 > 0 && f3 > 0)) { PyErr_SetString(PyExc_ValueError, "fov, width and height arguments of perspectiveFovLH_NO() must be greater than 0"); return NULL; } return pack(glm::perspectiveFovLH_NO(f, f2, f3, PyGLM_Number_FromPyObject(arg4), PyGLM_Number_FromPyObject(arg5))); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for perspectiveFovLH_NO()"); return NULL; } static PyObject* perspectiveFovRH_ZO_(PyObject*, PyObject* args) { PyObject* arg1, * arg2, * arg3, * arg4, * arg5; PyGLM_Arg_Unpack_5O(args, "perspectiveFovRH_ZO", arg1, arg2, arg3, arg4, arg5); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4) && PyGLM_Number_Check(arg5)) { float f = PyGLM_Number_FromPyObject(arg1), f2 = PyGLM_Number_FromPyObject(arg2), f3 = PyGLM_Number_FromPyObject(arg3); if (!(f > 0 && f2 > 0 && f3 > 0)) { PyErr_SetString(PyExc_ValueError, "fov, width and height arguments of perspectiveFovRH_ZO() must be greater than 0"); return NULL; } return pack(glm::perspectiveFovRH_ZO(f, f2, f3, PyGLM_Number_FromPyObject(arg4), PyGLM_Number_FromPyObject(arg5))); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for perspectiveFovRH_ZO()"); return NULL; } static PyObject* perspectiveFovRH_NO_(PyObject*, PyObject* args) { PyObject* arg1, * arg2, * arg3, * arg4, * arg5; PyGLM_Arg_Unpack_5O(args, "perspectiveFovRH_NO", arg1, arg2, arg3, arg4, arg5); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4) && PyGLM_Number_Check(arg5)) { float f = PyGLM_Number_FromPyObject(arg1), f2 = PyGLM_Number_FromPyObject(arg2), f3 = PyGLM_Number_FromPyObject(arg3); if (!(f > 0 && f2 > 0 && f3 > 0)) { PyErr_SetString(PyExc_ValueError, "fov, width and height arguments of perspectiveFovRH_NO() must be greater than 0"); return NULL; } return pack(glm::perspectiveFovRH_NO(f, f2, f3, PyGLM_Number_FromPyObject(arg4), PyGLM_Number_FromPyObject(arg5))); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for perspectiveFovRH_NO()"); return NULL; } static PyObject* perspectiveFovLH_(PyObject*, PyObject* args) { PyObject* arg1, * arg2, * arg3, * arg4, * arg5; PyGLM_Arg_Unpack_5O(args, "perspectiveFovLH", arg1, arg2, arg3, arg4, arg5); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4) && PyGLM_Number_Check(arg5)) { float f = PyGLM_Number_FromPyObject(arg1), f2 = PyGLM_Number_FromPyObject(arg2), f3 = PyGLM_Number_FromPyObject(arg3); if (!(f > 0 && f2 > 0 && f3 > 0)) { PyErr_SetString(PyExc_ValueError, "fov, width and height arguments of perspectiveFovLH() must be greater than 0"); return NULL; } return pack(glm::perspectiveFovLH(f, f2, f3, PyGLM_Number_FromPyObject(arg4), PyGLM_Number_FromPyObject(arg5))); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for perspectiveFovLH()"); return NULL; } static PyObject* perspectiveFovZO_(PyObject*, PyObject* args) { PyObject* arg1, * arg2, * arg3, * arg4, * arg5; PyGLM_Arg_Unpack_5O(args, "perspectiveFovZO", arg1, arg2, arg3, arg4, arg5); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4) && PyGLM_Number_Check(arg5)) { float f = PyGLM_Number_FromPyObject(arg1), f2 = PyGLM_Number_FromPyObject(arg2), f3 = PyGLM_Number_FromPyObject(arg3); if (!(f > 0 && f2 > 0 && f3 > 0)) { PyErr_SetString(PyExc_ValueError, "fov, width and height arguments of perspectiveFovZO() must be greater than 0"); return NULL; } return pack(glm::perspectiveFovZO(f, f2, f3, PyGLM_Number_FromPyObject(arg4), PyGLM_Number_FromPyObject(arg5))); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for perspectiveFovZO()"); return NULL; } static PyObject* perspectiveFovRH_(PyObject*, PyObject* args) { PyObject* arg1, * arg2, * arg3, * arg4, * arg5; PyGLM_Arg_Unpack_5O(args, "perspectiveFovRH", arg1, arg2, arg3, arg4, arg5); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4) && PyGLM_Number_Check(arg5)) { float f = PyGLM_Number_FromPyObject(arg1), f2 = PyGLM_Number_FromPyObject(arg2), f3 = PyGLM_Number_FromPyObject(arg3); if (!(f > 0 && f2 > 0 && f3 > 0)) { PyErr_SetString(PyExc_ValueError, "fov, width and height arguments of perspectiveFovRH() must be greater than 0"); return NULL; } return pack(glm::perspectiveFovRH(f, f2, f3, PyGLM_Number_FromPyObject(arg4), PyGLM_Number_FromPyObject(arg5))); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for perspectiveFovRH()"); return NULL; } static PyObject* perspectiveFovNO_(PyObject*, PyObject* args) { PyObject* arg1, * arg2, * arg3, * arg4, * arg5; PyGLM_Arg_Unpack_5O(args, "perspectiveFovNO", arg1, arg2, arg3, arg4, arg5); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4) && PyGLM_Number_Check(arg5)) { float f = PyGLM_Number_FromPyObject(arg1), f2 = PyGLM_Number_FromPyObject(arg2), f3 = PyGLM_Number_FromPyObject(arg3); if (!(f > 0 && f2 > 0 && f3 > 0)) { PyErr_SetString(PyExc_ValueError, "fov, width and height arguments of perspectiveFovNO() must be greater than 0"); return NULL; } return pack(glm::perspectiveFovNO(f, f2, f3, PyGLM_Number_FromPyObject(arg4), PyGLM_Number_FromPyObject(arg5))); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for perspectiveFovNO()"); return NULL; } PyGLM_MAKE_GLM_FUNC_NNN__tf(infinitePerspective) PyGLM_MAKE_GLM_FUNC_NNN__tf(infinitePerspectiveLH) PyGLM_MAKE_GLM_FUNC_NNN__tf(infinitePerspectiveRH) static PyObject* tweakedInfinitePerspective_(PyObject*, PyObject* args) { PyObject* arg1, * arg2, * arg3, * arg4 = NULL; if (!PyArg_UnpackTuple(args, "tweakedInfinitePerspective", 3, 4, &arg1, &arg2, &arg3, &arg4)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for tweakedInfinitePerspective()"); return NULL; } if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { if (arg4 != NULL && PyGLM_Number_Check(arg4)) { return pack(glm::tweakedInfinitePerspective(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3), PyGLM_Number_FromPyObject(arg4))); } return pack(glm::tweakedInfinitePerspective(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for tweakedInfinitePerspective()"); return NULL; } PyDoc_STRVAR(frustum_docstr, "frustum(left: float, right: float, bottom: float, top: float, near: float, far: float)\n" " -> fmat4x4\n" " See frustumRH_NO." ); PyDoc_STRVAR(frustumLH_docstr, "frustumLH(left: float, right: float, bottom: float, top: float, near: float, far: float)\n" " -> fmat4x4\n" " See frustumLH_NO." ); PyDoc_STRVAR(frustumLH_NO_docstr, "frustumLH_NO(left: float, right: float, bottom: float, top: float, near: float, far: float)\n" " -> fmat4x4\n" " Creates a left handed frustum matrix. The near and far clip planes correspond to z\n" " normalized device coordinates of `-1` and `+1` respectively.\n" " (OpenGL clip volume definition)" ); PyDoc_STRVAR(frustumLH_ZO_docstr, "frustumLH_ZO(left: float, right: float, bottom: float, top: float, near: float, far: float)\n" " -> fmat4x4\n" " Creates a left handed frustum matrix. The near and far clip planes correspond to z\n" " normalized device coordinates of `0` and `+1` respectively.\n" " (Direct3D clip volume definition)" ); PyDoc_STRVAR(frustumNO_docstr, "frustumNO(left: float, right: float, bottom: float, top: float, near: float, far: float)\n" " -> fmat4x4\n" " See frustumRH_NO." ); PyDoc_STRVAR(frustumRH_docstr, "frustumRH(left: float, right: float, bottom: float, top: float, near: float, far: float)\n" " -> fmat4x4\n" " See frustumRH_NO." ); PyDoc_STRVAR(frustumRH_NO_docstr, "frustumRH_NO(left: float, right: float, bottom: float, top: float, near: float, far: float)\n" " -> fmat4x4\n" " Creates a right handed frustum matrix. The near and far clip planes correspond to z\n" " normalized device coordinates of `-1` and `+1` respectively.\n" " (OpenGL clip volume definition)" ); PyDoc_STRVAR(frustumRH_ZO_docstr, "frustumRH_ZO(left: float, right: float, bottom: float, top: float, near: float, far: float)\n" " -> fmat4x4\n" " Creates a right handed frustum matrix. The near and far clip planes correspond to z\n" " normalized device coordinates of `0` and `+1` respectively.\n" " (Direct3D clip volume definition)" ); PyDoc_STRVAR(frustumZO_docstr, "frustumZO(left: float, right: float, bottom: float, top: float, near: float, far: float)\n" " -> fmat4x4\n" " See frustumRH_ZO." ); PyDoc_STRVAR(infinitePerspective_docstr, "infinitePerspective(fovy: float, aspect: float, near: float) -> fmat4x4\n" " See infinitePerspectiveRH." ); PyDoc_STRVAR(infinitePerspectiveLH_docstr, "infinitePerspectiveLH(fovy: float, aspect: float, near: float) -> fmat4x4\n" " Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at\n" " infinite." ); PyDoc_STRVAR(infinitePerspectiveRH_docstr, "infinitePerspectiveRH(fovy: float, aspect: float, near: float) -> fmat4x4\n" " Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at\n" " infinite." ); PyDoc_STRVAR(ortho_docstr, "ortho(left: float, right: float, bottom: float, top: float) -> fmat4x4\n" " Creates a matrix for projecting two-dimensional coordinates onto the screen.\n" "ortho(left: float, right: float, bottom: float, top: float, zNear: float, zFar: float)\n" " -> fmat4x4\n" " See orthoRH_NO." ); PyDoc_STRVAR(orthoLH_docstr, "orthoLH(left: float, right: float, bottom: float, top: float, zNear: float, zFar: float)\n" " -> fmat4x4\n" " See orthoLH_NO." ); PyDoc_STRVAR(orthoRH_docstr, "orthoRH(left: float, right: float, bottom: float, top: float, zNear: float, zFar: float)\n" " -> fmat4x4\n" " See orthoRH_NO." ); PyDoc_STRVAR(orthoZO_docstr, "orthoZO(left: float, right: float, bottom: float, top: float, zNear: float, zFar: float)\n" " -> fmat4x4\n" " See orthoRH_ZO." ); PyDoc_STRVAR(orthoNO_docstr, "orthoNO(left: float, right: float, bottom: float, top: float, zNear: float, zFar: float)\n" " -> fmat4x4\n" " See orthoRH_NO." ); PyDoc_STRVAR(orthoLH_ZO_docstr, "orthoLH_ZO(left: float, right: float, bottom: float, top: float, zNear: float, zFar: float)\n" " -> fmat4x4\n" " Creates a matrix for an orthographic parallel viewing volume, using left-handed\n" " coordinates. The nearand far clip planes correspond to z normalized device\n" " coordinates of `0` and `+1` respectively.\n" " (Direct3D clip volume definition)" ); PyDoc_STRVAR(orthoLH_NO_docstr, "orthoLH_NO(left: float, right: float, bottom: float, top: float, zNear: float, zFar: float)\n" " -> fmat4x4\n" " Creates a matrix for an orthographic parallel viewing volume using left-handed\n" " coordinates. The nearand far clip planes correspond to z normalized device coordinates of\n" " `-1` and `+1` respectively.\n" " (OpenGL clip volume definition)" ); PyDoc_STRVAR(orthoRH_ZO_docstr, "orthoRH_ZO(left: float, right: float, bottom: float, top: float, zNear: float, zFar: float)\n" " -> fmat4x4\n" " Creates a matrix for an orthographic parallel viewing volume, using right-handed\n" " coordinates. The nearand far clip planes correspond to z normalized device\n" " coordinates of `0` and `+1` respectively.\n" " (Direct3D clip volume definition)" ); PyDoc_STRVAR(orthoRH_NO_docstr, "orthoRH_NO(left: float, right: float, bottom: float, top: float, zNear: float, zFar: float)\n" " -> fmat4x4\n" " Creates a matrix for an orthographic parallel viewing volume using right-handed\n" " coordinates. The nearand far clip planes correspond to z normalized device coordinates of\n" " `-1` and `+1` respectively.\n" " (OpenGL clip volume definition)" ); PyDoc_STRVAR(perspective_docstr, "perspective(fovy: float, aspect: float, near: float, far: float) -> fmat4x4\n" " See perspectiveRH_NO." ); PyDoc_STRVAR(perspectiveRH_docstr, "perspectiveRH(fovy: float, aspect: float, near: float, far: float) -> fmat4x4\n" " See perspectiveRH_NO." ); PyDoc_STRVAR(perspectiveNO_docstr, "perspectiveNO(fovy: float, aspect: float, near: float, far: float) -> fmat4x4\n" " See perspectiveRH_NO." ); PyDoc_STRVAR(perspectiveLH_docstr, "perspectiveLH(fovy: float, aspect: float, near: float, far: float) -> fmat4x4\n" " See perspectiveLH_NO." ); PyDoc_STRVAR(perspectiveZO_docstr, "perspectiveZO(fovy: float, aspect: float, near: float, far: float) -> fmat4x4\n" " See perspectiveRH_ZO." ); PyDoc_STRVAR(perspectiveLH_NO_docstr, "perspectiveLH_NO(fovy: float, aspect: float, near: float, far: float) -> fmat4x4\n" " Creates a matrix for a left handed, symetric perspective-view frustum. The near and far\n" " clip planes correspond to z normalized device coordinates of `-1` and `+1` respectively.\n" " (OpenGL clip volume definition)" ); PyDoc_STRVAR(perspectiveLH_ZO_docstr, "perspectiveLH_ZO(fovy: float, aspect: float, near: float, far: float) -> fmat4x4\n" " Creates a matrix for a left handed, symetric perspective-view frustum. The near and far\n" " clip planes correspond to z normalized device coordinates of `0` and `+1` respectively.\n" " (Direct3D clip volume definition)" ); PyDoc_STRVAR(perspectiveRH_NO_docstr, "perspectiveRH_NO(fovy: float, aspect: float, near: float, far: float) -> fmat4x4\n" " Creates a matrix for a right handed, symetric perspective-view frustum. The near and far\n" " clip planes correspond to z normalized device coordinates of `-1` and `+1` respectively.\n" " (OpenGL clip volume definition)" ); PyDoc_STRVAR(perspectiveRH_ZO_docstr, "perspectiveRH_ZO(fovy: float, aspect: float, near: float, far: float) -> fmat4x4\n" " Creates a matrix for a right handed, symetric perspective-view frustum. The near and far\n" " clip planes correspond to z normalized device coordinates of `0` and `+1` respectively.\n" " (Direct3D clip volume definition)" ); PyDoc_STRVAR(perspectiveFov_docstr, "perspectiveFov(fov: float, width: float, height: float, near: float, far: float) -> fmat4x4\n" " See perspectiveFovRH_NO." ); PyDoc_STRVAR(perspectiveFovRH_docstr, "perspectiveFovRH(fov: float, width: float, height: float, near: float, far: float) -> fmat4x4\n" " See perspectiveFovRH_NO." ); PyDoc_STRVAR(perspectiveFovNO_docstr, "perspectiveFovNO(fov: float, width: float, height: float, near: float, far: float) -> fmat4x4\n" " See perspectiveFovRH_NO." ); PyDoc_STRVAR(perspectiveFovLH_docstr, "perspectiveFovLH(fov: float, width: float, height: float, near: float, far: float) -> fmat4x4\n" " See perspectiveFovLH_NO." ); PyDoc_STRVAR(perspectiveFovZO_docstr, "perspectiveFovZO(fov: float, width: float, height: float, near: float, far: float) -> fmat4x4\n" " See perspectiveFovRH_ZO." ); PyDoc_STRVAR(perspectiveFovLH_NO_docstr, "perspectiveFovLH_NO(fov: float, width: float, height: float, near: float, far: float)\n" " -> fmat4x4\n" " Builds a perspective projection matrix based on a field of view using left-handed\n" " coordinates. The nearand far clip planes correspond to z normalized device coordinates of\n" " `-1` and `+1` respectively. (OpenGL clip volume definition)" ); PyDoc_STRVAR(perspectiveFovLH_ZO_docstr, "perspectiveFovLH_ZO(fov: float, width: float, height: float, near: float, far: float)\n" " -> fmat4x4\n" " Builds a perspective projection matrix based on a field of view using left-handed\n" " coordinates. The nearand far clip planes correspond to z normalized device coordinates of\n" " `0` and `+1` respectively. (Direct3D clip volume definition)" ); PyDoc_STRVAR(perspectiveFovRH_NO_docstr, "perspectiveFovRH_NO(fov: float, width: float, height: float, near: float, far: float)\n" " -> fmat4x4\n" " Builds a perspective projection matrix based on a field of view using right-handed\n" " coordinates. The nearand far clip planes correspond to z normalized device coordinates of\n" " `-1` and `+1` respectively. (OpenGL clip volume definition)" ); PyDoc_STRVAR(perspectiveFovRH_ZO_docstr, "perspectiveFovRH_ZO(fov: float, width: float, height: float, near: float, far: float)\n" " -> fmat4x4\n" " Builds a perspective projection matrix based on a field of view using right-handed\n" " coordinates. The nearand far clip planes correspond to z normalized device coordinates of\n" " `0` and `+1` respectively. (Direct3D clip volume definition)" ); PyDoc_STRVAR(tweakedInfinitePerspective_docstr, "tweakedInfinitePerspective(fovy: float, aspect: float, near: float) -> fmat4x4\n" " Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for\n" " graphics hardware that doesn't support depth clamping.\n" "tweakedInfinitePerspective(fovy: float, aspect: float, near: float, epsilon: float) -> fmat4x4\n" " Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for\n" " graphics hardware that doesn't support depth clamping." ); #define MATRIX_CLIP_SPACE_METHODS \ { "ortho", (PyCFunction)ortho_, METH_VARARGS, ortho_docstr }, \ { "orthoLH_ZO", (PyCFunction)orthoLH_ZO_, METH_VARARGS, orthoLH_ZO_docstr }, \ { "orthoLH_NO", (PyCFunction)orthoLH_NO_, METH_VARARGS, orthoLH_NO_docstr }, \ { "orthoRH_ZO", (PyCFunction)orthoRH_ZO_, METH_VARARGS, orthoRH_ZO_docstr }, \ { "orthoRH_NO", (PyCFunction)orthoRH_NO_, METH_VARARGS, orthoRH_NO_docstr }, \ { "orthoZO", (PyCFunction)orthoZO_, METH_VARARGS, orthoZO_docstr }, \ { "orthoNO", (PyCFunction)orthoNO_, METH_VARARGS, orthoNO_docstr }, \ { "orthoLH", (PyCFunction)orthoLH_, METH_VARARGS, orthoLH_docstr }, \ { "orthoRH", (PyCFunction)orthoRH_, METH_VARARGS, orthoRH_docstr }, \ { "frustum", (PyCFunction)frustum_, METH_VARARGS, frustum_docstr }, \ { "frustumLH_ZO", (PyCFunction)frustumLH_ZO_, METH_VARARGS, frustumLH_ZO_docstr }, \ { "frustumLH_NO", (PyCFunction)frustumLH_NO_, METH_VARARGS, frustumLH_NO_docstr }, \ { "frustumRH_ZO", (PyCFunction)frustumRH_ZO_, METH_VARARGS, frustumRH_ZO_docstr }, \ { "frustumRH_NO", (PyCFunction)frustumRH_NO_, METH_VARARGS, frustumRH_NO_docstr }, \ { "frustumZO", (PyCFunction)frustumZO_, METH_VARARGS, frustumZO_docstr }, \ { "frustumNO", (PyCFunction)frustumNO_, METH_VARARGS, frustumNO_docstr }, \ { "frustumLH", (PyCFunction)frustumLH_, METH_VARARGS, frustumLH_docstr }, \ { "frustumRH", (PyCFunction)frustumRH_, METH_VARARGS, frustumRH_docstr }, \ { "perspective", (PyCFunction)perspective_, METH_VARARGS, perspective_docstr }, \ { "perspectiveLH_ZO", (PyCFunction)perspectiveLH_ZO_, METH_VARARGS, perspectiveLH_ZO_docstr }, \ { "perspectiveLH_NO", (PyCFunction)perspectiveLH_NO_, METH_VARARGS, perspectiveLH_NO_docstr }, \ { "perspectiveRH_ZO", (PyCFunction)perspectiveRH_ZO_, METH_VARARGS, perspectiveRH_ZO_docstr }, \ { "perspectiveRH_NO", (PyCFunction)perspectiveRH_NO_, METH_VARARGS, perspectiveRH_NO_docstr }, \ { "perspectiveZO", (PyCFunction)perspectiveZO_, METH_VARARGS, perspectiveZO_docstr }, \ { "perspectiveNO", (PyCFunction)perspectiveNO_, METH_VARARGS, perspectiveNO_docstr }, \ { "perspectiveLH", (PyCFunction)perspectiveLH_, METH_VARARGS, perspectiveLH_docstr }, \ { "perspectiveRH", (PyCFunction)perspectiveRH_, METH_VARARGS, perspectiveRH_docstr }, \ { "perspectiveFov", (PyCFunction)perspectiveFov_, METH_VARARGS, perspectiveFov_docstr }, \ { "perspectiveFovLH_ZO", (PyCFunction)perspectiveFovLH_ZO_, METH_VARARGS, perspectiveFovLH_ZO_docstr }, \ { "perspectiveFovLH_NO", (PyCFunction)perspectiveFovLH_NO_, METH_VARARGS, perspectiveFovLH_NO_docstr }, \ { "perspectiveFovRH_ZO", (PyCFunction)perspectiveFovRH_ZO_, METH_VARARGS, perspectiveFovRH_ZO_docstr }, \ { "perspectiveFovRH_NO", (PyCFunction)perspectiveFovRH_NO_, METH_VARARGS, perspectiveFovRH_NO_docstr }, \ { "perspectiveFovZO", (PyCFunction)perspectiveFovZO_, METH_VARARGS, perspectiveFovZO_docstr }, \ { "perspectiveFovNO", (PyCFunction)perspectiveFovNO_, METH_VARARGS, perspectiveFovNO_docstr }, \ { "perspectiveFovLH", (PyCFunction)perspectiveFovLH_, METH_VARARGS, perspectiveFovLH_docstr }, \ { "perspectiveFovRH", (PyCFunction)perspectiveFovRH_, METH_VARARGS, perspectiveFovRH_docstr }, \ { "infinitePerspective", (PyCFunction)infinitePerspective_, METH_VARARGS, infinitePerspective_docstr }, \ { "infinitePerspectiveRH", (PyCFunction)infinitePerspectiveRH_, METH_VARARGS, infinitePerspectiveRH_docstr }, \ { "infinitePerspectiveLH", (PyCFunction)infinitePerspectiveLH_, METH_VARARGS, infinitePerspectiveLH_docstr }, \ { "tweakedInfinitePerspective", (PyCFunction)tweakedInfinitePerspective_, METH_VARARGS, tweakedInfinitePerspective_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/stable_extensions/matrix_inverse.h000066400000000000000000000043711511156275200302650ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" static PyObject* affineInverse_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_MAT | PyGLM_SHAPE_3x3 | PyGLM_SHAPE_4x4 | PyGLM_DT_FD); if (PyGLM_Mat_PTI_Check0(3, 3, float, arg)) { return pack(glm::affineInverse(PyGLM_Mat_PTI_Get0(3, 3, float, arg))); } if (PyGLM_Mat_PTI_Check0(3, 3, double, arg)) { return pack(glm::affineInverse(PyGLM_Mat_PTI_Get0(3, 3, double, arg))); } if (PyGLM_Mat_PTI_Check0(4, 4, float, arg)) { return pack(glm::affineInverse(PyGLM_Mat_PTI_Get0(4, 4, float, arg))); } if (PyGLM_Mat_PTI_Check0(4, 4, double, arg)) { return pack(glm::affineInverse(PyGLM_Mat_PTI_Get0(4, 4, double, arg))); } PyGLM_TYPEERROR_O("invalid argument type for affineInverse(): ", arg); return NULL; } static PyObject* inverseTranspose_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_MAT | PyGLM_SHAPE_SQUARE | PyGLM_DT_FD); if (PyGLM_Mat_PTI_Check0(2, 2, float, arg)) { return pack(glm::inverseTranspose(PyGLM_Mat_PTI_Get0(2, 2, float, arg))); } if (PyGLM_Mat_PTI_Check0(2, 2, double, arg)) { return pack(glm::inverseTranspose(PyGLM_Mat_PTI_Get0(2, 2, double, arg))); } if (PyGLM_Mat_PTI_Check0(3, 3, float, arg)) { return pack(glm::inverseTranspose(PyGLM_Mat_PTI_Get0(3, 3, float, arg))); } if (PyGLM_Mat_PTI_Check0(3, 3, double, arg)) { return pack(glm::inverseTranspose(PyGLM_Mat_PTI_Get0(3, 3, double, arg))); } if (PyGLM_Mat_PTI_Check0(4, 4, float, arg)) { return pack(glm::inverseTranspose(PyGLM_Mat_PTI_Get0(4, 4, float, arg))); } if (PyGLM_Mat_PTI_Check0(4, 4, double, arg)) { return pack(glm::inverseTranspose(PyGLM_Mat_PTI_Get0(4, 4, double, arg))); } PyGLM_TYPEERROR_O("invalid argument type for inverseTranspose(): ", arg); return NULL; } PyDoc_STRVAR(affineInverse_docstr, "affineInverse(m: matSxS) -> matSxS\n" " Fast matrix inverse for affine matrix." ); PyDoc_STRVAR(inverseTranspose_docstr, "inverseTranspose(m: matSxS) -> matSxS\n" " Compute the inverse transpose of a matrix." ); #define MATRIX_INVERSE_METHODS \ { "affineInverse", (PyCFunction)affineInverse_, METH_O, affineInverse_docstr }, \ { "inverseTranspose", (PyCFunction)inverseTranspose_, METH_O, inverseTranspose_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/stable_extensions/matrix_projection.h000066400000000000000000000100131511156275200307540ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" #include "../function_generator_macros.h" PyGLM_MAKE_GLM_FUNC_V3M4M4V4__tfF(project) PyGLM_MAKE_GLM_FUNC_V3M4M4V4__tfF(projectZO) PyGLM_MAKE_GLM_FUNC_V3M4M4V4__tfF(projectNO) PyGLM_MAKE_GLM_FUNC_V3M4M4V4__tfF(unProject) PyGLM_MAKE_GLM_FUNC_V3M4M4V4__tfF(unProjectZO) PyGLM_MAKE_GLM_FUNC_V3M4M4V4__tfF(unProjectNO) static PyObject* pickMatrix_(PyObject*, PyObject* args) { PyObject* arg1, * arg2, * arg3; PyGLM_Arg_Unpack_3O(args, "pickMatrix", arg1, arg2, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FD); PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2) && PyGLM_Vec_PTI_Check2(4, float, arg3)) { PyGLM_Vec_PTI_Assign0(2, float); PyGLM_Vec_PTI_Assign1(2, float); PyGLM_Vec_PTI_Assign2(4, float); if (!(o2.x > 0.0f && o2.y > 0.0f)) { PyErr_SetString(PyExc_ValueError, "delta has to be greater than 0 for pickMatrix()"); return NULL; } return pack(glm::pickMatrix(o, o2, o3)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2) && PyGLM_Vec_PTI_Check2(4, double, arg3)) { PyGLM_Vec_PTI_Assign0(2, double); PyGLM_Vec_PTI_Assign1(2, double); PyGLM_Vec_PTI_Assign2(4, double); if (!(o2.x > 0.0 && o2.y > 0.0)) { PyErr_SetString(PyExc_ValueError, "delta has to be greater than 0 for pickMatrix()"); return NULL; } return pack(glm::pickMatrix(o, o2, o3)); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for pickMatrix()"); return NULL; } PyDoc_STRVAR(pickMatrix_docstr, "pickMatrix(center: vec2, delta: vec2, viewport: vec4) -> mat4\n" " Define a picking region." ); PyDoc_STRVAR(project_docstr, "project(obj: vec3, model: mat4, proj: mat4, viewport: vec4) -> vec3\n" " See projectNO()." ); PyDoc_STRVAR(projectNO_docstr, "projectNO(obj: vec3, model: mat4, proj: mat4, viewport: vec4) -> vec3\n" " Map the specified object coordinates `(obj.x, obj.y, obj.z)` into window coordinates.\n" " The near and far clip planes correspond to z normalized device coordinates of `-1` and `+1`\n" " respectively. (OpenGL clip volume definition)" ); PyDoc_STRVAR(projectZO_docstr, "projectZO(obj: vec3, model: mat4, proj: mat4, viewport: vec4) -> vec3\n" " Map the specified object coordinates `(obj.x, obj.y, obj.z)` into window coordinates.\n" " The nearand far clip planes correspond to z normalized device coordinates of `0` and `+1`\n" " respectively. (Direct3D clip volume definition)" ); PyDoc_STRVAR(unProject_docstr, "unProject(win: vec3, model: mat4, proj: mat4, viewport: vec4) -> vec3\n" " See unProjectNO()." ); PyDoc_STRVAR(unProjectNO_docstr, "unProjectNO(win: vec3, model: mat4, proj: mat4, viewport: vec4) -> vec3\n" " Map the specified window coordinates `(win.x, win.y, win.z)` into object coordinates.\n" " The nearand far clip planes correspond to z normalized device coordinates of `-1` and `+1`\n" " respectively. (OpenGL clip volume definition)" ); PyDoc_STRVAR(unProjectZO_docstr, "unProjectZO(win: vec3, model: mat4, proj: mat4, viewport: vec4) -> vec3\n" " Map the specified window coordinates `(win.x, win.y, win.z)` into object coordinates.\n" " The nearand far clip planes correspond to z normalized device coordinates of `0` and `+1`\n" " respectively. (Direct3D clip volume definition)" ); #define MATRIX_PROJECTION_METHODS \ { "project", (PyCFunction)project_, METH_VARARGS, project_docstr }, \ { "projectNO", (PyCFunction)projectNO_, METH_VARARGS, projectNO_docstr }, \ { "projectZO", (PyCFunction)projectZO_, METH_VARARGS, projectZO_docstr }, \ { "unProject", (PyCFunction)unProject_, METH_VARARGS, unProject_docstr }, \ { "unProjectNO", (PyCFunction)unProjectNO_, METH_VARARGS, unProjectNO_docstr }, \ { "unProjectZO", (PyCFunction)unProjectZO_, METH_VARARGS, unProjectZO_docstr }, \ { "pickMatrix", (PyCFunction)pickMatrix_, METH_VARARGS, pickMatrix_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/stable_extensions/matrix_transform.h000066400000000000000000000453511511156275200306300ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" #include "../function_generator_macros.h" static PyObject* identity_(PyObject*, PyObject* arg) { if (!PyType_Check(arg)) { PyGLM_TYPEERROR_O("identity() requires a PyGLM matrix type as it's argument, not ", arg); return NULL; } if (arg == (PyObject*)&hfmat2x2Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&hdmat2x2Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&himat2x2Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&humat2x2Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&hfmat2x3Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&hdmat2x3Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&himat2x3Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&humat2x3Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&hfmat2x4Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&hdmat2x4Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&himat2x4Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&humat2x4Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&hfmat3x2Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&hdmat3x2Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&himat3x2Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&humat3x2Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&hfmat3x3Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&hdmat3x3Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&himat3x3Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&humat3x3Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&hfmat3x4Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&hdmat3x4Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&himat3x4Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&humat3x4Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&hfmat4x2Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&hdmat4x2Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&himat4x2Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&humat4x2Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&hfmat4x3Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&hdmat4x3Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&himat4x3Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&humat4x3Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&hfmat4x4Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&hdmat4x4Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&himat4x4Type) { return pack(glm::identity >()); } if (arg == (PyObject*)&humat4x4Type) { return pack(glm::identity >()); } PyErr_Format(PyExc_TypeError, "identity() requires a PyGLM matrix type as it's argument, not '%s'", ((PyTypeObject*)arg)->tp_name); return NULL; } static PyObject* translate_(PyObject*, PyObject* args) { PyObject *arg1, *arg2 = NULL; if (!PyArg_UnpackTuple(args, "translate", 1, 2, &arg1, &arg2)) return NULL; if (arg2 == NULL) { PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_DT_NORMAL); if (PyGLM_Vec_PTI_Check0(3, float, arg1)) { return pack(glm::translate(glm::mat<4, 4, float>(1), PyGLM_Vec_PTI_Get0(3, float, arg1))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1)) { return pack(glm::translate(glm::mat<4, 4, double>(1), PyGLM_Vec_PTI_Get0(3, double, arg1))); } if (PyGLM_Vec_PTI_Check0(3, int32, arg1)) { return pack(glm::translate(glm::mat<4, 4, int32>(1), PyGLM_Vec_PTI_Get0(3, int32, arg1))); } if (PyGLM_Vec_PTI_Check0(3, uint32, arg1)) { return pack(glm::translate(glm::mat<4, 4, uint32>(1), PyGLM_Vec_PTI_Get0(3, uint32, arg1))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1)) { return pack(glm::translate(glm::mat<3, 3, float>(1), PyGLM_Vec_PTI_Get0(2, float, arg1))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1)) { return pack(glm::translate(glm::mat<3, 3, double>(1), PyGLM_Vec_PTI_Get0(2, double, arg1))); } if (PyGLM_Vec_PTI_Check0(2, int32, arg1)) { return pack(glm::translate(glm::mat<3, 3, int32>(1), PyGLM_Vec_PTI_Get0(2, int32, arg1))); } if (PyGLM_Vec_PTI_Check0(2, uint32, arg1)) { return pack(glm::translate(glm::mat<3, 3, uint32>(1), PyGLM_Vec_PTI_Get0(2, uint32, arg1))); } PyGLM_TYPEERROR_O("invalid argument type for translate(): ", arg1); } else { PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_3x3 | PyGLM_SHAPE_4x4 | PyGLM_DT_NORMAL); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_DT_NORMAL); if (PyGLM_Mat_PTI_Check0(4, 4, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { return pack(glm::translate(PyGLM_Mat_PTI_Get0(4, 4, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2))); } if (PyGLM_Mat_PTI_Check0(4, 4, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { return pack(glm::translate(PyGLM_Mat_PTI_Get0(4, 4, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2))); } if (PyGLM_Mat_PTI_Check0(4, 4, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2)) { return pack(glm::translate(PyGLM_Mat_PTI_Get0(4, 4, int, arg1), PyGLM_Vec_PTI_Get1(3, int, arg2))); } if (PyGLM_Mat_PTI_Check0(4, 4, uint32, arg1) && PyGLM_Vec_PTI_Check1(3, uint32, arg2)) { return pack(glm::translate(PyGLM_Mat_PTI_Get0(4, 4, uint32, arg1), PyGLM_Vec_PTI_Get1(3, uint32, arg2))); } if (PyGLM_Mat_PTI_Check0(3, 3, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { return pack(glm::translate(PyGLM_Mat_PTI_Get0(3, 3, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2))); } if (PyGLM_Mat_PTI_Check0(3, 3, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { return pack(glm::translate(PyGLM_Mat_PTI_Get0(3, 3, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2))); } PyGLM_TYPEERROR_2O("invalid argument types for translate(): ", arg1, arg2); } return NULL; } static PyObject* rotate_(PyObject*, PyObject* args) { PyObject *arg1, *arg2 = NULL, *arg3 = NULL; if (!PyArg_UnpackTuple(args, "rotate", 1, 3, &arg1, &arg2, &arg3)) return NULL; if (arg2 == NULL) { if (PyGLM_Number_Check(arg1)) { return pack(glm::rotate(glm::mat3(1), PyGLM_Number_FromPyObject(arg1))); } } else if (arg3 == NULL) { if (PyGLM_Number_Check(arg1)) { PyGLM_PTI_Init0(arg2, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(3, float, arg2)) { return pack(glm::rotate(glm::mat<4, 4, float>(1), PyGLM_Number_FromPyObject(arg1), PyGLM_Vec_PTI_Get0(3, float, arg2))); } if (PyGLM_Vec_PTI_Check0(3, double, arg2)) { return pack(glm::rotate(glm::mat<4, 4, double>(1), PyGLM_Number_FromPyObject(arg1), PyGLM_Vec_PTI_Get0(3, double, arg2))); } } else if (PyGLM_Number_Check(arg2)) { PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_SHAPE_2 | PyGLM_SHAPE_3x3 | PyGLM_DT_FD); if (PyGLM_Mat_PTI_Check0(3, 3, float, arg1)) { glm::mat<3, 3, float> m = PyGLM_Mat_PTI_Get0(3, 3, float, arg1); return pack(glm::rotate(m, PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Mat_PTI_Check0(3, 3, double, arg1)) { glm::mat<3, 3, double> m = PyGLM_Mat_PTI_Get0(3, 3, double, arg1); return pack(glm::rotate(m, PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1)) { return pack(glm::rotate(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Number_FromPyObject(arg2))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1)) { return pack(glm::rotate(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Number_FromPyObject(arg2))); } } } else if (PyGLM_Number_Check(arg2)) { PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_T_MAT | PyGLM_T_QUA | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_SHAPE_4x4 | PyGLM_DT_FD); PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD); if (PyGLM_Mat_PTI_Check0(4, 4, float, arg1) && PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::mat4x4 m = PyGLM_Mat_PTI_Get0(4, 4, float, arg1); glm::vec3 axis = PyGLM_Vec_PTI_Get2(3, float, arg3); return pack(glm::rotate(m, PyGLM_Number_FromPyObject(arg2), axis)); } if (PyGLM_Mat_PTI_Check0(4, 4, double, arg1) && PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::dmat4x4 m = PyGLM_Mat_PTI_Get0(4, 4, double, arg1); glm::dvec3 axis = PyGLM_Vec_PTI_Get2(3, double, arg3); return pack(glm::rotate(m, PyGLM_Number_FromPyObject(arg2), axis)); } if (PyGLM_Qua_PTI_Check0(float, arg1) && PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::quat q = PyGLM_Qua_PTI_Get0(float, arg1); glm::vec3 axis = PyGLM_Vec_PTI_Get2(3, float, arg3); return pack_qua(glm::rotate(q, PyGLM_Number_FromPyObject(arg2), axis)); } if (PyGLM_Qua_PTI_Check0(double, arg1) && PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::dquat q = PyGLM_Qua_PTI_Get0(float, arg1); glm::dvec3 axis = PyGLM_Vec_PTI_Get2(3, double, arg3); return pack_qua(glm::rotate(q, PyGLM_Number_FromPyObject(arg2), axis)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check2(3, float, arg3)) { return pack(glm::rotate(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Vec_PTI_Get2(3, float, arg3))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check2(3, double, arg3)) { return pack(glm::rotate(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Vec_PTI_Get2(3, double, arg3))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check2(3, float, arg3)) { return pack(glm::rotate(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Vec_PTI_Get2(3, float, arg3))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check2(3, double, arg3)) { return pack(glm::rotate(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Vec_PTI_Get2(3, double, arg3))); } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for rotate()"); return NULL; } static PyObject* rotate_slow_(PyObject*, PyObject* args) { PyObject *arg1, *arg2, *arg3; PyGLM_Arg_Unpack_3O(args, "rotate_slow", arg1, arg2, arg3); PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_4x4 | PyGLM_DT_FD); PyGLM_PTI_Init2(arg3, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD); if (PyGLM_Number_Check(arg2)) { if (PyGLM_Mat_PTI_Check0(4, 4, float, arg1) && PyGLM_Vec_PTI_Check2(3, float, arg3)) { glm::mat<4, 4, float> m = PyGLM_Mat_PTI_Get0(4, 4, float, arg1); glm::vec<3, float> axis = PyGLM_Vec_PTI_Get2(3, float, arg3); return pack(glm::rotate_slow(m, PyGLM_Number_FromPyObject(arg2), axis)); } if (PyGLM_Mat_PTI_Check0(4, 4, double, arg1) && PyGLM_Vec_PTI_Check2(3, double, arg3)) { glm::mat<4, 4, double> m = PyGLM_Mat_PTI_Get0(4, 4, double, arg1); glm::vec<3, double> axis = PyGLM_Vec_PTI_Get2(3, double, arg3); return pack(glm::rotate_slow(m, PyGLM_Number_FromPyObject(arg2), axis)); } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for rotate_slow()"); return NULL; } static PyObject* scale_(PyObject*, PyObject* args) { PyObject* arg1, * arg2 = NULL; if (!PyArg_UnpackTuple(args, "scale", 1, 2, &arg1, &arg2)) return NULL; if (arg2 == NULL) { PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_DT_NORMAL); if (PyGLM_Vec_PTI_Check0(3, float, arg1)) { return pack(glm::scale(glm::mat<4, 4, float>(1), PyGLM_Vec_PTI_Get0(3, float, arg1))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1)) { return pack(glm::scale(glm::mat<4, 4, double>(1), PyGLM_Vec_PTI_Get0(3, double, arg1))); } if (PyGLM_Vec_PTI_Check0(3, int32, arg1)) { return pack(glm::scale(glm::mat<4, 4, int32>(1), PyGLM_Vec_PTI_Get0(3, int32, arg1))); } if (PyGLM_Vec_PTI_Check0(3, uint32, arg1)) { return pack(glm::scale(glm::mat<4, 4, uint32>(1), PyGLM_Vec_PTI_Get0(3, uint32, arg1))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1)) { return pack(glm::scale(glm::mat<3, 3, float>(1), PyGLM_Vec_PTI_Get0(2, float, arg1))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1)) { return pack(glm::scale(glm::mat<3, 3, double>(1), PyGLM_Vec_PTI_Get0(2, double, arg1))); } if (PyGLM_Vec_PTI_Check0(2, int32, arg1)) { return pack(glm::scale(glm::mat<3, 3, int32>(1), PyGLM_Vec_PTI_Get0(2, int32, arg1))); } if (PyGLM_Vec_PTI_Check0(2, uint32, arg1)) { return pack(glm::scale(glm::mat<3, 3, uint32>(1), PyGLM_Vec_PTI_Get0(2, uint32, arg1))); } PyGLM_TYPEERROR_O("invalid argument type(s) for scale(): ", arg1); return NULL; } else { PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_3x3 | PyGLM_SHAPE_4x4 | PyGLM_DT_NORMAL); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_DT_NORMAL); if (PyGLM_Mat_PTI_Check0(4, 4, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { return pack(glm::scale(PyGLM_Mat_PTI_Get0(4, 4, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2))); } if (PyGLM_Mat_PTI_Check0(4, 4, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { return pack(glm::scale(PyGLM_Mat_PTI_Get0(4, 4, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2))); } if (PyGLM_Mat_PTI_Check0(4, 4, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2)) { return pack(glm::scale(PyGLM_Mat_PTI_Get0(4, 4, int, arg1), PyGLM_Vec_PTI_Get1(3, int, arg2))); } if (PyGLM_Mat_PTI_Check0(4, 4, uint32, arg1) && PyGLM_Vec_PTI_Check1(3, uint32, arg2)) { return pack(glm::scale(PyGLM_Mat_PTI_Get0(4, 4, uint32, arg1), PyGLM_Vec_PTI_Get1(3, uint32, arg2))); } if (PyGLM_Mat_PTI_Check0(3, 3, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { return pack(glm::scale(PyGLM_Mat_PTI_Get0(3, 3, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2))); } if (PyGLM_Mat_PTI_Check0(3, 3, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { return pack(glm::scale(PyGLM_Mat_PTI_Get0(3, 3, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2))); } PyGLM_TYPEERROR_2O("invalid argument type(s) for scale(): ", arg1, arg2); return NULL; } } PyGLM_MAKE_GLM_FUNC_M4V3__tfF(scale_slow) PyGLM_MAKE_GLM_FUNC_V3V3V3__tfF(lookAt) PyGLM_MAKE_GLM_FUNC_V3V3V3__tfF(lookAtLH) PyGLM_MAKE_GLM_FUNC_V3V3V3__tfF(lookAtRH) PyDoc_STRVAR(identity_docstr, "identity(matrix_type: type) -> matNxM\n" " Builds an identity matrix." ); PyDoc_STRVAR(lookAt_docstr, "lookAt(eye: vec3, center: vec3, up: vec3) -> mat4x4\n" " Build a look at view matrix based on the default handedness." ); PyDoc_STRVAR(lookAtLH_docstr, "lookAtLH(eye: vec3, center: vec3, up: vec3) -> mat4x4\n" " Build a left handed look at view matrix." ); PyDoc_STRVAR(lookAtRH_docstr, "lookAtRH(eye: vec3, center: vec3, up: vec3) -> mat4x4\n" " Build a right handed look at view matrix." ); PyDoc_STRVAR(rotate_docstr, "rotate(angle: number, axis: vec3) -> mat4x4\n" " Builds a rotation 4 x 4 matrix created from an axis vector and an angle.\n" "rotate(angle: number) -> mat3x3\n" " Builds a rotation 3 x 3 matrix created from an angle.\n" "rotate(m: mat4x4, angle: number, axis: vec3) -> mat4x4\n" " Builds a rotation 4 x 4 matrix created from an axis vector and an angle.\n" " `m` is the input matrix multiplied by this translation matrix\n" "rotate(m: mat3x3, angle: number) -> mat3x3\n" " Builds a rotation 3 x 3 matrix created from an angle.\n" " `m` is the input matrix multiplied by this translation matrix\n" "rotate(v: vec2, angle: float) -> vec2\n" " Rotate a two dimensional vector.\n" "rotate(v: vec3, angle: float, normal: vec3) -> vec3\n" " Rotate a three dimensional vector around an axis.\n" "rotate(v: vec4, angle: float, normal: vec3) -> vec4\n" " Rotate a four dimensional vector around an axis.\n" "rotate(q: quat, angle: float, axis: vec3) -> quat\n" " Rotates a quaternion from a vector of 3 components axis and an angle." ); PyDoc_STRVAR(scale_docstr, "scale(v: vec3) -> mat4x4\n" " Builds a scale 4 x 4 matrix created from 3 scalars.\n" "scale(v: vec2) -> mat3x3\n" " Builds a scale 3 x 3 matrix created from a vector of 2 components.\n" "scale(m: mat4x4, v: vec3) -> mat4x4\n" " Builds a scale 4 x 4 matrix created from 3 scalars.\n" " `m` is the input matrix multiplied by this translation matrix\n" "scale(m: mat3x3, v: vec2) -> mat3x3\n" " Builds a scale 3 x 3 matrix created from a vector of 2 components.\n" " `m` is the input matrix multiplied by this translation matrix" ); PyDoc_STRVAR(translate_docstr, "translate(v: vec3) -> mat4x4\n" " Builds a translation 4 x 4 matrix created from a vector of 3 components.\n" "translate(v: vec2) -> mat3x3\n" " Builds a translation 3 x 3 matrix created from a vector of 2 components.\n" "translate(m: mat4x4, v: vec3) -> mat4x4\n" " Builds a translation 4 x 4 matrix created from a vector of 3 components.\n" " `m` is the input matrix multiplied by this translation matrix\n" "translate(m: mat3x3, v: vec2) -> mat3x3\n" " Builds a translation 3 x 3 matrix created from a vector of 2 components.\n" " `m` is the input matrix multiplied by this translation matrix" ); PyDoc_STRVAR(rotate_slow_docstr, "rotate_slow(m: mat4x4, angle: number, axis: vec3) -> mat4x4\n" " Builds a rotation 4 x 4 matrix created from an axis vector and an angle." ); PyDoc_STRVAR(scale_slow_docstr, "scale_slow(m: mat4x4, v: vec3) -> mat4x4\n" " Builds a scale 4 x 4 matrix created from 3 scalars." ); #define MATRIX_TRANSFORM_METHODS \ { "identity", (PyCFunction)identity_, METH_O, identity_docstr }, \ { "translate", (PyCFunction)translate_, METH_VARARGS, translate_docstr }, \ { "rotate", (PyCFunction)rotate_, METH_VARARGS, rotate_docstr }, \ { "rotate_slow", (PyCFunction)rotate_slow_, METH_VARARGS, rotate_slow_docstr }, \ { "scale", (PyCFunction)scale_, METH_VARARGS, scale_docstr }, \ { "scale_slow", (PyCFunction)scale_slow_, METH_VARARGS, scale_slow_docstr }, \ { "lookAt", (PyCFunction)lookAt_, METH_VARARGS, lookAt_docstr }, \ { "lookAtRH", (PyCFunction)lookAtRH_, METH_VARARGS, lookAtRH_docstr }, \ { "lookAtLH", (PyCFunction)lookAtLH_, METH_VARARGS, lookAtLH_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/stable_extensions/noise.h000066400000000000000000000076631511156275200263520ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" static PyObject* perlin_(PyObject*, PyObject* args) { PyObject *arg1, *arg2 = NULL; if (!PyArg_UnpackTuple(args, "perlin", 1, 2, &arg1, &arg2)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for perlin()"); return NULL; } if (arg2 != NULL) { PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { PyGLM_Vec_PTI_Assign0(2, float); PyGLM_Vec_PTI_Assign1(2, float); return pack(glm::perlin(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { PyGLM_Vec_PTI_Assign0(3, float); PyGLM_Vec_PTI_Assign1(3, float); return pack(glm::perlin(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { PyGLM_Vec_PTI_Assign0(4, float); PyGLM_Vec_PTI_Assign1(4, float); return pack(glm::perlin(o, o2)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { PyGLM_Vec_PTI_Assign0(2, double); PyGLM_Vec_PTI_Assign1(2, double); return pack(glm::perlin(o, o2)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { PyGLM_Vec_PTI_Assign0(3, double); PyGLM_Vec_PTI_Assign1(3, double); return pack(glm::perlin(o, o2)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { PyGLM_Vec_PTI_Assign0(4, double); PyGLM_Vec_PTI_Assign1(4, double); return pack(glm::perlin(o, o2)); } } else { PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(2, float, arg1)) { PyGLM_Vec_PTI_Assign0(2, float); return pack(glm::perlin(o)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1)) { PyGLM_Vec_PTI_Assign0(3, float); return pack(glm::perlin(o)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1)) { PyGLM_Vec_PTI_Assign0(4, float); return pack(glm::perlin(o)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1)) { PyGLM_Vec_PTI_Assign0(2, double); return pack(glm::perlin(o)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1)) { PyGLM_Vec_PTI_Assign0(3, double); return pack(glm::perlin(o)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1)) { PyGLM_Vec_PTI_Assign0(4, double); return pack(glm::perlin(o)); } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for perlin()"); return NULL; } static PyObject* simplex_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(2, float, arg)) { PyGLM_Vec_PTI_Assign(2, float); return pack(glm::simplex(o)); } if (PyGLM_Vec_PTI_Check0(3, float, arg)) { PyGLM_Vec_PTI_Assign(3, float); return pack(glm::simplex(o)); } if (PyGLM_Vec_PTI_Check0(4, float, arg)) { PyGLM_Vec_PTI_Assign(4, float); return pack(glm::simplex(o)); } if (PyGLM_Vec_PTI_Check0(2, double, arg)) { PyGLM_Vec_PTI_Assign(2, double); return pack(glm::simplex(o)); } if (PyGLM_Vec_PTI_Check0(3, double, arg)) { PyGLM_Vec_PTI_Assign(3, double); return pack(glm::simplex(o)); } if (PyGLM_Vec_PTI_Check0(4, double, arg)) { PyGLM_Vec_PTI_Assign(4, double); return pack(glm::simplex(o)); } PyGLM_TYPEERROR_O("invalid argument type for simplex(): ", arg); return NULL; } PyDoc_STRVAR(perlin_docstr, "perlin(p: vecN) -> float\n" " Classic perlin noise.\n" "perlin(p: vecN, rep: vecN) -> float\n" " Periodic perlin noise." ); PyDoc_STRVAR(simplex_docstr, "simplex(p: vecN) -> float\n" " Simplex noise." ); #define NOISE_METHODS \ { "perlin", (PyCFunction)perlin_, METH_VARARGS, perlin_docstr }, \ { "simplex", (PyCFunction)simplex_, METH_O, simplex_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/stable_extensions/packing.h000066400000000000000000002162551511156275200266500ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" static PyObject* packHalf1x16_(PyObject*, PyObject* arg) { if (PyFloat_Check(arg)) { return PyLong_FromUnsignedLong((unsigned long)glm::packHalf1x16(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for packHalf1x16(): ", arg); return NULL; } static PyObject* packHalf4x16_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(4, float, arg)) { PyGLM_Vec_PTI_Assign(4, float); return PyLong_FromUnsignedLongLong(glm::packHalf4x16(o)); } PyGLM_TYPEERROR_O("invalid argument type for packHalf4x16(): ", arg); return NULL; } static PyObject* packI3x10_1x2_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_INT); if (PyGLM_Vec_PTI_Check0(4, int, arg)) { PyGLM_Vec_PTI_Assign(4, int); return PyLong_FromUnsignedLong((unsigned long)glm::packI3x10_1x2(o)); } PyGLM_TYPEERROR_O("invalid argument type for packI3x10_1x2(): ", arg); return NULL; } static PyObject* packU3x10_1x2_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_UINT); if (PyGLM_Vec_PTI_Check0(4, uint32, arg)) { PyGLM_Vec_PTI_Assign(4, uint32); return PyLong_FromUnsignedLong((unsigned long)glm::packU3x10_1x2(o)); } PyGLM_TYPEERROR_O("invalid argument type for packU3x10_1x2(): ", arg); return NULL; } static PyObject* packF2x11_1x10_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(3, float, arg)) { PyGLM_Vec_PTI_Assign(3, float); return PyLong_FromUnsignedLong((unsigned long)glm::packF2x11_1x10(o)); } PyGLM_TYPEERROR_O("invalid argument type for packF2x11_1x10(): ", arg); return NULL; } static PyObject* packF3x9_E1x5_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(3, float, arg)) { PyGLM_Vec_PTI_Assign(3, float); return PyLong_FromUnsignedLong((unsigned long)glm::packF3x9_E1x5(o)); } PyGLM_TYPEERROR_O("invalid argument type for packF3x9_E1x5(): ", arg); return NULL; } static PyObject* packRGBM_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(3, float, arg)) { PyGLM_Vec_PTI_Assign(3, float); return pack(glm::packRGBM(o)); } if (PyGLM_Vec_PTI_Check0(3, double, arg)) { PyGLM_Vec_PTI_Assign(3, double); return pack(glm::packRGBM(o)); } PyGLM_TYPEERROR_O("invalid argument type for packRGBM(): ", arg); return NULL; } static PyObject* packHalf_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(1, float, arg)) { PyGLM_Vec_PTI_Assign(1, float); return pack(glm::packHalf(o)); } if (PyGLM_Vec_PTI_Check0(2, float, arg)) { PyGLM_Vec_PTI_Assign(2, float); return pack(glm::packHalf(o)); } if (PyGLM_Vec_PTI_Check0(3, float, arg)) { PyGLM_Vec_PTI_Assign(3, float); return pack(glm::packHalf(o)); } if (PyGLM_Vec_PTI_Check0(4, float, arg)) { PyGLM_Vec_PTI_Assign(4, float); return pack(glm::packHalf(o)); } PyGLM_TYPEERROR_O("invalid argument type for packHalf(): ", arg); return NULL; } static PyObject* packInt2x8_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_INT8); if (PyGLM_Vec_PTI_Check0(2, glm::i8, arg)) { PyGLM_Vec_PTI_Assign(2, int8); return PyLong_FromLong((long)glm::packInt2x8(o)); } PyGLM_TYPEERROR_O("invalid argument type for packInt2x8(): ", arg); return NULL; } static PyObject* packInt4x8_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_INT8); if (PyGLM_Vec_PTI_Check0(4, glm::i8, arg)) { PyGLM_Vec_PTI_Assign(4, int8); return PyLong_FromLong((long)glm::packInt4x8(o)); } PyGLM_TYPEERROR_O("invalid argument type for packInt4x8(): ", arg); return NULL; } static PyObject* packInt2x16_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_INT16); if (PyGLM_Vec_PTI_Check0(2, glm::i16, arg)) { PyGLM_Vec_PTI_Assign(2, int16); return PyLong_FromLong((long)glm::packInt2x16(o)); } PyGLM_TYPEERROR_O("invalid argument type for packInt2x16(): ", arg); return NULL; } static PyObject* packInt4x16_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_INT16); if (PyGLM_Vec_PTI_Check0(4, glm::i16, arg)) { PyGLM_Vec_PTI_Assign(4, int16); return PyLong_FromLongLong(glm::packInt4x16(o)); } PyGLM_TYPEERROR_O("invalid argument type for packInt4x16(): ", arg); return NULL; } static PyObject* packInt2x32_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_INT); if (PyGLM_Vec_PTI_Check0(2, glm::i32, arg)) { PyGLM_Vec_PTI_Assign(2, int32); return PyLong_FromLongLong(glm::packInt2x32(o)); } PyGLM_TYPEERROR_O("invalid argument type for packInt2x32(): ", arg); return NULL; } static PyObject* packUint2x8_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_UINT8); if (PyGLM_Vec_PTI_Check0(2, glm::u8, arg)) { PyGLM_Vec_PTI_Assign(2, uint8); return PyLong_FromUnsignedLong((unsigned long)glm::packUint2x8(o)); } PyGLM_TYPEERROR_O("invalid argument type for packUint2x8(): ", arg); return NULL; } static PyObject* packUint4x8_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_UINT8); if (PyGLM_Vec_PTI_Check0(4, glm::u8, arg)) { PyGLM_Vec_PTI_Assign(4, uint8); return PyLong_FromUnsignedLong((unsigned long)glm::packUint4x8(o)); } PyGLM_TYPEERROR_O("invalid argument type for packUint4x8(): ", arg); return NULL; } static PyObject* packUint2x16_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_UINT16); if (PyGLM_Vec_PTI_Check0(2, glm::u16, arg)) { PyGLM_Vec_PTI_Assign(2, uint16); return PyLong_FromUnsignedLong((unsigned long)glm::packUint2x16(o)); } PyGLM_TYPEERROR_O("invalid argument type for packUint2x16(): ", arg); return NULL; } static PyObject* packUint4x16_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_UINT16); if (PyGLM_Vec_PTI_Check0(4, glm::u16, arg)) { PyGLM_Vec_PTI_Assign(4, uint16); return PyLong_FromUnsignedLongLong(glm::packUint4x16(o)); } PyGLM_TYPEERROR_O("invalid argument type for packUint4x16(): ", arg); return NULL; } static PyObject* packUint2x32_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_UINT); if (PyGLM_Vec_PTI_Check0(2, glm::u32, arg)) { PyGLM_Vec_PTI_Assign(2, uint32); return PyLong_FromUnsignedLongLong(glm::packUint2x32(o)); } PyGLM_TYPEERROR_O("invalid argument type for packUint2x32(): ", arg); return NULL; } static PyObject* packSnorm_(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "packSnorm", arg1, arg2); PyGLM_PTI_Init0(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg2)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg2); if (arg1 == ctypes_int8) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int16) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int32) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int64) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint8) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint16) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint32) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint64) return pack(glm::packSnorm(o)); } if (PyGLM_Vec_PTI_Check0(2, float, arg2)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg2); if (arg1 == ctypes_int8) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int16) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int32) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int64) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint8) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint16) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint32) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint64) return pack(glm::packSnorm(o)); } if (PyGLM_Vec_PTI_Check0(3, float, arg2)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg2); if (arg1 == ctypes_int8) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int16) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int32) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int64) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint8) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint16) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint32) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint64) return pack(glm::packSnorm(o)); } if (PyGLM_Vec_PTI_Check0(4, float, arg2)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg2); if (arg1 == ctypes_int8) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int16) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int32) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int64) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint8) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint16) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint32) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint64) return pack(glm::packSnorm(o)); } if (PyGLM_Vec_PTI_Check0(1, double, arg2)) { glm::vec<1, double> o = PyGLM_Vec_PTI_Get0(1, double, arg2); if (arg1 == ctypes_int8) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int16) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int32) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int64) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint8) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint16) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint32) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint64) return pack(glm::packSnorm(o)); } if (PyGLM_Vec_PTI_Check0(2, double, arg2)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg2); if (arg1 == ctypes_int8) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int16) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int32) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int64) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint8) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint16) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint32) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint64) return pack(glm::packSnorm(o)); } if (PyGLM_Vec_PTI_Check0(3, double, arg2)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg2); if (arg1 == ctypes_int8) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int16) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int32) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int64) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint8) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint16) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint32) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint64) return pack(glm::packSnorm(o)); } if (PyGLM_Vec_PTI_Check0(4, double, arg2)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg2); if (arg1 == ctypes_int8) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int16) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int32) return pack(glm::packSnorm(o)); if (arg1 == ctypes_int64) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint8) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint16) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint32) return pack(glm::packSnorm(o)); if (arg1 == ctypes_uint64) return pack(glm::packSnorm(o)); } PyGLM_TYPEERROR_2O("invalid argument type for packSnorm(): ", arg1, arg2); return NULL; } static PyObject* packSnorm1x8_(PyObject*, PyObject* arg) { if (PyFloat_Check(arg)) { return PyLong_FromUnsignedLong((unsigned long)glm::packSnorm1x8(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for packSnorm1x8(): ", arg); return NULL; } static PyObject* packSnorm2x8_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(2, float, arg)) { PyGLM_Vec_PTI_Assign(2, float); return PyLong_FromUnsignedLong((unsigned long)glm::packSnorm2x8(o)); } PyGLM_TYPEERROR_O("invalid argument type for packSnorm2x8(): ", arg); return NULL; } static PyObject* packSnorm1x16_(PyObject*, PyObject* arg) { if (PyFloat_Check(arg)) { return PyLong_FromUnsignedLong((unsigned long)glm::packSnorm1x16(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for packSnorm1x16(): ", arg); return NULL; } static PyObject* packSnorm4x16_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(4, float, arg)) { PyGLM_Vec_PTI_Assign(4, float); return PyLong_FromUnsignedLongLong(glm::packSnorm4x16(o)); } PyGLM_TYPEERROR_O("invalid argument type for packSnorm4x16(): ", arg); return NULL; } static PyObject* packSnorm3x10_1x2_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(4, float, arg)) { PyGLM_Vec_PTI_Assign(4, float); return PyLong_FromUnsignedLong(glm::packSnorm3x10_1x2(o)); } PyGLM_TYPEERROR_O("invalid argument type for packSnorm3x10_1x2(): ", arg); return NULL; } static PyObject* packUnorm_(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "packUnorm", arg1, arg2); PyGLM_PTI_Init0(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg2)) { glm::vec<1, float> o = PyGLM_Vec_PTI_Get0(1, float, arg2); if (arg1 == ctypes_uint8) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint16) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint32) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint64) return pack(glm::packUnorm(o)); } if (PyGLM_Vec_PTI_Check0(2, float, arg2)) { glm::vec<2, float> o = PyGLM_Vec_PTI_Get0(2, float, arg2); if (arg1 == ctypes_uint8) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint16) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint32) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint64) return pack(glm::packUnorm(o)); } if (PyGLM_Vec_PTI_Check0(3, float, arg2)) { glm::vec<3, float> o = PyGLM_Vec_PTI_Get0(3, float, arg2); if (arg1 == ctypes_uint8) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint16) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint32) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint64) return pack(glm::packUnorm(o)); } if (PyGLM_Vec_PTI_Check0(4, float, arg2)) { glm::vec<4, float> o = PyGLM_Vec_PTI_Get0(4, float, arg2); if (arg1 == ctypes_uint8) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint16) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint32) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint64) return pack(glm::packUnorm(o)); } if (PyGLM_Vec_PTI_Check0(1, double, arg2)) { glm::vec<1, double> o = PyGLM_Vec_PTI_Get0(1, double, arg2); if (arg1 == ctypes_uint8) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint16) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint32) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint64) return pack(glm::packUnorm(o)); } if (PyGLM_Vec_PTI_Check0(2, double, arg2)) { glm::vec<2, double> o = PyGLM_Vec_PTI_Get0(2, double, arg2); if (arg1 == ctypes_uint8) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint16) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint32) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint64) return pack(glm::packUnorm(o)); } if (PyGLM_Vec_PTI_Check0(3, double, arg2)) { glm::vec<3, double> o = PyGLM_Vec_PTI_Get0(3, double, arg2); if (arg1 == ctypes_uint8) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint16) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint32) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint64) return pack(glm::packUnorm(o)); } if (PyGLM_Vec_PTI_Check0(4, double, arg2)) { glm::vec<4, double> o = PyGLM_Vec_PTI_Get0(4, double, arg2); if (arg1 == ctypes_uint8) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint16) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint32) return pack(glm::packUnorm(o)); if (arg1 == ctypes_uint64) return pack(glm::packUnorm(o)); } PyGLM_TYPEERROR_2O("invalid argument type for packUnorm(): ", arg1, arg2); return NULL; } static PyObject* packUnorm2x4_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(2, float, arg)) { PyGLM_Vec_PTI_Assign(2, float); return PyLong_FromUnsignedLong((unsigned long)glm::packUnorm2x4(o)); } PyGLM_TYPEERROR_O("invalid argument type for packUnorm2x4(): ", arg); return NULL; } static PyObject* packUnorm4x4_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(4, float, arg)) { PyGLM_Vec_PTI_Assign(4, float); return PyLong_FromUnsignedLong((unsigned long)glm::packUnorm4x4(o)); } PyGLM_TYPEERROR_O("invalid argument type for packUnorm4x4(): ", arg); return NULL; } static PyObject* packUnorm1x8_(PyObject*, PyObject* arg) { if (PyFloat_Check(arg)) { return PyLong_FromUnsignedLong((unsigned long)glm::packUnorm1x8(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for packUnorm1x8(): ", arg); return NULL; } static PyObject* packUnorm2x8_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(2, float, arg)) { PyGLM_Vec_PTI_Assign(2, float); return PyLong_FromUnsignedLong((unsigned long)glm::packUnorm2x8(o)); } PyGLM_TYPEERROR_O("invalid argument type for packUnorm2x8(): ", arg); return NULL; } static PyObject* packUnorm1x16_(PyObject*, PyObject* arg) { if (PyFloat_Check(arg)) { return PyLong_FromUnsignedLong((unsigned long)glm::packUnorm1x16(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for packUnorm1x16(): ", arg); return NULL; } static PyObject* packUnorm4x16_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(4, float, arg)) { PyGLM_Vec_PTI_Assign(4, float); return PyLong_FromUnsignedLongLong(glm::packUnorm4x16(o)); } PyGLM_TYPEERROR_O("invalid argument type for packUnorm4x16(): ", arg); return NULL; } static PyObject* packUnorm3x10_1x2_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(4, float, arg)) { PyGLM_Vec_PTI_Assign(4, float); return PyLong_FromUnsignedLong(glm::packUnorm3x10_1x2(o)); } PyGLM_TYPEERROR_O("invalid argument type for packUnorm3x10_1x2(): ", arg); return NULL; } static PyObject* packUnorm1x5_1x6_1x5_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(3, float, arg)) { PyGLM_Vec_PTI_Assign(3, float); return PyLong_FromUnsignedLong((unsigned long)glm::packUnorm1x5_1x6_1x5(o)); } PyGLM_TYPEERROR_O("invalid argument type for packUnorm1x5_1x6_1x5(): ", arg); return NULL; } static PyObject* packUnorm3x5_1x1_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(4, float, arg)) { PyGLM_Vec_PTI_Assign(4, float); return PyLong_FromUnsignedLong((unsigned long)glm::packUnorm3x5_1x1(o)); } PyGLM_TYPEERROR_O("invalid argument type for packUnorm3x5_1x1(): ", arg); return NULL; } static PyObject* packUnorm2x3_1x2_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FLOAT); if (PyGLM_Vec_PTI_Check0(3, float, arg)) { PyGLM_Vec_PTI_Assign(3, float); return PyLong_FromUnsignedLong((unsigned long)glm::packUnorm2x3_1x2(o)); } PyGLM_TYPEERROR_O("invalid argument type for packUnorm2x3_1x2(): ", arg); return NULL; } static PyObject* unpackHalf1x16_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackHalf1x16(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackHalf1x16(): ", arg); return NULL; } static PyObject* unpackHalf4x16_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackHalf4x16(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackHalf4x16(): ", arg); return NULL; } static PyObject* unpackSnorm_(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "unpackSnorm", arg1, arg2); PyGLM_PTI_Init0(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_I); if (PyGLM_Vec_PTI_Check0(1, int8, arg2)) { glm::vec<1, int8> o = PyGLM_Vec_PTI_Get0(1, int8, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(2, int8, arg2)) { glm::vec<2, int8> o = PyGLM_Vec_PTI_Get0(2, int8, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(3, int8, arg2)) { glm::vec<3, int8> o = PyGLM_Vec_PTI_Get0(3, int8, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(4, int8, arg2)) { glm::vec<4, int8> o = PyGLM_Vec_PTI_Get0(4, int8, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(1, int16, arg2)) { glm::vec<1, int16> o = PyGLM_Vec_PTI_Get0(1, int16, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(2, int16, arg2)) { glm::vec<2, int16> o = PyGLM_Vec_PTI_Get0(2, int16, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(3, int16, arg2)) { glm::vec<3, int16> o = PyGLM_Vec_PTI_Get0(3, int16, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(4, int16, arg2)) { glm::vec<4, int16> o = PyGLM_Vec_PTI_Get0(4, int16, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(1, int32, arg2)) { glm::vec<1, int32> o = PyGLM_Vec_PTI_Get0(1, int32, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(2, int32, arg2)) { glm::vec<2, int32> o = PyGLM_Vec_PTI_Get0(2, int32, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(3, int32, arg2)) { glm::vec<3, int32> o = PyGLM_Vec_PTI_Get0(3, int32, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(4, int32, arg2)) { glm::vec<4, int32> o = PyGLM_Vec_PTI_Get0(4, int32, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(1, int64, arg2)) { glm::vec<1, int64> o = PyGLM_Vec_PTI_Get0(1, int64, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(2, int64, arg2)) { glm::vec<2, int64> o = PyGLM_Vec_PTI_Get0(2, int64, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(3, int64, arg2)) { glm::vec<3, int64> o = PyGLM_Vec_PTI_Get0(3, int64, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(4, int64, arg2)) { glm::vec<4, int64> o = PyGLM_Vec_PTI_Get0(4, int64, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(1, uint8, arg2)) { glm::vec<1, uint8> o = PyGLM_Vec_PTI_Get0(1, uint8, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(2, uint8, arg2)) { glm::vec<2, uint8> o = PyGLM_Vec_PTI_Get0(2, uint8, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(3, uint8, arg2)) { glm::vec<3, uint8> o = PyGLM_Vec_PTI_Get0(3, uint8, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(4, uint8, arg2)) { glm::vec<4, uint8> o = PyGLM_Vec_PTI_Get0(4, uint8, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(1, uint16, arg2)) { glm::vec<1, uint16> o = PyGLM_Vec_PTI_Get0(1, uint16, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(2, uint16, arg2)) { glm::vec<2, uint16> o = PyGLM_Vec_PTI_Get0(2, uint16, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(3, uint16, arg2)) { glm::vec<3, uint16> o = PyGLM_Vec_PTI_Get0(3, uint16, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(4, uint16, arg2)) { glm::vec<4, uint16> o = PyGLM_Vec_PTI_Get0(4, uint16, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(1, uint32, arg2)) { glm::vec<1, uint32> o = PyGLM_Vec_PTI_Get0(1, uint32, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(2, uint32, arg2)) { glm::vec<2, uint32> o = PyGLM_Vec_PTI_Get0(2, uint32, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(3, uint32, arg2)) { glm::vec<3, uint32> o = PyGLM_Vec_PTI_Get0(3, uint32, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(4, uint32, arg2)) { glm::vec<4, uint32> o = PyGLM_Vec_PTI_Get0(4, uint32, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(1, uint64, arg2)) { glm::vec<1, uint64> o = PyGLM_Vec_PTI_Get0(1, uint64, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(2, uint64, arg2)) { glm::vec<2, uint64> o = PyGLM_Vec_PTI_Get0(2, uint64, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(3, uint64, arg2)) { glm::vec<3, uint64> o = PyGLM_Vec_PTI_Get0(3, uint64, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } if (PyGLM_Vec_PTI_Check0(4, uint64, arg2)) { glm::vec<4, uint64> o = PyGLM_Vec_PTI_Get0(4, uint64, arg2); if (arg1 == ctypes_float) return pack(glm::unpackSnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackSnorm(o)); } PyGLM_TYPEERROR_2O("invalid argument type for unpackSnorm(): ", arg1, arg2); return NULL; } static PyObject* unpackSnorm1x8_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackSnorm1x8(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackSnorm1x8(): ", arg); return NULL; } static PyObject* unpackSnorm2x8_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackSnorm2x8(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackSnorm2x8(): ", arg); return NULL; } static PyObject* unpackSnorm1x16_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackSnorm1x16(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackSnorm1x16(): ", arg); return NULL; } static PyObject* unpackSnorm4x16_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackSnorm4x16(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackSnorm4x16(): ", arg); return NULL; } static PyObject* unpackSnorm3x10_1x2_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackSnorm3x10_1x2(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackSnorm3x10_1x2(): ", arg); return NULL; } static PyObject* unpackUnorm_(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "unpackUnorm", arg1, arg2); PyGLM_PTI_Init0(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_UINT | PyGLM_DT_UINT8 | PyGLM_DT_UINT16 | PyGLM_DT_UINT64); if (PyGLM_Vec_PTI_Check0(1, uint8, arg2)) { glm::vec<1, uint8> o = PyGLM_Vec_PTI_Get0(1, uint8, arg2); if (arg1 == ctypes_float) return pack(glm::unpackUnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackUnorm(o)); } if (PyGLM_Vec_PTI_Check0(2, uint8, arg2)) { glm::vec<2, uint8> o = PyGLM_Vec_PTI_Get0(2, uint8, arg2); if (arg1 == ctypes_float) return pack(glm::unpackUnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackUnorm(o)); } if (PyGLM_Vec_PTI_Check0(3, uint8, arg2)) { glm::vec<3, uint8> o = PyGLM_Vec_PTI_Get0(3, uint8, arg2); if (arg1 == ctypes_float) return pack(glm::unpackUnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackUnorm(o)); } if (PyGLM_Vec_PTI_Check0(4, uint8, arg2)) { glm::vec<4, uint8> o = PyGLM_Vec_PTI_Get0(4, uint8, arg2); if (arg1 == ctypes_float) return pack(glm::unpackUnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackUnorm(o)); } if (PyGLM_Vec_PTI_Check0(1, uint16, arg2)) { glm::vec<1, uint16> o = PyGLM_Vec_PTI_Get0(1, uint16, arg2); if (arg1 == ctypes_float) return pack(glm::unpackUnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackUnorm(o)); } if (PyGLM_Vec_PTI_Check0(2, uint16, arg2)) { glm::vec<2, uint16> o = PyGLM_Vec_PTI_Get0(2, uint16, arg2); if (arg1 == ctypes_float) return pack(glm::unpackUnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackUnorm(o)); } if (PyGLM_Vec_PTI_Check0(3, uint16, arg2)) { glm::vec<3, uint16> o = PyGLM_Vec_PTI_Get0(3, uint16, arg2); if (arg1 == ctypes_float) return pack(glm::unpackUnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackUnorm(o)); } if (PyGLM_Vec_PTI_Check0(4, uint16, arg2)) { glm::vec<4, uint16> o = PyGLM_Vec_PTI_Get0(4, uint16, arg2); if (arg1 == ctypes_float) return pack(glm::unpackUnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackUnorm(o)); } if (PyGLM_Vec_PTI_Check0(1, uint32, arg2)) { glm::vec<1, uint32> o = PyGLM_Vec_PTI_Get0(1, uint32, arg2); if (arg1 == ctypes_float) return pack(glm::unpackUnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackUnorm(o)); } if (PyGLM_Vec_PTI_Check0(2, uint32, arg2)) { glm::vec<2, uint32> o = PyGLM_Vec_PTI_Get0(2, uint32, arg2); if (arg1 == ctypes_float) return pack(glm::unpackUnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackUnorm(o)); } if (PyGLM_Vec_PTI_Check0(3, uint32, arg2)) { glm::vec<3, uint32> o = PyGLM_Vec_PTI_Get0(3, uint32, arg2); if (arg1 == ctypes_float) return pack(glm::unpackUnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackUnorm(o)); } if (PyGLM_Vec_PTI_Check0(4, uint32, arg2)) { glm::vec<4, uint32> o = PyGLM_Vec_PTI_Get0(4, uint32, arg2); if (arg1 == ctypes_float) return pack(glm::unpackUnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackUnorm(o)); } if (PyGLM_Vec_PTI_Check0(1, uint64, arg2)) { glm::vec<1, uint64> o = PyGLM_Vec_PTI_Get0(1, uint64, arg2); if (arg1 == ctypes_float) return pack(glm::unpackUnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackUnorm(o)); } if (PyGLM_Vec_PTI_Check0(2, uint64, arg2)) { glm::vec<2, uint64> o = PyGLM_Vec_PTI_Get0(2, uint64, arg2); if (arg1 == ctypes_float) return pack(glm::unpackUnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackUnorm(o)); } if (PyGLM_Vec_PTI_Check0(3, uint64, arg2)) { glm::vec<3, uint64> o = PyGLM_Vec_PTI_Get0(3, uint64, arg2); if (arg1 == ctypes_float) return pack(glm::unpackUnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackUnorm(o)); } if (PyGLM_Vec_PTI_Check0(4, uint64, arg2)) { glm::vec<4, uint64> o = PyGLM_Vec_PTI_Get0(4, uint64, arg2); if (arg1 == ctypes_float) return pack(glm::unpackUnorm(o)); if (arg1 == ctypes_double) return pack(glm::unpackUnorm(o)); } PyGLM_TYPEERROR_2O("invalid argument type for unpackUnorm(): ", arg1, arg2); return NULL; } static PyObject* unpackUnorm1x8_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackUnorm1x8(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackUnorm1x8(): ", arg); return NULL; } static PyObject* unpackUnorm2x8_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackUnorm2x8(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackUnorm2x8(): ", arg); return NULL; } static PyObject* unpackUnorm1x16_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackUnorm1x16(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackUnorm1x16(): ", arg); return NULL; } static PyObject* unpackUnorm4x16_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackUnorm4x16(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackUnorm4x16(): ", arg); return NULL; } static PyObject* unpackUnorm3x10_1x2_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackUnorm3x10_1x2(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackUnorm3x10_1x2(): ", arg); return NULL; } static PyObject* unpackUnorm2x4_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackUnorm2x4(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackUnorm2x4(): ", arg); return NULL; } static PyObject* unpackUnorm4x4_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackUnorm4x4(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackUnorm4x4(): ", arg); return NULL; } static PyObject* unpackUnorm1x5_1x6_1x5_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackUnorm1x5_1x6_1x5(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackUnorm1x5_1x6_1x5(): ", arg); return NULL; } static PyObject* unpackUnorm3x5_1x1_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackUnorm3x5_1x1(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackUnorm3x5_1x1(): ", arg); return NULL; } static PyObject* unpackUnorm2x3_1x2_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackUnorm2x3_1x2(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackUnorm2x3_1x2(): ", arg); return NULL; } static PyObject* unpackInt2x8_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackInt2x8(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackInt2x8(): ", arg); return NULL; } static PyObject* unpackInt4x8_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackInt4x8(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackInt4x8(): ", arg); return NULL; } static PyObject* unpackInt2x16_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackInt2x16(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackInt2x16(): ", arg); return NULL; } static PyObject* unpackInt4x16_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackInt4x16(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackInt4x16(): ", arg); return NULL; } static PyObject* unpackInt2x32_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackInt2x32(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackInt2x32(): ", arg); return NULL; } static PyObject* unpackUint2x8_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackUint2x8(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackUint2x8(): ", arg); return NULL; } static PyObject* unpackUint4x8_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackUint4x8(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackUint4x8(): ", arg); return NULL; } static PyObject* unpackUint2x16_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackUint2x16(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackUint2x16(): ", arg); return NULL; } static PyObject* unpackUint4x16_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackUint4x16(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackUint4x16(): ", arg); return NULL; } static PyObject* unpackUint2x32_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackUint2x32(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackUint2x32(): ", arg); return NULL; } static PyObject* unpackI3x10_1x2_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackI3x10_1x2(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackI3x10_1x2(): ", arg); return NULL; } static PyObject* unpackU3x10_1x2_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackU3x10_1x2(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackU3x10_1x2(): ", arg); return NULL; } static PyObject* unpackF2x11_1x10_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackF2x11_1x10(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackF2x11_1x10(): ", arg); return NULL; } static PyObject* unpackF3x9_E1x5_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::unpackF3x9_E1x5(PyGLM_Number_FromPyObject(arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackF3x9_E1x5(): ", arg); return NULL; } static PyObject* unpackRGBM_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(4, float, arg)) { return pack(glm::unpackRGBM(PyGLM_Vec_PTI_Get0(4, float, arg))); } if (PyGLM_Vec_PTI_Check0(4, double, arg)) { return pack(glm::unpackRGBM(PyGLM_Vec_PTI_Get0(4, double, arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackRGBM(): ", arg); return NULL; } static PyObject* unpackHalf_(PyObject*, PyObject* arg) { PyGLM_PTI_Init0(arg, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_UINT16); if (PyGLM_Vec_PTI_Check0(1, glm::u16, arg)) { return pack(glm::unpackHalf(PyGLM_Vec_PTI_Get0(1, glm::u16, arg))); } if (PyGLM_Vec_PTI_Check0(2, glm::u16, arg)) { return pack(glm::unpackHalf(PyGLM_Vec_PTI_Get0(2, glm::u16, arg))); } if (PyGLM_Vec_PTI_Check0(3, glm::u16, arg)) { return pack(glm::unpackHalf(PyGLM_Vec_PTI_Get0(3, glm::u16, arg))); } if (PyGLM_Vec_PTI_Check0(4, glm::u16, arg)) { return pack(glm::unpackHalf(PyGLM_Vec_PTI_Get0(4, glm::u16, arg))); } PyGLM_TYPEERROR_O("invalid argument type for unpackHalf(): ", arg); return NULL; } PyDoc_STRVAR(packF2x11_1x10_docstr, "packF2x11_1x10(v: vec3) -> int\n" " First, converts the first two components of the normalized floating-point value `v` into\n" " 11-bit signless floating-point values. Then, converts the third component of the normalized\n" " floating-point value `v` into a 10-bit signless floating-point value. Then, the results\n" " are packed into the returned 32-bit unsigned integer. The first vector component\n" " specifies the 11 least-significant bits of the result; the last component specifies the\n" " 10 most-significant bits." ); PyDoc_STRVAR(packF3x9_E1x5_docstr, "packF3x9_E1x5(v: vec3) -> int\n" " First, converts the first two components of the normalized floating-point value `v` into\n" " 11-bit signless floating-point values. Then, converts the third component of the normalized\n" " floating-point value `v` into a 10-bit signless floating-point value.Then, the results\n" " are packed into the returned 32-bit unsigned integer. The first vector component\n" " specifies the 11 least-significant bits of the result; the last component specifies the\n" " 10 most-significant bits. packF3x9_E1x5 allows encoding into RGBE / RGB9E5 format" ); PyDoc_STRVAR(packHalf_docstr, "packHalf(v: vecN) -> u16vecN\n" " Returns an unsigned integer vector obtained by converting the components of a\n" " floating-point vector to the 16-bit floating-point representation found in the OpenGL\n" " Specification. The first vector component specifies the 16 least-significant bits of the\n" " result; the forth component specifies the 16 most-significant bits." ); PyDoc_STRVAR(packHalf1x16_docstr, "packHalf1x16(v: float) -> int\n" " Returns an unsigned integer obtained by converting the components of a floating-point\n" " scalar to the 16-bit floating-point representation found in the OpenGL Specification, and\n" " then packing this 16-bit value into a 16-bit unsigned integer." ); PyDoc_STRVAR(packHalf4x16_docstr, "packHalf4x16(v: vec4) -> int\n" " Returns an unsigned integer obtained by converting the components of a four-component\n" " floating-point vector to the 16-bit floating-point representation found in the OpenGL\n" " Specification, and then packing these four 16-bit values into a 64-bit unsigned integer.\n" " The first vector component specifies the 16 least-significant bits of the result; the\n" " forth component specifies the 16 most-significant bits." ); PyDoc_STRVAR(packI3x10_1x2_docstr, "packI3x10_1x2(v: ivec4) -> int\n" " Returns an unsigned integer obtained by converting the components of a four-component\n" " signed integer vector to the 10-10-10-2-bit signed integer representation found in the\n" " OpenGL Specification, and then packing these four values into a 32-bit unsigned integer.\n" " The first vector component specifies the 10 least-significant bits of the result; the\n" " forth component specifies the 2 most-significant bits." ); PyDoc_STRVAR(packInt2x16_docstr, "packInt2x16(v: i16vec2) -> int\n" " Convert each component from an integer vector into a packed integer." ); PyDoc_STRVAR(packInt2x32_docstr, "packInt2x32(v: i32vec2) -> int\n" " Convert each component from an integer vector into a packed integer." ); PyDoc_STRVAR(packInt2x8_docstr, "packInt2x8(v: i8vec2) -> int\n" " Convert each component from an integer vector into a packed integer." ); PyDoc_STRVAR(packInt4x16_docstr, "packInt4x16(v: i16vec4) -> int\n" " Convert each component from an integer vector into a packed integer." ); PyDoc_STRVAR(packInt4x8_docstr, "packInt4x8(v: i8vec4) -> int\n" " Convert each component from an integer vector into a packed integer." ); PyDoc_STRVAR(packRGBM_docstr, "packRGBM(v: vec3) -> vec4\n" " Returns an unsigned integer vector obtained by converting the components of a\n" " floating-point vector to the 16-bit floating-point representation found in the OpenGL\n" " Specification. The first vector component specifies the 16 least-significant bits of the\n" " result; the forth component specifies the 16 most-significant bits." ); PyDoc_STRVAR(packSnorm_docstr, "packSnorm(t: type, v: vecN) -> vecN\n" " Convert each component of the normalized floating-point vector into signed integer values\n" " of type `t`.\n" " `t` can be any of the 8 integer types (`glm.int32`, `glm.int64`, `glm.uint8`, ...)." ); PyDoc_STRVAR(packSnorm1x16_docstr, "packSnorm1x16(v: float) -> int\n" " First, converts the normalized floating-point value `v` into 16-bit integer value. Then, the\n" " results are packed into the returned 16-bit unsigned integer. The conversion to fixed point is\n" " done as follows : `round(clamp(s, -1, +1) * 32767.0)`" ); PyDoc_STRVAR(packSnorm1x8_docstr, "packSnorm1x8(v: float) -> int\n" " First, converts the normalized floating-point value `v` into 8-bit integer value. Then, the\n" " results are packed into the returned 8-bit unsigned integer. The conversion to fixed point is\n" " done as follows : `round(clamp(v, -1, +1) * 127.0)`" ); PyDoc_STRVAR(packSnorm2x8_docstr, "packSnorm2x8(v: fvec2) -> int\n" " First, converts each component of the normalized floating-point value `v` into 8-bit integer\n" " values. Then, the results are packed into the returned 16-bit unsigned integer. The\n" " conversion for component `c` of `v` to fixed point is done as follows :\n" " `round(clamp(c, -1, +1) * 127.0)`. The first component of the vector will be\n" " written to the least significant bits of the output; the last component will be written to\n" " the most significant bits." ); PyDoc_STRVAR(packSnorm3x10_1x2_docstr, "packSnorm3x10_1x2(v: fvec4) -> int\n" " First, converts the first three components of the normalized floating-point value `v` into\n" " 10-bit signed integer values. Then, converts the forth component of the normalized\n" " floating-point value `v` into 2-bit signed integer values. Then, the results are packed into\n" " the returned 32-bit unsigned integer. The conversion for component c of v to fixed point\n" " is done as follows : `packSnorm3x10_1x2(xyz)` : `round(clamp(c, -1, +1) * 511.0)`\n" " `packSnorm3x10_1x2(w)` : `round(clamp(c, -1, +1) * 1.0)`. The first vector component specifies\n" " the 10 least-significant bits of the result; the forth component specifies the 2\n" " most-significant bits." ); PyDoc_STRVAR(packSnorm4x16_docstr, "packSnorm4x16(v: fvec4) -> int\n" " First, converts each component of the normalized floating-point value `v` into 16-bit integer\n" " values. Then, the results are packed into the returned 64-bit unsigned integer. The\n" " conversion for component `c` of `v` to fixed point is done as follows :\n" " `round(clamp(c, -1, +1) * 32767.0)`. The first component of the vector will be\n" " written to the least significant bits of the output; the last component will be written to\n" " the most significant bits." ); PyDoc_STRVAR(packU3x10_1x2_docstr, "packU3x10_1x2(v: uvec4) -> int\n" " Returns an unsigned integer obtained by converting the components of a four-component\n" " unsigned integer vector to the 10-10-10-2-bit unsigned integer representation found in the\n" " OpenGL Specification, and then packing these four values into a 32-bit unsigned integer.\n" " The first vector component specifies the 10 least-significant bits of the result; the\n" " forth component specifies the 2 most-significant bits." ); PyDoc_STRVAR(packUint2x16_docstr, "packUint2x16(v: u16vec2) -> int\n" " Convert each component from an integer vector into a packed unsigned integer." ); PyDoc_STRVAR(packUint2x32_docstr, "packUint2x32(v: u32vec2) -> int\n" " Convert each component from an integer vector into a packed unsigned integer." ); PyDoc_STRVAR(packUint2x8_docstr, "packUint2x8(v: u8vec2) -> int\n" " Convert each component from an integer vector into a packed unsigned integer." ); PyDoc_STRVAR(packUint4x16_docstr, "packUint4x16(v: u16vec4) -> int\n" " Convert each component from an integer vector into a packed unsigned integer." ); PyDoc_STRVAR(packUint4x8_docstr, "packUint4x8(v: u16vec4) -> int\n" " Convert each component from an integer vector into a packed unsigned integer." ); PyDoc_STRVAR(packUnorm_docstr, "packUnorm(t: type, v: vecN) -> vecN\n" " Convert each component of the normalized floating-point vector into unsigned integer values\n" " of type `t`.\n" " `t` can be any of the 4 unsigned integer types\n" " (`glm.uint64`, `glm.uint32`, `glm.uint16`, `glm.uint8`)." ); PyDoc_STRVAR(packUnorm1x16_docstr, "packUnorm1x16(v: float) -> int\n" " First, converts the normalized floating-point value `v` into a 16-bit integer value. Then,\n" " the results are packed into the returned 16-bit unsigned integer. The conversion for\n" " component `c` of `v` to fixed point is done as follows :\n" " `round(clamp(c, 0, +1) * 65535.0)`" ); PyDoc_STRVAR(packUnorm1x5_1x6_1x5_docstr, "packUnorm1x5_1x6_1x5(v: fvec3) -> int\n" " Convert each component of the normalized floating-point vector into unsigned integer\n" " values." ); PyDoc_STRVAR(packUnorm1x8_docstr, "packUnorm1x8(v: float) -> int\n" " First, converts the normalized floating-point value `v` into a 8-bit integer value. Then, the\n" " results are packed into the returned 8-bit unsigned integer. The conversion for component\n" " `c` of `v` to fixed point is done as follows : `round(clamp(c, 0, +1) * 255.0)`" ); PyDoc_STRVAR(packUnorm2x3_1x2_docstr, "packUnorm2x3_1x2(v: fvec3) -> int\n" " Convert each component of the normalized floating-point vector into unsigned integer\n" " values." ); PyDoc_STRVAR(packUnorm2x4_docstr, "packUnorm2x4(v: fvec2) -> int\n" " Convert each component of the normalized floating-point vector into unsigned integer\n" " values." ); PyDoc_STRVAR(packUnorm2x8_docstr, "packUnorm2x8(v: fvec2) -> int\n" " First, converts each component of the normalized floating-point value `v` into 8-bit integer\n" " values. Then, the results are packed into the returned 16-bit unsigned integer. The\n" " conversion for component `c` of `v` to fixed point is done as follows :\n" " `round(clamp(c, 0, +1) * 255.0)`. The first component of the vector will be\n" " written to the least significant bits of the output; the last component will be written to\n" " the most significant bits." ); PyDoc_STRVAR(packUnorm3x10_1x2_docstr, "packUnorm3x10_1x2(v: fvec4) -> int\n" " First, converts the first three components of the normalized floating-point value `v` into\n" " 10-bit unsigned integer values. Then, converts the forth component of the normalized\n" " floating-point value `v` into 2-bit signed uninteger values.Then, the results are packed into\n" " the returned 32-bit unsigned integer. The conversion for component c of v to fixed point is\n" " done as follows : `packUnorm3x10_1x2(xyz)` : `round(clamp(c, 0, +1) * 1023.0)`\n" " `packUnorm3x10_1x2(w)` : `round(clamp(c, 0, +1) * 3.0)`. The first vector component specifies\n" " the 10 least-significant bits of the result; the forth component specifies the 2\n" " most-significant bits." ); PyDoc_STRVAR(packUnorm3x5_1x1_docstr, "packUnorm3x5_1x1(v: fvec4) -> int\n" " Convert each component of the normalized floating-point vector into unsigned integer\n" " values." ); PyDoc_STRVAR(packUnorm4x16_docstr, "packUnorm4x16(v: fvec4) -> int\n" " First, converts each component of the normalized floating-point value `v` into 16-bit integer\n" " values. Then, the results are packed into the returned 64-bit unsigned integer. The\n" " conversion for component c of v to fixed point is done as follows :\n" " `round(clamp(c, 0, +1) * 65535.0)`. The first component of the vector will be\n" " written to the least significant bits of the output; the last component will be written to\n" " the most significant bits." ); PyDoc_STRVAR(packUnorm4x4_docstr, "packUnorm4x4(v: fvec4) -> int\n" " Convert each component of the normalized floating-point vector into unsigned integer\n" " values." ); PyDoc_STRVAR(unpackF2x11_1x10_docstr, "unpackF2x11_1x10(p: int) -> vec3\n" " First, unpacks a single 32-bit unsigned integer `p` into two 11-bit signless floating-point\n" " values and one 10-bit signless floating-point value. Then, each component is converted to a\n" " normalized floating-point value to generate the returned three-component vector. The\n" " first component of the returned vector will be extracted from the least significant bits of\n" " the input; the last component will be extracted from the most significant bits." ); PyDoc_STRVAR(unpackF3x9_E1x5_docstr, "unpackF3x9_E1x5(p: int) -> vec3\n" " First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point\n" " values and one 10-bit signless floating-point value. Then, each component is converted to a\n" " normalized floating-point value to generate the returned three-component vector. The\n" " first component of the returned vector will be extracted from the least significant bits of\n" " the input; the last component will be extracted from the most significant bits.\n" " unpackF3x9_E1x5 allows decoding RGBE / RGB9E5 data" ); PyDoc_STRVAR(unpackHalf_docstr, "unpackHalf(p: u16vecN) -> vecN\n" " Returns a floating-point vector with components obtained by reinterpreting an integer\n" " vector as 16-bit floating-point numbers and converting them to 32-bit floating-point\n" " values. The first component of the vector is obtained from the 16 least-significant bits\n" " of `v`; the forth component is obtained from the 16 most-significant bits of `v`." ); PyDoc_STRVAR(unpackHalf1x16_docstr, "unpackHalf1x16(p: int) -> float\n" " Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned\n" " integer into a 16-bit value, interpreted as a 16-bit floating-point number according to the\n" " OpenGL Specification, and converting it to 32-bit floating-point values." ); PyDoc_STRVAR(unpackHalf4x16_docstr, "unpackHalf4x16(p: int) -> vec4\n" " Returns a four-component floating-point vector with components obtained by unpacking a\n" " 64-bit unsigned integer into four 16-bit values, interpreting those values as 16-bit\n" " floating-point numbers according to the OpenGL Specification, and converting them to 32-bit\n" " floating-point values. The first component of the vector is obtained from the 16\n" " least-significant bits of `v`; the forth component is obtained from the 16 most-significant\n" " bits of `v`." ); PyDoc_STRVAR(unpackI3x10_1x2_docstr, "unpackI3x10_1x2(p: int) -> ivec4\n" " Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers.\n" " The first component of the returned vector will be extracted from the least significant\n" " bits of the input; the last component will be extracted from the most significant bits." ); PyDoc_STRVAR(unpackInt2x16_docstr, "unpackInt2x16(p: int) -> i16vec2\n" " Convert a packed integer into an integer vector." ); PyDoc_STRVAR(unpackInt2x32_docstr, "unpackInt2x32(p: int) -> i32vec2\n" " Convert a packed integer into an integer vector." ); PyDoc_STRVAR(unpackInt2x8_docstr, "unpackInt2x8(p: int) -> i8vec2\n" " Convert a packed integer into an integer vector." ); PyDoc_STRVAR(unpackInt4x16_docstr, "unpackInt4x16(p: int) -> i16vec4\n" " Convert a packed integer into an integer vector." ); PyDoc_STRVAR(unpackInt4x8_docstr, "unpackInt4x8(p: int) -> i8vec4\n" " Convert a packed integer into an integer vector." ); PyDoc_STRVAR(unpackRGBM_docstr, "unpackRGBM(rgbm: vec4) -> vec3\n" " Returns a floating-point vector with components obtained by reinterpreting an integer\n" " vector as 16-bit floating-point numbers and converting them to 32-bit floating-point\n" " values. The first component of the vector is obtained from the 16 least-significant bits of\n" " `v`; the forth component is obtained from the 16 most-significant bits of `v`." ); PyDoc_STRVAR(unpackSnorm_docstr, "unpackSnorm(t: type, v: vecN) -> vecN\n" " Convert a packed integer to a normalized floating-point vector of type `t`.\n" " `t` can be either `glm.float` or `glm.double`." ); PyDoc_STRVAR(unpackSnorm1x16_docstr, "unpackSnorm1x16(p: int) -> float\n" " First, unpacks a single 16-bit unsigned integer `p` into a single 16-bit signed integers.\n" " Then, each component is converted to a normalized floating-point value to generate the\n" " returned scalar. The conversion for unpacked fixed-point value `f` to floating point is\n" " done as follows : `clamp(f / 32767.0, -1, +1)`" ); PyDoc_STRVAR(unpackSnorm1x8_docstr, "unpackSnorm1x8(p: int) -> float\n" " First, unpacks a single 8-bit unsigned integer `p` into a single 8-bit signed integers.\n" " Then, the value is converted to a normalized floating-point value to generate the\n" " returned scalar. The conversion for unpacked fixed-point value `f` to floating point is\n" " done as follows : `clamp(f / 127.0, -1, +1)`" ); PyDoc_STRVAR(unpackSnorm2x8_docstr, "unpackSnorm2x8(p: int) -> vec2\n" " First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers.\n" " Then, each component is converted to a normalized floating-point value to generate the\n" " returned two-component vector. The conversion for unpacked fixed-point value `f` to\n" " floating point is done as follows : `clamp(f / 127.0, -1, +1)`\n" " The first component of the returned vector will be extracted from the least significant\n" " bits of the input; the last component will be extracted from the most significant bits." ); PyDoc_STRVAR(unpackSnorm3x10_1x2_docstr, "unpackSnorm3x10_1x2(p: int) -> vec4\n" " First, unpacks a single 32-bit unsigned integer `p` into four 16-bit signed integers. Then,\n" " each component is converted to a normalized floating-point value to generate the returned\n" " four-component vector. The conversion for unpacked fixed-point value `f` to floating point\n" " is done as follows : `unpackSnorm3x10_1x2(xyz)` : `clamp(f / 511.0, -1, +1)`\n" " `unpackSnorm3x10_1x2(w)` : `clamp(f / 511.0, -1, +1)`. The first component of the returned\n" " vector will be extracted from the least significant bits of the input; the last component\n" " will be extracted from the most significant bits." ); PyDoc_STRVAR(unpackSnorm4x16_docstr, "unpackSnorm4x16(p: int) -> vec4\n" " First, unpacks a single 64-bit unsigned integer `p` into four 16-bit signed integers. Then,\n" " each component is converted to a normalized floating-point value to generate the returned\n" " four-component vector. The conversion for unpacked fixed-point value `f` to floating point\n" " is done as follows : `clamp(f / 32767.0, -1, +1)`\n" " The first component of the returned vector will be extracted from the least significant\n" " bits of the input; the last component will be extracted from the most significant bits." ); PyDoc_STRVAR(unpackU3x10_1x2_docstr, "unpackU3x10_1x2(p: int) -> uvec4\n" " Unpacks a single 32-bit unsigned integer `p` into three 10-bit and one 2-bit unsigned\n" " integers. The first component of the returned vector will be extracted from the least\n" " significant bits of the input; the last component will be extracted from the most\n" " significant bits." ); PyDoc_STRVAR(unpackUint2x16_docstr, "unpackUint2x16(p: int) -> u16vec2\n" " Convert a packed integer into an integer vector." ); PyDoc_STRVAR(unpackUint2x32_docstr, "unpackUint2x32(p: int) -> u32vec2\n" " Convert a packed integer into an integer vector." ); PyDoc_STRVAR(unpackUint2x8_docstr, "unpackUint2x8(p: int) -> u8vec2\n" " Convert a packed integer into an integer vector." ); PyDoc_STRVAR(unpackUint4x16_docstr, "unpackUint4x16(p: int) -> u16vec4\n" " Convert a packed integer into an integer vector." ); PyDoc_STRVAR(unpackUint4x8_docstr, "unpackUint4x8(p: int) -> u8vec4\n" " Convert a packed integer into an integer vector." ); PyDoc_STRVAR(unpackUnorm_docstr, "unpackUnorm(t: type, v: vecN) -> vecN\n" " Convert a packed unsigned integer to a normalized floating-point vector of type `t`.\n" " `t` can be either `glm.float` or `glm.double`." ); PyDoc_STRVAR(unpackUnorm1x16_docstr, "unpackUnorm1x16(p: int) -> float\n" " First, unpacks a single 16-bit unsigned integer `p` into a of 16-bit unsigned integers.\n" " Then, the value is converted to a normalized floating-point value to generate the\n" " returned scalar. The conversion for unpacked fixed-point value `f` to floating point is\n" " done as follows : `f / 65535.0`" ); PyDoc_STRVAR(unpackUnorm1x5_1x6_1x5_docstr, "unpackUnorm1x5_1x6_1x5(p: int) -> vec3\n" " Convert a packed integer to a normalized floating-point vector." ); PyDoc_STRVAR(unpackUnorm1x8_docstr, "unpackUnorm1x8(p: int) -> float\n" " Convert a single 8-bit integer to a normalized floating-point value. The conversion for\n" " unpacked fixed-point value `f` to floating point is done as follows :\n" " `f / 255.0`" ); PyDoc_STRVAR(unpackUnorm2x3_1x2_docstr, "unpackUnorm2x3_1x2(p: int) -> vec3\n" " Convert a packed integer to a normalized floating-point vector." ); PyDoc_STRVAR(unpackUnorm2x4_docstr, "unpackUnorm2x4(p: int) -> vec2\n" " Convert a packed integer to a normalized floating-point vector." ); PyDoc_STRVAR(unpackUnorm2x8_docstr, "unpackUnorm2x8(p: int) -> vec2\n" " First, unpacks a single 16-bit unsigned integer `p` into a pair of 8-bit unsigned integers.\n" " Then, each component is converted to a normalized floating-point value to generate the\n" " returned two-component vector. The conversion for unpacked fixed-point value `f` to\n" " floating point is done as follows : `f / 255.0`. The first component of the\n" " returned vector will be extracted from the least significant bits of the input; the last\n" " component will be extracted from the most significant bits." ); PyDoc_STRVAR(unpackUnorm3x10_1x2_docstr, "unpackUnorm3x10_1x2(p: int) -> vec4\n" " First, unpacks a single 32-bit unsigned integer `p` into four 16-bit signed integers.\n" " Then, each component is converted to a normalized floating-point value to generate the\n" " returned four-component vector. The conversion for unpacked fixed-point value `f` to\n" " floating point is done as follows : `unpackSnorm3x10_1x2(xyz)` : `clamp(f / 1023.0, 0, +1)`\n" " `unpackSnorm3x10_1x2(w)` : `clamp(f / 3.0, 0, +1)`. The first component of the returned vector\n" " will be extracted from the least significant bits of the input; the last component will be\n" " extracted from the most significant bits." ); PyDoc_STRVAR(unpackUnorm3x5_1x1_docstr, "unpackUnorm3x5_1x1(p: int) -> vec4\n" " Convert a packed integer to a normalized floating-point vector." ); PyDoc_STRVAR(unpackUnorm4x16_docstr, "unpackUnorm4x16(p: int) -> vec4\n" " First, unpacks a single 64-bit unsigned integer `p` into four 16-bit unsigned integers.\n" " Then, each component is converted to a normalized floating-point value to generate the\n" " returned four-component vector. The conversion for unpacked fixed-point value `f` to\n" " floating point is done as follows : `f / 65535.0`. The first component of\n" " the returned vector will be extracted from the least significant bits of the input; the\n" " last component will be extracted from the most significant bits." ); PyDoc_STRVAR(unpackUnorm4x4_docstr, "unpackUnorm4x4(p: int) -> vec4\n" " Convert a packed integer to a normalized floating-point vector." ); #define PACKING_METHODS \ { "packInt2x8", (PyCFunction)packInt2x8_, METH_O, packInt2x8_docstr }, \ { "unpackInt2x8", (PyCFunction)unpackInt2x8_, METH_O, unpackInt2x8_docstr }, \ { "packInt4x8", (PyCFunction)packInt4x8_, METH_O, packInt4x8_docstr }, \ { "unpackInt4x8", (PyCFunction)unpackInt4x8_, METH_O, unpackInt4x8_docstr }, \ { "packInt2x16", (PyCFunction)packInt2x16_, METH_O, packInt2x16_docstr }, \ { "unpackInt2x16", (PyCFunction)unpackInt2x16_, METH_O, unpackInt2x16_docstr }, \ { "packInt4x16", (PyCFunction)packInt4x16_, METH_O, packInt4x16_docstr }, \ { "unpackInt4x16", (PyCFunction)unpackInt4x16_, METH_O, unpackInt4x16_docstr }, \ { "packInt2x32", (PyCFunction)packInt2x32_, METH_O, packInt2x32_docstr }, \ { "unpackInt2x32", (PyCFunction)unpackInt2x32_, METH_O, unpackInt2x32_docstr }, \ { "packUint2x8", (PyCFunction)packUint2x8_, METH_O, packUint2x8_docstr }, \ { "unpackUint2x8", (PyCFunction)unpackUint2x8_, METH_O, unpackUint2x8_docstr }, \ { "packUint4x8", (PyCFunction)packUint4x8_, METH_O, packUint4x8_docstr }, \ { "unpackUint4x8", (PyCFunction)unpackUint4x8_, METH_O, unpackUint4x8_docstr }, \ { "packUint2x16", (PyCFunction)packUint2x16_, METH_O, packUint2x16_docstr }, \ { "unpackUint2x16", (PyCFunction)unpackUint2x16_, METH_O, unpackUint2x16_docstr }, \ { "packUint4x16", (PyCFunction)packUint4x16_, METH_O, packUint4x16_docstr }, \ { "unpackUint4x16", (PyCFunction)unpackUint4x16_, METH_O, unpackUint4x16_docstr }, \ { "packUint2x32", (PyCFunction)packUint2x32_, METH_O, packUint2x32_docstr }, \ { "unpackUint2x32", (PyCFunction)unpackUint2x32_, METH_O, unpackUint2x32_docstr }, \ { "packHalf1x16", (PyCFunction)packHalf1x16_, METH_O, packHalf1x16_docstr }, \ { "unpackHalf1x16", (PyCFunction)unpackHalf1x16_, METH_O, unpackHalf1x16_docstr }, \ { "packHalf4x16", (PyCFunction)packHalf4x16_, METH_O, packHalf4x16_docstr }, \ { "unpackHalf4x16", (PyCFunction)unpackHalf4x16_, METH_O, unpackHalf4x16_docstr }, \ { "packUnorm", (PyCFunction)packUnorm_, METH_VARARGS, packUnorm_docstr }, \ { "unpackUnorm", (PyCFunction)unpackUnorm_, METH_VARARGS, unpackUnorm_docstr }, \ { "packUnorm1x8", (PyCFunction)packUnorm1x8_, METH_O, packUnorm1x8_docstr }, \ { "unpackUnorm1x8", (PyCFunction)unpackUnorm1x8_, METH_O, unpackUnorm1x8_docstr }, \ { "packUnorm2x8", (PyCFunction)packUnorm2x8_, METH_O, packUnorm2x8_docstr }, \ { "unpackUnorm2x8", (PyCFunction)unpackUnorm2x8_, METH_O, unpackUnorm2x8_docstr }, \ { "packUnorm1x16", (PyCFunction)packUnorm1x16_, METH_O, packUnorm1x16_docstr }, \ { "unpackUnorm1x16", (PyCFunction)unpackUnorm1x16_, METH_O, unpackUnorm1x16_docstr }, \ { "packUnorm4x16", (PyCFunction)packUnorm4x16_, METH_O, packUnorm4x16_docstr }, \ { "unpackUnorm4x16", (PyCFunction)unpackUnorm4x16_, METH_O, unpackUnorm4x16_docstr }, \ { "packUnorm3x10_1x2", (PyCFunction)packUnorm3x10_1x2_, METH_O, packUnorm3x10_1x2_docstr }, \ { "unpackUnorm3x10_1x2", (PyCFunction)unpackUnorm3x10_1x2_, METH_O, unpackUnorm3x10_1x2_docstr }, \ { "packUnorm2x4", (PyCFunction)packUnorm2x4_, METH_O, packUnorm2x4_docstr }, \ { "unpackUnorm2x4", (PyCFunction)unpackUnorm2x4_, METH_O, unpackUnorm2x4_docstr }, \ { "packUnorm4x4", (PyCFunction)packUnorm4x4_, METH_O, packUnorm4x4_docstr }, \ { "unpackUnorm4x4", (PyCFunction)unpackUnorm4x4_, METH_O, unpackUnorm4x4_docstr }, \ { "packUnorm1x5_1x6_1x5", (PyCFunction)packUnorm1x5_1x6_1x5_, METH_O, packUnorm1x5_1x6_1x5_docstr }, \ { "unpackUnorm1x5_1x6_1x5", (PyCFunction)unpackUnorm1x5_1x6_1x5_, METH_O, unpackUnorm1x5_1x6_1x5_docstr }, \ { "packUnorm3x5_1x1", (PyCFunction)packUnorm3x5_1x1_, METH_O, packUnorm3x5_1x1_docstr }, \ { "unpackUnorm3x5_1x1", (PyCFunction)unpackUnorm3x5_1x1_, METH_O, unpackUnorm3x5_1x1_docstr }, \ { "packUnorm2x3_1x2", (PyCFunction)packUnorm2x3_1x2_, METH_O, packUnorm2x3_1x2_docstr }, \ { "unpackUnorm2x3_1x2", (PyCFunction)unpackUnorm2x3_1x2_, METH_O, unpackUnorm2x3_1x2_docstr }, \ { "packSnorm", (PyCFunction)packSnorm_, METH_VARARGS, packSnorm_docstr }, \ { "unpackSnorm", (PyCFunction)unpackSnorm_, METH_VARARGS, unpackSnorm_docstr }, \ { "packSnorm1x8", (PyCFunction)packSnorm1x8_, METH_O, packSnorm1x8_docstr }, \ { "unpackSnorm1x8", (PyCFunction)unpackSnorm1x8_, METH_O, unpackSnorm1x8_docstr }, \ { "packSnorm2x8", (PyCFunction)packSnorm2x8_, METH_O, packSnorm2x8_docstr }, \ { "unpackSnorm2x8", (PyCFunction)unpackSnorm2x8_, METH_O, unpackSnorm2x8_docstr }, \ { "packSnorm1x16", (PyCFunction)packSnorm1x16_, METH_O, packSnorm1x16_docstr }, \ { "unpackSnorm1x16", (PyCFunction)unpackSnorm1x16_, METH_O, unpackSnorm1x16_docstr }, \ { "packSnorm4x16", (PyCFunction)packSnorm4x16_, METH_O, packSnorm4x16_docstr }, \ { "unpackSnorm4x16", (PyCFunction)unpackSnorm4x16_, METH_O, unpackSnorm4x16_docstr }, \ { "packSnorm3x10_1x2", (PyCFunction)packSnorm3x10_1x2_, METH_O, packSnorm3x10_1x2_docstr }, \ { "unpackSnorm3x10_1x2", (PyCFunction)unpackSnorm3x10_1x2_, METH_O, unpackSnorm3x10_1x2_docstr }, \ { "packI3x10_1x2", (PyCFunction)packI3x10_1x2_, METH_O, packI3x10_1x2_docstr }, \ { "unpackI3x10_1x2", (PyCFunction)unpackI3x10_1x2_, METH_O, unpackI3x10_1x2_docstr }, \ { "packU3x10_1x2", (PyCFunction)packU3x10_1x2_, METH_O, packU3x10_1x2_docstr }, \ { "unpackU3x10_1x2", (PyCFunction)unpackU3x10_1x2_, METH_O, unpackU3x10_1x2_docstr }, \ { "packF2x11_1x10", (PyCFunction)packF2x11_1x10_, METH_O, packF2x11_1x10_docstr }, \ { "unpackF2x11_1x10", (PyCFunction)unpackF2x11_1x10_, METH_O, unpackF2x11_1x10_docstr }, \ { "packF3x9_E1x5", (PyCFunction)packF3x9_E1x5_, METH_O, packF3x9_E1x5_docstr }, \ { "unpackF3x9_E1x5", (PyCFunction)unpackF3x9_E1x5_, METH_O, unpackF3x9_E1x5_docstr }, \ { "packRGBM", (PyCFunction)packRGBM_, METH_O, packRGBM_docstr }, \ { "unpackRGBM", (PyCFunction)unpackRGBM_, METH_O, unpackRGBM_docstr }, \ { "packHalf", (PyCFunction)packHalf_, METH_O, packHalf_docstr }, \ { "unpackHalf", (PyCFunction)unpackHalf_, METH_O, unpackHalf_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/stable_extensions/quaternion.h000066400000000000000000000050421511156275200274070ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" #include "../function_generator_macros.h" PyGLM_MAKE_GLM_FUNC_V3V3__tfF(quatLookAt) PyGLM_MAKE_GLM_FUNC_V3V3__tfF(quatLookAtLH) PyGLM_MAKE_GLM_FUNC_V3V3__tfF(quatLookAtRH) PyGLM_MAKE_GLM_FUNC_Q(eulerAngles) PyGLM_MAKE_GLM_FUNC_Q(roll) PyGLM_MAKE_GLM_FUNC_Q(pitch) PyGLM_MAKE_GLM_FUNC_Q(yaw) PyGLM_MAKE_GLM_FUNC_Q(mat3_cast) PyGLM_MAKE_GLM_FUNC_Q(mat4_cast) PyGLM_MAKE_GLM_FUNC_M3_M4__tfF(quat_cast) PyDoc_STRVAR(eulerAngles_docstr, "eulerAngles(x: quat) -> vec3\n" " Returns euler angles, pitch as x, yaw as y, roll as z. The result is expressed in radians." ); PyDoc_STRVAR(mat3_cast_docstr, "mat3_cast(x: quat) -> mat3\n" " Converts a quaternion to a 3 x 3 matrix." ); PyDoc_STRVAR(mat4_cast_docstr, "mat4_cast(x: quat) -> mat4\n" " Converts a quaternion to a 4 x 4 matrix." ); PyDoc_STRVAR(pitch_docstr, "pitch(x: quat) -> float\n" " Returns pitch value of euler angles expressed in radians." ); PyDoc_STRVAR(quat_cast_docstr, "quat_cast(x: mat3) -> quat\n" " Converts a pure rotation 3 x 3 matrix to a quaternion.\n" "quat_cast(x: mat4) -> quat\n" " Converts a pure rotation 4 x 4 matrix to a quaternion." ); PyDoc_STRVAR(quatLookAt_docstr, "quatLookAt(direction: vec3, up: vec3) -> quat\n" " See quatLookAtRH." ); PyDoc_STRVAR(quatLookAtLH_docstr, "quatLookAtLH(direction: vec3, up: vec3) -> quat\n" " Build a left-handed look at quaternion." ); PyDoc_STRVAR(quatLookAtRH_docstr, "quatLookAtRH(direction: vec3, up: vec3) -> quat\n" " Build a right-handed look at quaternion." ); PyDoc_STRVAR(roll_docstr, "roll(x: quat) -> float\n" " Returns roll value of euler angles expressed in radians." ); PyDoc_STRVAR(yaw_docstr, "yaw(x: quat) -> float\n" " Returns yaw value of euler angles expressed in radians." ); #define QUATERNION_METHODS \ { "quatLookAt", (PyCFunction)quatLookAt_, METH_VARARGS, quatLookAt_docstr }, \ { "quatLookAtLH", (PyCFunction)quatLookAtLH_, METH_VARARGS, quatLookAtLH_docstr }, \ { "quatLookAtRH", (PyCFunction)quatLookAtRH_, METH_VARARGS, quatLookAtRH_docstr }, \ { "eulerAngles", (PyCFunction)eulerAngles_, METH_O, eulerAngles_docstr }, \ { "roll", (PyCFunction)roll_, METH_O, roll_docstr }, \ { "pitch", (PyCFunction)pitch_, METH_O, pitch_docstr }, \ { "yaw", (PyCFunction)yaw_, METH_O, yaw_docstr }, \ { "mat3_cast", (PyCFunction)mat3_cast_, METH_O, mat3_cast_docstr }, \ { "mat4_cast", (PyCFunction)mat4_cast_, METH_O, mat4_cast_docstr }, \ { "quat_cast", (PyCFunction)quat_cast_, METH_O, quat_cast_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/stable_extensions/quaternion_common.h000066400000000000000000000171601511156275200307630ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" #include "../function_generator_macros.h" static PyObject* lerp_(PyObject*, PyObject* args) { PyObject* arg1, * arg2, * arg3; PyGLM_Arg_Unpack_3O(args, "lerp", arg1, arg2, arg3); if (PyGLM_Number_Check(arg3)) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { return PyGLM_PyObject_FromNumber(glm::lerp(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3))); } PyGLM_PTI_Init0(arg1, PyGLM_T_QUA | PyGLM_T_ANY_VEC | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_QUA | PyGLM_T_ANY_VEC | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2)) { float a = PyGLM_Number_FromPyObject(arg3); return pack(glm::lerp(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2), a)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2)) { double a = PyGLM_Number_FromPyObject(arg3); return pack(glm::lerp(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2), a)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { float a = PyGLM_Number_FromPyObject(arg3); return pack(glm::lerp(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2), a)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { double a = PyGLM_Number_FromPyObject(arg3); return pack(glm::lerp(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2), a)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2)) { float a = PyGLM_Number_FromPyObject(arg3); return pack(glm::lerp(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2), a)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2)) { double a = PyGLM_Number_FromPyObject(arg3); return pack(glm::lerp(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2), a)); } if (PyGLM_Qua_PTI_Check0(float, arg1) && PyGLM_Qua_PTI_Check1(float, arg2)) { float a = PyGLM_Number_FromPyObject(arg3); PyGLM_ASSERT((a >= 0.0f && a <= 1.0f), "Lerp is only defined in [0, 1]") return pack(glm::lerp(PyGLM_Qua_PTI_Get0(float, arg1), PyGLM_Qua_PTI_Get1(float, arg2), a)); } if (PyGLM_Qua_PTI_Check0(double, arg1) && PyGLM_Qua_PTI_Check1(double, arg2)) { double a = PyGLM_Number_FromPyObject(arg3); PyGLM_ASSERT((a >= 0.0 && a <= 1.0), "Lerp is only defined in [0, 1]") return pack(glm::lerp(PyGLM_Qua_PTI_Get0(double, arg1), PyGLM_Qua_PTI_Get1(double, arg2), a)); } } else { PyGLM_PTI_Init0(arg1, PyGLM_T_ANY_VEC | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_ANY_VEC | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_DT_FD); PyGLM_PTI_Init2(arg3, PyGLM_T_ANY_VEC | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, float, arg2) && PyGLM_Vec_PTI_Check2(2, float, arg3)) { return pack(glm::lerp(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, float, arg2), PyGLM_Vec_PTI_Get2(2, float, arg3))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, double, arg2) && PyGLM_Vec_PTI_Check2(2, double, arg3)) { return pack(glm::lerp(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, double, arg2), PyGLM_Vec_PTI_Get2(2, double, arg3))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2) && PyGLM_Vec_PTI_Check2(3, float, arg3)) { return pack(glm::lerp(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2), PyGLM_Vec_PTI_Get2(3, float, arg3))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2) && PyGLM_Vec_PTI_Check2(3, double, arg3)) { return pack(glm::lerp(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2), PyGLM_Vec_PTI_Get2(3, double, arg3))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, float, arg2) && PyGLM_Vec_PTI_Check2(4, float, arg3)) { return pack(glm::lerp(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, float, arg2), PyGLM_Vec_PTI_Get2(4, float, arg3))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, double, arg2) && PyGLM_Vec_PTI_Check2(4, double, arg3)) { return pack(glm::lerp(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, double, arg2), PyGLM_Vec_PTI_Get2(4, double, arg3))); } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for lerp()"); return NULL; } static PyObject* slerp_(PyObject*, PyObject * args) { PyObject *arg1, *arg2, *arg3; PyGLM_Arg_Unpack_3O(args, "slerp", arg1, arg2, arg3); if (PyGLM_Number_Check(arg3)) { PyGLM_PTI_Init0(arg1, PyGLM_T_QUA | PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_QUA | PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD); if (PyGLM_Qua_PTI_Check0(float, arg1) && PyGLM_Qua_PTI_Check1(float, arg2)) { return pack(glm::slerp(PyGLM_Qua_PTI_Get0(float, arg1), PyGLM_Qua_PTI_Get1(float, arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Qua_PTI_Check0(double, arg1) && PyGLM_Qua_PTI_Check1(double, arg2)) { return pack(glm::slerp(PyGLM_Qua_PTI_Get0(double, arg1), PyGLM_Qua_PTI_Get1(double, arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { return pack(glm::slerp(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2), PyGLM_Number_FromPyObject(arg3))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { return pack(glm::slerp(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2), PyGLM_Number_FromPyObject(arg3))); } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for slerp()"); return NULL; } PyGLM_MAKE_GLM_FUNC_Q(conjugate) PyDoc_STRVAR(conjugate_docstr, "conjugate(q: quat) -> quat\n" " Returns the `q` conjugate." ); PyDoc_STRVAR(lerp_docstr, "lerp(x: float, y: float, a: float) -> float\n" " Returns `x * (1.0 - a) + y * a`, i.e., the linear blend of `x` and `y` using the\n" " floating-point value `a`. The value for `a` is not restricted to the range `[0, 1]`.\n" "lerp(x: vecN, y: vecN, a: float) -> vecN\n" " Returns `x * (1.0 - a) + y * a`, i.e., the linear blend of `x` and `y` using the\n" " floating-point value `a`. The value for `a` is not restricted to the range `[0, 1]`.\n" "lerp(x: vecN, y: vecN, a: vecN) -> vecN\n" " Returns `x * (1.0 - a) + y * a`, i.e., the linear blend of `x` and `y` using the\n" " vector `a`. The value for `a` is not restricted to the range `[0, 1]`.\n" "lerp(x: quat, y: quat, a: float) -> quat\n" " Linear interpolation of two quaternions. The interpolation is oriented." ); PyDoc_STRVAR(slerp_docstr, "slerp(x: quat, y: quat, a: float) -> quat\n" " Spherical linear interpolation of two quaternions. The interpolation always take the short\n" " path and the rotation is performed at constant speed.\n" "slerp(x: vec3, y: vec3, a: float) -> vec3\n" " Returns Spherical interpolation between two vectors." ); #define QUATERNION_COMMON_METHODS \ { "lerp", (PyCFunction)lerp_, METH_VARARGS, lerp_docstr }, \ { "slerp", (PyCFunction)slerp_, METH_VARARGS, slerp_docstr }, \ { "conjugate", (PyCFunction)conjugate_, METH_O, conjugate_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/stable_extensions/quaternion_trigonometric.h000066400000000000000000000026601511156275200323570ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" #include "../function_generator_macros.h" PyGLM_MAKE_GLM_FUNC_Q(angle) PyGLM_MAKE_GLM_FUNC_Q(axis) static PyObject* angleAxis_(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "angleAxis", arg1, arg2); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD); if (PyGLM_Number_Check(arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { return pack(glm::angleAxis(PyGLM_Number_FromPyObject(arg1), PyGLM_Vec_PTI_Get1(3, float, arg2))); } if (PyGLM_Number_Check(arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { return pack(glm::angleAxis(PyGLM_Number_FromPyObject(arg1), PyGLM_Vec_PTI_Get1(3, double, arg2))); } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for angleAxis()"); return NULL; } PyDoc_STRVAR(angle_docstr, "angle(x: quat) -> float\n" " Returns the quaternion rotation angle." ); PyDoc_STRVAR(angleAxis_docstr, "angleAxis(angle: float, axis: vec3) -> quat\n" " Build a quaternion from an angle and a normalized axis." ); PyDoc_STRVAR(axis_docstr, "axis(x: quat) -> vec3\n" " Returns the `q` rotation axis." ); #define QUATERNION_TRIGONOMETRIC_METHODS \ { "angle", (PyCFunction)angle_, METH_O, angle_docstr }, \ { "axis", (PyCFunction)axis_, METH_O, axis_docstr }, \ { "angleAxis", (PyCFunction)angleAxis_, METH_VARARGS, angleAxis_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/stable_extensions/random.h000066400000000000000000000101501511156275200264760ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" #include "../function_generator_macros.h" PyGLM_MAKE_GLM_FUNC_NN_VV__tGPL(linearRand) PyGLM_MAKE_GLM_FUNC_NN_VV__tGPL(gaussRand) static PyObject* circularRand_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { float f = PyGLM_Number_AsFloat(arg); if (f <= 0) { PyErr_SetString(PyExc_ValueError, "circularRand() requires a Radius greater than 0"); return NULL; } return pack(glm::circularRand(f)); } PyGLM_TYPEERROR_O("invalid argument type for circularRand(): ", arg); return NULL; } static PyObject* sphericalRand_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { float f = PyGLM_Number_AsFloat(arg); if (f <= 0) { PyErr_SetString(PyExc_ValueError, "sphericalRand() requires a Radius greater than 0"); return NULL; } return pack(glm::sphericalRand(f)); } PyGLM_TYPEERROR_O("invalid argument type for sphericalRand(): ", arg); return NULL; } static PyObject* diskRand_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { float f = PyGLM_Number_AsFloat(arg); if (f <= 0) { PyErr_SetString(PyExc_ValueError, "diskRand() requires a Radius greater than 0"); return NULL; } return pack(glm::diskRand(f)); } PyGLM_TYPEERROR_O("invalid argument type for diskRand(): ", arg); return NULL; } static PyObject* ballRand_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { float f = PyGLM_Number_AsFloat(arg); if (f <= 0) { PyErr_SetString(PyExc_ValueError, "ballRand() requires a Radius greater than 0"); return NULL; } return pack(glm::ballRand(f)); } PyGLM_TYPEERROR_O("invalid argument type for ballRand(): ", arg); return NULL; } static PyObject* setSeed_(PyObject*, PyObject* arg) { if (PyLong_Check(arg)) { unsigned long seed = PyLong_AsUnsignedLong(arg); std::srand(seed); Py_RETURN_NONE; } PyGLM_TYPEERROR_O("invalid argument type for setSeed(): ", arg); return NULL; } PyDoc_STRVAR(ballRand_docstr, "ballRand(Radius: float) -> vec3\n" " Generate a random 3D vector which coordinates are regulary distributed within the volume of\n" " a ball of a given radius." ); PyDoc_STRVAR(circularRand_docstr, "circularRand(Radius: float) -> vec2\n" " Generate a random 2D vector which coordinates are regulary distributed on a circle of a\n" " given radius." ); PyDoc_STRVAR(diskRand_docstr, "diskRand(Radius: float) -> vec2\n" " Generate a random 2D vector which coordinates are regulary distributed within the area of\n" " a disk of a given radius." ); PyDoc_STRVAR(gaussRand_docstr, "gaussRand(Mean: float, Deviation: float) -> float\n" " Generate random numbers in the interval `[Min, Max]`, according a gaussian distribution.\n" "gaussRand(Mean: vecN, Deviation: vecN) -> vecN\n" " Generate random numbers in the interval `[Min, Max]`, according a gaussian distribution." ); PyDoc_STRVAR(linearRand_docstr, "linearRand(Min: float, Max: float) -> float\n" " Generate random numbers in the interval `[Min, Max]`, according a linear distribution.\n" "linearRand(Min: vecN, Max: vecN) -> vecN\n" " Generate random numbers in the interval `[Min, Max]`, according a linear distribution." ); PyDoc_STRVAR(sphericalRand_docstr, "sphericalRand(Radius: float) -> vec3\n" " Generate a random 3D vector which coordinates are regulary distributed on a sphere of a\n" " given radius." ); PyDoc_STRVAR(setSeed_docstr, "setSeed(seed: int) -> None\n" " Sets the seed fot the pseudo-random number generator used by the -Rand functions.\n" " The seed needs to be greater or equal to zero.\n" " Default seed is `1`.\n" ); #define RANDOM_METHODS \ { "linearRand", (PyCFunction)linearRand_, METH_VARARGS, linearRand_docstr }, \ { "gaussRand", (PyCFunction)gaussRand_, METH_VARARGS, gaussRand_docstr }, \ { "circularRand", (PyCFunction)circularRand_, METH_O, circularRand_docstr }, \ { "sphericalRand", (PyCFunction)sphericalRand_, METH_O, sphericalRand_docstr }, \ { "diskRand", (PyCFunction)diskRand_, METH_O, diskRand_docstr }, \ { "ballRand", (PyCFunction)ballRand_, METH_O, ballRand_docstr }, \ { "setSeed", (PyCFunction)setSeed_, METH_O, setSeed_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/stable_extensions/reciprocal.h000066400000000000000000000045251511156275200273520ustar00rootroot00000000000000#pragma once #include "../function_generator_macros.h" PyGLM_MAKE_GLM_FUNC_N_V__tfF(sec) PyGLM_MAKE_GLM_FUNC_N_V__tfF(csc) PyGLM_MAKE_GLM_FUNC_N_V__tfF(cot) PyGLM_MAKE_GLM_FUNC_N_V__tfF(asec) PyGLM_MAKE_GLM_FUNC_N_V__tfF(acsc) PyGLM_MAKE_GLM_FUNC_N_V__tfF(acot) PyGLM_MAKE_GLM_FUNC_N_V__tfF(sech) PyGLM_MAKE_GLM_FUNC_N_V__tfF(csch) PyGLM_MAKE_GLM_FUNC_N_V__tfF(coth) PyGLM_MAKE_GLM_FUNC_N_V__tfF(asech) PyGLM_MAKE_GLM_FUNC_N_V__tfF(acsch) PyGLM_MAKE_GLM_FUNC_N_V__tfF(acoth) PyDoc_STRVAR(acot_docstr, "acot(x: float) -> float\n" " Inverse cotangent function." ); PyDoc_STRVAR(acoth_docstr, "acoth(x: float) -> float\n" " Inverse cotangent hyperbolic function." ); PyDoc_STRVAR(acsc_docstr, "acsc(x: float) -> float\n" " Inverse cosecant function." ); PyDoc_STRVAR(acsch_docstr, "acsch(x: float) -> float\n" " Inverse cosecant hyperbolic function." ); PyDoc_STRVAR(asec_docstr, "asec(x: float) -> float\n" " Inverse secant function." ); PyDoc_STRVAR(asech_docstr, "asech(x: float) -> float\n" " Inverse secant hyperbolic function." ); PyDoc_STRVAR(cot_docstr, "cot(angle: float) -> float\n" " Cotangent function. adjacent / opposite or `1 / tan(x)`." ); PyDoc_STRVAR(coth_docstr, "coth(angle: float) -> float\n" " Cotangent hyperbolic function." ); PyDoc_STRVAR(csc_docstr, "csc(angle: float) -> float\n" " Cosecant function. hypotenuse / opposite or `1 / sin(x)`." ); PyDoc_STRVAR(csch_docstr, "csch(angle: float) -> float\n" " Cosecant hyperbolic function." ); PyDoc_STRVAR(sec_docstr, "sec(angle: float) -> float\n" " Secant function. hypotenuse / adjacent or `1 / cos(x)`." ); PyDoc_STRVAR(sech_docstr, "sech(angle: float) -> float\n" " Secant hyperbolic function." ); #define RECIPROCAL_METHODS \ { "sec", (PyCFunction)sec_, METH_O, sec_docstr }, \ { "csc", (PyCFunction)csc_, METH_O, csc_docstr }, \ { "cot", (PyCFunction)cot_, METH_O, cot_docstr }, \ { "asec", (PyCFunction)asec_, METH_O, asec_docstr }, \ { "acsc", (PyCFunction)acsc_, METH_O, acsc_docstr }, \ { "acot", (PyCFunction)acot_, METH_O, acot_docstr }, \ { "sech", (PyCFunction)sech_, METH_O, sech_docstr }, \ { "csch", (PyCFunction)csch_, METH_O, csch_docstr }, \ { "coth", (PyCFunction)coth_, METH_O, coth_docstr }, \ { "asech", (PyCFunction)asech_, METH_O, asech_docstr }, \ { "acsch", (PyCFunction)acsch_, METH_O, acsch_docstr }, \ { "acoth", (PyCFunction)acoth_, METH_O, acoth_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/stable_extensions/round.h000066400000000000000000000502411511156275200263520ustar00rootroot00000000000000#pragma once #include "../function_generator_macros.h" //TODO: Fix the supported types (should not be restricted to int) //PyGLM_MAKE_GLM_FUNC_N_V__tiqsu(isPowerOfTwo); PyGLM_MAKE_GLM_FUNC_N_V__tiqsu(ceilPowerOfTwo); PyGLM_MAKE_GLM_FUNC_N_V__tiqsu(floorPowerOfTwo); PyGLM_MAKE_GLM_FUNC_N_V__tiqsu(roundPowerOfTwo); static PyObject* ceilMultiple_(PyObject*, PyObject* args) { PyObject *arg1, *arg2; PyGLM_Arg_Unpack_2O(args, "ceilMultiple", arg1, arg2); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { int64 o2 = PyGLM_Number_FromPyObject(arg2); PyGLM_ASSERT((o2 > 0), "Invalid Multiple. Must be positive"); return pack(glm::ceilMultiple(PyGLM_Number_FromPyObject(arg1), o2)); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_INT | PyGLM_DT_INT64 | PyGLM_DT_INT16 | PyGLM_DT_INT8); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_INT | PyGLM_DT_INT64 | PyGLM_DT_INT16 | PyGLM_DT_INT8); if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2)) { PyGLM_Vec_PTI_Assign1(1, int); PyGLM_ASSERT(glm::all(glm::greaterThan(o2, glm::vec<1, int>(0))), "Invalid Multiple. Must be positive"); return pack(glm::ceilMultiple(PyGLM_Vec_PTI_Get0(1, int, arg1), o2)); } if (PyGLM_Vec_PTI_Check0(1, int64, arg1) && PyGLM_Vec_PTI_Check1(1, int64, arg2)) { PyGLM_Vec_PTI_Assign1(1, int64); PyGLM_ASSERT(glm::all(glm::greaterThan(o2, glm::vec<1, int64>(0))), "Invalid Multiple. Must be positive"); return pack(glm::ceilMultiple(PyGLM_Vec_PTI_Get0(1, int64, arg1), PyGLM_Vec_PTI_Get1(1, int64, arg2))); } if (PyGLM_Vec_PTI_Check0(1, int16, arg1) && PyGLM_Vec_PTI_Check1(1, int16, arg2)) { PyGLM_Vec_PTI_Assign1(1, int16); PyGLM_ASSERT(glm::all(glm::greaterThan(o2, glm::vec<1, int16>(0))), "Invalid Multiple. Must be positive"); return pack(glm::ceilMultiple(PyGLM_Vec_PTI_Get0(1, int16, arg1), PyGLM_Vec_PTI_Get1(1, int16, arg2))); } if (PyGLM_Vec_PTI_Check0(1, int8, arg1) && PyGLM_Vec_PTI_Check1(1, int8, arg2)) { PyGLM_Vec_PTI_Assign1(1, int8); PyGLM_ASSERT(glm::all(glm::greaterThan(o2, glm::vec<1, int8>(0))), "Invalid Multiple. Must be positive"); return pack(glm::ceilMultiple(PyGLM_Vec_PTI_Get0(1, int8, arg1), PyGLM_Vec_PTI_Get1(1, int8, arg2))); } if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2)) { PyGLM_Vec_PTI_Assign1(2, int); PyGLM_ASSERT(glm::all(glm::greaterThan(o2, glm::vec<2, int>(0))), "Invalid Multiple. Must be positive"); return pack(glm::ceilMultiple(PyGLM_Vec_PTI_Get0(2, int, arg1), o2)); } if (PyGLM_Vec_PTI_Check0(2, int64, arg1) && PyGLM_Vec_PTI_Check1(2, int64, arg2)) { PyGLM_Vec_PTI_Assign1(2, int64); PyGLM_ASSERT(glm::all(glm::greaterThan(o2, glm::vec<2, int64>(0))), "Invalid Multiple. Must be positive"); return pack(glm::ceilMultiple(PyGLM_Vec_PTI_Get0(2, int64, arg1), PyGLM_Vec_PTI_Get1(2, int64, arg2))); } if (PyGLM_Vec_PTI_Check0(2, int16, arg1) && PyGLM_Vec_PTI_Check1(2, int16, arg2)) { PyGLM_Vec_PTI_Assign1(2, int16); PyGLM_ASSERT(glm::all(glm::greaterThan(o2, glm::vec<2, int16>(0))), "Invalid Multiple. Must be positive"); return pack(glm::ceilMultiple(PyGLM_Vec_PTI_Get0(2, int16, arg1), PyGLM_Vec_PTI_Get1(2, int16, arg2))); } if (PyGLM_Vec_PTI_Check0(2, int8, arg1) && PyGLM_Vec_PTI_Check1(2, int8, arg2)) { PyGLM_Vec_PTI_Assign1(2, int8); PyGLM_ASSERT(glm::all(glm::greaterThan(o2, glm::vec<2, int8>(0))), "Invalid Multiple. Must be positive"); return pack(glm::ceilMultiple(PyGLM_Vec_PTI_Get0(2, int8, arg1), PyGLM_Vec_PTI_Get1(2, int8, arg2))); } if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2)) { PyGLM_Vec_PTI_Assign1(3, int); PyGLM_ASSERT(glm::all(glm::greaterThan(o2, glm::vec<3, int>(0))), "Invalid Multiple. Must be positive"); return pack(glm::ceilMultiple(PyGLM_Vec_PTI_Get0(3, int, arg1), o2)); } if (PyGLM_Vec_PTI_Check0(3, int64, arg1) && PyGLM_Vec_PTI_Check1(3, int64, arg2)) { PyGLM_Vec_PTI_Assign1(3, int64); PyGLM_ASSERT(glm::all(glm::greaterThan(o2, glm::vec<3, int64>(0))), "Invalid Multiple. Must be positive"); return pack(glm::ceilMultiple(PyGLM_Vec_PTI_Get0(3, int64, arg1), PyGLM_Vec_PTI_Get1(3, int64, arg2))); } if (PyGLM_Vec_PTI_Check0(3, int16, arg1) && PyGLM_Vec_PTI_Check1(3, int16, arg2)) { PyGLM_Vec_PTI_Assign1(3, int16); PyGLM_ASSERT(glm::all(glm::greaterThan(o2, glm::vec<3, int16>(0))), "Invalid Multiple. Must be positive"); return pack(glm::ceilMultiple(PyGLM_Vec_PTI_Get0(3, int16, arg1), PyGLM_Vec_PTI_Get1(3, int16, arg2))); } if (PyGLM_Vec_PTI_Check0(3, int8, arg1) && PyGLM_Vec_PTI_Check1(3, int8, arg2)) { PyGLM_Vec_PTI_Assign1(3, int8); PyGLM_ASSERT(glm::all(glm::greaterThan(o2, glm::vec<3, int8>(0))), "Invalid Multiple. Must be positive"); return pack(glm::ceilMultiple(PyGLM_Vec_PTI_Get0(3, int8, arg1), PyGLM_Vec_PTI_Get1(3, int8, arg2))); } if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2)) { PyGLM_Vec_PTI_Assign1(4, int); PyGLM_ASSERT(glm::all(glm::greaterThan(o2, glm::vec<4, int>(0))), "Invalid Multiple. Must be positive"); return pack(glm::ceilMultiple(PyGLM_Vec_PTI_Get0(4, int, arg1), o2)); } if (PyGLM_Vec_PTI_Check0(4, int64, arg1) && PyGLM_Vec_PTI_Check1(4, int64, arg2)) { PyGLM_Vec_PTI_Assign1(4, int64); PyGLM_ASSERT(glm::all(glm::greaterThan(o2, glm::vec<4, int64>(0))), "Invalid Multiple. Must be positive"); return pack(glm::ceilMultiple(PyGLM_Vec_PTI_Get0(4, int64, arg1), PyGLM_Vec_PTI_Get1(4, int64, arg2))); } if (PyGLM_Vec_PTI_Check0(4, int16, arg1) && PyGLM_Vec_PTI_Check1(4, int16, arg2)) { PyGLM_Vec_PTI_Assign1(4, int16); PyGLM_ASSERT(glm::all(glm::greaterThan(o2, glm::vec<4, int16>(0))), "Invalid Multiple. Must be positive"); return pack(glm::ceilMultiple(PyGLM_Vec_PTI_Get0(4, int16, arg1), PyGLM_Vec_PTI_Get1(4, int16, arg2))); } if (PyGLM_Vec_PTI_Check0(4, int8, arg1) && PyGLM_Vec_PTI_Check1(4, int8, arg2)) { PyGLM_Vec_PTI_Assign1(4, int8); PyGLM_ASSERT(glm::all(glm::greaterThan(o2, glm::vec<4, int8>(0))), "Invalid Multiple. Must be positive"); return pack(glm::ceilMultiple(PyGLM_Vec_PTI_Get0(4, int8, arg1), PyGLM_Vec_PTI_Get1(4, int8, arg2))); } PyGLM_TYPEERROR_2O("invalid argument type(s) for ceilMultiple(): ", arg1, arg2); return NULL; } static PyObject* floorMultiple_(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "floorMultiple", arg1, arg2); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { int64 o2 = PyGLM_Number_FromPyObject(arg2); PyGLM_ASSERT((o2 != 0), "Invalid Multiple. Must not be zero"); return pack(glm::floorMultiple(PyGLM_Number_FromPyObject(arg1), o2)); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_INT | PyGLM_DT_INT64 | PyGLM_DT_INT16 | PyGLM_DT_INT8); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_INT | PyGLM_DT_INT64 | PyGLM_DT_INT16 | PyGLM_DT_INT8); if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2)) { PyGLM_Vec_PTI_Assign1(1, int); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<1, int>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::floorMultiple(PyGLM_Vec_PTI_Get0(1, int, arg1), o2)); } if (PyGLM_Vec_PTI_Check0(1, int64, arg1) && PyGLM_Vec_PTI_Check1(1, int64, arg2)) { PyGLM_Vec_PTI_Assign1(1, int64); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<1, int64>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::floorMultiple(PyGLM_Vec_PTI_Get0(1, int64, arg1), PyGLM_Vec_PTI_Get1(1, int64, arg2))); } if (PyGLM_Vec_PTI_Check0(1, int16, arg1) && PyGLM_Vec_PTI_Check1(1, int16, arg2)) { PyGLM_Vec_PTI_Assign1(1, int16); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<1, int16>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::floorMultiple(PyGLM_Vec_PTI_Get0(1, int16, arg1), PyGLM_Vec_PTI_Get1(1, int16, arg2))); } if (PyGLM_Vec_PTI_Check0(1, int8, arg1) && PyGLM_Vec_PTI_Check1(1, int8, arg2)) { PyGLM_Vec_PTI_Assign1(1, int8); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<1, int8>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::floorMultiple(PyGLM_Vec_PTI_Get0(1, int8, arg1), PyGLM_Vec_PTI_Get1(1, int8, arg2))); } if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2)) { PyGLM_Vec_PTI_Assign1(2, int); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<2, int>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::floorMultiple(PyGLM_Vec_PTI_Get0(2, int, arg1), o2)); } if (PyGLM_Vec_PTI_Check0(2, int64, arg1) && PyGLM_Vec_PTI_Check1(2, int64, arg2)) { PyGLM_Vec_PTI_Assign1(2, int64); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<2, int64>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::floorMultiple(PyGLM_Vec_PTI_Get0(2, int64, arg1), PyGLM_Vec_PTI_Get1(2, int64, arg2))); } if (PyGLM_Vec_PTI_Check0(2, int16, arg1) && PyGLM_Vec_PTI_Check1(2, int16, arg2)) { PyGLM_Vec_PTI_Assign1(2, int16); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<2, int16>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::floorMultiple(PyGLM_Vec_PTI_Get0(2, int16, arg1), PyGLM_Vec_PTI_Get1(2, int16, arg2))); } if (PyGLM_Vec_PTI_Check0(2, int8, arg1) && PyGLM_Vec_PTI_Check1(2, int8, arg2)) { PyGLM_Vec_PTI_Assign1(2, int8); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<2, int8>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::floorMultiple(PyGLM_Vec_PTI_Get0(2, int8, arg1), PyGLM_Vec_PTI_Get1(2, int8, arg2))); } if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2)) { PyGLM_Vec_PTI_Assign1(3, int); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<3, int>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::floorMultiple(PyGLM_Vec_PTI_Get0(3, int, arg1), o2)); } if (PyGLM_Vec_PTI_Check0(3, int64, arg1) && PyGLM_Vec_PTI_Check1(3, int64, arg2)) { PyGLM_Vec_PTI_Assign1(3, int64); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<3, int64>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::floorMultiple(PyGLM_Vec_PTI_Get0(3, int64, arg1), PyGLM_Vec_PTI_Get1(3, int64, arg2))); } if (PyGLM_Vec_PTI_Check0(3, int16, arg1) && PyGLM_Vec_PTI_Check1(3, int16, arg2)) { PyGLM_Vec_PTI_Assign1(3, int16); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<3, int16>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::floorMultiple(PyGLM_Vec_PTI_Get0(3, int16, arg1), PyGLM_Vec_PTI_Get1(3, int16, arg2))); } if (PyGLM_Vec_PTI_Check0(3, int8, arg1) && PyGLM_Vec_PTI_Check1(3, int8, arg2)) { PyGLM_Vec_PTI_Assign1(3, int8); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<3, int8>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::floorMultiple(PyGLM_Vec_PTI_Get0(3, int8, arg1), PyGLM_Vec_PTI_Get1(3, int8, arg2))); } if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2)) { PyGLM_Vec_PTI_Assign1(4, int); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<4, int>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::floorMultiple(PyGLM_Vec_PTI_Get0(4, int, arg1), o2)); } if (PyGLM_Vec_PTI_Check0(4, int64, arg1) && PyGLM_Vec_PTI_Check1(4, int64, arg2)) { PyGLM_Vec_PTI_Assign1(4, int64); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<4, int64>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::floorMultiple(PyGLM_Vec_PTI_Get0(4, int64, arg1), PyGLM_Vec_PTI_Get1(4, int64, arg2))); } if (PyGLM_Vec_PTI_Check0(4, int16, arg1) && PyGLM_Vec_PTI_Check1(4, int16, arg2)) { PyGLM_Vec_PTI_Assign1(4, int16); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<4, int16>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::floorMultiple(PyGLM_Vec_PTI_Get0(4, int16, arg1), PyGLM_Vec_PTI_Get1(4, int16, arg2))); } if (PyGLM_Vec_PTI_Check0(4, int8, arg1) && PyGLM_Vec_PTI_Check1(4, int8, arg2)) { PyGLM_Vec_PTI_Assign1(4, int8); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<4, int8>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::floorMultiple(PyGLM_Vec_PTI_Get0(4, int8, arg1), PyGLM_Vec_PTI_Get1(4, int8, arg2))); } PyGLM_TYPEERROR_2O("invalid argument type(s) for floorMultiple(): ", arg1, arg2); return NULL; } static PyObject* roundMultiple_(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "roundMultiple", arg1, arg2); if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { int64 o2 = PyGLM_Number_FromPyObject(arg2); PyGLM_ASSERT((o2 != 0), "Invalid Multiple. Must not be zero"); return pack(glm::roundMultiple(PyGLM_Number_FromPyObject(arg1), o2)); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_INT | PyGLM_DT_INT64 | PyGLM_DT_INT16 | PyGLM_DT_INT8); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_INT | PyGLM_DT_INT64 | PyGLM_DT_INT16 | PyGLM_DT_INT8); if (PyGLM_Vec_PTI_Check0(1, int, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2)) { PyGLM_Vec_PTI_Assign1(1, int); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<1, int>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::roundMultiple(PyGLM_Vec_PTI_Get0(1, int, arg1), o2)); } if (PyGLM_Vec_PTI_Check0(1, int64, arg1) && PyGLM_Vec_PTI_Check1(1, int64, arg2)) { PyGLM_Vec_PTI_Assign1(1, int64); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<1, int64>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::roundMultiple(PyGLM_Vec_PTI_Get0(1, int64, arg1), PyGLM_Vec_PTI_Get1(1, int64, arg2))); } if (PyGLM_Vec_PTI_Check0(1, int16, arg1) && PyGLM_Vec_PTI_Check1(1, int16, arg2)) { PyGLM_Vec_PTI_Assign1(1, int16); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<1, int16>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::roundMultiple(PyGLM_Vec_PTI_Get0(1, int16, arg1), PyGLM_Vec_PTI_Get1(1, int16, arg2))); } if (PyGLM_Vec_PTI_Check0(1, int8, arg1) && PyGLM_Vec_PTI_Check1(1, int8, arg2)) { PyGLM_Vec_PTI_Assign1(1, int8); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<1, int8>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::roundMultiple(PyGLM_Vec_PTI_Get0(1, int8, arg1), PyGLM_Vec_PTI_Get1(1, int8, arg2))); } if (PyGLM_Vec_PTI_Check0(2, int, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2)) { PyGLM_Vec_PTI_Assign1(2, int); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<2, int>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::roundMultiple(PyGLM_Vec_PTI_Get0(2, int, arg1), o2)); } if (PyGLM_Vec_PTI_Check0(2, int64, arg1) && PyGLM_Vec_PTI_Check1(2, int64, arg2)) { PyGLM_Vec_PTI_Assign1(2, int64); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<2, int64>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::roundMultiple(PyGLM_Vec_PTI_Get0(2, int64, arg1), PyGLM_Vec_PTI_Get1(2, int64, arg2))); } if (PyGLM_Vec_PTI_Check0(2, int16, arg1) && PyGLM_Vec_PTI_Check1(2, int16, arg2)) { PyGLM_Vec_PTI_Assign1(2, int16); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<2, int16>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::roundMultiple(PyGLM_Vec_PTI_Get0(2, int16, arg1), PyGLM_Vec_PTI_Get1(2, int16, arg2))); } if (PyGLM_Vec_PTI_Check0(2, int8, arg1) && PyGLM_Vec_PTI_Check1(2, int8, arg2)) { PyGLM_Vec_PTI_Assign1(2, int8); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<2, int8>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::roundMultiple(PyGLM_Vec_PTI_Get0(2, int8, arg1), PyGLM_Vec_PTI_Get1(2, int8, arg2))); } if (PyGLM_Vec_PTI_Check0(3, int, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2)) { PyGLM_Vec_PTI_Assign1(3, int); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<3, int>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::roundMultiple(PyGLM_Vec_PTI_Get0(3, int, arg1), o2)); } if (PyGLM_Vec_PTI_Check0(3, int64, arg1) && PyGLM_Vec_PTI_Check1(3, int64, arg2)) { PyGLM_Vec_PTI_Assign1(3, int64); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<3, int64>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::roundMultiple(PyGLM_Vec_PTI_Get0(3, int64, arg1), PyGLM_Vec_PTI_Get1(3, int64, arg2))); } if (PyGLM_Vec_PTI_Check0(3, int16, arg1) && PyGLM_Vec_PTI_Check1(3, int16, arg2)) { PyGLM_Vec_PTI_Assign1(3, int16); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<3, int16>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::roundMultiple(PyGLM_Vec_PTI_Get0(3, int16, arg1), PyGLM_Vec_PTI_Get1(3, int16, arg2))); } if (PyGLM_Vec_PTI_Check0(3, int8, arg1) && PyGLM_Vec_PTI_Check1(3, int8, arg2)) { PyGLM_Vec_PTI_Assign1(3, int8); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<3, int8>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::roundMultiple(PyGLM_Vec_PTI_Get0(3, int8, arg1), PyGLM_Vec_PTI_Get1(3, int8, arg2))); } if (PyGLM_Vec_PTI_Check0(4, int, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2)) { PyGLM_Vec_PTI_Assign1(4, int); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<4, int>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::roundMultiple(PyGLM_Vec_PTI_Get0(4, int, arg1), o2)); } if (PyGLM_Vec_PTI_Check0(4, int64, arg1) && PyGLM_Vec_PTI_Check1(4, int64, arg2)) { PyGLM_Vec_PTI_Assign1(4, int64); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<4, int64>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::roundMultiple(PyGLM_Vec_PTI_Get0(4, int64, arg1), PyGLM_Vec_PTI_Get1(4, int64, arg2))); } if (PyGLM_Vec_PTI_Check0(4, int16, arg1) && PyGLM_Vec_PTI_Check1(4, int16, arg2)) { PyGLM_Vec_PTI_Assign1(4, int16); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<4, int16>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::roundMultiple(PyGLM_Vec_PTI_Get0(4, int16, arg1), PyGLM_Vec_PTI_Get1(4, int16, arg2))); } if (PyGLM_Vec_PTI_Check0(4, int8, arg1) && PyGLM_Vec_PTI_Check1(4, int8, arg2)) { PyGLM_Vec_PTI_Assign1(4, int8); PyGLM_ASSERT(glm::all(glm::notEqual(o2, glm::vec<4, int8>(0))), "Invalid Multiple. Must not be zero"); return pack(glm::roundMultiple(PyGLM_Vec_PTI_Get0(4, int8, arg1), PyGLM_Vec_PTI_Get1(4, int8, arg2))); } PyGLM_TYPEERROR_2O("invalid argument type(s) for roundMultiple(): ", arg1, arg2); return NULL; } PyDoc_STRVAR(ceilMultiple_docstr, "ceilMultiple(v: number, Multiple: number) -> number\n" " Higher multiple number of Source.\n" "ceilMultiple(v: vecN, Multiple: vecN) -> vecN\n" " Higher multiple number of Source." ); PyDoc_STRVAR(ceilPowerOfTwo_docstr, "ceilPowerOfTwo(v: number) -> number\n" " Return the power of two number which value is just higher the input value, round up to a\n" " power of two.\n" "ceilPowerOfTwo(v: vecN) -> vecN\n" " Return the power of two number which value is just higher the input value, round up to a\n" " power of two." ); PyDoc_STRVAR(floorMultiple_docstr, "floorMultiple(v: number, Multiple: number) -> number\n" " Lower multiple number of Source.\n" "floorMultiple(v: vecN, Multiple: vecN) -> vecN\n" " Lower multiple number of Source." ); PyDoc_STRVAR(floorPowerOfTwo_docstr, "floorPowerOfTwo(v: number) -> number\n" " Return the power of two number which value is just lower the input value, round down to a\n" " power of two.\n" "floorPowerOfTwo(v: vecN) -> vecN\n" " Return the power of two number which value is just lower the input value, round down to a\n" " power of two." ); PyDoc_STRVAR(roundMultiple_docstr, "roundMultiple(v: number, Multiple: number) -> number\n" " Lower multiple number of Source.\n" "roundMultiple(v: vecN, Multiple: vecN) -> vecN\n" " Lower multiple number of Source." ); PyDoc_STRVAR(roundPowerOfTwo_docstr, "roundPowerOfTwo(v: number) -> number\n" " Return the power of two number which value is the closet to the input value.\n" "roundPowerOfTwo(v: vecN) -> vecN\n" " Return the power of two number which value is the closet to the input value." ); #define ROUND_METHODS \ /*{ "isPowerOfTwo", (PyCFunction)isPowerOfTwo_, METH_O, "isPowerOfTwo(v) -> bool or bvecn\nReturn true if the value is a power of two number." },*/ \ { "ceilPowerOfTwo", (PyCFunction)ceilPowerOfTwo_, METH_O, ceilPowerOfTwo_docstr }, \ { "floorPowerOfTwo", (PyCFunction)floorPowerOfTwo_, METH_O, floorPowerOfTwo_docstr }, \ { "roundPowerOfTwo", (PyCFunction)roundPowerOfTwo_, METH_O, roundPowerOfTwo_docstr }, \ /*{ "isMultiple", (PyCFunction)isMultiple_, METH_VARARGS, "isMultiple(v, Multiple) -> bool or bvecn\nReturn true if the 'Value' is a multiple of 'Multiple'." }, */ \ { "ceilMultiple", (PyCFunction)ceilMultiple_, METH_VARARGS, ceilMultiple_docstr }, \ { "floorMultiple", (PyCFunction)floorMultiple_, METH_VARARGS, floorMultiple_docstr }, \ { "roundMultiple", (PyCFunction)roundMultiple_, METH_VARARGS, roundMultiple_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/stable_extensions/type_ptr.h000066400000000000000000000663741511156275200271070ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" static PyObject* sizeof_(PyObject*, PyObject* arg) { PyObject* argAsType = (PyType_Check(arg)) ? arg : (PyObject*)Py_TYPE(arg); destructor& arg_dealloc = ((PyTypeObject*)argAsType)->tp_dealloc; if (arg_dealloc == ctypes_dealloc) { if (argAsType == ctypes_float) { return PyLong_FromLong(sizeof(float)); } if (argAsType == ctypes_double) { return PyLong_FromLong(sizeof(double)); } if (argAsType == ctypes_int64) { return PyLong_FromLong(sizeof(int64)); } if (argAsType == ctypes_int32) { return PyLong_FromLong(sizeof(int32)); } if (argAsType == ctypes_int16) { return PyLong_FromLong(sizeof(int16)); } if (argAsType == ctypes_int8) { return PyLong_FromLong(sizeof(int8)); } if (argAsType == ctypes_uint64) { return PyLong_FromLong(sizeof(uint64)); } if (argAsType == ctypes_uint32) { return PyLong_FromLong(sizeof(uint32)); } if (argAsType == ctypes_uint16) { return PyLong_FromLong(sizeof(uint16)); } if (argAsType == ctypes_uint8) { return PyLong_FromLong(sizeof(uint8)); } if (argAsType == ctypes_bool) { return PyLong_FromLong(sizeof(bool)); } } if (arg_dealloc == vec_dealloc) { if (argAsType == (PyObject*)&hfvec4Type) { return PyLong_FromLong(sizeof(glm::vec<4, float>)); } if (argAsType == (PyObject*)&hdvec4Type) { return PyLong_FromLong(sizeof(glm::vec<4, double>)); } if (argAsType == (PyObject*)&hivec4Type) { return PyLong_FromLong(sizeof(glm::vec<4, int>)); } if (argAsType == (PyObject*)&huvec4Type) { return PyLong_FromLong(sizeof(glm::vec<4, glm::uint>)); } if (argAsType == (PyObject*)&hfvec3Type) { return PyLong_FromLong(sizeof(glm::vec<3, float>)); } if (argAsType == (PyObject*)&hdvec3Type) { return PyLong_FromLong(sizeof(glm::vec<3, double>)); } if (argAsType == (PyObject*)&hivec3Type) { return PyLong_FromLong(sizeof(glm::vec<3, int>)); } if (argAsType == (PyObject*)&huvec3Type) { return PyLong_FromLong(sizeof(glm::vec<3, glm::uint>)); } if (argAsType == (PyObject*)&hfvec2Type) { return PyLong_FromLong(sizeof(glm::vec<2, float>)); } if (argAsType == (PyObject*)&hdvec2Type) { return PyLong_FromLong(sizeof(glm::vec<2, double>)); } if (argAsType == (PyObject*)&hivec2Type) { return PyLong_FromLong(sizeof(glm::vec<2, int>)); } if (argAsType == (PyObject*)&huvec2Type) { return PyLong_FromLong(sizeof(glm::vec<2, glm::uint>)); } if (argAsType == (PyObject*)&hfvec1Type) { return PyLong_FromLong(sizeof(glm::vec<1, float>)); } if (argAsType == (PyObject*)&hdvec1Type) { return PyLong_FromLong(sizeof(glm::vec<1, double>)); } if (argAsType == (PyObject*)&hivec1Type) { return PyLong_FromLong(sizeof(glm::vec<1, int>)); } if (argAsType == (PyObject*)&huvec1Type) { return PyLong_FromLong(sizeof(glm::vec<1, glm::uint>)); } if (argAsType == (PyObject*)&hi64vec1Type) { return PyLong_FromLong(sizeof(glm::vec<1, glm::i64>)); } if (argAsType == (PyObject*)&hu64vec1Type) { return PyLong_FromLong(sizeof(glm::vec<1, glm::u64>)); } if (argAsType == (PyObject*)&hi16vec1Type) { return PyLong_FromLong(sizeof(glm::vec<1, glm::i16>)); } if (argAsType == (PyObject*)&hu16vec1Type) { return PyLong_FromLong(sizeof(glm::vec<1, glm::u16>)); } if (argAsType == (PyObject*)&hi8vec1Type) { return PyLong_FromLong(sizeof(glm::vec<1, glm::i8>)); } if (argAsType == (PyObject*)&hu8vec1Type) { return PyLong_FromLong(sizeof(glm::vec<1, glm::u8>)); } if (argAsType == (PyObject*)&hbvec1Type) { return PyLong_FromLong(sizeof(glm::vec<1, bool>)); } if (argAsType == (PyObject*)&hi64vec2Type) { return PyLong_FromLong(sizeof(glm::vec<2, glm::i64>)); } if (argAsType == (PyObject*)&hu64vec2Type) { return PyLong_FromLong(sizeof(glm::vec<2, glm::u64>)); } if (argAsType == (PyObject*)&hi16vec2Type) { return PyLong_FromLong(sizeof(glm::vec<2, glm::i16>)); } if (argAsType == (PyObject*)&hu16vec2Type) { return PyLong_FromLong(sizeof(glm::vec<2, glm::u16>)); } if (argAsType == (PyObject*)&hi8vec2Type) { return PyLong_FromLong(sizeof(glm::vec<2, glm::i8>)); } if (argAsType == (PyObject*)&hu8vec2Type) { return PyLong_FromLong(sizeof(glm::vec<2, glm::u8>)); } if (argAsType == (PyObject*)&hbvec2Type) { return PyLong_FromLong(sizeof(glm::vec<2, bool>)); } if (argAsType == (PyObject*)&hi64vec3Type) { return PyLong_FromLong(sizeof(glm::vec<3, glm::i64>)); } if (argAsType == (PyObject*)&hu64vec3Type) { return PyLong_FromLong(sizeof(glm::vec<3, glm::u64>)); } if (argAsType == (PyObject*)&hi16vec3Type) { return PyLong_FromLong(sizeof(glm::vec<3, glm::i16>)); } if (argAsType == (PyObject*)&hu16vec3Type) { return PyLong_FromLong(sizeof(glm::vec<3, glm::u16>)); } if (argAsType == (PyObject*)&hi8vec3Type) { return PyLong_FromLong(sizeof(glm::vec<3, glm::i8>)); } if (argAsType == (PyObject*)&hu8vec3Type) { return PyLong_FromLong(sizeof(glm::vec<3, glm::u8>)); } if (argAsType == (PyObject*)&hbvec3Type) { return PyLong_FromLong(sizeof(glm::vec<3, bool>)); } if (argAsType == (PyObject*)&hi64vec4Type) { return PyLong_FromLong(sizeof(glm::vec<4, glm::i64>)); } if (argAsType == (PyObject*)&hu64vec4Type) { return PyLong_FromLong(sizeof(glm::vec<4, glm::u64>)); } if (argAsType == (PyObject*)&hi16vec4Type) { return PyLong_FromLong(sizeof(glm::vec<4, glm::i16>)); } if (argAsType == (PyObject*)&hu16vec4Type) { return PyLong_FromLong(sizeof(glm::vec<4, glm::u16>)); } if (argAsType == (PyObject*)&hi8vec4Type) { return PyLong_FromLong(sizeof(glm::vec<4, glm::i8>)); } if (argAsType == (PyObject*)&hu8vec4Type) { return PyLong_FromLong(sizeof(glm::vec<4, glm::u8>)); } if (argAsType == (PyObject*)&hbvec4Type) { return PyLong_FromLong(sizeof(glm::vec<4, bool>)); } } if (arg_dealloc == qua_dealloc) { if (argAsType == (PyObject*)&hfquaType) { return PyLong_FromLong(sizeof(glm::qua)); } if (argAsType == (PyObject*)&hdquaType) { return PyLong_FromLong(sizeof(glm::qua)); } } if (arg_dealloc == mat_dealloc) { if (argAsType == (PyObject*)&hfmat2x2Type) { return PyLong_FromLong(sizeof(glm::mat<2, 2, float>)); } if (argAsType == (PyObject*)&hdmat2x2Type) { return PyLong_FromLong(sizeof(glm::mat<2, 2, double>)); } if (argAsType == (PyObject*)&himat2x2Type) { return PyLong_FromLong(sizeof(glm::mat<2, 2, int>)); } if (argAsType == (PyObject*)&humat2x2Type) { return PyLong_FromLong(sizeof(glm::mat<2, 2, glm::uint>)); } if (argAsType == (PyObject*)&hfmat3x3Type) { return PyLong_FromLong(sizeof(glm::mat<3, 3, float>)); } if (argAsType == (PyObject*)&hdmat3x3Type) { return PyLong_FromLong(sizeof(glm::mat<3, 3, double>)); } if (argAsType == (PyObject*)&himat3x3Type) { return PyLong_FromLong(sizeof(glm::mat<3, 3, int>)); } if (argAsType == (PyObject*)&humat3x3Type) { return PyLong_FromLong(sizeof(glm::mat<3, 3, glm::uint>)); } if (argAsType == (PyObject*)&hfmat4x4Type) { return PyLong_FromLong(sizeof(glm::mat<4, 4, float>)); } if (argAsType == (PyObject*)&hdmat4x4Type) { return PyLong_FromLong(sizeof(glm::mat<4, 4, double>)); } if (argAsType == (PyObject*)&himat4x4Type) { return PyLong_FromLong(sizeof(glm::mat<4, 4, int>)); } if (argAsType == (PyObject*)&humat4x4Type) { return PyLong_FromLong(sizeof(glm::mat<4, 4, glm::uint>)); } if (argAsType == (PyObject*)&hfmat2x3Type) { return PyLong_FromLong(sizeof(glm::mat<2, 3, float>)); } if (argAsType == (PyObject*)&hdmat2x3Type) { return PyLong_FromLong(sizeof(glm::mat<2, 3, double>)); } if (argAsType == (PyObject*)&himat2x3Type) { return PyLong_FromLong(sizeof(glm::mat<2, 3, int>)); } if (argAsType == (PyObject*)&humat2x3Type) { return PyLong_FromLong(sizeof(glm::mat<2, 3, glm::uint>)); } if (argAsType == (PyObject*)&hfmat2x4Type) { return PyLong_FromLong(sizeof(glm::mat<2, 4, float>)); } if (argAsType == (PyObject*)&hdmat2x4Type) { return PyLong_FromLong(sizeof(glm::mat<2, 4, double>)); } if (argAsType == (PyObject*)&himat2x4Type) { return PyLong_FromLong(sizeof(glm::mat<2, 4, int>)); } if (argAsType == (PyObject*)&humat2x4Type) { return PyLong_FromLong(sizeof(glm::mat<2, 4, glm::uint>)); } if (argAsType == (PyObject*)&hfmat3x2Type) { return PyLong_FromLong(sizeof(glm::mat<3, 2, float>)); } if (argAsType == (PyObject*)&hdmat3x2Type) { return PyLong_FromLong(sizeof(glm::mat<3, 2, double>)); } if (argAsType == (PyObject*)&himat3x2Type) { return PyLong_FromLong(sizeof(glm::mat<3, 2, int>)); } if (argAsType == (PyObject*)&humat3x2Type) { return PyLong_FromLong(sizeof(glm::mat<3, 2, glm::uint>)); } if (argAsType == (PyObject*)&hfmat3x4Type) { return PyLong_FromLong(sizeof(glm::mat<3, 4, float>)); } if (argAsType == (PyObject*)&hdmat3x4Type) { return PyLong_FromLong(sizeof(glm::mat<3, 4, double>)); } if (argAsType == (PyObject*)&himat3x4Type) { return PyLong_FromLong(sizeof(glm::mat<3, 4, int>)); } if (argAsType == (PyObject*)&humat3x4Type) { return PyLong_FromLong(sizeof(glm::mat<3, 4, glm::uint>)); } if (argAsType == (PyObject*)&hfmat4x2Type) { return PyLong_FromLong(sizeof(glm::mat<4, 2, float>)); } if (argAsType == (PyObject*)&hdmat4x2Type) { return PyLong_FromLong(sizeof(glm::mat<4, 2, double>)); } if (argAsType == (PyObject*)&himat4x2Type) { return PyLong_FromLong(sizeof(glm::mat<4, 2, int>)); } if (argAsType == (PyObject*)&humat4x2Type) { return PyLong_FromLong(sizeof(glm::mat<4, 2, glm::uint>)); } if (argAsType == (PyObject*)&hfmat4x3Type) { return PyLong_FromLong(sizeof(glm::mat<4, 3, float>)); } if (argAsType == (PyObject*)&hdmat4x3Type) { return PyLong_FromLong(sizeof(glm::mat<4, 3, double>)); } if (argAsType == (PyObject*)&himat4x3Type) { return PyLong_FromLong(sizeof(glm::mat<4, 3, int>)); } if (argAsType == (PyObject*)&humat4x3Type) { return PyLong_FromLong(sizeof(glm::mat<4, 3, glm::uint>)); } } if (argAsType == (PyObject*)&glmArrayType) { if (PyType_Check(arg)) { PyErr_SetString(PyExc_ValueError, "The array class doesn't have a general size. Use an instance instead."); return NULL; } return PyLong_FromSsize_t(((glmArray*)arg)->nBytes); } PyGLM_TYPEERROR_O("sizeof() requires the argument to be a glm type, not ", arg); return NULL; } static PyObject* value_ptr_(PyObject*, PyObject* arg) { if (PyGLM_Is_PyGLM_Type(Py_TYPE(arg))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(arg)); char* data = pto->getDataOf(arg); switch (pto->format) { case get_format_specifier() : return PyGLM_ToCtypesP((float*)data); case get_format_specifier() : return PyGLM_ToCtypesP((double*)data); case get_format_specifier() : return PyGLM_ToCtypesP((int64*)data); case get_format_specifier() : return PyGLM_ToCtypesP((uint64*)data); case get_format_specifier() : return PyGLM_ToCtypesP((int32*)data); case get_format_specifier() : return PyGLM_ToCtypesP((uint32*)data); case get_format_specifier() : return PyGLM_ToCtypesP((int16*)data); case get_format_specifier() : return PyGLM_ToCtypesP((uint16*)data); case get_format_specifier() : return PyGLM_ToCtypesP((int8*)data); case get_format_specifier() : return PyGLM_ToCtypesP((uint8*)data); case get_format_specifier() : return PyGLM_ToCtypesP((bool*)data); } } PyGLM_TYPEERROR_O("value_ptr() requires the argument to be a glm type, not ", arg); return NULL; } static PyObject* make_vec2_(PyObject*, PyObject* arg) { if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_float_p)) { return pack(glm::make_vec2((float*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_double_p)) { return pack(glm::make_vec2((double*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_int32_p)) { return pack(glm::make_vec2((int*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_uint32_p)) { return pack(glm::make_vec2((glm::uint*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_int64_p)) { return pack(glm::make_vec2((glm::i64*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_uint64_p)) { return pack(glm::make_vec2((glm::u64*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_int16_p)) { return pack(glm::make_vec2((glm::i16*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_uint16_p)) { return pack(glm::make_vec2((glm::u16*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_int8_p)) { return pack(glm::make_vec2((glm::i8*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_uint8_p)) { return pack(glm::make_vec2((glm::u8*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_bool_p)) { return pack(glm::make_vec2((bool*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } PyGLM_TYPEERROR_O("make_vec2() requires a ctypes pointer as it's argument, not ", arg); return NULL; } static PyObject* make_vec3_(PyObject*, PyObject* arg) { if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_float_p)) { return pack(glm::make_vec3((float*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_double_p)) { return pack(glm::make_vec3((double*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_int32_p)) { return pack(glm::make_vec3((int*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_uint32_p)) { return pack(glm::make_vec3((glm::uint*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_int64_p)) { return pack(glm::make_vec3((glm::i64*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_uint64_p)) { return pack(glm::make_vec3((glm::u64*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_int16_p)) { return pack(glm::make_vec3((glm::i16*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_uint16_p)) { return pack(glm::make_vec3((glm::u16*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_int8_p)) { return pack(glm::make_vec3((glm::i8*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_uint8_p)) { return pack(glm::make_vec3((glm::u8*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_bool_p)) { return pack(glm::make_vec3((bool*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } PyGLM_TYPEERROR_O("make_vec3() requires a ctypes pointer as it's argument, not ", arg); return NULL; } static PyObject* make_vec4_(PyObject*, PyObject* arg) { if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_float_p)) { return pack(glm::make_vec4((float*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_double_p)) { return pack(glm::make_vec4((double*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_int32_p)) { return pack(glm::make_vec4((int*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_uint32_p)) { return pack(glm::make_vec4((glm::uint*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_int64_p)) { return pack(glm::make_vec4((glm::i64*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_uint64_p)) { return pack(glm::make_vec4((glm::u64*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_int16_p)) { return pack(glm::make_vec4((glm::i16*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_uint16_p)) { return pack(glm::make_vec4((glm::u16*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_int8_p)) { return pack(glm::make_vec4((glm::i8*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_uint8_p)) { return pack(glm::make_vec4((glm::u8*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_bool_p)) { return pack(glm::make_vec4((bool*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } PyGLM_TYPEERROR_O("make_vec4() requires a ctypes pointer as it's argument, not ", arg); return NULL; } static PyObject* make_mat2x2_(PyObject*, PyObject* arg) { if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_float_p)) { return pack(glm::make_mat2x2((float*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_double_p)) { return pack(glm::make_mat2x2((double*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_int32_p)) { return pack(glm::make_mat2x2((int*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_uint32_p)) { return pack(glm::make_mat2x2((glm::uint*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } PyGLM_TYPEERROR_O("make_mat2x2() requires a ctypes pointer as it's argument, not ", arg); return NULL; } static PyObject* make_mat2x3_(PyObject*, PyObject* arg) { if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_float_p)) { return pack(glm::make_mat2x3((float*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_double_p)) { return pack(glm::make_mat2x3((double*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_int32_p)) { return pack(glm::make_mat2x3((int*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_uint32_p)) { return pack(glm::make_mat2x3((glm::uint*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } PyGLM_TYPEERROR_O("make_mat2x3() requires a ctypes pointer as it's argument, not ", arg); return NULL; } static PyObject* make_mat2x4_(PyObject*, PyObject* arg) { if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_float_p)) { return pack(glm::make_mat2x4((float*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_double_p)) { return pack(glm::make_mat2x4((double*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_int32_p)) { return pack(glm::make_mat2x4((int*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_uint32_p)) { return pack(glm::make_mat2x4((glm::uint*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } PyGLM_TYPEERROR_O("make_mat2x4() requires a ctypes pointer as it's argument, not ", arg); return NULL; } static PyObject* make_mat3x2_(PyObject*, PyObject* arg) { if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_float_p)) { return pack(glm::make_mat3x2((float*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_double_p)) { return pack(glm::make_mat3x2((double*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_int32_p)) { return pack(glm::make_mat3x2((int*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_uint32_p)) { return pack(glm::make_mat3x2((glm::uint*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } PyGLM_TYPEERROR_O("make_mat3x2() requires a ctypes pointer as it's argument, not ", arg); return NULL; } static PyObject* make_mat3x3_(PyObject*, PyObject* arg) { if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_float_p)) { return pack(glm::make_mat3x3((float*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_double_p)) { return pack(glm::make_mat3x3((double*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_int32_p)) { return pack(glm::make_mat3x3((int*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_uint32_p)) { return pack(glm::make_mat3x3((glm::uint*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } PyGLM_TYPEERROR_O("make_mat3x3() requires a ctypes pointer as it's argument, not ", arg); return NULL; } static PyObject* make_mat3x4_(PyObject*, PyObject* arg) { if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_float_p)) { return pack(glm::make_mat3x4((float*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_double_p)) { return pack(glm::make_mat3x4((double*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_int32_p)) { return pack(glm::make_mat3x4((int*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_uint32_p)) { return pack(glm::make_mat3x4((glm::uint*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } PyGLM_TYPEERROR_O("make_mat3x4() requires a ctypes pointer as it's argument, not ", arg); return NULL; } static PyObject* make_mat4x2_(PyObject*, PyObject* arg) { if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_float_p)) { return pack(glm::make_mat4x2((float*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_double_p)) { return pack(glm::make_mat4x2((double*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_int32_p)) { return pack(glm::make_mat4x2((int*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_uint32_p)) { return pack(glm::make_mat4x2((glm::uint*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } PyGLM_TYPEERROR_O("make_mat4x2() requires a ctypes pointer as it's argument, not ", arg); return NULL; } static PyObject* make_mat4x3_(PyObject*, PyObject* arg) { if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_float_p)) { return pack(glm::make_mat4x3((float*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_double_p)) { return pack(glm::make_mat4x3((double*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_int32_p)) { return pack(glm::make_mat4x3((int*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_uint32_p)) { return pack(glm::make_mat4x3((glm::uint*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } PyGLM_TYPEERROR_O("make_mat4x3() requires a ctypes pointer as it's argument, not ", arg); return NULL; } static PyObject* make_mat4x4_(PyObject*, PyObject* arg) { if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_float_p)) { return pack(glm::make_mat4x4((float*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_double_p)) { return pack(glm::make_mat4x4((double*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_int32_p)) { return pack(glm::make_mat4x4((int*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_uint32_p)) { return pack(glm::make_mat4x4((glm::uint*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } PyGLM_TYPEERROR_O("make_mat4x4() requires a ctypes pointer as it's argument, not ", arg); return NULL; } static PyObject* make_quat_(PyObject*, PyObject* arg) { if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_float_p)) { return pack(glm::make_quat((float*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } if (PyObject_TypeCheck(arg, (PyTypeObject*)ctypes_double_p)) { return pack(glm::make_quat((double*)PyGLM_UnsignedLongLong_FromCtypesP(arg))); } PyGLM_TYPEERROR_O("make_quat() requires a ctypes pointer as it's argument, not ", arg); return NULL; } PyDoc_STRVAR(value_ptr_docstr, "value_ptr(x) -> ctypes pointer\n" " Return the constant address to the data of the input parameter." ); PyDoc_STRVAR(sizeof_docstr, "sizeof(x: type) -> int\n" " Return the data size of `x` in bytes.\n" " E.g. `sizeof(vec4) == sizeof(float32) * 4 = 4 * 4 = 16`." ); PyDoc_STRVAR(make_vec2_docstr, "make_vec2(x: ctypes pointer) -> vec2\n" " Build a vector from a pointer." ); PyDoc_STRVAR(make_vec3_docstr, "make_vec3(x: ctypes pointer) -> vec3\n" " Build a vector from a pointer." ); PyDoc_STRVAR(make_vec4_docstr, "make_vec4(x: ctypes pointer) -> vec4\n" " Build a vector from a pointer." ); PyDoc_STRVAR(make_mat2_docstr, "make_mat2(x: ctypes pointer) -> mat2\n" " See make_mat2x2()." ); PyDoc_STRVAR(make_mat3_docstr, "make_mat3(x: ctypes pointer) -> mat3\n" " See make_mat3x3()." ); PyDoc_STRVAR(make_mat4_docstr, "make_mat4(x: ctypes pointer) -> mat4\n" " See make_mat4x4()." ); PyDoc_STRVAR(make_mat2x2_docstr, "make_mat2x2(x: ctypes pointer) -> mat2\n" " Build a matrix from a pointer." ); PyDoc_STRVAR(make_mat2x3_docstr, "make_mat2x3(x: ctypes pointer) -> mat2x3\n" " Build a matrix from a pointer." ); PyDoc_STRVAR(make_mat2x4_docstr, "make_mat2x4(x: ctypes pointer) -> mat2x4\n" " Build a matrix from a pointer." ); PyDoc_STRVAR(make_mat3x2_docstr, "make_mat3x2(x: ctypes pointer) -> mat3x2\n" " Build a matrix from a pointer." ); PyDoc_STRVAR(make_mat3x3_docstr, "make_mat3x3(x: ctypes pointer) -> mat3\n" " Build a matrix from a pointer." ); PyDoc_STRVAR(make_mat3x4_docstr, "make_mat3x4(x: ctypes pointer) -> mat3x4\n" " Build a matrix from a pointer." ); PyDoc_STRVAR(make_mat4x2_docstr, "make_mat4x2(x: ctypes pointer) -> mat4x2\n" " Build a matrix from a pointer." ); PyDoc_STRVAR(make_mat4x3_docstr, "make_mat4x3(x: ctypes pointer) -> mat4\n" " Build a matrix from a pointer." ); PyDoc_STRVAR(make_mat4x4_docstr, "make_mat4x4(x: ctypes pointer) -> mat4x4\n" " Build a matrix from a pointer." ); PyDoc_STRVAR(make_quat_docstr, "make_quat(x: ctypes pointer) -> quat\n" " Build a quaternion from a pointer." ); #define TYPE_PTR_METHODS \ { "value_ptr", (PyCFunction)value_ptr_, METH_O, value_ptr_docstr }, \ { "sizeof", (PyCFunction)sizeof_, METH_O, sizeof_docstr }, \ { "make_vec2", (PyCFunction)make_vec2_, METH_O, make_vec2_docstr }, \ { "make_vec3", (PyCFunction)make_vec3_, METH_O, make_vec3_docstr }, \ { "make_vec4", (PyCFunction)make_vec4_, METH_O, make_vec4_docstr }, \ { "make_mat2", (PyCFunction)make_mat2x2_, METH_O, make_mat2_docstr }, \ { "make_mat2x2", (PyCFunction)make_mat2x2_, METH_O, make_mat2x2_docstr }, \ { "make_mat2x3", (PyCFunction)make_mat2x3_, METH_O, make_mat2x3_docstr }, \ { "make_mat2x4", (PyCFunction)make_mat2x4_, METH_O, make_mat2x4_docstr }, \ { "make_mat3x2", (PyCFunction)make_mat3x2_, METH_O, make_mat3x2_docstr }, \ { "make_mat3", (PyCFunction)make_mat3x3_, METH_O, make_mat3_docstr }, \ { "make_mat3x3", (PyCFunction)make_mat3x3_, METH_O, make_mat3x3_docstr }, \ { "make_mat3x4", (PyCFunction)make_mat3x4_, METH_O, make_mat3x4_docstr }, \ { "make_mat4x2", (PyCFunction)make_mat4x2_, METH_O, make_mat4x2_docstr }, \ { "make_mat4x3", (PyCFunction)make_mat4x3_, METH_O, make_mat4x3_docstr }, \ { "make_mat4", (PyCFunction)make_mat4x4_, METH_O, make_mat4_docstr }, \ { "make_mat4x4", (PyCFunction)make_mat4x4_, METH_O, make_mat4x4_docstr }, \ { "make_quat", (PyCFunction)make_quat_, METH_O, make_quat_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/stable_extensions/ulp.h000066400000000000000000000254671511156275200260370ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../../internal_functions/all.h" #include "../function_generator_macros.h" static PyObject* next_float_(PyObject*, PyObject* args) { PyObject *arg1, *arg2 = NULL; if (!PyArg_UnpackTuple(args, "next_float", 1, 2, &arg1, &arg2)) return NULL; if (arg2 == NULL) { if (PyGLM_Number_Check(arg1)) { return pack(glm::next_float(PyGLM_Number_FromPyObject(arg1))); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(1, float, arg1))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(1, double, arg1))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(2, float, arg1))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(2, double, arg1))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(3, float, arg1))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(3, double, arg1))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(4, float, arg1))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(4, double, arg1))); } PyGLM_TYPEERROR_O("invalid argument type for next_float(): ", arg1); return NULL; } if (PyLong_Check(arg2)) { int ULPs = PyGLM_Number_FromPyObject(arg2); PyGLM_ASSERT((ULPs >= 0), "'ULPs' has to be greater than or equal to 0"); if (PyGLM_Number_Check(arg1)) { return pack(glm::next_float(PyGLM_Number_FromPyObject(arg1), ULPs)); } PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg1)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(1, float, arg1), ULPs)); } if (PyGLM_Vec_PTI_Check0(1, double, arg1)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(1, double, arg1), ULPs)); } if (PyGLM_Vec_PTI_Check0(2, float, arg1)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(2, float, arg1), ULPs)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(2, double, arg1), ULPs)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(3, float, arg1), ULPs)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(3, double, arg1), ULPs)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(4, float, arg1), ULPs)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(4, double, arg1), ULPs)); } } else { PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_INT); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, int, arg2))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, int, arg2))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, int, arg2))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, int, arg2))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, int, arg2))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, int, arg2))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, int, arg2))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2)) { return pack(glm::next_float(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, int, arg2))); } } PyGLM_TYPEERROR_2O("invalid argument type(s) for next_float(): ", arg1, arg2); return NULL; } static PyObject* prev_float_(PyObject*, PyObject* args) { PyObject *arg1, *arg2 = NULL; if (!PyArg_UnpackTuple(args, "prev_float", 1, 2, &arg1, &arg2)) return NULL; PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (arg2 == NULL) { if (PyGLM_Number_Check(arg1)) { return pack(glm::prev_float(PyGLM_Number_FromPyObject(arg1))); } if (PyGLM_Vec_PTI_Check0(1, float, arg1)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(1, float, arg1))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(1, double, arg1))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(2, float, arg1))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(2, double, arg1))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(3, float, arg1))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(3, double, arg1))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(4, float, arg1))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(4, double, arg1))); } PyGLM_TYPEERROR_O("invalid argument type for prev_float(): ", arg1); return NULL; } if (PyLong_Check(arg2)) { int ULPs = PyGLM_Number_FromPyObject(arg2); PyGLM_ASSERT((ULPs >= 0), "'ULPs' has to be greater than or equal to 0") if (PyGLM_Number_Check(arg1)) { return pack(glm::prev_float(PyGLM_Number_FromPyObject(arg1), ULPs)); } if (PyGLM_Vec_PTI_Check0(1, float, arg1)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(1, float, arg1), ULPs)); } if (PyGLM_Vec_PTI_Check0(1, double, arg1)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(1, double, arg1), ULPs)); } if (PyGLM_Vec_PTI_Check0(2, float, arg1)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(2, float, arg1), ULPs)); } if (PyGLM_Vec_PTI_Check0(2, double, arg1)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(2, double, arg1), ULPs)); } if (PyGLM_Vec_PTI_Check0(3, float, arg1)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(3, float, arg1), ULPs)); } if (PyGLM_Vec_PTI_Check0(3, double, arg1)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(3, double, arg1), ULPs)); } if (PyGLM_Vec_PTI_Check0(4, float, arg1)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(4, float, arg1), ULPs)); } if (PyGLM_Vec_PTI_Check0(4, double, arg1)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(4, double, arg1), ULPs)); } } else { PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_INT); if (PyGLM_Vec_PTI_Check0(1, float, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(1, float, arg1), PyGLM_Vec_PTI_Get1(1, int, arg2))); } if (PyGLM_Vec_PTI_Check0(1, double, arg1) && PyGLM_Vec_PTI_Check1(1, int, arg2)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(1, double, arg1), PyGLM_Vec_PTI_Get1(1, int, arg2))); } if (PyGLM_Vec_PTI_Check0(2, float, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(2, float, arg1), PyGLM_Vec_PTI_Get1(2, int, arg2))); } if (PyGLM_Vec_PTI_Check0(2, double, arg1) && PyGLM_Vec_PTI_Check1(2, int, arg2)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(2, double, arg1), PyGLM_Vec_PTI_Get1(2, int, arg2))); } if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, int, arg2))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, int, arg2)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, int, arg2))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Vec_PTI_Get1(4, int, arg2))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1) && PyGLM_Vec_PTI_Check1(4, int, arg2)) { return pack(glm::prev_float(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Vec_PTI_Get1(4, int, arg2))); } } PyGLM_TYPEERROR_2O("invalid argument type(s) for prev_float(): ", arg1, arg2); return NULL; } PyGLM_MAKE_GLM_FUNC_NN_VV__tfF(float_distance); PyDoc_STRVAR(next_float_docstr, "next_float(x: float) -> float\n" " Return the next ULP value(s) after the input value(s).\n" "next_float(x: vecN) -> vecN\n" " Return the next ULP value(s) after the input value(s).\n" "next_float(x: float, ULPs: float) -> float\n" " Return the next ULP value(s) after the input value(s).\n" "next_float(x: vecN, ULPs: float) -> vecN\n" " Return the next ULP value(s) after the input value(s).\n" "next_float(x: vecN, ULPs: ivecN) -> float\n" " Return the next ULP value(s) after the input value(s).\n" ); PyDoc_STRVAR(prev_float_docstr, "prev_float(x: float) -> float\n" " Return the previous ULP value(s) before the input value(s).\n" "prev_float(x: vecN) -> vecN\n" " Return the previous ULP value(s) before the input value(s).\n" "prev_float(x: float, ULPs: float) -> float\n" " Return the previous ULP value(s) before the input value(s).\n" "prev_float(x: vecN, ULPs: float) -> vecN\n" " Return the previous ULP value(s) before the input value(s).\n" "prev_float(x: vecN, ULPs: ivecN) -> float\n" " Return the previous ULP value(s) before the input value(s).\n" ); PyDoc_STRVAR(float_distance_docstr, "float_distance(x: float, y: float) -> float\n" " Return the distance in the number of ULP between 2 double-precision floating-point scalars.\n" "float_distance(x: fvecN, y: fvecN) -> ivecN\n" " Return the distance in the number of ULP between 2 single-precision floating-point scalars.\n" "float_distance(x: dvecN, y: dvecN) -> i64vecN\n" " Return the distance in the number of ULP between 2 double-precision floating-point scalars.\n" ); #define ULP_METHODS \ { "next_float", (PyCFunction)next_float_, METH_VARARGS, next_float_docstr }, \ { "prev_float", (PyCFunction)prev_float_, METH_VARARGS, prev_float_docstr }, \ { "float_distance", (PyCFunction)float_distance_, METH_VARARGS, float_distance_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/unstable_extensions/000077500000000000000000000000001511156275200254135ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/unstable_extensions/all.h000066400000000000000000000002651511156275200263370ustar00rootroot00000000000000#pragma once #include "polar_coordinates.h" #include "norm.h" #include "matrix_decompose.h" #include "matrix_transform_2d.h" #include "rotate_vector.h" #include "compatibility.h" Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/unstable_extensions/compatibility.h000066400000000000000000000065511511156275200304440ustar00rootroot00000000000000#pragma once #include "../function_generator_macros.h" #include "../detail/func_trigonometric.h" PyDoc_STRVAR(saturate_docstr, "saturate(x: float) -> float\n" " Returns `clamp(x, 0, 1)`.\n" "saturate(x: vecN) -> vecN\n" " Returns `clamp(x, 0, 1)`." ); static PyObject* saturate_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::saturate(PyGLM_Number_FromPyObject(arg))); } PyGLM_PTI_Init0(arg, PyGLM_T_ANY_VEC | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(2, float, arg)) { return pack(glm::saturate(PyGLM_Vec_PTI_Get0(2, float, arg))); } if (PyGLM_Vec_PTI_Check0(2, double, arg)) { return pack(glm::saturate(PyGLM_Vec_PTI_Get0(2, double, arg))); } if (PyGLM_Vec_PTI_Check0(3, float, arg)) { return pack(glm::saturate(PyGLM_Vec_PTI_Get0(3, float, arg))); } if (PyGLM_Vec_PTI_Check0(3, double, arg)) { return pack(glm::saturate(PyGLM_Vec_PTI_Get0(3, double, arg))); } if (PyGLM_Vec_PTI_Check0(4, float, arg)) { return pack(glm::saturate(PyGLM_Vec_PTI_Get0(4, float, arg))); } if (PyGLM_Vec_PTI_Check0(4, double, arg)) { return pack(glm::saturate(PyGLM_Vec_PTI_Get0(4, double, arg))); } PyGLM_TYPEERROR_O("invalid argument type for saturate(): ", arg); return NULL; } PyDoc_STRVAR(isfinite_docstr, "isfinite(x: float) -> bool\n" " Test whether or not a scalar is a finite value.\n" "isfinite(x: vecN) -> bvecN\n" " Test whether or not each vector component is a finite value." ); static PyObject* isfinite_(PyObject*, PyObject* arg) { if (PyGLM_Number_Check(arg)) { return pack(glm::isfinite(PyGLM_Number_FromPyObject(arg))); } PyGLM_PTI_Init0(arg, PyGLM_T_ANY_VEC | PyGLM_SHAPE_ALL | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(1, float, arg)) { return pack(glm::isfinite(PyGLM_Vec_PTI_Get0(1, float, arg))); } if (PyGLM_Vec_PTI_Check0(1, double, arg)) { return pack(glm::isfinite(PyGLM_Vec_PTI_Get0(1, double, arg))); } if (PyGLM_Vec_PTI_Check0(2, float, arg)) { return pack(glm::isfinite(PyGLM_Vec_PTI_Get0(2, float, arg))); } if (PyGLM_Vec_PTI_Check0(2, double, arg)) { return pack(glm::isfinite(PyGLM_Vec_PTI_Get0(2, double, arg))); } if (PyGLM_Vec_PTI_Check0(3, float, arg)) { return pack(glm::isfinite(PyGLM_Vec_PTI_Get0(3, float, arg))); } if (PyGLM_Vec_PTI_Check0(3, double, arg)) { return pack(glm::isfinite(PyGLM_Vec_PTI_Get0(3, double, arg))); } if (PyGLM_Vec_PTI_Check0(4, float, arg)) { return pack(glm::isfinite(PyGLM_Vec_PTI_Get0(4, float, arg))); } if (PyGLM_Vec_PTI_Check0(4, double, arg)) { return pack(glm::isfinite(PyGLM_Vec_PTI_Get0(4, double, arg))); } PyGLM_TYPEERROR_O("invalid argument type for isfinite(): ", arg); return NULL; } PyDoc_STRVAR(atan2_docstr, "atan2(y: float, x: float) -> float\n" " Arc tangent. Returns an angle whose tangent is `y / x`. The signs of `x` and `y` are used to\n" " determine what quadrant the angle is in. The range of values returned by this function\n" " is `[-PI, PI]`. Results are undefined if `x` and `y` are both `0`.\n" " Alias for `atan`.\n" "atan2(y: vecN, x: vecN) -> vecN\n" " Returns `atan(y[i], x[i])` for every index `i`.\n" " Alias for `atan`." ); #define COMPATIBILITY_METHODS \ { "atan2", (PyCFunction)atan_, METH_VARARGS, atan2_docstr }, \ { "isfinite", (PyCFunction)isfinite_, METH_O, isfinite_docstr }, \ { "saturate", (PyCFunction)saturate_, METH_O, saturate_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/unstable_extensions/matrix_decompose.h000066400000000000000000000030721511156275200311300ustar00rootroot00000000000000#pragma once #include "../all.h" static PyObject* decompose_(PyObject*, PyObject* args) { PyObject *arg1, *arg2, *arg3, *arg4, *arg5, *arg6; PyGLM_Arg_Unpack_6O(args, "decompose", arg1, arg2, arg3, arg4, arg5, arg6); if (Py_TYPE(arg1) == &hfmat4x4Type && Py_TYPE(arg2) == &hfvec3Type && Py_TYPE(arg3) == &hfquaType && Py_TYPE(arg4) == &hfvec3Type && Py_TYPE(arg5) == &hfvec3Type && Py_TYPE(arg6) == &hfvec4Type) { return pack(glm::decompose(((mat<4, 4, float>*)arg1)->super_type, ((vec<3, float>*)arg2)->super_type, ((qua*)arg3)->super_type, ((vec<3, float>*)arg4)->super_type, ((vec<3, float>*)arg5)->super_type, ((vec<4, float>*)arg6)->super_type)); } if (Py_TYPE(arg1) == &hdmat4x4Type && Py_TYPE(arg2) == &hdvec3Type && Py_TYPE(arg3) == &hdquaType && Py_TYPE(arg4) == &hdvec3Type && Py_TYPE(arg5) == &hdvec3Type && Py_TYPE(arg6) == &hdvec4Type) { return pack(glm::decompose(((mat<4, 4, double>*)arg1)->super_type, ((vec<3, double>*)arg2)->super_type, ((qua*)arg3)->super_type, ((vec<3, double>*)arg4)->super_type, ((vec<3, double>*)arg5)->super_type, ((vec<4, double>*)arg6)->super_type)); } PyErr_SetString(PyExc_TypeError, "Invalid argument types for decompose()"); return NULL; } PyDoc_STRVAR(decompose_docstr, "decompose(modelMatrix: mat4, scale: vec3, orientation: quat, translation: vec3, skew: vec3,\n" " perspective: vec4) -> bool\n" " Decomposes a model matrix to translations, rotation and scale components.\n" " Returns `True` on success." ); #define DECOMPOSE_METHODS \ { "decompose", (PyCFunction)decompose_, METH_VARARGS, decompose_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/unstable_extensions/matrix_transform_2d.h000066400000000000000000000013261511156275200315520ustar00rootroot00000000000000#pragma once #include "../function_generator_macros.h" PyGLM_MAKE_GLM_FUNC_M3N__tfF(shearX) PyGLM_MAKE_GLM_FUNC_M3N__tfF(shearY) PyDoc_STRVAR(shearX_docstr, "shearX(m: mat3x3, y: number) -> mat3x3\n" " Builds an horizontal (parallel to the x axis) shear 3 x 3 matrix.\n" " `m` is the input matrix multiplied by this translation matrix" ); PyDoc_STRVAR(shearY_docstr, "shearY(m: mat3x3, x: number) -> mat3x3\n" " Builds a vertical (parallel to the y axis) shear 3 x 3 matrix.\n" " `m` is the input matrix multiplied by this translation matrix" ); #define MATRIX_TRANSFORM_2D_METHODS \ { "shearX", (PyCFunction)shearX_, METH_VARARGS, shearX_docstr }, \ { "shearY", (PyCFunction)shearY_, METH_VARARGS, shearY_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/unstable_extensions/norm.h000066400000000000000000000057531511156275200265510ustar00rootroot00000000000000#pragma once #include "../function_generator_macros.h" PyGLM_MAKE_GLM_FUNC_VV__tfF(distance2) PyGLM_MAKE_GLM_FUNC_V3_V3V3__tfF(l1Norm) PyGLM_MAKE_GLM_FUNC_V3_V3V3__tfF(l2Norm) PyGLM_MAKE_GLM_FUNC_V3_V3V3__tfF(lMaxNorm) PyGLM_MAKE_GLM_FUNC_N_V__tfF(length2) static PyObject* lxNorm_(PyObject*, PyObject* args) { PyObject *arg1, *arg2, *arg3 = NULL; if (!PyArg_UnpackTuple(args, "lxNorm", 2, 3, &arg1, &arg2, &arg3)) return NULL; if (arg3 == NULL) { if (PyLong_Check(arg2)) { PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(3, float, arg1)) { return pack(glm::lxNorm(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Number_AsUnsignedLong(arg2))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1)) { return pack(glm::lxNorm(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Number_AsUnsignedLong(arg2))); } } } else { if (PyLong_Check(arg3)) { PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { return pack(glm::lxNorm(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2), PyGLM_Number_AsUnsignedLong(arg3))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { return pack(glm::lxNorm(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2), PyGLM_Number_AsUnsignedLong(arg3))); } } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for lxNorm()"); return NULL; } PyDoc_STRVAR(distance2_docstr, "distance2(p0: vecN, p1: vecN) -> float\n" " Returns the squared distance between `p0` and `p1`, i.e., `length2(p0 - p1)`." ); PyDoc_STRVAR(l1Norm_docstr, "l1Norm(v: vec3) -> float\n" " Returns the L1 norm of `v`.\n" "l1Norm(x: vec3, y: vec3) -> float\n" " Returns the L1 norm between `x` and `y`." ); PyDoc_STRVAR(l2Norm_docstr, "l2Norm(v: vec3) -> float\n" " Returns the L2 norm of `v`.\n" "l2Norm(x: vec3, y: vec3) -> float\n" " Returns the L2 norm between `x` and `y`." ); PyDoc_STRVAR(length2_docstr, "length2(v: vecN) -> float\n" " Returns the squared length of `x`." ); PyDoc_STRVAR(lMaxNorm_docstr, "lMaxNorm(v: vec3) -> float\n" " Returns the LMax norm of `v`.\n" "lMaxNorm(x: vec3, y: vec3) -> float\n" " Returns the LMax norm between `x` and `y`." ); PyDoc_STRVAR(lxNorm_docstr, "lxNorm(v: vec3, Depth: int) -> float\n" " Returns the L norm of `v`.\n" "lxNorm(x: vec3, y: vec3, Depth: int) -> float\n" " Returns the L norm between `x` and `y`." ); #define NORM_METHODS \ { "distance2", (PyCFunction)distance2_, METH_VARARGS, distance2_docstr }, \ { "l1Norm", (PyCFunction)l1Norm_, METH_VARARGS, l1Norm_docstr }, \ { "l2Norm", (PyCFunction)l2Norm_, METH_VARARGS, l2Norm_docstr }, \ { "lMaxNorm", (PyCFunction)lMaxNorm_, METH_VARARGS, lMaxNorm_docstr }, \ { "length2", (PyCFunction)length2_, METH_O, length2_docstr }, \ { "lxNorm", (PyCFunction)lxNorm_, METH_VARARGS, lxNorm_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/unstable_extensions/polar_coordinates.h000066400000000000000000000011011511156275200312640ustar00rootroot00000000000000#pragma once #include "../function_generator_macros.h" PyGLM_MAKE_GLM_FUNC_V3__tfF(polar) PyGLM_MAKE_GLM_FUNC_V2__tfF(euclidean) PyDoc_STRVAR(euclidean_docstr, "euclidean(polar: vec2) -> vec3\n" " Convert Polar to Euclidean coordinates." ); PyDoc_STRVAR(polar_docstr, "polar(euclidean: vec3) -> vec3\n" " Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude." ); #define POLAR_COORDINATES_METHODS \ { "polar", (PyCFunction)polar_, METH_O, polar_docstr }, \ { "euclidean", (PyCFunction)euclidean_, METH_O, euclidean_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/functions/unstable_extensions/rotate_vector.h000066400000000000000000000114241511156275200304460ustar00rootroot00000000000000#pragma once #include "../all.h" static PyObject* orientation_(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "orientation", arg1, arg2); PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD); PyGLM_PTI_Init1(arg2, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(3, float, arg1) && PyGLM_Vec_PTI_Check1(3, float, arg2)) { return pack(glm::orientation(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Vec_PTI_Get1(3, float, arg2))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1) && PyGLM_Vec_PTI_Check1(3, double, arg2)) { return pack(glm::orientation(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Vec_PTI_Get1(3, double, arg2))); } PyGLM_TYPEERROR_2O("invalid argument types for orientation(). Expected vec3, got ", arg1, arg2); return NULL; } static PyObject* rotateX_(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "rotateX", arg1, arg2); if (PyGLM_Number_Check(arg2)) { PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(3, float, arg1)) { return pack(glm::rotateX(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Number_AsFloat(arg2))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1)) { return pack(glm::rotateX(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Number_AsFloat(arg2))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1)) { return pack(glm::rotateX(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Number_AsDouble(arg2))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1)) { return pack(glm::rotateX(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Number_AsDouble(arg2))); } } PyGLM_TYPEERROR_2O("invalid argument types for rotateX(). Expected vec3/vec4 and a number, got ", arg1, arg2); return NULL; } static PyObject* rotateY_(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "rotateY", arg1, arg2); if (PyGLM_Number_Check(arg2)) { PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(3, float, arg1)) { return pack(glm::rotateY(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Number_AsFloat(arg2))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1)) { return pack(glm::rotateY(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Number_AsFloat(arg2))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1)) { return pack(glm::rotateY(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Number_AsDouble(arg2))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1)) { return pack(glm::rotateY(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Number_AsDouble(arg2))); } } PyGLM_TYPEERROR_2O("invalid argument types for rotateY(). Expected vec3/vec4 and a number, got ", arg1, arg2); return NULL; } static PyObject* rotateZ_(PyObject*, PyObject* args) { PyObject* arg1, * arg2; PyGLM_Arg_Unpack_2O(args, "rotateZ", arg1, arg2); if (PyGLM_Number_Check(arg2)) { PyGLM_PTI_Init0(arg1, PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_DT_FD); if (PyGLM_Vec_PTI_Check0(3, float, arg1)) { return pack(glm::rotateZ(PyGLM_Vec_PTI_Get0(3, float, arg1), PyGLM_Number_AsFloat(arg2))); } if (PyGLM_Vec_PTI_Check0(4, float, arg1)) { return pack(glm::rotateZ(PyGLM_Vec_PTI_Get0(4, float, arg1), PyGLM_Number_AsFloat(arg2))); } if (PyGLM_Vec_PTI_Check0(3, double, arg1)) { return pack(glm::rotateZ(PyGLM_Vec_PTI_Get0(3, double, arg1), PyGLM_Number_AsDouble(arg2))); } if (PyGLM_Vec_PTI_Check0(4, double, arg1)) { return pack(glm::rotateZ(PyGLM_Vec_PTI_Get0(4, double, arg1), PyGLM_Number_AsDouble(arg2))); } } PyGLM_TYPEERROR_2O("invalid argument types for rotateZ(). Expected vec3/vec4 and a number, got ", arg1, arg2); return NULL; } PyDoc_STRVAR(orientation_docstr, "orientation(Normal: vec3, Up: vec3) -> mat4\n" " Build a rotation matrix from a normal and a up vector." ); PyDoc_STRVAR(rotateX_docstr, "rotateX(v: vec3, angle: float) -> vec3\n" " Rotate a three dimensional vector around the X axis.\n" "rotateX(v: vec4, angle: float) -> vec3\n" " Rotate a four dimensional vector around the X axis." ); PyDoc_STRVAR(rotateY_docstr, "rotateY(v: vec3, angle: float) -> vec3\n" " Rotate a three dimensional vector around the Y axis.\n" "rotateY(v: vec4, angle: float) -> vec3\n" " Rotate a four dimensional vector around the Y axis." ); PyDoc_STRVAR(rotateZ_docstr, "rotateZ(v: vec3, angle: float) -> vec3\n" " Rotate a three dimensional vector around the Z axis.\n" "rotateZ(v: vec4, angle: float) -> vec3\n" " Rotate a four dimensional vector around the Z axis." ); #define ROTATE_VECTOR_METHODS \ { "orientation", (PyCFunction)orientation_, METH_VARARGS, orientation_docstr }, \ { "rotateX", (PyCFunction)rotateX_, METH_VARARGS, rotateX_docstr }, \ { "rotateY", (PyCFunction)rotateY_, METH_VARARGS, rotateY_docstr }, \ { "rotateZ", (PyCFunction)rotateZ_, METH_VARARGS, rotateZ_docstr } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/imports.h000066400000000000000000000041051511156275200211550ustar00rootroot00000000000000#pragma once #include "../build_options.h" #include #include "structmember.h" #include #include #include #include #include #include #define GLM_FORCE_CTOR_INIT #define GLM_ENABLE_EXPERIMENTAL #define GLM_FORCE_QUAT_DATA_WXYZ #define GLM_LANG_STL11_FORCED #include #include "internal_functions/glm_customizations.h" #include #include #include #if !(PyGLM_BUILD & PyGLM_NO_FUNCTIONS) // Stable extensions #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Recommended extensions #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Unstable extensions #include #include #include #include #include #include #endif #include "compiler_setup.h"Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/000077500000000000000000000000001511156275200232135ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/all.h000066400000000000000000000004401511156275200241320ustar00rootroot00000000000000#pragma once #include "ctypes_pointers.h" #include "version_info.h" #include "warnings.h" #include "type_getters/all.h" #include "helper_macros.h" #include "error_functions.h" #include "number_functions.h" #include "unpackers.h" #include "packers.h" #include "type_checkers.h" Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/ctypes_pointers.h000066400000000000000000000122411511156275200266160ustar00rootroot00000000000000#pragma once #include "../compiler_setup.h" static PyObject* ctypes_float; static PyObject* ctypes_double; static PyObject* ctypes_int64; static PyObject* ctypes_int32; static PyObject* ctypes_int16; static PyObject* ctypes_int8; static PyObject* ctypes_uint64; static PyObject* ctypes_uint32; static PyObject* ctypes_uint16; static PyObject* ctypes_uint8; static PyObject* ctypes_bool; static destructor ctypes_dealloc; static PyObject* ctypes_void_p = NULL; static PyObject* ctypes_cast = NULL; #if defined(_M_IX86) || defined(__i386__) static PyObject* PyGLM_CtypesVoidP_FromVoidP(void* p) { PyObject* argList = Py_BuildValue("(K)", (unsigned long)p); PyObject* out = PyObject_CallObject(ctypes_void_p, argList); Py_DECREF(argList); return out; } static unsigned long PyGLM_UnsignedLongLong_FromCtypesP(PyObject* ptr) { PyObject* ptr_as_c_void_p = PyObject_CallFunctionObjArgs(ctypes_cast, ptr, ctypes_void_p, NULL); PyObject* ptr_value = PyObject_GetAttrString(ptr_as_c_void_p, "value"); unsigned long out = PyLong_AsUnsignedLong(ptr_value); Py_DECREF(ptr_value); Py_DECREF(ptr_as_c_void_p); return out; } #else static PyObject* PyGLM_CtypesVoidP_FromVoidP(void* p) { PyObject* argList = Py_BuildValue("(K)", (unsigned long long)p); PyObject* out = PyObject_CallObject(ctypes_void_p, argList); Py_DECREF(argList); return out; } static unsigned long long PyGLM_UnsignedLongLong_FromCtypesP(PyObject* ptr) { PyObject* ptr_as_c_void_p = PyObject_CallFunctionObjArgs(ctypes_cast, ptr, ctypes_void_p, NULL); PyObject* ptr_value = PyObject_GetAttrString(ptr_as_c_void_p, "value"); unsigned long long out = PyLong_AsUnsignedLongLong(ptr_value); Py_DECREF(ptr_value); Py_DECREF(ptr_as_c_void_p); return out; } #endif #if !(PyGLM_BUILD & PyGLM_NO_FUNCTIONS) static PyObject* ctypes_float_p = NULL; static PyObject* ctypes_double_p = NULL; static PyObject* ctypes_int64_p = NULL; static PyObject* ctypes_int32_p = NULL; static PyObject* ctypes_int16_p = NULL; static PyObject* ctypes_int8_p = NULL; static PyObject* ctypes_uint64_p = NULL; static PyObject* ctypes_uint32_p = NULL; static PyObject* ctypes_uint16_p = NULL; static PyObject* ctypes_uint8_p = NULL; static PyObject* ctypes_bool_p = NULL; static PyObject* PyGLM_ToCtypesP(float* ptr) { PyObject* ptr_as_c_void_p = PyGLM_CtypesVoidP_FromVoidP((void*)ptr); PyObject* out = PyObject_CallFunctionObjArgs(ctypes_cast, ptr_as_c_void_p, ctypes_float_p, NULL); Py_DECREF(ptr_as_c_void_p); return out; } static PyObject* PyGLM_ToCtypesP(double* ptr) { PyObject* ptr_as_c_void_p = PyGLM_CtypesVoidP_FromVoidP((void*)ptr); PyObject* out = PyObject_CallFunctionObjArgs(ctypes_cast, ptr_as_c_void_p, ctypes_double_p, NULL); Py_DECREF(ptr_as_c_void_p); return out; } static PyObject* PyGLM_ToCtypesP(glm::int64* ptr) { PyObject* ptr_as_c_void_p = PyGLM_CtypesVoidP_FromVoidP((void*)ptr); PyObject* out = PyObject_CallFunctionObjArgs(ctypes_cast, ptr_as_c_void_p, ctypes_int64_p, NULL); Py_DECREF(ptr_as_c_void_p); return out; } static PyObject* PyGLM_ToCtypesP(glm::int32* ptr) { PyObject* ptr_as_c_void_p = PyGLM_CtypesVoidP_FromVoidP((void*)ptr); PyObject* out = PyObject_CallFunctionObjArgs(ctypes_cast, ptr_as_c_void_p, ctypes_int32_p, NULL); Py_DECREF(ptr_as_c_void_p); return out; } static PyObject* PyGLM_ToCtypesP(glm::int16* ptr) { PyObject* ptr_as_c_void_p = PyGLM_CtypesVoidP_FromVoidP((void*)ptr); PyObject* out = PyObject_CallFunctionObjArgs(ctypes_cast, ptr_as_c_void_p, ctypes_int16_p, NULL); Py_DECREF(ptr_as_c_void_p); return out; } static PyObject* PyGLM_ToCtypesP(glm::int8* ptr) { PyObject* ptr_as_c_void_p = PyGLM_CtypesVoidP_FromVoidP((void*)ptr); PyObject* out = PyObject_CallFunctionObjArgs(ctypes_cast, ptr_as_c_void_p, ctypes_int8_p, NULL); Py_DECREF(ptr_as_c_void_p); return out; } static PyObject* PyGLM_ToCtypesP(glm::uint64* ptr) { PyObject* ptr_as_c_void_p = PyGLM_CtypesVoidP_FromVoidP((void*)ptr); PyObject* out = PyObject_CallFunctionObjArgs(ctypes_cast, ptr_as_c_void_p, ctypes_uint64_p, NULL); Py_DECREF(ptr_as_c_void_p); return out; } static PyObject* PyGLM_ToCtypesP(glm::uint32* ptr) { PyObject* ptr_as_c_void_p = PyGLM_CtypesVoidP_FromVoidP((void*)ptr); PyObject* out = PyObject_CallFunctionObjArgs(ctypes_cast, ptr_as_c_void_p, ctypes_uint32_p, NULL); Py_DECREF(ptr_as_c_void_p); return out; } static PyObject* PyGLM_ToCtypesP(glm::uint16* ptr) { PyObject* ptr_as_c_void_p = PyGLM_CtypesVoidP_FromVoidP((void*)ptr); PyObject* out = PyObject_CallFunctionObjArgs(ctypes_cast, ptr_as_c_void_p, ctypes_uint16_p, NULL); Py_DECREF(ptr_as_c_void_p); return out; } static PyObject* PyGLM_ToCtypesP(glm::uint8* ptr) { PyObject* ptr_as_c_void_p = PyGLM_CtypesVoidP_FromVoidP((void*)ptr); PyObject* out = PyObject_CallFunctionObjArgs(ctypes_cast, ptr_as_c_void_p, ctypes_uint8_p, NULL); Py_DECREF(ptr_as_c_void_p); return out; } static PyObject* PyGLM_ToCtypesP(bool* ptr) { PyObject* ptr_as_c_void_p = PyGLM_CtypesVoidP_FromVoidP((void*)ptr); PyObject* out = PyObject_CallFunctionObjArgs(ctypes_cast, ptr_as_c_void_p, ctypes_bool_p, NULL); Py_DECREF(ptr_as_c_void_p); return out; } /* static PyObject* PyGLM_ToCtypesP(void* ptr) { PyObject* ptr_as_c_void_p = PyGLM_CtypesVoidP_FromVoidP(ptr); return ptr_as_c_void_p; } */ #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/error_functions.h000066400000000000000000000030141511156275200266030ustar00rootroot00000000000000#pragma once #include "helper_macros.h" #include "../compiler_setup.h" #define PyGLM_TYPEERROR_O(str, obj) PyErr_Format(PyExc_TypeError, "%s'%s'", str, PyGLM_TYPE_AS_CSTRING(obj)); #define PyGLM_TYPEERROR_2O(str, obj1, obj2) PyErr_Format(PyExc_TypeError, "%s'%s' and '%s'", str, PyGLM_TYPE_AS_CSTRING(obj1), PyGLM_TYPE_AS_CSTRING(obj2)); #define PyGLM_ZERO_DIVISION_ERROR PyErr_SetString(PyExc_ZeroDivisionError, "Whoopsie. Integers can't divide by zero (:") #define PyGLM_ZERO_DIVISION_ERROR_T(T) if (std::numeric_limits::is_iec559) { PyGLM_WARN(PyGLM_FLOAT_ZERO_DIVISION_WARNING, "Uh oh.. There is a float division by zero here. I hope that's intended!"); } else { PyGLM_ZERO_DIVISION_ERROR; return NULL; } #define PyGLM_Arg_Unpack_1O(args, name, arg1) if(!PyArg_UnpackTuple(args, name, 1, 1, &arg1)) return NULL #define PyGLM_Arg_Unpack_2O(args, name, arg1, arg2) if(!PyArg_UnpackTuple(args, name, 2, 2, &arg1, &arg2)) return NULL #define PyGLM_Arg_Unpack_3O(args, name, arg1, arg2, arg3) if(!PyArg_UnpackTuple(args, name, 3, 3, &arg1, &arg2, &arg3)) return NULL #define PyGLM_Arg_Unpack_4O(args, name, arg1, arg2, arg3, arg4) if(!PyArg_UnpackTuple(args, name, 4, 4, &arg1, &arg2, &arg3, &arg4)) return NULL #define PyGLM_Arg_Unpack_5O(args, name, arg1, arg2, arg3, arg4, arg5) if(!PyArg_UnpackTuple(args, name, 5, 5, &arg1, &arg2, &arg3, &arg4, &arg5)) return NULL #define PyGLM_Arg_Unpack_6O(args, name, arg1, arg2, arg3, arg4, arg5, arg6) if(!PyArg_UnpackTuple(args, name, 6, 6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6)) return NULL Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/glm_customizations.h000066400000000000000000000036431511156275200273240ustar00rootroot00000000000000#pragma once #include "../compiler_setup.h" namespace glm { namespace custom { template GLM_FUNC_QUALIFIER GLM_CONSTEXPR T dot(T x, T y) { return x * y; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR T dot(vec const& x, vec const& y) { return detail::compute_dot, T, detail::is_aligned::value>::call(x, y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR T dot(qua const& x, qua const& y) { GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_FLOAT, "'dot' accepts only floating-point inputs"); return detail::compute_dot, T, detail::is_aligned::value>::call(x, y); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat::col_type mat_mul ( mat const& m, typename mat::row_type const& v ) { return m * v; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat::row_type mat_mul ( typename mat::col_type const& v, mat const& m ) { return v * m; } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 3, T, Q>::row_type mat_mul(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m) { return typename mat<3, 3, T, Q>::row_type( glm::custom::dot(m[0], v), glm::custom::dot(m[1], v), glm::custom::dot(m[2], v)); } template GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 4, T, Q>::row_type mat_mul ( typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m ) { return typename mat<4, 4, T, Q>::row_type( glm::custom::dot(m[0], v), glm::custom::dot(m[1], v), glm::custom::dot(m[2], v), glm::custom::dot(m[3], v)); } } } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/helper_macros.h000066400000000000000000000034201511156275200262060ustar00rootroot00000000000000#pragma once #include "../compiler_setup.h" #define Py_IS_NOTIMPLEMENTED(op) (op == NULL || (PyObject*)op == Py_NotImplemented) // find out if op is NULL or NotImplemented #define PyGLM_ASSERT(cond, msg) if (!(cond)) {PyErr_SetString(PyExc_AssertionError, msg); return NULL;} #define PyGLM_ASSERT_NO(cond, msg) if (!(cond)) {PyErr_SetString(PyExc_AssertionError, msg); return -1;} #define PyGLM_GET_NAME(name) (strncmp(name, "glm.", 4) == 0 ? &name[4] : name) #define PyObject_IterCheck(op) ((op)->ob_type->tp_iter != 0) #define PyGLM_TYPE_AS_CSTRING(op) op->ob_type->tp_name #define PyGLM_TypeCheck(op, tp) (Py_TYPE(op) == tp) #define PyGLM_Ctypes_TypeCheck(op, tp) PyGLM_TypeCheck(op, PyGLM_CTYPES_TYPE()) #define PyGLM_Ctypes_Get(op, tp) (*reinterpret_cast(reinterpret_cast(op)->b_ptr)) #define PyGLM_FITS_IN_FLOAT(value) ((FLT_MAX >= value && value >= FLT_MIN) || (-FLT_MIN >= value && value >= -FLT_MAX)) #define PyGLM_TupleOrList_Check(op) PyType_FastSubclass(Py_TYPE(op), (Py_TPFLAGS_TUPLE_SUBCLASS | Py_TPFLAGS_LIST_SUBCLASS)) #define PyGLM_TupleOrList_GET_SIZE(op) Py_SIZE(op) #define PyGLM_TupleOrList_GET_ITEM(op, i) ((PyTuple_Check(op)) ? (((PyTupleObject *)(op))->ob_item[i]) : (((PyListObject *)(op))->ob_item[i])) #define PyGLM_PREPROCESSOR_TOSTRING_ID(x) #x #define PyGLM_PREPROCESSOR_TOSTRING(x) PyGLM_PREPROCESSOR_TOSTRING_ID(x) #define PyGLM_WARN(id, msg) PyGLM_WARN_TYPE(id, PyExc_UserWarning, msg) #define PyGLM_WARN_TYPE(id, type, msg) if (PyGLM_SHOW_WARNINGS & (1ull << id)) PyErr_WarnEx(type, msg "\nYou can silence this warning by calling glm.silence(" PyGLM_PREPROCESSOR_TOSTRING(id) ")", 1) #define PyGLM_free(ptr) PyMem_Free(ptr); ptr = NULL; #define PyGLM_INCREF(ob) (Py_INCREF(ob), ob) #define PyGLM_DECREF(ob) (Py_DECREF(ob), ob) Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/number_functions.h000066400000000000000000000210501511156275200267420ustar00rootroot00000000000000#pragma once #include "../compiler_setup.h" static PyObject* PyGLM_GetNumber(PyObject* arg) { if (arg->ob_type->tp_as_number->nb_float != NULL) { return PyNumber_Float(arg); } if (arg->ob_type->tp_as_number->nb_int != NULL) { return PyNumber_Long(arg); } if (arg->ob_type->tp_as_number->nb_index != NULL) { return PyNumber_Index(arg); } PyErr_SetString(PyExc_Exception, "invalid getnumber request (this should not occur)"); return NULL; } static bool PyGLM_TestNumber(PyObject* arg) { PyObject* num = PyGLM_GetNumber(arg); if (num == NULL) { PyErr_Clear(); return false; } Py_DECREF(num); return true; } static unsigned long PyLong_AsUnsignedLongAndOverflow(PyObject* arg, int* overflow) { unsigned long out = PyLong_AsUnsignedLong(arg); if (PyErr_Occurred()) { PyErr_Clear(); *overflow = 1; } else { *overflow = 0; } return out; } /* static unsigned long long PyLong_AsUnsignedLongLongAndOverflow(PyObject* arg, int* overflow) { unsigned long long out = PyLong_AsUnsignedLongLong(arg); if (PyErr_Occurred()) { PyErr_Clear(); *overflow = 1; } else { *overflow = 0; } return out; } */ static int PyLong_Sign(PyObject* arg) { int overflow; long l = PyLong_AsLongAndOverflow(arg, &overflow); if (overflow) { return overflow; } return glm::sign(l); } #define PyGLM_COULD_BE_NUMBER(arg) (Py_TYPE(arg)->tp_as_number != NULL && (arg->ob_type->tp_as_number->nb_index != NULL || arg->ob_type->tp_as_number->nb_int != NULL || arg->ob_type->tp_as_number->nb_float != NULL)) #define PyGLM_Number_Check(arg) (PyFloat_Check(arg) || PyLong_Check(arg) || PyBool_Check(arg) || (PyGLM_COULD_BE_NUMBER(arg) &&PyGLM_TestNumber(arg))) template static T _PyGLM_Long_As_Number_No_Error(PyObject* arg) { if (std::numeric_limits::is_iec559) { int overflow; long long ll; ll = PyLong_AsLongLongAndOverflow(arg, &overflow); if (overflow == 1) { return static_cast(_PyGLM_Long_As_Number_No_Error(arg)); } else if (overflow == -1) { return static_cast(_PyGLM_Long_As_Number_No_Error(arg)); } return static_cast(ll); } if (std::is_same::value) { int overflow; long l = PyLong_AsLongAndOverflow(arg, &overflow); if (overflow) { PyGLM_WARN(PyGLM_OVERFLOW_WARNING, "Integer overflow (or underflow) occured."); } else { return static_cast(l); } } if (std::is_same::value) { unsigned long ul = PyLong_AsUnsignedLong(arg); if (PyErr_Occurred()) { PyErr_Clear(); PyGLM_WARN(PyGLM_OVERFLOW_WARNING, "Integer overflow (or underflow) occured."); } else { return static_cast(ul); } } if (std::is_same::value) { int overflow; long long ll = PyLong_AsLongLongAndOverflow(arg, &overflow); if (overflow) { PyGLM_WARN(PyGLM_OVERFLOW_WARNING, "Integer overflow (or underflow) occured."); } else { return static_cast(ll); } } if (std::is_same::value) { unsigned long long ull = PyLong_AsUnsignedLongLong(arg); if (PyErr_Occurred()) { PyErr_Clear(); PyGLM_WARN(PyGLM_OVERFLOW_WARNING, "Integer overflow (or underflow) occured."); } else { return static_cast(ull); } } return static_cast(PyLong_AsUnsignedLongLongMask(arg)); } static double PyGLM_Number_AsDouble(PyObject* arg) { if (PyFloat_Check(arg)) { return PyFloat_AS_DOUBLE(arg); } if (PyLong_Check(arg)) { return _PyGLM_Long_As_Number_No_Error(arg); } if (PyBool_Check(arg)) { return (arg == Py_True) ? 1.0 : 0.0; } if (PyNumber_Check(arg)) { PyObject* num = PyGLM_GetNumber(arg); double d = PyGLM_Number_AsDouble(num); Py_DECREF(num); return d; } PyErr_SetString(PyExc_Exception, "supplied argument is not a number (this should not occur)"); return -1.0; } static long PyGLM_Number_AsLong(PyObject* arg) { if (PyLong_Check(arg)) { return _PyGLM_Long_As_Number_No_Error(arg); } if (PyFloat_Check(arg)) { return (long)PyFloat_AS_DOUBLE(arg); } if (PyBool_Check(arg)) { return (arg == Py_True) ? 1 : 0; } if (PyNumber_Check(arg)) { PyObject* num = PyGLM_GetNumber(arg); long l = PyGLM_Number_AsLong(num); Py_DECREF(num); return l; } PyErr_SetString(PyExc_Exception, "supplied argument is not a number (this should not occur)"); return -1l; } static unsigned long PyGLM_Number_AsUnsignedLong(PyObject* arg) { if (PyLong_Check(arg)) { return _PyGLM_Long_As_Number_No_Error(arg); } if (PyFloat_Check(arg)) { return (unsigned long)PyFloat_AS_DOUBLE(arg); } if (PyBool_Check(arg)) { return (arg == Py_True) ? 1UL : 0UL; } if (PyNumber_Check(arg)) { PyObject* num = PyGLM_GetNumber(arg); unsigned long l = PyGLM_Number_AsUnsignedLong(num); Py_DECREF(num); return l; } PyErr_SetString(PyExc_Exception, "supplied argument is not a number (this should not occur)"); return (unsigned long) - 1l; } static long long PyGLM_Number_AsLongLong(PyObject* arg) { if (PyLong_Check(arg)) { return _PyGLM_Long_As_Number_No_Error(arg); } if (PyFloat_Check(arg)) { return (long long)PyFloat_AS_DOUBLE(arg); } if (PyBool_Check(arg)) { return (arg == Py_True) ? 1LL : 0LL; } if (PyNumber_Check(arg)) { PyObject* num = PyGLM_GetNumber(arg); long long l = PyGLM_Number_AsLongLong(num); Py_DECREF(num); return l; } PyErr_SetString(PyExc_Exception, "supplied argument is not a number (this should not occur)"); return -1ll; } static unsigned long long PyGLM_Number_AsUnsignedLongLong(PyObject* arg) { if (PyLong_Check(arg)) { return _PyGLM_Long_As_Number_No_Error(arg); } if (PyFloat_Check(arg)) { return (unsigned long long)PyFloat_AS_DOUBLE(arg); } if (PyBool_Check(arg)) { return (arg == Py_True) ? 1ull : 0ull; } if (PyNumber_Check(arg)) { PyObject* num = PyGLM_GetNumber(arg); unsigned long long l = PyGLM_Number_AsUnsignedLongLong(num); Py_DECREF(num); return l; } PyErr_SetString(PyExc_Exception, "supplied argument is not a number (this should not occur)"); return (unsigned long long)-1ll; } static bool PyGLM_Number_AsBool(PyObject* arg) { if (PyBool_Check(arg)) { return (arg == Py_True) ? true : false; } if (PyLong_Check(arg)) { return _PyGLM_Long_As_Number_No_Error(arg); } if (PyFloat_Check(arg)) { return (bool)PyFloat_AS_DOUBLE(arg); } if (PyNumber_Check(arg)) { PyObject* num = PyGLM_GetNumber(arg); bool b = PyGLM_Number_AsBool(num); Py_DECREF(num); return b; } PyErr_SetString(PyExc_Exception, "supplied argument is not a number (this should not occur)"); return false; } static float PyGLM_Number_AsFloat(PyObject* arg) { if (PyFloat_Check(arg)) { return (float)PyFloat_AS_DOUBLE(arg); } if (PyLong_Check(arg)) { return _PyGLM_Long_As_Number_No_Error(arg); } if (PyBool_Check(arg)) { return (arg == Py_True) ? 1.f : 0.f; } if (PyNumber_Check(arg)) { PyObject* num = PyGLM_GetNumber(arg); float f = PyGLM_Number_AsFloat(num); Py_DECREF(num); return f; } PyErr_SetString(PyExc_Exception, "supplied argument is not a number (this should not occur)"); return -1.0f; } template static T PyGLM_Number_FromPyObject(PyObject* value) { if (std::numeric_limits::is_iec559) { if (std::is_same::value) { return (T)PyGLM_Number_AsDouble(value); } return static_cast(PyGLM_Number_AsFloat(value)); } else if (std::numeric_limits::is_integer) { if (std::is_same::value) { return (T)PyGLM_Number_AsLongLong(value); } if (std::is_same::value) { return (T)PyGLM_Number_AsUnsignedLongLong(value); } if (std::is_same::value || !std::is_signed::value) { return (T)PyGLM_Number_AsUnsignedLong(value); } return static_cast(PyGLM_Number_AsLong(value)); } else if (std::is_same::value) { return (T)PyGLM_Number_AsBool(value); } PyErr_SetString(PyExc_Exception, "supplied argument is not a number (this should not occur)"); return (T)0; } template static PyObject* PyGLM_PyObject_FromNumber(T value) { if (std::numeric_limits::is_iec559) { return PyFloat_FromDouble(static_cast(value)); } else if (std::is_same::value) { if (value) { Py_RETURN_TRUE; } Py_RETURN_FALSE; } else if (std::numeric_limits::is_integer) { if (std::is_same::value) { return PyLong_FromLongLong((long long)value); } if (std::is_same::value) { return PyLong_FromUnsignedLongLong((unsigned long long)value); } if (std::is_same::value || !std::is_signed::value) { return PyLong_FromUnsignedLong((unsigned long)value); } return PyLong_FromLong((long)value); } return NULL; }Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/packers.h000066400000000000000000000045731511156275200250250ustar00rootroot00000000000000#pragma once #include "../compiler_setup.h" #include "type_getters/all.h" #include "number_functions.h" template static PyObject* pack_vec(glm::vec value) { PyTypeObject* vecType = PyGLM_VEC_TYPE(); vec* out = (vec*)vecType->tp_alloc(vecType, 0); if (out != NULL) { //constexpr uint8_t info_type = get_type_helper_type(); //constexpr uint8_t info = L | (info_type << PyGLM_TYPE_INFO_VEC_TYPE_OFFSET); //out->info = info; out->super_type = value; } return (PyObject*)out; } template static PyObject* pack_mvec(glm::vec* value, PyObject* master) { PyTypeObject* mvecType = PyGLM_MVEC_TYPE(); mvec* out = (mvec*)mvecType->tp_alloc(mvecType, 0); if (out != NULL) { //constexpr uint8_t info_type = get_type_helper_type(); //constexpr uint8_t info = L | (info_type << PyGLM_TYPE_INFO_VEC_TYPE_OFFSET); //out->info = info; out->super_type = value; out->master = master; Py_INCREF(master); } return (PyObject*)out; } template static PyObject* pack_mat(glm::mat value) { PyTypeObject* matType = PyGLM_MAT_TYPE(); mat* out = (mat*)matType->tp_alloc(matType, 0); if (out != NULL) { //constexpr uint8_t info_type = get_type_helper_type(); //constexpr uint8_t info = (uint8_t)((C << PyGLM_TYPE_INFO_MAT_SHAPE1_OFFSET) | (R << PyGLM_TYPE_INFO_MAT_SHAPE2_OFFSET) | (info_type << PyGLM_TYPE_INFO_MAT_TYPE_OFFSET)); //out->info = info; out->super_type = value; } return (PyObject*)out; } template static PyObject* pack_qua(glm::qua value) { PyTypeObject* quaType = PyGLM_QUA_TYPE(); qua* out = (qua*)quaType->tp_alloc(quaType, 0); if (out != NULL) { //constexpr uint8_t info_type = get_type_helper_type(); //constexpr uint8_t info = 4 | (info_type << PyGLM_TYPE_INFO_VEC_TYPE_OFFSET); //out->info = info; out->super_type = value; } return (PyObject*)out; } template static inline PyObject* pack(T value) { return PyGLM_PyObject_FromNumber(value); } template static inline PyObject* pack(glm::vec value) { return pack_vec(value); } template static inline PyObject* pack(glm::mat value) { return pack_mat(value); } template static inline PyObject* pack(glm::qua value) { return pack_qua(value); }Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/type_checkers.h000066400000000000000000003622101511156275200262200ustar00rootroot00000000000000#pragma once #include //#include #include #include "../compiler_setup.h" #include "../types/all.h" #include "helper_macros.h" #include "number_functions.h" #include #define PyGLM_SHAPE_GET(C, R) (1 << (11 + (3 * (C-2) + (R-2)))) #define PyGLM_TYPE_GET(T) (PyGLMTypeInfo::getDT()) #define PyGLM_PTI_Compare(a, b) (((a) & (b)) == (b)) #define PyGLM_PTI_Number_Check(pti) (pti.info & PyGLM_T_NUMBER) #define PyGLM_PTI_Number_T_Check(T, pti) (pti.info & (PyGLM_T_NUMBER | PyGLM_TYPE_GET(T))) #define PyGLM_PTI_Mat_CRT_Check(C, R, T, pti) (pti.info & (PyGLM_SHAPE_GET(C, R) | PyGLM_TYPE_GET(T) | PyGLM_T_MAT)) #define _SUB_PyGLM_PTI_GET_TYPE(o) ((o->ob_type->tp_dealloc == (destructor)vec_dealloc) ? PyGLM_T_VEC : (o->ob_type->tp_dealloc == (destructor)mat_dealloc) ? PyGLM_T_MAT : (o->ob_type->tp_dealloc == (destructor)qua_dealloc) ? PyGLM_T_QUA : (o->ob_type->tp_dealloc == (destructor)mvec_dealloc) ? PyGLM_T_MVEC : PyGLM_UNKNOWN) #define PyGLM_PTI_GET_TYPE(o) _SUB_PyGLM_PTI_GET_TYPE(((PyObject*)o)) enum class _FormatType { FLOAT, DOUBLE, INT8, UINT8, INT16, UINT16, INT32, UINT32, INT64, UINT64, BOOL, NONE }; static bool is_big_endian(void) { union { uint32_t i; int8_t c[4]; } num = {0x01020304}; return num.c[0] == 1; } // Get a Py_buffer from a PyObject in F-contiguous form static bool get_py_buffer(PyObject* arg, Py_buffer* out) { if (!PyObject_CheckBuffer(arg)) { return false; } constexpr int accepted_buffer_flags[] = {PyBUF_RECORDS_RO}; bool buffer_found = false; for (size_t i = 0; i < sizeof(accepted_buffer_flags) / sizeof(int); i++) { if (PyObject_GetBuffer(arg, out, accepted_buffer_flags[i]) == -1) { PyErr_Clear(); } else { buffer_found = true; break; } } if (!buffer_found) { return false; } if (PyBuffer_IsContiguous(out, 'F')) { return true; } Py_buffer temp = *out; out->buf = PyMem_Malloc(temp.len); if (out->buf == NULL) { PyBuffer_Release(&temp); return false; } // make out->buf a contiguous version of temp.buf PyBuffer_ToContiguous(out->buf, &temp, temp.len, 'F'); out->shape = reinterpret_cast(PyMem_Malloc(sizeof(Py_ssize_t) * temp.ndim)); out->strides = reinterpret_cast(PyMem_Malloc(sizeof(Py_ssize_t) * temp.ndim)); // copy format from temp to out const size_t format_len = strlen(temp.format); char* format = reinterpret_cast(PyMem_Malloc((format_len + 1) * sizeof(char))); memcpy(format, temp.format, (format_len + 1) * sizeof(char)); out->format = format; // copy shape from temp to out memcpy(out->shape, temp.shape, sizeof(Py_ssize_t) * temp.ndim); // adjust out->strides to Fortran contiguous layout PyBuffer_FillContiguousStrides(temp.ndim, temp.shape, out->strides, static_cast(temp.itemsize), 'F'); // mark buffer as readonly, since it's not the original data buffer out->readonly = 1; out->obj = NULL; PyBuffer_Release(&temp); return true; } // Release a Py_buffer aquired with get_py_buffer static void release_py_buffer(Py_buffer* buf) { if (buf->obj == NULL) { PyMem_Free(buf->format); PyMem_Free(buf->shape); PyMem_Free(buf->strides); PyMem_Free(buf->buf); } else { PyBuffer_Release(buf); } } static _FormatType getFormatFromSize(int size, bool isSigned) { switch(size) { case 1: if (isSigned) return _FormatType::INT8; return _FormatType::UINT8; case 2: if (isSigned) return _FormatType::INT16; return _FormatType::UINT16; case 4: if (isSigned) return _FormatType::INT32; return _FormatType::UINT32; case 8: if (isSigned) return _FormatType::INT64; return _FormatType::UINT64; } return _FormatType::NONE; } static _FormatType getFormatType(char* format) { if (format == NULL) { return _FormatType::UINT8; } if (format[0] == '=' || (is_big_endian() && format[0] == '>') || (!is_big_endian() && format[0] == '<') || (is_big_endian() && format[0] == '!')) { switch(format[1]) { case 'b': return _FormatType::INT8; case 'c': case 'B': return _FormatType::UINT8; case 'h': return _FormatType::INT16; case 'H': return _FormatType::UINT16; case 'i': case 'l': return _FormatType::INT32; case 'I': case 'L': return _FormatType::UINT32; case 'q': case 'n': return _FormatType::INT64; case 'Q': case 'N': return _FormatType::UINT64; case 'f': return _FormatType::FLOAT; case 'd': return _FormatType::DOUBLE; case 'P': return _FormatType::UINT64; case '?': return _FormatType::BOOL; default: return _FormatType::NONE; } } if ((!is_big_endian() && format[0] == '>') || (is_big_endian() && format[0] == '<') || (!is_big_endian() && format[0] == '!')) { return _FormatType::NONE; } const char formatChar = (format[0] == '@') ? format[1] : format[0]; switch(formatChar) { case 'f': return _FormatType::FLOAT; case 'd': return _FormatType::DOUBLE; case 'b': return getFormatFromSize(sizeof(char), true); case 'c': case 'B': return getFormatFromSize(sizeof(unsigned char), false); case 'h': return getFormatFromSize(sizeof(short), true); case 'H': return getFormatFromSize(sizeof(unsigned short), false); case 'i': return getFormatFromSize(sizeof(int), true); case 'I': return getFormatFromSize(sizeof(unsigned int), false); case 'l': return getFormatFromSize(sizeof(long), true); case 'L': return getFormatFromSize(sizeof(unsigned long), false); case 'q': return getFormatFromSize(sizeof(long long), true); case 'Q': return getFormatFromSize(sizeof(unsigned long long), false); case 'n': return getFormatFromSize(sizeof(Py_ssize_t), true); case 'N': return getFormatFromSize(sizeof(std::size_t), false); case 'P': return getFormatFromSize(sizeof(void*), false); case '?': return _FormatType::BOOL; default: return _FormatType::NONE; } } // necessary forward declarations template static glm::vec unpack_vec(PyObject* value); template static glm::mat unpack_mat(PyObject* value); template static glm::qua unpack_qua(PyObject* value); struct PyGLMSingleTypeHolder { // supposed to only hold a single data type enum class DType { NONE, BOOL, INT32, INT64, UINT64, FLOAT, DOUBLE }; DType dtype; void* data = NULL; bool needsToBeFreed = false; ~PyGLMSingleTypeHolder() { if (needsToBeFreed) { PyMem_Free(data); needsToBeFreed = false; } } PyGLMSingleTypeHolder() { dtype = DType::NONE; } PyGLMSingleTypeHolder(PyObject* o) { if (PyBool_Check(o)) { dtype = DType::BOOL; allocate(sizeof(bool)); *((bool*)data) = (o == Py_True) ? true : false; } else if (PyFloat_Check(o)) { double value = PyFloat_AS_DOUBLE(o); if (value > FLT_MAX || (value != 0.0 && value < FLT_MIN && value > - FLT_MIN) || value < - FLT_MAX) { // value doesn't fit in float dtype = DType::DOUBLE; allocate(sizeof(double)); *((double*)data) = value; } else { dtype = DType::FLOAT; allocate(sizeof(float)); *((float*)data) = static_cast(value); } } else if (PyLong_Check(o)) { int overflow; long asLong = PyLong_AsLongAndOverflow(o, &overflow); if (overflow != 0) { long long asLongLong = PyLong_AsLongLongAndOverflow(o, &overflow); if (overflow != 0) { unsigned long long asUnsignedLongLong = PyLong_AsUnsignedLongLongMask(o); dtype = DType::UINT64; allocate(sizeof(unsigned long long)); *((unsigned long long*)data) = asUnsignedLongLong; } else { dtype = DType::INT64; allocate(sizeof(long long)); *((long long*)data) = asLongLong; } } else { dtype = DType::INT32; allocate(sizeof(long)); *((long*)data) = asLong; } } else { dtype = DType::NONE; } } static int getMostImportantType(int accepted_types, std::initializer_list list) { DType highest_type = DType::NONE; for (DType dt : list) { if (highest_type < dt) { highest_type = dt; } else if (dt == DType::NONE) { return -1; } } if (highest_type == DType::BOOL && (accepted_types & PyGLM_DT_BOOL)) { return PyGLM_DT_BOOL; } if (highest_type == DType::DOUBLE && (accepted_types & PyGLM_DT_DOUBLE)) { return PyGLM_DT_DOUBLE; } if (accepted_types & PyGLM_DT_FLOAT) return PyGLM_DT_FLOAT; if (accepted_types & PyGLM_DT_DOUBLE) return PyGLM_DT_DOUBLE; if (highest_type == DType::INT32 && (accepted_types & PyGLM_DT_INT)) return PyGLM_DT_INT; if (highest_type == DType::INT64 && (accepted_types & PyGLM_DT_INT64)) return PyGLM_DT_INT64; if (highest_type == DType::UINT64 && (accepted_types & PyGLM_DT_UINT64)) return PyGLM_DT_UINT64; if (accepted_types & PyGLM_DT_INT) return PyGLM_DT_INT; if (accepted_types & PyGLM_DT_INT64) return PyGLM_DT_INT64; if (accepted_types & PyGLM_DT_UINT64) return PyGLM_DT_UINT64; if (accepted_types & PyGLM_DT_UINT) return PyGLM_DT_UINT; if (accepted_types & PyGLM_DT_INT16) return PyGLM_DT_INT16; if (accepted_types & PyGLM_DT_UINT16) return PyGLM_DT_UINT16; if (accepted_types & PyGLM_DT_INT8) return PyGLM_DT_INT8; if (accepted_types & PyGLM_DT_UINT8) return PyGLM_DT_UINT8; if (accepted_types & PyGLM_DT_BOOL) return PyGLM_DT_BOOL; return -1; } double asDouble() { switch (dtype) { case DType::DOUBLE: return *(double*)data; case DType::FLOAT: return static_cast(*(float*)data); case DType::INT32: return static_cast(*(long*)data); case DType::INT64: return static_cast(*(long long*)data); case DType::UINT64: return static_cast(*(unsigned long long*)data); case DType::BOOL: return static_cast(*(bool*)data); default: return 0.0; } } float asFloat() { switch (dtype) { case DType::DOUBLE: return static_cast(*(double*)data); case DType::FLOAT: return (*(float*)data); case DType::INT32: return static_cast(*(long*)data); case DType::INT64: return static_cast(*(long long*)data); case DType::UINT64: return static_cast(*(unsigned long long*)data); case DType::BOOL: return static_cast(*(bool*)data); default: return 0.0f; } } glm::i64 asInt64() { switch (dtype) { case DType::DOUBLE: return static_cast(*(double*)data); case DType::FLOAT: return static_cast(*(float*)data); case DType::INT32: return static_cast(*(long*)data); case DType::INT64: return static_cast(*(long long*)data); case DType::UINT64: return static_cast(*(unsigned long long*)data); case DType::BOOL: return static_cast(*(bool*)data); default: return 0ll; } } glm::u64 asUint64() { switch (dtype) { case DType::DOUBLE: return static_cast(*(double*)data); case DType::FLOAT: return static_cast(*(float*)data); case DType::INT32: return static_cast(*(long*)data); case DType::INT64: return static_cast(*(long long*)data); case DType::UINT64: return static_cast(*(unsigned long long*)data); case DType::BOOL: return static_cast(*(bool*)data); default: return 0ull; } } glm::i32 asInt32() { switch (dtype) { case DType::DOUBLE: return static_cast(*(double*)data); case DType::FLOAT: return static_cast(*(float*)data); case DType::INT32: return static_cast(*(long*)data); case DType::INT64: return static_cast(*(long long*)data); case DType::UINT64: return static_cast(*(unsigned long long*)data); case DType::BOOL: return static_cast(*(bool*)data); default: return 0; } } glm::u32 asUint32() { switch (dtype) { case DType::DOUBLE: return static_cast(*(double*)data); case DType::FLOAT: return static_cast(*(float*)data); case DType::INT32: return static_cast(*(long*)data); case DType::INT64: return static_cast(*(long long*)data); case DType::UINT64: return static_cast(*(unsigned long long*)data); case DType::BOOL: return static_cast(*(bool*)data); default: return 0u; } } glm::i16 asInt16() { switch (dtype) { case DType::DOUBLE: return static_cast(*(double*)data); case DType::FLOAT: return static_cast(*(float*)data); case DType::INT32: return static_cast(*(long*)data); case DType::INT64: return static_cast(*(long long*)data); case DType::UINT64: return static_cast(*(unsigned long long*)data); case DType::BOOL: return static_cast(*(bool*)data); default: return 0; } } glm::u16 asUint16() { switch (dtype) { case DType::DOUBLE: return static_cast(*(double*)data); case DType::FLOAT: return static_cast(*(float*)data); case DType::INT32: return static_cast(*(long*)data); case DType::INT64: return static_cast(*(long long*)data); case DType::UINT64: return static_cast(*(unsigned long long*)data); case DType::BOOL: return static_cast(*(bool*)data); default: return 0u; } } glm::i8 asInt8() { switch (dtype) { case DType::DOUBLE: return static_cast(*(double*)data); case DType::FLOAT: return static_cast(*(float*)data); case DType::INT32: return static_cast(*(long*)data); case DType::INT64: return static_cast(*(long long*)data); case DType::UINT64: return static_cast(*(unsigned long long*)data); case DType::BOOL: return static_cast(*(bool*)data); default: return 0; } } glm::u8 asUint8() { switch (dtype) { case DType::DOUBLE: return static_cast(*(double*)data); case DType::FLOAT: return static_cast(*(float*)data); case DType::INT32: return static_cast(*(long*)data); case DType::INT64: return static_cast(*(long long*)data); case DType::UINT64: return static_cast(*(unsigned long long*)data); case DType::BOOL: return static_cast(*(bool*)data); default: return 0u; } } bool asBool() { switch (dtype) { case DType::DOUBLE: return static_cast(*(double*)data); case DType::FLOAT: return static_cast(*(float*)data); case DType::INT32: return static_cast(*(long*)data); case DType::INT64: return static_cast(*(long long*)data); case DType::UINT64: return static_cast(*(unsigned long long*)data); case DType::BOOL: return static_cast(*(bool*)data); default: return false; } } private: void allocate(size_t size) { data = PyMem_Malloc(size); needsToBeFreed = true; } }; struct PyGLMTypeInfo { int info = 0; uint8 dataArray[128]; // maximum of 4 * 4 * 8 = 128 bytes of data void* data = &dataArray; bool isVec = false; bool isMat = false; bool isQua = false; PyGLMTypeInfo() = default; PyGLMTypeInfo(int accepted_types, PyObject* obj) { init(accepted_types, obj); } void init(int accepted_types, PyObject* obj) { isVec = false; isMat = false; isQua = false; info = 0; #if !(PyGLM_BUILD & PyGLM_NO_ITER_TYPECHECKING) if (obj->ob_type != &glmArrayType && PyObject_CheckBuffer(obj)) { Py_buffer view; char* customDataBuffer = NULL; if (!get_py_buffer(obj, &view)) { return; } const _FormatType formatType = getFormatType(view.format); if (formatType == _FormatType::NONE) { release_py_buffer(&view); return; } switch (view.ndim) { case 1: // one dimensional array (vec / qua) if (view.shape == NULL) { release_py_buffer(&view); return; } switch (view.shape[0]) { case 1: // vec1's if (!((accepted_types & PyGLM_T_ANY_VEC) && (accepted_types & PyGLM_SHAPE_1)) || view.format == NULL) { release_py_buffer(&view); return; } switch (formatType) { case _FormatType::FLOAT: if (!(accepted_types & PyGLM_DT_FLOAT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_FLOAT); break; case _FormatType::DOUBLE: if (!(accepted_types & PyGLM_DT_DOUBLE)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_DOUBLE); break; case _FormatType::INT8: if (!(accepted_types & PyGLM_DT_INT8)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_INT8); break; case _FormatType::UINT8: if (!(accepted_types & PyGLM_DT_UINT8)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_UINT8); break; case _FormatType::INT16: if (!(accepted_types & PyGLM_DT_INT16)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_INT16); break; case _FormatType::UINT16: if (!(accepted_types & PyGLM_DT_UINT16)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_UINT16); break; case _FormatType::INT32: if (!(accepted_types & PyGLM_DT_INT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_INT); break; case _FormatType::UINT32: if (!(accepted_types & PyGLM_DT_UINT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_UINT); break; case _FormatType::INT64: if (!(accepted_types & PyGLM_DT_INT64)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_INT64); break; case _FormatType::UINT64: if (!(accepted_types & PyGLM_DT_UINT64)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_UINT64); break; case _FormatType::BOOL: if (!(accepted_types & PyGLM_DT_BOOL)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_1 | PyGLM_DT_BOOL); break; default: release_py_buffer(&view); return; } break; case 2: // vec2's if (!((accepted_types & PyGLM_T_ANY_VEC) && (accepted_types & PyGLM_SHAPE_2)) || view.format == NULL) { release_py_buffer(&view); return; } switch (formatType) { case _FormatType::FLOAT: if (!(accepted_types & PyGLM_DT_FLOAT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_FLOAT); break; case _FormatType::DOUBLE: if (!(accepted_types & PyGLM_DT_DOUBLE)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_DOUBLE); break; case _FormatType::INT8: if (!(accepted_types & PyGLM_DT_INT8)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_INT8); break; case _FormatType::UINT8: if (!(accepted_types & PyGLM_DT_UINT8)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_UINT8); break; case _FormatType::INT16: if (!(accepted_types & PyGLM_DT_INT16)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_INT16); break; case _FormatType::UINT16: if (!(accepted_types & PyGLM_DT_UINT16)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_UINT16); break; case _FormatType::INT32: if (!(accepted_types & PyGLM_DT_INT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_INT); break; case _FormatType::UINT32: if (!(accepted_types & PyGLM_DT_UINT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_UINT); break; case _FormatType::INT64: if (!(accepted_types & PyGLM_DT_INT64)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_INT64); break; case _FormatType::UINT64: if (!(accepted_types & PyGLM_DT_UINT64)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_UINT64); break; case _FormatType::BOOL: if (!(accepted_types & PyGLM_DT_BOOL)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_2 | PyGLM_DT_BOOL); break; default: release_py_buffer(&view); return; } break; case 3: // vec3's if (!((accepted_types & PyGLM_T_ANY_VEC) && (accepted_types & PyGLM_SHAPE_3)) || view.format == NULL) { release_py_buffer(&view); return; } switch (formatType) { case _FormatType::FLOAT: if (!(accepted_types & PyGLM_DT_FLOAT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_FLOAT); break; case _FormatType::DOUBLE: if (!(accepted_types & PyGLM_DT_DOUBLE)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_DOUBLE); break; case _FormatType::INT8: if (!(accepted_types & PyGLM_DT_INT8)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_INT8); break; case _FormatType::UINT8: if (!(accepted_types & PyGLM_DT_UINT8)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_UINT8); break; case _FormatType::INT16: if (!(accepted_types & PyGLM_DT_INT16)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_INT16); break; case _FormatType::UINT16: if (!(accepted_types & PyGLM_DT_UINT16)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_UINT16); break; case _FormatType::INT32: if (!(accepted_types & PyGLM_DT_INT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_INT); break; case _FormatType::UINT32: if (!(accepted_types & PyGLM_DT_UINT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_UINT); break; case _FormatType::INT64: if (!(accepted_types & PyGLM_DT_INT64)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_INT64); break; case _FormatType::UINT64: if (!(accepted_types & PyGLM_DT_UINT64)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_UINT64); break; case _FormatType::BOOL: if (!(accepted_types & PyGLM_DT_BOOL)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_DT_BOOL); break; default: release_py_buffer(&view); return; } break; case 4: // vec4's and qua's if (!(((accepted_types & PyGLM_T_ANY_VEC) && (accepted_types & PyGLM_SHAPE_4)) || (accepted_types & PyGLM_T_QUA)) || view.format == NULL) { release_py_buffer(&view); return; } switch (formatType) { case _FormatType::FLOAT: if (!(accepted_types & PyGLM_DT_FLOAT)) { release_py_buffer(&view); return; } if (((accepted_types & PyGLM_T_ANY_VEC) && (accepted_types & PyGLM_SHAPE_4))) setInfo(PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_FLOAT); else setInfo(PyGLM_T_QUA | PyGLM_DT_FLOAT); break; case _FormatType::DOUBLE: if (!(accepted_types & PyGLM_DT_DOUBLE)) { release_py_buffer(&view); return; } if (((accepted_types & PyGLM_T_ANY_VEC) && (accepted_types & PyGLM_SHAPE_4))) setInfo(PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_DOUBLE); else setInfo(PyGLM_T_QUA | PyGLM_DT_DOUBLE); break; case _FormatType::INT8: if (!(accepted_types & PyGLM_DT_INT8)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_INT8); break; case _FormatType::UINT8: if (!(accepted_types & PyGLM_DT_UINT8)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_UINT8); break; case _FormatType::INT16: if (!(accepted_types & PyGLM_DT_INT16)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_INT16); break; case _FormatType::UINT16: if (!(accepted_types & PyGLM_DT_UINT16)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_UINT16); break; case _FormatType::INT32: if (!(accepted_types & PyGLM_DT_INT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_INT); break; case _FormatType::UINT32: if (!(accepted_types & PyGLM_DT_UINT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_UINT); break; case _FormatType::INT64: if (!(accepted_types & PyGLM_DT_INT64)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_INT64); break; case _FormatType::UINT64: if (!(accepted_types & PyGLM_DT_UINT64)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_UINT64); break; case _FormatType::BOOL: if (!(accepted_types & PyGLM_DT_BOOL)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_4 | PyGLM_DT_BOOL); break; default: release_py_buffer(&view); return; } break; default: release_py_buffer(&view); return; } break; case 2: // two dimensional array (mat) if (view.shape == NULL || !(accepted_types & PyGLM_T_MAT)) { release_py_buffer(&view); return; } switch (view.shape[1]) { case 2: // mat2xM's if (!(accepted_types & PyGLM_SHAPE_2xM)) { release_py_buffer(&view); return; } switch (view.shape[0]) { case 2: // mat2x2's if (!(accepted_types & PyGLM_SHAPE_2x2)) { release_py_buffer(&view); return; } switch (formatType) { case _FormatType::FLOAT: if (!(accepted_types & PyGLM_DT_FLOAT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_2x2 | PyGLM_DT_FLOAT); break; case _FormatType::DOUBLE: if (!(accepted_types & PyGLM_DT_DOUBLE)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_2x2 | PyGLM_DT_DOUBLE); break; case _FormatType::INT32: if (!(accepted_types & PyGLM_DT_INT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_2x2 | PyGLM_DT_INT); break; case _FormatType::UINT32: if (!(accepted_types & PyGLM_DT_UINT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_2x2 | PyGLM_DT_UINT); break; default: release_py_buffer(&view); return; } break; case 3: // mat2x3's if (!(accepted_types & PyGLM_SHAPE_2x3)) { release_py_buffer(&view); return; } switch (formatType) { case _FormatType::FLOAT: if (!(accepted_types & PyGLM_DT_FLOAT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_2x3 | PyGLM_DT_FLOAT); break; case _FormatType::DOUBLE: if (!(accepted_types & PyGLM_DT_DOUBLE)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_2x3 | PyGLM_DT_DOUBLE); break; case _FormatType::INT32: if (!(accepted_types & PyGLM_DT_INT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_2x3 | PyGLM_DT_INT); break; case _FormatType::UINT32: if (!(accepted_types & PyGLM_DT_UINT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_2x3 | PyGLM_DT_UINT); break; default: release_py_buffer(&view); return; } break; case 4: // mat2x4's if (!(accepted_types & PyGLM_SHAPE_2x4)) { release_py_buffer(&view); return; } switch (formatType) { case _FormatType::FLOAT: if (!(accepted_types & PyGLM_DT_FLOAT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_2x4 | PyGLM_DT_FLOAT); break; case _FormatType::DOUBLE: if (!(accepted_types & PyGLM_DT_DOUBLE)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_2x4 | PyGLM_DT_DOUBLE); break; case _FormatType::INT32: if (!(accepted_types & PyGLM_DT_INT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_2x4 | PyGLM_DT_INT); break; case _FormatType::UINT32: if (!(accepted_types & PyGLM_DT_UINT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_2x4 | PyGLM_DT_UINT); break; default: release_py_buffer(&view); return; } break; default: release_py_buffer(&view); return; } break; case 3: // mat3xM's if (!(accepted_types & PyGLM_SHAPE_3xM)) { release_py_buffer(&view); return; } switch (view.shape[0]) { case 2: // mat3x2's if (!(accepted_types & PyGLM_SHAPE_3x2)) { release_py_buffer(&view); return; } switch (formatType) { case _FormatType::FLOAT: if (!(accepted_types & PyGLM_DT_FLOAT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_3x2 | PyGLM_DT_FLOAT); break; case _FormatType::DOUBLE: if (!(accepted_types & PyGLM_DT_DOUBLE)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_3x2 | PyGLM_DT_DOUBLE); break; case _FormatType::INT32: if (!(accepted_types & PyGLM_DT_INT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_3x2 | PyGLM_DT_INT); break; case _FormatType::UINT32: if (!(accepted_types & PyGLM_DT_UINT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_3x2 | PyGLM_DT_UINT); break; default: release_py_buffer(&view); return; } break; case 3: // mat3x3's if (!(accepted_types & PyGLM_SHAPE_3x3)) { release_py_buffer(&view); return; } switch (formatType) { case _FormatType::FLOAT: if (!(accepted_types & PyGLM_DT_FLOAT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_3x3 | PyGLM_DT_FLOAT); break; case _FormatType::DOUBLE: if (!(accepted_types & PyGLM_DT_DOUBLE)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_3x3 | PyGLM_DT_DOUBLE); break; case _FormatType::INT32: if (!(accepted_types & PyGLM_DT_INT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_3x3 | PyGLM_DT_INT); break; case _FormatType::UINT32: if (!(accepted_types & PyGLM_DT_UINT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_3x3 | PyGLM_DT_UINT); break; default: release_py_buffer(&view); return; } break; case 4: // mat3x4's if (!(accepted_types & PyGLM_SHAPE_3x4)) { release_py_buffer(&view); return; } switch (formatType) { case _FormatType::FLOAT: if (!(accepted_types & PyGLM_DT_FLOAT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_3x4 | PyGLM_DT_FLOAT); break; case _FormatType::DOUBLE: if (!(accepted_types & PyGLM_DT_DOUBLE)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_3x4 | PyGLM_DT_DOUBLE); break; case _FormatType::INT32: if (!(accepted_types & PyGLM_DT_INT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_3x4 | PyGLM_DT_INT); break; case _FormatType::UINT32: if (!(accepted_types & PyGLM_DT_UINT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_3x4 | PyGLM_DT_UINT); break; default: release_py_buffer(&view); return; } break; default: release_py_buffer(&view); return; } break; case 4: // mat4xM's if (!(accepted_types & PyGLM_SHAPE_4xM)) { release_py_buffer(&view); return; } switch (view.shape[0]) { case 2: // mat4x2's if (!(accepted_types & PyGLM_SHAPE_4x2)) { release_py_buffer(&view); return; } switch (formatType) { case _FormatType::FLOAT: if (!(accepted_types & PyGLM_DT_FLOAT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_4x2 | PyGLM_DT_FLOAT); break; case _FormatType::DOUBLE: if (!(accepted_types & PyGLM_DT_DOUBLE)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_4x2 | PyGLM_DT_DOUBLE); break; case _FormatType::INT32: if (!(accepted_types & PyGLM_DT_INT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_4x2 | PyGLM_DT_INT); break; case _FormatType::UINT32: if (!(accepted_types & PyGLM_DT_UINT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_4x2 | PyGLM_DT_UINT); break; default: release_py_buffer(&view); return; } break; case 3: // mat4x3's if (!(accepted_types & PyGLM_SHAPE_4x3)) { release_py_buffer(&view); return; } switch (formatType) { case _FormatType::FLOAT: if (!(accepted_types & PyGLM_DT_FLOAT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_4x3 | PyGLM_DT_FLOAT); break; case _FormatType::DOUBLE: if (!(accepted_types & PyGLM_DT_DOUBLE)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_4x3 | PyGLM_DT_DOUBLE); break; case _FormatType::INT32: if (!(accepted_types & PyGLM_DT_INT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_4x3 | PyGLM_DT_INT); break; case _FormatType::UINT32: if (!(accepted_types & PyGLM_DT_UINT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_4x3 | PyGLM_DT_UINT); break; default: release_py_buffer(&view); return; } break; case 4: // mat4x4's if (!(accepted_types & PyGLM_SHAPE_4x4)) { release_py_buffer(&view); return; } switch (formatType) { case _FormatType::FLOAT: if (!(accepted_types & PyGLM_DT_FLOAT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_4x4 | PyGLM_DT_FLOAT); break; case _FormatType::DOUBLE: if (!(accepted_types & PyGLM_DT_DOUBLE)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_4x4 | PyGLM_DT_DOUBLE); break; case _FormatType::INT32: if (!(accepted_types & PyGLM_DT_INT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_4x4 | PyGLM_DT_INT); break; case _FormatType::UINT32: if (!(accepted_types & PyGLM_DT_UINT)) { release_py_buffer(&view); return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_4x4 | PyGLM_DT_UINT); break; default: release_py_buffer(&view); return; } break; default: release_py_buffer(&view); return; } break; default: release_py_buffer(&view); return; } break; default: release_py_buffer(&view); return; } if (view.readonly == 0) { data = view.buf; } else if (!customDataBuffer) { allocate(view.len); memcpy(data, view.buf, view.len); } release_py_buffer(&view); return; } // end of getbuffer checking if (PyGLM_TupleOrList_Check(obj)) { Py_ssize_t size = PyGLM_TupleOrList_GET_SIZE(obj); if ((accepted_types & PyGLM_SHAPE_1) && (accepted_types & PyGLM_T_ANY_VEC) && size == 1) { // vec1's PyObject* item1 = PyGLM_TupleOrList_GET_ITEM(obj, 0); PyGLMSingleTypeHolder item1Out = PyGLMSingleTypeHolder(item1); int out_type = PyGLMSingleTypeHolder::getMostImportantType(accepted_types, { item1Out.dtype }); if (out_type == -1) { data = NULL; return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_1 | out_type); switch (out_type) { case PyGLM_DT_FLOAT: allocate(sizeof(glm::vec<1, float>)); *((glm::vec<1, float>*)data) = glm::vec<1, float>(item1Out.asFloat()); return; case PyGLM_DT_DOUBLE: allocate(sizeof(glm::vec<1, double>)); *((glm::vec<1, double>*)data) = glm::vec<1, double>(item1Out.asDouble()); return; case PyGLM_DT_INT64: allocate(sizeof(glm::vec<1, glm::i64>)); *((glm::vec<1, glm::i64>*)data) = glm::vec<1, glm::i64>(item1Out.asInt64()); return; case PyGLM_DT_UINT64: allocate(sizeof(glm::vec<1, glm::u64>)); *((glm::vec<1, glm::u64>*)data) = glm::vec<1, glm::u64>(item1Out.asUint64()); return; case PyGLM_DT_INT: allocate(sizeof(glm::vec<1, glm::i32>)); *((glm::vec<1, glm::i32>*)data) = glm::vec<1, glm::i32>(item1Out.asInt32()); return; case PyGLM_DT_UINT: allocate(sizeof(glm::vec<1, glm::u32>)); *((glm::vec<1, glm::u32>*)data) = glm::vec<1, glm::u32>(item1Out.asUint32()); return; case PyGLM_DT_INT16: allocate(sizeof(glm::vec<1, glm::i16>)); *((glm::vec<1, glm::i16>*)data) = glm::vec<1, glm::i16>(item1Out.asInt16()); return; case PyGLM_DT_UINT16: allocate(sizeof(glm::vec<1, glm::u16>)); *((glm::vec<1, glm::u16>*)data) = glm::vec<1, glm::u16>(item1Out.asUint16()); return; case PyGLM_DT_INT8: allocate(sizeof(glm::vec<1, glm::i8>)); *((glm::vec<1, glm::i8>*)data) = glm::vec<1, glm::i8>(item1Out.asInt8()); return; case PyGLM_DT_UINT8: allocate(sizeof(glm::vec<1, glm::u8>)); *((glm::vec<1, glm::u8>*)data) = glm::vec<1, glm::u8>(item1Out.asUint8()); return; case PyGLM_DT_BOOL: allocate(sizeof(glm::vec<1, bool>)); *((glm::vec<1, bool>*)data) = glm::vec<1, bool>(item1Out.asBool()); return; } } else if (size == 2) { // vec2's and mat2xM's PyObject* item1 = PyGLM_TupleOrList_GET_ITEM(obj, 0); PyObject* item2 = PyGLM_TupleOrList_GET_ITEM(obj, 1); if ((accepted_types & PyGLM_T_MAT) && PyGLM_TupleOrList_Check(item1) && PyGLM_TupleOrList_Check(item2)) { Py_ssize_t innerSize = PyGLM_TupleOrList_GET_SIZE(item1); if (innerSize != PyGLM_TupleOrList_GET_SIZE(item2)) { return; } if (innerSize == 2 && (accepted_types & PyGLM_SHAPE_2x2)) { // mat2x2 PyObject* innerItem1 = PyGLM_TupleOrList_GET_ITEM(item1, 0); PyObject* innerItem2 = PyGLM_TupleOrList_GET_ITEM(item1, 1); PyObject* innerItem3 = PyGLM_TupleOrList_GET_ITEM(item2, 0); PyObject* innerItem4 = PyGLM_TupleOrList_GET_ITEM(item2, 1); PyGLMSingleTypeHolder innerItem1Out = PyGLMSingleTypeHolder(innerItem1); PyGLMSingleTypeHolder innerItem2Out = PyGLMSingleTypeHolder(innerItem2); PyGLMSingleTypeHolder innerItem3Out = PyGLMSingleTypeHolder(innerItem3); PyGLMSingleTypeHolder innerItem4Out = PyGLMSingleTypeHolder(innerItem4); int out_type = PyGLMSingleTypeHolder::getMostImportantType(accepted_types, { innerItem1Out.dtype, innerItem2Out.dtype, innerItem3Out.dtype, innerItem4Out.dtype }); if (out_type == -1) { data = NULL; return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_2x2 | out_type); switch (out_type) { case PyGLM_DT_FLOAT: allocate(sizeof(glm::mat<2, 2, float>)); *((glm::mat<2, 2, float>*)data) = glm::mat<2, 2, float>(innerItem1Out.asFloat(), innerItem2Out.asFloat(), innerItem3Out.asFloat(), innerItem4Out.asFloat()); return; case PyGLM_DT_DOUBLE: allocate(sizeof(glm::mat<2, 2, double>)); *((glm::mat<2, 2, double>*)data) = glm::mat<2, 2, double>(innerItem1Out.asDouble(), innerItem2Out.asDouble(), innerItem3Out.asDouble(), innerItem4Out.asDouble()); return; case PyGLM_DT_INT64: allocate(sizeof(glm::mat<2, 2, glm::i64>)); *((glm::mat<2, 2, glm::i64>*)data) = glm::mat<2, 2, glm::i64>(innerItem1Out.asInt64(), innerItem2Out.asInt64(), innerItem3Out.asInt64(), innerItem4Out.asInt64()); return; case PyGLM_DT_UINT64: allocate(sizeof(glm::mat<2, 2, glm::u64>)); *((glm::mat<2, 2, glm::u64>*)data) = glm::mat<2, 2, glm::u64>(innerItem1Out.asUint64(), innerItem2Out.asUint64(), innerItem3Out.asUint64(), innerItem4Out.asUint64()); return; case PyGLM_DT_INT: allocate(sizeof(glm::mat<2, 2, glm::i32>)); *((glm::mat<2, 2, glm::i32>*)data) = glm::mat<2, 2, glm::i32>(innerItem1Out.asInt32(), innerItem2Out.asInt32(), innerItem3Out.asInt32(), innerItem4Out.asInt32()); return; case PyGLM_DT_UINT: allocate(sizeof(glm::mat<2, 2, glm::u32>)); *((glm::mat<2, 2, glm::u32>*)data) = glm::mat<2, 2, glm::u32>(innerItem1Out.asUint32(), innerItem2Out.asUint32(), innerItem3Out.asUint32(), innerItem4Out.asUint32()); return; case PyGLM_DT_INT16: allocate(sizeof(glm::mat<2, 2, glm::i16>)); *((glm::mat<2, 2, glm::i16>*)data) = glm::mat<2, 2, glm::i16>(innerItem1Out.asInt16(), innerItem2Out.asInt16(), innerItem3Out.asInt16(), innerItem4Out.asInt16()); return; case PyGLM_DT_UINT16: allocate(sizeof(glm::mat<2, 2, glm::u16>)); *((glm::mat<2, 2, glm::u16>*)data) = glm::mat<2, 2, glm::u16>(innerItem1Out.asUint16(), innerItem2Out.asUint16(), innerItem3Out.asUint16(), innerItem4Out.asUint16()); return; case PyGLM_DT_INT8: allocate(sizeof(glm::mat<2, 2, glm::i8>)); *((glm::mat<2, 2, glm::i8>*)data) = glm::mat<2, 2, glm::i8>(innerItem1Out.asInt8(), innerItem2Out.asInt8(), innerItem3Out.asInt8(), innerItem4Out.asInt8()); return; case PyGLM_DT_UINT8: allocate(sizeof(glm::mat<2, 2, glm::u8>)); *((glm::mat<2, 2, glm::u8>*)data) = glm::mat<2, 2, glm::u8>(innerItem1Out.asUint8(), innerItem2Out.asUint8(), innerItem3Out.asUint8(), innerItem4Out.asUint8()); return; case PyGLM_DT_BOOL: allocate(sizeof(glm::mat<2, 2, bool>)); *((glm::mat<2, 2, bool>*)data) = glm::mat<2, 2, bool>(innerItem1Out.asBool(), innerItem2Out.asBool(), innerItem3Out.asBool(), innerItem4Out.asBool()); return; } } else if (innerSize == 3 && (accepted_types & PyGLM_SHAPE_2x3)) { // mat2x3 PyObject* innerItem1 = PyGLM_TupleOrList_GET_ITEM(item1, 0); PyObject* innerItem2 = PyGLM_TupleOrList_GET_ITEM(item1, 1); PyObject* innerItem3 = PyGLM_TupleOrList_GET_ITEM(item1, 2); PyObject* innerItem4 = PyGLM_TupleOrList_GET_ITEM(item2, 0); PyObject* innerItem5 = PyGLM_TupleOrList_GET_ITEM(item2, 1); PyObject* innerItem6 = PyGLM_TupleOrList_GET_ITEM(item2, 2); PyGLMSingleTypeHolder innerItem1Out = PyGLMSingleTypeHolder(innerItem1); PyGLMSingleTypeHolder innerItem2Out = PyGLMSingleTypeHolder(innerItem2); PyGLMSingleTypeHolder innerItem3Out = PyGLMSingleTypeHolder(innerItem3); PyGLMSingleTypeHolder innerItem4Out = PyGLMSingleTypeHolder(innerItem4); PyGLMSingleTypeHolder innerItem5Out = PyGLMSingleTypeHolder(innerItem5); PyGLMSingleTypeHolder innerItem6Out = PyGLMSingleTypeHolder(innerItem6); int out_type = PyGLMSingleTypeHolder::getMostImportantType(accepted_types, { innerItem1Out.dtype, innerItem2Out.dtype, innerItem3Out.dtype, innerItem4Out.dtype, innerItem5Out.dtype, innerItem6Out.dtype }); if (out_type == -1) { data = NULL; return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_2x3 | out_type); switch (out_type) { case PyGLM_DT_FLOAT: allocate(sizeof(glm::mat<2, 3, float>)); *((glm::mat<2, 3, float>*)data) = glm::mat<2, 3, float>(innerItem1Out.asFloat(), innerItem2Out.asFloat(), innerItem3Out.asFloat(), innerItem4Out.asFloat(), innerItem5Out.asFloat(), innerItem6Out.asFloat()); return; case PyGLM_DT_DOUBLE: allocate(sizeof(glm::mat<2, 3, double>)); *((glm::mat<2, 3, double>*)data) = glm::mat<2, 3, double>(innerItem1Out.asDouble(), innerItem2Out.asDouble(), innerItem3Out.asDouble(), innerItem4Out.asDouble(), innerItem5Out.asDouble(), innerItem6Out.asDouble()); return; case PyGLM_DT_INT64: allocate(sizeof(glm::mat<2, 3, glm::i64>)); *((glm::mat<2, 3, glm::i64>*)data) = glm::mat<2, 3, glm::i64>(innerItem1Out.asInt64(), innerItem2Out.asInt64(), innerItem3Out.asInt64(), innerItem4Out.asInt64(), innerItem5Out.asInt64(), innerItem6Out.asInt64()); return; case PyGLM_DT_UINT64: allocate(sizeof(glm::mat<2, 3, glm::u64>)); *((glm::mat<2, 3, glm::u64>*)data) = glm::mat<2, 3, glm::u64>(innerItem1Out.asUint64(), innerItem2Out.asUint64(), innerItem3Out.asUint64(), innerItem4Out.asUint64(), innerItem5Out.asUint64(), innerItem6Out.asUint64()); return; case PyGLM_DT_INT: allocate(sizeof(glm::mat<2, 3, glm::i32>)); *((glm::mat<2, 3, glm::i32>*)data) = glm::mat<2, 3, glm::i32>(innerItem1Out.asInt32(), innerItem2Out.asInt32(), innerItem3Out.asInt32(), innerItem4Out.asInt32(), innerItem5Out.asInt32(), innerItem6Out.asInt32()); return; case PyGLM_DT_UINT: allocate(sizeof(glm::mat<2, 3, glm::u32>)); *((glm::mat<2, 3, glm::u32>*)data) = glm::mat<2, 3, glm::u32>(innerItem1Out.asUint32(), innerItem2Out.asUint32(), innerItem3Out.asUint32(), innerItem4Out.asUint32(), innerItem5Out.asUint32(), innerItem6Out.asUint32()); return; case PyGLM_DT_INT16: allocate(sizeof(glm::mat<2, 3, glm::i16>)); *((glm::mat<2, 3, glm::i16>*)data) = glm::mat<2, 3, glm::i16>(innerItem1Out.asInt16(), innerItem2Out.asInt16(), innerItem3Out.asInt16(), innerItem4Out.asInt16(), innerItem5Out.asInt16(), innerItem6Out.asInt16()); return; case PyGLM_DT_UINT16: allocate(sizeof(glm::mat<2, 3, glm::u16>)); *((glm::mat<2, 3, glm::u16>*)data) = glm::mat<2, 3, glm::u16>(innerItem1Out.asUint16(), innerItem2Out.asUint16(), innerItem3Out.asUint16(), innerItem4Out.asUint16(), innerItem5Out.asUint16(), innerItem6Out.asUint16()); return; case PyGLM_DT_INT8: allocate(sizeof(glm::mat<2, 3, glm::i8>)); *((glm::mat<2, 3, glm::i8>*)data) = glm::mat<2, 3, glm::i8>(innerItem1Out.asInt8(), innerItem2Out.asInt8(), innerItem3Out.asInt8(), innerItem4Out.asInt8(), innerItem5Out.asInt8(), innerItem6Out.asInt8()); return; case PyGLM_DT_UINT8: allocate(sizeof(glm::mat<2, 3, glm::u8>)); *((glm::mat<2, 3, glm::u8>*)data) = glm::mat<2, 3, glm::u8>(innerItem1Out.asUint8(), innerItem2Out.asUint8(), innerItem3Out.asUint8(), innerItem4Out.asUint8(), innerItem5Out.asUint8(), innerItem6Out.asUint8()); return; case PyGLM_DT_BOOL: allocate(sizeof(glm::mat<2, 3, bool>)); *((glm::mat<2, 3, bool>*)data) = glm::mat<2, 3, bool>(innerItem1Out.asBool(), innerItem2Out.asBool(), innerItem3Out.asBool(), innerItem4Out.asBool(), innerItem5Out.asBool(), innerItem6Out.asBool()); return; } } else if (innerSize == 4 && (accepted_types & PyGLM_SHAPE_2x4)) { // mat2x4 PyObject* innerItem1 = PyGLM_TupleOrList_GET_ITEM(item1, 0); PyObject* innerItem2 = PyGLM_TupleOrList_GET_ITEM(item1, 1); PyObject* innerItem3 = PyGLM_TupleOrList_GET_ITEM(item1, 2); PyObject* innerItem4 = PyGLM_TupleOrList_GET_ITEM(item1, 3); PyObject* innerItem5 = PyGLM_TupleOrList_GET_ITEM(item2, 0); PyObject* innerItem6 = PyGLM_TupleOrList_GET_ITEM(item2, 1); PyObject* innerItem7 = PyGLM_TupleOrList_GET_ITEM(item2, 2); PyObject* innerItem8 = PyGLM_TupleOrList_GET_ITEM(item2, 3); PyGLMSingleTypeHolder innerItem1Out = PyGLMSingleTypeHolder(innerItem1); PyGLMSingleTypeHolder innerItem2Out = PyGLMSingleTypeHolder(innerItem2); PyGLMSingleTypeHolder innerItem3Out = PyGLMSingleTypeHolder(innerItem3); PyGLMSingleTypeHolder innerItem4Out = PyGLMSingleTypeHolder(innerItem4); PyGLMSingleTypeHolder innerItem5Out = PyGLMSingleTypeHolder(innerItem5); PyGLMSingleTypeHolder innerItem6Out = PyGLMSingleTypeHolder(innerItem6); PyGLMSingleTypeHolder innerItem7Out = PyGLMSingleTypeHolder(innerItem7); PyGLMSingleTypeHolder innerItem8Out = PyGLMSingleTypeHolder(innerItem8); int out_type = PyGLMSingleTypeHolder::getMostImportantType(accepted_types, { innerItem1Out.dtype, innerItem2Out.dtype, innerItem3Out.dtype, innerItem4Out.dtype, innerItem5Out.dtype, innerItem6Out.dtype, innerItem7Out.dtype, innerItem8Out.dtype }); if (out_type == -1) { data = NULL; return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_2x4 | out_type); switch (out_type) { case PyGLM_DT_FLOAT: allocate(sizeof(glm::mat<2, 4, float>)); *((glm::mat<2, 4, float>*)data) = glm::mat<2, 4, float>(innerItem1Out.asFloat(), innerItem2Out.asFloat(), innerItem3Out.asFloat(), innerItem4Out.asFloat(), innerItem5Out.asFloat(), innerItem6Out.asFloat(), innerItem7Out.asFloat(), innerItem8Out.asFloat()); return; case PyGLM_DT_DOUBLE: allocate(sizeof(glm::mat<2, 4, double>)); *((glm::mat<2, 4, double>*)data) = glm::mat<2, 4, double>(innerItem1Out.asDouble(), innerItem2Out.asDouble(), innerItem3Out.asDouble(), innerItem4Out.asDouble(), innerItem5Out.asDouble(), innerItem6Out.asDouble(), innerItem7Out.asDouble(), innerItem8Out.asDouble()); return; case PyGLM_DT_INT64: allocate(sizeof(glm::mat<2, 4, glm::i64>)); *((glm::mat<2, 4, glm::i64>*)data) = glm::mat<2, 4, glm::i64>(innerItem1Out.asInt64(), innerItem2Out.asInt64(), innerItem3Out.asInt64(), innerItem4Out.asInt64(), innerItem5Out.asInt64(), innerItem6Out.asInt64(), innerItem7Out.asInt64(), innerItem8Out.asInt64()); return; case PyGLM_DT_UINT64: allocate(sizeof(glm::mat<2, 4, glm::u64>)); *((glm::mat<2, 4, glm::u64>*)data) = glm::mat<2, 4, glm::u64>(innerItem1Out.asUint64(), innerItem2Out.asUint64(), innerItem3Out.asUint64(), innerItem4Out.asUint64(), innerItem5Out.asUint64(), innerItem6Out.asUint64(), innerItem7Out.asUint64(), innerItem8Out.asUint64()); return; case PyGLM_DT_INT: allocate(sizeof(glm::mat<2, 4, glm::i32>)); *((glm::mat<2, 4, glm::i32>*)data) = glm::mat<2, 4, glm::i32>(innerItem1Out.asInt32(), innerItem2Out.asInt32(), innerItem3Out.asInt32(), innerItem4Out.asInt32(), innerItem5Out.asInt32(), innerItem6Out.asInt32(), innerItem7Out.asInt32(), innerItem8Out.asInt32()); return; case PyGLM_DT_UINT: allocate(sizeof(glm::mat<2, 4, glm::u32>)); *((glm::mat<2, 4, glm::u32>*)data) = glm::mat<2, 4, glm::u32>(innerItem1Out.asUint32(), innerItem2Out.asUint32(), innerItem3Out.asUint32(), innerItem4Out.asUint32(), innerItem5Out.asUint32(), innerItem6Out.asUint32(), innerItem7Out.asUint32(), innerItem8Out.asUint32()); return; case PyGLM_DT_INT16: allocate(sizeof(glm::mat<2, 4, glm::i16>)); *((glm::mat<2, 4, glm::i16>*)data) = glm::mat<2, 4, glm::i16>(innerItem1Out.asInt16(), innerItem2Out.asInt16(), innerItem3Out.asInt16(), innerItem4Out.asInt16(), innerItem5Out.asInt16(), innerItem6Out.asInt16(), innerItem7Out.asInt16(), innerItem8Out.asInt16()); return; case PyGLM_DT_UINT16: allocate(sizeof(glm::mat<2, 4, glm::u16>)); *((glm::mat<2, 4, glm::u16>*)data) = glm::mat<2, 4, glm::u16>(innerItem1Out.asUint16(), innerItem2Out.asUint16(), innerItem3Out.asUint16(), innerItem4Out.asUint16(), innerItem5Out.asUint16(), innerItem6Out.asUint16(), innerItem7Out.asUint16(), innerItem8Out.asUint16()); return; case PyGLM_DT_INT8: allocate(sizeof(glm::mat<2, 4, glm::i8>)); *((glm::mat<2, 4, glm::i8>*)data) = glm::mat<2, 4, glm::i8>(innerItem1Out.asInt8(), innerItem2Out.asInt8(), innerItem3Out.asInt8(), innerItem4Out.asInt8(), innerItem5Out.asInt8(), innerItem6Out.asInt8(), innerItem7Out.asInt8(), innerItem8Out.asInt8()); return; case PyGLM_DT_UINT8: allocate(sizeof(glm::mat<2, 4, glm::u8>)); *((glm::mat<2, 4, glm::u8>*)data) = glm::mat<2, 4, glm::u8>(innerItem1Out.asUint8(), innerItem2Out.asUint8(), innerItem3Out.asUint8(), innerItem4Out.asUint8(), innerItem5Out.asUint8(), innerItem6Out.asUint8(), innerItem7Out.asUint8(), innerItem8Out.asUint8()); return; case PyGLM_DT_BOOL: allocate(sizeof(glm::mat<2, 4, bool>)); *((glm::mat<2, 4, bool>*)data) = glm::mat<2, 4, bool>(innerItem1Out.asBool(), innerItem2Out.asBool(), innerItem3Out.asBool(), innerItem4Out.asBool(), innerItem5Out.asBool(), innerItem6Out.asBool(), innerItem7Out.asBool(), innerItem8Out.asBool()); return; } } } if ((accepted_types & PyGLM_SHAPE_2) && (accepted_types & PyGLM_T_ANY_VEC)) { PyGLMSingleTypeHolder item1Out = PyGLMSingleTypeHolder(item1); PyGLMSingleTypeHolder item2Out = PyGLMSingleTypeHolder(item2); int out_type = PyGLMSingleTypeHolder::getMostImportantType(accepted_types, { item1Out.dtype, item2Out.dtype }); if (out_type == -1) { data = NULL; return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_2 | out_type); switch (out_type) { case PyGLM_DT_FLOAT: allocate(sizeof(glm::vec<2, float>)); *((glm::vec<2, float>*)data) = glm::vec<2, float>(item1Out.asFloat(), item2Out.asFloat()); return; case PyGLM_DT_DOUBLE: allocate(sizeof(glm::vec<2, double>)); *((glm::vec<2, double>*)data) = glm::vec<2, double>(item1Out.asDouble(), item2Out.asDouble()); return; case PyGLM_DT_INT64: allocate(sizeof(glm::vec<2, glm::i64>)); *((glm::vec<2, glm::i64>*)data) = glm::vec<2, glm::i64>(item1Out.asInt64(), item2Out.asInt64()); return; case PyGLM_DT_UINT64: allocate(sizeof(glm::vec<2, glm::u64>)); *((glm::vec<2, glm::u64>*)data) = glm::vec<2, glm::u64>(item1Out.asUint64(), item2Out.asUint64()); return; case PyGLM_DT_INT: allocate(sizeof(glm::vec<2, glm::i32>)); *((glm::vec<2, glm::i32>*)data) = glm::vec<2, glm::i32>(item1Out.asInt32(), item2Out.asInt32()); return; case PyGLM_DT_UINT: allocate(sizeof(glm::vec<2, glm::u32>)); *((glm::vec<2, glm::u32>*)data) = glm::vec<2, glm::u32>(item1Out.asUint32(), item2Out.asUint32()); return; case PyGLM_DT_INT16: allocate(sizeof(glm::vec<2, glm::i16>)); *((glm::vec<2, glm::i16>*)data) = glm::vec<2, glm::i16>(item1Out.asInt16(), item2Out.asInt16()); return; case PyGLM_DT_UINT16: allocate(sizeof(glm::vec<2, glm::u16>)); *((glm::vec<2, glm::u16>*)data) = glm::vec<2, glm::u16>(item1Out.asUint16(), item2Out.asUint16()); return; case PyGLM_DT_INT8: allocate(sizeof(glm::vec<2, glm::i8>)); *((glm::vec<2, glm::i8>*)data) = glm::vec<2, glm::i8>(item1Out.asInt8(), item2Out.asInt8()); return; case PyGLM_DT_UINT8: allocate(sizeof(glm::vec<2, glm::u8>)); *((glm::vec<2, glm::u8>*)data) = glm::vec<2, glm::u8>(item1Out.asUint8(), item2Out.asUint8()); return; case PyGLM_DT_BOOL: allocate(sizeof(glm::vec<2, bool>)); *((glm::vec<2, bool>*)data) = glm::vec<2, bool>(item1Out.asBool(), item2Out.asBool()); return; } } } else if (size == 3) { // vec3's and mat3xM's PyObject* item1 = PyGLM_TupleOrList_GET_ITEM(obj, 0); PyObject* item2 = PyGLM_TupleOrList_GET_ITEM(obj, 1); PyObject* item3 = PyGLM_TupleOrList_GET_ITEM(obj, 2); if ((accepted_types & PyGLM_T_MAT) && PyGLM_TupleOrList_Check(item1) && PyGLM_TupleOrList_Check(item2) && PyGLM_TupleOrList_Check(item3)) { Py_ssize_t innerSize = PyGLM_TupleOrList_GET_SIZE(item1); if (innerSize != PyGLM_TupleOrList_GET_SIZE(item2) || innerSize != PyGLM_TupleOrList_GET_SIZE(item3)) { return; } if (innerSize == 2 && (accepted_types & PyGLM_SHAPE_3x2)) { // mat3x2 PyObject* innerItem1 = PyGLM_TupleOrList_GET_ITEM(item1, 0); PyObject* innerItem2 = PyGLM_TupleOrList_GET_ITEM(item1, 1); PyObject* innerItem3 = PyGLM_TupleOrList_GET_ITEM(item2, 0); PyObject* innerItem4 = PyGLM_TupleOrList_GET_ITEM(item2, 1); PyObject* innerItem5 = PyGLM_TupleOrList_GET_ITEM(item3, 0); PyObject* innerItem6 = PyGLM_TupleOrList_GET_ITEM(item3, 1); PyGLMSingleTypeHolder innerItem1Out = PyGLMSingleTypeHolder(innerItem1); PyGLMSingleTypeHolder innerItem2Out = PyGLMSingleTypeHolder(innerItem2); PyGLMSingleTypeHolder innerItem3Out = PyGLMSingleTypeHolder(innerItem3); PyGLMSingleTypeHolder innerItem4Out = PyGLMSingleTypeHolder(innerItem4); PyGLMSingleTypeHolder innerItem5Out = PyGLMSingleTypeHolder(innerItem5); PyGLMSingleTypeHolder innerItem6Out = PyGLMSingleTypeHolder(innerItem6); int out_type = PyGLMSingleTypeHolder::getMostImportantType(accepted_types, { innerItem1Out.dtype, innerItem2Out.dtype, innerItem3Out.dtype, innerItem4Out.dtype, innerItem5Out.dtype, innerItem6Out.dtype }); if (out_type == -1) { data = NULL; return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_3x2 | out_type); switch (out_type) { case PyGLM_DT_FLOAT: allocate(sizeof(glm::mat<3, 2, float>)); *((glm::mat<3, 2, float>*)data) = glm::mat<3, 2, float>(innerItem1Out.asFloat(), innerItem2Out.asFloat(), innerItem3Out.asFloat(), innerItem4Out.asFloat(), innerItem5Out.asFloat(), innerItem6Out.asFloat()); return; case PyGLM_DT_DOUBLE: allocate(sizeof(glm::mat<3, 2, double>)); *((glm::mat<3, 2, double>*)data) = glm::mat<3, 2, double>(innerItem1Out.asDouble(), innerItem2Out.asDouble(), innerItem3Out.asDouble(), innerItem4Out.asDouble(), innerItem5Out.asDouble(), innerItem6Out.asDouble()); return; case PyGLM_DT_INT64: allocate(sizeof(glm::mat<3, 2, glm::i64>)); *((glm::mat<3, 2, glm::i64>*)data) = glm::mat<3, 2, glm::i64>(innerItem1Out.asInt64(), innerItem2Out.asInt64(), innerItem3Out.asInt64(), innerItem4Out.asInt64(), innerItem5Out.asInt64(), innerItem6Out.asInt64()); return; case PyGLM_DT_UINT64: allocate(sizeof(glm::mat<3, 2, glm::u64>)); *((glm::mat<3, 2, glm::u64>*)data) = glm::mat<3, 2, glm::u64>(innerItem1Out.asUint64(), innerItem2Out.asUint64(), innerItem3Out.asUint64(), innerItem4Out.asUint64(), innerItem5Out.asUint64(), innerItem6Out.asUint64()); return; case PyGLM_DT_INT: allocate(sizeof(glm::mat<3, 2, glm::i32>)); *((glm::mat<3, 2, glm::i32>*)data) = glm::mat<3, 2, glm::i32>(innerItem1Out.asInt32(), innerItem2Out.asInt32(), innerItem3Out.asInt32(), innerItem4Out.asInt32(), innerItem5Out.asInt32(), innerItem6Out.asInt32()); return; case PyGLM_DT_UINT: allocate(sizeof(glm::mat<3, 2, glm::u32>)); *((glm::mat<3, 2, glm::u32>*)data) = glm::mat<3, 2, glm::u32>(innerItem1Out.asUint32(), innerItem2Out.asUint32(), innerItem3Out.asUint32(), innerItem4Out.asUint32(), innerItem5Out.asUint32(), innerItem6Out.asUint32()); return; case PyGLM_DT_INT16: allocate(sizeof(glm::mat<3, 2, glm::i16>)); *((glm::mat<3, 2, glm::i16>*)data) = glm::mat<3, 2, glm::i16>(innerItem1Out.asInt16(), innerItem2Out.asInt16(), innerItem3Out.asInt16(), innerItem4Out.asInt16(), innerItem5Out.asInt16(), innerItem6Out.asInt16()); return; case PyGLM_DT_UINT16: allocate(sizeof(glm::mat<3, 2, glm::u16>)); *((glm::mat<3, 2, glm::u16>*)data) = glm::mat<3, 2, glm::u16>(innerItem1Out.asUint16(), innerItem2Out.asUint16(), innerItem3Out.asUint16(), innerItem4Out.asUint16(), innerItem5Out.asUint16(), innerItem6Out.asUint16()); return; case PyGLM_DT_INT8: allocate(sizeof(glm::mat<3, 2, glm::i8>)); *((glm::mat<3, 2, glm::i8>*)data) = glm::mat<3, 2, glm::i8>(innerItem1Out.asInt8(), innerItem2Out.asInt8(), innerItem3Out.asInt8(), innerItem4Out.asInt8(), innerItem5Out.asInt8(), innerItem6Out.asInt8()); return; case PyGLM_DT_UINT8: allocate(sizeof(glm::mat<3, 2, glm::u8>)); *((glm::mat<3, 2, glm::u8>*)data) = glm::mat<3, 2, glm::u8>(innerItem1Out.asUint8(), innerItem2Out.asUint8(), innerItem3Out.asUint8(), innerItem4Out.asUint8(), innerItem5Out.asUint8(), innerItem6Out.asUint8()); return; case PyGLM_DT_BOOL: allocate(sizeof(glm::mat<3, 2, bool>)); *((glm::mat<3, 2, bool>*)data) = glm::mat<3, 2, bool>(innerItem1Out.asBool(), innerItem2Out.asBool(), innerItem3Out.asBool(), innerItem4Out.asBool(), innerItem5Out.asBool(), innerItem6Out.asBool()); return; } } else if (innerSize == 3 && (accepted_types & PyGLM_SHAPE_3x3)) { // mat3x3 PyObject* innerItem1 = PyGLM_TupleOrList_GET_ITEM(item1, 0); PyObject* innerItem2 = PyGLM_TupleOrList_GET_ITEM(item1, 1); PyObject* innerItem3 = PyGLM_TupleOrList_GET_ITEM(item1, 2); PyObject* innerItem4 = PyGLM_TupleOrList_GET_ITEM(item2, 0); PyObject* innerItem5 = PyGLM_TupleOrList_GET_ITEM(item2, 1); PyObject* innerItem6 = PyGLM_TupleOrList_GET_ITEM(item2, 2); PyObject* innerItem7 = PyGLM_TupleOrList_GET_ITEM(item3, 0); PyObject* innerItem8 = PyGLM_TupleOrList_GET_ITEM(item3, 1); PyObject* innerItem9 = PyGLM_TupleOrList_GET_ITEM(item3, 2); PyGLMSingleTypeHolder innerItem1Out = PyGLMSingleTypeHolder(innerItem1); PyGLMSingleTypeHolder innerItem2Out = PyGLMSingleTypeHolder(innerItem2); PyGLMSingleTypeHolder innerItem3Out = PyGLMSingleTypeHolder(innerItem3); PyGLMSingleTypeHolder innerItem4Out = PyGLMSingleTypeHolder(innerItem4); PyGLMSingleTypeHolder innerItem5Out = PyGLMSingleTypeHolder(innerItem5); PyGLMSingleTypeHolder innerItem6Out = PyGLMSingleTypeHolder(innerItem6); PyGLMSingleTypeHolder innerItem7Out = PyGLMSingleTypeHolder(innerItem7); PyGLMSingleTypeHolder innerItem8Out = PyGLMSingleTypeHolder(innerItem8); PyGLMSingleTypeHolder innerItem9Out = PyGLMSingleTypeHolder(innerItem9); int out_type = PyGLMSingleTypeHolder::getMostImportantType(accepted_types, { innerItem1Out.dtype, innerItem2Out.dtype, innerItem3Out.dtype, innerItem4Out.dtype, innerItem5Out.dtype, innerItem6Out.dtype, innerItem7Out.dtype, innerItem8Out.dtype, innerItem9Out.dtype }); if (out_type == -1) { data = NULL; return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_3x3 | out_type); switch (out_type) { case PyGLM_DT_FLOAT: allocate(sizeof(glm::mat<3, 3, float>)); *((glm::mat<3, 3, float>*)data) = glm::mat<3, 3, float>(innerItem1Out.asFloat(), innerItem2Out.asFloat(), innerItem3Out.asFloat(), innerItem4Out.asFloat(), innerItem5Out.asFloat(), innerItem6Out.asFloat(), innerItem7Out.asFloat(), innerItem8Out.asFloat(), innerItem9Out.asFloat()); return; case PyGLM_DT_DOUBLE: allocate(sizeof(glm::mat<3, 3, double>)); *((glm::mat<3, 3, double>*)data) = glm::mat<3, 3, double>(innerItem1Out.asDouble(), innerItem2Out.asDouble(), innerItem3Out.asDouble(), innerItem4Out.asDouble(), innerItem5Out.asDouble(), innerItem6Out.asDouble(), innerItem7Out.asDouble(), innerItem8Out.asDouble(), innerItem9Out.asDouble()); return; case PyGLM_DT_INT64: allocate(sizeof(glm::mat<3, 3, glm::i64>)); *((glm::mat<3, 3, glm::i64>*)data) = glm::mat<3, 3, glm::i64>(innerItem1Out.asInt64(), innerItem2Out.asInt64(), innerItem3Out.asInt64(), innerItem4Out.asInt64(), innerItem5Out.asInt64(), innerItem6Out.asInt64(), innerItem7Out.asInt64(), innerItem8Out.asInt64(), innerItem9Out.asInt64()); return; case PyGLM_DT_UINT64: allocate(sizeof(glm::mat<3, 3, glm::u64>)); *((glm::mat<3, 3, glm::u64>*)data) = glm::mat<3, 3, glm::u64>(innerItem1Out.asUint64(), innerItem2Out.asUint64(), innerItem3Out.asUint64(), innerItem4Out.asUint64(), innerItem5Out.asUint64(), innerItem6Out.asUint64(), innerItem7Out.asUint64(), innerItem8Out.asUint64(), innerItem9Out.asUint64()); return; case PyGLM_DT_INT: allocate(sizeof(glm::mat<3, 3, glm::i32>)); *((glm::mat<3, 3, glm::i32>*)data) = glm::mat<3, 3, glm::i32>(innerItem1Out.asInt32(), innerItem2Out.asInt32(), innerItem3Out.asInt32(), innerItem4Out.asInt32(), innerItem5Out.asInt32(), innerItem6Out.asInt32(), innerItem7Out.asInt32(), innerItem8Out.asInt32(), innerItem9Out.asInt32()); return; case PyGLM_DT_UINT: allocate(sizeof(glm::mat<3, 3, glm::u32>)); *((glm::mat<3, 3, glm::u32>*)data) = glm::mat<3, 3, glm::u32>(innerItem1Out.asUint32(), innerItem2Out.asUint32(), innerItem3Out.asUint32(), innerItem4Out.asUint32(), innerItem5Out.asUint32(), innerItem6Out.asUint32(), innerItem7Out.asUint32(), innerItem8Out.asUint32(), innerItem9Out.asUint32()); return; case PyGLM_DT_INT16: allocate(sizeof(glm::mat<3, 3, glm::i16>)); *((glm::mat<3, 3, glm::i16>*)data) = glm::mat<3, 3, glm::i16>(innerItem1Out.asInt16(), innerItem2Out.asInt16(), innerItem3Out.asInt16(), innerItem4Out.asInt16(), innerItem5Out.asInt16(), innerItem6Out.asInt16(), innerItem7Out.asInt16(), innerItem8Out.asInt16(), innerItem9Out.asInt16()); return; case PyGLM_DT_UINT16: allocate(sizeof(glm::mat<3, 3, glm::u16>)); *((glm::mat<3, 3, glm::u16>*)data) = glm::mat<3, 3, glm::u16>(innerItem1Out.asUint16(), innerItem2Out.asUint16(), innerItem3Out.asUint16(), innerItem4Out.asUint16(), innerItem5Out.asUint16(), innerItem6Out.asUint16(), innerItem7Out.asUint16(), innerItem8Out.asUint16(), innerItem9Out.asUint16()); return; case PyGLM_DT_INT8: allocate(sizeof(glm::mat<3, 3, glm::i8>)); *((glm::mat<3, 3, glm::i8>*)data) = glm::mat<3, 3, glm::i8>(innerItem1Out.asInt8(), innerItem2Out.asInt8(), innerItem3Out.asInt8(), innerItem4Out.asInt8(), innerItem5Out.asInt8(), innerItem6Out.asInt8(), innerItem7Out.asInt8(), innerItem8Out.asInt8(), innerItem9Out.asInt8()); return; case PyGLM_DT_UINT8: allocate(sizeof(glm::mat<3, 3, glm::u8>)); *((glm::mat<3, 3, glm::u8>*)data) = glm::mat<3, 3, glm::u8>(innerItem1Out.asUint8(), innerItem2Out.asUint8(), innerItem3Out.asUint8(), innerItem4Out.asUint8(), innerItem5Out.asUint8(), innerItem6Out.asUint8(), innerItem7Out.asUint8(), innerItem8Out.asUint8(), innerItem9Out.asUint8()); return; case PyGLM_DT_BOOL: allocate(sizeof(glm::mat<3, 3, bool>)); *((glm::mat<3, 3, bool>*)data) = glm::mat<3, 3, bool>(innerItem1Out.asBool(), innerItem2Out.asBool(), innerItem3Out.asBool(), innerItem4Out.asBool(), innerItem5Out.asBool(), innerItem6Out.asBool(), innerItem7Out.asBool(), innerItem8Out.asBool(), innerItem9Out.asBool()); return; } } else if (innerSize == 4 && (accepted_types & PyGLM_SHAPE_3x4)) { // mat3x4 PyObject* innerItem1 = PyGLM_TupleOrList_GET_ITEM(item1, 0); PyObject* innerItem2 = PyGLM_TupleOrList_GET_ITEM(item1, 1); PyObject* innerItem3 = PyGLM_TupleOrList_GET_ITEM(item1, 2); PyObject* innerItem4 = PyGLM_TupleOrList_GET_ITEM(item1, 3); PyObject* innerItem5 = PyGLM_TupleOrList_GET_ITEM(item2, 0); PyObject* innerItem6 = PyGLM_TupleOrList_GET_ITEM(item2, 1); PyObject* innerItem7 = PyGLM_TupleOrList_GET_ITEM(item2, 2); PyObject* innerItem8 = PyGLM_TupleOrList_GET_ITEM(item2, 3); PyObject* innerItem9 = PyGLM_TupleOrList_GET_ITEM(item3, 0); PyObject* innerItem10 = PyGLM_TupleOrList_GET_ITEM(item3, 1); PyObject* innerItem11 = PyGLM_TupleOrList_GET_ITEM(item3, 2); PyObject* innerItem12 = PyGLM_TupleOrList_GET_ITEM(item3, 3); PyGLMSingleTypeHolder innerItem1Out = PyGLMSingleTypeHolder(innerItem1); PyGLMSingleTypeHolder innerItem2Out = PyGLMSingleTypeHolder(innerItem2); PyGLMSingleTypeHolder innerItem3Out = PyGLMSingleTypeHolder(innerItem3); PyGLMSingleTypeHolder innerItem4Out = PyGLMSingleTypeHolder(innerItem4); PyGLMSingleTypeHolder innerItem5Out = PyGLMSingleTypeHolder(innerItem5); PyGLMSingleTypeHolder innerItem6Out = PyGLMSingleTypeHolder(innerItem6); PyGLMSingleTypeHolder innerItem7Out = PyGLMSingleTypeHolder(innerItem7); PyGLMSingleTypeHolder innerItem8Out = PyGLMSingleTypeHolder(innerItem8); PyGLMSingleTypeHolder innerItem9Out = PyGLMSingleTypeHolder(innerItem9); PyGLMSingleTypeHolder innerItem10Out = PyGLMSingleTypeHolder(innerItem10); PyGLMSingleTypeHolder innerItem11Out = PyGLMSingleTypeHolder(innerItem11); PyGLMSingleTypeHolder innerItem12Out = PyGLMSingleTypeHolder(innerItem12); int out_type = PyGLMSingleTypeHolder::getMostImportantType(accepted_types, { innerItem1Out.dtype, innerItem2Out.dtype, innerItem3Out.dtype, innerItem4Out.dtype, innerItem5Out.dtype, innerItem6Out.dtype, innerItem7Out.dtype, innerItem8Out.dtype, innerItem9Out.dtype, innerItem10Out.dtype, innerItem11Out.dtype, innerItem12Out.dtype }); if (out_type == -1) { data = NULL; return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_3x4 | out_type); switch (out_type) { case PyGLM_DT_FLOAT: allocate(sizeof(glm::mat<3, 4, float>)); *((glm::mat<3, 4, float>*)data) = glm::mat<3, 4, float>(innerItem1Out.asFloat(), innerItem2Out.asFloat(), innerItem3Out.asFloat(), innerItem4Out.asFloat(), innerItem5Out.asFloat(), innerItem6Out.asFloat(), innerItem7Out.asFloat(), innerItem8Out.asFloat(), innerItem9Out.asFloat(), innerItem10Out.asFloat(), innerItem11Out.asFloat(), innerItem12Out.asFloat()); return; case PyGLM_DT_DOUBLE: allocate(sizeof(glm::mat<3, 4, double>)); *((glm::mat<3, 4, double>*)data) = glm::mat<3, 4, double>(innerItem1Out.asDouble(), innerItem2Out.asDouble(), innerItem3Out.asDouble(), innerItem4Out.asDouble(), innerItem5Out.asDouble(), innerItem6Out.asDouble(), innerItem7Out.asDouble(), innerItem8Out.asDouble(), innerItem9Out.asDouble(), innerItem10Out.asDouble(), innerItem11Out.asDouble(), innerItem12Out.asDouble()); return; case PyGLM_DT_INT64: allocate(sizeof(glm::mat<3, 4, glm::i64>)); *((glm::mat<3, 4, glm::i64>*)data) = glm::mat<3, 4, glm::i64>(innerItem1Out.asInt64(), innerItem2Out.asInt64(), innerItem3Out.asInt64(), innerItem4Out.asInt64(), innerItem5Out.asInt64(), innerItem6Out.asInt64(), innerItem7Out.asInt64(), innerItem8Out.asInt64(), innerItem9Out.asInt64(), innerItem10Out.asInt64(), innerItem11Out.asInt64(), innerItem12Out.asInt64()); return; case PyGLM_DT_UINT64: allocate(sizeof(glm::mat<3, 4, glm::u64>)); *((glm::mat<3, 4, glm::u64>*)data) = glm::mat<3, 4, glm::u64>(innerItem1Out.asUint64(), innerItem2Out.asUint64(), innerItem3Out.asUint64(), innerItem4Out.asUint64(), innerItem5Out.asUint64(), innerItem6Out.asUint64(), innerItem7Out.asUint64(), innerItem8Out.asUint64(), innerItem9Out.asUint64(), innerItem10Out.asUint64(), innerItem11Out.asUint64(), innerItem12Out.asUint64()); return; case PyGLM_DT_INT: allocate(sizeof(glm::mat<3, 4, glm::i32>)); *((glm::mat<3, 4, glm::i32>*)data) = glm::mat<3, 4, glm::i32>(innerItem1Out.asInt32(), innerItem2Out.asInt32(), innerItem3Out.asInt32(), innerItem4Out.asInt32(), innerItem5Out.asInt32(), innerItem6Out.asInt32(), innerItem7Out.asInt32(), innerItem8Out.asInt32(), innerItem9Out.asInt32(), innerItem10Out.asInt32(), innerItem11Out.asInt32(), innerItem12Out.asInt32()); return; case PyGLM_DT_UINT: allocate(sizeof(glm::mat<3, 4, glm::u32>)); *((glm::mat<3, 4, glm::u32>*)data) = glm::mat<3, 4, glm::u32>(innerItem1Out.asUint32(), innerItem2Out.asUint32(), innerItem3Out.asUint32(), innerItem4Out.asUint32(), innerItem5Out.asUint32(), innerItem6Out.asUint32(), innerItem7Out.asUint32(), innerItem8Out.asUint32(), innerItem9Out.asUint32(), innerItem10Out.asUint32(), innerItem11Out.asUint32(), innerItem12Out.asUint32()); return; case PyGLM_DT_INT16: allocate(sizeof(glm::mat<3, 4, glm::i16>)); *((glm::mat<3, 4, glm::i16>*)data) = glm::mat<3, 4, glm::i16>(innerItem1Out.asInt16(), innerItem2Out.asInt16(), innerItem3Out.asInt16(), innerItem4Out.asInt16(), innerItem5Out.asInt16(), innerItem6Out.asInt16(), innerItem7Out.asInt16(), innerItem8Out.asInt16(), innerItem9Out.asInt16(), innerItem10Out.asInt16(), innerItem11Out.asInt16(), innerItem12Out.asInt16()); return; case PyGLM_DT_UINT16: allocate(sizeof(glm::mat<3, 4, glm::u16>)); *((glm::mat<3, 4, glm::u16>*)data) = glm::mat<3, 4, glm::u16>(innerItem1Out.asUint16(), innerItem2Out.asUint16(), innerItem3Out.asUint16(), innerItem4Out.asUint16(), innerItem5Out.asUint16(), innerItem6Out.asUint16(), innerItem7Out.asUint16(), innerItem8Out.asUint16(), innerItem9Out.asUint16(), innerItem10Out.asUint16(), innerItem11Out.asUint16(), innerItem12Out.asUint16()); return; case PyGLM_DT_INT8: allocate(sizeof(glm::mat<3, 4, glm::i8>)); *((glm::mat<3, 4, glm::i8>*)data) = glm::mat<3, 4, glm::i8>(innerItem1Out.asInt8(), innerItem2Out.asInt8(), innerItem3Out.asInt8(), innerItem4Out.asInt8(), innerItem5Out.asInt8(), innerItem6Out.asInt8(), innerItem7Out.asInt8(), innerItem8Out.asInt8(), innerItem9Out.asInt8(), innerItem10Out.asInt8(), innerItem11Out.asInt8(), innerItem12Out.asInt8()); return; case PyGLM_DT_UINT8: allocate(sizeof(glm::mat<3, 4, glm::u8>)); *((glm::mat<3, 4, glm::u8>*)data) = glm::mat<3, 4, glm::u8>(innerItem1Out.asUint8(), innerItem2Out.asUint8(), innerItem3Out.asUint8(), innerItem4Out.asUint8(), innerItem5Out.asUint8(), innerItem6Out.asUint8(), innerItem7Out.asUint8(), innerItem8Out.asUint8(), innerItem9Out.asUint8(), innerItem10Out.asUint8(), innerItem11Out.asUint8(), innerItem12Out.asUint8()); return; case PyGLM_DT_BOOL: allocate(sizeof(glm::mat<3, 4, bool>)); *((glm::mat<3, 4, bool>*)data) = glm::mat<3, 4, bool>(innerItem1Out.asBool(), innerItem2Out.asBool(), innerItem3Out.asBool(), innerItem4Out.asBool(), innerItem5Out.asBool(), innerItem6Out.asBool(), innerItem7Out.asBool(), innerItem8Out.asBool(), innerItem9Out.asBool(), innerItem10Out.asBool(), innerItem11Out.asBool(), innerItem12Out.asBool()); return; } } } if ((accepted_types & PyGLM_SHAPE_3) && (accepted_types & PyGLM_T_ANY_VEC)) { PyGLMSingleTypeHolder item1Out = PyGLMSingleTypeHolder(item1); PyGLMSingleTypeHolder item2Out = PyGLMSingleTypeHolder(item2); PyGLMSingleTypeHolder item3Out = PyGLMSingleTypeHolder(item3); int out_type = PyGLMSingleTypeHolder::getMostImportantType(accepted_types, { item1Out.dtype, item2Out.dtype, item3Out.dtype }); if (out_type == -1) { data = NULL; return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_3 | out_type); switch (out_type) { case PyGLM_DT_FLOAT: allocate(sizeof(glm::vec<3, float>)); *((glm::vec<3, float>*)data) = glm::vec<3, float>(item1Out.asFloat(), item2Out.asFloat(), item3Out.asFloat()); return; case PyGLM_DT_DOUBLE: allocate(sizeof(glm::vec<3, double>)); *((glm::vec<3, double>*)data) = glm::vec<3, double>(item1Out.asDouble(), item2Out.asDouble(), item3Out.asDouble()); return; case PyGLM_DT_INT64: allocate(sizeof(glm::vec<3, glm::i64>)); *((glm::vec<3, glm::i64>*)data) = glm::vec<3, glm::i64>(item1Out.asInt64(), item2Out.asInt64(), item3Out.asInt64()); return; case PyGLM_DT_UINT64: allocate(sizeof(glm::vec<3, glm::u64>)); *((glm::vec<3, glm::u64>*)data) = glm::vec<3, glm::u64>(item1Out.asUint64(), item2Out.asUint64(), item3Out.asUint64()); return; case PyGLM_DT_INT: allocate(sizeof(glm::vec<3, glm::i32>)); *((glm::vec<3, glm::i32>*)data) = glm::vec<3, glm::i32>(item1Out.asInt32(), item2Out.asInt32(), item3Out.asInt32()); return; case PyGLM_DT_UINT: allocate(sizeof(glm::vec<3, glm::u32>)); *((glm::vec<3, glm::u32>*)data) = glm::vec<3, glm::u32>(item1Out.asUint32(), item2Out.asUint32(), item3Out.asUint32()); return; case PyGLM_DT_INT16: allocate(sizeof(glm::vec<3, glm::i16>)); *((glm::vec<3, glm::i16>*)data) = glm::vec<3, glm::i16>(item1Out.asInt16(), item2Out.asInt16(), item3Out.asInt16()); return; case PyGLM_DT_UINT16: allocate(sizeof(glm::vec<3, glm::u16>)); *((glm::vec<3, glm::u16>*)data) = glm::vec<3, glm::u16>(item1Out.asUint16(), item2Out.asUint16(), item3Out.asUint16()); return; case PyGLM_DT_INT8: allocate(sizeof(glm::vec<3, glm::i8>)); *((glm::vec<3, glm::i8>*)data) = glm::vec<3, glm::i8>(item1Out.asInt8(), item2Out.asInt8(), item3Out.asInt8()); return; case PyGLM_DT_UINT8: allocate(sizeof(glm::vec<3, glm::u8>)); *((glm::vec<3, glm::u8>*)data) = glm::vec<3, glm::u8>(item1Out.asUint8(), item2Out.asUint8(), item3Out.asUint8()); return; case PyGLM_DT_BOOL: allocate(sizeof(glm::vec<3, bool>)); *((glm::vec<3, bool>*)data) = glm::vec<3, bool>(item1Out.asBool(), item2Out.asBool(), item3Out.asBool()); return; } } } else if (size == 4) { // vec4's, mat4xM's and qua's PyObject* item1 = PyGLM_TupleOrList_GET_ITEM(obj, 0); PyObject* item2 = PyGLM_TupleOrList_GET_ITEM(obj, 1); PyObject* item3 = PyGLM_TupleOrList_GET_ITEM(obj, 2); PyObject* item4 = PyGLM_TupleOrList_GET_ITEM(obj, 3); if ((accepted_types & PyGLM_T_MAT) && PyGLM_TupleOrList_Check(item1) && PyGLM_TupleOrList_Check(item2) && PyGLM_TupleOrList_Check(item3) && PyGLM_TupleOrList_Check(item4)) { Py_ssize_t innerSize = PyGLM_TupleOrList_GET_SIZE(item1); if (innerSize != PyGLM_TupleOrList_GET_SIZE(item2) || innerSize != PyGLM_TupleOrList_GET_SIZE(item3) || innerSize != PyGLM_TupleOrList_GET_SIZE(item4)) { return; } if (innerSize == 2 && (accepted_types & PyGLM_SHAPE_4x2)) { // mat4x2 PyObject* innerItem1 = PyGLM_TupleOrList_GET_ITEM(item1, 0); PyObject* innerItem2 = PyGLM_TupleOrList_GET_ITEM(item1, 1); PyObject* innerItem3 = PyGLM_TupleOrList_GET_ITEM(item2, 0); PyObject* innerItem4 = PyGLM_TupleOrList_GET_ITEM(item2, 1); PyObject* innerItem5 = PyGLM_TupleOrList_GET_ITEM(item3, 0); PyObject* innerItem6 = PyGLM_TupleOrList_GET_ITEM(item3, 1); PyObject* innerItem7 = PyGLM_TupleOrList_GET_ITEM(item4, 0); PyObject* innerItem8 = PyGLM_TupleOrList_GET_ITEM(item4, 1); PyGLMSingleTypeHolder innerItem1Out = PyGLMSingleTypeHolder(innerItem1); PyGLMSingleTypeHolder innerItem2Out = PyGLMSingleTypeHolder(innerItem2); PyGLMSingleTypeHolder innerItem3Out = PyGLMSingleTypeHolder(innerItem3); PyGLMSingleTypeHolder innerItem4Out = PyGLMSingleTypeHolder(innerItem4); PyGLMSingleTypeHolder innerItem5Out = PyGLMSingleTypeHolder(innerItem5); PyGLMSingleTypeHolder innerItem6Out = PyGLMSingleTypeHolder(innerItem6); PyGLMSingleTypeHolder innerItem7Out = PyGLMSingleTypeHolder(innerItem7); PyGLMSingleTypeHolder innerItem8Out = PyGLMSingleTypeHolder(innerItem8); int out_type = PyGLMSingleTypeHolder::getMostImportantType(accepted_types, { innerItem1Out.dtype, innerItem2Out.dtype, innerItem3Out.dtype, innerItem4Out.dtype, innerItem5Out.dtype, innerItem6Out.dtype, innerItem7Out.dtype, innerItem8Out.dtype }); if (out_type == -1) { data = NULL; return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_4x2 | out_type); switch (out_type) { case PyGLM_DT_FLOAT: allocate(sizeof(glm::mat<4, 2, float>)); *((glm::mat<4, 2, float>*)data) = glm::mat<4, 2, float>(innerItem1Out.asFloat(), innerItem2Out.asFloat(), innerItem3Out.asFloat(), innerItem4Out.asFloat(), innerItem5Out.asFloat(), innerItem6Out.asFloat(), innerItem7Out.asFloat(), innerItem8Out.asFloat()); return; case PyGLM_DT_DOUBLE: allocate(sizeof(glm::mat<4, 2, double>)); *((glm::mat<4, 2, double>*)data) = glm::mat<4, 2, double>(innerItem1Out.asDouble(), innerItem2Out.asDouble(), innerItem3Out.asDouble(), innerItem4Out.asDouble(), innerItem5Out.asDouble(), innerItem6Out.asDouble(), innerItem7Out.asDouble(), innerItem8Out.asDouble()); return; case PyGLM_DT_INT64: allocate(sizeof(glm::mat<4, 2, glm::i64>)); *((glm::mat<4, 2, glm::i64>*)data) = glm::mat<4, 2, glm::i64>(innerItem1Out.asInt64(), innerItem2Out.asInt64(), innerItem3Out.asInt64(), innerItem4Out.asInt64(), innerItem5Out.asInt64(), innerItem6Out.asInt64(), innerItem7Out.asInt64(), innerItem8Out.asInt64()); return; case PyGLM_DT_UINT64: allocate(sizeof(glm::mat<4, 2, glm::u64>)); *((glm::mat<4, 2, glm::u64>*)data) = glm::mat<4, 2, glm::u64>(innerItem1Out.asUint64(), innerItem2Out.asUint64(), innerItem3Out.asUint64(), innerItem4Out.asUint64(), innerItem5Out.asUint64(), innerItem6Out.asUint64(), innerItem7Out.asUint64(), innerItem8Out.asUint64()); return; case PyGLM_DT_INT: allocate(sizeof(glm::mat<4, 2, glm::i32>)); *((glm::mat<4, 2, glm::i32>*)data) = glm::mat<4, 2, glm::i32>(innerItem1Out.asInt32(), innerItem2Out.asInt32(), innerItem3Out.asInt32(), innerItem4Out.asInt32(), innerItem5Out.asInt32(), innerItem6Out.asInt32(), innerItem7Out.asInt32(), innerItem8Out.asInt32()); return; case PyGLM_DT_UINT: allocate(sizeof(glm::mat<4, 2, glm::u32>)); *((glm::mat<4, 2, glm::u32>*)data) = glm::mat<4, 2, glm::u32>(innerItem1Out.asUint32(), innerItem2Out.asUint32(), innerItem3Out.asUint32(), innerItem4Out.asUint32(), innerItem5Out.asUint32(), innerItem6Out.asUint32(), innerItem7Out.asUint32(), innerItem8Out.asUint32()); return; case PyGLM_DT_INT16: allocate(sizeof(glm::mat<4, 2, glm::i16>)); *((glm::mat<4, 2, glm::i16>*)data) = glm::mat<4, 2, glm::i16>(innerItem1Out.asInt16(), innerItem2Out.asInt16(), innerItem3Out.asInt16(), innerItem4Out.asInt16(), innerItem5Out.asInt16(), innerItem6Out.asInt16(), innerItem7Out.asInt16(), innerItem8Out.asInt16()); return; case PyGLM_DT_UINT16: allocate(sizeof(glm::mat<4, 2, glm::u16>)); *((glm::mat<4, 2, glm::u16>*)data) = glm::mat<4, 2, glm::u16>(innerItem1Out.asUint16(), innerItem2Out.asUint16(), innerItem3Out.asUint16(), innerItem4Out.asUint16(), innerItem5Out.asUint16(), innerItem6Out.asUint16(), innerItem7Out.asUint16(), innerItem8Out.asUint16()); return; case PyGLM_DT_INT8: allocate(sizeof(glm::mat<4, 2, glm::i8>)); *((glm::mat<4, 2, glm::i8>*)data) = glm::mat<4, 2, glm::i8>(innerItem1Out.asInt8(), innerItem2Out.asInt8(), innerItem3Out.asInt8(), innerItem4Out.asInt8(), innerItem5Out.asInt8(), innerItem6Out.asInt8(), innerItem7Out.asInt8(), innerItem8Out.asInt8()); return; case PyGLM_DT_UINT8: allocate(sizeof(glm::mat<4, 2, glm::u8>)); *((glm::mat<4, 2, glm::u8>*)data) = glm::mat<4, 2, glm::u8>(innerItem1Out.asUint8(), innerItem2Out.asUint8(), innerItem3Out.asUint8(), innerItem4Out.asUint8(), innerItem5Out.asUint8(), innerItem6Out.asUint8(), innerItem7Out.asUint8(), innerItem8Out.asUint8()); return; case PyGLM_DT_BOOL: allocate(sizeof(glm::mat<4, 2, bool>)); *((glm::mat<4, 2, bool>*)data) = glm::mat<4, 2, bool>(innerItem1Out.asBool(), innerItem2Out.asBool(), innerItem3Out.asBool(), innerItem4Out.asBool(), innerItem5Out.asBool(), innerItem6Out.asBool(), innerItem7Out.asBool(), innerItem8Out.asBool()); return; } } else if (innerSize == 3 && (accepted_types & PyGLM_SHAPE_4x3)) { // mat4x3 PyObject* innerItem1 = PyGLM_TupleOrList_GET_ITEM(item1, 0); PyObject* innerItem2 = PyGLM_TupleOrList_GET_ITEM(item1, 1); PyObject* innerItem3 = PyGLM_TupleOrList_GET_ITEM(item1, 2); PyObject* innerItem4 = PyGLM_TupleOrList_GET_ITEM(item2, 0); PyObject* innerItem5 = PyGLM_TupleOrList_GET_ITEM(item2, 1); PyObject* innerItem6 = PyGLM_TupleOrList_GET_ITEM(item2, 2); PyObject* innerItem7 = PyGLM_TupleOrList_GET_ITEM(item3, 0); PyObject* innerItem8 = PyGLM_TupleOrList_GET_ITEM(item3, 1); PyObject* innerItem9 = PyGLM_TupleOrList_GET_ITEM(item3, 2); PyObject* innerItem10 = PyGLM_TupleOrList_GET_ITEM(item4, 0); PyObject* innerItem11 = PyGLM_TupleOrList_GET_ITEM(item4, 1); PyObject* innerItem12 = PyGLM_TupleOrList_GET_ITEM(item4, 2); PyGLMSingleTypeHolder innerItem1Out = PyGLMSingleTypeHolder(innerItem1); PyGLMSingleTypeHolder innerItem2Out = PyGLMSingleTypeHolder(innerItem2); PyGLMSingleTypeHolder innerItem3Out = PyGLMSingleTypeHolder(innerItem3); PyGLMSingleTypeHolder innerItem4Out = PyGLMSingleTypeHolder(innerItem4); PyGLMSingleTypeHolder innerItem5Out = PyGLMSingleTypeHolder(innerItem5); PyGLMSingleTypeHolder innerItem6Out = PyGLMSingleTypeHolder(innerItem6); PyGLMSingleTypeHolder innerItem7Out = PyGLMSingleTypeHolder(innerItem7); PyGLMSingleTypeHolder innerItem8Out = PyGLMSingleTypeHolder(innerItem8); PyGLMSingleTypeHolder innerItem9Out = PyGLMSingleTypeHolder(innerItem9); PyGLMSingleTypeHolder innerItem10Out = PyGLMSingleTypeHolder(innerItem10); PyGLMSingleTypeHolder innerItem11Out = PyGLMSingleTypeHolder(innerItem11); PyGLMSingleTypeHolder innerItem12Out = PyGLMSingleTypeHolder(innerItem12); int out_type = PyGLMSingleTypeHolder::getMostImportantType(accepted_types, { innerItem1Out.dtype, innerItem2Out.dtype, innerItem3Out.dtype, innerItem4Out.dtype, innerItem5Out.dtype, innerItem6Out.dtype, innerItem7Out.dtype, innerItem8Out.dtype, innerItem9Out.dtype, innerItem10Out.dtype, innerItem11Out.dtype, innerItem12Out.dtype }); if (out_type == -1) { data = NULL; return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_4x3 | out_type); switch (out_type) { case PyGLM_DT_FLOAT: allocate(sizeof(glm::mat<4, 3, float>)); *((glm::mat<4, 3, float>*)data) = glm::mat<4, 3, float>(innerItem1Out.asFloat(), innerItem2Out.asFloat(), innerItem3Out.asFloat(), innerItem4Out.asFloat(), innerItem5Out.asFloat(), innerItem6Out.asFloat(), innerItem7Out.asFloat(), innerItem8Out.asFloat(), innerItem9Out.asFloat(), innerItem10Out.asFloat(), innerItem11Out.asFloat(), innerItem12Out.asFloat()); return; case PyGLM_DT_DOUBLE: allocate(sizeof(glm::mat<4, 3, double>)); *((glm::mat<4, 3, double>*)data) = glm::mat<4, 3, double>(innerItem1Out.asDouble(), innerItem2Out.asDouble(), innerItem3Out.asDouble(), innerItem4Out.asDouble(), innerItem5Out.asDouble(), innerItem6Out.asDouble(), innerItem7Out.asDouble(), innerItem8Out.asDouble(), innerItem9Out.asDouble(), innerItem10Out.asDouble(), innerItem11Out.asDouble(), innerItem12Out.asDouble()); return; case PyGLM_DT_INT64: allocate(sizeof(glm::mat<4, 3, glm::i64>)); *((glm::mat<4, 3, glm::i64>*)data) = glm::mat<4, 3, glm::i64>(innerItem1Out.asInt64(), innerItem2Out.asInt64(), innerItem3Out.asInt64(), innerItem4Out.asInt64(), innerItem5Out.asInt64(), innerItem6Out.asInt64(), innerItem7Out.asInt64(), innerItem8Out.asInt64(), innerItem9Out.asInt64(), innerItem10Out.asInt64(), innerItem11Out.asInt64(), innerItem12Out.asInt64()); return; case PyGLM_DT_UINT64: allocate(sizeof(glm::mat<4, 3, glm::u64>)); *((glm::mat<4, 3, glm::u64>*)data) = glm::mat<4, 3, glm::u64>(innerItem1Out.asUint64(), innerItem2Out.asUint64(), innerItem3Out.asUint64(), innerItem4Out.asUint64(), innerItem5Out.asUint64(), innerItem6Out.asUint64(), innerItem7Out.asUint64(), innerItem8Out.asUint64(), innerItem9Out.asUint64(), innerItem10Out.asUint64(), innerItem11Out.asUint64(), innerItem12Out.asUint64()); return; case PyGLM_DT_INT: allocate(sizeof(glm::mat<4, 3, glm::i32>)); *((glm::mat<4, 3, glm::i32>*)data) = glm::mat<4, 3, glm::i32>(innerItem1Out.asInt32(), innerItem2Out.asInt32(), innerItem3Out.asInt32(), innerItem4Out.asInt32(), innerItem5Out.asInt32(), innerItem6Out.asInt32(), innerItem7Out.asInt32(), innerItem8Out.asInt32(), innerItem9Out.asInt32(), innerItem10Out.asInt32(), innerItem11Out.asInt32(), innerItem12Out.asInt32()); return; case PyGLM_DT_UINT: allocate(sizeof(glm::mat<4, 3, glm::u32>)); *((glm::mat<4, 3, glm::u32>*)data) = glm::mat<4, 3, glm::u32>(innerItem1Out.asUint32(), innerItem2Out.asUint32(), innerItem3Out.asUint32(), innerItem4Out.asUint32(), innerItem5Out.asUint32(), innerItem6Out.asUint32(), innerItem7Out.asUint32(), innerItem8Out.asUint32(), innerItem9Out.asUint32(), innerItem10Out.asUint32(), innerItem11Out.asUint32(), innerItem12Out.asUint32()); return; case PyGLM_DT_INT16: allocate(sizeof(glm::mat<4, 3, glm::i16>)); *((glm::mat<4, 3, glm::i16>*)data) = glm::mat<4, 3, glm::i16>(innerItem1Out.asInt16(), innerItem2Out.asInt16(), innerItem3Out.asInt16(), innerItem4Out.asInt16(), innerItem5Out.asInt16(), innerItem6Out.asInt16(), innerItem7Out.asInt16(), innerItem8Out.asInt16(), innerItem9Out.asInt16(), innerItem10Out.asInt16(), innerItem11Out.asInt16(), innerItem12Out.asInt16()); return; case PyGLM_DT_UINT16: allocate(sizeof(glm::mat<4, 3, glm::u16>)); *((glm::mat<4, 3, glm::u16>*)data) = glm::mat<4, 3, glm::u16>(innerItem1Out.asUint16(), innerItem2Out.asUint16(), innerItem3Out.asUint16(), innerItem4Out.asUint16(), innerItem5Out.asUint16(), innerItem6Out.asUint16(), innerItem7Out.asUint16(), innerItem8Out.asUint16(), innerItem9Out.asUint16(), innerItem10Out.asUint16(), innerItem11Out.asUint16(), innerItem12Out.asUint16()); return; case PyGLM_DT_INT8: allocate(sizeof(glm::mat<4, 3, glm::i8>)); *((glm::mat<4, 3, glm::i8>*)data) = glm::mat<4, 3, glm::i8>(innerItem1Out.asInt8(), innerItem2Out.asInt8(), innerItem3Out.asInt8(), innerItem4Out.asInt8(), innerItem5Out.asInt8(), innerItem6Out.asInt8(), innerItem7Out.asInt8(), innerItem8Out.asInt8(), innerItem9Out.asInt8(), innerItem10Out.asInt8(), innerItem11Out.asInt8(), innerItem12Out.asInt8()); return; case PyGLM_DT_UINT8: allocate(sizeof(glm::mat<4, 3, glm::u8>)); *((glm::mat<4, 3, glm::u8>*)data) = glm::mat<4, 3, glm::u8>(innerItem1Out.asUint8(), innerItem2Out.asUint8(), innerItem3Out.asUint8(), innerItem4Out.asUint8(), innerItem5Out.asUint8(), innerItem6Out.asUint8(), innerItem7Out.asUint8(), innerItem8Out.asUint8(), innerItem9Out.asUint8(), innerItem10Out.asUint8(), innerItem11Out.asUint8(), innerItem12Out.asUint8()); return; case PyGLM_DT_BOOL: allocate(sizeof(glm::mat<4, 3, bool>)); *((glm::mat<4, 3, bool>*)data) = glm::mat<4, 3, bool>(innerItem1Out.asBool(), innerItem2Out.asBool(), innerItem3Out.asBool(), innerItem4Out.asBool(), innerItem5Out.asBool(), innerItem6Out.asBool(), innerItem7Out.asBool(), innerItem8Out.asBool(), innerItem9Out.asBool(), innerItem10Out.asBool(), innerItem11Out.asBool(), innerItem12Out.asBool()); return; } } else if (innerSize == 4 && (accepted_types & PyGLM_SHAPE_4x4)) { // mat4x4 PyObject* innerItem1 = PyGLM_TupleOrList_GET_ITEM(item1, 0); PyObject* innerItem2 = PyGLM_TupleOrList_GET_ITEM(item1, 1); PyObject* innerItem3 = PyGLM_TupleOrList_GET_ITEM(item1, 2); PyObject* innerItem4 = PyGLM_TupleOrList_GET_ITEM(item1, 3); PyObject* innerItem5 = PyGLM_TupleOrList_GET_ITEM(item2, 0); PyObject* innerItem6 = PyGLM_TupleOrList_GET_ITEM(item2, 1); PyObject* innerItem7 = PyGLM_TupleOrList_GET_ITEM(item2, 2); PyObject* innerItem8 = PyGLM_TupleOrList_GET_ITEM(item2, 3); PyObject* innerItem9 = PyGLM_TupleOrList_GET_ITEM(item3, 0); PyObject* innerItem10 = PyGLM_TupleOrList_GET_ITEM(item3, 1); PyObject* innerItem11 = PyGLM_TupleOrList_GET_ITEM(item3, 2); PyObject* innerItem12 = PyGLM_TupleOrList_GET_ITEM(item3, 3); PyObject* innerItem13 = PyGLM_TupleOrList_GET_ITEM(item4, 0); PyObject* innerItem14 = PyGLM_TupleOrList_GET_ITEM(item4, 1); PyObject* innerItem15 = PyGLM_TupleOrList_GET_ITEM(item4, 2); PyObject* innerItem16 = PyGLM_TupleOrList_GET_ITEM(item4, 3); PyGLMSingleTypeHolder innerItem1Out = PyGLMSingleTypeHolder(innerItem1); PyGLMSingleTypeHolder innerItem2Out = PyGLMSingleTypeHolder(innerItem2); PyGLMSingleTypeHolder innerItem3Out = PyGLMSingleTypeHolder(innerItem3); PyGLMSingleTypeHolder innerItem4Out = PyGLMSingleTypeHolder(innerItem4); PyGLMSingleTypeHolder innerItem5Out = PyGLMSingleTypeHolder(innerItem5); PyGLMSingleTypeHolder innerItem6Out = PyGLMSingleTypeHolder(innerItem6); PyGLMSingleTypeHolder innerItem7Out = PyGLMSingleTypeHolder(innerItem7); PyGLMSingleTypeHolder innerItem8Out = PyGLMSingleTypeHolder(innerItem8); PyGLMSingleTypeHolder innerItem9Out = PyGLMSingleTypeHolder(innerItem9); PyGLMSingleTypeHolder innerItem10Out = PyGLMSingleTypeHolder(innerItem10); PyGLMSingleTypeHolder innerItem11Out = PyGLMSingleTypeHolder(innerItem11); PyGLMSingleTypeHolder innerItem12Out = PyGLMSingleTypeHolder(innerItem12); PyGLMSingleTypeHolder innerItem13Out = PyGLMSingleTypeHolder(innerItem13); PyGLMSingleTypeHolder innerItem14Out = PyGLMSingleTypeHolder(innerItem14); PyGLMSingleTypeHolder innerItem15Out = PyGLMSingleTypeHolder(innerItem15); PyGLMSingleTypeHolder innerItem16Out = PyGLMSingleTypeHolder(innerItem16); int out_type = PyGLMSingleTypeHolder::getMostImportantType(accepted_types, { innerItem1Out.dtype, innerItem2Out.dtype, innerItem3Out.dtype, innerItem4Out.dtype, innerItem5Out.dtype, innerItem6Out.dtype, innerItem7Out.dtype, innerItem8Out.dtype, innerItem9Out.dtype, innerItem10Out.dtype, innerItem11Out.dtype, innerItem12Out.dtype, innerItem13Out.dtype, innerItem14Out.dtype, innerItem15Out.dtype, innerItem16Out.dtype }); if (out_type == -1) { data = NULL; return; } setInfo(PyGLM_T_MAT | PyGLM_SHAPE_4x4 | out_type); switch (out_type) { case PyGLM_DT_FLOAT: allocate(sizeof(glm::mat<4, 4, float>)); *((glm::mat<4, 4, float>*)data) = glm::mat<4, 4, float>(innerItem1Out.asFloat(), innerItem2Out.asFloat(), innerItem3Out.asFloat(), innerItem4Out.asFloat(), innerItem5Out.asFloat(), innerItem6Out.asFloat(), innerItem7Out.asFloat(), innerItem8Out.asFloat(), innerItem9Out.asFloat(), innerItem10Out.asFloat(), innerItem11Out.asFloat(), innerItem12Out.asFloat(), innerItem13Out.asFloat(), innerItem14Out.asFloat(), innerItem15Out.asFloat(), innerItem16Out.asFloat()); return; case PyGLM_DT_DOUBLE: allocate(sizeof(glm::mat<4, 4, double>)); *((glm::mat<4, 4, double>*)data) = glm::mat<4, 4, double>(innerItem1Out.asDouble(), innerItem2Out.asDouble(), innerItem3Out.asDouble(), innerItem4Out.asDouble(), innerItem5Out.asDouble(), innerItem6Out.asDouble(), innerItem7Out.asDouble(), innerItem8Out.asDouble(), innerItem9Out.asDouble(), innerItem10Out.asDouble(), innerItem11Out.asDouble(), innerItem12Out.asDouble(), innerItem13Out.asDouble(), innerItem14Out.asDouble(), innerItem15Out.asDouble(), innerItem16Out.asDouble()); return; case PyGLM_DT_INT64: allocate(sizeof(glm::mat<4, 4, glm::i64>)); *((glm::mat<4, 4, glm::i64>*)data) = glm::mat<4, 4, glm::i64>(innerItem1Out.asInt64(), innerItem2Out.asInt64(), innerItem3Out.asInt64(), innerItem4Out.asInt64(), innerItem5Out.asInt64(), innerItem6Out.asInt64(), innerItem7Out.asInt64(), innerItem8Out.asInt64(), innerItem9Out.asInt64(), innerItem10Out.asInt64(), innerItem11Out.asInt64(), innerItem12Out.asInt64(), innerItem13Out.asInt64(), innerItem14Out.asInt64(), innerItem15Out.asInt64(), innerItem16Out.asInt64()); return; case PyGLM_DT_UINT64: allocate(sizeof(glm::mat<4, 4, glm::u64>)); *((glm::mat<4, 4, glm::u64>*)data) = glm::mat<4, 4, glm::u64>(innerItem1Out.asUint64(), innerItem2Out.asUint64(), innerItem3Out.asUint64(), innerItem4Out.asUint64(), innerItem5Out.asUint64(), innerItem6Out.asUint64(), innerItem7Out.asUint64(), innerItem8Out.asUint64(), innerItem9Out.asUint64(), innerItem10Out.asUint64(), innerItem11Out.asUint64(), innerItem12Out.asUint64(), innerItem13Out.asUint64(), innerItem14Out.asUint64(), innerItem15Out.asUint64(), innerItem16Out.asUint64()); return; case PyGLM_DT_INT: allocate(sizeof(glm::mat<4, 4, glm::i32>)); *((glm::mat<4, 4, glm::i32>*)data) = glm::mat<4, 4, glm::i32>(innerItem1Out.asInt32(), innerItem2Out.asInt32(), innerItem3Out.asInt32(), innerItem4Out.asInt32(), innerItem5Out.asInt32(), innerItem6Out.asInt32(), innerItem7Out.asInt32(), innerItem8Out.asInt32(), innerItem9Out.asInt32(), innerItem10Out.asInt32(), innerItem11Out.asInt32(), innerItem12Out.asInt32(), innerItem13Out.asInt32(), innerItem14Out.asInt32(), innerItem15Out.asInt32(), innerItem16Out.asInt32()); return; case PyGLM_DT_UINT: allocate(sizeof(glm::mat<4, 4, glm::u32>)); *((glm::mat<4, 4, glm::u32>*)data) = glm::mat<4, 4, glm::u32>(innerItem1Out.asUint32(), innerItem2Out.asUint32(), innerItem3Out.asUint32(), innerItem4Out.asUint32(), innerItem5Out.asUint32(), innerItem6Out.asUint32(), innerItem7Out.asUint32(), innerItem8Out.asUint32(), innerItem9Out.asUint32(), innerItem10Out.asUint32(), innerItem11Out.asUint32(), innerItem12Out.asUint32(), innerItem13Out.asUint32(), innerItem14Out.asUint32(), innerItem15Out.asUint32(), innerItem16Out.asUint32()); return; case PyGLM_DT_INT16: allocate(sizeof(glm::mat<4, 4, glm::i16>)); *((glm::mat<4, 4, glm::i16>*)data) = glm::mat<4, 4, glm::i16>(innerItem1Out.asInt16(), innerItem2Out.asInt16(), innerItem3Out.asInt16(), innerItem4Out.asInt16(), innerItem5Out.asInt16(), innerItem6Out.asInt16(), innerItem7Out.asInt16(), innerItem8Out.asInt16(), innerItem9Out.asInt16(), innerItem10Out.asInt16(), innerItem11Out.asInt16(), innerItem12Out.asInt16(), innerItem13Out.asInt16(), innerItem14Out.asInt16(), innerItem15Out.asInt16(), innerItem16Out.asInt16()); return; case PyGLM_DT_UINT16: allocate(sizeof(glm::mat<4, 4, glm::u16>)); *((glm::mat<4, 4, glm::u16>*)data) = glm::mat<4, 4, glm::u16>(innerItem1Out.asUint16(), innerItem2Out.asUint16(), innerItem3Out.asUint16(), innerItem4Out.asUint16(), innerItem5Out.asUint16(), innerItem6Out.asUint16(), innerItem7Out.asUint16(), innerItem8Out.asUint16(), innerItem9Out.asUint16(), innerItem10Out.asUint16(), innerItem11Out.asUint16(), innerItem12Out.asUint16(), innerItem13Out.asUint16(), innerItem14Out.asUint16(), innerItem15Out.asUint16(), innerItem16Out.asUint16()); return; case PyGLM_DT_INT8: allocate(sizeof(glm::mat<4, 4, glm::i8>)); *((glm::mat<4, 4, glm::i8>*)data) = glm::mat<4, 4, glm::i8>(innerItem1Out.asInt8(), innerItem2Out.asInt8(), innerItem3Out.asInt8(), innerItem4Out.asInt8(), innerItem5Out.asInt8(), innerItem6Out.asInt8(), innerItem7Out.asInt8(), innerItem8Out.asInt8(), innerItem9Out.asInt8(), innerItem10Out.asInt8(), innerItem11Out.asInt8(), innerItem12Out.asInt8(), innerItem13Out.asInt8(), innerItem14Out.asInt8(), innerItem15Out.asInt8(), innerItem16Out.asInt8()); return; case PyGLM_DT_UINT8: allocate(sizeof(glm::mat<4, 4, glm::u8>)); *((glm::mat<4, 4, glm::u8>*)data) = glm::mat<4, 4, glm::u8>(innerItem1Out.asUint8(), innerItem2Out.asUint8(), innerItem3Out.asUint8(), innerItem4Out.asUint8(), innerItem5Out.asUint8(), innerItem6Out.asUint8(), innerItem7Out.asUint8(), innerItem8Out.asUint8(), innerItem9Out.asUint8(), innerItem10Out.asUint8(), innerItem11Out.asUint8(), innerItem12Out.asUint8(), innerItem13Out.asUint8(), innerItem14Out.asUint8(), innerItem15Out.asUint8(), innerItem16Out.asUint8()); return; case PyGLM_DT_BOOL: allocate(sizeof(glm::mat<4, 4, bool>)); *((glm::mat<4, 4, bool>*)data) = glm::mat<4, 4, bool>(innerItem1Out.asBool(), innerItem2Out.asBool(), innerItem3Out.asBool(), innerItem4Out.asBool(), innerItem5Out.asBool(), innerItem6Out.asBool(), innerItem7Out.asBool(), innerItem8Out.asBool(), innerItem9Out.asBool(), innerItem10Out.asBool(), innerItem11Out.asBool(), innerItem12Out.asBool(), innerItem13Out.asBool(), innerItem14Out.asBool(), innerItem15Out.asBool(), innerItem16Out.asBool()); return; } } } if ((accepted_types & PyGLM_SHAPE_4) && (accepted_types & PyGLM_T_ANY_VEC)) { PyGLMSingleTypeHolder item1Out = PyGLMSingleTypeHolder(item1); PyGLMSingleTypeHolder item2Out = PyGLMSingleTypeHolder(item2); PyGLMSingleTypeHolder item3Out = PyGLMSingleTypeHolder(item3); PyGLMSingleTypeHolder item4Out = PyGLMSingleTypeHolder(item4); int out_type = PyGLMSingleTypeHolder::getMostImportantType(accepted_types, { item1Out.dtype, item2Out.dtype, item3Out.dtype, item4Out.dtype }); if (out_type == -1) { data = NULL; return; } setInfo(PyGLM_T_VEC | PyGLM_SHAPE_4 | out_type); switch (out_type) { case PyGLM_DT_FLOAT: allocate(sizeof(glm::vec<4, float>)); *((glm::vec<4, float>*)data) = glm::vec<4, float>(item1Out.asFloat(), item2Out.asFloat(), item3Out.asFloat(), item4Out.asFloat()); return; case PyGLM_DT_DOUBLE: allocate(sizeof(glm::vec<4, double>)); *((glm::vec<4, double>*)data) = glm::vec<4, double>(item1Out.asDouble(), item2Out.asDouble(), item3Out.asDouble(), item4Out.asDouble()); return; case PyGLM_DT_INT64: allocate(sizeof(glm::vec<4, glm::i64>)); *((glm::vec<4, glm::i64>*)data) = glm::vec<4, glm::i64>(item1Out.asInt64(), item2Out.asInt64(), item3Out.asInt64(), item4Out.asInt64()); return; case PyGLM_DT_UINT64: allocate(sizeof(glm::vec<4, glm::u64>)); *((glm::vec<4, glm::u64>*)data) = glm::vec<4, glm::u64>(item1Out.asUint64(), item2Out.asUint64(), item3Out.asUint64(), item4Out.asUint64()); return; case PyGLM_DT_INT: allocate(sizeof(glm::vec<4, glm::i32>)); *((glm::vec<4, glm::i32>*)data) = glm::vec<4, glm::i32>(item1Out.asInt32(), item2Out.asInt32(), item3Out.asInt32(), item4Out.asInt32()); return; case PyGLM_DT_UINT: allocate(sizeof(glm::vec<4, glm::u32>)); *((glm::vec<4, glm::u32>*)data) = glm::vec<4, glm::u32>(item1Out.asUint32(), item2Out.asUint32(), item3Out.asUint32(), item4Out.asUint32()); return; case PyGLM_DT_INT16: allocate(sizeof(glm::vec<4, glm::i16>)); *((glm::vec<4, glm::i16>*)data) = glm::vec<4, glm::i16>(item1Out.asInt16(), item2Out.asInt16(), item3Out.asInt16(), item4Out.asInt16()); return; case PyGLM_DT_UINT16: allocate(sizeof(glm::vec<4, glm::u16>)); *((glm::vec<4, glm::u16>*)data) = glm::vec<4, glm::u16>(item1Out.asUint16(), item2Out.asUint16(), item3Out.asUint16(), item4Out.asUint16()); return; case PyGLM_DT_INT8: allocate(sizeof(glm::vec<4, glm::i8>)); *((glm::vec<4, glm::i8>*)data) = glm::vec<4, glm::i8>(item1Out.asInt8(), item2Out.asInt8(), item3Out.asInt8(), item4Out.asInt8()); return; case PyGLM_DT_UINT8: allocate(sizeof(glm::vec<4, glm::u8>)); *((glm::vec<4, glm::u8>*)data) = glm::vec<4, glm::u8>(item1Out.asUint8(), item2Out.asUint8(), item3Out.asUint8(), item4Out.asUint8()); return; case PyGLM_DT_BOOL: allocate(sizeof(glm::vec<4, bool>)); *((glm::vec<4, bool>*)data) = glm::vec<4, bool>(item1Out.asBool(), item2Out.asBool(), item3Out.asBool(), item4Out.asBool()); return; } } if ((accepted_types & PyGLM_T_QUA)) { PyGLMSingleTypeHolder item1Out = PyGLMSingleTypeHolder(item1); PyGLMSingleTypeHolder item2Out = PyGLMSingleTypeHolder(item2); PyGLMSingleTypeHolder item3Out = PyGLMSingleTypeHolder(item3); PyGLMSingleTypeHolder item4Out = PyGLMSingleTypeHolder(item4); int out_type = PyGLMSingleTypeHolder::getMostImportantType(accepted_types, { item1Out.dtype, item2Out.dtype, item3Out.dtype, item4Out.dtype }); if (out_type == -1) { data = NULL; return; } setInfo(PyGLM_T_QUA | out_type); switch (out_type) { case PyGLM_DT_FLOAT: allocate(sizeof(glm::qua)); *((glm::qua*)data) = glm::qua(item1Out.asFloat(), item2Out.asFloat(), item3Out.asFloat(), item4Out.asFloat()); return; case PyGLM_DT_DOUBLE: allocate(sizeof(glm::qua)); *((glm::qua*)data) = glm::qua(item1Out.asDouble(), item2Out.asDouble(), item3Out.asDouble(), item4Out.asDouble()); return; } } } } #endif } template inline glm::mat getMat() { return *((glm::mat*)data); } template inline glm::vec getVec() { return *((glm::vec*)data); } template inline glm::qua getQua() { return *((glm::qua*)data); } private: inline void allocate(size_t size) { assert(size <= 128); data = &dataArray; } void setInfo(int info) { this->info = info; this->isVec = (info & (PyGLM_T_ANY_VEC)); this->isMat = (info & (PyGLM_T_MAT)); this->isQua = (info & (PyGLM_T_QUA)); } }; #define _SUB_PyGLM_GET_TYPE(o) ((o->ob_type->tp_dealloc == NULL) ? PyGLM_TYPE_UNKNOWN : (o->ob_type->tp_dealloc == (destructor)vec_dealloc) ? PyGLM_TYPE_VEC : (o->ob_type->tp_dealloc == (destructor)mat_dealloc) ? PyGLM_TYPE_MAT : (o->ob_type->tp_dealloc == (destructor)qua_dealloc) ? PyGLM_TYPE_QUA : (o->ob_type->tp_dealloc == (destructor)mvec_dealloc) ? PyGLM_TYPE_VEC : PyGLM_TYPE_UNKNOWN) #define PyGLM_GET_TYPE(o) _SUB_PyGLM_GET_TYPE(((PyObject*)o)) #define PyGLM_Is_PyGLM_Type(o) (((PyTypeObject*)(o))->tp_dealloc == (destructor)vec_dealloc || ((PyTypeObject*)(o))->tp_dealloc == (destructor)mvec_dealloc || ((PyTypeObject*)(o))->tp_dealloc == (destructor)mat_dealloc || ((PyTypeObject*)(o))->tp_dealloc == (destructor)qua_dealloc) #define PyGLM_Ctypes_CheckType(o) (((PyTypeObject*)(o))->tp_dealloc == ctypes_dealloc) #define PyGLM_Ctypes_Check(o) PyGLM_Ctypes_CheckType(Py_TYPE(o)) #define PyGLM_Array_Check(o) (((PyTypeObject*)(o)) == &glmArrayType) //#define PyGLM_VEC_SHAPE_CHECK(o, L) ((((shape_helper*)o)->shape & 0b1111) == L) //#define PyGLM_MAT_SHAPE_CHECK(o, C, R) ((((shape_helper*)o)->shape & 0b111) == C && (((shape_helper*)o)->shape >> 3 & 0b111) == R) #define PyGLM_Vec_CheckExact(L, T, o) ((Py_TYPE(o) == UNBRACKET (PyGLM_VEC_TYPE())) || (Py_TYPE(o) == UNBRACKET (PyGLM_MVEC_TYPE()))) #define PyGLM_Mat_CheckExact(C, R, T, o) (Py_TYPE(o) == UNBRACKET (PyGLM_MAT_TYPE())) #define PyGLM_Qua_CheckExact(T, o) (Py_TYPE(o) == UNBRACKET (PyGLM_QUA_TYPE())) template static constexpr int get_PTI_type() { return ( (std::is_same::value) ? PyGLM_DT_DOUBLE : (std::is_same::value) ? PyGLM_DT_FLOAT : (std::is_same::value) ? PyGLM_DT_INT : (std::is_same::value) ? PyGLM_DT_UINT : (std::is_same::value) ? PyGLM_DT_INT64 : (std::is_same::value) ? PyGLM_DT_UINT64 : (std::is_same::value) ? PyGLM_DT_INT16 : (std::is_same::value) ? PyGLM_DT_UINT16 : (std::is_same::value) ? PyGLM_DT_INT8 : (std::is_same::value) ? PyGLM_DT_UINT8 : PyGLM_DT_BOOL ); } template static constexpr int get_vec_PTI_info() { return PyGLM_T_VEC | ( (L == 1) ? PyGLM_SHAPE_1 : (L == 2) ? PyGLM_SHAPE_2 : (L == 3) ? PyGLM_SHAPE_3 : PyGLM_SHAPE_4 ) | get_PTI_type(); } template static constexpr int get_mat_PTI_info() { return PyGLM_T_MAT | ( (C == 2) ? ( (R == 2) ? PyGLM_SHAPE_2x2 : (R == 3) ? PyGLM_SHAPE_2x3 : PyGLM_SHAPE_2x4 ) : (C == 3) ? ( (R == 2) ? PyGLM_SHAPE_3x2 : (R == 3) ? PyGLM_SHAPE_3x3 : PyGLM_SHAPE_3x4 ) : ( (R == 2) ? PyGLM_SHAPE_4x2 : (R == 3) ? PyGLM_SHAPE_4x3 : PyGLM_SHAPE_4x4 ) ) | get_PTI_type(); } template static constexpr int get_qua_PTI_info() { return PyGLM_T_QUA | get_PTI_type(); } static bool GET_PTI_COMPATIBLE_SIMPLE(PyObject* o, int accepted_types) { int& PTI_info = ((PyGLMTypeObject*)(o->ob_type))->PTI_info; return (PTI_info & accepted_types) == PTI_info; } #if !(PyGLM_BUILD & PyGLM_NO_ITER_TYPECHECKING) template static bool get_view_format_equal(char* value) { char& v_char = value[0]; if (v_char == 'f') { return std::is_same::value; } if (v_char == 'd') { return std::is_same::value; } if (v_char == 'b') { return std::is_same::value; } if (v_char == 'B') { return std::is_same::value; } if (v_char == 'h') { return std::is_same::value; } if (v_char == 'H') { return std::is_same::value; } if (v_char == 'i') { return std::is_same::value; } if (v_char == 'I') { return std::is_same::value; } if (v_char == 'q') { return std::is_same::value; } if (v_char == 'Q') { return std::is_same::value; } if (v_char == '?') { return std::is_same::value; } return false; } enum SourceType {NONE, PyGLM_VEC, PyGLM_MVEC, PyGLM_MAT, PyGLM_QUA, PTI}; static PyGLMTypeInfo PTI0; static SourceType sourceType0; static PyGLMTypeInfo PTI1; static SourceType sourceType1; static PyGLMTypeInfo PTI2; static SourceType sourceType2; static PyGLMTypeInfo PTI3; static SourceType sourceType3; #ifdef PyGLM_DEBUG static PyObject* ARG0 = NULL; static PyObject* ARG1 = NULL; static PyObject* ARG2 = NULL; static PyObject* ARG3 = NULL; static bool ARGUSED = true; #endif #ifdef PyGLM_DEBUG #define PyGLM_PTI_InitN(N, o, accepted_types) \ if (o->ob_type->tp_dealloc == (destructor)vec_dealloc){if (GET_PTI_COMPATIBLE_SIMPLE(o, accepted_types)) {sourceType ## N = PyGLM_VEC;} else {sourceType ## N = NONE;}}\ else if (o->ob_type->tp_dealloc == (destructor)mat_dealloc) {if (GET_PTI_COMPATIBLE_SIMPLE(o, accepted_types)) {sourceType ## N = PyGLM_MAT;} else {sourceType ## N = NONE;}} \ else if (o->ob_type->tp_dealloc == (destructor)qua_dealloc) {if (GET_PTI_COMPATIBLE_SIMPLE(o, accepted_types)) {sourceType ## N = PyGLM_QUA;} else {sourceType ## N = NONE;}}\ else if (o->ob_type->tp_dealloc == (destructor)mvec_dealloc) {if (GET_PTI_COMPATIBLE_SIMPLE(o, accepted_types)) {sourceType ## N = PyGLM_MVEC;} else {sourceType ## N = NONE;}}\ else { PTI ## N = PyGLMTypeInfo(accepted_types, o); if (PTI ## N.info == 0) sourceType ## N = NONE; else sourceType ## N = PTI;};\ if (N == 0 && !ARGUSED) throw; ARG ## N = o; if (N == 0 && sourceType ## N != NONE) {ARGUSED = false;}; static bool PyGLM_PTI_DEBUG_EQ_FUNC(PyObject* o, PyObject* arg) { if (o != arg) { throw; } return false; } static inline bool set_ARGUSED() { ARGUSED = true; return ARGUSED; } #define PyGLM_PTI_DEBUG_EQ(N, o) (set_ARGUSED() && PyGLM_PTI_DEBUG_EQ_FUNC(o, ARG##N)) || #define PyGLM_PTI_DEBUG_SC(N, o) PyGLM_PTI_DEBUG_EQ_FUNC(o, ARG##N) #define PyGLM_PTI_IsVec(N) ((ARGUSED = true) && (sourceType ## N == PyGLM_VEC || sourceType ## N == PyGLM_MVEC || sourceType ## N == PTI && PTI ## N.isVec)) #define PyGLM_PTI_IsMat(N) ((ARGUSED = true) && (sourceType ## N == PyGLM_MAT || sourceType ## N == PTI && PTI ## N.isMat)) #define PyGLM_PTI_IsQua(N) ((ARGUSED = true) && (sourceType ## N == PyGLM_QUA || sourceType ## N == PTI && PTI ## N.isQua)) #define PyGLM_PTI_IsNone(N) ((ARGUSED = true) && sourceType ## N == NONE) #else #define PyGLM_PTI_InitN(N, o, accepted_types) \ if (o->ob_type->tp_dealloc == (destructor)vec_dealloc){if (GET_PTI_COMPATIBLE_SIMPLE(o, accepted_types)) {sourceType ## N = PyGLM_VEC;} else {sourceType ## N = NONE;}}\ else if (o->ob_type->tp_dealloc == (destructor)mat_dealloc) {if (GET_PTI_COMPATIBLE_SIMPLE(o, accepted_types)) {sourceType ## N = PyGLM_MAT;} else {sourceType ## N = NONE;}} \ else if (o->ob_type->tp_dealloc == (destructor)qua_dealloc) {if (GET_PTI_COMPATIBLE_SIMPLE(o, accepted_types)) {sourceType ## N = PyGLM_QUA;} else {sourceType ## N = NONE;}}\ else if (o->ob_type->tp_dealloc == (destructor)mvec_dealloc) {if (GET_PTI_COMPATIBLE_SIMPLE(o, accepted_types)) {sourceType ## N = PyGLM_MVEC;} else {sourceType ## N = NONE;}}\ else { PTI ## N.init(accepted_types, o); if (PTI ## N.info == 0) sourceType ## N = NONE; else sourceType ## N = PTI;} #define PyGLM_PTI_DEBUG_EQ(N, o) #define PyGLM_PTI_DEBUG_SC(N, o) #define PyGLM_PTI_IsVec(N) (sourceType ## N == PyGLM_VEC || sourceType ## N == PyGLM_MVEC || (sourceType ## N == PTI && PTI ## N.isVec)) #define PyGLM_PTI_IsMat(N) (sourceType ## N == PyGLM_MAT || (sourceType ## N == PTI && PTI ## N.isMat)) #define PyGLM_PTI_IsQua(N) (sourceType ## N == PyGLM_QUA || (sourceType ## N == PTI && PTI ## N.isQua)) #define PyGLM_PTI_IsNone(N) (sourceType ## N == NONE) #endif #define PyGLM_PTI_GetDT(T) (get_PTI_type()) #ifdef PyGLM_DEBUG static inline bool assertAndReturn(bool expr) { assert(expr); return expr; } #define PyGLM_Vec_PTI_CheckN(N, L, T, o) (PyGLM_PTI_DEBUG_EQ(N, o) PyGLM_Vec_CheckExact(L, T, o) && assertAndReturn(sourceType ## N == PyGLM_VEC || sourceType ## N == PyGLM_MVEC) || sourceType ## N == PTI && PTI ## N.info == get_vec_PTI_info()) #define PyGLM_Mat_PTI_CheckN(N, C, R, T, o) (PyGLM_PTI_DEBUG_EQ(N, o) PyGLM_Mat_CheckExact(C, R, T, o) && assertAndReturn(sourceType ## N == PyGLM_MAT) || sourceType ## N == PTI && PTI ## N.info == get_mat_PTI_info()) #define PyGLM_Qua_PTI_CheckN(N, T, o) (PyGLM_PTI_DEBUG_EQ(N, o) PyGLM_Qua_CheckExact(T, o) && assertAndReturn(sourceType ## N == PyGLM_QUA) || sourceType ## N == PTI && PTI ## N.info == get_qua_PTI_info()) #else #define PyGLM_Vec_PTI_CheckN(N, L, T, o) (PyGLM_PTI_DEBUG_EQ(N, o) PyGLM_Vec_CheckExact(L, T, o) ||( sourceType ## N == PTI && PTI ## N.info == get_vec_PTI_info())) #define PyGLM_Mat_PTI_CheckN(N, C, R, T, o) (PyGLM_PTI_DEBUG_EQ(N, o) PyGLM_Mat_CheckExact(C, R, T, o) || (sourceType ## N == PTI && PTI ## N.info == get_mat_PTI_info())) #define PyGLM_Qua_PTI_CheckN(N, T, o) (PyGLM_PTI_DEBUG_EQ(N, o) PyGLM_Qua_CheckExact(T, o) || (sourceType ## N == PTI && PTI ## N.info == get_qua_PTI_info())) #endif //#define PyGLM_Vec_PTI_CheckN(L, T, o, N) (PTI ## N = PyGLMTypeInfo(PyGLM_T_ANY_VEC | PyGLM_SHAPE_ ## L | PyGLM_DT_ ## T,o), sourceType ## N = PTI, PTI ## N.info == (PyGLM_T_VEC | PyGLM_SHAPE_ ## L | PyGLM_DT_ ## T)) //#define PyGLM_Vec_CheckN(L, T, o, N) ((PyObject_TypeCheck(o, UNBRACKET (PyGLM_VEC_TYPE())) && (sourceType ## N = NORMAL)) || (Py_TYPE(o) == PyGLM_MVEC_TYPE() && (sourceType ## N = MVEC)) || (PyGLM_GET_TYPE(o) == PyGLM_TYPE_UNKNOWN) && PyGLM_Vec_PTI_CheckN(L, T, o, N)) #define PyGLM_Vec_Check PyGLM_Vec_CheckExact #define PyGLM_Vec_Check_IgnoreType PyGLM_Vec_CheckExact #define PyGLM_Vec_PTI_GetN(N, L, T, o) ((PyGLM_PTI_DEBUG_EQ(N, o) sourceType ## N == PyGLM_VEC) ? ((vec*)o)->super_type : (sourceType ## N == PyGLM_MVEC) ? *((mvec*)o)->super_type : PTI ## N.getVec()) //#define PyGLM_Qua_PTI_CheckN(T, o, N) (PTI ## N = PyGLMTypeInfo(PyGLM_T_QUA | PyGLM_DT_ ## T,o), sourceType ## N = PTI, PTI ## N.info == (PyGLM_T_QUA | PyGLM_DT_ ## T)) #define PyGLM_Qua_CheckN(T, o, N) ((PyObject_TypeCheck(o, UNBRACKET (PyGLM_QUA_TYPE())) && (sourceType ## N = NORMAL)) || (PyGLM_GET_TYPE(o) == PyGLM_TYPE_UNKNOWN) && PyGLM_Qua_PTI_CheckN(T, o, N)) #define PyGLM_Qua_Check PyGLM_Qua_CheckExact #define PyGLM_Qua_PTI_GetN(N, T, o) ((PyGLM_PTI_DEBUG_EQ(N, o) sourceType ## N == PTI) ? PTI ## N.getQua() : ((qua*)o)->super_type) //#define PyGLM_Mat_PTI_CheckN(C, R, DT, o, N) (PTI ## N = PyGLMTypeInfo(PyGLM_T_MAT | PyGLM_SHAPE_ ## C ## x ## R | DT,o), sourceType ## N = PTI, PTI ## N.info == (PyGLM_T_MAT | PyGLM_SHAPE_ ## C ## x ## R | DT)) #define PyGLM_Mat_CheckN(C, R, T, o, N) ((PyObject_TypeCheck(o, UNBRACKET (PyGLM_MAT_TYPE())) && (sourceType ## N = NORMAL)) || (PyGLM_GET_TYPE(o) == PyGLM_TYPE_UNKNOWN) && PyGLM_Mat_PTI_CheckN(C, R, PTI##N.getDT(), o, N)) #define PyGLM_Mat_Check PyGLM_Mat_CheckExact #define PyGLM_Mat_PTI_GetN(N, C, R, T, o) ((PyGLM_PTI_DEBUG_EQ(N, o) sourceType ## N == PTI) ? PTI ## N.getMat() : ((mat*)o)->super_type) #else enum SourceType { NONE, PyGLM_VEC, PyGLM_MVEC, PyGLM_MAT, PyGLM_QUA }; static SourceType sourceType0; static SourceType sourceType1; static SourceType sourceType2; static SourceType sourceType3; #define PyGLM_PTI_InitN(N, o, accepted_types) \ if (o->ob_type->tp_dealloc == (destructor)vec_dealloc){if (GET_PTI_COMPATIBLE_SIMPLE(o, accepted_types)) {sourceType ## N = PyGLM_VEC;} else {sourceType ## N = NONE;}}\ else if (o->ob_type->tp_dealloc == (destructor)mat_dealloc) {if (GET_PTI_COMPATIBLE_SIMPLE(o, accepted_types)) {sourceType ## N = PyGLM_MAT;} else {sourceType ## N = NONE;}} \ else if (o->ob_type->tp_dealloc == (destructor)qua_dealloc) {if (GET_PTI_COMPATIBLE_SIMPLE(o, accepted_types)) {sourceType ## N = PyGLM_QUA;} else {sourceType ## N = NONE;}}\ else if (o->ob_type->tp_dealloc == (destructor)mvec_dealloc) {if (GET_PTI_COMPATIBLE_SIMPLE(o, accepted_types)) {sourceType ## N = PyGLM_MVEC;} else {sourceType ## N = NONE;}}\ else sourceType ## N = NONE; #define PyGLM_Vec_PTI_CheckN(N, L, T, o) PyGLM_Vec_CheckExact(L, T, o) #define PyGLM_Mat_PTI_CheckN(N, C, R, T, o) PyGLM_Mat_CheckExact(C, R, T, o) #define PyGLM_Qua_PTI_CheckN(N, T, o) PyGLM_Qua_CheckExact(T, o) #define PyGLM_Vec_PTI_GetN(N, L, T, o) ((sourceType ## N == PyGLM_VEC) ? ((vec*)o)->super_type : *((mvec*)o)->super_type) #define PyGLM_Mat_PTI_GetN(N, C, R, T, o) (((mat*)o)->super_type) #define PyGLM_Qua_PTI_GetN(N, T, o) (((qua*)o)->super_type) #define PyGLM_Vec_Check(L, T, o) (PyObject_TypeCheck(o, UNBRACKET (PyGLM_VEC_TYPE())) || Py_TYPE(o) == PyGLM_MVEC_TYPE()) #define PyGLM_Vec_Check_IgnoreType PyGLM_Vec_Check #define PyGLM_Qua_Check(T, o) (PyObject_TypeCheck(o, UNBRACKET (PyGLM_QUA_TYPE()))) #define PyGLM_Mat_Check(C, R, T, o) PyObject_TypeCheck(o, UNBRACKET (PyGLM_MAT_TYPE())) #define PyGLM_PTI_IsVec(N) (sourceType ## N == PyGLM_VEC || sourceType ## N == PyGLM_MVEC) #define PyGLM_PTI_IsMat(N) (sourceType ## N == PyGLM_MAT) #define PyGLM_PTI_IsQua(N) (sourceType ## N == PyGLM_QUA) #define PyGLM_PTI_IsNone(N) (sourceType ## N == NONE) #define PyGLM_PTI_GetDT(T) (get_PTI_type()) #endif #define PyGLM_PTI_Init0(o, accepted_types) PyGLM_PTI_InitN(0, o, accepted_types) #define PyGLM_PTI_Init1(o, accepted_types) PyGLM_PTI_InitN(1, o, accepted_types) #define PyGLM_PTI_Init2(o, accepted_types) PyGLM_PTI_InitN(2, o, accepted_types) #define PyGLM_PTI_Init3(o, accepted_types) PyGLM_PTI_InitN(3, o, accepted_types) #define PyGLM_Vec_PTI_Check0(L, T, o) PyGLM_Vec_PTI_CheckN(0, L, T, o) #define PyGLM_Vec_PTI_Check1(L, T, o) PyGLM_Vec_PTI_CheckN(1, L, T, o) #define PyGLM_Vec_PTI_Check2(L, T, o) PyGLM_Vec_PTI_CheckN(2, L, T, o) #define PyGLM_Vec_PTI_Check3(L, T, o) PyGLM_Vec_PTI_CheckN(3, L, T, o) #define PyGLM_Mat_PTI_Check0(C, R, T, o) PyGLM_Mat_PTI_CheckN(0, C, R, T, o) #define PyGLM_Mat_PTI_Check1(C, R, T, o) PyGLM_Mat_PTI_CheckN(1, C, R, T, o) #define PyGLM_Mat_PTI_Check2(C, R, T, o) PyGLM_Mat_PTI_CheckN(2, C, R, T, o) #define PyGLM_Mat_PTI_Check3(C, R, T, o) PyGLM_Mat_PTI_CheckN(3, C, R, T, o) #define PyGLM_Qua_PTI_Check0(T, o) PyGLM_Qua_PTI_CheckN(0, T, o) #define PyGLM_Qua_PTI_Check1(T, o) PyGLM_Qua_PTI_CheckN(1, T, o) #define PyGLM_Qua_PTI_Check2(T, o) PyGLM_Qua_PTI_CheckN(2, T, o) #define PyGLM_Qua_PTI_Check3(T, o) PyGLM_Qua_PTI_CheckN(3, T, o) #define PyGLM_Vec_PTI_Get0(L, T, o) PyGLM_Vec_PTI_GetN(0, L, T, o) #define PyGLM_Vec_PTI_Get1(L, T, o) PyGLM_Vec_PTI_GetN(1, L, T, o) #define PyGLM_Vec_PTI_Get2(L, T, o) PyGLM_Vec_PTI_GetN(2, L, T, o) #define PyGLM_Vec_PTI_Get3(L, T, o) PyGLM_Vec_PTI_GetN(3, L, T, o) #define PyGLM_Vec_PTI_Assign(L, T) glm::vec o = PyGLM_Vec_PTI_Get0(L, T, arg); #define PyGLM_Vec_PTI_Assign0(L, T) glm::vec o = PyGLM_Vec_PTI_Get0(L, T, arg1); #define PyGLM_Vec_PTI_Assign1(L, T) glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, arg2); #define PyGLM_Vec_PTI_Assign2(L, T) glm::vec o3 = PyGLM_Vec_PTI_Get2(L, T, arg3); #define PyGLM_Vec_PTI_Assign3(L, T) glm::vec o4 = PyGLM_Vec_PTI_Get3(L, T, arg4); #define PyGLM_Mat_PTI_Get0(C, R, T, o) PyGLM_Mat_PTI_GetN(0, C, R, T, o) #define PyGLM_Mat_PTI_Get1(C, R, T, o) PyGLM_Mat_PTI_GetN(1, C, R, T, o) #define PyGLM_Mat_PTI_Get2(C, R, T, o) PyGLM_Mat_PTI_GetN(2, C, R, T, o) #define PyGLM_Mat_PTI_Get3(C, R, T, o) PyGLM_Mat_PTI_GetN(3, C, R, T, o) #define PyGLM_Mat_PTI_Assign(C, R, T) glm::mat o = PyGLM_Mat_PTI_Get0(C, R, T, arg); #define PyGLM_Mat_PTI_Assign0(C, R, T) glm::mat o = PyGLM_Mat_PTI_Get0(C, R, T, arg1); #define PyGLM_Mat_PTI_Assign1(C, R, T) glm::mat o2 = PyGLM_Mat_PTI_Get1(C, R, T, arg2); #define PyGLM_Mat_PTI_Assign2(C, R, T) glm::mat o3 = PyGLM_Mat_PTI_Get2(C, R, T, arg3); #define PyGLM_Mat_PTI_Assign3(C, R, T) glm::mat o4 = PyGLM_Mat_PTI_Get3(C, R, T, arg4); #define PyGLM_Qua_PTI_Get0(T, o) PyGLM_Qua_PTI_GetN(0, T, o) #define PyGLM_Qua_PTI_Get1(T, o) PyGLM_Qua_PTI_GetN(1, T, o) #define PyGLM_Qua_PTI_Get2(T, o) PyGLM_Qua_PTI_GetN(2, T, o) #define PyGLM_Qua_PTI_Get3(T, o) PyGLM_Qua_PTI_GetN(3, T, o) #define PyGLM_Qua_PTI_Assign(T) glm::qua o = PyGLM_Qua_PTI_Get0(T, arg); #define PyGLM_Qua_PTI_Assign0(T) glm::qua o = PyGLM_Qua_PTI_Get0(T, arg1); #define PyGLM_Qua_PTI_Assign1(T) glm::qua o2 = PyGLM_Qua_PTI_Get1(T, arg2); #define PyGLM_Qua_PTI_Assign2(T) glm::qua o3 = PyGLM_Qua_PTI_Get2(T, arg3); #define PyGLM_Qua_PTI_Assign3(T) glm::qua o4 = PyGLM_Qua_PTI_Get3(T, arg4); #include "unpackers.h"Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/type_getters/000077500000000000000000000000001511156275200257315ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/type_getters/all.h000066400000000000000000000003211511156275200266460ustar00rootroot00000000000000#pragma once #include "vec.h" #include "vec_iter.h" #include "mvec.h" #include "mvec_iter.h" #include "mat.h" #include "mat_iter.h" #include "qua.h" #include "qua_iter.h" #include "ctypes_datatypes.h"Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/type_getters/ctypes_datatypes.h000066400000000000000000000030421511156275200314660ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "../ctypes_pointers.h" template static constexpr PyTypeObject* PyGLM_CTYPES_TYPE() { return (std::is_same::value) ? (PyTypeObject*)ctypes_float : (std::is_same::value) ? (PyTypeObject*)ctypes_double : (std::is_same::value) ? (PyTypeObject*)ctypes_int8 : (std::is_same::value) ? (PyTypeObject*)ctypes_int16 : (std::is_same::value) ? (PyTypeObject*)ctypes_int32 : (std::is_same::value) ? (PyTypeObject*)ctypes_int64 : (std::is_same::value) ? (PyTypeObject*)ctypes_uint8 : (std::is_same::value) ? (PyTypeObject*)ctypes_uint16 : (std::is_same::value) ? (PyTypeObject*)ctypes_uint32 : (std::is_same::value) ? (PyTypeObject*)ctypes_uint64 : (std::is_same::value) ? (PyTypeObject*)ctypes_bool : (PyTypeObject*)0; } template static constexpr const char* PyGLM_CTYPES_TYPE_STRING() { return (std::is_same::value) ? "c_float" : (std::is_same::value) ? "c_double" : (std::is_same::value) ? "c_int8" : (std::is_same::value) ? "c_int16" : (std::is_same::value) ? "c_int32" : (std::is_same::value) ? "c_int64" : (std::is_same::value) ? "c_uint8" : (std::is_same::value) ? "c_uint16" : (std::is_same::value) ? "c_uint32" : (std::is_same::value) ? "c_uint64" : (std::is_same::value) ? "c_bool" : ""; }Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/type_getters/mat.h000066400000000000000000000141761511156275200266740ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" template static constexpr PyTypeObject* PyGLM_MAT_TYPE() { return (std::is_same, mat<2, 2, float> >::value) ? (PyTypeObject*)&hfmat2x2Type : (std::is_same, mat<2, 3, float> >::value) ? (PyTypeObject*)&hfmat2x3Type : (std::is_same, mat<2, 4, float> >::value) ? (PyTypeObject*)&hfmat2x4Type : (std::is_same, mat<3, 2, float> >::value) ? (PyTypeObject*)&hfmat3x2Type : (std::is_same, mat<3, 3, float> >::value) ? (PyTypeObject*)&hfmat3x3Type : (std::is_same, mat<3, 4, float> >::value) ? (PyTypeObject*)&hfmat3x4Type : (std::is_same, mat<4, 2, float> >::value) ? (PyTypeObject*)&hfmat4x2Type : (std::is_same, mat<4, 3, float> >::value) ? (PyTypeObject*)&hfmat4x3Type : (std::is_same, mat<4, 4, float> >::value) ? (PyTypeObject*)&hfmat4x4Type : (std::is_same, mat<2, 2, double> >::value) ? (PyTypeObject*)&hdmat2x2Type : (std::is_same, mat<2, 3, double> >::value) ? (PyTypeObject*)&hdmat2x3Type : (std::is_same, mat<2, 4, double> >::value) ? (PyTypeObject*)&hdmat2x4Type : (std::is_same, mat<3, 2, double> >::value) ? (PyTypeObject*)&hdmat3x2Type : (std::is_same, mat<3, 3, double> >::value) ? (PyTypeObject*)&hdmat3x3Type : (std::is_same, mat<3, 4, double> >::value) ? (PyTypeObject*)&hdmat3x4Type : (std::is_same, mat<4, 2, double> >::value) ? (PyTypeObject*)&hdmat4x2Type : (std::is_same, mat<4, 3, double> >::value) ? (PyTypeObject*)&hdmat4x3Type : (std::is_same, mat<4, 4, double> >::value) ? (PyTypeObject*)&hdmat4x4Type : (std::is_same, mat<2, 2, int32> >::value) ? (PyTypeObject*)&himat2x2Type : (std::is_same, mat<2, 3, int32> >::value) ? (PyTypeObject*)&himat2x3Type : (std::is_same, mat<2, 4, int32> >::value) ? (PyTypeObject*)&himat2x4Type : (std::is_same, mat<3, 2, int32> >::value) ? (PyTypeObject*)&himat3x2Type : (std::is_same, mat<3, 3, int32> >::value) ? (PyTypeObject*)&himat3x3Type : (std::is_same, mat<3, 4, int32> >::value) ? (PyTypeObject*)&himat3x4Type : (std::is_same, mat<4, 2, int32> >::value) ? (PyTypeObject*)&himat4x2Type : (std::is_same, mat<4, 3, int32> >::value) ? (PyTypeObject*)&himat4x3Type : (std::is_same, mat<4, 4, int32> >::value) ? (PyTypeObject*)&himat4x4Type : (std::is_same, mat<2, 2, uint32> >::value) ? (PyTypeObject*)&humat2x2Type : (std::is_same, mat<2, 3, uint32> >::value) ? (PyTypeObject*)&humat2x3Type : (std::is_same, mat<2, 4, uint32> >::value) ? (PyTypeObject*)&humat2x4Type : (std::is_same, mat<3, 2, uint32> >::value) ? (PyTypeObject*)&humat3x2Type : (std::is_same, mat<3, 3, uint32> >::value) ? (PyTypeObject*)&humat3x3Type : (std::is_same, mat<3, 4, uint32> >::value) ? (PyTypeObject*)&humat3x4Type : (std::is_same, mat<4, 2, uint32> >::value) ? (PyTypeObject*)&humat4x2Type : (std::is_same, mat<4, 3, uint32> >::value) ? (PyTypeObject*)&humat4x3Type : (std::is_same, mat<4, 4, uint32> >::value) ? (PyTypeObject*)&humat4x4Type : (PyTypeObject*)0; } template static PyTypeObject* PyGLM_MAT_TYPE_T_ONLY(int C, int R) { return (C == 2) ? ( (R == 2) ? PyGLM_MAT_TYPE<2, 2, T>() : (R == 3) ? PyGLM_MAT_TYPE<2, 3, T>() : (R == 4) ? PyGLM_MAT_TYPE<2, 4, T>() : NULL ) : (C == 3) ? ( (R == 2) ? PyGLM_MAT_TYPE<3, 2, T>() : (R == 3) ? PyGLM_MAT_TYPE<3, 3, T>() : (R == 4) ? PyGLM_MAT_TYPE<3, 4, T>() : NULL ) : (C == 4) ? ( (R == 2) ? PyGLM_MAT_TYPE<4, 2, T>() : (R == 3) ? PyGLM_MAT_TYPE<4, 3, T>() : (R == 4) ? PyGLM_MAT_TYPE<4, 4, T>() : NULL ) : NULL; } static PyTypeObject* PyGLM_PYOBJECT_MAT_GET_COLUMN_TYPE(PyGLMTypeObject* mat) { switch (mat->C) { case 2: switch (mat->format) { case PyGLM_FS_FLOAT: return PyGLM_VEC_TYPE<2, float>(); case PyGLM_FS_DOUBLE: return PyGLM_VEC_TYPE<2, double>(); case PyGLM_FS_INT64: return PyGLM_VEC_TYPE<2, int64>(); case PyGLM_FS_UINT64: return PyGLM_VEC_TYPE<2, uint64>(); case PyGLM_FS_INT32: return PyGLM_VEC_TYPE<2, int32>(); case PyGLM_FS_UINT32: return PyGLM_VEC_TYPE<2, uint32>(); case PyGLM_FS_INT16: return PyGLM_VEC_TYPE<2, int16>(); case PyGLM_FS_UINT16: return PyGLM_VEC_TYPE<2, uint16>(); case PyGLM_FS_INT8: return PyGLM_VEC_TYPE<2, int8>(); case PyGLM_FS_UINT8: return PyGLM_VEC_TYPE<2, uint8>(); case PyGLM_FS_BOOL: return PyGLM_VEC_TYPE<2, bool>(); } case 3: switch (mat->format) { case PyGLM_FS_FLOAT: return PyGLM_VEC_TYPE<3, float>(); case PyGLM_FS_DOUBLE: return PyGLM_VEC_TYPE<3, double>(); case PyGLM_FS_INT64: return PyGLM_VEC_TYPE<3, int64>(); case PyGLM_FS_UINT64: return PyGLM_VEC_TYPE<3, uint64>(); case PyGLM_FS_INT32: return PyGLM_VEC_TYPE<3, int32>(); case PyGLM_FS_UINT32: return PyGLM_VEC_TYPE<3, uint32>(); case PyGLM_FS_INT16: return PyGLM_VEC_TYPE<3, int16>(); case PyGLM_FS_UINT16: return PyGLM_VEC_TYPE<3, uint16>(); case PyGLM_FS_INT8: return PyGLM_VEC_TYPE<3, int8>(); case PyGLM_FS_UINT8: return PyGLM_VEC_TYPE<3, uint8>(); case PyGLM_FS_BOOL: return PyGLM_VEC_TYPE<3, bool>(); } case 4: switch (mat->format) { case PyGLM_FS_FLOAT: return PyGLM_VEC_TYPE<4, float>(); case PyGLM_FS_DOUBLE: return PyGLM_VEC_TYPE<4, double>(); case PyGLM_FS_INT64: return PyGLM_VEC_TYPE<4, int64>(); case PyGLM_FS_UINT64: return PyGLM_VEC_TYPE<4, uint64>(); case PyGLM_FS_INT32: return PyGLM_VEC_TYPE<4, int32>(); case PyGLM_FS_UINT32: return PyGLM_VEC_TYPE<4, uint32>(); case PyGLM_FS_INT16: return PyGLM_VEC_TYPE<4, int16>(); case PyGLM_FS_UINT16: return PyGLM_VEC_TYPE<4, uint16>(); case PyGLM_FS_INT8: return PyGLM_VEC_TYPE<4, int8>(); case PyGLM_FS_UINT8: return PyGLM_VEC_TYPE<4, uint8>(); case PyGLM_FS_BOOL: return PyGLM_VEC_TYPE<4, bool>(); } } return NULL; } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/type_getters/mat_iter.h000066400000000000000000000074431511156275200277160ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" template static PyTypeObject* PyGLM_MATITER_TYPE() { return (std::is_same, matIter<2, 2, float> >::value) ? (PyTypeObject*)&hfmat2x2IterType : (std::is_same, matIter<2, 3, float> >::value) ? (PyTypeObject*)&hfmat2x3IterType : (std::is_same, matIter<2, 4, float> >::value) ? (PyTypeObject*)&hfmat2x4IterType : (std::is_same, matIter<3, 2, float> >::value) ? (PyTypeObject*)&hfmat3x2IterType : (std::is_same, matIter<3, 3, float> >::value) ? (PyTypeObject*)&hfmat3x3IterType : (std::is_same, matIter<3, 4, float> >::value) ? (PyTypeObject*)&hfmat3x4IterType : (std::is_same, matIter<4, 2, float> >::value) ? (PyTypeObject*)&hfmat4x2IterType : (std::is_same, matIter<4, 3, float> >::value) ? (PyTypeObject*)&hfmat4x3IterType : (std::is_same, matIter<4, 4, float> >::value) ? (PyTypeObject*)&hfmat4x4IterType : (std::is_same, matIter<2, 2, double> >::value) ? (PyTypeObject*)&hdmat2x2IterType : (std::is_same, matIter<2, 3, double> >::value) ? (PyTypeObject*)&hdmat2x3IterType : (std::is_same, matIter<2, 4, double> >::value) ? (PyTypeObject*)&hdmat2x4IterType : (std::is_same, matIter<3, 2, double> >::value) ? (PyTypeObject*)&hdmat3x2IterType : (std::is_same, matIter<3, 3, double> >::value) ? (PyTypeObject*)&hdmat3x3IterType : (std::is_same, matIter<3, 4, double> >::value) ? (PyTypeObject*)&hdmat3x4IterType : (std::is_same, matIter<4, 2, double> >::value) ? (PyTypeObject*)&hdmat4x2IterType : (std::is_same, matIter<4, 3, double> >::value) ? (PyTypeObject*)&hdmat4x3IterType : (std::is_same, matIter<4, 4, double> >::value) ? (PyTypeObject*)&hdmat4x4IterType : (std::is_same, matIter<2, 2, int32> >::value) ? (PyTypeObject*)&himat2x2IterType : (std::is_same, matIter<2, 3, int32> >::value) ? (PyTypeObject*)&himat2x3IterType : (std::is_same, matIter<2, 4, int32> >::value) ? (PyTypeObject*)&himat2x4IterType : (std::is_same, matIter<3, 2, int32> >::value) ? (PyTypeObject*)&himat3x2IterType : (std::is_same, matIter<3, 3, int32> >::value) ? (PyTypeObject*)&himat3x3IterType : (std::is_same, matIter<3, 4, int32> >::value) ? (PyTypeObject*)&himat3x4IterType : (std::is_same, matIter<4, 2, int32> >::value) ? (PyTypeObject*)&himat4x2IterType : (std::is_same, matIter<4, 3, int32> >::value) ? (PyTypeObject*)&himat4x3IterType : (std::is_same, matIter<4, 4, int32> >::value) ? (PyTypeObject*)&himat4x4IterType : (std::is_same, matIter<2, 2, uint32> >::value) ? (PyTypeObject*)&humat2x2IterType : (std::is_same, matIter<2, 3, uint32> >::value) ? (PyTypeObject*)&humat2x3IterType : (std::is_same, matIter<2, 4, uint32> >::value) ? (PyTypeObject*)&humat2x4IterType : (std::is_same, matIter<3, 2, uint32> >::value) ? (PyTypeObject*)&humat3x2IterType : (std::is_same, matIter<3, 3, uint32> >::value) ? (PyTypeObject*)&humat3x3IterType : (std::is_same, matIter<3, 4, uint32> >::value) ? (PyTypeObject*)&humat3x4IterType : (std::is_same, matIter<4, 2, uint32> >::value) ? (PyTypeObject*)&humat4x2IterType : (std::is_same, matIter<4, 3, uint32> >::value) ? (PyTypeObject*)&humat4x3IterType : (std::is_same, matIter<4, 4, uint32> >::value) ? (PyTypeObject*)&humat4x4IterType : (PyTypeObject*)0; }Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/type_getters/mvec.h000066400000000000000000000022731511156275200270400ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" template static constexpr PyTypeObject* PyGLM_MVEC_TYPE() { return (std::is_same, mvec<2, float> >::value) ? (PyTypeObject*)&hfmvec2Type : (std::is_same, mvec<3, float> >::value) ? (PyTypeObject*)&hfmvec3Type : (std::is_same, mvec<4, float> >::value) ? (PyTypeObject*)&hfmvec4Type : (std::is_same, mvec<2, double> >::value) ? (PyTypeObject*)&hdmvec2Type : (std::is_same, mvec<3, double> >::value) ? (PyTypeObject*)&hdmvec3Type : (std::is_same, mvec<4, double> >::value) ? (PyTypeObject*)&hdmvec4Type : (std::is_same, mvec<2, int32> >::value) ? (PyTypeObject*)&himvec2Type : (std::is_same, mvec<3, int32> >::value) ? (PyTypeObject*)&himvec3Type : (std::is_same, mvec<4, int32> >::value) ? (PyTypeObject*)&himvec4Type : (std::is_same, mvec<2, uint32> >::value) ? (PyTypeObject*)&humvec2Type : (std::is_same, mvec<3, uint32> >::value) ? (PyTypeObject*)&humvec3Type : (std::is_same, mvec<4, uint32> >::value) ? (PyTypeObject*)&humvec4Type : (PyTypeObject*)0; }Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/type_getters/mvec_iter.h000066400000000000000000000024721511156275200300640ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" template static PyTypeObject* PyGLM_MVECITER_TYPE() { return (std::is_same, mvecIter<2, float> >::value) ? (PyTypeObject*)&hfmvec2IterType: (std::is_same, mvecIter<3, float> >::value) ? (PyTypeObject*)&hfmvec3IterType: (std::is_same, mvecIter<4, float> >::value) ? (PyTypeObject*)&hfmvec4IterType: (std::is_same, mvecIter<2, double> >::value) ? (PyTypeObject*)&hdmvec2IterType: (std::is_same, mvecIter<3, double> >::value) ? (PyTypeObject*)&hdmvec3IterType: (std::is_same, mvecIter<4, double> >::value) ? (PyTypeObject*)&hdmvec4IterType: (std::is_same, mvecIter<2, int32> >::value) ? (PyTypeObject*)&himvec2IterType: (std::is_same, mvecIter<3, int32> >::value) ? (PyTypeObject*)&himvec3IterType: (std::is_same, mvecIter<4, int32> >::value) ? (PyTypeObject*)&himvec4IterType: (std::is_same, mvecIter<2, uint32> >::value) ? (PyTypeObject*)&humvec2IterType: (std::is_same, mvecIter<3, uint32> >::value) ? (PyTypeObject*)&humvec3IterType: (std::is_same, mvecIter<4, uint32> >::value) ? (PyTypeObject*)&humvec4IterType: (PyTypeObject*)0; } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/type_getters/qua.h000066400000000000000000000005101511156275200266640ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" template static constexpr PyTypeObject* PyGLM_QUA_TYPE() { return (std::is_same, qua >::value) ? (PyTypeObject*)&hfquaType : (std::is_same, qua >::value) ? (PyTypeObject*)&hdquaType : (PyTypeObject*)0; }Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/type_getters/qua_iter.h000066400000000000000000000005321511156275200277130ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" template static PyTypeObject* PyGLM_QUAITER_TYPE() { return (std::is_same, quaIter >::value) ? (PyTypeObject*)&hfquaIterType : (std::is_same, quaIter >::value) ? (PyTypeObject*)&hdquaIterType : (PyTypeObject*)0; }Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/type_getters/type_checkers.h000066400000000000000000000164171511156275200307430ustar00rootroot00000000000000#pragma once #include "../compiler_setup.h" #define _SUB_PyGLM_GET_TYPE(o) ((o->ob_type->tp_dealloc == NULL) ? PyGLM_TYPE_UNKNOWN : (o->ob_type->tp_dealloc == (destructor)vec_dealloc) ? PyGLM_TYPE_VEC : (o->ob_type->tp_dealloc == (destructor)mat_dealloc) ? PyGLM_TYPE_MAT : (o->ob_type->tp_dealloc == (destructor)qua_dealloc) ? PyGLM_TYPE_QUA : (o->ob_type->tp_dealloc == (destructor)mvec_dealloc) ? PyGLM_TYPE_VEC : PyGLM_TYPE_UNKNOWN) #define PyGLM_GET_TYPE(o) _SUB_PyGLM_GET_TYPE(((PyObject*)o)) #define PyGLM_VEC_SHAPE_CHECK(o, L) (((shape_helper*)o)->shape == L) #define PyGLM_MAT_SHAPE_CHECK(o, C, R) (((shape_helper*)o)->shape == (C + (R << 3))) #if !(PyGLM_BUILD & PyGLM_NO_ITER_TYPECHECKING) bool PyGLM_Vec1i_Check(PyObject* o) { if (!PyObject_IterCheck(o)) { return false; } if (PyTuple_Check(o)) { if (Py_SIZE(o) == 1 && PyGLM_Number_Check(PyTuple_GET_ITEM(o, 0))) { return true; } return false; } if (PyObject_Length(o) != 1) { return false; } PyObject* iterator = PyObject_GetIter(o); PyObject* value0 = PyIter_Next(iterator); Py_DECREF(iterator); if (value0 == NULL || !PyGLM_Number_Check(value0)) { Py_XDECREF(value0); return false; } Py_DECREF(value0); return true; } bool PyGLM_Vec2i_Check(PyObject* o) { if (!PyObject_IterCheck(o)) { return false; } if (PyTuple_Check(o)) { if (Py_SIZE(o) == 2 && PyGLM_Number_Check(PyTuple_GET_ITEM(o, 0)) && PyGLM_Number_Check(PyTuple_GET_ITEM(o, 1))) { return true; } return false; } if (PyObject_Length(o) != 2) { return false; } PyObject* iterator = PyObject_GetIter(o); PyObject* value0 = PyIter_Next(iterator); PyObject* value1 = PyIter_Next(iterator); Py_DECREF(iterator); if (value0 == NULL || !PyGLM_Number_Check(value0) || value1 == NULL || !PyGLM_Number_Check(value1)) { Py_XDECREF(value0); Py_XDECREF(value1); return false; } Py_DECREF(value0); Py_DECREF(value1); return true; } bool PyGLM_Vec3i_Check(PyObject* o) { if (!PyObject_IterCheck(o)) { return false; } if (PyTuple_Check(o)) { if (Py_SIZE(o) == 3 && PyGLM_Number_Check(PyTuple_GET_ITEM(o, 0)) && PyGLM_Number_Check(PyTuple_GET_ITEM(o, 1)) && PyGLM_Number_Check(PyTuple_GET_ITEM(o, 2))) { return true; } return false; } if (PyObject_Length(o) != 3) { return false; } PyObject* iterator = PyObject_GetIter(o); PyObject* value0 = PyIter_Next(iterator); PyObject* value1 = PyIter_Next(iterator); PyObject* value2 = PyIter_Next(iterator); Py_DECREF(iterator); if (value0 == NULL || !PyGLM_Number_Check(value0) || value1 == NULL || !PyGLM_Number_Check(value1) || value2 == NULL || !PyGLM_Number_Check(value2)) { Py_XDECREF(value0); Py_XDECREF(value1); Py_XDECREF(value2); return false; } Py_DECREF(value0); Py_DECREF(value1); Py_DECREF(value2); return true; } bool PyGLM_Vec4i_Check(PyObject* o) { if (!PyObject_IterCheck(o)) { return false; } if (PyTuple_Check(o)) { if (Py_SIZE(o) == 4 && PyGLM_Number_Check(PyTuple_GET_ITEM(o, 0)) && PyGLM_Number_Check(PyTuple_GET_ITEM(o, 1)) && PyGLM_Number_Check(PyTuple_GET_ITEM(o, 2)) && PyGLM_Number_Check(PyTuple_GET_ITEM(o, 3))) { return true; } return false; } if (PyObject_Length(o) != 4) { return false; } PyObject* iterator = PyObject_GetIter(o); PyObject* value0 = PyIter_Next(iterator); PyObject* value1 = PyIter_Next(iterator); PyObject* value2 = PyIter_Next(iterator); PyObject* value3 = PyIter_Next(iterator); Py_DECREF(iterator); if (value0 == NULL || !PyGLM_Number_Check(value0) || value1 == NULL || !PyGLM_Number_Check(value1) || value2 == NULL || !PyGLM_Number_Check(value2) || value3 == NULL || !PyGLM_Number_Check(value3)) { Py_XDECREF(value0); Py_XDECREF(value1); Py_XDECREF(value2); Py_XDECREF(value3); return false; } Py_DECREF(value0); Py_DECREF(value1); Py_DECREF(value2); Py_DECREF(value3); return true; } #define PyGLM_Veci_Check(L, o) ((L == 1) ? PyGLM_Vec1i_Check(o) : (L == 2) ? PyGLM_Vec2i_Check(o) : (L == 3) ? PyGLM_Vec3i_Check(o) : PyGLM_Vec4i_Check(o)) template static bool get_view_format_equal(char* value) { char& v_char = value[0]; if (v_char == 'f') { return std::is_same::value; } if (v_char == 'd') { return std::is_same::value; } if (v_char == 'c') { return std::is_same::value; } if (v_char == 'b') { return std::is_same::value; } if (v_char == 'h') { return std::is_same::value; } if (v_char == 'H') { return std::is_same::value; } if (v_char == 'i') { return std::is_same::value; } if (v_char == 'I') { return std::is_same::value; } if (v_char == 'L') { return std::is_same::value; } if (v_char == 'K') { return std::is_same::value; } if (v_char == 'p') { return std::is_same::value; } return false; } template static bool PyGLM_Matb_Check(int C, int R, PyObject* o) { if (!PyObject_CheckBuffer(o)) { return false; } Py_buffer view; if (PyObject_GetBuffer(o, &view, PyBUF_RECORDS_RO | PyBUF_C_CONTIGUOUS) == -1 || (((view.ndim != 2 || view.shape[0] != static_cast(C) || view.shape[1] != static_cast(R) || !get_view_format_equal(view.format)) && (view.ndim != 1 || view.shape[0] != static_cast(C * R * sizeof(T)) || view.format[0] != 'B')))) { PyBuffer_Release(&view); return false; } PyBuffer_Release(&view); return true; } template static bool PyGLM_Vecb_Check(int L, PyObject* o) { if (!PyObject_CheckBuffer(o)) { return false; } Py_buffer view; if (PyObject_GetBuffer(o, &view, PyBUF_RECORDS_RO | PyBUF_C_CONTIGUOUS) == -1 || (view.ndim != 1 || ((view.shape[0] != static_cast(L) || !get_view_format_equal(view.format)) && (view.shape[0] != static_cast(L * sizeof(T)) || view.format[0] != 'B')))) { PyBuffer_Release(&view); return false; } PyBuffer_Release(&view); return true; } #define PyGLM_Vec_Check(L, T, o) (PyObject_TypeCheck(o, UNBRACKET (PyGLM_VEC_TYPE())) || Py_TYPE(o) == PyGLM_MVEC_TYPE() || ((PyGLM_GET_TYPE(o) == PyGLM_TYPE_UNKNOWN) && (PyGLM_Vecb_Check(L, (PyObject*)o)))) #define PyGLM_Vec_Check_IgnoreType(L, T, o) (PyObject_TypeCheck(o, UNBRACKET (PyGLM_VEC_TYPE())) || Py_TYPE(o) == PyGLM_MVEC_TYPE() || ((PyGLM_GET_TYPE(o) == PyGLM_TYPE_UNKNOWN || (PyGLM_GET_TYPE(o) == PyGLM_TYPE_VEC && PyGLM_VEC_SHAPE_CHECK(o, L))) && ((PyGLM_Vecb_Check(L, (PyObject*)o)) || (PyGLM_Veci_Check(L, o))))) #define PyGLM_Qua_Check(T, o) (PyObject_TypeCheck(o, UNBRACKET (PyGLM_QUA_TYPE())) || ((PyGLM_GET_TYPE(o) == PyGLM_TYPE_UNKNOWN || (PyGLM_GET_TYPE(o) == PyGLM_TYPE_QUA)) && PyGLM_Vecb_Check(4, (PyObject*)o))) #define PyGLM_Mat_Check(C, R, T, o) (PyObject_TypeCheck(o, UNBRACKET (PyGLM_MAT_TYPE())) || ((PyGLM_GET_TYPE(o) == PyGLM_TYPE_UNKNOWN || (PyGLM_GET_TYPE(o) == PyGLM_TYPE_MAT && PyGLM_MAT_SHAPE_CHECK(o, C, R))) && PyGLM_Matb_Check(C, R, (PyObject*)o))) #else #define PyGLM_Vec_Check(L, T, o) (PyObject_TypeCheck(o, UNBRACKET (PyGLM_VEC_TYPE())) || Py_TYPE(o) == PyGLM_MVEC_TYPE()) #define PyGLM_Vec_Check_IgnoreType PyGLM_Vec_Check #define PyGLM_Qua_Check(T, o) (PyObject_TypeCheck(o, UNBRACKET (PyGLM_QUA_TYPE()))) #define PyGLM_Mat_Check(C, R, T, o) PyObject_TypeCheck(o, UNBRACKET (PyGLM_MAT_TYPE())) #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/type_getters/vec.h000066400000000000000000000114551511156275200266650ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" #include "ctypes_datatypes.h" template static constexpr PyTypeObject* PyGLM_VEC_TYPE() { return (std::is_same, vec<1, float> >::value) ? (PyTypeObject*)&hfvec1Type : (std::is_same, vec<2, float> >::value) ? (PyTypeObject*)&hfvec2Type : (std::is_same, vec<3, float> >::value) ? (PyTypeObject*)&hfvec3Type : (std::is_same, vec<4, float> >::value) ? (PyTypeObject*)&hfvec4Type : (std::is_same, vec<1, double> >::value) ? (PyTypeObject*)&hdvec1Type : (std::is_same, vec<2, double> >::value) ? (PyTypeObject*)&hdvec2Type : (std::is_same, vec<3, double> >::value) ? (PyTypeObject*)&hdvec3Type : (std::is_same, vec<4, double> >::value) ? (PyTypeObject*)&hdvec4Type : (std::is_same, vec<1, int8> >::value) ? (PyTypeObject*)&hi8vec1Type : (std::is_same, vec<2, int8> >::value) ? (PyTypeObject*)&hi8vec2Type : (std::is_same, vec<3, int8> >::value) ? (PyTypeObject*)&hi8vec3Type : (std::is_same, vec<4, int8> >::value) ? (PyTypeObject*)&hi8vec4Type : (std::is_same, vec<1, int16> >::value) ? (PyTypeObject*)&hi16vec1Type : (std::is_same, vec<2, int16> >::value) ? (PyTypeObject*)&hi16vec2Type : (std::is_same, vec<3, int16> >::value) ? (PyTypeObject*)&hi16vec3Type : (std::is_same, vec<4, int16> >::value) ? (PyTypeObject*)&hi16vec4Type : (std::is_same, vec<1, int32> >::value) ? (PyTypeObject*)&hivec1Type : (std::is_same, vec<2, int32> >::value) ? (PyTypeObject*)&hivec2Type : (std::is_same, vec<3, int32> >::value) ? (PyTypeObject*)&hivec3Type : (std::is_same, vec<4, int32> >::value) ? (PyTypeObject*)&hivec4Type : (std::is_same, vec<1, int64> >::value) ? (PyTypeObject*)&hi64vec1Type : (std::is_same, vec<2, int64> >::value) ? (PyTypeObject*)&hi64vec2Type : (std::is_same, vec<3, int64> >::value) ? (PyTypeObject*)&hi64vec3Type : (std::is_same, vec<4, int64> >::value) ? (PyTypeObject*)&hi64vec4Type : (std::is_same, vec<1, uint8> >::value) ? (PyTypeObject*)&hu8vec1Type : (std::is_same, vec<2, uint8> >::value) ? (PyTypeObject*)&hu8vec2Type : (std::is_same, vec<3, uint8> >::value) ? (PyTypeObject*)&hu8vec3Type : (std::is_same, vec<4, uint8> >::value) ? (PyTypeObject*)&hu8vec4Type : (std::is_same, vec<1, uint16> >::value) ? (PyTypeObject*)&hu16vec1Type : (std::is_same, vec<2, uint16> >::value) ? (PyTypeObject*)&hu16vec2Type : (std::is_same, vec<3, uint16> >::value) ? (PyTypeObject*)&hu16vec3Type : (std::is_same, vec<4, uint16> >::value) ? (PyTypeObject*)&hu16vec4Type : (std::is_same, vec<1, uint32> >::value) ? (PyTypeObject*)&huvec1Type : (std::is_same, vec<2, uint32> >::value) ? (PyTypeObject*)&huvec2Type : (std::is_same, vec<3, uint32> >::value) ? (PyTypeObject*)&huvec3Type : (std::is_same, vec<4, uint32> >::value) ? (PyTypeObject*)&huvec4Type : (std::is_same, vec<1, uint64> >::value) ? (PyTypeObject*)&hu64vec1Type : (std::is_same, vec<2, uint64> >::value) ? (PyTypeObject*)&hu64vec2Type : (std::is_same, vec<3, uint64> >::value) ? (PyTypeObject*)&hu64vec3Type : (std::is_same, vec<4, uint64> >::value) ? (PyTypeObject*)&hu64vec4Type : (std::is_same, vec<1, bool> >::value) ? (PyTypeObject*)&hbvec1Type : (std::is_same, vec<2, bool> >::value) ? (PyTypeObject*)&hbvec2Type : (std::is_same, vec<3, bool> >::value) ? (PyTypeObject*)&hbvec3Type : (std::is_same, vec<4, bool> >::value) ? (PyTypeObject*)&hbvec4Type : (PyTypeObject*)0; } template static constexpr PyTypeObject* PyGLM_VEC_TYPE_T_ONLY(int L) { return (L == 1) ? PyGLM_VEC_TYPE<1, T>() : (L == 2) ? PyGLM_VEC_TYPE<2, T>() : (L == 3) ? PyGLM_VEC_TYPE<3, T>() : (L == 4) ? PyGLM_VEC_TYPE<4, T>() : NULL; } static PyTypeObject* PyGLM_PYOBJECT_VEC_QUAT_COMPONENT_TYPE(PyGLMTypeObject* vec) { switch (vec->format) { case PyGLM_FS_FLOAT: return PyGLM_CTYPES_TYPE(); case PyGLM_FS_DOUBLE: return PyGLM_CTYPES_TYPE(); case PyGLM_FS_INT64: return PyGLM_CTYPES_TYPE(); case PyGLM_FS_UINT64: return PyGLM_CTYPES_TYPE(); case PyGLM_FS_INT32: return PyGLM_CTYPES_TYPE(); case PyGLM_FS_UINT32: return PyGLM_CTYPES_TYPE(); case PyGLM_FS_INT16: return PyGLM_CTYPES_TYPE(); case PyGLM_FS_UINT16: return PyGLM_CTYPES_TYPE(); case PyGLM_FS_INT8: return PyGLM_CTYPES_TYPE(); case PyGLM_FS_UINT8: return PyGLM_CTYPES_TYPE(); case PyGLM_FS_BOOL: return PyGLM_CTYPES_TYPE(); } return NULL; } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/type_getters/vec_iter.h000066400000000000000000000104131511156275200277010ustar00rootroot00000000000000#pragma once #include "../../compiler_setup.h" #include "../../types/all.h" template static PyTypeObject* PyGLM_VECITER_TYPE() { return (std::is_same, vecIter<1, float> >::value) ? (PyTypeObject*)&hfvec1IterType : (std::is_same, vecIter<2, float> >::value) ? (PyTypeObject*)&hfvec2IterType : (std::is_same, vecIter<3, float> >::value) ? (PyTypeObject*)&hfvec3IterType : (std::is_same, vecIter<4, float> >::value) ? (PyTypeObject*)&hfvec4IterType : (std::is_same, vecIter<1, double> >::value) ? (PyTypeObject*)&hdvec1IterType : (std::is_same, vecIter<2, double> >::value) ? (PyTypeObject*)&hdvec2IterType : (std::is_same, vecIter<3, double> >::value) ? (PyTypeObject*)&hdvec3IterType : (std::is_same, vecIter<4, double> >::value) ? (PyTypeObject*)&hdvec4IterType : (std::is_same, vecIter<1, int8> >::value) ? (PyTypeObject*)&hi8vec1IterType : (std::is_same, vecIter<2, int8> >::value) ? (PyTypeObject*)&hi8vec2IterType : (std::is_same, vecIter<3, int8> >::value) ? (PyTypeObject*)&hi8vec3IterType : (std::is_same, vecIter<4, int8> >::value) ? (PyTypeObject*)&hi8vec4IterType : (std::is_same, vecIter<1, int16> >::value) ? (PyTypeObject*)&hi16vec1IterType : (std::is_same, vecIter<2, int16> >::value) ? (PyTypeObject*)&hi16vec2IterType : (std::is_same, vecIter<3, int16> >::value) ? (PyTypeObject*)&hi16vec3IterType : (std::is_same, vecIter<4, int16> >::value) ? (PyTypeObject*)&hi16vec4IterType : (std::is_same, vecIter<1, int32> >::value) ? (PyTypeObject*)&hivec1IterType : (std::is_same, vecIter<2, int32> >::value) ? (PyTypeObject*)&hivec2IterType : (std::is_same, vecIter<3, int32> >::value) ? (PyTypeObject*)&hivec3IterType : (std::is_same, vecIter<4, int32> >::value) ? (PyTypeObject*)&hivec4IterType : (std::is_same, vecIter<1, int64> >::value) ? (PyTypeObject*)&hi64vec1IterType : (std::is_same, vecIter<2, int64> >::value) ? (PyTypeObject*)&hi64vec2IterType : (std::is_same, vecIter<3, int64> >::value) ? (PyTypeObject*)&hi64vec3IterType : (std::is_same, vecIter<4, int64> >::value) ? (PyTypeObject*)&hi64vec4IterType : (std::is_same, vecIter<1, uint8> >::value) ? (PyTypeObject*)&hu8vec1IterType : (std::is_same, vecIter<2, uint8> >::value) ? (PyTypeObject*)&hu8vec2IterType : (std::is_same, vecIter<3, uint8> >::value) ? (PyTypeObject*)&hu8vec3IterType : (std::is_same, vecIter<4, uint8> >::value) ? (PyTypeObject*)&hu8vec4IterType : (std::is_same, vecIter<1, uint16> >::value) ? (PyTypeObject*)&hu16vec1IterType : (std::is_same, vecIter<2, uint16> >::value) ? (PyTypeObject*)&hu16vec2IterType : (std::is_same, vecIter<3, uint16> >::value) ? (PyTypeObject*)&hu16vec3IterType : (std::is_same, vecIter<4, uint16> >::value) ? (PyTypeObject*)&hu16vec4IterType : (std::is_same, vecIter<1, uint32> >::value) ? (PyTypeObject*)&huvec1IterType : (std::is_same, vecIter<2, uint32> >::value) ? (PyTypeObject*)&huvec2IterType : (std::is_same, vecIter<3, uint32> >::value) ? (PyTypeObject*)&huvec3IterType : (std::is_same, vecIter<4, uint32> >::value) ? (PyTypeObject*)&huvec4IterType : (std::is_same, vecIter<1, uint64> >::value) ? (PyTypeObject*)&hu64vec1IterType : (std::is_same, vecIter<2, uint64> >::value) ? (PyTypeObject*)&hu64vec2IterType : (std::is_same, vecIter<3, uint64> >::value) ? (PyTypeObject*)&hu64vec3IterType : (std::is_same, vecIter<4, uint64> >::value) ? (PyTypeObject*)&hu64vec4IterType : (std::is_same, vecIter<1, bool> >::value) ? (PyTypeObject*)&hbvec1IterType : (std::is_same, vecIter<2, bool> >::value) ? (PyTypeObject*)&hbvec2IterType : (std::is_same, vecIter<3, bool> >::value) ? (PyTypeObject*)&hbvec3IterType : (std::is_same, vecIter<4, bool> >::value) ? (PyTypeObject*)&hbvec4IterType : (PyTypeObject*)0; }Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/unpackers.h000066400000000000000000000041441511156275200253620ustar00rootroot00000000000000#pragma once #include "../compiler_setup.h" #include "type_getters/all.h" #include "helper_macros.h" #include "type_checkers.h" template static bool unpack_vec(PyObject* value, glm::vec& out) { if (PyObject_TypeCheck(value, (UNBRACKET(PyGLM_VEC_TYPE())))) { out = ((vec*)value)->super_type; return true; } if (Py_TYPE(value) == PyGLM_MVEC_TYPE()) { out = *((mvec*)value)->super_type; return true; } #if !(PyGLM_BUILD & PyGLM_NO_ITER_TYPECHECKING) PyGLM_PTI_Init3(value, (get_vec_PTI_info())); if (PyGLM_Vec_PTI_Check3(L, T, value)) { out = PyGLM_Vec_PTI_Get3(L, T, value); return true; } #endif return false; } template static glm::vec unpack_vec(PyObject* value) { glm::vec out; unpack_vec(value, out); return out; } template static bool unpack_mat(PyObject* value, glm::mat& out) { if (PyObject_TypeCheck(value, (UNBRACKET(PyGLM_MAT_TYPE())))) { out = ((mat*)value)->super_type; return true; } #if !(PyGLM_BUILD & PyGLM_NO_ITER_TYPECHECKING) PyGLM_PTI_Init3(value, (get_mat_PTI_info())); if (PyGLM_Mat_PTI_Check3(C, R, T, value)) { out = PyGLM_Mat_PTI_Get3(C, R, T, value); return true; } #endif return false; } #define unpack_matN(C, R, T, o, N) (sourceType ## N == NORMAL) ? (((UNBRACKET(mat*)) o)->super_type) : PTI ## N.getMat() template static glm::mat unpack_mat(PyObject* value) { glm::mat out; unpack_mat(value, out); return out; } template static bool unpack_qua(PyObject* value, glm::qua& out) { if (PyObject_TypeCheck(value, (UNBRACKET(PyGLM_QUA_TYPE())))) { out = ((qua*)value)->super_type; return true; } #if !(PyGLM_BUILD & PyGLM_NO_ITER_TYPECHECKING) PyGLM_PTI_Init3(value, (get_qua_PTI_info())); if (PyGLM_Qua_PTI_Check3(T, value)) { out = PyGLM_Qua_PTI_Get3(T, value); return true; } #endif return false; } template static glm::qua unpack_qua(PyObject* value) { glm::qua out; unpack_qua(value, out); return out; }Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/version_info.h000066400000000000000000000002111511156275200260560ustar00rootroot00000000000000#pragma once #include "../compiler_setup.h" static PyObject* PyGLM_VERSION_STRING = NULL; static PyObject* PyGLM_LICENSE_STRING = NULL;Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/internal_functions/warnings.h000066400000000000000000000020711511156275200252140ustar00rootroot00000000000000#pragma once #include "error_functions.h" #define PyGLM_FREXP_WARNING 1 // This warning is deprecated #define PyGLM_FLOAT_ZERO_DIVISION_WARNING 2 #define PyGLM_NO_REFERENCE_POSSIBLE_WARNING 3 #define PyGLM_OPERATOR_DEPRECATION_WARNING 4 #define PyGLM_OVERFLOW_WARNING 5 #define PyGLM_ARGUMENT_DEPRECATION_WARNING 6 static unsigned long long PyGLM_SHOW_WARNINGS = 18446744073709551615ull; PyDoc_STRVAR(silence_docstr, "silence(ID: int) -> None\n" " Silence a PyGLM warning (or all using 0)." ); static PyObject* silence(PyObject*, PyObject* arg) { if (PyLong_Check(arg)) { unsigned long long warning_id = static_cast(PyLong_AS_LONG(arg)); if (warning_id < 0 || warning_id > 6) { PyErr_SetString(PyExc_ValueError, "the specified warning does not exist."); return NULL; } if (warning_id == 0) { PyGLM_SHOW_WARNINGS = 0; } else { PyGLM_SHOW_WARNINGS &= (PyGLM_SHOW_WARNINGS ^ (1ull << (warning_id - 1))); } Py_RETURN_NONE; } PyGLM_TYPEERROR_O("silence() requires an integer as it's argument, not ", arg); return NULL; }Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/type_methods/000077500000000000000000000000001511156275200220135ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/type_methods/all.h000066400000000000000000000013121511156275200227310ustar00rootroot00000000000000#pragma once #include "vec.h" #include "mvec.h" #include "mat.h" #include "qua.h" #include "glmArray.h" static PyObject* generic_to_bytes(PyObject* self, PyObject*) { PyGLMTypeObject* pto = (PyGLMTypeObject*)self->ob_type; return PyBytes_FromStringAndSize(pto->getDataOf(self), pto->itemSize); } static PyObject* generic_copy(PyObject* self, PyObject*) { return PyObject_Call((PyObject*)(self->ob_type), PyTuple_Pack(1, self), NULL); } static PyObject* generic_deepcopy(PyObject* self, PyObject* memo) { PyObject* copy = generic_copy(self, NULL); PyDict_SetItem(memo, PyLong_FromVoidPtr((void*)self), copy); return copy; } static PyObject* generic_id(PyObject* self) { return PyGLM_INCREF(self); } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/type_methods/glmArray.h000066400000000000000000011525771511156275200237640ustar00rootroot00000000000000#pragma once #include "../compiler_setup.h" #include "../internal_functions/all.h" #include "../types/glmArray/glmArray.h" #include "../internal_functions/type_checkers.h" static PyObject* glmArray_getPtr(glmArray* self, void*) { return PyGLM_CtypesVoidP_FromVoidP(self->data); } static PyObject* glmArray_to_bytes(glmArray* self, PyObject*) { return PyBytes_FromStringAndSize((char*)self->data, self->nBytes); } static PyObject* glmArray_from_bytes(PyObject*, PyObject* args) { PyObject* bytesObj, *typeObj = NULL; if (!PyArg_UnpackTuple(args, "from_bytes", 1, 2, &bytesObj, &typeObj)) return NULL; if (typeObj == NULL) { typeObj = ctypes_uint8; } if (PyBytes_Check(bytesObj) && PyType_Check(typeObj)) { if (PyGLM_Is_PyGLM_Type(typeObj)) { PyGLMTypeObject* pto = (PyGLMTypeObject*)typeObj; const Py_ssize_t nBytes = PyBytes_GET_SIZE(bytesObj); PyGLM_ASSERT((nBytes > 0 && nBytes % pto->itemSize == 0), "Invalid bytes string length"); glmArray* out = (glmArray*)glmArrayType.tp_alloc(&glmArrayType, 0); if (out == NULL) { PyErr_SetString(PyExc_MemoryError, "Out of memory"); return NULL; } out->data = reinterpret_cast(PyBytes_AS_STRING(bytesObj)); out->dtSize = pto->dtSize; out->format = pto->format; out->glmType = pto->glmType; out->itemSize = pto->itemSize; out->nBytes = PyBytes_GET_SIZE(bytesObj); out->itemCount = out->nBytes / out->itemSize; out->readonly = 0; out->reference = PyGLM_INCREF(bytesObj); out->subtype = pto->subtype; out->setShape(pto->C, pto->R); return (PyObject*)out; } if (PyGLM_Ctypes_CheckType(typeObj)) { glmArray* out = (glmArray*)glmArrayType.tp_alloc(&glmArrayType, 0); if (out == NULL) { PyErr_SetString(PyExc_MemoryError, "Out of memory"); return NULL; } out->data = reinterpret_cast(PyBytes_AS_STRING(bytesObj)); out->reference = PyGLM_INCREF(bytesObj); out->subtype = (PyTypeObject*)typeObj; if (typeObj == ctypes_double) { out->dtSize = sizeof(double); out->format = PyGLM_FS_DOUBLE; } else if (typeObj == ctypes_float) { out->dtSize = sizeof(float); out->format = PyGLM_FS_FLOAT; } else if (typeObj == ctypes_int64) { out->dtSize = sizeof(int64); out->format = PyGLM_FS_INT64; } else if (typeObj == ctypes_int32) { out->dtSize = sizeof(int32); out->format = PyGLM_FS_INT32; } else if (typeObj == ctypes_int16) { out->dtSize = sizeof(int16); out->format = PyGLM_FS_INT16; } else if (typeObj == ctypes_int8) { out->dtSize = sizeof(int8); out->format = PyGLM_FS_INT8; } else if (typeObj == ctypes_uint64) { out->dtSize = sizeof(uint64); out->format = PyGLM_FS_UINT64; } else if (typeObj == ctypes_uint32) { out->dtSize = sizeof(uint32); out->format = PyGLM_FS_UINT32; } else if (typeObj == ctypes_uint16) { out->dtSize = sizeof(uint16); out->format = PyGLM_FS_UINT16; } else if (typeObj == ctypes_uint8) { out->dtSize = sizeof(uint8); out->format = PyGLM_FS_UINT8; } else if (typeObj == ctypes_bool) { out->dtSize = sizeof(bool); out->format = PyGLM_FS_BOOL; } else { Py_DECREF(out); PyGLM_TYPEERROR_O("from_bytes() expects a GLM or ctypes number type, not ", typeObj); return NULL; } out->itemSize = out->dtSize; out->glmType = PyGLM_TYPE_CTYPES; out->nBytes = PyBytes_GET_SIZE(bytesObj); out->itemCount = out->nBytes / out->itemSize; out->readonly = 0; out->setShape(0); if ((out->nBytes == 0 || out->nBytes % out->itemSize != 0)) { Py_DECREF(out); PyErr_SetString(PyExc_AssertionError, "Invalid bytes string length"); return NULL; } return (PyObject*)out; } } PyGLM_TYPEERROR_2O("from_bytes() expects a bytes string and a GLM or ctypes type, not ", bytesObj, typeObj); return NULL; } static PyObject* glmArray_reinterpret_cast(glmArray* self, PyObject* arg) { if (PyType_Check(arg)) { if (PyGLM_Is_PyGLM_Type(arg)) { PyGLMTypeObject* pto = (PyGLMTypeObject*)arg; PyGLM_ASSERT((self->nBytes % pto->itemSize == 0), "Invalid bytes string length"); glmArray* out = (glmArray*)glmArrayType.tp_alloc(&glmArrayType, 0); if (out == NULL) { PyErr_SetString(PyExc_MemoryError, "Out of memory"); return NULL; } out->data = self->data; out->dtSize = pto->dtSize; out->format = pto->format; out->glmType = pto->glmType; out->itemSize = pto->itemSize; out->nBytes = self->nBytes; out->itemCount = out->nBytes / out->itemSize; out->readonly = 0; out->reference = PyGLM_INCREF(((PyObject*)self)); out->subtype = pto->subtype; out->setShape(pto->C, pto->R); return (PyObject*)out; } if (PyGLM_Ctypes_CheckType(arg)) { glmArray* out = (glmArray*)glmArrayType.tp_alloc(&glmArrayType, 0); if (out == NULL) { PyErr_SetString(PyExc_MemoryError, "Out of memory"); return NULL; } out->data = self->data; out->reference = PyGLM_INCREF(((PyObject*)self)); out->subtype = (PyTypeObject*)arg; if (arg == ctypes_double) { out->dtSize = sizeof(double); out->format = PyGLM_FS_DOUBLE; } else if (arg == ctypes_float) { out->dtSize = sizeof(float); out->format = PyGLM_FS_FLOAT; } else if (arg == ctypes_int64) { out->dtSize = sizeof(int64); out->format = PyGLM_FS_INT64; } else if (arg == ctypes_int32) { out->dtSize = sizeof(int32); out->format = PyGLM_FS_INT32; } else if (arg == ctypes_int16) { out->dtSize = sizeof(int16); out->format = PyGLM_FS_INT16; } else if (arg == ctypes_int8) { out->dtSize = sizeof(int8); out->format = PyGLM_FS_INT8; } else if (arg == ctypes_uint64) { out->dtSize = sizeof(uint64); out->format = PyGLM_FS_UINT64; } else if (arg == ctypes_uint32) { out->dtSize = sizeof(uint32); out->format = PyGLM_FS_UINT32; } else if (arg == ctypes_uint16) { out->dtSize = sizeof(uint16); out->format = PyGLM_FS_UINT16; } else if (arg == ctypes_uint8) { out->dtSize = sizeof(uint8); out->format = PyGLM_FS_UINT8; } else if (arg == ctypes_bool) { out->dtSize = sizeof(bool); out->format = PyGLM_FS_BOOL; } else { Py_DECREF(out); PyGLM_TYPEERROR_O("reinterpret_cast() expects a GLM or ctypes number type, not ", arg); return NULL; } out->itemSize = out->dtSize; out->glmType = PyGLM_TYPE_CTYPES; out->nBytes = self->nBytes; out->itemCount = out->nBytes / out->itemSize; out->readonly = 0; out->setShape(0); if ((out->nBytes == 0 || out->nBytes % out->itemSize != 0)) { Py_DECREF(out); PyErr_SetString(PyExc_AssertionError, "Invalid bytes string length"); return NULL; } return (PyObject*)out; } } PyGLM_TYPEERROR_O("reinterpret_cast() expects a GLM or ctypes type, not ", arg); return NULL; } static PyObject* glmArray_getDtype(glmArray* self, void*) { switch (self->format) { case 'f': return PyUnicode_FromString("float32"); case 'd': return PyUnicode_FromString("float64"); case 'i': return PyUnicode_FromString("int32"); case 'I': return PyUnicode_FromString("uint32"); case 'b': return PyUnicode_FromString("int8"); case 'B': return PyUnicode_FromString("uint8"); case 'h': return PyUnicode_FromString("int16"); case 'H': return PyUnicode_FromString("uint16"); case 'q': return PyUnicode_FromString("int64"); case 'Q': return PyUnicode_FromString("uint64"); case '?': return PyUnicode_FromString("bool"); default: PyGLM_ASSERT(0, "Invalid format specifier. This should not have happened."); } } static PyObject* glmArray_getCtype(glmArray* self, void*) { switch (self->format) { case 'f': Py_INCREF(ctypes_float); return ctypes_float; case 'd': Py_INCREF(ctypes_double); return ctypes_double; case 'i': Py_INCREF(ctypes_int32); return ctypes_int32; case 'I': Py_INCREF(ctypes_uint32); return ctypes_uint32; case 'b': Py_INCREF(ctypes_int8); return ctypes_int8; case 'B': Py_INCREF(ctypes_uint8); return ctypes_uint8; case 'h': Py_INCREF(ctypes_int16); return ctypes_int16; case 'H': Py_INCREF(ctypes_uint16); return ctypes_uint16; case 'q': Py_INCREF(ctypes_int64); return ctypes_int64; case 'Q': Py_INCREF(ctypes_uint64); return ctypes_uint64; case '?': Py_INCREF(ctypes_bool); return ctypes_bool; default: PyGLM_ASSERT(0, "Invalid format specifier. This should not have happened."); } } #define GLM_ARRAY_SET_IF_IS_MAT(T) switch (self->shape[0]) {\ case 2:\ switch (self->shape[1]) {\ case 2:\ if (!PyObject_TypeCheck(value, (PyGLM_MAT_TYPE<2, 2, T>()))) {\ PyGLM_TYPEERROR_O("invalid assignment type ", value);\ return -1;\ }\ *(((glm::mat<2, 2, T>*)self->data) + index) = ((mat<2, 2, T>*)value)->super_type;\ return 0;\ case 3:\ if (!PyObject_TypeCheck(value, (PyGLM_MAT_TYPE<2, 3, T>()))) {\ PyGLM_TYPEERROR_O("invalid assignment type ", value);\ return -1;\ }\ *(((glm::mat<2, 3, T>*)self->data) + index) = ((mat<2, 3, T>*)value)->super_type;\ return 0;\ case 4:\ if (!PyObject_TypeCheck(value, (PyGLM_MAT_TYPE<2, 4, T>()))) {\ PyGLM_TYPEERROR_O("invalid assignment type ", value);\ return -1;\ }\ *(((glm::mat<2, 4, T>*)self->data) + index) = ((mat<2, 4, T>*)value)->super_type;\ return 0;\ default:\ PyErr_SetString(PyExc_AssertionError, "Invalid shape occured. This should not have happened.");\ return -1;\ }\ case 3:\ switch (self->shape[1]) {\ case 2:\ if (!PyObject_TypeCheck(value, (PyGLM_MAT_TYPE<3, 2, T>()))) {\ PyGLM_TYPEERROR_O("invalid assignment type ", value);\ return -1;\ }\ *(((glm::mat<3, 2, T>*)self->data) + index) = ((mat<3, 2, T>*)value)->super_type;\ return 0;\ case 3:\ if (!PyObject_TypeCheck(value, (PyGLM_MAT_TYPE<3, 3, T>()))) {\ PyGLM_TYPEERROR_O("invalid assignment type ", value);\ return -1;\ }\ *(((glm::mat<3, 3, T>*)self->data) + index) = ((mat<3, 3, T>*)value)->super_type;\ return 0;\ case 4:\ if (!PyObject_TypeCheck(value, (PyGLM_MAT_TYPE<3, 4, T>()))) {\ PyGLM_TYPEERROR_O("invalid assignment type ", value);\ return -1;\ }\ *(((glm::mat<3, 4, T>*)self->data) + index) = ((mat<3, 4, T>*)value)->super_type;\ return 0;\ default:\ PyErr_SetString(PyExc_AssertionError, "Invalid shape occured. This should not have happened.");\ return -1;\ }\ case 4:\ switch (self->shape[1]) {\ case 2:\ if (!PyObject_TypeCheck(value, (PyGLM_MAT_TYPE<4, 2, T>()))) {\ PyGLM_TYPEERROR_O("invalid assignment type ", value);\ return -1;\ }\ *(((glm::mat<4, 2, T>*)self->data) + index) = ((mat<4, 2, T>*)value)->super_type;\ return 0;\ case 3:\ if (!PyObject_TypeCheck(value, (PyGLM_MAT_TYPE<4, 3, T>()))) {\ PyGLM_TYPEERROR_O("invalid assignment type ", value);\ return -1;\ }\ *(((glm::mat<4, 3, T>*)self->data) + index) = ((mat<4, 3, T>*)value)->super_type;\ return 0;\ case 4:\ if (!PyObject_TypeCheck(value, (PyGLM_MAT_TYPE<4, 4, T>()))) {\ PyGLM_TYPEERROR_O("invalid assignment type ", value);\ return -1;\ }\ *(((glm::mat<4, 4, T>*)self->data) + index) = ((mat<4, 4, T>*)value)->super_type;\ return 0;\ default:\ PyErr_SetString(PyExc_AssertionError, "Invalid shape occured. This should not have happened.");\ return -1;\ }\ default:\ PyErr_SetString(PyExc_AssertionError, "Invalid shape occured. This should not have happened.");\ return -1;\ } #define GLM_ARRAY_SET_IF_IS_VEC(T) switch (self->shape[0]) {\ case 1:\ if (PyObject_TypeCheck(value, (PyGLM_VEC_TYPE<1, T>()))) {\ *(((glm::vec<1, T>*)self->data) + index) = ((vec<1, T>*)value)->super_type;\ }\ else if (PyObject_TypeCheck(value, (PyGLM_MVEC_TYPE<1, T>()))) {\ *(((glm::vec<1, T>*)self->data) + index) = *((mvec<1, T>*)value)->super_type;\ }\ else {\ PyGLM_TYPEERROR_O("invalid assignment type ", value);\ return -1;\ }\ return 0;\ case 2:\ if (PyObject_TypeCheck(value, (PyGLM_VEC_TYPE<2, T>()))) {\ *(((glm::vec<2, T>*)self->data) + index) = ((vec<2, T>*)value)->super_type;\ }\ else if (PyObject_TypeCheck(value, (PyGLM_MVEC_TYPE<2, T>()))) {\ *(((glm::vec<2, T>*)self->data) + index) = *((mvec<2, T>*)value)->super_type;\ }\ else {\ PyGLM_TYPEERROR_O("invalid assignment type ", value);\ return -1;\ }\ return 0;\ case 3:\ if (PyObject_TypeCheck(value, (PyGLM_VEC_TYPE<3, T>()))) {\ *(((glm::vec<3, T>*)self->data) + index) = ((vec<3, T>*)value)->super_type;\ }\ else if (PyObject_TypeCheck(value, (PyGLM_MVEC_TYPE<3, T>()))) {\ *(((glm::vec<3, T>*)self->data) + index) = *((mvec<3, T>*)value)->super_type;\ }\ else {\ PyGLM_TYPEERROR_O("invalid assignment type ", value);\ return -1;\ }\ return 0;\ case 4:\ if (PyObject_TypeCheck(value, (PyGLM_VEC_TYPE<4, T>()))) {\ *(((glm::vec<4, T>*)self->data) + index) = ((vec<4, T>*)value)->super_type;\ }\ else if (PyObject_TypeCheck(value, (PyGLM_MVEC_TYPE<4, T>()))) {\ *(((glm::vec<4, T>*)self->data) + index) = *((mvec<4, T>*)value)->super_type;\ }\ else {\ PyGLM_TYPEERROR_O("invalid assignment type ", value);\ return -1;\ }\ return 0;\ default:\ PyErr_SetString(PyExc_AssertionError, "Invalid shape occured. This should not have happened.");\ return -1;\ } #define GLM_ARRAY_SET_IF_IS_QUA(T) if (!PyObject_TypeCheck(value, (PyGLM_QUA_TYPE()))) {\ PyGLM_TYPEERROR_O("invalid assignment type ", value);\ return -1; \ }\ *(((glm::qua*)self->data) + index) = ((qua*)value)->super_type;\ return 0; #define GLM_ARRAY_SET_IF_IS_CTYPES(T)\ if (PyObject_TypeCheck(value, (PyGLM_CTYPES_TYPE()))) {\ *(((T*)self->data) + index) = *reinterpret_cast(((ctypes_helper*)value)->b_ptr);\ return 0;\ }\ if (PyGLM_Number_Check(value)) {\ *(((T*)self->data) + index) = PyGLM_Number_FromPyObject(value);\ return 0;\ }\ PyGLM_TYPEERROR_O("invalid assignment type ", value); \ return -1; static int glmArray_set(glmArray* self, Py_ssize_t index, PyObject* value) { if (index >= self->itemCount || index < -self->itemCount) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } if (index < 0) { return glmArray_set(self, self->itemCount + index, value); } if (value == NULL) { void* tempDataCopy = PyMem_Malloc(self->nBytes); if (tempDataCopy == NULL) { PyErr_SetString(PyExc_MemoryError, "out of memory"); return -1; } memcpy(tempDataCopy, self->data, self->nBytes); Py_ssize_t outItemCount = (self->itemCount - 1); self->data = PyMem_Realloc(self->data, outItemCount * self->itemSize); memcpy(self->data, tempDataCopy, index * self->itemSize); memcpy(((char*)self->data) + index * self->itemSize, ((char*)tempDataCopy) + (index + 1) * self->itemSize, (self->itemCount - index - 1) * self->itemSize); self->itemCount = outItemCount; self->nBytes = outItemCount * self->itemSize; return 0; } if (self->glmType == PyGLM_TYPE_VEC) { switch (self->format) { case 'f': GLM_ARRAY_SET_IF_IS_VEC(float); case 'd': GLM_ARRAY_SET_IF_IS_VEC(double); case 'i': GLM_ARRAY_SET_IF_IS_VEC(int32); case 'I': GLM_ARRAY_SET_IF_IS_VEC(uint32); case 'b': GLM_ARRAY_SET_IF_IS_VEC(int8); case 'B': GLM_ARRAY_SET_IF_IS_VEC(uint8); case 'h': GLM_ARRAY_SET_IF_IS_VEC(int16); case 'H': GLM_ARRAY_SET_IF_IS_VEC(uint16); case 'q': GLM_ARRAY_SET_IF_IS_VEC(int64); case 'Q': GLM_ARRAY_SET_IF_IS_VEC(uint64); case '?': GLM_ARRAY_SET_IF_IS_VEC(bool); default: PyErr_SetString(PyExc_AssertionError, "Invalid format specifier. This should not have happened."); return -1; } } if (self->glmType == PyGLM_TYPE_MAT) { switch (self->format) { case 'f': GLM_ARRAY_SET_IF_IS_MAT(float); case 'd': GLM_ARRAY_SET_IF_IS_MAT(double); case 'i': GLM_ARRAY_SET_IF_IS_MAT(int32); case 'I': GLM_ARRAY_SET_IF_IS_MAT(uint32); default: PyErr_SetString(PyExc_AssertionError, "Invalid format specifier. This should not have happened."); return -1; } } if (self->glmType == PyGLM_TYPE_QUA) { switch (self->format) { case 'f': GLM_ARRAY_SET_IF_IS_QUA(float); case 'd': GLM_ARRAY_SET_IF_IS_QUA(double); default: PyErr_SetString(PyExc_AssertionError, "Invalid format specifier. This should not have happened."); return -1; } } if (self->glmType == PyGLM_TYPE_CTYPES) { switch (self->format) { case 'f': GLM_ARRAY_SET_IF_IS_CTYPES(float); case 'd': GLM_ARRAY_SET_IF_IS_CTYPES(double); case 'i': GLM_ARRAY_SET_IF_IS_CTYPES(int32); case 'I': GLM_ARRAY_SET_IF_IS_CTYPES(uint32); case 'b': GLM_ARRAY_SET_IF_IS_CTYPES(int8); case 'B': GLM_ARRAY_SET_IF_IS_CTYPES(uint8); case 'h': GLM_ARRAY_SET_IF_IS_CTYPES(int16); case 'H': GLM_ARRAY_SET_IF_IS_CTYPES(uint16); case 'q': GLM_ARRAY_SET_IF_IS_CTYPES(int64); case 'Q': GLM_ARRAY_SET_IF_IS_CTYPES(uint64); case '?': GLM_ARRAY_SET_IF_IS_CTYPES(bool); default: PyErr_SetString(PyExc_AssertionError, "Invalid format specifier. This should not have happened."); return -1; } } return -1; } #define GLM_ARRAY_GET_IF_IS_MAT(T) switch (self->shape[0]) {\ case 2:\ switch (self->shape[1]) {\ case 2:\ return pack(*(((glm::mat<2, 2, T>*)self->data) + index));\ case 3:\ return pack(*(((glm::mat<2, 3, T>*)self->data) + index));\ case 4:\ return pack(*(((glm::mat<2, 4, T>*)self->data) + index));\ default:\ PyGLM_ASSERT(0, "Invalid shape occured. This should not have happened.");\ }\ case 3:\ switch (self->shape[1]) {\ case 2:\ return pack(*(((glm::mat<3, 2, T>*)self->data) + index));\ case 3:\ return pack(*(((glm::mat<3, 3, T>*)self->data) + index));\ case 4:\ return pack(*(((glm::mat<3, 4, T>*)self->data) + index));\ default:\ PyGLM_ASSERT(0, "Invalid shape occured. This should not have happened.");\ }\ case 4:\ switch (self->shape[1]) {\ case 2:\ return pack(*(((glm::mat<4, 2, T>*)self->data) + index));\ case 3:\ return pack(*(((glm::mat<4, 3, T>*)self->data) + index));\ case 4:\ return pack(*(((glm::mat<4, 4, T>*)self->data) + index));\ default:\ PyGLM_ASSERT(0, "Invalid shape occured. This should not have happened.");\ }\ default:\ PyGLM_ASSERT(0, "Invalid shape occured. This should not have happened.");\ } #define GLM_ARRAY_GET_IF_IS_VEC(T) switch (self->shape[0]) {\ case 1:\ return pack(*(((glm::vec<1, T>*)self->data) + index));\ case 2:\ return pack(*(((glm::vec<2, T>*)self->data) + index));\ case 3:\ return pack(*(((glm::vec<3, T>*)self->data) + index));\ case 4:\ return pack(*(((glm::vec<4, T>*)self->data) + index));\ default:\ PyGLM_ASSERT(0, "Invalid shape occured. This should not have happened.");\ } #define GLM_ARRAY_GET_IF_IS_CTYPES(T) \ return PyGLM_PyObject_FromNumber(*(((T*)self->data) + index)); #define GLM_ARRAY_GET_IF_IS_QUA(T) return pack(*(((glm::qua*)self->data) + index)); static PyObject* glmArray_get(glmArray* self, Py_ssize_t index) { if (index >= self->itemCount || index < -self->itemCount) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } if (index < 0) { return glmArray_get(self, self->itemCount + index); } if (self->glmType == PyGLM_TYPE_VEC) { switch (self->format) { case 'f': GLM_ARRAY_GET_IF_IS_VEC(float); case 'd': GLM_ARRAY_GET_IF_IS_VEC(double); case 'i': GLM_ARRAY_GET_IF_IS_VEC(int32); case 'I': GLM_ARRAY_GET_IF_IS_VEC(uint32); case 'b': GLM_ARRAY_GET_IF_IS_VEC(int8); case 'B': GLM_ARRAY_GET_IF_IS_VEC(uint8); case 'h': GLM_ARRAY_GET_IF_IS_VEC(int16); case 'H': GLM_ARRAY_GET_IF_IS_VEC(uint16); case 'q': GLM_ARRAY_GET_IF_IS_VEC(int64); case 'Q': GLM_ARRAY_GET_IF_IS_VEC(uint64); case '?': GLM_ARRAY_GET_IF_IS_VEC(bool); default: PyGLM_ASSERT(0, "Invalid format specifier. This should not have happened."); } } if (self->glmType == PyGLM_TYPE_MAT) { switch (self->format) { case 'f': GLM_ARRAY_GET_IF_IS_MAT(float); case 'd': GLM_ARRAY_GET_IF_IS_MAT(double); case 'i': GLM_ARRAY_GET_IF_IS_MAT(int32); case 'I': GLM_ARRAY_GET_IF_IS_MAT(uint32); default: PyGLM_ASSERT(0, "Invalid format specifier. This should not have happened."); } } if (self->glmType == PyGLM_TYPE_QUA) { switch (self->format) { case 'f': GLM_ARRAY_GET_IF_IS_QUA(float); case 'd': GLM_ARRAY_GET_IF_IS_QUA(double); default: PyGLM_ASSERT(0, "Invalid format specifier. This should not have happened."); } } if (self->glmType == PyGLM_TYPE_CTYPES) { switch (self->format) { case 'f': GLM_ARRAY_GET_IF_IS_CTYPES(float); case 'd': GLM_ARRAY_GET_IF_IS_CTYPES(double); case 'i': GLM_ARRAY_GET_IF_IS_CTYPES(int32); case 'I': GLM_ARRAY_GET_IF_IS_CTYPES(uint32); case 'b': GLM_ARRAY_GET_IF_IS_CTYPES(int8); case 'B': GLM_ARRAY_GET_IF_IS_CTYPES(uint8); case 'h': GLM_ARRAY_GET_IF_IS_CTYPES(int16); case 'H': GLM_ARRAY_GET_IF_IS_CTYPES(uint16); case 'q': GLM_ARRAY_GET_IF_IS_CTYPES(int64); case 'Q': GLM_ARRAY_GET_IF_IS_CTYPES(uint64); case '?': GLM_ARRAY_GET_IF_IS_CTYPES(bool); default: PyGLM_ASSERT(0, "Invalid format specifier. This should not have happened."); } } return NULL; } static int glmArray_getbuffer(glmArray* self, Py_buffer* view, int flags) { if (view == NULL) { PyErr_SetString(PyExc_ValueError, "NULL view in getbuffer"); return -1; } view->obj = (PyObject*)self; view->buf = self->data; view->len = self->nBytes; view->readonly = 0; view->itemsize = self->dtSize; if (flags & PyBUF_FORMAT) { view->format = (char*)PyMem_Malloc(sizeof(char)*2); view->format[0] = self->format; view->format[1] = '\x00'; } else { view->format = NULL; } if (self->glmType == PyGLM_TYPE_MAT) { const int C = self->getShape(0); const int R = self->getShape(1); view->ndim = 3; if (flags == 0 || (flags & (PyBUF_ANY_CONTIGUOUS | PyBUF_F_CONTIGUOUS | PyBUF_C_CONTIGUOUS)) == PyBUF_STRIDES) { // strided, non contiguous buffer view->shape = (Py_ssize_t*)PyMem_Malloc(3 * sizeof(Py_ssize_t)); if (view->shape != NULL) { view->shape[0] = self->itemCount; view->shape[1] = R; view->shape[2] = C; } view->strides = (Py_ssize_t*)PyMem_Malloc(3 * sizeof(Py_ssize_t)); if (view->strides != NULL) { view->strides[0] = self->dtSize * C * R; view->strides[1] = self->dtSize; view->strides[2] = R * self->dtSize; } } else if ((flags & PyBUF_WRITABLE) == 0 && ((flags & PyBUF_STRIDES) == PyBUF_ND || (flags & PyBUF_ANY_CONTIGUOUS) == PyBUF_ANY_CONTIGUOUS || (flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS)) { view->shape = (Py_ssize_t*)PyMem_Malloc(3 * sizeof(Py_ssize_t)); if (view->shape != NULL) { view->shape[0] = self->itemCount; view->shape[1] = R; view->shape[2] = C; } view->strides = (Py_ssize_t*)PyMem_Malloc(3 * sizeof(Py_ssize_t)); if (view->strides != NULL) { view->strides[0] = self->dtSize * C * R; view->strides[1] = C * self->dtSize; view->strides[2] = self->dtSize; } view->readonly = 1; view->buf = PyMem_Malloc(self->nBytes); if (view->buf != NULL) { const Py_ssize_t dataStride0 = self->dtSize * C * R; const Py_ssize_t bufStride0 = self->dtSize * C * R; const Py_ssize_t dataStride1 = self->dtSize; const Py_ssize_t bufStride1 = self->dtSize * C; const Py_ssize_t dataStride2 = self->dtSize * R; const Py_ssize_t bufStride2 = self->dtSize; for (Py_ssize_t i = 0; i < self->itemCount; i++) { for (Py_ssize_t c = 0; c < C; c++) { for (Py_ssize_t r = 0; r < R; r++) { memcpy(((char*)view->buf) + (i * bufStride0 + r * bufStride1 + c * bufStride2), ((char*)self->data) + (i * dataStride0 + r * dataStride1 + c * dataStride2), self->dtSize); } } } } } else if ((flags & PyBUF_WRITABLE) == 0 && (flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS) { view->shape = (Py_ssize_t*)PyMem_Malloc(3 * sizeof(Py_ssize_t)); if (view->shape != NULL) { view->shape[0] = self->itemCount; view->shape[1] = R; view->shape[2] = C; } view->strides = (Py_ssize_t*)PyMem_Malloc(3 * sizeof(Py_ssize_t)); if (view->strides != NULL) { view->strides[0] = self->dtSize; view->strides[1] = C * self->dtSize; view->strides[2] = self->dtSize * C * R; } view->readonly = 1; view->buf = PyMem_Malloc(self->nBytes); if (view->buf != NULL) { const Py_ssize_t dataStride0 = self->dtSize * C * R; const Py_ssize_t bufStride0 = self->dtSize; const Py_ssize_t dataStride1 = self->dtSize; const Py_ssize_t bufStride1 = self->dtSize * C; const Py_ssize_t dataStride2 = self->dtSize * R; const Py_ssize_t bufStride2 = self->dtSize * C * R; for (Py_ssize_t i = 0; i < self->itemCount; i++) { for (Py_ssize_t c = 0; c < C; c++) { for (Py_ssize_t r = 0; r < R; r++) { memcpy(((char*)view->buf) + (i * bufStride0 + r * bufStride1 + c * bufStride2), ((char*)self->data) + (i * dataStride0 + r * dataStride1 + c * dataStride2), self->dtSize); } } } } } else { PyErr_SetString(PyExc_BufferError, "This type of buffer is not supported."); PyMem_Free(view->format); view->format = NULL; view->obj = NULL; view->buf = NULL; return -1; } } else if (self->glmType == PyGLM_TYPE_VEC || self->glmType == PyGLM_TYPE_QUA) { const int L = (self->glmType == PyGLM_TYPE_VEC) ? self->getShape() : 4; view->ndim = 2; if ((flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS && ((flags & PyBUF_WRITABLE) || L == 1)) { view->shape = (Py_ssize_t*)PyMem_Malloc(2 * sizeof(Py_ssize_t)); if (view->shape != NULL) { view->shape[0] = self->itemCount; view->shape[1] = L; } view->strides = (Py_ssize_t*)PyMem_Malloc(2 * sizeof(Py_ssize_t)); if (view->strides != NULL) { view->strides[0] = self->dtSize; view->strides[1] = L * self->dtSize; } if (L != 1) { view->readonly = 1; view->buf = PyMem_Malloc(view->len); if (view->buf != NULL) { const Py_ssize_t dataStride0 = self->dtSize * L; const Py_ssize_t bufStride0 = self->dtSize; const Py_ssize_t dataStride1 = self->dtSize; const Py_ssize_t bufStride1 = self->dtSize * L; for (Py_ssize_t i = 0; i < self->itemCount; i++) { for (Py_ssize_t l = 0; l < L; l++) { memcpy(((char*)view->buf) + (i * bufStride0 + l * bufStride1), ((char*)self->data) + (i * dataStride0 + l * dataStride1), self->dtSize); } } } } } else { if (flags & PyBUF_ND) { view->shape = (Py_ssize_t*)PyMem_Malloc(2 * sizeof(Py_ssize_t)); if (view->shape != NULL) { view->shape[0] = self->itemCount; view->shape[1] = L; } } else { view->shape = NULL; } if ((flags & PyBUF_STRIDES) == PyBUF_STRIDES) { view->strides = (Py_ssize_t*)PyMem_Malloc(2 * sizeof(Py_ssize_t)); if (view->strides != NULL) { view->strides[0] = L * self->dtSize; view->strides[1] = self->dtSize; } } else { view->strides = NULL; } } } else if (self->glmType == PyGLM_TYPE_CTYPES) { view->ndim = 1; if (flags & PyBUF_ND) { view->shape = (Py_ssize_t*)PyMem_Malloc(sizeof(Py_ssize_t)); if (view->shape != NULL) { view->shape[0] = self->itemCount; } } else { view->shape = NULL; } if ((flags & PyBUF_STRIDES) == PyBUF_STRIDES) { view->strides = (Py_ssize_t*)PyMem_Malloc(sizeof(Py_ssize_t)); if (view->strides != NULL) { view->strides[0] = self->dtSize; } } else { view->strides = NULL; } } view->suboffsets = NULL; view->internal = NULL; Py_INCREF(self); return 0; } static void glmArray_releasebuffer(PyObject* self, Py_buffer* view) { PyMem_Free(view->shape); PyMem_Free(view->strides); PyMem_Free(view->format); if (view->readonly) { PyMem_Free(view->buf); } } static PyObject* glmArray_to_list(glmArray* self, PyObject*) { PyObject* out = PyList_New(self->itemCount); for (Py_ssize_t i = 0; i < self->itemCount; i++) { PyList_SET_ITEM(out, i, glmArray_get(self, i)); } return out; } static PyObject* glmArray_to_tuple(glmArray* self, PyObject*) { PyObject* out = PyTuple_New(self->itemCount); for (Py_ssize_t i = 0; i < self->itemCount; i++) { PyTuple_SET_ITEM(out, i, glmArray_get(self, i)); } return out; } static PyObject* glmArray_split_components(glmArray* self, PyObject*) { if (self->glmType == PyGLM_TYPE_CTYPES) { PyErr_SetString(PyExc_NotImplementedError, "split_components() is not defined for ctypes arrays"); return NULL; } const uint8 componentCount = self->shape[0]; PyTypeObject* subtype = (self->glmType == PyGLM_TYPE_MAT) ? PyGLM_PYOBJECT_MAT_GET_COLUMN_TYPE((PyGLMTypeObject*)(self->subtype)) : PyGLM_PYOBJECT_VEC_QUAT_COMPONENT_TYPE((PyGLMTypeObject*)(self->subtype)); const uint8 glmType = (self->glmType == PyGLM_TYPE_MAT) ? PyGLM_TYPE_VEC : PyGLM_TYPE_CTYPES; PyObject* out = PyTuple_New(componentCount); for (uint8 i = 0; i < componentCount; i++) { glmArray* arr = (glmArray*)glmArrayType.tp_alloc(&glmArrayType, 0); if (arr == NULL) { PyErr_SetString(PyExc_MemoryError, "Out of memory"); Py_DECREF(out); return NULL; } arr->subtype = subtype; arr->glmType = glmType; arr->readonly = false; arr->reference = NULL; arr->dtSize = self->dtSize; arr->format = self->format; arr->itemCount = self->itemCount; arr->itemSize = self->itemSize / componentCount; arr->nBytes = self->nBytes / componentCount; arr->shape[0] = self->shape[1]; arr->data = PyMem_Malloc(arr->nBytes); if (arr->data == NULL) { PyErr_SetString(PyExc_MemoryError, "Out of memory"); Py_DECREF(arr); Py_DECREF(out); return NULL; } char* selfDataPtr = (char*)self->data + (i * arr->itemSize); char* arrDataPtr = (char*)arr->data; for (Py_ssize_t j = 0; j < self->itemCount; j++) { memcpy(arrDataPtr, selfDataPtr, arr->itemSize); selfDataPtr += self->itemSize; arrDataPtr += arr->itemSize; } PyTuple_SET_ITEM(out, i, ((PyObject*)arr)); } return out; } static PyObject* do_reduce(std::vector objects, PyObject* callable) { const size_t object_count = objects.size(); PyObject* result = objects[0]; PyObject* args = PyTuple_New(2); for (size_t i = 1; i < object_count; i++) { PyObject* nextObj = objects[i]; PyTuple_SET_ITEM(args, 0, result); PyTuple_SET_ITEM(args, 1, nextObj); PyObject* newResult = PyObject_Call(callable, args, NULL); Py_DECREF(result); Py_DECREF(nextObj); if (newResult == NULL) { PyTuple_SET_ITEM(args, 0, NULL); PyTuple_SET_ITEM(args, 1, NULL); Py_DECREF(args); return NULL; } result = newResult; } PyTuple_SET_ITEM(args, 0, NULL); PyTuple_SET_ITEM(args, 1, NULL); Py_DECREF(args); return result; } static PyObject* glmArray_reduce(glmArray* self, PyObject* args) { PyObject* arg1, * arg2 = NULL; if (!PyArg_UnpackTuple(args, "reduce", 1, 2, &arg1, &arg2)) return NULL; if (!PyCallable_Check(arg1)) { PyGLM_TYPEERROR_O("reduce() requires a function or callable as it's first argument. Got ", arg1); return NULL; } std::vector objects; if (arg2 != NULL) { // initializer if (!((self->glmType == PyGLM_TYPE_CTYPES && PyGLM_Number_Check(arg2)) || PyObject_TypeCheck(arg2, self->subtype))) { PyGLM_TYPEERROR_O("Invalid argument type for initializer of reduce(): ", arg2); return NULL; } Py_INCREF(arg2); objects.push_back(arg2); } PyGLM_ASSERT((self->itemCount + objects.size() > 0), "Cannot reduce an empty array with no initializer."); for (Py_ssize_t i = 0; i < self->itemCount; i++) { objects.push_back(glmArray_get(self, i)); } return do_reduce(objects, arg1); } template static bool glmArray_from_numbers_init_iter(glmArray* out, PyObject* iterator, Py_ssize_t& argCount) { out->dtSize = sizeof(T); out->itemSize = sizeof(T); out->itemCount = argCount - 1; out->nBytes = out->itemSize * out->itemCount; out->format = get_format_specifier(); out->data = PyMem_Malloc(out->nBytes); if (out->data == NULL) { PyErr_SetString(PyExc_MemoryError, "Out of memory"); return false; } T* values = reinterpret_cast(out->data); for (Py_ssize_t i = 1; i < argCount; i++) { PyObject* element = PyIter_Next(iterator); if (!PyGLM_Number_Check(element)) { PyGLM_TYPEERROR_O("Invalid argument type(s) for from_number(). Expected only numbers, got ", element); return false; } values[i - 1] = PyGLM_Number_FromPyObject(element); } return true; } template static bool glmArray_from_numbers_init(glmArray* out, PyObject* tuple, Py_ssize_t& argCount) { out->dtSize = sizeof(T); out->itemSize = sizeof(T); out->itemCount = argCount - 1; out->nBytes = out->itemSize * out->itemCount; out->format = get_format_specifier(); out->data = PyMem_Malloc(out->nBytes); if (out->data == NULL) { PyErr_SetString(PyExc_MemoryError, "Out of memory"); return false; } T* values = reinterpret_cast(out->data); for (Py_ssize_t i = 1; i < argCount; i++) { PyObject* element = PyGLM_TupleOrList_GET_ITEM(tuple, i); if (!PyGLM_Number_Check(element)) { PyGLM_TYPEERROR_O("Invalid argument type(s) for from_number(). Expected only numbers, got ", element); return false; } values[i - 1] = PyGLM_Number_FromPyObject(element); } return true; } static PyObject* glmArray_from_numbers(PyObject*, PyObject* args) { Py_ssize_t argCount = PyTuple_GET_SIZE(args); PyGLM_ASSERT((argCount >= 1), "Invalid argument count for from_number(), expected at least 1, got 0"); PyObject* formatType = PyTuple_GET_ITEM(args, 0); if (!PyType_Check(formatType)) { PyGLM_TYPEERROR_O("Invalid argument type for from_number(), expected a data type as the first argument. Got ", formatType); return NULL; } glmArray* out = (glmArray*)glmArrayType.tp_alloc(&glmArrayType, 0); if (out == NULL) { PyErr_SetString(PyExc_MemoryError, "Out of memory"); return NULL; } out->subtype = (PyTypeObject*)formatType; out->glmType = PyGLM_TYPE_CTYPES; out->readonly = false; out->reference = NULL; if (formatType == ctypes_float) { if (glmArray_from_numbers_init(out, args, argCount)) return (PyObject*)out; return NULL; } if (formatType == ctypes_double) { if (glmArray_from_numbers_init(out, args, argCount)) return (PyObject*)out; return NULL; } if (formatType == ctypes_int8) { if (glmArray_from_numbers_init(out, args, argCount)) return (PyObject*)out; return NULL; } if (formatType == ctypes_int16) { if (glmArray_from_numbers_init(out, args, argCount)) return (PyObject*)out; return NULL; } if (formatType == ctypes_int32) { if (glmArray_from_numbers_init(out, args, argCount)) return (PyObject*)out; return NULL; } if (formatType == ctypes_int64) { if (glmArray_from_numbers_init(out, args, argCount)) return (PyObject*)out; return NULL; } if (formatType == ctypes_uint8) { if (glmArray_from_numbers_init(out, args, argCount)) return (PyObject*)out; return NULL; } if (formatType == ctypes_uint16) { if (glmArray_from_numbers_init(out, args, argCount)) return (PyObject*)out; return NULL; } if (formatType == ctypes_uint32) { if (glmArray_from_numbers_init(out, args, argCount)) return (PyObject*)out; return NULL; } if (formatType == ctypes_uint64) { if (glmArray_from_numbers_init(out, args, argCount)) return (PyObject*)out; return NULL; } if (formatType == ctypes_bool) { if (glmArray_from_numbers_init(out, args, argCount)) return (PyObject*)out; return NULL; } PyGLM_TYPEERROR_O("Invalid argument type for from_number(), expected a ctypes data type as the first argument. Got ", formatType); return NULL; } #define GLM_ARRAY_AS_REFERENCE_IF_IS_VEC_BUFFER(T) \ out->dtSize = sizeof(T);\ out->itemSize = L * out->dtSize;\ out->nBytes = out->itemSize * out->itemCount;\ out->subtype = (L == 1) ? PyGLM_VEC_TYPE<1, T>() : (L == 2) ? PyGLM_VEC_TYPE<2, T>() : (L == 3) ? PyGLM_VEC_TYPE<3, T>() : PyGLM_VEC_TYPE<4, T>();\ PyBuffer_Release(&view);\ return (PyObject*)out #define GLM_ARRAY_AS_REFERENCE_IF_IS_MAT_BUFFER(T) \ out->itemSize = (Py_ssize_t)C * (Py_ssize_t)R * out->dtSize;\ out->subtype = (C == 2) ? (R == 2) ? PyGLM_MAT_TYPE<2, 2, T>() : (R == 3) ? PyGLM_MAT_TYPE<2, 3, T>() : PyGLM_MAT_TYPE<2, 4, T>() :\ (C == 3) ? (R == 2) ? PyGLM_MAT_TYPE<3, 2, T>() : (R == 3) ? PyGLM_MAT_TYPE<3, 3, T>() : PyGLM_MAT_TYPE<3, 4, T>() :\ (R == 2) ? PyGLM_MAT_TYPE<4, 2, T>() : (R == 3) ? PyGLM_MAT_TYPE<4, 3, T>() : PyGLM_MAT_TYPE<4, 4, T>();\ PyBuffer_Release(&view);\ return (PyObject*)out #define GLM_ARRAY_AS_REFERENCE_IF_IS_CTYPES_BUFFER(T) \ out->dtSize = sizeof(T);\ out->itemSize = out->dtSize;\ out->nBytes = out->itemSize * out->itemCount;\ out->subtype = PyGLM_CTYPES_TYPE();\ PyBuffer_Release(&view);\ return (PyObject*)out static PyObject* glmArray_as_reference(PyObject*, PyObject* arg) { if (PyObject_TypeCheck(arg, &glmArrayType)) { glmArray* other = (glmArray*)arg; glmArray* out = (glmArray*)glmArrayType.tp_alloc(&glmArrayType, 0); if (out == NULL) { PyErr_SetString(PyExc_MemoryError, "Out of memory"); return NULL; } out->format = other->format; out->shape[0] = other->shape[0]; out->shape[1] = other->shape[1]; out->glmType = other->glmType; out->nBytes = other->nBytes; out->itemCount = other->itemCount; out->dtSize = other->dtSize; out->itemSize = other->itemSize; out->subtype = other->subtype; out->data = other->data; out->readonly = other->readonly; Py_INCREF(arg); out->reference = arg; return (PyObject*)out; } if (PyObject_CheckBuffer(arg)) { Py_buffer view; if (PyObject_GetBuffer(arg, &view, PyBUF_RECORDS_RO) == -1) { PyBuffer_Release(&view); return NULL; } glmArray* out = (glmArray*)glmArrayType.tp_alloc(&glmArrayType, 0); if (out == NULL) { PyErr_SetString(PyExc_MemoryError, "Out of memory"); return NULL; } out->data = view.buf; out->readonly = (bool)view.readonly; Py_INCREF(arg); out->reference = arg; if (view.ndim == 1) { out->itemCount = view.shape[0]; out->format = view.format[0]; if (out->format == 'l') out->format = 'i'; else if (out->format == 'L') out->format = 'I'; out->glmType = PyGLM_TYPE_CTYPES; switch (out->format) { case 'f': GLM_ARRAY_AS_REFERENCE_IF_IS_CTYPES_BUFFER(float); case 'd': GLM_ARRAY_AS_REFERENCE_IF_IS_CTYPES_BUFFER(double); case 'i': GLM_ARRAY_AS_REFERENCE_IF_IS_CTYPES_BUFFER(int32); case 'I': GLM_ARRAY_AS_REFERENCE_IF_IS_CTYPES_BUFFER(uint32); case 'b': GLM_ARRAY_AS_REFERENCE_IF_IS_CTYPES_BUFFER(int8); case 'B': GLM_ARRAY_AS_REFERENCE_IF_IS_CTYPES_BUFFER(uint8); case 'h': GLM_ARRAY_AS_REFERENCE_IF_IS_CTYPES_BUFFER(int16); case 'H': GLM_ARRAY_AS_REFERENCE_IF_IS_CTYPES_BUFFER(uint16); case 'q': GLM_ARRAY_AS_REFERENCE_IF_IS_CTYPES_BUFFER(int64); case 'Q': GLM_ARRAY_AS_REFERENCE_IF_IS_CTYPES_BUFFER(uint64); case '?': GLM_ARRAY_AS_REFERENCE_IF_IS_CTYPES_BUFFER(bool); default: PyGLM_TYPEERROR_O("invalid argument type ", arg); PyBuffer_Release(&view); return NULL; } } else if (view.ndim == 2) { if (view.shape[1] < 1 || view.shape[1] > 4) { PyErr_SetString(PyExc_ValueError, "invalid buffer shape"); return NULL; } out->itemCount = view.shape[0]; int L = static_cast(view.shape[1]); out->shape[0] = static_cast(L); out->format = view.format[0]; if (out->format == 'l') out->format = 'i'; else if (out->format == 'L') out->format = 'I'; out->glmType = PyGLM_TYPE_VEC; switch (out->format) { case 'f': GLM_ARRAY_AS_REFERENCE_IF_IS_VEC_BUFFER(float); case 'd': GLM_ARRAY_AS_REFERENCE_IF_IS_VEC_BUFFER(double); case 'i': GLM_ARRAY_AS_REFERENCE_IF_IS_VEC_BUFFER(int32); case 'I': GLM_ARRAY_AS_REFERENCE_IF_IS_VEC_BUFFER(uint32); case 'b': GLM_ARRAY_AS_REFERENCE_IF_IS_VEC_BUFFER(int8); case 'B': GLM_ARRAY_AS_REFERENCE_IF_IS_VEC_BUFFER(uint8); case 'h': GLM_ARRAY_AS_REFERENCE_IF_IS_VEC_BUFFER(int16); case 'H': GLM_ARRAY_AS_REFERENCE_IF_IS_VEC_BUFFER(uint16); case 'q': GLM_ARRAY_AS_REFERENCE_IF_IS_VEC_BUFFER(int64); case 'Q': GLM_ARRAY_AS_REFERENCE_IF_IS_VEC_BUFFER(uint64); case '?': GLM_ARRAY_AS_REFERENCE_IF_IS_VEC_BUFFER(bool); default: PyGLM_TYPEERROR_O("invalid argument type ", arg); PyBuffer_Release(&view); return NULL; } } else if (view.ndim == 3) { if (view.shape[1] < 2 || view.shape[1] > 4 || view.shape[2] < 2 || view.shape[2] > 4) { PyErr_SetString(PyExc_ValueError, "invalid buffer shape"); return NULL; } out->itemCount = view.shape[0]; int R = static_cast(view.shape[1]); int C = static_cast(view.shape[2]); if (view.strides[0] != view.itemsize * C * R || view.strides[1] != view.itemsize || view.strides[2] != view.itemsize * R) { PyGLM_WARN(PyGLM_NO_REFERENCE_POSSIBLE_WARNING, "The given array has an incompatible memory layout, therefore it will be copied!"); Py_DECREF(out->reference); out->reference = NULL; out->readonly = 0; out->data = PyMem_Malloc(view.len); if (out->data == NULL) { PyErr_SetString(PyExc_MemoryError, "out of memory"); return NULL; } char* dataPtr = (char*)out->data; char* bufPtr = (char*)view.buf; for (Py_ssize_t i0 = 0; i0 < out->itemCount; i0++) { for (Py_ssize_t i1 = 0; i1 < R; i1++) { for (Py_ssize_t i2 = 0; i2 < C; i2++) { Py_ssize_t origOffset = (view.strides[0] * i0 + view.strides[1] * i1 + view.strides[2] * i2); Py_ssize_t targetOffset = (out->itemCount * C * R * i0 + view.itemsize * i1 + view.itemsize * R * i2); memcpy(dataPtr + targetOffset, bufPtr + origOffset, view.itemsize); } } } } out->shape[0] = static_cast(C); out->shape[1] = static_cast(R); out->format = view.format[0]; out->dtSize = view.itemsize; out->nBytes = view.len; if (out->format == 'l') out->format = 'i'; else if (out->format == 'L') out->format = 'I'; out->glmType = PyGLM_TYPE_MAT; switch (out->format) { case 'f': GLM_ARRAY_AS_REFERENCE_IF_IS_MAT_BUFFER(float); case 'd': GLM_ARRAY_AS_REFERENCE_IF_IS_MAT_BUFFER(double); case 'i': GLM_ARRAY_AS_REFERENCE_IF_IS_MAT_BUFFER(int32); case 'I': GLM_ARRAY_AS_REFERENCE_IF_IS_MAT_BUFFER(uint32); default: PyGLM_TYPEERROR_O("invalid argument type ", arg); PyBuffer_Release(&view); return NULL; } } else { PyGLM_TYPEERROR_O("invalid argument type ", arg); PyBuffer_Release(&view); return NULL; } } PyGLM_TYPEERROR_O("invalid argument type ", arg); return NULL; } static PyObject* glmArray_zeros_return(glmArray*& out, long& count) { out->nBytes = out->itemSize * count; out->data = PyMem_Calloc(count, out->itemSize); if (out->data == NULL) { PyErr_SetString(PyExc_MemoryError, "Out of memory"); return NULL; } return (PyObject*)out; } #define GLM_ARRAY_ZEROS_IF_IS_CTYPES(T)\ if (type == PyGLM_CTYPES_TYPE()) {\ out->dtSize = sizeof(T);\ out->itemSize = sizeof(T);\ out->format = get_format_specifier();\ return glmArray_zeros_return(out, count);\ } static PyObject* glmArray_zeros(PyObject*, PyObject* args) { PyObject *arg1, *arg2; PyGLM_Arg_Unpack_2O(args, "zeros", arg1, arg2); if (PyLong_Check(arg1) && PyType_Check(arg2)) { long count = PyLong_AS_LONG(arg1); PyTypeObject* type = (PyTypeObject*)arg2; glmArray* out = (glmArray*)glmArrayType.tp_alloc(&glmArrayType, 0); if (out == NULL) { PyErr_SetString(PyExc_MemoryError, "Out of memory"); return NULL; } out->subtype = type; out->itemCount = count; out->readonly = false; out->reference = NULL; if (PyGLM_Is_PyGLM_Type(type)) { PyGLMTypeObject* asPyGLMType = (PyGLMTypeObject*)type; out->glmType = asPyGLMType->glmType & PyGLM_TYPE_MVEC_FILTER; out->dtSize = asPyGLMType->dtSize; out->itemSize = asPyGLMType->itemSize; out->shape[0] = asPyGLMType->C; out->shape[1] = asPyGLMType->R; out->format = asPyGLMType->format; out->nBytes = out->itemSize * count; out->data = PyMem_Calloc(count, out->itemSize); if (out->data == NULL) { PyErr_SetString(PyExc_MemoryError, "Out of memory"); return NULL; } return (PyObject*)out; } if (type->tp_dealloc == ctypes_dealloc) { out->glmType = PyGLM_TYPE_CTYPES; GLM_ARRAY_ZEROS_IF_IS_CTYPES(float); GLM_ARRAY_ZEROS_IF_IS_CTYPES(double); GLM_ARRAY_ZEROS_IF_IS_CTYPES(int32); GLM_ARRAY_ZEROS_IF_IS_CTYPES(int64); GLM_ARRAY_ZEROS_IF_IS_CTYPES(int16); GLM_ARRAY_ZEROS_IF_IS_CTYPES(int8); GLM_ARRAY_ZEROS_IF_IS_CTYPES(uint32); GLM_ARRAY_ZEROS_IF_IS_CTYPES(uint64); GLM_ARRAY_ZEROS_IF_IS_CTYPES(uint16); GLM_ARRAY_ZEROS_IF_IS_CTYPES(uint8); GLM_ARRAY_ZEROS_IF_IS_CTYPES(bool); } PyErr_SetString(PyExc_ValueError, "Invalid data type."); return NULL; } PyGLM_TYPEERROR_2O("Invalid argument type(s) for zeros(): Expected int and type, got ", arg1, arg2); return NULL; } static PyObject* glmArray_getstate(glmArray* self, PyObject*) { return PyTuple_Pack(10, glmArray_to_tuple(self, NULL), PyGLM_PyObject_FromNumber(self->dtSize), PyGLM_PyObject_FromNumber(self->format), PyGLM_PyObject_FromNumber(self->glmType), PyGLM_PyObject_FromNumber(self->itemCount), PyGLM_PyObject_FromNumber(self->itemSize), PyGLM_PyObject_FromNumber(self->nBytes), PyGLM_PyObject_FromNumber(self->shape[0]), PyGLM_PyObject_FromNumber(self->shape[1]), self->subtype ); } static PyObject* glmArray_setstate(glmArray* self, PyObject* state) { PyGLM_ASSERT(PyTuple_CheckExact(state) && PyTuple_GET_SIZE(state) == 10, "Invalid state. Expected length 10 tuple."); PyObject* dataTuple = PyTuple_GET_ITEM(state, 0); self->dtSize = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 1)); self->format = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 2)); self->glmType = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 3)); self->itemCount = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 4)); self->itemSize = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 5)); self->nBytes = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 6)); self->shape[0] = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 7)); self->shape[1] = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 8)); self->subtype = (PyTypeObject*)PyTuple_GET_ITEM(state, 9); self->readonly = false; self->reference = NULL; self->data = PyMem_MALLOC(self->nBytes); for (Py_ssize_t i = 0; i < self->itemCount; i++) { glmArray_set(self, i, PyTuple_GET_ITEM(dataTuple, i)); } Py_RETURN_NONE; } static Py_ssize_t glmArray_len(glmArray* self) { return self->itemCount; } static PyObject* glmArray_concat(PyObject* obj1, PyObject* obj2) { if (!PyObject_TypeCheck(obj1, &glmArrayType) || !PyObject_TypeCheck(obj2, &glmArrayType)) { PyGLM_TYPEERROR_2O("invalid argument type(s) for concat(): ", obj1, obj2); return NULL; } glmArray* arr1 = (glmArray*)obj1; glmArray* arr2 = (glmArray*)obj2; if (arr1->subtype != arr2->subtype) { PyErr_SetString(PyExc_ValueError, "the given arrays are incompatible"); return NULL; } PyGLM_ASSERT(( arr1->format == arr2->format && arr1->glmType == arr2->glmType && arr1->itemSize == arr2->itemSize && arr1->dtSize == arr2->dtSize && memcmp(arr1->shape, arr2->shape, sizeof(arr1->shape)) == 0 ), "the given arrays are incompatible. (though this error shouldn't have been caught by this assertion)"); glmArray* out = (glmArray*)glmArrayType.tp_alloc(&glmArrayType, 0); PyGLM_ASSERT((out != NULL), "generated array was NULL. (maybe we're out of memory?)"); out->dtSize = arr1->dtSize; out->format = arr1->format; out->glmType = arr1->glmType; out->itemCount = arr1->itemCount + arr2->itemCount; out->itemSize = arr1->itemSize; out->nBytes = arr1->nBytes + arr2->nBytes; memcpy(out->shape, arr1->shape, sizeof(out->shape)); out->subtype = arr1->subtype; out->data = PyMem_Malloc(out->nBytes); if (out->data == NULL) { PyErr_SetString(PyExc_MemoryError, "out of memory"); return NULL; } memcpy(out->data, arr1->data, arr1->nBytes); memcpy(((char*)out->data) + arr1->nBytes, arr2->data, arr2->nBytes); return (PyObject*)out; } static PyObject* glmArray_repeat(glmArray* self, PyObject* count) { if (PyLong_Check(count)) { glmArray* out = (glmArray*)glmArrayType.tp_alloc(&glmArrayType, 0); PyGLM_ASSERT((out != NULL), "generated array was NULL. (maybe we're out of memory?)"); Py_ssize_t countAsSsizet = PyLong_AsSsize_t(count); PyGLM_ASSERT((countAsSsizet >= 0), "count must not be negative"); out->dtSize = self->dtSize; out->format = self->format; out->glmType = self->glmType; out->itemCount = self->itemCount * countAsSsizet; out->itemSize = self->itemSize; out->nBytes = self->nBytes * countAsSsizet; memcpy(out->shape, self->shape, sizeof(out->shape)); out->subtype = self->subtype; out->data = PyMem_Malloc(out->nBytes); if (out->data == NULL) { PyErr_SetString(PyExc_MemoryError, "out of memory"); return NULL; } if (countAsSsizet >= 1) { memcpy(out->data, self->data, self->nBytes); } for (Py_ssize_t i = 1; i < countAsSsizet;) { Py_ssize_t destOffset = i * self->nBytes; Py_ssize_t copyCount = std::min(i, countAsSsizet - i); size_t copySize = (size_t)copyCount * (size_t)self->nBytes; memcpy(((char*)out->data) + destOffset, out->data, copySize); i += copyCount; } return (PyObject*)out; } PyGLM_TYPEERROR_O("Invalid argument type for repeat(): Expected int, got ", count); return NULL; } static PyObject* glmArray_inplace_concat(glmArray* self, PyObject* obj) { glmArray* temp = (glmArray*)glmArray_concat((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; memcpy(((char*)self) + PyGLM_ARRAY_OFFSET, ((char*)temp) + PyGLM_ARRAY_OFFSET, PyGLM_ARRAY_SIZE - sizeof(self->data)); self->data = PyMem_Malloc(self->nBytes); memcpy(self->data, temp->data, self->nBytes); Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } static PyObject* glmArray_inplace_repeat(glmArray* self, PyObject* count) { glmArray* temp = (glmArray*)glmArray_repeat(self, count); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; memcpy(((char*)self) + PyGLM_ARRAY_OFFSET, ((char*)temp) + PyGLM_ARRAY_OFFSET, PyGLM_ARRAY_SIZE - sizeof(self->data)); self->data = PyMem_Malloc(self->nBytes); memcpy(self->data, temp->data, self->nBytes); Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } static PyObject* glmArray_sq_item(glmArray* self, Py_ssize_t index) { return glmArray_get(self, index); } static int glmArray_sq_ass_item(glmArray* self, Py_ssize_t index, PyObject* value) { if (self->readonly) { PyErr_SetString(PyExc_Exception, "This array is read-only."); return -1; } return glmArray_set(self, index, value); } static PyObject* glmArray_mp_subscript(glmArray* self, PyObject* key) { if (PyLong_Check(key)) { return glmArray_get(self, PyLong_AsSsize_t(key)); } if (PySlice_Check(key)) { Py_ssize_t start, stop, step, slicelength; if (PySlice_GetIndicesEx(key, self->itemCount, &start, &stop, &step, &slicelength) < 0) { return NULL; } glmArray* out = (glmArray*)glmArrayType.tp_alloc(&glmArrayType, 0); PyGLM_ASSERT((out != NULL), "generated array was NULL. (maybe we're out of memory?)"); out->dtSize = self->dtSize; out->format = self->format; out->glmType = self->glmType; out->itemCount = slicelength; out->itemSize = self->itemSize; out->nBytes = slicelength * self->itemSize; memcpy(out->shape, self->shape, sizeof(out->shape)); out->subtype = self->subtype; if (step == 1) { out->data = ((char*)self->data) + (start * self->itemSize); out->readonly = self->readonly; Py_INCREF(self); out->reference = (PyObject*)self; } else { out->readonly = false; out->reference = NULL; out->data = PyMem_Malloc(out->nBytes); if (out->data == NULL) { PyErr_SetString(PyExc_MemoryError, "out of memory"); return NULL; } Py_ssize_t outIndex = 0; for (Py_ssize_t i = start; i < stop; i += step) { memcpy(((char*)out->data) + (outIndex++ * self->itemSize), ((char*)self->data) + (i * self->itemSize), self->itemSize); } } return (PyObject*)out; } PyGLM_TYPEERROR_O("invalid operand type for []: ", key); return NULL; } static int glmArray_mp_ass_subscript(glmArray* self, PyObject* key, PyObject* value) { if (self->readonly) { PyErr_SetString(PyExc_Exception, "This array is read-only."); return -1; } if (PyLong_Check(key)) { return glmArray_set(self, PyLong_AsSsize_t(key), value); } if (PySlice_Check(key)) { Py_ssize_t start, stop, step, slicelength; if (PySlice_GetIndicesEx(key, self->itemCount, &start, &stop, &step, &slicelength) < 0) { return -1; } if (value == NULL) { void* tempDataCopy = PyMem_Malloc(self->nBytes); if (tempDataCopy == NULL) { PyErr_SetString(PyExc_MemoryError, "out of memory"); return -1; } memcpy(tempDataCopy, self->data, self->nBytes); Py_ssize_t outItemCount = (self->itemCount - slicelength); self->data = PyMem_Realloc(self->data, outItemCount * self->itemSize); Py_ssize_t outIndex = 0; for (Py_ssize_t i = 0; i < self->itemCount; i++) { if (i < start || i >= stop || (i - start) % step != 0) memcpy(((char*)self->data) + (outIndex++ * self->itemSize), ((char*)tempDataCopy) + (i * self->itemSize), self->itemSize); } self->itemCount = outItemCount; self->nBytes = outItemCount * self->itemSize; return 0; } if (!PyObject_TypeCheck(value, &glmArrayType)) { PyGLM_TYPEERROR_O("invalid operand type for []=: ", value); return -1; } glmArray* valueArr = (glmArray*)value; if (valueArr->itemCount != slicelength) { PyErr_SetString(PyExc_ValueError, "array and slice don't have the same length"); return -1; } if (valueArr->subtype != self->subtype) { PyErr_SetString(PyExc_ValueError, "incompatible array data types"); return -1; } Py_ssize_t inValueIndex = 0; for (Py_ssize_t i = start; i < stop; i += step) { memcpy(((char*)self->data) + (i * self->itemSize), ((char*)valueArr->data) + (inValueIndex++ * self->itemSize), self->itemSize); } return 0; } PyGLM_TYPEERROR_O("invalid operand type for []: ", key); return -1; } static int glmArray_contains(glmArray* self, PyObject* value) { for (Py_ssize_t i = 0; i < self->itemCount; i++) { PyObject* itemAtIndex = glmArray_get(self, i); int cmp = PyObject_RichCompareBool(itemAtIndex, value, Py_EQ); if (cmp == 1) { Py_DECREF(itemAtIndex); return 1; } else if (cmp == -1) return -1; Py_DECREF(itemAtIndex); } return 0; } static void glmArray_dealloc(glmArray* self) { if (self->reference == NULL) { PyMem_Free(self->data); self->data = NULL; } else { Py_DECREF(self->reference); } Py_TYPE(self)->tp_free(self); } template static PyObject* glmArray_str_vec(glmArray* self) { const int L = self->getShape(); uint64 itemSize = (7 + 12 + (L - 1) * (12 + 2)); uint64 outLength = 1 + 3 + self->itemCount * itemSize; char* out = (char*)PyMem_Malloc(outLength * sizeof(char)); if (out == NULL) { PyErr_SetString(PyExc_MemoryError, "out of memory"); return NULL; } char* currentIndex = out; snprintf(currentIndex, 2 + 1, "[\n"); currentIndex += 2; for (Py_ssize_t itemIndex = 0; itemIndex < self->itemCount; itemIndex++) { T* values = &((T*)self->data)[itemIndex * L]; snprintf(currentIndex, 3 + 12 + 1, " [ %12.6g", static_cast(values[0])); currentIndex += 3 + 12; for (Py_ssize_t valueIndex = 1; valueIndex < L; valueIndex++) { snprintf(currentIndex, 2 + 12 + 1, ", %12.6g", static_cast(values[valueIndex])); currentIndex += 2 + 12; } snprintf(currentIndex, 4 + 1, " ],\n"); currentIndex += 4; } snprintf(currentIndex, 1 + 1, "]"); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject* glmArray_repr_vec(glmArray* self) { const int L = self->getShape(); const char* subtypeName = PyGLM_GET_NAME(self->subtype->tp_name); const char* arrayTypeName = PyGLM_GET_NAME(glmArrayType.tp_name); const uint64 arrayNameLength = strlen(arrayTypeName); const uint64 subtypeNameLength = strlen(subtypeName); const uint64 itemSize = (subtypeNameLength + 2 + 12 + (L - 1) * (12 + 2)); const uint64 outLength = 1 + arrayNameLength + 2 + itemSize + (itemSize + 2) * (self->itemCount - 1); char* out = (char*)PyMem_Malloc(outLength * sizeof(char)); if (out == NULL) { PyErr_SetString(PyExc_MemoryError, "out of memory"); return NULL; } char* currentIndex = out; snprintf(currentIndex, arrayNameLength + 1 + 1, "%s(", arrayTypeName); currentIndex += arrayNameLength + 1; for (Py_ssize_t itemIndex = 0; itemIndex < self->itemCount; itemIndex++) { T* values = &((T*)self->data)[itemIndex * L]; snprintf(currentIndex, subtypeNameLength + 1 + 12 + 1, "%s(%g", subtypeName, static_cast(values[0])); currentIndex += strlen(currentIndex); for (Py_ssize_t valueIndex = 1; valueIndex < L; valueIndex++) { snprintf(currentIndex, 2 + 12 + 1, ", %g", static_cast(values[valueIndex])); currentIndex += strlen(currentIndex); } if (itemIndex < self->itemCount - 1) { snprintf(currentIndex, 3 + 1, "), "); currentIndex += 3; } else { snprintf(currentIndex, 1 + 1, ")"); currentIndex += 1; } } snprintf(currentIndex, 1 + 1, ")"); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject* glmArray_str_mat(glmArray* self) { const int C = self->getShape(0); const int R = self->getShape(1); uint64 subItemSize = (8 + 12 + (R - 1) * (12 + 2)); uint64 itemSize = 7 + subItemSize * C; uint64 outLength = 1 + 3 + itemSize * self->itemCount; char* out = (char*)PyMem_Malloc(outLength * sizeof(char)); if (out == NULL) { PyErr_SetString(PyExc_MemoryError, "out of memory"); return NULL; } char* currentIndex = out; snprintf(currentIndex, 2 + 1, "[\n"); currentIndex += 2; for (Py_ssize_t itemIndex = 0; itemIndex < self->itemCount; itemIndex++) { snprintf(currentIndex, 3 + 1, " [\n"); currentIndex += 3; T* values = &((T*)self->data)[itemIndex * (C * R)]; for (Py_ssize_t rowIndex = 0; rowIndex < R; rowIndex++) { snprintf(currentIndex, 4 + 12 + 1, " [ %12.6g", static_cast(values[rowIndex])); currentIndex += 4 + 12; for (Py_ssize_t valueIndex = 1; valueIndex < C; valueIndex++) { snprintf(currentIndex, 2 + 12 + 1, ", %12.6g", static_cast(values[valueIndex * R + rowIndex])); currentIndex += 2 + 12; } snprintf(currentIndex, 4 + 1, " ],\n"); currentIndex += 4; } snprintf(currentIndex, 4 + 1, " ],\n"); currentIndex += 4; } snprintf(currentIndex, 1 + 1, "]"); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject* glmArray_repr_mat(glmArray* self) { const int C = self->getShape(0); const int R = self->getShape(1); const char* subtypeName = self->subtype->tp_name + 4; const char* arrayTypeName = glmArrayType.tp_name + 4; const uint64 arrayNameLength = strlen(arrayTypeName); const uint64 subtypeNameLength = strlen(subtypeName); const uint64 subItemSize = (2 + 12 + (R - 1) * (12 + 2)); const uint64 itemSize = subtypeNameLength + 2 + subItemSize + (subItemSize + 2) * (C - 1); const uint64 outLength = 1 + arrayNameLength + 2 + itemSize + (2 + itemSize) * (self->itemCount - 1); char* out = (char*)PyMem_Malloc(outLength * sizeof(char)); if (out == NULL) { PyErr_SetString(PyExc_MemoryError, "out of memory"); return NULL; } char* currentIndex = out; snprintf(currentIndex, arrayNameLength + 1 + 1, "%s(", arrayTypeName); currentIndex += arrayNameLength + 1; for (Py_ssize_t itemIndex = 0; itemIndex < self->itemCount; itemIndex++) { snprintf(currentIndex, subtypeNameLength + 1 + 1, "%s(", subtypeName); currentIndex += subtypeNameLength + 1; for (Py_ssize_t columnIndex = 0; columnIndex < C; columnIndex++) { T* values = &((T*)self->data)[itemIndex * (C * R) + columnIndex * R]; snprintf(currentIndex, 1 + 12 + 1, "(%g", static_cast(values[0])); currentIndex += strlen(currentIndex); for (Py_ssize_t valueIndex = 1; valueIndex < R; valueIndex++) { snprintf(currentIndex, 2 + 12 + 1, ", %g", static_cast(values[valueIndex])); currentIndex += strlen(currentIndex); } if (columnIndex < C - 1) { snprintf(currentIndex, 3 + 1, "), "); currentIndex += 3; } else { snprintf(currentIndex, 1 + 1, ")"); currentIndex += 1; } } if (itemIndex < self->itemCount - 1) { snprintf(currentIndex, 3 + 1, "), "); currentIndex += 3; } else { snprintf(currentIndex, 1 + 1, ")"); currentIndex += 1; } } snprintf(currentIndex, 1 + 1, ")"); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject* glmArray_str_qua(glmArray* self) { uint64 itemSize = (13 + 12 * 4); uint64 outLength = 1 + 3 + itemSize * self->itemCount; char* out = (char*)PyMem_Malloc(outLength * sizeof(char)); if (out == NULL) { PyErr_SetString(PyExc_MemoryError, "out of memory"); return NULL; } char* currentIndex = out; snprintf(currentIndex, 2 + 1, "[\n"); currentIndex += 2; for (Py_ssize_t itemIndex = 0; itemIndex < self->itemCount; itemIndex++) { T* values = &((T*)self->data)[itemIndex * 4]; snprintf(currentIndex, 13 + 12 * 4 + 1, " [ %12.6g, %12.6g, %12.6g, %12.6g ],\n", static_cast(values[0]), static_cast(values[1]), static_cast(values[2]), static_cast(values[3])); currentIndex += 13 + 12 * 4; } snprintf(currentIndex, 1 + 1, "]"); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject* glmArray_repr_qua(glmArray* self) { const char* subtypeName = self->subtype->tp_name + 4; const char* arrayTypeName = glmArrayType.tp_name + 4; const uint64 arrayNameLength = strlen(arrayTypeName); const uint64 subtypeNameLength = strlen(subtypeName); const uint64 itemSize = (subtypeNameLength + 8 + 12 * 4); const uint64 outLength = 1 + arrayNameLength + 2 + itemSize + (itemSize + 2) * (self->itemCount - 1); char* out = (char*)PyMem_Malloc(outLength * sizeof(char)); if (out == NULL) { PyErr_SetString(PyExc_MemoryError, "out of memory"); return NULL; } char* currentIndex = out; snprintf(currentIndex, arrayNameLength + 1 + 1, "%s(", arrayTypeName); currentIndex += arrayNameLength + 1; for (Py_ssize_t itemIndex = 0; itemIndex < self->itemCount; itemIndex++) { T* values = &((T*)self->data)[itemIndex * 4]; if (itemIndex < self->itemCount - 1) { snprintf(currentIndex, itemSize + 2 + 1, "%s(%g, %g, %g, %g), ", subtypeName, static_cast(values[0]), static_cast(values[1]), static_cast(values[2]), static_cast(values[3])); } else { snprintf(currentIndex, itemSize + 1, "%s(%g, %g, %g, %g)", subtypeName, static_cast(values[0]), static_cast(values[1]), static_cast(values[2]), static_cast(values[3])); } currentIndex += strlen(currentIndex); } snprintf(currentIndex, 1 + 1, ")"); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject* glmArray_str_ctypes(glmArray* self) { constexpr uint64 itemSize = (1 + 12 + 2); uint64 outLength = 1 + 3 + self->itemCount * itemSize; char* out = (char*)PyMem_Malloc(outLength * sizeof(char)); if (out == NULL) { PyErr_SetString(PyExc_MemoryError, "out of memory"); return NULL; } char* currentIndex = out; snprintf(currentIndex, 2 + 1, "[\n"); currentIndex += 2; T* values = reinterpret_cast(self->data); for (Py_ssize_t itemIndex = 0; itemIndex < self->itemCount; itemIndex++) { snprintf(currentIndex, 1 + 12 + 2 + 1, " %12.6g,\n", static_cast(values[itemIndex])); currentIndex += 1 + 12 + 2; } snprintf(currentIndex, 1 + 1, "]"); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject* glmArray_repr_ctypes(glmArray* self) { const char* subtypeName = PyGLM_CTYPES_TYPE_STRING(); const char* arrayTypeName = glmArrayType.tp_name + 4; const uint64 arrayNameLength = strlen(arrayTypeName); const uint64 subtypeNameLength = strlen(subtypeName); const uint64 itemSize = (subtypeNameLength + 2 + 12); const uint64 outLength = 1 + arrayNameLength + 2 + itemSize + (itemSize + 2) * (self->itemCount - 1); char* out = (char*)PyMem_Malloc(outLength * sizeof(char)); if (out == NULL) { PyErr_SetString(PyExc_MemoryError, "out of memory"); return NULL; } char* currentIndex = out; snprintf(currentIndex, arrayNameLength + 1 + 1, "%s(", arrayTypeName); currentIndex += arrayNameLength + 1; T* values = reinterpret_cast(self->data); for (Py_ssize_t itemIndex = 0; itemIndex < self->itemCount; itemIndex++) { snprintf(currentIndex, subtypeNameLength + 1 + 12 + 1, "%s(%g", subtypeName, static_cast(values[itemIndex])); currentIndex += strlen(currentIndex); if (itemIndex < self->itemCount - 1) { snprintf(currentIndex, 3 + 1, "), "); currentIndex += 3; } else { snprintf(currentIndex, 1 + 1, ")"); currentIndex += 1; } } snprintf(currentIndex, 1 + 1, ")"); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } static PyObject* glmArray_str(glmArray* self) { switch (self->glmType) { case PyGLM_TYPE_VEC: switch (self->format) { case 'f': return glmArray_str_vec(self); case 'd': return glmArray_str_vec(self); case 'i': return glmArray_str_vec(self); case 'I': return glmArray_str_vec(self); case 'b': return glmArray_str_vec(self); case 'B': return glmArray_str_vec(self); case 'h': return glmArray_str_vec(self); case 'H': return glmArray_str_vec(self); case 'q': return glmArray_str_vec(self); case 'Q': return glmArray_str_vec(self); case '?': return glmArray_str_vec(self); default: return NULL; } case PyGLM_TYPE_MAT: switch (self->format) { case 'f': return glmArray_str_mat(self); case 'd': return glmArray_str_mat(self); case 'i': return glmArray_str_mat(self); case 'I': return glmArray_str_mat(self); default: return NULL; } case PyGLM_TYPE_QUA: switch (self->format) { case 'f': return glmArray_str_qua(self); case 'd': return glmArray_str_qua(self); default: return NULL; } case PyGLM_TYPE_CTYPES: switch (self->format) { case 'f': return glmArray_str_ctypes(self); case 'd': return glmArray_str_ctypes(self); case 'i': return glmArray_str_ctypes(self); case 'I': return glmArray_str_ctypes(self); case 'b': return glmArray_str_ctypes(self); case 'B': return glmArray_str_ctypes(self); case 'h': return glmArray_str_ctypes(self); case 'H': return glmArray_str_ctypes(self); case 'q': return glmArray_str_ctypes(self); case 'Q': return glmArray_str_ctypes(self); case '?': return glmArray_str_ctypes(self); default: return NULL; } default: return NULL; } } static PyObject* glmArray_repr(glmArray* self) { switch (self->glmType) { case PyGLM_TYPE_VEC: switch (self->format) { case 'f': return glmArray_repr_vec(self); case 'd': return glmArray_repr_vec(self); case 'i': return glmArray_repr_vec(self); case 'I': return glmArray_repr_vec(self); case 'b': return glmArray_repr_vec(self); case 'B': return glmArray_repr_vec(self); case 'h': return glmArray_repr_vec(self); case 'H': return glmArray_repr_vec(self); case 'q': return glmArray_repr_vec(self); case 'Q': return glmArray_repr_vec(self); case '?': return glmArray_repr_vec(self); default: return NULL; } case PyGLM_TYPE_MAT: switch (self->format) { case 'f': return glmArray_repr_mat(self); case 'd': return glmArray_repr_mat(self); case 'i': return glmArray_repr_mat(self); case 'I': return glmArray_repr_mat(self); default: return NULL; } case PyGLM_TYPE_QUA: switch (self->format) { case 'f': return glmArray_repr_qua(self); case 'd': return glmArray_repr_qua(self); default: return NULL; } case PyGLM_TYPE_CTYPES: switch (self->format) { case 'f': return glmArray_repr_ctypes(self); case 'd': return glmArray_repr_ctypes(self); case 'i': return glmArray_repr_ctypes(self); case 'I': return glmArray_repr_ctypes(self); case 'b': return glmArray_repr_ctypes(self); case 'B': return glmArray_repr_ctypes(self); case 'h': return glmArray_repr_ctypes(self); case 'H': return glmArray_repr_ctypes(self); case 'q': return glmArray_repr_ctypes(self); case 'Q': return glmArray_repr_ctypes(self); case '?': return glmArray_repr_ctypes(self); default: return NULL; } default: return NULL; } } static PyObject* glmArray_richcompare(glmArray* self, PyObject* other, int comp_type) { switch (comp_type) { case Py_EQ: if (PyObject_TypeCheck(other, &glmArrayType)) { if (self->nBytes == ((glmArray*)other)->nBytes && memcmp(self->data, ((glmArray*)other)->data, self->nBytes) == 0) { Py_RETURN_TRUE; } Py_RETURN_FALSE; } Py_RETURN_FALSE; case Py_NE: if (PyObject_TypeCheck(other, &glmArrayType)) { if (self->nBytes == ((glmArray*)other)->nBytes && memcmp(self->data, ((glmArray*)other)->data, self->nBytes) == 0) { Py_RETURN_FALSE; } Py_RETURN_TRUE; } Py_RETURN_TRUE; default: Py_RETURN_NOTIMPLEMENTED; } } static PyObject* glmArray_geniter(glmArray* self) { glmArrayIter* rgstate = (glmArrayIter*)(glmArrayIterType.tp_alloc(&glmArrayIterType, 0)); if (!rgstate) return NULL; rgstate->sequence = self; Py_INCREF(self); rgstate->seq_index = 0; return (PyObject*)rgstate; } #define GLM_ARRAY_INIT_IF_IS_CTYPES_ITER(T) if (firstElementType == UNBRACKET (PyGLM_CTYPES_TYPE())) {return UNBRACKET (glmArray_init_ctypes_iter(self, firstElement, iterator, argCount));} template static int glmArray_init_ctypes_iter(glmArray* self, PyObject* firstElement, PyObject* iterator, Py_ssize_t argCount) { self->itemCount = argCount; self->dtSize = sizeof(T); self->itemSize = sizeof(T); self->nBytes = self->itemSize * argCount; self->subtype = PyGLM_CTYPES_TYPE(); self->glmType = PyGLM_TYPE_CTYPES; self->format = get_format_specifier(); self->data = PyMem_Malloc(self->nBytes); if (self->data == NULL) { PyErr_SetString(PyExc_MemoryError, "array creation failed"); Py_DECREF(iterator); Py_DECREF(firstElement); return -1; } T* dataAsTPtr = (T*)self->data; dataAsTPtr[0] = *reinterpret_cast(((ctypes_helper*)firstElement)->b_ptr); Py_DECREF(firstElement); for (Py_ssize_t i = 1; i < argCount; i++) { ctypes_helper* currentArg = (ctypes_helper*)PyIter_Next(iterator); if (Py_TYPE(currentArg) != self->subtype) { PyGLM_free(self->data); PyErr_SetString(PyExc_TypeError, "arrays have to be initialized with arguments of the same glm type"); Py_DECREF(iterator); Py_DECREF(currentArg); return -1; } dataAsTPtr[i] = *reinterpret_cast(currentArg->b_ptr); Py_DECREF(currentArg); } Py_DECREF(iterator); return 0; } #define GLM_ARRAY_INIT_IF_IS_CTYPES_TUPLE_OR_LIST(T) if (firstElementType == UNBRACKET (PyGLM_CTYPES_TYPE())) {return UNBRACKET (glmArray_init_ctypes_tuple_or_list(self, args, argCount));} template static int glmArray_init_ctypes_tuple_or_list(glmArray* self, PyObject* args, Py_ssize_t argCount) { self->itemCount = argCount; self->dtSize = sizeof(T); self->itemSize = sizeof(T); self->nBytes = self->itemSize * argCount; self->subtype = PyGLM_CTYPES_TYPE(); self->glmType = PyGLM_TYPE_CTYPES; self->format = get_format_specifier(); self->data = PyMem_Malloc(self->nBytes); if (self->data == NULL) { PyErr_SetString(PyExc_MemoryError, "array creation failed"); return -1; } T* dataAsTPtr = (T*)self->data; for (Py_ssize_t i = 0; i < argCount; i++) { ctypes_helper* currentArg = (ctypes_helper*)PyGLM_TupleOrList_GET_ITEM(args, i); if (Py_TYPE(currentArg) != self->subtype) { PyGLM_free(self->data); PyErr_SetString(PyExc_TypeError, "arrays have to be initialized with arguments of the same type"); return -1; } dataAsTPtr[i] = *reinterpret_cast(currentArg->b_ptr); } return 0; } #define GLM_ARRAY_INIT_IF_IS_VEC_BUFFER(T) self->dtSize = sizeof(T);\ self->itemSize = L * self->dtSize;\ self->nBytes = self->itemSize * self->itemCount;\ self->subtype = (L == 1) ? PyGLM_VEC_TYPE<1, T>() : (L == 2) ? PyGLM_VEC_TYPE<2, T>() : (L == 3) ? PyGLM_VEC_TYPE<3, T>() : PyGLM_VEC_TYPE<4, T>();\ self->data = PyMem_Malloc(self->nBytes);\ if (self->data == NULL) {\ PyErr_SetString(PyExc_MemoryError, "out of memory");\ return -1;\ }\ memcpy(self->data, view.buf, self->nBytes);\ PyBuffer_Release(&view);\ return 0 #define GLM_ARRAY_INIT_IF_IS_MAT_BUFFER(T) self->itemSize = self->dtSize * C * R;\ self->subtype = (C == 2) ? (R == 2) ? PyGLM_MAT_TYPE<2, 2, T>() : (R == 3) ? PyGLM_MAT_TYPE<2, 3, T>() : PyGLM_MAT_TYPE<2, 4, T>() :\ (C == 3) ? (R == 2) ? PyGLM_MAT_TYPE<3, 2, T>() : (R == 3) ? PyGLM_MAT_TYPE<3, 3, T>() : PyGLM_MAT_TYPE<3, 4, T>() :\ (R == 2) ? PyGLM_MAT_TYPE<4, 2, T>() : (R == 3) ? PyGLM_MAT_TYPE<4, 3, T>() : PyGLM_MAT_TYPE<4, 4, T>();\ PyBuffer_Release(&view);\ return 0 #define GLM_ARRAY_INIT_IF_IS_CTYPES_BUFFER(T) self->dtSize = sizeof(T);\ self->itemSize = self->dtSize;\ self->nBytes = self->itemSize * self->itemCount;\ self->subtype = PyGLM_CTYPES_TYPE();\ self->data = PyMem_Malloc(self->nBytes);\ if (self->data == NULL) {\ PyErr_SetString(PyExc_MemoryError, "out of memory");\ return -1;\ }\ memcpy(self->data, view.buf, self->nBytes);\ PyBuffer_Release(&view);\ return 0 static int glmArray_init(glmArray* self, PyObject* args, PyObject* kwds) { Py_ssize_t argCount = PyGLM_TupleOrList_GET_SIZE(args); if (argCount == 0) { PyErr_SetString(PyExc_TypeError, "cannot create an empty array"); return -1; } PyObject* firstElement = PyGLM_TupleOrList_GET_ITEM(args, 0); PyTypeObject* firstElementType = Py_TYPE(firstElement); // PyGLM types if (PyGLM_Is_PyGLM_Type(firstElementType)) { PyGLMTypeObject* pto = (PyGLMTypeObject*)firstElementType; self->itemCount = argCount; self->dtSize = pto->dtSize; self->itemSize = pto->itemSize; self->nBytes = self->itemSize * argCount; self->subtype = pto->subtype; self->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; self->shape[0] = pto->C; self->shape[1] = pto->R; self->format = pto->format; self->data = PyMem_Malloc(self->nBytes); if (self->data == NULL) { PyErr_SetString(PyExc_MemoryError, "array creation failed"); return -1; } char* dataAsCharPtr = reinterpret_cast(self->data); for (Py_ssize_t i = 0; i < argCount; i++) { PyObject* currentArg = PyGLM_TupleOrList_GET_ITEM(args, i); if (Py_TYPE(currentArg) == self->subtype) { memcpy(dataAsCharPtr + (i * self->itemSize), pto->getDataOf(currentArg), self->itemSize); } else if (self->glmType == PyGLM_TYPE_VEC && (((PyGLMTypeObject*)(Py_TYPE(currentArg)))->PTI_info & (pto->PTI_info | PyGLM_T_MVEC)) == ((PyGLMTypeObject*)(Py_TYPE(currentArg)))->PTI_info) { memcpy(dataAsCharPtr + (i * self->itemSize), ((PyGLMTypeObject*)(Py_TYPE(currentArg)))->getDataOf(currentArg), self->itemSize); } else { PyGLM_free(self->data); PyErr_SetString(PyExc_TypeError, "arrays have to be initialized with arguments of the same glm type"); return -1; } } return 0; } // ctypes if (PyGLM_Ctypes_CheckType(firstElementType)) { GLM_ARRAY_INIT_IF_IS_CTYPES_TUPLE_OR_LIST(float); GLM_ARRAY_INIT_IF_IS_CTYPES_TUPLE_OR_LIST(double); GLM_ARRAY_INIT_IF_IS_CTYPES_TUPLE_OR_LIST(int8); GLM_ARRAY_INIT_IF_IS_CTYPES_TUPLE_OR_LIST(int16); GLM_ARRAY_INIT_IF_IS_CTYPES_TUPLE_OR_LIST(int32); GLM_ARRAY_INIT_IF_IS_CTYPES_TUPLE_OR_LIST(int64); GLM_ARRAY_INIT_IF_IS_CTYPES_TUPLE_OR_LIST(uint8); GLM_ARRAY_INIT_IF_IS_CTYPES_TUPLE_OR_LIST(uint16); GLM_ARRAY_INIT_IF_IS_CTYPES_TUPLE_OR_LIST(uint32); GLM_ARRAY_INIT_IF_IS_CTYPES_TUPLE_OR_LIST(uint64); GLM_ARRAY_INIT_IF_IS_CTYPES_TUPLE_OR_LIST(bool); } if (PyType_FastSubclass(firstElementType, Py_TPFLAGS_TYPE_SUBCLASS)) { if (firstElement == ctypes_float) { self->subtype = (PyTypeObject*)firstElement; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init(self, args, argCount)) return 0; return -1; } if (firstElement == ctypes_double) { self->subtype = (PyTypeObject*)firstElement; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init(self, args, argCount)) return 0; return -1; } if (firstElement == ctypes_int8) { self->subtype = (PyTypeObject*)firstElement; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init(self, args, argCount)) return 0; return -1; } if (firstElement == ctypes_int16) { self->subtype = (PyTypeObject*)firstElement; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init(self, args, argCount)) return 0; return -1; } if (firstElement == ctypes_int32) { self->subtype = (PyTypeObject*)firstElement; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init(self, args, argCount)) return 0; return -1; } if (firstElement == ctypes_int64) { self->subtype = (PyTypeObject*)firstElement; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init(self, args, argCount)) return 0; return -1; } if (firstElement == ctypes_uint8) { self->subtype = (PyTypeObject*)firstElement; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init(self, args, argCount)) return 0; return -1; } if (firstElement == ctypes_uint16) { self->subtype = (PyTypeObject*)firstElement; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init(self, args, argCount)) return 0; return -1; } if (firstElement == ctypes_uint32) { self->subtype = (PyTypeObject*)firstElement; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init(self, args, argCount)) return 0; return -1; } if (firstElement == ctypes_uint64) { self->subtype = (PyTypeObject*)firstElement; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init(self, args, argCount)) return 0; return -1; } if (firstElement == ctypes_bool) { self->subtype = (PyTypeObject*)firstElement; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init(self, args, argCount)) return 0; return -1; } } // others if (argCount == 1) { // arrays if (PyGLM_Array_Check(firstElementType)) { glmArray* other = (glmArray*)firstElement; if (other == self) { return 0; } self->dtSize = other->dtSize; memcpy(self->shape, other->shape, sizeof(self->shape)); self->glmType = other->glmType; self->itemCount = other->itemCount; self->itemSize = other->itemSize; self->nBytes = other->nBytes; self->subtype = other->subtype; self->format = other->format; self->data = PyMem_Malloc(self->nBytes); if (self->data == NULL) { PyErr_SetString(PyExc_MemoryError, "array creation failed"); return -1; } memcpy(self->data, other->data, self->nBytes); return 0; } // lists or tuples if (PyGLM_TupleOrList_Check(firstElement)) { return glmArray_init(self, firstElement, NULL); } // buffer protocol if (PyObject_CheckBuffer(firstElement)) { Py_buffer view; if (PyObject_GetBuffer(firstElement, &view, PyBUF_RECORDS_RO) == -1 || view.buf == NULL || view.format == NULL || view.shape == NULL || view.strides == NULL) { PyBuffer_Release(&view); PyErr_SetString(PyExc_BufferError, "invalid buffer"); return -1; } if (view.ndim == 1) { self->itemCount = view.shape[0]; self->format = view.format[0]; if (self->format == 'l') self->format = 'i'; else if (self->format == 'L') self->format = 'I'; self->glmType = PyGLM_TYPE_CTYPES; switch (self->format) { case 'f': GLM_ARRAY_INIT_IF_IS_CTYPES_BUFFER(float); case 'd': GLM_ARRAY_INIT_IF_IS_CTYPES_BUFFER(double); case 'i': GLM_ARRAY_INIT_IF_IS_CTYPES_BUFFER(int32); case 'I': GLM_ARRAY_INIT_IF_IS_CTYPES_BUFFER(uint32); case 'b': GLM_ARRAY_INIT_IF_IS_CTYPES_BUFFER(int8); case 'B': GLM_ARRAY_INIT_IF_IS_CTYPES_BUFFER(uint8); case 'h': GLM_ARRAY_INIT_IF_IS_CTYPES_BUFFER(int16); case 'H': GLM_ARRAY_INIT_IF_IS_CTYPES_BUFFER(uint16); case 'q': GLM_ARRAY_INIT_IF_IS_CTYPES_BUFFER(int64); case 'Q': GLM_ARRAY_INIT_IF_IS_CTYPES_BUFFER(uint64); case '?': GLM_ARRAY_INIT_IF_IS_CTYPES_BUFFER(bool); default: PyGLM_TYPEERROR_O("invalid argument type ", firstElement); PyBuffer_Release(&view); return -1; } } else if (view.ndim == 2) { if (view.shape[1] < 1 || view.shape[1] > 4) { PyErr_SetString(PyExc_ValueError, "invalid buffer shape"); return -1; } self->itemCount = view.shape[0]; int L = static_cast(view.shape[1]); self->shape[0] = static_cast(L); self->format = view.format[0]; if (self->format == 'l') self->format = 'i'; else if (self->format == 'L') self->format = 'I'; self->glmType = PyGLM_TYPE_VEC; switch (self->format) { case 'f': GLM_ARRAY_INIT_IF_IS_VEC_BUFFER(float); case 'd': GLM_ARRAY_INIT_IF_IS_VEC_BUFFER(double); case 'i': GLM_ARRAY_INIT_IF_IS_VEC_BUFFER(int32); case 'I': GLM_ARRAY_INIT_IF_IS_VEC_BUFFER(uint32); case 'b': GLM_ARRAY_INIT_IF_IS_VEC_BUFFER(int8); case 'B': GLM_ARRAY_INIT_IF_IS_VEC_BUFFER(uint8); case 'h': GLM_ARRAY_INIT_IF_IS_VEC_BUFFER(int16); case 'H': GLM_ARRAY_INIT_IF_IS_VEC_BUFFER(uint16); case 'q': GLM_ARRAY_INIT_IF_IS_VEC_BUFFER(int64); case 'Q': GLM_ARRAY_INIT_IF_IS_VEC_BUFFER(uint64); case '?': GLM_ARRAY_INIT_IF_IS_VEC_BUFFER(bool); default: PyGLM_TYPEERROR_O("invalid argument type ", firstElement); PyBuffer_Release(&view); return -1; } } else if (view.ndim == 3) { if (view.shape[1] < 2 || view.shape[1] > 4 || view.shape[2] < 2 || view.shape[2] > 4) { PyErr_SetString(PyExc_ValueError, "invalid buffer shape"); return -1; } self->itemCount = view.shape[0]; int R = static_cast(view.shape[1]); int C = static_cast(view.shape[2]); self->nBytes = view.len; self->dtSize = view.itemsize; self->data = PyMem_Malloc(view.len); if (self->data == NULL) { PyErr_SetString(PyExc_MemoryError, "out of memory"); return -1; } if (view.strides[0] == view.itemsize * C * R && view.strides[1] == view.itemsize && view.strides[2] == view.itemsize * R) { memcpy(self->data, view.buf, view.len); } else { char* dataPtr = (char*)self->data; char* bufPtr = (char*)view.buf; for (Py_ssize_t i0 = 0; i0 < self->itemCount; i0++) { for (Py_ssize_t i1 = 0; i1 < R; i1++) { for (Py_ssize_t i2 = 0; i2 < C; i2++) { Py_ssize_t origOffset = (view.strides[0] * i0 + view.strides[1] * i1 + view.strides[2] * i2); Py_ssize_t targetOffset = (view.itemsize * C * R * i0 + view.itemsize * i1 + view.itemsize * R * i2); memcpy(dataPtr + targetOffset, bufPtr + origOffset, view.itemsize); } } } } self->shape[0] = static_cast(C); self->shape[1] = static_cast(R); self->format = view.format[0]; if (self->format == 'l') self->format = 'i'; else if (self->format == 'L') self->format = 'I'; self->glmType = PyGLM_TYPE_MAT; switch (self->format) { case 'f': GLM_ARRAY_INIT_IF_IS_MAT_BUFFER(float); case 'd': GLM_ARRAY_INIT_IF_IS_MAT_BUFFER(double); case 'i': GLM_ARRAY_INIT_IF_IS_MAT_BUFFER(int32); case 'I': GLM_ARRAY_INIT_IF_IS_MAT_BUFFER(uint32); default: PyGLM_TYPEERROR_O("invalid argument type ", firstElement); PyBuffer_Release(&view); return -1; } } else { PyGLM_TYPEERROR_O("invalid argument type ", firstElement); PyBuffer_Release(&view); return -1; } } // iterators if (PyObject_IterCheck(firstElement)) { argCount = PyObject_Length(firstElement); PyGLM_ASSERT_NO((argCount >= 1), "Iterable needs to have at least one element"); PyObject* iterator = PyObject_GetIter(firstElement); PyObject* firstElement = PyIter_Next(iterator); PyTypeObject* firstElementType = Py_TYPE(firstElement); // PyGLM types if (PyGLM_Is_PyGLM_Type(firstElementType)) { PyGLMTypeObject* pto = (PyGLMTypeObject*)firstElementType; self->itemCount = argCount; self->dtSize = pto->dtSize; self->itemSize = pto->itemSize; self->nBytes = self->itemSize * argCount; self->subtype = pto->subtype; self->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; self->shape[0] = pto->C; self->shape[1] = pto->R; self->format = pto->format; self->data = PyMem_Malloc(self->nBytes); if (self->data == NULL) { PyErr_SetString(PyExc_MemoryError, "array creation failed"); Py_DECREF(iterator); Py_DECREF(firstElement); return -1; } char* dataAsCharPtr = reinterpret_cast(self->data); if (Py_TYPE(firstElement) == self->subtype) { memcpy(dataAsCharPtr, pto->getDataOf(firstElement), self->itemSize); } else if (self->glmType == PyGLM_TYPE_VEC && (((PyGLMTypeObject*)(Py_TYPE(firstElement)))->PTI_info & (pto->PTI_info | PyGLM_T_MVEC)) == ((PyGLMTypeObject*)(Py_TYPE(firstElement)))->PTI_info) { memcpy(dataAsCharPtr, ((PyGLMTypeObject*)(Py_TYPE(firstElement)))->getDataOf(firstElement), self->itemSize); } Py_DECREF(firstElement); for (Py_ssize_t i = 1; i < argCount; i++) { PyObject* currentArg = PyIter_Next(iterator); if (currentArg == NULL) { break; } if (Py_TYPE(currentArg) == self->subtype) { memcpy(dataAsCharPtr + (i * self->itemSize), pto->getDataOf(currentArg), self->itemSize); } else if (self->glmType == PyGLM_TYPE_VEC && (((PyGLMTypeObject*)(Py_TYPE(currentArg)))->PTI_info & (pto->PTI_info | PyGLM_T_MVEC)) == ((PyGLMTypeObject*)(Py_TYPE(currentArg)))->PTI_info) { memcpy(dataAsCharPtr + (i * self->itemSize), ((PyGLMTypeObject*)(Py_TYPE(currentArg)))->getDataOf(currentArg), self->itemSize); } else { PyGLM_free(self->data); PyErr_SetString(PyExc_TypeError, "arrays have to be initialized with arguments of the same glm type"); Py_DECREF(iterator); Py_DECREF(currentArg); return -1; } Py_DECREF(currentArg); } Py_DECREF(iterator); return 0; } // ctypes if (PyGLM_Ctypes_CheckType(firstElementType)) { GLM_ARRAY_INIT_IF_IS_CTYPES_ITER(float); GLM_ARRAY_INIT_IF_IS_CTYPES_ITER(double); GLM_ARRAY_INIT_IF_IS_CTYPES_ITER(int8); GLM_ARRAY_INIT_IF_IS_CTYPES_ITER(int16); GLM_ARRAY_INIT_IF_IS_CTYPES_ITER(int32); GLM_ARRAY_INIT_IF_IS_CTYPES_ITER(int64); GLM_ARRAY_INIT_IF_IS_CTYPES_ITER(uint8); GLM_ARRAY_INIT_IF_IS_CTYPES_ITER(uint16); GLM_ARRAY_INIT_IF_IS_CTYPES_ITER(uint32); GLM_ARRAY_INIT_IF_IS_CTYPES_ITER(uint64); GLM_ARRAY_INIT_IF_IS_CTYPES_ITER(bool); } if (PyType_FastSubclass(firstElementType, Py_TPFLAGS_TYPE_SUBCLASS)) { if (firstElement == ctypes_float) { self->subtype = firstElementType; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init_iter(self, iterator, argCount)) return 0; return -1; } if (firstElement == ctypes_double) { self->subtype = firstElementType; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init_iter(self, iterator, argCount)) return 0; return -1; } if (firstElement == ctypes_int8) { self->subtype = firstElementType; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init_iter(self, iterator, argCount)) return 0; return -1; } if (firstElement == ctypes_int16) { self->subtype = firstElementType; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init_iter(self, iterator, argCount)) return 0; return -1; } if (firstElement == ctypes_int32) { self->subtype = firstElementType; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init_iter(self, iterator, argCount)) return 0; return -1; } if (firstElement == ctypes_int64) { self->subtype = firstElementType; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init_iter(self, iterator, argCount)) return 0; return -1; } if (firstElement == ctypes_uint8) { self->subtype = firstElementType; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init_iter(self, iterator, argCount)) return 0; return -1; } if (firstElement == ctypes_uint16) { self->subtype = firstElementType; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init_iter(self, iterator, argCount)) return 0; return -1; } if (firstElement == ctypes_uint32) { self->subtype = firstElementType; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init_iter(self, iterator, argCount)) return 0; return -1; } if (firstElement == ctypes_uint64) { self->subtype = firstElementType; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init_iter(self, iterator, argCount)) return 0; return -1; } if (firstElement == ctypes_bool) { self->subtype = firstElementType; self->glmType = PyGLM_TYPE_CTYPES; if (glmArray_from_numbers_init_iter(self, iterator, argCount)) return 0; return -1; } } } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for array()"); return -1; } static PyObject* glmArray_new(PyTypeObject* type, PyObject* args, PyObject* kwds) { glmArray* self = (glmArray*)type->tp_alloc(type, 0); if (self != NULL) { self->itemCount = self->nBytes = 0; self->data = NULL; self->subtype = NULL; self->readonly = false; self->reference = NULL; } return (PyObject*)self; } static void glmArrayIter_dealloc(glmArrayIter* rgstate) { Py_XDECREF(rgstate->sequence); Py_TYPE(rgstate)->tp_free(rgstate); } static PyObject* glmArrayIter_next(glmArrayIter* rgstate) { if (rgstate->sequence != NULL) { if (rgstate->seq_index < rgstate->sequence->itemCount) return glmArray_get(rgstate->sequence, rgstate->seq_index++); rgstate->seq_index = rgstate->sequence->itemCount; } Py_CLEAR(rgstate->sequence); return NULL; } static PyObject* glmArrayIter_new(PyTypeObject* type, PyObject* args, PyObject* kwargs) { glmArray* sequence; if (!PyArg_UnpackTuple(args, "__iter__", 1, 1, &sequence)) return NULL; glmArrayIter* rgstate = (glmArrayIter*)type->tp_alloc(type, 0); if (!rgstate) return NULL; rgstate->sequence = sequence; Py_INCREF(sequence); rgstate->seq_index = 0; return (PyObject*)rgstate; } template static Py_hash_t array_hash_ctypes(T* data, Py_ssize_t count) { std::hash hasher; size_t seed = 0; for (Py_ssize_t i = 0; i < count; i++) { glm::detail::hash_combine(seed, hasher(data[i])); } if (seed == static_cast(-1)) { return static_cast(-2); } return static_cast(seed); } template static Py_hash_t array_hash_vec(glm::vec* data, Py_ssize_t count) { std::hash> hasher; size_t seed = 0; for (Py_ssize_t i = 0; i < count; i++) { glm::detail::hash_combine(seed, hasher(data[i])); } if (seed == static_cast(-1)) { return static_cast(-2); } return static_cast(seed); } template static Py_hash_t array_hash_mat(glm::mat* data, Py_ssize_t count) { std::hash> hasher; size_t seed = 0; for (Py_ssize_t i = 0; i < count; i++) { glm::detail::hash_combine(seed, hasher(data[i])); } if (seed == static_cast(-1)) { return static_cast(-2); } return static_cast(seed); } template static Py_hash_t array_hash_qua(glm::qua* data, Py_ssize_t count) { std::hash> hasher; size_t seed = 0; for (Py_ssize_t i = 0; i < count; i++) { glm::detail::hash_combine(seed, hasher(data[i])); } if (seed == static_cast(-1)) { return static_cast(-2); } return static_cast(seed); } static Py_hash_t array_hash(glmArray* self, PyObject*) { uint8& glmType = self->glmType; PyTypeObject*& subtype = self->subtype; if (glmType == PyGLM_TYPE_VEC) { switch (self->shape[0]) { case 1: switch (self->format) { case get_format_specifier() : return array_hash_vec<1, float>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<1, double>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<1, int64>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<1, uint64>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<1, int32>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<1, uint32>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<1, int16>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<1, uint16>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<1, int8>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<1, uint8>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<1, bool>(reinterpret_cast*>(self->data), self->itemCount); } case 2: switch (self->format) { case get_format_specifier() : return array_hash_vec<2, float>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<2, double>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<2, int64>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<2, uint64>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<2, int32>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<2, uint32>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<2, int16>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<2, uint16>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<2, int8>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<2, uint8>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<2, bool>(reinterpret_cast*>(self->data), self->itemCount); } case 3: switch (self->format) { case get_format_specifier() : return array_hash_vec<3, float>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<3, double>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<3, int64>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<3, uint64>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<3, int32>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<3, uint32>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<3, int16>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<3, uint16>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<3, int8>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<3, uint8>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<3, bool>(reinterpret_cast*>(self->data), self->itemCount); } case 4: switch (self->format) { case get_format_specifier() : return array_hash_vec<4, float>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<4, double>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<4, int64>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<4, uint64>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<4, int32>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<4, uint32>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<4, int16>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<4, uint16>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<4, int8>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<4, uint8>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier() : return array_hash_vec<4, bool>(reinterpret_cast*>(self->data), self->itemCount); } } } if (glmType == PyGLM_TYPE_MAT) { switch (self->shape[0]) { case 2: switch (self->shape[1]) { case 2: switch (self->format) { case get_format_specifier(): return array_hash_mat<2, 2, float>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<2, 2, double>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<2, 2, int32>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<2, 2, uint32>(reinterpret_cast*>(self->data), self->itemCount); } case 3: switch (self->format) { case get_format_specifier(): return array_hash_mat<2, 3, float>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<2, 3, double>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<2, 3, int32>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<2, 3, uint32>(reinterpret_cast*>(self->data), self->itemCount); } case 4: switch (self->format) { case get_format_specifier(): return array_hash_mat<2, 4, float>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<2, 4, double>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<2, 4, int32>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<2, 4, uint32>(reinterpret_cast*>(self->data), self->itemCount); } } case 3: switch (self->shape[1]) { case 2: switch (self->format) { case get_format_specifier(): return array_hash_mat<3, 2, float>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<3, 2, double>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<3, 2, int32>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<3, 2, uint32>(reinterpret_cast*>(self->data), self->itemCount); } case 3: switch (self->format) { case get_format_specifier(): return array_hash_mat<3, 3, float>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<3, 3, double>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<3, 3, int32>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<3, 3, uint32>(reinterpret_cast*>(self->data), self->itemCount); } case 4: switch (self->format) { case get_format_specifier(): return array_hash_mat<3, 4, float>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<3, 4, double>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<3, 4, int32>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<3, 4, uint32>(reinterpret_cast*>(self->data), self->itemCount); } } case 4: switch (self->shape[1]) { case 2: switch (self->format) { case get_format_specifier(): return array_hash_mat<4, 2, float>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<4, 2, double>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<4, 2, int32>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<4, 2, uint32>(reinterpret_cast*>(self->data), self->itemCount); } case 3: switch (self->format) { case get_format_specifier(): return array_hash_mat<4, 3, float>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<4, 3, double>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<4, 3, int32>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<4, 3, uint32>(reinterpret_cast*>(self->data), self->itemCount); } case 4: switch (self->format) { case get_format_specifier(): return array_hash_mat<4, 4, float>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<4, 4, double>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<4, 4, int32>(reinterpret_cast*>(self->data), self->itemCount); case get_format_specifier(): return array_hash_mat<4, 4, uint32>(reinterpret_cast*>(self->data), self->itemCount); } } } } if (glmType == PyGLM_TYPE_QUA) { if (subtype == PyGLM_QUA_TYPE()) return array_hash_qua(reinterpret_cast*>(self->data), self->itemCount); if (subtype == PyGLM_QUA_TYPE()) return array_hash_qua(reinterpret_cast*>(self->data), self->itemCount); } if (glmType == PyGLM_TYPE_CTYPES) { if (subtype == PyGLM_CTYPES_TYPE()) return array_hash_ctypes(reinterpret_cast(self->data), self->itemCount); if (subtype == PyGLM_CTYPES_TYPE()) return array_hash_ctypes(reinterpret_cast(self->data), self->itemCount); if (subtype == PyGLM_CTYPES_TYPE()) return array_hash_ctypes(reinterpret_cast(self->data), self->itemCount); if (subtype == PyGLM_CTYPES_TYPE()) return array_hash_ctypes(reinterpret_cast(self->data), self->itemCount); if (subtype == PyGLM_CTYPES_TYPE()) return array_hash_ctypes(reinterpret_cast(self->data), self->itemCount); if (subtype == PyGLM_CTYPES_TYPE()) return array_hash_ctypes(reinterpret_cast(self->data), self->itemCount); if (subtype == PyGLM_CTYPES_TYPE()) return array_hash_ctypes(reinterpret_cast(self->data), self->itemCount); if (subtype == PyGLM_CTYPES_TYPE()) return array_hash_ctypes(reinterpret_cast(self->data), self->itemCount); if (subtype == PyGLM_CTYPES_TYPE()) return array_hash_ctypes(reinterpret_cast(self->data), self->itemCount); if (subtype == PyGLM_CTYPES_TYPE()) return array_hash_ctypes(reinterpret_cast(self->data), self->itemCount); if (subtype == PyGLM_CTYPES_TYPE()) return array_hash_ctypes(reinterpret_cast(self->data), self->itemCount); } return -1; } static PyObject* glmArray_filter(glmArray* self, PyObject* func) { std::vector outObjects{}; if (PyCallable_Check(func)) { PyObject* argTuple = PyTuple_New(1); for (Py_ssize_t i = 0; i < self->itemCount; i++) { PyObject* currentItem = glmArray_get(self, i); // Abusing the SET_ITEM macro for increased performance PyTuple_SET_ITEM(argTuple, 0, currentItem); PyObject* filterResult = PyObject_CallObject(func, argTuple); if (filterResult == NULL) { Py_DECREF(currentItem); Py_DECREF(argTuple); return NULL; } bool filterResultAsBool; if (PyBool_Check(filterResult)) { filterResultAsBool = (filterResult == Py_True); } else { int filterResultAsInt = PyObject_IsTrue(filterResult); if (filterResultAsInt == -1) { PyErr_SetString(PyExc_ValueError, "The result of the filter function could not be interpreted as bool."); return NULL; } filterResultAsBool = static_cast(filterResultAsInt); } Py_DECREF(filterResult); if (filterResultAsBool) { outObjects.push_back(currentItem); } else { Py_DECREF(currentItem); } } // Setting the first argument of the abused tuple to NULL to avoid memory corruption when DECREF is called PyTuple_SET_ITEM(argTuple, 0, NULL); Py_DECREF(argTuple); const size_t outObjectsSize = outObjects.size(); if (outObjectsSize) { PyObject* firstOutObject = outObjects[0]; if (PyLong_CheckExact(firstOutObject) || PyFloat_CheckExact(firstOutObject) || PyBool_Check(firstOutObject)) { // for number values PyObject* fromNumbersArgs = PyTuple_New(outObjectsSize + 1); PyTuple_SET_ITEM(fromNumbersArgs, 0, PyGLM_INCREF((PyObject*)self->subtype)); for (size_t i = 0; i < outObjectsSize; i++) { PyTuple_SET_ITEM(fromNumbersArgs, i + 1, outObjects[i]); } PyObject* out = glmArray_from_numbers(NULL, fromNumbersArgs); Py_DECREF(fromNumbersArgs); if (out == NULL) { PyErr_SetString(PyExc_ValueError, "Failed to construct the array from the filtered values. This should not occur."); return NULL; } return out; } // for other values PyObject* args = PyTuple_New(outObjectsSize); for (size_t i = 0; i < outObjectsSize; i++) { PyTuple_SET_ITEM(args, i, outObjects[i]); } glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); int initResult = glmArray_init(outArray, args, NULL); Py_DECREF(args); if (initResult == 0) { return (PyObject*)outArray; } PyErr_SetString(PyExc_ValueError, "Failed to construct the array from the filtered values. This should not occur."); return NULL; } // for empty results glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = self->dtSize; outArray->format = self->format; outArray->glmType = self->glmType; outArray->itemSize = self->itemSize; outArray->shape[0] = self->shape[0]; outArray->shape[1] = self->shape[1]; outArray->subtype = self->subtype; return (PyObject*)outArray; } PyGLM_TYPEERROR_O("Invalid argument type for filter(). Expected callable, got ", func); return NULL; } static PyObject* glmArray_map_binary(glmArray* self, PyObject* func, PyObject* arg, PyObject* requested_ctypes_type) { std::vector outObjects{}; PyObject* argTuple = PyTuple_New(2); if (PyCallable_Check(func)) { if (PyObject_TypeCheck(arg, &glmArrayType)) { // arg is an array glmArray* other = (glmArray*)arg; if (other->itemCount != self->itemCount) { PyErr_SetString(PyExc_ValueError, "Invalid argument value for 'map_binary()'. The supplied array doesn't have the same item count as this one."); return NULL; } for (Py_ssize_t i = 0; i < self->itemCount; i++) { PyObject* currentItem1 = glmArray_get(self, i); PyObject* currentItem2 = glmArray_get(other, i); // Abusing the SET_ITEM macro for increased performance PyTuple_SET_ITEM(argTuple, 0, currentItem1); PyTuple_SET_ITEM(argTuple, 1, currentItem2); PyObject* mapResult = PyObject_CallObject(func, argTuple); if (mapResult == NULL) { return NULL; } if (mapResult != Py_None) { if (PyTuple_Check(mapResult)) { for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(mapResult); i++) { outObjects.push_back(PyGLM_INCREF(PyTuple_GET_ITEM(mapResult, i))); } Py_DECREF(mapResult); } else { outObjects.push_back(mapResult); } } else { Py_DECREF(mapResult); } Py_DECREF(currentItem1); Py_DECREF(currentItem2); } } else { // arg is a constant second argument PyTuple_SET_ITEM(argTuple, 1, arg); for (Py_ssize_t i = 0; i < self->itemCount; i++) { PyObject* currentItem = glmArray_get(self, i); // Abusing the SET_ITEM macro for increased performance PyTuple_SET_ITEM(argTuple, 0, currentItem); PyObject* mapResult = PyObject_CallObject(func, argTuple); if (mapResult == NULL) { return NULL; } if (mapResult != Py_None) { if (PyTuple_Check(mapResult)) { for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(mapResult); i++) { outObjects.push_back(PyGLM_INCREF(PyTuple_GET_ITEM(mapResult, i))); } Py_DECREF(mapResult); } else { outObjects.push_back(mapResult); } } else { Py_DECREF(mapResult); } Py_DECREF(currentItem); } } // Setting the items of the abused tuple to NULL to avoid memory corruption when DECREF is called PyTuple_SET_ITEM(argTuple, 0, NULL); PyTuple_SET_ITEM(argTuple, 1, NULL); Py_DECREF(argTuple); const size_t outObjectsSize = outObjects.size(); if (outObjectsSize) { PyObject* firstOutObject = outObjects[0]; if (PyLong_CheckExact(firstOutObject) || PyFloat_CheckExact(firstOutObject) || PyBool_Check(firstOutObject)) { // for number values if (requested_ctypes_type == NULL) { requested_ctypes_type = glmArray_getCtype(self, NULL); } PyObject* fromNumbersArgs = PyTuple_New(outObjectsSize + 1); PyTuple_SET_ITEM(fromNumbersArgs, 0, requested_ctypes_type); for (size_t i = 0; i < outObjectsSize; i++) { PyTuple_SET_ITEM(fromNumbersArgs, i + 1, outObjects[i]); } PyObject* out = glmArray_from_numbers(NULL, fromNumbersArgs); Py_DECREF(fromNumbersArgs); if (out == NULL) { PyErr_SetString(PyExc_ValueError, "Failed to construct the array from the mapped values. They're probably not of the same type!"); return NULL; } return out; } // for other values PyObject* args = PyTuple_New(outObjectsSize); for (size_t i = 0; i < outObjectsSize; i++) { PyTuple_SET_ITEM(args, i, outObjects[i]); } glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); int initResult = glmArray_init(outArray, args, NULL); Py_DECREF(args); if (initResult == 0) { return (PyObject*)outArray; } PyErr_SetString(PyExc_ValueError, "Failed to construct the array from the mapped values. They're probably not of the same type!"); return NULL; } // for empty results glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = self->dtSize; outArray->format = self->format; outArray->glmType = self->glmType; outArray->itemSize = self->itemSize; outArray->shape[0] = self->shape[0]; outArray->shape[1] = self->shape[1]; outArray->subtype = self->subtype; return (PyObject*)outArray; } PyGLM_TYPEERROR_2O("Invalid argument type for map_binary(). Expected callable, got ", func, arg); return NULL; } static PyObject* glmArray_map_ternary(glmArray* self, PyObject* func, PyObject* arg1, PyObject* arg2, PyObject* requested_ctypes_type) { std::vector outObjects{}; PyObject* argTuple = PyTuple_New(3); if (PyCallable_Check(func)) { if (PyObject_TypeCheck(arg1, &glmArrayType)) { // arg1 is an array glmArray* other1 = (glmArray*)arg1; if (other1->itemCount != self->itemCount) { PyErr_SetString(PyExc_ValueError, "Invalid argument value for 'map_ternary()'. One of the supplied arrays doesn't have the same item count as this one."); return NULL; } if (PyObject_TypeCheck(arg2, &glmArrayType)) { // arg2 is an array glmArray* other2 = (glmArray*)arg2; if (other2->itemCount != self->itemCount) { PyErr_SetString(PyExc_ValueError, "Invalid argument value for 'map_ternary()'. One of the supplied arrays doesn't have the same item count as this one."); return NULL; } for (Py_ssize_t i = 0; i < self->itemCount; i++) { PyObject* currentItem1 = glmArray_get(self, i); PyObject* currentItem2 = glmArray_get(other1, i); PyObject* currentItem3 = glmArray_get(other2, i); // Abusing the SET_ITEM macro for increased performance PyTuple_SET_ITEM(argTuple, 0, currentItem1); PyTuple_SET_ITEM(argTuple, 1, currentItem2); PyTuple_SET_ITEM(argTuple, 2, currentItem3); PyObject* mapResult = PyObject_CallObject(func, argTuple); if (mapResult == NULL) { return NULL; } if (mapResult != Py_None) { if (PyTuple_Check(mapResult)) { for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(mapResult); i++) { outObjects.push_back(PyGLM_INCREF(PyTuple_GET_ITEM(mapResult, i))); } Py_DECREF(mapResult); } else { outObjects.push_back(mapResult); } } else { Py_DECREF(mapResult); } Py_DECREF(currentItem1); Py_DECREF(currentItem2); Py_DECREF(currentItem3); } } else { // arg2 is a constant third argument PyTuple_SET_ITEM(argTuple, 2, arg2); for (Py_ssize_t i = 0; i < self->itemCount; i++) { PyObject* currentItem1 = glmArray_get(self, i); PyObject* currentItem2 = glmArray_get(other1, i); // Abusing the SET_ITEM macro for increased performance PyTuple_SET_ITEM(argTuple, 0, currentItem1); PyTuple_SET_ITEM(argTuple, 1, currentItem2); PyObject* mapResult = PyObject_CallObject(func, argTuple); if (mapResult == NULL) { return NULL; } if (mapResult != Py_None) { if (PyTuple_Check(mapResult)) { for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(mapResult); i++) { outObjects.push_back(PyGLM_INCREF(PyTuple_GET_ITEM(mapResult, i))); } Py_DECREF(mapResult); } else { outObjects.push_back(mapResult); } } else { Py_DECREF(mapResult); } Py_DECREF(currentItem1); Py_DECREF(currentItem2); } } } else { // arg1 is a constant second argument PyTuple_SET_ITEM(argTuple, 1, arg1); if (PyObject_TypeCheck(arg2, &glmArrayType)) { glmArray* other = (glmArray*)arg2; if (other->itemCount != self->itemCount) { PyErr_SetString(PyExc_ValueError, "Invalid argument value for 'map_ternary()'. The supplied array doesn't have the same item count as this one."); return NULL; } for (Py_ssize_t i = 0; i < self->itemCount; i++) { PyObject* currentItem1 = glmArray_get(self, i); PyObject* currentItem3 = glmArray_get(other, i); // Abusing the SET_ITEM macro for increased performance PyTuple_SET_ITEM(argTuple, 0, currentItem1); PyTuple_SET_ITEM(argTuple, 2, currentItem3); PyObject* mapResult = PyObject_CallObject(func, argTuple); if (mapResult == NULL) { return NULL; } if (mapResult != Py_None) { if (PyTuple_Check(mapResult)) { for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(mapResult); i++) { outObjects.push_back(PyGLM_INCREF(PyTuple_GET_ITEM(mapResult, i))); } Py_DECREF(mapResult); } else { outObjects.push_back(mapResult); } } else { Py_DECREF(mapResult); } Py_DECREF(currentItem1); Py_DECREF(currentItem3); } } else { PyTuple_SET_ITEM(argTuple, 2, arg2); for (Py_ssize_t i = 0; i < self->itemCount; i++) { PyObject* currentItem = glmArray_get(self, i); // Abusing the SET_ITEM macro for increased performance PyTuple_SET_ITEM(argTuple, 0, currentItem); PyObject* mapResult = PyObject_CallObject(func, argTuple); if (mapResult == NULL) { return NULL; } if (mapResult != Py_None) { if (PyTuple_Check(mapResult)) { for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(mapResult); i++) { outObjects.push_back(PyGLM_INCREF(PyTuple_GET_ITEM(mapResult, i))); } Py_DECREF(mapResult); } else { outObjects.push_back(mapResult); } } else { Py_DECREF(mapResult); } Py_DECREF(currentItem); } } } // Setting the items of the abused tuple to NULL to avoid memory corruption when DECREF is called PyTuple_SET_ITEM(argTuple, 0, NULL); PyTuple_SET_ITEM(argTuple, 1, NULL); PyTuple_SET_ITEM(argTuple, 2, NULL); Py_DECREF(argTuple); const size_t outObjectsSize = outObjects.size(); if (outObjectsSize) { PyObject* firstOutObject = outObjects[0]; if (PyLong_CheckExact(firstOutObject) || PyFloat_CheckExact(firstOutObject) || PyBool_Check(firstOutObject)) { // for number values if (requested_ctypes_type == NULL) { requested_ctypes_type = glmArray_getCtype(self, NULL); } PyObject* fromNumbersArgs = PyTuple_New(outObjectsSize + 1); PyTuple_SET_ITEM(fromNumbersArgs, 0, requested_ctypes_type); for (size_t i = 0; i < outObjectsSize; i++) { PyTuple_SET_ITEM(fromNumbersArgs, i + 1, outObjects[i]); } PyObject* out = glmArray_from_numbers(NULL, fromNumbersArgs); Py_DECREF(fromNumbersArgs); if (out == NULL) { PyErr_SetString(PyExc_ValueError, "Failed to construct the array from the mapped values. They're probably not of the same type!"); return NULL; } return out; } // for other values PyObject* args = PyTuple_New(outObjectsSize); for (size_t i = 0; i < outObjectsSize; i++) { PyTuple_SET_ITEM(args, i, outObjects[i]); } glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); int initResult = glmArray_init(outArray, args, NULL); Py_DECREF(args); if (initResult == 0) { return (PyObject*)outArray; } PyErr_SetString(PyExc_ValueError, "Failed to construct the array from the mapped values. They're probably not of the same type!"); return NULL; } // for empty results glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = self->dtSize; outArray->format = self->format; outArray->glmType = self->glmType; outArray->itemSize = self->itemSize; outArray->shape[0] = self->shape[0]; outArray->shape[1] = self->shape[1]; outArray->subtype = self->subtype; return (PyObject*)outArray; } PyErr_SetString(PyExc_TypeError, "Invalid argument type(s) for 'map_ternary()'. Expected a function and two other objects."); return NULL; } static PyObject* glmArray_map_varargs(glmArray* self, PyObject* args, PyObject* requested_ctypes_type) { Py_ssize_t argsSize = PyTuple_GET_SIZE(args); PyObject* func = PyTuple_GET_ITEM(args, 0); std::vector outObjects{}; PyObject* argTuple = PyTuple_New(argsSize); if (PyCallable_Check(func)) { std::vector arrayArgumentIndices{}; for (Py_ssize_t i = 1; i < argsSize; i++) { PyObject* currentItem = PyTuple_GET_ITEM(args, i); if (PyObject_TypeCheck(currentItem, &glmArrayType)) { if (((glmArray*)currentItem)->itemCount != self->itemCount) { PyErr_SetString(PyExc_ValueError, "Invalid argument value for 'map_varargs()'. One of the supplied arrays doesn't have the same item count as this one."); return NULL; } arrayArgumentIndices.push_back(i); } else { PyTuple_SET_ITEM(argTuple, i, currentItem); } } for (Py_ssize_t i = 0; i < self->itemCount; i++) { PyObject* currentItemSelf = glmArray_get(self, i); // Abusing the SET_ITEM macro for increased performance PyTuple_SET_ITEM(argTuple, 0, currentItemSelf); for (Py_ssize_t arrayArgumentIndex : arrayArgumentIndices) { glmArray* currentArray = (glmArray*)PyTuple_GET_ITEM(args, arrayArgumentIndex); PyObject* currentArrayItem = glmArray_get(currentArray, i); PyTuple_SET_ITEM(argTuple, arrayArgumentIndex, currentArrayItem); } PyObject* mapResult = PyObject_CallObject(func, argTuple); if (mapResult == NULL) { return NULL; } if (mapResult != Py_None) { if (PyTuple_Check(mapResult)) { for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(mapResult); i++) { outObjects.push_back(PyGLM_INCREF(PyTuple_GET_ITEM(mapResult, i))); } Py_DECREF(mapResult); } else { outObjects.push_back(mapResult); } } else { Py_DECREF(mapResult); } Py_DECREF(currentItemSelf); for (Py_ssize_t arrayArgumentIndex : arrayArgumentIndices) { Py_DECREF(PyTuple_GET_ITEM(argTuple, arrayArgumentIndex)); } } // Setting the items of the abused tuple to NULL to avoid memory corruption when DECREF is called for (Py_ssize_t i = 0; i < argsSize; i++) { PyTuple_SET_ITEM(argTuple, i, NULL); } Py_DECREF(argTuple); const size_t outObjectsSize = outObjects.size(); if (outObjectsSize) { PyObject* firstOutObject = outObjects[0]; if (PyLong_CheckExact(firstOutObject) || PyFloat_CheckExact(firstOutObject) || PyBool_Check(firstOutObject)) { // for number values if (requested_ctypes_type == NULL) { requested_ctypes_type = glmArray_getCtype(self, NULL); } PyObject* fromNumbersArgs = PyTuple_New(outObjectsSize + 1); PyTuple_SET_ITEM(fromNumbersArgs, 0, requested_ctypes_type); for (size_t i = 0; i < outObjectsSize; i++) { PyTuple_SET_ITEM(fromNumbersArgs, i + 1, outObjects[i]); } PyObject* out = glmArray_from_numbers(NULL, fromNumbersArgs); Py_DECREF(fromNumbersArgs); if (out == NULL) { PyErr_SetString(PyExc_ValueError, "Failed to construct the array from the mapped values. They're probably not of the same type!"); return NULL; } return out; } // for other values PyObject* args = PyTuple_New(outObjectsSize); for (size_t i = 0; i < outObjectsSize; i++) { PyTuple_SET_ITEM(args, i, outObjects[i]); } glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); int initResult = glmArray_init(outArray, args, NULL); Py_DECREF(args); if (initResult == 0) { return (PyObject*)outArray; } PyErr_SetString(PyExc_ValueError, "Failed to construct the array from the mapped values. They're probably not of the same type!"); return NULL; } // for empty results glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = self->dtSize; outArray->format = self->format; outArray->glmType = self->glmType; outArray->itemSize = self->itemSize; outArray->shape[0] = self->shape[0]; outArray->shape[1] = self->shape[1]; outArray->subtype = self->subtype; return (PyObject*)outArray; } PyGLM_TYPEERROR_O("Invalid argument type for map_varargs(). Expected callable, got ", func); return NULL; } static PyObject* glmArray_map(glmArray* self, PyObject* args, PyObject* kwargs) { PyObject* requested_ctypes_type = NULL; if (kwargs != NULL && PyDict_Size(kwargs) != 0) { PyGLM_ASSERT(PyDict_Size(kwargs) == 1, "Invalid keyword arguments for map()"); requested_ctypes_type = PyDict_GetItemString(kwargs, "ctype"); PyGLM_ASSERT(requested_ctypes_type != NULL, "Invalid keyword argument for map()"); PyGLM_ASSERT(PyType_Check(requested_ctypes_type) && ((PyTypeObject*)requested_ctypes_type)->tp_dealloc == ctypes_dealloc, "Invalid argument value for 'ctype'. Expected a ctypes data type."); } Py_ssize_t argsSize = PyTuple_GET_SIZE(args); switch (argsSize) { case 0: PyErr_SetString(PyExc_TypeError, "Invalid argument count for map(). Expected one or more arguments, got 0"); return NULL; case 1: break; case 2: return glmArray_map_binary(self, PyTuple_GET_ITEM(args, 0), PyTuple_GET_ITEM(args, 1), requested_ctypes_type); case 3: return glmArray_map_ternary(self, PyTuple_GET_ITEM(args, 0), PyTuple_GET_ITEM(args, 1), PyTuple_GET_ITEM(args, 2), requested_ctypes_type); default: return glmArray_map_varargs(self, args, requested_ctypes_type); } PyObject* func = PyTuple_GET_ITEM(args, 0); std::vector outObjects{}; PyObject* argTuple = PyTuple_New(1); if (PyCallable_Check(func)) { for (Py_ssize_t i = 0; i < self->itemCount; i++) { PyObject* currentItem = glmArray_get(self, i); // Abusing the SET_ITEM macro for increased performance PyTuple_SET_ITEM(argTuple, 0, currentItem); PyObject* mapResult = PyObject_CallObject(func, argTuple); if (mapResult == NULL) { return NULL; } if (mapResult != Py_None) { if (PyTuple_Check(mapResult)) { for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(mapResult); i++) { outObjects.push_back(PyGLM_INCREF(PyTuple_GET_ITEM(mapResult, i))); } Py_DECREF(mapResult); } else { outObjects.push_back(mapResult); } } else { Py_DECREF(mapResult); } Py_DECREF(currentItem); } // Setting the first argument of the abused tuple to NULL to avoid memory corruption when DECREF is called PyTuple_SET_ITEM(argTuple, 0, NULL); Py_DECREF(argTuple); const size_t outObjectsSize = outObjects.size(); if (outObjectsSize) { PyObject* firstOutObject = outObjects[0]; if (PyLong_CheckExact(firstOutObject) || PyFloat_CheckExact(firstOutObject) || PyBool_Check(firstOutObject)) { // for number values if (requested_ctypes_type == NULL) { requested_ctypes_type = glmArray_getCtype(self, NULL); } PyObject* fromNumbersArgs = PyTuple_New(outObjectsSize + 1); PyTuple_SET_ITEM(fromNumbersArgs, 0, requested_ctypes_type); for (size_t i = 0; i < outObjectsSize; i++) { PyTuple_SET_ITEM(fromNumbersArgs, i + 1, outObjects[i]); } PyObject* out = glmArray_from_numbers(NULL, fromNumbersArgs); Py_DECREF(fromNumbersArgs); if (out == NULL) { PyErr_SetString(PyExc_ValueError, "Failed to construct the array from the mapped values. They're probably not of the same type!"); return NULL; } return out; } // for other values PyObject* args = PyTuple_New(outObjectsSize); for (size_t i = 0; i < outObjectsSize; i++) { PyTuple_SET_ITEM(args, i, outObjects[i]); } glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); int initResult = glmArray_init(outArray, args, NULL); Py_DECREF(args); if (initResult == 0) { return (PyObject*)outArray; } PyErr_SetString(PyExc_ValueError, "Failed to construct the array from the mapped values. They're probably not of the same type!"); return NULL; } // for empty results glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = self->dtSize; outArray->format = self->format; outArray->glmType = self->glmType; outArray->itemSize = self->itemSize; outArray->shape[0] = self->shape[0]; outArray->shape[1] = self->shape[1]; outArray->subtype = self->subtype; return (PyObject*)outArray; } PyGLM_TYPEERROR_O("Invalid argument type for map(). Expected callable, got ", func); return NULL; } static int compare(PyObject* func, PyObject* funcArgs, long& cmp) { PyObject* comparisonResult = PyObject_CallObject(func, funcArgs); if (comparisonResult == NULL) { PyTuple_SET_ITEM(funcArgs, 0, NULL); PyTuple_SET_ITEM(funcArgs, 1, NULL); Py_DECREF(funcArgs); return -1; } if (!PyLong_Check(comparisonResult)) { PyGLM_TYPEERROR_O("The ordering function returned an invalid argument of type ", comparisonResult); Py_DECREF(comparisonResult); PyTuple_SET_ITEM(funcArgs, 0, NULL); PyTuple_SET_ITEM(funcArgs, 1, NULL); Py_DECREF(funcArgs); return -1; } cmp = PyLong_AS_LONG(comparisonResult); Py_DECREF(comparisonResult); return 0; } static int insertionSort(std::vector& in, PyObject* func) { const Py_ssize_t inSize = in.size(); PyObject* x, * y; PyObject* funcArgs = PyTuple_New(2); int i, j; long cmp; for (i = 1; i < inSize; i++) { x = in[i]; j = i - 1; PyTuple_SET_ITEM(funcArgs, 0, x); while (j >= 0) { y = in[j]; PyTuple_SET_ITEM(funcArgs, 1, y); if (compare(func, funcArgs, cmp) < 0) { return -1; } if (cmp < 0) { in[j + 1] = in[j]; j--; } else { break; } } in[j + 1] = x; } PyTuple_SET_ITEM(funcArgs, 0, NULL); PyTuple_SET_ITEM(funcArgs, 1, NULL); Py_DECREF(funcArgs); return 0; } static inline void qs_swap(std::vector& in, int i, int j) { if (i != j) { PyObject* t = in[i]; in[i] = in[j]; in[j] = t; } } static int iquickSort(std::vector& in, PyObject* func) { const size_t inSize = in.size(); int l = 0; int h = static_cast(inSize) - 1; if (inSize <= 1) { return 0; } int* stack = reinterpret_cast(PyMem_Malloc(inSize * sizeof(int))); if (stack == NULL) { PyErr_SetString(PyExc_MemoryError, "Out of memory"); return -1; } int top = 0; stack[top] = l; stack[++top] = h; int p, i, pivot; long cmp; PyObject* x, *y; PyObject* funcArgs = PyTuple_New(2); while (top >= 0) { h = stack[top--]; l = stack[top--]; pivot = (h + l) / 2; qs_swap(in, pivot, h); y = in[h]; i = l; PyTuple_SET_ITEM(funcArgs, 1, y); for (int j = l; j < h; j++) { x = in[j]; PyTuple_SET_ITEM(funcArgs, 0, x); if (compare(func, funcArgs, cmp) < 0) { PyMem_Free(stack); return -1; } if (cmp < 0) { qs_swap(in, i++, j); } } p = i; qs_swap(in, p, h); if (p - 1 > l) { stack[++top] = l; stack[++top] = p - 1; } if (p + 1 < h) { stack[++top] = p + 1; stack[++top] = h; } } PyTuple_SET_ITEM(funcArgs, 0, NULL); PyTuple_SET_ITEM(funcArgs, 1, NULL); Py_DECREF(funcArgs); PyMem_Free(stack); return 0; } static Py_ssize_t getSortedElementCount(std::vector& in, PyObject* func) { const size_t inSize = in.size(); Py_ssize_t sortedCount = 0; PyObject* funcArgs = PyTuple_New(2); long cmp; for (size_t i = 0; i < inSize - 1; i++) { PyTuple_SET_ITEM(funcArgs, 0, in[i]); PyTuple_SET_ITEM(funcArgs, 1, in[i + 1]); if (compare(func, funcArgs, cmp) < 0) { return -1; } if (cmp <= 0) { sortedCount++; } } PyTuple_SET_ITEM(funcArgs, 0, NULL); PyTuple_SET_ITEM(funcArgs, 1, NULL); Py_DECREF(funcArgs); return sortedCount; } static PyObject* glmArray_sort(glmArray* self, PyObject* func) { if (PyCallable_Check(func)) { std::vector inObjects{}; for (Py_ssize_t i = 0; i < self->itemCount; i++) { PyObject* tmp = glmArray_get(self, i); if (tmp == NULL) { for (size_t i = 0; i < inObjects.size(); i++) { Py_DECREF(inObjects[i]); } return NULL; } inObjects.push_back(tmp); } Py_ssize_t sortedCount = getSortedElementCount(inObjects, func); Py_ssize_t toBeSortedCount = (self->itemCount - 1) - sortedCount; if (sortedCount == -1) { for (Py_ssize_t i = 0; i < self->itemCount; i++) { Py_DECREF(inObjects[i]); } return NULL; } if (toBeSortedCount == 0) { // already sorted } else if (sortedCount == 0) { std::reverse(inObjects.begin(), inObjects.end()); } else { if (std::min(sortedCount, toBeSortedCount) <= 100) { // little to sort. Use insertion sort if (sortedCount < toBeSortedCount) { // reverse if fewer sorted than to be sorted std::reverse(inObjects.begin(), inObjects.end()); } if (insertionSort(inObjects, func) == -1) { for (Py_ssize_t i = 0; i < self->itemCount; i++) { Py_DECREF(inObjects[i]); } return NULL; } } else { // otherwise, use quicksort if (iquickSort(inObjects, func) == -1) { for (Py_ssize_t i = 0; i < self->itemCount; i++) { Py_DECREF(inObjects[i]); } return NULL; } } } for (Py_ssize_t i = 0; i < self->itemCount; i++) { glmArray_set(self, i, inObjects[i]); Py_DECREF(inObjects[i]); } Py_RETURN_NONE; } PyGLM_TYPEERROR_O("Invalid argument type for sort(). Expected callable, got ", func); return NULL; } template static PyObject* glmArray_add_T(glmArray* arr1, glmArray* arr2) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr1->dtSize; outArray->format = arr1->format; outArray->itemCount = arr1->itemCount; outArray->readonly = false; outArray->reference = NULL; if (arr1->nBytes > arr2->nBytes || arr1->glmType == PyGLM_TYPE_VEC) { outArray->glmType = arr1->glmType; outArray->itemSize = arr1->itemSize; outArray->nBytes = arr1->nBytes; outArray->subtype = arr1->subtype; outArray->shape[0] = arr1->shape[0]; outArray->shape[1] = arr1->shape[1]; } else { outArray->glmType = arr2->glmType; outArray->itemSize = arr2->itemSize; outArray->nBytes = arr2->nBytes; outArray->subtype = arr2->subtype; outArray->shape[0] = arr2->shape[0]; outArray->shape[1] = arr2->shape[1]; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arr1DataPtr = (T*)arr1->data; T* arr2DataPtr = (T*)arr2->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arr1Ratio = arr1->itemSize / outArray->dtSize; Py_ssize_t arr2Ratio = arr2->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = arr1DataPtr[i * arr1Ratio + (j % arr1Ratio)] + arr2DataPtr[i * arr2Ratio + (j % arr2Ratio)]; } } return (PyObject*)outArray; } template static PyObject* glmArray_addO_T(glmArray* arr, T* o, Py_ssize_t o_size, PyGLMTypeObject* pto) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; if ((size_t)arr->itemSize / sizeof(T) > (size_t)o_size || arr->glmType == PyGLM_TYPE_VEC || pto == NULL) { outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; } else { PyGLM_ASSERT(pto != ((PyGLMTypeObject *) NULL), "pto is NULL. This should never occur!"); outArray->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemCount * outArray->itemSize; outArray->subtype = pto->subtype; outArray->shape[0] = pto->C; outArray->shape[1] = pto->R; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arrRatio = arr->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = arrDataPtr[i * arrRatio + (j % arrRatio)] + o[j % o_size]; } } return (PyObject*)outArray; } static PyObject* glmArray_add(PyObject* obj1, PyObject* obj2) { if (PyObject_TypeCheck(obj1, &glmArrayType)) { // obj1 is an array glmArray* arr1 = (glmArray*)obj1; if (PyObject_TypeCheck(obj2, &glmArrayType)) { // obj2 is an array glmArray* arr2 = (glmArray*)obj2; if (arr1->itemCount != arr2->itemCount) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same amount of elements."); return NULL; } if (arr1->format != arr2->format) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same data type."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || arr2->glmType == PyGLM_TYPE_CTYPES || arr1->subtype == arr2->subtype) { switch (arr1->format) { case get_format_specifier() : return glmArray_add_T(arr1, arr2); case get_format_specifier() : return glmArray_add_T(arr1, arr2); case get_format_specifier() : return glmArray_add_T(arr1, arr2); case get_format_specifier() : return glmArray_add_T(arr1, arr2); case get_format_specifier() : return glmArray_add_T(arr1, arr2); case get_format_specifier() : return glmArray_add_T(arr1, arr2); case get_format_specifier() : return glmArray_add_T(arr1, arr2); case get_format_specifier() : return glmArray_add_T(arr1, arr2); case get_format_specifier() : return glmArray_add_T(arr1, arr2); case get_format_specifier() : return glmArray_add_T(arr1, arr2); case get_format_specifier() : return glmArray_add_T(arr1, arr2); } } PyErr_SetString(PyExc_ValueError, "The given arrays are not compatible."); return NULL; } if (PyGLM_Number_Check(obj2)) { union { float f; double d; int64 i64; uint64 u64; int32 i32; uint32 u32; int16 i16; uint16 u16; int8 i8; uint8 u8; bool b; }; switch (arr1->format) { case get_format_specifier() : f = PyGLM_Number_FromPyObject(obj2); return glmArray_addO_T(arr1, &f, 1, NULL); case get_format_specifier() : d = PyGLM_Number_FromPyObject(obj2); return glmArray_addO_T(arr1, &d, 1, NULL); case get_format_specifier() : i64 = PyGLM_Number_FromPyObject(obj2); return glmArray_addO_T(arr1, &i64, 1, NULL); case get_format_specifier() : u64 = PyGLM_Number_FromPyObject(obj2); return glmArray_addO_T(arr1, &u64, 1, NULL); case get_format_specifier() : i32 = PyGLM_Number_FromPyObject(obj2); return glmArray_addO_T(arr1, &i32, 1, NULL); case get_format_specifier() : u32 = PyGLM_Number_FromPyObject(obj2); return glmArray_addO_T(arr1, &u32, 1, NULL); case get_format_specifier() : i16 = PyGLM_Number_FromPyObject(obj2); return glmArray_addO_T(arr1, &i16, 1, NULL); case get_format_specifier() : u16 = PyGLM_Number_FromPyObject(obj2); return glmArray_addO_T(arr1, &u16, 1, NULL); case get_format_specifier() : i8 = PyGLM_Number_FromPyObject(obj2); return glmArray_addO_T(arr1, &i8, 1, NULL); case get_format_specifier() : u8 = PyGLM_Number_FromPyObject(obj2); return glmArray_addO_T(arr1, &u8, 1, NULL); case get_format_specifier() : b = PyGLM_Number_FromPyObject(obj2); return glmArray_addO_T(arr1, &b, 1, NULL); } } if (PyGLM_Is_PyGLM_Type(Py_TYPE(obj2))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(obj2)); if (arr1->format != pto->format) { PyErr_SetString(PyExc_ValueError, "The given array and object don't have the same data type."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || pto->glmType == PyGLM_TYPE_CTYPES || arr1->subtype == pto->subtype) { switch (arr1->format) { case get_format_specifier() : return glmArray_addO_T(arr1, (float*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_addO_T(arr1, (double*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_addO_T(arr1, (int64*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_addO_T(arr1, (uint64*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_addO_T(arr1, (int32*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_addO_T(arr1, (uint32*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_addO_T(arr1, (int16*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_addO_T(arr1, (uint16*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_addO_T(arr1, (int8*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_addO_T(arr1, (uint8*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_addO_T(arr1, (bool*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); } } PyErr_SetString(PyExc_ValueError, "The given array and object are not compatible."); return NULL; } Py_RETURN_NOTIMPLEMENTED; } else { return glmArray_add(obj2, obj1); } PyGLM_TYPEERROR_2O("Invalid operand type(s) for '+': ", obj1, obj2); return NULL; } template static PyObject* glmArray_sub_T(glmArray* arr1, glmArray* arr2) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr1->dtSize; outArray->format = arr1->format; outArray->itemCount = arr1->itemCount; outArray->readonly = false; outArray->reference = NULL; if (arr1->nBytes > arr2->nBytes || arr1->glmType == PyGLM_TYPE_VEC) { outArray->glmType = arr1->glmType; outArray->itemSize = arr1->itemSize; outArray->nBytes = arr1->nBytes; outArray->subtype = arr1->subtype; outArray->shape[0] = arr1->shape[0]; outArray->shape[1] = arr1->shape[1]; } else { outArray->glmType = arr2->glmType; outArray->itemSize = arr2->itemSize; outArray->nBytes = arr2->nBytes; outArray->subtype = arr2->subtype; outArray->shape[0] = arr2->shape[0]; outArray->shape[1] = arr2->shape[1]; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arr1DataPtr = (T*)arr1->data; T* arr2DataPtr = (T*)arr2->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arr1Ratio = arr1->itemSize / outArray->dtSize; Py_ssize_t arr2Ratio = arr2->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = arr1DataPtr[i * arr1Ratio + (j % arr1Ratio)] - arr2DataPtr[i * arr2Ratio + (j % arr2Ratio)]; } } return (PyObject*)outArray; } template static PyObject* glmArray_subO_T(glmArray* arr, T* o, Py_ssize_t o_size, PyGLMTypeObject* pto) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; if ((size_t)arr->itemSize / sizeof(T) > (size_t)o_size || arr->glmType == PyGLM_TYPE_VEC || pto == NULL) { outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; } else { PyGLM_ASSERT(pto != ((PyGLMTypeObject *) NULL), "pto is NULL. This should never occur!"); outArray->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemCount * outArray->itemSize; outArray->subtype = pto->subtype; outArray->shape[0] = pto->C; outArray->shape[1] = pto->R; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arrRatio = arr->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = arrDataPtr[i * arrRatio + (j % arrRatio)] - o[j % o_size]; } } return (PyObject*)outArray; } template static PyObject* glmArray_rsubO_T(glmArray* arr, T* o, Py_ssize_t o_size, PyGLMTypeObject* pto) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; if ((size_t)arr->itemSize / sizeof(T) > (size_t)o_size || arr->glmType == PyGLM_TYPE_VEC || pto == NULL) { outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; } else { PyGLM_ASSERT(pto != ((PyGLMTypeObject *) NULL), "pto is NULL. This should never occur!"); outArray->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemCount * outArray->itemSize; outArray->subtype = pto->subtype; outArray->shape[0] = pto->C; outArray->shape[1] = pto->R; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arrRatio = arr->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = o[j % o_size] - arrDataPtr[i * arrRatio + (j % arrRatio)]; } } return (PyObject*)outArray; } static PyObject* glmArray_sub(PyObject* obj1, PyObject* obj2) { if (PyObject_TypeCheck(obj1, &glmArrayType)) { // obj1 is an array glmArray* arr1 = (glmArray*)obj1; if (PyObject_TypeCheck(obj2, &glmArrayType)) { // obj2 is an array glmArray* arr2 = (glmArray*)obj2; if (arr1->itemCount != arr2->itemCount) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same amount of elements."); return NULL; } if (arr1->format != arr2->format) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same data type."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || arr2->glmType == PyGLM_TYPE_CTYPES || arr1->subtype == arr2->subtype) { switch (arr1->format) { case get_format_specifier() : return glmArray_sub_T(arr1, arr2); case get_format_specifier() : return glmArray_sub_T(arr1, arr2); case get_format_specifier() : return glmArray_sub_T(arr1, arr2); case get_format_specifier() : return glmArray_sub_T(arr1, arr2); case get_format_specifier() : return glmArray_sub_T(arr1, arr2); case get_format_specifier() : return glmArray_sub_T(arr1, arr2); case get_format_specifier() : return glmArray_sub_T(arr1, arr2); case get_format_specifier() : return glmArray_sub_T(arr1, arr2); case get_format_specifier() : return glmArray_sub_T(arr1, arr2); case get_format_specifier() : return glmArray_sub_T(arr1, arr2); case get_format_specifier() : return glmArray_sub_T(arr1, arr2); } } PyErr_SetString(PyExc_ValueError, "The given arrays are not compatible."); return NULL; } if (PyGLM_Number_Check(obj2)) { union { float f; double d; int64 i64; uint64 u64; int32 i32; uint32 u32; int16 i16; uint16 u16; int8 i8; uint8 u8; bool b; }; switch (arr1->format) { case get_format_specifier() : f = PyGLM_Number_FromPyObject(obj2); return glmArray_subO_T(arr1, &f, 1, NULL); case get_format_specifier() : d = PyGLM_Number_FromPyObject(obj2); return glmArray_subO_T(arr1, &d, 1, NULL); case get_format_specifier() : i64 = PyGLM_Number_FromPyObject(obj2); return glmArray_subO_T(arr1, &i64, 1, NULL); case get_format_specifier() : u64 = PyGLM_Number_FromPyObject(obj2); return glmArray_subO_T(arr1, &u64, 1, NULL); case get_format_specifier() : i32 = PyGLM_Number_FromPyObject(obj2); return glmArray_subO_T(arr1, &i32, 1, NULL); case get_format_specifier() : u32 = PyGLM_Number_FromPyObject(obj2); return glmArray_subO_T(arr1, &u32, 1, NULL); case get_format_specifier() : i16 = PyGLM_Number_FromPyObject(obj2); return glmArray_subO_T(arr1, &i16, 1, NULL); case get_format_specifier() : u16 = PyGLM_Number_FromPyObject(obj2); return glmArray_subO_T(arr1, &u16, 1, NULL); case get_format_specifier() : i8 = PyGLM_Number_FromPyObject(obj2); return glmArray_subO_T(arr1, &i8, 1, NULL); case get_format_specifier() : u8 = PyGLM_Number_FromPyObject(obj2); return glmArray_subO_T(arr1, &u8, 1, NULL); case get_format_specifier() : b = PyGLM_Number_FromPyObject(obj2); return glmArray_subO_T(arr1, &b, 1, NULL); } } if (PyGLM_Is_PyGLM_Type(Py_TYPE(obj2))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(obj2)); if (arr1->format != pto->format) { PyErr_SetString(PyExc_ValueError, "The given array and object don't have the same data type."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || pto->glmType == PyGLM_TYPE_CTYPES || arr1->subtype == pto->subtype) { switch (arr1->format) { case get_format_specifier() : return glmArray_subO_T(arr1, (float*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_subO_T(arr1, (double*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_subO_T(arr1, (int64*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_subO_T(arr1, (uint64*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_subO_T(arr1, (int32*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_subO_T(arr1, (uint32*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_subO_T(arr1, (int16*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_subO_T(arr1, (uint16*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_subO_T(arr1, (int8*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_subO_T(arr1, (uint8*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_subO_T(arr1, (bool*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); } } PyErr_SetString(PyExc_ValueError, "The given array and object are not compatible."); return NULL; } Py_RETURN_NOTIMPLEMENTED; } else { glmArray* arr2 = (glmArray*)obj2; if (PyGLM_Number_Check(obj1)) { union { float f; double d; int64 i64; uint64 u64; int32 i32; uint32 u32; int16 i16; uint16 u16; int8 i8; uint8 u8; bool b; }; switch (arr2->format) { case get_format_specifier() : f = PyGLM_Number_FromPyObject(obj1); return glmArray_rsubO_T(arr2, &f, 1, NULL); case get_format_specifier() : d = PyGLM_Number_FromPyObject(obj1); return glmArray_rsubO_T(arr2, &d, 1, NULL); case get_format_specifier() : i64 = PyGLM_Number_FromPyObject(obj1); return glmArray_rsubO_T(arr2, &i64, 1, NULL); case get_format_specifier() : u64 = PyGLM_Number_FromPyObject(obj1); return glmArray_rsubO_T(arr2, &u64, 1, NULL); case get_format_specifier() : i32 = PyGLM_Number_FromPyObject(obj1); return glmArray_rsubO_T(arr2, &i32, 1, NULL); case get_format_specifier() : u32 = PyGLM_Number_FromPyObject(obj1); return glmArray_rsubO_T(arr2, &u32, 1, NULL); case get_format_specifier() : i16 = PyGLM_Number_FromPyObject(obj1); return glmArray_rsubO_T(arr2, &i16, 1, NULL); case get_format_specifier() : u16 = PyGLM_Number_FromPyObject(obj1); return glmArray_rsubO_T(arr2, &u16, 1, NULL); case get_format_specifier() : i8 = PyGLM_Number_FromPyObject(obj1); return glmArray_rsubO_T(arr2, &i8, 1, NULL); case get_format_specifier() : u8 = PyGLM_Number_FromPyObject(obj1); return glmArray_rsubO_T(arr2, &u8, 1, NULL); case get_format_specifier() : b = PyGLM_Number_FromPyObject(obj1); return glmArray_rsubO_T(arr2, &b, 1, NULL); } } if (PyGLM_Is_PyGLM_Type(Py_TYPE(obj1))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(obj1)); if (arr2->format != pto->format) { PyErr_SetString(PyExc_ValueError, "The given array and object don't have the same data type."); return NULL; } if (arr2->glmType == PyGLM_TYPE_CTYPES || pto->glmType == PyGLM_TYPE_CTYPES || arr2->subtype == pto->subtype) { switch (arr2->format) { case get_format_specifier() : return glmArray_rsubO_T(arr2, (float*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rsubO_T(arr2, (double*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rsubO_T(arr2, (int64*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rsubO_T(arr2, (uint64*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rsubO_T(arr2, (int32*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rsubO_T(arr2, (uint32*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rsubO_T(arr2, (int16*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rsubO_T(arr2, (uint16*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rsubO_T(arr2, (int8*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rsubO_T(arr2, (uint8*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rsubO_T(arr2, (bool*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); } } PyErr_SetString(PyExc_ValueError, "The given array and object are not compatible."); return NULL; } } PyGLM_TYPEERROR_2O("Invalid operand type(s) for '-': ", obj1, obj2); return NULL; } template static inline T glmArray_simple_mul(T a, T b) { return a * b; } static inline bool glmArray_simple_mul(bool a, bool b) { return a && b; } template static PyObject* glmArray_mul_T_SEQ(glmArray* arr1, glmArray* arr2) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr1->dtSize; outArray->format = arr1->format; outArray->itemCount = arr1->itemCount; outArray->readonly = false; outArray->reference = NULL; if (arr1->nBytes > arr2->nBytes || arr1->glmType == PyGLM_TYPE_VEC) { outArray->glmType = arr1->glmType; outArray->itemSize = arr1->itemSize; outArray->nBytes = arr1->nBytes; outArray->subtype = arr1->subtype; outArray->shape[0] = arr1->shape[0]; outArray->shape[1] = arr1->shape[1]; } else { outArray->glmType = arr2->glmType; outArray->itemSize = arr2->itemSize; outArray->nBytes = arr2->nBytes; outArray->subtype = arr2->subtype; outArray->shape[0] = arr2->shape[0]; outArray->shape[1] = arr2->shape[1]; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arr1DataPtr = (T*)arr1->data; T* arr2DataPtr = (T*)arr2->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arr1Ratio = arr1->itemSize / outArray->dtSize; Py_ssize_t arr2Ratio = arr2->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = glmArray_simple_mul(arr1DataPtr[i * arr1Ratio + (j % arr1Ratio)], arr2DataPtr[i * arr2Ratio + (j % arr2Ratio)]); } } return (PyObject*)outArray; } template static PyObject* glmArray_mul_T_MMUL(glmArray* arr1, glmArray* arr2) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr1->dtSize; outArray->format = arr1->format; outArray->itemCount = arr1->itemCount; outArray->readonly = false; outArray->reference = NULL; Py_ssize_t n, arr1Stride, arr2Stride; if (arr1->glmType == PyGLM_TYPE_VEC) { n = arr1->shape[0]; arr1Stride = 1; arr2Stride = arr2->shape[1]; outArray->glmType = PyGLM_TYPE_VEC; outArray->shape[0] = arr2->shape[0]; outArray->shape[1] = 0; outArray->itemSize = outArray->shape[0] * outArray->dtSize; outArray->nBytes = outArray->itemSize * outArray->itemCount; outArray->subtype = PyGLM_VEC_TYPE_T_ONLY(outArray->shape[0]); } else if (arr2->glmType == PyGLM_TYPE_VEC) { n = arr2->shape[0]; arr1Stride = arr1->shape[1]; arr2Stride = 0; outArray->glmType = PyGLM_TYPE_VEC; outArray->shape[0] = arr1->shape[1]; outArray->shape[1] = 0; outArray->itemSize = outArray->shape[0] * outArray->dtSize; outArray->nBytes = outArray->itemSize * outArray->itemCount; outArray->subtype = PyGLM_VEC_TYPE_T_ONLY(outArray->shape[0]); } else { n = arr1->shape[0]; arr1Stride = arr1->shape[1]; arr2Stride = arr2->shape[1]; outArray->glmType = PyGLM_TYPE_MAT; outArray->shape[0] = arr2->shape[0]; outArray->shape[1] = arr1->shape[1]; outArray->itemSize = outArray->dtSize * outArray->shape[0] * outArray->shape[1]; outArray->nBytes = outArray->itemSize * outArray->itemCount; outArray->subtype = PyGLM_MAT_TYPE_T_ONLY(outArray->shape[0], outArray->shape[1]); } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arr1DataPtr = (T*)arr1->data; T* arr2DataPtr = (T*)arr2->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { for (Py_ssize_t j = 0; j < outArrayRatio; j++) { T result = (T)0; for (Py_ssize_t k = 0; k < n; k++) { T a = arr1DataPtr[k * arr1Stride + j % arr1Stride]; T b = arr2DataPtr[k + (j / arr1Stride) * arr2Stride]; result += a * b; } outArrayDataPtr[outArrayIndex++] = result; } // move pointers by one item arr1DataPtr = reinterpret_cast(reinterpret_cast(arr1DataPtr) + arr1->itemSize); arr2DataPtr = reinterpret_cast(reinterpret_cast(arr2DataPtr) + arr2->itemSize); } return (PyObject*)outArray; } template static PyObject* glmArray_mulO_T(glmArray* arr, T* o, Py_ssize_t o_size, PyGLMTypeObject* pto) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; if (pto == NULL || (arr->glmType == PyGLM_TYPE_VEC && ((pto->glmType & PyGLM_TYPE_VEC) == PyGLM_TYPE_VEC))) { outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arrRatio = arr->itemSize / outArray->dtSize; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = glmArray_simple_mul(arrDataPtr[i * arrRatio + (j % arrRatio)], o[j % o_size]); } } return (PyObject*)outArray; } if (arr->glmType == PyGLM_TYPE_CTYPES) { outArray->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemSize * outArray->dtSize; outArray->subtype = pto->subtype; outArray->shape[0] = pto->C; outArray->shape[1] = pto->R; outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arrRatio = arr->itemSize / outArray->dtSize; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = glmArray_simple_mul(arrDataPtr[i * arrRatio + (j % arrRatio)], o[j % o_size]); } } return (PyObject*)outArray; } Py_ssize_t n, arrStride, oStride; if (arr->glmType == PyGLM_TYPE_VEC) { n = arr->shape[0]; arrStride = 1; oStride = pto->R; outArray->glmType = PyGLM_TYPE_VEC; outArray->shape[0] = pto->C; outArray->shape[1] = 0; outArray->itemSize = outArray->shape[0] * outArray->dtSize; outArray->nBytes = outArray->itemSize * outArray->itemCount; outArray->subtype = PyGLM_VEC_TYPE_T_ONLY(outArray->shape[0]); } else if ((pto->glmType & PyGLM_TYPE_VEC) == PyGLM_TYPE_VEC) { n = pto->C; arrStride = arr->shape[1]; oStride = 0; outArray->glmType = PyGLM_TYPE_VEC; outArray->shape[0] = arr->shape[1]; outArray->shape[1] = 0; outArray->itemSize = outArray->shape[0] * outArray->dtSize; outArray->nBytes = outArray->itemSize * outArray->itemCount; outArray->subtype = PyGLM_VEC_TYPE_T_ONLY(outArray->shape[0]); } else { n = arr->shape[0]; arrStride = arr->shape[1]; oStride = pto->R; outArray->glmType = PyGLM_TYPE_MAT; outArray->shape[0] = pto->C; outArray->shape[1] = arr->shape[1]; outArray->itemSize = outArray->dtSize * outArray->shape[0] * outArray->shape[1]; outArray->nBytes = outArray->itemSize * outArray->itemCount; outArray->subtype = PyGLM_MAT_TYPE_T_ONLY(outArray->shape[0], outArray->shape[1]); } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { for (Py_ssize_t j = 0; j < outArrayRatio; j++) { T result = (T)0; for (Py_ssize_t k = 0; k < n; k++) { T a = arrDataPtr[k * arrStride + j % arrStride]; T b = o[k + (j / arrStride) * oStride]; result = result + a * b; } outArrayDataPtr[outArrayIndex++] = result; } arrDataPtr = reinterpret_cast(reinterpret_cast(arrDataPtr) + arr->itemSize); } return (PyObject*)outArray; } template static PyObject* glmArray_rmulO_T(glmArray* arr, T* o, Py_ssize_t o_size, PyGLMTypeObject* pto) { if (pto == NULL || arr->glmType == PyGLM_TYPE_CTYPES || (arr->glmType == PyGLM_TYPE_VEC && (pto->glmType & PyGLM_TYPE_VEC) == PyGLM_TYPE_VEC)) { return glmArray_mulO_T(arr, o, o_size, pto); } glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; Py_ssize_t n, arrStride, oStride, trueShape1; if ((pto->glmType & PyGLM_TYPE_VEC) == PyGLM_TYPE_VEC) { n = pto->C; oStride = 1; arrStride = arr->shape[1]; trueShape1 = 1; outArray->glmType = PyGLM_TYPE_VEC; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = 0; outArray->itemSize = outArray->shape[0] * outArray->dtSize; outArray->nBytes = outArray->itemSize * outArray->itemCount; outArray->subtype = PyGLM_VEC_TYPE_T_ONLY(outArray->shape[0]); } else if (arr->glmType == PyGLM_TYPE_VEC) { n = arr->shape[0]; oStride = pto->R; arrStride = 0; trueShape1 = pto->R; outArray->glmType = PyGLM_TYPE_VEC; outArray->shape[0] = pto->R; outArray->shape[1] = 0; outArray->itemSize = outArray->shape[0] * outArray->dtSize; outArray->nBytes = outArray->itemSize * outArray->itemCount; outArray->subtype = PyGLM_VEC_TYPE_T_ONLY(outArray->shape[0]); } else { n = pto->C; arrStride = pto->R; oStride = arr->shape[1]; trueShape1 = pto->R; outArray->glmType = PyGLM_TYPE_MAT; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = pto->R; outArray->itemSize = outArray->dtSize * outArray->shape[0] * outArray->shape[1]; outArray->nBytes = outArray->itemSize * outArray->itemCount; outArray->subtype = PyGLM_MAT_TYPE_T_ONLY(outArray->shape[0], outArray->shape[1]); } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { for (Py_ssize_t j = 0; j < outArrayRatio; j++) { T result = (T)0; for (Py_ssize_t k = 0; k < n; k++) { T a = o[k * oStride + j % trueShape1]; T b = arrDataPtr[k + (j / trueShape1) * arrStride]; result = result + a * b; } outArrayDataPtr[outArrayIndex++] = result; } arrDataPtr = reinterpret_cast(reinterpret_cast(arrDataPtr) + arr->itemSize); } return (PyObject*)outArray; } template static void glmArray_mul_Q(V* vecs, Q* quas, V* out, Py_ssize_t len) { for (Py_ssize_t i = 0; i < len; i++) { out[i] = vecs[i] * quas[i]; } } template static void glmArray_rmul_Q(Q* quas, V* vecs, V* out, Py_ssize_t len) { for (Py_ssize_t i = 0; i < len; i++) { out[i] = quas[i] * vecs[i]; } } template static void glmArray_mul_Q(V vec, Q* quas, V* out, Py_ssize_t len) { for (Py_ssize_t i = 0; i < len; i++) { out[i] = vec * quas[i]; } } template static void glmArray_mul_Q(V* vecs, Q qua, V* out, Py_ssize_t len) { for (Py_ssize_t i = 0; i < len; i++) { out[i] = vecs[i] * qua; } } template static void glmArray_rmul_Q(Q* quas, V vec, V* out, Py_ssize_t len) { for (Py_ssize_t i = 0; i < len; i++) { out[i] = quas[i] * vec; } } template static void glmArray_rmul_Q(Q qua, V* vecs, V* out, Py_ssize_t len) { for (Py_ssize_t i = 0; i < len; i++) { out[i] = qua * vecs[i]; } } static PyObject* glmArray_mul(PyObject* obj1, PyObject* obj2) { if (PyObject_TypeCheck(obj1, &glmArrayType)) { // obj1 is an array glmArray* arr1 = (glmArray*)obj1; if (PyObject_TypeCheck(obj2, &glmArrayType)) { // obj2 is an array glmArray* arr2 = (glmArray*)obj2; if (arr1->itemCount != arr2->itemCount) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same amount of elements."); return NULL; } if (arr1->format != arr2->format) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same data type."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || arr2->glmType == PyGLM_TYPE_CTYPES || (arr1->subtype == arr2->subtype && arr1->glmType == PyGLM_TYPE_VEC)) { switch (arr1->format) { case get_format_specifier() : return glmArray_mul_T_SEQ(arr1, arr2); case get_format_specifier() : return glmArray_mul_T_SEQ(arr1, arr2); case get_format_specifier() : return glmArray_mul_T_SEQ(arr1, arr2); case get_format_specifier() : return glmArray_mul_T_SEQ(arr1, arr2); case get_format_specifier() : return glmArray_mul_T_SEQ(arr1, arr2); case get_format_specifier() : return glmArray_mul_T_SEQ(arr1, arr2); case get_format_specifier() : return glmArray_mul_T_SEQ(arr1, arr2); case get_format_specifier() : return glmArray_mul_T_SEQ(arr1, arr2); case get_format_specifier() : return glmArray_mul_T_SEQ(arr1, arr2); case get_format_specifier() : return glmArray_mul_T_SEQ(arr1, arr2); case get_format_specifier() : return glmArray_mul_T_SEQ(arr1, arr2); } } if ((arr1->glmType == PyGLM_TYPE_VEC && arr2->glmType == PyGLM_TYPE_MAT && arr1->shape[0] == arr2->shape[1]) || (arr1->glmType == PyGLM_TYPE_MAT && arr2->glmType == PyGLM_TYPE_VEC && arr1->shape[0] == arr2->shape[0]) || (arr1->glmType == PyGLM_TYPE_MAT && arr2->glmType == PyGLM_TYPE_MAT && arr1->shape[0] == arr2->shape[1])) { switch (arr1->format) { case get_format_specifier() : return glmArray_mul_T_MMUL(arr1, arr2); case get_format_specifier() : return glmArray_mul_T_MMUL(arr1, arr2); case get_format_specifier() : return glmArray_mul_T_MMUL(arr1, arr2); case get_format_specifier() : return glmArray_mul_T_MMUL(arr1, arr2); } } if (arr1->glmType == PyGLM_TYPE_QUA || arr2->glmType == PyGLM_TYPE_QUA) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr1->dtSize; outArray->format = arr1->format; outArray->itemCount = arr1->itemCount; outArray->readonly = false; outArray->reference = NULL; outArray->glmType = (arr1->glmType == PyGLM_TYPE_QUA && arr2->glmType == PyGLM_TYPE_QUA) ? PyGLM_TYPE_QUA : PyGLM_TYPE_VEC; if (arr1->glmType == PyGLM_TYPE_VEC) { if (arr1->shape[0] < 3) { PyErr_SetString(PyExc_ValueError, "Invalid operands."); Py_DECREF(outArray); return NULL; } outArray->itemSize = arr1->itemSize; outArray->nBytes = arr1->nBytes; outArray->shape[0] = arr1->shape[0]; outArray->shape[1] = 0; outArray->subtype = arr1->subtype; outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "out of memory."); return NULL; } if (arr1->shape[0] == 3) { if (arr1->format == 'f') { auto vp = (glm::vec<3, float>*)(arr1->data); auto qp = (glm::qua*)(arr2->data); auto outp = (glm::vec<3, float>*)(outArray->data); glmArray_mul_Q(vp, qp, outp, outArray->itemCount); return (PyObject*)outArray; } if (arr1->format == 'd') { auto vp = (glm::vec<3, double>*)(arr1->data); auto qp = (glm::qua*)(arr2->data); auto outp = (glm::vec<3, double>*)(outArray->data); glmArray_mul_Q(vp, qp, outp, outArray->itemCount); return (PyObject*)outArray; } } else if (arr1->shape[0] == 4) { if (arr1->format == 'f') { auto vp = (glm::vec<4, float>*)(arr1->data); auto qp = (glm::qua*)(arr2->data); auto outp = (glm::vec<4, float>*)(outArray->data); glmArray_mul_Q(vp, qp, outp, outArray->itemCount); return (PyObject*)outArray; } if (arr1->format == 'd') { auto vp = (glm::vec<4, double>*)(arr1->data); auto qp = (glm::qua*)(arr2->data); auto outp = (glm::vec<4, double>*)(outArray->data); glmArray_mul_Q(vp, qp, outp, outArray->itemCount); return (PyObject*)outArray; } } } else if (arr2->glmType == PyGLM_TYPE_VEC) { if (arr2->shape[0] < 3) { PyErr_SetString(PyExc_ValueError, "Invalid operands."); Py_DECREF(outArray); return NULL; } outArray->itemSize = arr2->itemSize; outArray->nBytes = arr2->nBytes; outArray->shape[0] = arr2->shape[0]; outArray->shape[1] = 0; outArray->subtype = arr2->subtype; outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "out of memory."); return NULL; } if (arr2->shape[0] == 3) { if (arr2->format == 'f') { auto vp = (glm::vec<3, float>*)(arr2->data); auto qp = (glm::qua*)(arr1->data); auto outp = (glm::vec<3, float>*)(outArray->data); glmArray_rmul_Q(qp, vp, outp, outArray->itemCount); return (PyObject*)outArray; } if (arr2->format == 'd') { auto vp = (glm::vec<3, double>*)(arr2->data); auto qp = (glm::qua*)(arr1->data); auto outp = (glm::vec<3, double>*)(outArray->data); glmArray_rmul_Q(qp, vp, outp, outArray->itemCount); return (PyObject*)outArray; } } else if (arr2->shape[0] == 4) { if (arr2->format == 'f') { auto vp = (glm::vec<4, float>*)(arr2->data); auto qp = (glm::qua*)(arr1->data); auto outp = (glm::vec<4, float>*)(outArray->data); glmArray_rmul_Q(qp, vp, outp, outArray->itemCount); return (PyObject*)outArray; } if (arr2->format == 'd') { auto vp = (glm::vec<4, double>*)(arr2->data); auto qp = (glm::qua*)(arr1->data); auto outp = (glm::vec<4, double>*)(outArray->data); glmArray_rmul_Q(qp, vp, outp, outArray->itemCount); return (PyObject*)outArray; } } } else { outArray->itemSize = arr1->itemSize; outArray->nBytes = arr1->nBytes; outArray->shape[0] = 4; outArray->shape[1] = 0; outArray->subtype = arr1->subtype; outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "out of memory."); return NULL; } if (arr1->format == 'f') { auto vp = (glm::qua*)(arr1->data); auto qp = (glm::qua*)(arr2->data); auto outp = (glm::qua*)(outArray->data); glmArray_mul_Q(vp, qp, outp, outArray->itemCount); return (PyObject*)outArray; } if (arr1->format == 'd') { auto vp = (glm::qua*)(arr1->data); auto qp = (glm::qua*)(arr2->data); auto outp = (glm::qua*)(outArray->data); glmArray_mul_Q(vp, qp, outp, outArray->itemCount); return (PyObject*)outArray; } } } PyErr_SetString(PyExc_ValueError, "The given arrays are not compatible."); return NULL; } if (PyGLM_Number_Check(obj2)) { union { float f; double d; int64 i64; uint64 u64; int32 i32; uint32 u32; int16 i16; uint16 u16; int8 i8; uint8 u8; bool b; }; switch (arr1->format) { case get_format_specifier() : f = PyGLM_Number_FromPyObject(obj2); return glmArray_mulO_T(arr1, &f, 1, NULL); case get_format_specifier() : d = PyGLM_Number_FromPyObject(obj2); return glmArray_mulO_T(arr1, &d, 1, NULL); case get_format_specifier() : i64 = PyGLM_Number_FromPyObject(obj2); return glmArray_mulO_T(arr1, &i64, 1, NULL); case get_format_specifier() : u64 = PyGLM_Number_FromPyObject(obj2); return glmArray_mulO_T(arr1, &u64, 1, NULL); case get_format_specifier() : i32 = PyGLM_Number_FromPyObject(obj2); return glmArray_mulO_T(arr1, &i32, 1, NULL); case get_format_specifier() : u32 = PyGLM_Number_FromPyObject(obj2); return glmArray_mulO_T(arr1, &u32, 1, NULL); case get_format_specifier() : i16 = PyGLM_Number_FromPyObject(obj2); return glmArray_mulO_T(arr1, &i16, 1, NULL); case get_format_specifier() : u16 = PyGLM_Number_FromPyObject(obj2); return glmArray_mulO_T(arr1, &u16, 1, NULL); case get_format_specifier() : i8 = PyGLM_Number_FromPyObject(obj2); return glmArray_mulO_T(arr1, &i8, 1, NULL); case get_format_specifier() : u8 = PyGLM_Number_FromPyObject(obj2); return glmArray_mulO_T(arr1, &u8, 1, NULL); case get_format_specifier() : b = PyGLM_Number_FromPyObject(obj2); return glmArray_mulO_T(arr1, &b, 1, NULL); } } if (PyGLM_Is_PyGLM_Type(Py_TYPE(obj2))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(obj2)); if (arr1->format != pto->format) { PyErr_SetString(PyExc_ValueError, "The given array and object don't have the same data type."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || (arr1->glmType == PyGLM_TYPE_VEC && ((pto->glmType & PyGLM_TYPE_VEC) == PyGLM_TYPE_VEC || (pto->glmType == PyGLM_TYPE_MAT && arr1->shape[0] == pto->R))) || (arr1->glmType == PyGLM_TYPE_MAT && (pto->glmType & PyGLM_TYPE_VEC) == PyGLM_TYPE_VEC && arr1->shape[0] == pto->C) || (arr1->glmType == PyGLM_TYPE_MAT && pto->glmType == PyGLM_TYPE_MAT && arr1->shape[0] == pto->R)) { switch (arr1->format) { case get_format_specifier() : return glmArray_mulO_T(arr1, (float*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_mulO_T(arr1, (double*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_mulO_T(arr1, (int64*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_mulO_T(arr1, (uint64*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_mulO_T(arr1, (int32*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_mulO_T(arr1, (uint32*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_mulO_T(arr1, (int16*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_mulO_T(arr1, (uint16*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_mulO_T(arr1, (int8*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_mulO_T(arr1, (uint8*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_mulO_T(arr1, (bool*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); } } if (arr1->glmType == PyGLM_TYPE_QUA || pto->glmType == PyGLM_TYPE_QUA) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr1->dtSize; outArray->format = arr1->format; outArray->itemCount = arr1->itemCount; outArray->readonly = false; outArray->reference = NULL; outArray->glmType = (arr1->glmType == PyGLM_TYPE_QUA && pto->glmType == PyGLM_TYPE_QUA) ? PyGLM_TYPE_QUA : PyGLM_TYPE_VEC; if (arr1->glmType == PyGLM_TYPE_VEC) { if (arr1->shape[0] < 3) { PyErr_SetString(PyExc_ValueError, "Invalid operands."); Py_DECREF(outArray); return NULL; } outArray->itemSize = arr1->itemSize; outArray->nBytes = arr1->nBytes; outArray->shape[0] = arr1->shape[0]; outArray->shape[1] = 0; outArray->subtype = arr1->subtype; outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "out of memory."); return NULL; } if (arr1->shape[0] == 3) { if (arr1->format == 'f') { auto vp = (glm::vec<3, float>*)(arr1->data); auto qp = ((qua*)obj2)->super_type; auto outp = (glm::vec<3, float>*)(outArray->data); glmArray_mul_Q(vp, qp, outp, outArray->itemCount); return (PyObject*)outArray; } if (arr1->format == 'd') { auto vp = (glm::vec<3, double>*)(arr1->data); auto qp = ((qua*)obj2)->super_type; auto outp = (glm::vec<3, double>*)(outArray->data); glmArray_mul_Q(vp, qp, outp, outArray->itemCount); return (PyObject*)outArray; } } else if (arr1->shape[0] == 4) { if (arr1->format == 'f') { auto vp = (glm::vec<4, float>*)(arr1->data); auto qp = ((qua*)obj2)->super_type; auto outp = (glm::vec<4, float>*)(outArray->data); glmArray_mul_Q(vp, qp, outp, outArray->itemCount); return (PyObject*)outArray; } if (arr1->format == 'd') { auto vp = (glm::vec<4, double>*)(arr1->data); auto qp = ((qua*)obj2)->super_type; auto outp = (glm::vec<4, double>*)(outArray->data); glmArray_mul_Q(vp, qp, outp, outArray->itemCount); return (PyObject*)outArray; } } } else if (pto->glmType == PyGLM_TYPE_VEC) { if (pto->C < 3) { PyErr_SetString(PyExc_ValueError, "Invalid operands."); Py_DECREF(outArray); return NULL; } outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemSize * outArray->itemCount; outArray->shape[0] = pto->C; outArray->shape[1] = 0; outArray->subtype = pto->subtype; outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "out of memory."); return NULL; } if (pto->C == 3) { if (pto->format == 'f') { auto vp = ((vec<3, float>*)obj2)->super_type; auto qp = (glm::qua*)(arr1->data); auto outp = (glm::vec<3, float>*)(outArray->data); glmArray_rmul_Q(qp, vp, outp, outArray->itemCount); return (PyObject*)outArray; } if (pto->format == 'd') { auto vp = ((vec<3, double>*)obj2)->super_type; auto qp = (glm::qua*)(arr1->data); auto outp = (glm::vec<3, double>*)(outArray->data); glmArray_rmul_Q(qp, vp, outp, outArray->itemCount); return (PyObject*)outArray; } } else if (pto->C == 4) { if (pto->format == 'f') { auto vp = ((vec<4, float>*)obj2)->super_type; auto qp = (glm::qua*)(arr1->data); auto outp = (glm::vec<4, float>*)(outArray->data); glmArray_rmul_Q(qp, vp, outp, outArray->itemCount); return (PyObject*)outArray; } if (pto->format == 'd') { auto vp = ((vec<4, double>*)obj2)->super_type; auto qp = (glm::qua*)(arr1->data); auto outp = (glm::vec<4, double>*)(outArray->data); glmArray_rmul_Q(qp, vp, outp, outArray->itemCount); return (PyObject*)outArray; } } } else { outArray->itemSize = arr1->itemSize; outArray->nBytes = arr1->nBytes; outArray->shape[0] = 4; outArray->shape[1] = 0; outArray->subtype = arr1->subtype; outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "out of memory."); return NULL; } if (arr1->format == 'f') { auto vp = (glm::qua*)(arr1->data); auto qp = ((qua*)obj2)->super_type; auto outp = (glm::qua*)(outArray->data); glmArray_mul_Q(vp, qp, outp, outArray->itemCount); return (PyObject*)outArray; } if (arr1->format == 'd') { auto vp = (glm::qua*)(arr1->data); auto qp = ((qua*)obj2)->super_type; auto outp = (glm::qua*)(outArray->data); glmArray_mul_Q(vp, qp, outp, outArray->itemCount); return (PyObject*)outArray; } } } PyErr_SetString(PyExc_ValueError, "The given array and object are not compatible."); return NULL; } Py_RETURN_NOTIMPLEMENTED; } else { glmArray* arr2 = (glmArray*)obj2; if (PyGLM_Number_Check(obj1)) { union { float f; double d; int64 i64; uint64 u64; int32 i32; uint32 u32; int16 i16; uint16 u16; int8 i8; uint8 u8; bool b; }; switch (arr2->format) { case get_format_specifier() : f = PyGLM_Number_FromPyObject(obj1); return glmArray_mulO_T(arr2, &f, 1, NULL); case get_format_specifier() : d = PyGLM_Number_FromPyObject(obj1); return glmArray_mulO_T(arr2, &d, 1, NULL); case get_format_specifier() : i64 = PyGLM_Number_FromPyObject(obj1); return glmArray_mulO_T(arr2, &i64, 1, NULL); case get_format_specifier() : u64 = PyGLM_Number_FromPyObject(obj1); return glmArray_mulO_T(arr2, &u64, 1, NULL); case get_format_specifier() : i32 = PyGLM_Number_FromPyObject(obj1); return glmArray_mulO_T(arr2, &i32, 1, NULL); case get_format_specifier() : u32 = PyGLM_Number_FromPyObject(obj1); return glmArray_mulO_T(arr2, &u32, 1, NULL); case get_format_specifier() : i16 = PyGLM_Number_FromPyObject(obj1); return glmArray_mulO_T(arr2, &i16, 1, NULL); case get_format_specifier() : u16 = PyGLM_Number_FromPyObject(obj1); return glmArray_mulO_T(arr2, &u16, 1, NULL); case get_format_specifier() : i8 = PyGLM_Number_FromPyObject(obj1); return glmArray_mulO_T(arr2, &i8, 1, NULL); case get_format_specifier() : u8 = PyGLM_Number_FromPyObject(obj1); return glmArray_mulO_T(arr2, &u8, 1, NULL); case get_format_specifier() : b = PyGLM_Number_FromPyObject(obj1); return glmArray_mulO_T(arr2, &b, 1, NULL); } } if (PyGLM_Is_PyGLM_Type(Py_TYPE(obj1))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(obj1)); if (arr2->format != pto->format) { PyErr_SetString(PyExc_ValueError, "The given array and object don't have the same data type."); return NULL; } if (arr2->glmType == PyGLM_TYPE_CTYPES || ((pto->glmType & PyGLM_TYPE_VEC) == PyGLM_TYPE_VEC && (arr2->glmType == PyGLM_TYPE_VEC || (arr2->glmType == PyGLM_TYPE_MAT && pto->C == arr2->shape[1]))) || (pto->glmType == PyGLM_TYPE_MAT && arr2->glmType == PyGLM_TYPE_VEC && pto->C == arr2->shape[0]) || (pto->glmType == PyGLM_TYPE_MAT && arr2->glmType == PyGLM_TYPE_MAT && pto->C == arr2->shape[1])) { switch (arr2->format) { case get_format_specifier() : return glmArray_rmulO_T(arr2, (float*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rmulO_T(arr2, (double*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rmulO_T(arr2, (int64*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rmulO_T(arr2, (uint64*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rmulO_T(arr2, (int32*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rmulO_T(arr2, (uint32*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rmulO_T(arr2, (int16*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rmulO_T(arr2, (uint16*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rmulO_T(arr2, (int8*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rmulO_T(arr2, (uint8*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rmulO_T(arr2, (bool*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); } } if (pto->glmType == PyGLM_TYPE_QUA || arr2->glmType == PyGLM_TYPE_QUA) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr2->dtSize; outArray->format = arr2->format; outArray->itemCount = arr2->itemCount; outArray->readonly = false; outArray->reference = NULL; outArray->glmType = (pto->glmType == PyGLM_TYPE_QUA && arr2->glmType == PyGLM_TYPE_QUA) ? PyGLM_TYPE_QUA : PyGLM_TYPE_VEC; if (pto->glmType == PyGLM_TYPE_VEC) { if (pto->C < 3) { PyErr_SetString(PyExc_ValueError, "Invalid operands."); Py_DECREF(outArray); return NULL; } outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemSize * outArray->itemCount; outArray->shape[0] = pto->C; outArray->shape[1] = 0; outArray->subtype = pto->subtype; outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "out of memory."); return NULL; } if (pto->C == 3) { if (pto->format == 'f') { auto vp = ((vec<3, float>*)obj1)->super_type; auto qp = (glm::qua*)(arr2->data); auto outp = (glm::vec<3, float>*)(outArray->data); glmArray_mul_Q(vp, qp, outp, outArray->itemCount); return (PyObject*)outArray; } if (pto->format == 'd') { auto vp = ((vec<3, double>*)obj1)->super_type; auto qp = (glm::qua*)(arr2->data); auto outp = (glm::vec<3, double>*)(outArray->data); glmArray_mul_Q(vp, qp, outp, outArray->itemCount); return (PyObject*)outArray; } } else if (pto->C == 4) { if (pto->format == 'f') { auto vp = ((vec<4, float>*)obj1)->super_type; auto qp = (glm::qua*)(arr2->data); auto outp = (glm::vec<4, float>*)(outArray->data); glmArray_mul_Q(vp, qp, outp, outArray->itemCount); return (PyObject*)outArray; } if (pto->format == 'd') { auto vp = ((vec<4, double>*)obj1)->super_type; auto qp = (glm::qua*)(arr2->data); auto outp = (glm::vec<4, double>*)(outArray->data); glmArray_mul_Q(vp, qp, outp, outArray->itemCount); return (PyObject*)outArray; } } } else if (arr2->glmType == PyGLM_TYPE_VEC) { if (arr2->shape[0] < 3) { PyErr_SetString(PyExc_ValueError, "Invalid operands."); Py_DECREF(outArray); return NULL; } outArray->itemSize = arr2->itemSize; outArray->nBytes = arr2->nBytes; outArray->shape[0] = arr2->shape[0]; outArray->shape[1] = 0; outArray->subtype = arr2->subtype; outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "out of memory."); return NULL; } if (arr2->shape[0] == 3) { if (arr2->format == 'f') { auto vp = (glm::vec<3, float>*)(arr2->data); auto qp = ((qua*)obj1)->super_type; auto outp = (glm::vec<3, float>*)(outArray->data); glmArray_rmul_Q(qp, vp, outp, outArray->itemCount); return (PyObject*)outArray; } if (arr2->format == 'd') { auto vp = (glm::vec<3, double>*)(arr2->data); auto qp = ((qua*)obj1)->super_type; auto outp = (glm::vec<3, double>*)(outArray->data); glmArray_rmul_Q(qp, vp, outp, outArray->itemCount); return (PyObject*)outArray; } } else if (arr2->shape[0] == 4) { if (arr2->format == 'f') { auto vp = (glm::vec<4, float>*)(arr2->data); auto qp = ((qua*)obj1)->super_type; auto outp = (glm::vec<4, float>*)(outArray->data); glmArray_rmul_Q(qp, vp, outp, outArray->itemCount); return (PyObject*)outArray; } if (arr2->format == 'd') { auto vp = (glm::vec<4, double>*)(arr2->data); auto qp = ((qua*)obj1)->super_type; auto outp = (glm::vec<4, double>*)(outArray->data); glmArray_rmul_Q(qp, vp, outp, outArray->itemCount); return (PyObject*)outArray; } } } else { outArray->itemSize = arr2->itemSize; outArray->nBytes = arr2->nBytes; outArray->shape[0] = 4; outArray->shape[1] = 0; outArray->subtype = arr2->subtype; outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "out of memory."); return NULL; } if (pto->format == 'f') { auto vp = ((qua*)obj1)->super_type; auto qp = (glm::qua*)(arr2->data); auto outp = (glm::qua*)(outArray->data); glmArray_mul_Q(vp, qp, outp, outArray->itemCount); return (PyObject*)outArray; } if (pto->format == 'd') { auto vp = ((qua*)obj1)->super_type; auto qp = (glm::qua*)(arr2->data); auto outp = (glm::qua*)(outArray->data); glmArray_mul_Q(vp, qp, outp, outArray->itemCount); return (PyObject*)outArray; } } } PyErr_SetString(PyExc_ValueError, "The given array and object are not compatible."); return NULL; } } PyGLM_TYPEERROR_2O("Invalid operand type(s) for '*': ", obj1, obj2); return NULL; } static float modT(float a, float b) { return glm::mod(a, b); } static double modT(double a, double b) { return glm::mod(a, b); } template static T modT(T a, T b) { return a % b; } template static PyObject* glmArray_mod_T(glmArray* arr1, glmArray* arr2) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr1->dtSize; outArray->format = arr1->format; outArray->itemCount = arr1->itemCount; outArray->readonly = false; outArray->reference = NULL; if (arr1->nBytes > arr2->nBytes || arr1->glmType == PyGLM_TYPE_VEC) { outArray->glmType = arr1->glmType; outArray->itemSize = arr1->itemSize; outArray->nBytes = arr1->nBytes; outArray->subtype = arr1->subtype; outArray->shape[0] = arr1->shape[0]; outArray->shape[1] = arr1->shape[1]; } else { outArray->glmType = arr2->glmType; outArray->itemSize = arr2->itemSize; outArray->nBytes = arr2->nBytes; outArray->subtype = arr2->subtype; outArray->shape[0] = arr2->shape[0]; outArray->shape[1] = arr2->shape[1]; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arr1DataPtr = (T*)arr1->data; T* arr2DataPtr = (T*)arr2->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arr1Ratio = arr1->itemSize / outArray->dtSize; Py_ssize_t arr2Ratio = arr2->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { T b = arr2DataPtr[i * arr2Ratio + (j % arr2Ratio)]; if (b == (T)0) { PyGLM_ZERO_DIVISION_ERROR_T(T); } outArrayDataPtr[outArrayIndex++] = modT(arr1DataPtr[i * arr1Ratio + (j % arr1Ratio)], b); } } return (PyObject*)outArray; } template static PyObject* glmArray_modO_T(glmArray* arr, T* o, Py_ssize_t o_size, PyGLMTypeObject* pto) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; if ((size_t)arr->itemSize / sizeof(T) > (size_t)o_size || arr->glmType == PyGLM_TYPE_VEC || pto == NULL) { outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; } else { PyGLM_ASSERT(pto != ((PyGLMTypeObject *) NULL), "pto is NULL. This should never occur!"); outArray->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemCount * outArray->itemSize; outArray->subtype = pto->subtype; outArray->shape[0] = pto->C; outArray->shape[1] = pto->R; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arrRatio = arr->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { T b = o[j % o_size]; if (b == (T)0) { PyGLM_ZERO_DIVISION_ERROR_T(T); } outArrayDataPtr[outArrayIndex++] = modT(arrDataPtr[i * arrRatio + (j % arrRatio)], b); } } return (PyObject*)outArray; } template static PyObject* glmArray_rmodO_T(glmArray* arr, T* o, Py_ssize_t o_size, PyGLMTypeObject* pto) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; if ((size_t)arr->itemSize / sizeof(T) > (size_t)o_size || arr->glmType == PyGLM_TYPE_VEC || pto == NULL) { outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; } else { PyGLM_ASSERT(pto != ((PyGLMTypeObject *) NULL), "pto is NULL. This should never occur!"); outArray->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemCount * outArray->itemSize; outArray->subtype = pto->subtype; outArray->shape[0] = pto->C; outArray->shape[1] = pto->R; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arrRatio = arr->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { T b = arrDataPtr[i * arrRatio + (j % arrRatio)]; if (b == (T)0) { PyGLM_ZERO_DIVISION_ERROR_T(T); } outArrayDataPtr[outArrayIndex++] = modT(o[j % o_size], b); } } return (PyObject*)outArray; } static PyObject* glmArray_mod(PyObject* obj1, PyObject* obj2) { if (PyObject_TypeCheck(obj1, &glmArrayType)) { // obj1 is an array glmArray* arr1 = (glmArray*)obj1; if (arr1->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (PyObject_TypeCheck(obj2, &glmArrayType)) { // obj2 is an array glmArray* arr2 = (glmArray*)obj2; if (arr1->itemCount != arr2->itemCount) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same amount of elements."); return NULL; } if (arr1->format != arr2->format) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same data type."); return NULL; } if (arr2->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || arr2->glmType == PyGLM_TYPE_CTYPES || arr1->subtype == arr2->subtype) { switch (arr1->format) { case get_format_specifier() : return glmArray_mod_T(arr1, arr2); case get_format_specifier() : return glmArray_mod_T(arr1, arr2); case get_format_specifier() : return glmArray_mod_T(arr1, arr2); case get_format_specifier() : return glmArray_mod_T(arr1, arr2); case get_format_specifier() : return glmArray_mod_T(arr1, arr2); case get_format_specifier() : return glmArray_mod_T(arr1, arr2); case get_format_specifier() : return glmArray_mod_T(arr1, arr2); case get_format_specifier() : return glmArray_mod_T(arr1, arr2); case get_format_specifier() : return glmArray_mod_T(arr1, arr2); case get_format_specifier() : return glmArray_mod_T(arr1, arr2); } } PyErr_SetString(PyExc_ValueError, "The given arrays are not compatible."); return NULL; } if (PyGLM_Number_Check(obj2)) { union { float f; double d; int64 i64; uint64 u64; int32 i32; uint32 u32; int16 i16; uint16 u16; int8 i8; uint8 u8; }; switch (arr1->format) { case get_format_specifier() : f = PyGLM_Number_FromPyObject(obj2); return glmArray_modO_T(arr1, &f, 1, NULL); case get_format_specifier() : d = PyGLM_Number_FromPyObject(obj2); return glmArray_modO_T(arr1, &d, 1, NULL); case get_format_specifier() : i64 = PyGLM_Number_FromPyObject(obj2); return glmArray_modO_T(arr1, &i64, 1, NULL); case get_format_specifier() : u64 = PyGLM_Number_FromPyObject(obj2); return glmArray_modO_T(arr1, &u64, 1, NULL); case get_format_specifier() : i32 = PyGLM_Number_FromPyObject(obj2); return glmArray_modO_T(arr1, &i32, 1, NULL); case get_format_specifier() : u32 = PyGLM_Number_FromPyObject(obj2); return glmArray_modO_T(arr1, &u32, 1, NULL); case get_format_specifier() : i16 = PyGLM_Number_FromPyObject(obj2); return glmArray_modO_T(arr1, &i16, 1, NULL); case get_format_specifier() : u16 = PyGLM_Number_FromPyObject(obj2); return glmArray_modO_T(arr1, &u16, 1, NULL); case get_format_specifier() : i8 = PyGLM_Number_FromPyObject(obj2); return glmArray_modO_T(arr1, &i8, 1, NULL); case get_format_specifier() : u8 = PyGLM_Number_FromPyObject(obj2); return glmArray_modO_T(arr1, &u8, 1, NULL); } } if (PyGLM_Is_PyGLM_Type(Py_TYPE(obj2))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(obj2)); if (arr1->format != pto->format) { PyErr_SetString(PyExc_ValueError, "The given array and object don't have the same data type."); return NULL; } if (pto->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || pto->glmType == PyGLM_TYPE_CTYPES || arr1->subtype == pto->subtype) { switch (arr1->format) { case get_format_specifier() : return glmArray_modO_T(arr1, (float*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_modO_T(arr1, (double*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_modO_T(arr1, (int64*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_modO_T(arr1, (uint64*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_modO_T(arr1, (int32*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_modO_T(arr1, (uint32*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_modO_T(arr1, (int16*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_modO_T(arr1, (uint16*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_modO_T(arr1, (int8*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_modO_T(arr1, (uint8*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); } } PyErr_SetString(PyExc_ValueError, "The given array and object are not compatible."); return NULL; } Py_RETURN_NOTIMPLEMENTED; } else { glmArray* arr2 = (glmArray*)obj2; if (arr2->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (PyGLM_Number_Check(obj1)) { union { float f; double d; int64 i64; uint64 u64; int32 i32; uint32 u32; int16 i16; uint16 u16; int8 i8; uint8 u8; }; switch (arr2->format) { case get_format_specifier() : f = PyGLM_Number_FromPyObject(obj1); return glmArray_rmodO_T(arr2, &f, 1, NULL); case get_format_specifier() : d = PyGLM_Number_FromPyObject(obj1); return glmArray_rmodO_T(arr2, &d, 1, NULL); case get_format_specifier() : i64 = PyGLM_Number_FromPyObject(obj1); return glmArray_rmodO_T(arr2, &i64, 1, NULL); case get_format_specifier() : u64 = PyGLM_Number_FromPyObject(obj1); return glmArray_rmodO_T(arr2, &u64, 1, NULL); case get_format_specifier() : i32 = PyGLM_Number_FromPyObject(obj1); return glmArray_rmodO_T(arr2, &i32, 1, NULL); case get_format_specifier() : u32 = PyGLM_Number_FromPyObject(obj1); return glmArray_rmodO_T(arr2, &u32, 1, NULL); case get_format_specifier() : i16 = PyGLM_Number_FromPyObject(obj1); return glmArray_rmodO_T(arr2, &i16, 1, NULL); case get_format_specifier() : u16 = PyGLM_Number_FromPyObject(obj1); return glmArray_rmodO_T(arr2, &u16, 1, NULL); case get_format_specifier() : i8 = PyGLM_Number_FromPyObject(obj1); return glmArray_rmodO_T(arr2, &i8, 1, NULL); case get_format_specifier() : u8 = PyGLM_Number_FromPyObject(obj1); return glmArray_rmodO_T(arr2, &u8, 1, NULL); } } if (PyGLM_Is_PyGLM_Type(Py_TYPE(obj1))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(obj1)); if (arr2->format != pto->format) { PyErr_SetString(PyExc_ValueError, "The given array and object don't have the same data type."); return NULL; } if (pto->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr2->glmType == PyGLM_TYPE_CTYPES || pto->glmType == PyGLM_TYPE_CTYPES || arr2->subtype == pto->subtype) { switch (arr2->format) { case get_format_specifier() : return glmArray_rmodO_T(arr2, (float*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rmodO_T(arr2, (double*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rmodO_T(arr2, (int64*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rmodO_T(arr2, (uint64*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rmodO_T(arr2, (int32*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rmodO_T(arr2, (uint32*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rmodO_T(arr2, (int16*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rmodO_T(arr2, (uint16*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rmodO_T(arr2, (int8*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rmodO_T(arr2, (uint8*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); } } PyErr_SetString(PyExc_ValueError, "The given array and object are not compatible."); return NULL; } } PyGLM_TYPEERROR_2O("Invalid operand type(s) for '%': ", obj1, obj2); return NULL; } template static PyObject* glmArray_pow_T(glmArray* arr1, glmArray* arr2) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr1->dtSize; outArray->format = arr1->format; outArray->itemCount = arr1->itemCount; outArray->readonly = false; outArray->reference = NULL; if (arr1->nBytes > arr2->nBytes || arr1->glmType == PyGLM_TYPE_VEC) { outArray->glmType = arr1->glmType; outArray->itemSize = arr1->itemSize; outArray->nBytes = arr1->nBytes; outArray->subtype = arr1->subtype; outArray->shape[0] = arr1->shape[0]; outArray->shape[1] = arr1->shape[1]; } else { outArray->glmType = arr2->glmType; outArray->itemSize = arr2->itemSize; outArray->nBytes = arr2->nBytes; outArray->subtype = arr2->subtype; outArray->shape[0] = arr2->shape[0]; outArray->shape[1] = arr2->shape[1]; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arr1DataPtr = (T*)arr1->data; T* arr2DataPtr = (T*)arr2->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arr1Ratio = arr1->itemSize / outArray->dtSize; Py_ssize_t arr2Ratio = arr2->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = std::pow(arr1DataPtr[i * arr1Ratio + (j % arr1Ratio)], arr2DataPtr[i * arr2Ratio + (j % arr2Ratio)]); } } return (PyObject*)outArray; } template static PyObject* glmArray_powO_T(glmArray* arr, T* o, Py_ssize_t o_size, PyGLMTypeObject* pto) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; if ((size_t)arr->itemSize / sizeof(T) > (size_t)o_size || arr->glmType == PyGLM_TYPE_VEC || pto == NULL) { outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; } else { PyGLM_ASSERT(pto != ((PyGLMTypeObject *) NULL), "pto is NULL. This should never occur!"); outArray->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemCount * outArray->itemSize; outArray->subtype = pto->subtype; outArray->shape[0] = pto->C; outArray->shape[1] = pto->R; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arrRatio = arr->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = std::pow(arrDataPtr[i * arrRatio + (j % arrRatio)], o[j % o_size]); } } return (PyObject*)outArray; } template static PyObject* glmArray_rpowO_T(glmArray* arr, T* o, Py_ssize_t o_size, PyGLMTypeObject* pto) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; if ((size_t)arr->itemSize / sizeof(T) > (size_t)o_size || arr->glmType == PyGLM_TYPE_VEC || pto == NULL) { outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; } else { PyGLM_ASSERT(pto != ((PyGLMTypeObject *) NULL), "pto is NULL. This should never occur!"); outArray->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemCount * outArray->itemSize; outArray->subtype = pto->subtype; outArray->shape[0] = pto->C; outArray->shape[1] = pto->R; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arrRatio = arr->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = std::pow(o[j % o_size], arrDataPtr[i * arrRatio + (j % arrRatio)]); } } return (PyObject*)outArray; } static PyObject* glmArray_pow(PyObject* obj1, PyObject* obj2, PyObject* obj3) { PyGLM_ASSERT((obj3 == NULL || obj3 == Py_None), "Only binary pow is implemented."); if (PyObject_TypeCheck(obj1, &glmArrayType)) { // obj1 is an array glmArray* arr1 = (glmArray*)obj1; if (arr1->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (PyObject_TypeCheck(obj2, &glmArrayType)) { // obj2 is an array glmArray* arr2 = (glmArray*)obj2; if (arr1->itemCount != arr2->itemCount) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same amount of elements."); return NULL; } if (arr1->format != arr2->format) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same data type."); return NULL; } if (arr2->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || arr2->glmType == PyGLM_TYPE_CTYPES || arr1->subtype == arr2->subtype) { switch (arr1->format) { case get_format_specifier() : return glmArray_pow_T(arr1, arr2); case get_format_specifier() : return glmArray_pow_T(arr1, arr2); } PyErr_SetString(PyExc_ValueError, "Expected floating point values."); return NULL; } PyErr_SetString(PyExc_ValueError, "The given arrays are not compatible."); return NULL; } if (PyGLM_Number_Check(obj2)) { union { float f; double d; }; switch (arr1->format) { case get_format_specifier() : f = PyGLM_Number_FromPyObject(obj2); return glmArray_powO_T(arr1, &f, 1, NULL); case get_format_specifier() : d = PyGLM_Number_FromPyObject(obj2); return glmArray_powO_T(arr1, &d, 1, NULL); } PyErr_SetString(PyExc_ValueError, "Expected floating point values."); return NULL; } if (PyGLM_Is_PyGLM_Type(Py_TYPE(obj2))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(obj2)); if (arr1->format != pto->format) { PyErr_SetString(PyExc_ValueError, "The given array and object don't have the same data type."); return NULL; } if (pto->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || pto->glmType == PyGLM_TYPE_CTYPES || arr1->subtype == pto->subtype) { switch (arr1->format) { case get_format_specifier() : return glmArray_powO_T(arr1, (float*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_powO_T(arr1, (double*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); } PyErr_SetString(PyExc_ValueError, "Expected floating point values."); return NULL; } PyErr_SetString(PyExc_ValueError, "The given array and object are not compatible."); return NULL; } Py_RETURN_NOTIMPLEMENTED; } else { glmArray* arr2 = (glmArray*)obj2; if (arr2->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (PyGLM_Number_Check(obj1)) { union { float f; double d; }; switch (arr2->format) { case get_format_specifier() : f = PyGLM_Number_FromPyObject(obj1); return glmArray_rpowO_T(arr2, &f, 1, NULL); case get_format_specifier() : d = PyGLM_Number_FromPyObject(obj1); return glmArray_rpowO_T(arr2, &d, 1, NULL); } PyErr_SetString(PyExc_ValueError, "Expected floating point values."); return NULL; } if (PyGLM_Is_PyGLM_Type(Py_TYPE(obj1))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(obj1)); if (arr2->format != pto->format) { PyErr_SetString(PyExc_ValueError, "The given array and object don't have the same data type."); return NULL; } if (pto->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr2->glmType == PyGLM_TYPE_CTYPES || pto->glmType == PyGLM_TYPE_CTYPES || arr2->subtype == pto->subtype) { switch (arr2->format) { case get_format_specifier() : return glmArray_rpowO_T(arr2, (float*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rpowO_T(arr2, (double*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); } PyErr_SetString(PyExc_ValueError, "Expected floating point values."); return NULL; } PyErr_SetString(PyExc_ValueError, "The given array and object are not compatible."); return NULL; } } PyGLM_TYPEERROR_2O("Invalid operand type(s) for '**': ", obj1, obj2); return NULL; } static inline bool negT(bool v) { return !v; } template static inline T negT(T v) { return -v; } template static PyObject* glmArray_neg_T(glmArray* arr) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; for (Py_ssize_t i = 0; i < outArray->itemCount * outArrayRatio; i++) { outArrayDataPtr[i] = negT(arrDataPtr[i]); } return (PyObject*)outArray; } static PyObject* glmArray_neg(glmArray* arr) { switch (arr->format) { case get_format_specifier() : return glmArray_neg_T(arr); case get_format_specifier() : return glmArray_neg_T(arr); case get_format_specifier() : return glmArray_neg_T(arr); case get_format_specifier() : return glmArray_neg_T(arr); case get_format_specifier() : return glmArray_neg_T(arr); case get_format_specifier() : return glmArray_neg_T(arr); case get_format_specifier() : return glmArray_neg_T(arr); } PyGLM_TYPEERROR_O("Invalid operand type for '-': ", ((PyObject*)arr)); return NULL; } static PyObject* glmArray_pos(glmArray* arr) { return PyGLM_INCREF((PyObject*)arr); } static inline float glmArray_abs_f(float v) { return fabs(v); } static inline double glmArray_abs_f(double v) { return fabs(v); } static inline int glmArray_abs_f(int v) { return abs(v); } static inline long glmArray_abs_f(long v) { return labs(v); } static inline long long glmArray_abs_f(long long v) { return llabs(v); } template static PyObject* glmArray_abs_T(glmArray* arr) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; for (Py_ssize_t i = 0; i < outArray->itemCount * outArrayRatio; i++) { outArrayDataPtr[i] = glmArray_abs_f(arrDataPtr[i]); } return (PyObject*)outArray; } static PyObject* glmArray_abs(glmArray* arr) { switch (arr->format) { case get_format_specifier() : return glmArray_abs_T(arr); case get_format_specifier() : return glmArray_abs_T(arr); case get_format_specifier() : return glmArray_abs_T(arr); case get_format_specifier() : return glmArray_abs_T(arr); case get_format_specifier() : return glmArray_abs_T(arr); case get_format_specifier() : return glmArray_abs_T(arr); case get_format_specifier() : case get_format_specifier() : case get_format_specifier() : case get_format_specifier() : case get_format_specifier() : return PyGLM_INCREF((PyObject*)arr); } PyGLM_TYPEERROR_O("Invalid operand type for 'abs()': ", ((PyObject*)arr)); return NULL; } template static PyObject* glmArray_inv_T(glmArray* arr) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; for (Py_ssize_t i = 0; i < outArray->itemCount * outArrayRatio; i++) { outArrayDataPtr[i] = ~(arrDataPtr[i]); } return (PyObject*)outArray; } static PyObject* glmArray_inv(glmArray* arr) { switch (arr->format) { case get_format_specifier() : return glmArray_inv_T(arr); case get_format_specifier() : return glmArray_inv_T(arr); case get_format_specifier() : return glmArray_inv_T(arr); case get_format_specifier() : return glmArray_inv_T(arr); case get_format_specifier() : return glmArray_inv_T(arr); case get_format_specifier() : return glmArray_inv_T(arr); case get_format_specifier() : return glmArray_inv_T(arr); case get_format_specifier() : return glmArray_inv_T(arr); } PyGLM_TYPEERROR_O("Invalid operand type for '~': ", ((PyObject*)arr)); return NULL; } template static PyObject* glmArray_lshift_T(glmArray* arr1, glmArray* arr2) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr1->dtSize; outArray->format = arr1->format; outArray->itemCount = arr1->itemCount; outArray->readonly = false; outArray->reference = NULL; if (arr1->nBytes > arr2->nBytes || arr1->glmType == PyGLM_TYPE_VEC) { outArray->glmType = arr1->glmType; outArray->itemSize = arr1->itemSize; outArray->nBytes = arr1->nBytes; outArray->subtype = arr1->subtype; outArray->shape[0] = arr1->shape[0]; outArray->shape[1] = arr1->shape[1]; } else { outArray->glmType = arr2->glmType; outArray->itemSize = arr2->itemSize; outArray->nBytes = arr2->nBytes; outArray->subtype = arr2->subtype; outArray->shape[0] = arr2->shape[0]; outArray->shape[1] = arr2->shape[1]; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arr1DataPtr = (T*)arr1->data; T* arr2DataPtr = (T*)arr2->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arr1Ratio = arr1->itemSize / outArray->dtSize; Py_ssize_t arr2Ratio = arr2->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = arr1DataPtr[i * arr1Ratio + (j % arr1Ratio)] << arr2DataPtr[i * arr2Ratio + (j % arr2Ratio)]; } } return (PyObject*)outArray; } template static PyObject* glmArray_lshiftO_T(glmArray* arr, T* o, Py_ssize_t o_size, PyGLMTypeObject* pto) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; if ((size_t)arr->itemSize / sizeof(T) > (size_t)o_size || arr->glmType == PyGLM_TYPE_VEC || pto == NULL) { outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; } else { PyGLM_ASSERT(pto != ((PyGLMTypeObject *) NULL), "pto is NULL. This should never occur!"); outArray->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemCount * outArray->itemSize; outArray->subtype = pto->subtype; outArray->shape[0] = pto->C; outArray->shape[1] = pto->R; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arrRatio = arr->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = arrDataPtr[i * arrRatio + (j % arrRatio)] << o[j % o_size]; } } return (PyObject*)outArray; } template static PyObject* glmArray_rlshiftO_T(glmArray* arr, T* o, Py_ssize_t o_size, PyGLMTypeObject* pto) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; if ((size_t)arr->itemSize / sizeof(T) > (size_t)o_size || arr->glmType == PyGLM_TYPE_VEC || pto == NULL) { outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; } else { PyGLM_ASSERT(pto != ((PyGLMTypeObject *) NULL), "pto is NULL. This should never occur!"); outArray->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemCount * outArray->itemSize; outArray->subtype = pto->subtype; outArray->shape[0] = pto->C; outArray->shape[1] = pto->R; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arrRatio = arr->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = o[j % o_size] << arrDataPtr[i * arrRatio + (j % arrRatio)]; } } return (PyObject*)outArray; } static PyObject* glmArray_lshift(PyObject* obj1, PyObject* obj2) { if (PyObject_TypeCheck(obj1, &glmArrayType)) { // obj1 is an array glmArray* arr1 = (glmArray*)obj1; if (arr1->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (PyObject_TypeCheck(obj2, &glmArrayType)) { // obj2 is an array glmArray* arr2 = (glmArray*)obj2; if (arr1->itemCount != arr2->itemCount) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same amount of elements."); return NULL; } if (arr1->format != arr2->format) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same data type."); return NULL; } if (arr2->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || arr2->glmType == PyGLM_TYPE_CTYPES || arr1->subtype == arr2->subtype) { switch (arr1->format) { case get_format_specifier() : return glmArray_lshift_T(arr1, arr2); case get_format_specifier() : return glmArray_lshift_T(arr1, arr2); case get_format_specifier() : return glmArray_lshift_T(arr1, arr2); case get_format_specifier() : return glmArray_lshift_T(arr1, arr2); case get_format_specifier() : return glmArray_lshift_T(arr1, arr2); case get_format_specifier() : return glmArray_lshift_T(arr1, arr2); case get_format_specifier() : return glmArray_lshift_T(arr1, arr2); case get_format_specifier() : return glmArray_lshift_T(arr1, arr2); } } PyErr_SetString(PyExc_ValueError, "The given arrays are not compatible."); return NULL; } if (PyGLM_Number_Check(obj2)) { union { int64 i64; uint64 u64; int32 i32; uint32 u32; int16 i16; uint16 u16; int8 i8; uint8 u8; }; switch (arr1->format) { case get_format_specifier() : i64 = PyGLM_Number_FromPyObject(obj2); return glmArray_lshiftO_T(arr1, &i64, 1, NULL); case get_format_specifier() : u64 = PyGLM_Number_FromPyObject(obj2); return glmArray_lshiftO_T(arr1, &u64, 1, NULL); case get_format_specifier() : i32 = PyGLM_Number_FromPyObject(obj2); return glmArray_lshiftO_T(arr1, &i32, 1, NULL); case get_format_specifier() : u32 = PyGLM_Number_FromPyObject(obj2); return glmArray_lshiftO_T(arr1, &u32, 1, NULL); case get_format_specifier() : i16 = PyGLM_Number_FromPyObject(obj2); return glmArray_lshiftO_T(arr1, &i16, 1, NULL); case get_format_specifier() : u16 = PyGLM_Number_FromPyObject(obj2); return glmArray_lshiftO_T(arr1, &u16, 1, NULL); case get_format_specifier() : i8 = PyGLM_Number_FromPyObject(obj2); return glmArray_lshiftO_T(arr1, &i8, 1, NULL); case get_format_specifier() : u8 = PyGLM_Number_FromPyObject(obj2); return glmArray_lshiftO_T(arr1, &u8, 1, NULL); } } if (PyGLM_Is_PyGLM_Type(Py_TYPE(obj2))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(obj2)); if (arr1->format != pto->format) { PyErr_SetString(PyExc_ValueError, "The given array and object don't have the same data type."); return NULL; } if (pto->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || pto->glmType == PyGLM_TYPE_CTYPES || arr1->subtype == pto->subtype) { switch (arr1->format) { case get_format_specifier() : return glmArray_lshiftO_T(arr1, (int64*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_lshiftO_T(arr1, (uint64*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_lshiftO_T(arr1, (int32*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_lshiftO_T(arr1, (uint32*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_lshiftO_T(arr1, (int16*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_lshiftO_T(arr1, (uint16*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_lshiftO_T(arr1, (int8*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_lshiftO_T(arr1, (uint8*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); } } PyErr_SetString(PyExc_ValueError, "The given array and object are not compatible."); return NULL; } Py_RETURN_NOTIMPLEMENTED; } else { glmArray* arr2 = (glmArray*)obj2; if (arr2->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (PyGLM_Number_Check(obj1)) { union { int64 i64; uint64 u64; int32 i32; uint32 u32; int16 i16; uint16 u16; int8 i8; uint8 u8; }; switch (arr2->format) { case get_format_specifier() : i64 = PyGLM_Number_FromPyObject(obj1); return glmArray_rlshiftO_T(arr2, &i64, 1, NULL); case get_format_specifier() : u64 = PyGLM_Number_FromPyObject(obj1); return glmArray_rlshiftO_T(arr2, &u64, 1, NULL); case get_format_specifier() : i32 = PyGLM_Number_FromPyObject(obj1); return glmArray_rlshiftO_T(arr2, &i32, 1, NULL); case get_format_specifier() : u32 = PyGLM_Number_FromPyObject(obj1); return glmArray_rlshiftO_T(arr2, &u32, 1, NULL); case get_format_specifier() : i16 = PyGLM_Number_FromPyObject(obj1); return glmArray_rlshiftO_T(arr2, &i16, 1, NULL); case get_format_specifier() : u16 = PyGLM_Number_FromPyObject(obj1); return glmArray_rlshiftO_T(arr2, &u16, 1, NULL); case get_format_specifier() : i8 = PyGLM_Number_FromPyObject(obj1); return glmArray_rlshiftO_T(arr2, &i8, 1, NULL); case get_format_specifier() : u8 = PyGLM_Number_FromPyObject(obj1); return glmArray_rlshiftO_T(arr2, &u8, 1, NULL); } } if (PyGLM_Is_PyGLM_Type(Py_TYPE(obj1))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(obj1)); if (arr2->format != pto->format) { PyErr_SetString(PyExc_ValueError, "The given array and object don't have the same data type."); return NULL; } if (pto->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr2->glmType == PyGLM_TYPE_CTYPES || pto->glmType == PyGLM_TYPE_CTYPES || arr2->subtype == pto->subtype) { switch (arr2->format) { case get_format_specifier() : return glmArray_rlshiftO_T(arr2, (int64*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rlshiftO_T(arr2, (uint64*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rlshiftO_T(arr2, (int32*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rlshiftO_T(arr2, (uint32*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rlshiftO_T(arr2, (int16*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rlshiftO_T(arr2, (uint16*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rlshiftO_T(arr2, (int8*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rlshiftO_T(arr2, (uint8*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); } } PyErr_SetString(PyExc_ValueError, "The given array and object are not compatible."); return NULL; } } PyGLM_TYPEERROR_2O("Invalid operand type(s) for '<<': ", obj1, obj2); return NULL; } template static PyObject* glmArray_rshift_T(glmArray* arr1, glmArray* arr2) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr1->dtSize; outArray->format = arr1->format; outArray->itemCount = arr1->itemCount; outArray->readonly = false; outArray->reference = NULL; if (arr1->nBytes > arr2->nBytes || arr1->glmType == PyGLM_TYPE_VEC) { outArray->glmType = arr1->glmType; outArray->itemSize = arr1->itemSize; outArray->nBytes = arr1->nBytes; outArray->subtype = arr1->subtype; outArray->shape[0] = arr1->shape[0]; outArray->shape[1] = arr1->shape[1]; } else { outArray->glmType = arr2->glmType; outArray->itemSize = arr2->itemSize; outArray->nBytes = arr2->nBytes; outArray->subtype = arr2->subtype; outArray->shape[0] = arr2->shape[0]; outArray->shape[1] = arr2->shape[1]; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arr1DataPtr = (T*)arr1->data; T* arr2DataPtr = (T*)arr2->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arr1Ratio = arr1->itemSize / outArray->dtSize; Py_ssize_t arr2Ratio = arr2->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = arr1DataPtr[i * arr1Ratio + (j % arr1Ratio)] >> arr2DataPtr[i * arr2Ratio + (j % arr2Ratio)]; } } return (PyObject*)outArray; } template static PyObject* glmArray_rshiftO_T(glmArray* arr, T* o, Py_ssize_t o_size, PyGLMTypeObject* pto) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; if ((size_t)arr->itemSize / sizeof(T) > (size_t)o_size || arr->glmType == PyGLM_TYPE_VEC || pto == NULL) { outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; } else { PyGLM_ASSERT(pto != ((PyGLMTypeObject *) NULL), "pto is NULL. This should never occur!"); outArray->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemCount * outArray->itemSize; outArray->subtype = pto->subtype; outArray->shape[0] = pto->C; outArray->shape[1] = pto->R; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arrRatio = arr->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = arrDataPtr[i * arrRatio + (j % arrRatio)] >> o[j % o_size]; } } return (PyObject*)outArray; } template static PyObject* glmArray_rrshiftO_T(glmArray* arr, T* o, Py_ssize_t o_size, PyGLMTypeObject* pto) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; if ((size_t)arr->itemSize / sizeof(T) > (size_t)o_size || arr->glmType == PyGLM_TYPE_VEC || pto == NULL) { outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; } else { PyGLM_ASSERT(pto != ((PyGLMTypeObject *) NULL), "pto is NULL. This should never occur!"); outArray->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemCount * outArray->itemSize; outArray->subtype = pto->subtype; outArray->shape[0] = pto->C; outArray->shape[1] = pto->R; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arrRatio = arr->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = o[j % o_size] >> arrDataPtr[i * arrRatio + (j % arrRatio)]; } } return (PyObject*)outArray; } static PyObject* glmArray_rshift(PyObject* obj1, PyObject* obj2) { if (PyObject_TypeCheck(obj1, &glmArrayType)) { // obj1 is an array glmArray* arr1 = (glmArray*)obj1; if (arr1->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (PyObject_TypeCheck(obj2, &glmArrayType)) { // obj2 is an array glmArray* arr2 = (glmArray*)obj2; if (arr1->itemCount != arr2->itemCount) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same amount of elements."); return NULL; } if (arr1->format != arr2->format) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same data type."); return NULL; } if (arr2->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || arr2->glmType == PyGLM_TYPE_CTYPES || arr1->subtype == arr2->subtype) { switch (arr1->format) { case get_format_specifier() : return glmArray_rshift_T(arr1, arr2); case get_format_specifier() : return glmArray_rshift_T(arr1, arr2); case get_format_specifier() : return glmArray_rshift_T(arr1, arr2); case get_format_specifier() : return glmArray_rshift_T(arr1, arr2); case get_format_specifier() : return glmArray_rshift_T(arr1, arr2); case get_format_specifier() : return glmArray_rshift_T(arr1, arr2); case get_format_specifier() : return glmArray_rshift_T(arr1, arr2); case get_format_specifier() : return glmArray_rshift_T(arr1, arr2); } } PyErr_SetString(PyExc_ValueError, "The given arrays are not compatible."); return NULL; } if (PyGLM_Number_Check(obj2)) { union { int64 i64; uint64 u64; int32 i32; uint32 u32; int16 i16; uint16 u16; int8 i8; uint8 u8; }; switch (arr1->format) { case get_format_specifier() : i64 = PyGLM_Number_FromPyObject(obj2); return glmArray_rshiftO_T(arr1, &i64, 1, NULL); case get_format_specifier() : u64 = PyGLM_Number_FromPyObject(obj2); return glmArray_rshiftO_T(arr1, &u64, 1, NULL); case get_format_specifier() : i32 = PyGLM_Number_FromPyObject(obj2); return glmArray_rshiftO_T(arr1, &i32, 1, NULL); case get_format_specifier() : u32 = PyGLM_Number_FromPyObject(obj2); return glmArray_rshiftO_T(arr1, &u32, 1, NULL); case get_format_specifier() : i16 = PyGLM_Number_FromPyObject(obj2); return glmArray_rshiftO_T(arr1, &i16, 1, NULL); case get_format_specifier() : u16 = PyGLM_Number_FromPyObject(obj2); return glmArray_rshiftO_T(arr1, &u16, 1, NULL); case get_format_specifier() : i8 = PyGLM_Number_FromPyObject(obj2); return glmArray_rshiftO_T(arr1, &i8, 1, NULL); case get_format_specifier() : u8 = PyGLM_Number_FromPyObject(obj2); return glmArray_rshiftO_T(arr1, &u8, 1, NULL); } } if (PyGLM_Is_PyGLM_Type(Py_TYPE(obj2))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(obj2)); if (arr1->format != pto->format) { PyErr_SetString(PyExc_ValueError, "The given array and object don't have the same data type."); return NULL; } if (pto->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || pto->glmType == PyGLM_TYPE_CTYPES || arr1->subtype == pto->subtype) { switch (arr1->format) { case get_format_specifier() : return glmArray_rshiftO_T(arr1, (int64*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rshiftO_T(arr1, (uint64*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rshiftO_T(arr1, (int32*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rshiftO_T(arr1, (uint32*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rshiftO_T(arr1, (int16*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rshiftO_T(arr1, (uint16*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rshiftO_T(arr1, (int8*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rshiftO_T(arr1, (uint8*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); } } PyErr_SetString(PyExc_ValueError, "The given array and object are not compatible."); return NULL; } Py_RETURN_NOTIMPLEMENTED; } else { glmArray* arr2 = (glmArray*)obj2; if (arr2->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (PyGLM_Number_Check(obj1)) { union { int64 i64; uint64 u64; int32 i32; uint32 u32; int16 i16; uint16 u16; int8 i8; uint8 u8; }; switch (arr2->format) { case get_format_specifier() : i64 = PyGLM_Number_FromPyObject(obj1); return glmArray_rrshiftO_T(arr2, &i64, 1, NULL); case get_format_specifier() : u64 = PyGLM_Number_FromPyObject(obj1); return glmArray_rrshiftO_T(arr2, &u64, 1, NULL); case get_format_specifier() : i32 = PyGLM_Number_FromPyObject(obj1); return glmArray_rrshiftO_T(arr2, &i32, 1, NULL); case get_format_specifier() : u32 = PyGLM_Number_FromPyObject(obj1); return glmArray_rrshiftO_T(arr2, &u32, 1, NULL); case get_format_specifier() : i16 = PyGLM_Number_FromPyObject(obj1); return glmArray_rrshiftO_T(arr2, &i16, 1, NULL); case get_format_specifier() : u16 = PyGLM_Number_FromPyObject(obj1); return glmArray_rrshiftO_T(arr2, &u16, 1, NULL); case get_format_specifier() : i8 = PyGLM_Number_FromPyObject(obj1); return glmArray_rrshiftO_T(arr2, &i8, 1, NULL); case get_format_specifier() : u8 = PyGLM_Number_FromPyObject(obj1); return glmArray_rrshiftO_T(arr2, &u8, 1, NULL); } } if (PyGLM_Is_PyGLM_Type(Py_TYPE(obj1))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(obj1)); if (arr2->format != pto->format) { PyErr_SetString(PyExc_ValueError, "The given array and object don't have the same data type."); return NULL; } if (pto->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr2->glmType == PyGLM_TYPE_CTYPES || pto->glmType == PyGLM_TYPE_CTYPES || arr2->subtype == pto->subtype) { switch (arr2->format) { case get_format_specifier() : return glmArray_rrshiftO_T(arr2, (int64*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rrshiftO_T(arr2, (uint64*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rrshiftO_T(arr2, (int32*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rrshiftO_T(arr2, (uint32*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rrshiftO_T(arr2, (int16*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rrshiftO_T(arr2, (uint16*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rrshiftO_T(arr2, (int8*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rrshiftO_T(arr2, (uint8*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); } } PyErr_SetString(PyExc_ValueError, "The given array and object are not compatible."); return NULL; } } PyGLM_TYPEERROR_2O("Invalid operand type(s) for '>>': ", obj1, obj2); return NULL; } template static PyObject* glmArray_and_T(glmArray* arr1, glmArray* arr2) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr1->dtSize; outArray->format = arr1->format; outArray->itemCount = arr1->itemCount; outArray->readonly = false; outArray->reference = NULL; if (arr1->nBytes > arr2->nBytes || arr1->glmType == PyGLM_TYPE_VEC) { outArray->glmType = arr1->glmType; outArray->itemSize = arr1->itemSize; outArray->nBytes = arr1->nBytes; outArray->subtype = arr1->subtype; outArray->shape[0] = arr1->shape[0]; outArray->shape[1] = arr1->shape[1]; } else { outArray->glmType = arr2->glmType; outArray->itemSize = arr2->itemSize; outArray->nBytes = arr2->nBytes; outArray->subtype = arr2->subtype; outArray->shape[0] = arr2->shape[0]; outArray->shape[1] = arr2->shape[1]; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arr1DataPtr = (T*)arr1->data; T* arr2DataPtr = (T*)arr2->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arr1Ratio = arr1->itemSize / outArray->dtSize; Py_ssize_t arr2Ratio = arr2->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = arr1DataPtr[i * arr1Ratio + (j % arr1Ratio)] & arr2DataPtr[i * arr2Ratio + (j % arr2Ratio)]; } } return (PyObject*)outArray; } template static PyObject* glmArray_andO_T(glmArray* arr, T* o, Py_ssize_t o_size, PyGLMTypeObject* pto) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; if ((size_t)arr->itemSize / sizeof(T) > (size_t)o_size || arr->glmType == PyGLM_TYPE_VEC || pto == NULL) { outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; } else { PyGLM_ASSERT(pto != ((PyGLMTypeObject *) NULL), "pto is NULL. This should never occur!"); outArray->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemCount * outArray->itemSize; outArray->subtype = pto->subtype; outArray->shape[0] = pto->C; outArray->shape[1] = pto->R; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arrRatio = arr->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = arrDataPtr[i * arrRatio + (j % arrRatio)] & o[j % o_size]; } } return (PyObject*)outArray; } template static PyObject* glmArray_randO_T(glmArray* arr, T* o, Py_ssize_t o_size, PyGLMTypeObject* pto) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; if ((size_t)arr->itemSize / sizeof(T) > (size_t)o_size || arr->glmType == PyGLM_TYPE_VEC || pto == NULL) { outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; } else { PyGLM_ASSERT(pto != ((PyGLMTypeObject *) NULL), "pto is NULL. This should never occur!"); outArray->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemCount * outArray->itemSize; outArray->subtype = pto->subtype; outArray->shape[0] = pto->C; outArray->shape[1] = pto->R; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arrRatio = arr->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = o[j % o_size] & arrDataPtr[i * arrRatio + (j % arrRatio)]; } } return (PyObject*)outArray; } static PyObject* glmArray_and(PyObject* obj1, PyObject* obj2) { if (PyObject_TypeCheck(obj1, &glmArrayType)) { // obj1 is an array glmArray* arr1 = (glmArray*)obj1; if (arr1->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (PyObject_TypeCheck(obj2, &glmArrayType)) { // obj2 is an array glmArray* arr2 = (glmArray*)obj2; if (arr1->itemCount != arr2->itemCount) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same amount of elements."); return NULL; } if (arr1->format != arr2->format) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same data type."); return NULL; } if (arr2->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || arr2->glmType == PyGLM_TYPE_CTYPES || arr1->subtype == arr2->subtype) { switch (arr1->format) { case get_format_specifier() : return glmArray_and_T(arr1, arr2); case get_format_specifier() : return glmArray_and_T(arr1, arr2); case get_format_specifier() : return glmArray_and_T(arr1, arr2); case get_format_specifier() : return glmArray_and_T(arr1, arr2); case get_format_specifier() : return glmArray_and_T(arr1, arr2); case get_format_specifier() : return glmArray_and_T(arr1, arr2); case get_format_specifier() : return glmArray_and_T(arr1, arr2); case get_format_specifier() : return glmArray_and_T(arr1, arr2); } } PyErr_SetString(PyExc_ValueError, "The given arrays are not compatible."); return NULL; } if (PyGLM_Number_Check(obj2)) { union { int64 i64; uint64 u64; int32 i32; uint32 u32; int16 i16; uint16 u16; int8 i8; uint8 u8; }; switch (arr1->format) { case get_format_specifier() : i64 = PyGLM_Number_FromPyObject(obj2); return glmArray_andO_T(arr1, &i64, 1, NULL); case get_format_specifier() : u64 = PyGLM_Number_FromPyObject(obj2); return glmArray_andO_T(arr1, &u64, 1, NULL); case get_format_specifier() : i32 = PyGLM_Number_FromPyObject(obj2); return glmArray_andO_T(arr1, &i32, 1, NULL); case get_format_specifier() : u32 = PyGLM_Number_FromPyObject(obj2); return glmArray_andO_T(arr1, &u32, 1, NULL); case get_format_specifier() : i16 = PyGLM_Number_FromPyObject(obj2); return glmArray_andO_T(arr1, &i16, 1, NULL); case get_format_specifier() : u16 = PyGLM_Number_FromPyObject(obj2); return glmArray_andO_T(arr1, &u16, 1, NULL); case get_format_specifier() : i8 = PyGLM_Number_FromPyObject(obj2); return glmArray_andO_T(arr1, &i8, 1, NULL); case get_format_specifier() : u8 = PyGLM_Number_FromPyObject(obj2); return glmArray_andO_T(arr1, &u8, 1, NULL); } } if (PyGLM_Is_PyGLM_Type(Py_TYPE(obj2))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(obj2)); if (arr1->format != pto->format) { PyErr_SetString(PyExc_ValueError, "The given array and object don't have the same data type."); return NULL; } if (pto->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || pto->glmType == PyGLM_TYPE_CTYPES || arr1->subtype == pto->subtype) { switch (arr1->format) { case get_format_specifier() : return glmArray_andO_T(arr1, (int64*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_andO_T(arr1, (uint64*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_andO_T(arr1, (int32*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_andO_T(arr1, (uint32*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_andO_T(arr1, (int16*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_andO_T(arr1, (uint16*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_andO_T(arr1, (int8*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_andO_T(arr1, (uint8*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); } } PyErr_SetString(PyExc_ValueError, "The given array and object are not compatible."); return NULL; } Py_RETURN_NOTIMPLEMENTED; } else { glmArray* arr2 = (glmArray*)obj2; if (arr2->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (PyGLM_Number_Check(obj1)) { union { int64 i64; uint64 u64; int32 i32; uint32 u32; int16 i16; uint16 u16; int8 i8; uint8 u8; }; switch (arr2->format) { case get_format_specifier() : i64 = PyGLM_Number_FromPyObject(obj1); return glmArray_randO_T(arr2, &i64, 1, NULL); case get_format_specifier() : u64 = PyGLM_Number_FromPyObject(obj1); return glmArray_randO_T(arr2, &u64, 1, NULL); case get_format_specifier() : i32 = PyGLM_Number_FromPyObject(obj1); return glmArray_randO_T(arr2, &i32, 1, NULL); case get_format_specifier() : u32 = PyGLM_Number_FromPyObject(obj1); return glmArray_randO_T(arr2, &u32, 1, NULL); case get_format_specifier() : i16 = PyGLM_Number_FromPyObject(obj1); return glmArray_randO_T(arr2, &i16, 1, NULL); case get_format_specifier() : u16 = PyGLM_Number_FromPyObject(obj1); return glmArray_randO_T(arr2, &u16, 1, NULL); case get_format_specifier() : i8 = PyGLM_Number_FromPyObject(obj1); return glmArray_randO_T(arr2, &i8, 1, NULL); case get_format_specifier() : u8 = PyGLM_Number_FromPyObject(obj1); return glmArray_randO_T(arr2, &u8, 1, NULL); } } if (PyGLM_Is_PyGLM_Type(Py_TYPE(obj1))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(obj1)); if (arr2->format != pto->format) { PyErr_SetString(PyExc_ValueError, "The given array and object don't have the same data type."); return NULL; } if (pto->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr2->glmType == PyGLM_TYPE_CTYPES || pto->glmType == PyGLM_TYPE_CTYPES || arr2->subtype == pto->subtype) { switch (arr2->format) { case get_format_specifier() : return glmArray_randO_T(arr2, (int64*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_randO_T(arr2, (uint64*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_randO_T(arr2, (int32*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_randO_T(arr2, (uint32*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_randO_T(arr2, (int16*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_randO_T(arr2, (uint16*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_randO_T(arr2, (int8*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_randO_T(arr2, (uint8*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); } } PyErr_SetString(PyExc_ValueError, "The given array and object are not compatible."); return NULL; } } PyGLM_TYPEERROR_2O("Invalid operand type(s) for '&': ", obj1, obj2); return NULL; } template static PyObject* glmArray_xor_T(glmArray* arr1, glmArray* arr2) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr1->dtSize; outArray->format = arr1->format; outArray->itemCount = arr1->itemCount; outArray->readonly = false; outArray->reference = NULL; if (arr1->nBytes > arr2->nBytes || arr1->glmType == PyGLM_TYPE_VEC) { outArray->glmType = arr1->glmType; outArray->itemSize = arr1->itemSize; outArray->nBytes = arr1->nBytes; outArray->subtype = arr1->subtype; outArray->shape[0] = arr1->shape[0]; outArray->shape[1] = arr1->shape[1]; } else { outArray->glmType = arr2->glmType; outArray->itemSize = arr2->itemSize; outArray->nBytes = arr2->nBytes; outArray->subtype = arr2->subtype; outArray->shape[0] = arr2->shape[0]; outArray->shape[1] = arr2->shape[1]; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arr1DataPtr = (T*)arr1->data; T* arr2DataPtr = (T*)arr2->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arr1Ratio = arr1->itemSize / outArray->dtSize; Py_ssize_t arr2Ratio = arr2->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = arr1DataPtr[i * arr1Ratio + (j % arr1Ratio)] ^ arr2DataPtr[i * arr2Ratio + (j % arr2Ratio)]; } } return (PyObject*)outArray; } template static PyObject* glmArray_xorO_T(glmArray* arr, T* o, Py_ssize_t o_size, PyGLMTypeObject* pto) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; if ((size_t)arr->itemSize / sizeof(T) > (size_t)o_size || arr->glmType == PyGLM_TYPE_VEC || pto == NULL) { outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; } else { PyGLM_ASSERT(pto != ((PyGLMTypeObject *) NULL), "pto is NULL. This should never occur!"); outArray->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemCount * outArray->itemSize; outArray->subtype = pto->subtype; outArray->shape[0] = pto->C; outArray->shape[1] = pto->R; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arrRatio = arr->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = arrDataPtr[i * arrRatio + (j % arrRatio)] ^ o[j % o_size]; } } return (PyObject*)outArray; } template static PyObject* glmArray_rxorO_T(glmArray* arr, T* o, Py_ssize_t o_size, PyGLMTypeObject* pto) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; if ((size_t)arr->itemSize / sizeof(T) > (size_t)o_size || arr->glmType == PyGLM_TYPE_VEC || pto == NULL) { outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; } else { PyGLM_ASSERT(pto != ((PyGLMTypeObject *) NULL), "pto is NULL. This should never occur!"); outArray->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemCount * outArray->itemSize; outArray->subtype = pto->subtype; outArray->shape[0] = pto->C; outArray->shape[1] = pto->R; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arrRatio = arr->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = o[j % o_size] ^ arrDataPtr[i * arrRatio + (j % arrRatio)]; } } return (PyObject*)outArray; } static PyObject* glmArray_xor(PyObject* obj1, PyObject* obj2) { if (PyObject_TypeCheck(obj1, &glmArrayType)) { // obj1 is an array glmArray* arr1 = (glmArray*)obj1; if (arr1->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (PyObject_TypeCheck(obj2, &glmArrayType)) { // obj2 is an array glmArray* arr2 = (glmArray*)obj2; if (arr1->itemCount != arr2->itemCount) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same amount of elements."); return NULL; } if (arr1->format != arr2->format) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same data type."); return NULL; } if (arr2->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || arr2->glmType == PyGLM_TYPE_CTYPES || arr1->subtype == arr2->subtype) { switch (arr1->format) { case get_format_specifier() : return glmArray_xor_T(arr1, arr2); case get_format_specifier() : return glmArray_xor_T(arr1, arr2); case get_format_specifier() : return glmArray_xor_T(arr1, arr2); case get_format_specifier() : return glmArray_xor_T(arr1, arr2); case get_format_specifier() : return glmArray_xor_T(arr1, arr2); case get_format_specifier() : return glmArray_xor_T(arr1, arr2); case get_format_specifier() : return glmArray_xor_T(arr1, arr2); case get_format_specifier() : return glmArray_xor_T(arr1, arr2); } } PyErr_SetString(PyExc_ValueError, "The given arrays are not compatible."); return NULL; } if (PyGLM_Number_Check(obj2)) { union { int64 i64; uint64 u64; int32 i32; uint32 u32; int16 i16; uint16 u16; int8 i8; uint8 u8; }; switch (arr1->format) { case get_format_specifier() : i64 = PyGLM_Number_FromPyObject(obj2); return glmArray_xorO_T(arr1, &i64, 1, NULL); case get_format_specifier() : u64 = PyGLM_Number_FromPyObject(obj2); return glmArray_xorO_T(arr1, &u64, 1, NULL); case get_format_specifier() : i32 = PyGLM_Number_FromPyObject(obj2); return glmArray_xorO_T(arr1, &i32, 1, NULL); case get_format_specifier() : u32 = PyGLM_Number_FromPyObject(obj2); return glmArray_xorO_T(arr1, &u32, 1, NULL); case get_format_specifier() : i16 = PyGLM_Number_FromPyObject(obj2); return glmArray_xorO_T(arr1, &i16, 1, NULL); case get_format_specifier() : u16 = PyGLM_Number_FromPyObject(obj2); return glmArray_xorO_T(arr1, &u16, 1, NULL); case get_format_specifier() : i8 = PyGLM_Number_FromPyObject(obj2); return glmArray_xorO_T(arr1, &i8, 1, NULL); case get_format_specifier() : u8 = PyGLM_Number_FromPyObject(obj2); return glmArray_xorO_T(arr1, &u8, 1, NULL); } } if (PyGLM_Is_PyGLM_Type(Py_TYPE(obj2))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(obj2)); if (arr1->format != pto->format) { PyErr_SetString(PyExc_ValueError, "The given array and object don't have the same data type."); return NULL; } if (pto->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || pto->glmType == PyGLM_TYPE_CTYPES || arr1->subtype == pto->subtype) { switch (arr1->format) { case get_format_specifier() : return glmArray_xorO_T(arr1, (int64*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_xorO_T(arr1, (uint64*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_xorO_T(arr1, (int32*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_xorO_T(arr1, (uint32*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_xorO_T(arr1, (int16*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_xorO_T(arr1, (uint16*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_xorO_T(arr1, (int8*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_xorO_T(arr1, (uint8*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); } } PyErr_SetString(PyExc_ValueError, "The given array and object are not compatible."); return NULL; } Py_RETURN_NOTIMPLEMENTED; } else { glmArray* arr2 = (glmArray*)obj2; if (arr2->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (PyGLM_Number_Check(obj1)) { union { int64 i64; uint64 u64; int32 i32; uint32 u32; int16 i16; uint16 u16; int8 i8; uint8 u8; }; switch (arr2->format) { case get_format_specifier() : i64 = PyGLM_Number_FromPyObject(obj1); return glmArray_rxorO_T(arr2, &i64, 1, NULL); case get_format_specifier() : u64 = PyGLM_Number_FromPyObject(obj1); return glmArray_rxorO_T(arr2, &u64, 1, NULL); case get_format_specifier() : i32 = PyGLM_Number_FromPyObject(obj1); return glmArray_rxorO_T(arr2, &i32, 1, NULL); case get_format_specifier() : u32 = PyGLM_Number_FromPyObject(obj1); return glmArray_rxorO_T(arr2, &u32, 1, NULL); case get_format_specifier() : i16 = PyGLM_Number_FromPyObject(obj1); return glmArray_rxorO_T(arr2, &i16, 1, NULL); case get_format_specifier() : u16 = PyGLM_Number_FromPyObject(obj1); return glmArray_rxorO_T(arr2, &u16, 1, NULL); case get_format_specifier() : i8 = PyGLM_Number_FromPyObject(obj1); return glmArray_rxorO_T(arr2, &i8, 1, NULL); case get_format_specifier() : u8 = PyGLM_Number_FromPyObject(obj1); return glmArray_rxorO_T(arr2, &u8, 1, NULL); } } if (PyGLM_Is_PyGLM_Type(Py_TYPE(obj1))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(obj1)); if (arr2->format != pto->format) { PyErr_SetString(PyExc_ValueError, "The given array and object don't have the same data type."); return NULL; } if (pto->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr2->glmType == PyGLM_TYPE_CTYPES || pto->glmType == PyGLM_TYPE_CTYPES || arr2->subtype == pto->subtype) { switch (arr2->format) { case get_format_specifier() : return glmArray_rxorO_T(arr2, (int64*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rxorO_T(arr2, (uint64*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rxorO_T(arr2, (int32*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rxorO_T(arr2, (uint32*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rxorO_T(arr2, (int16*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rxorO_T(arr2, (uint16*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rxorO_T(arr2, (int8*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rxorO_T(arr2, (uint8*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); } } PyErr_SetString(PyExc_ValueError, "The given array and object are not compatible."); return NULL; } } PyGLM_TYPEERROR_2O("Invalid operand type(s) for '^': ", obj1, obj2); return NULL; } template static PyObject* glmArray_or_T(glmArray* arr1, glmArray* arr2) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr1->dtSize; outArray->format = arr1->format; outArray->itemCount = arr1->itemCount; outArray->readonly = false; outArray->reference = NULL; if (arr1->nBytes > arr2->nBytes || arr1->glmType == PyGLM_TYPE_VEC) { outArray->glmType = arr1->glmType; outArray->itemSize = arr1->itemSize; outArray->nBytes = arr1->nBytes; outArray->subtype = arr1->subtype; outArray->shape[0] = arr1->shape[0]; outArray->shape[1] = arr1->shape[1]; } else { outArray->glmType = arr2->glmType; outArray->itemSize = arr2->itemSize; outArray->nBytes = arr2->nBytes; outArray->subtype = arr2->subtype; outArray->shape[0] = arr2->shape[0]; outArray->shape[1] = arr2->shape[1]; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arr1DataPtr = (T*)arr1->data; T* arr2DataPtr = (T*)arr2->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arr1Ratio = arr1->itemSize / outArray->dtSize; Py_ssize_t arr2Ratio = arr2->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = arr1DataPtr[i * arr1Ratio + (j % arr1Ratio)] | arr2DataPtr[i * arr2Ratio + (j % arr2Ratio)]; } } return (PyObject*)outArray; } template static PyObject* glmArray_orO_T(glmArray* arr, T* o, Py_ssize_t o_size, PyGLMTypeObject* pto) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; if ((size_t)arr->itemSize / sizeof(T) > (size_t)o_size || arr->glmType == PyGLM_TYPE_VEC || pto == NULL) { outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; } else { PyGLM_ASSERT(pto != ((PyGLMTypeObject *) NULL), "pto is NULL. This should never occur!"); outArray->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemCount * outArray->itemSize; outArray->subtype = pto->subtype; outArray->shape[0] = pto->C; outArray->shape[1] = pto->R; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arrRatio = arr->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = arrDataPtr[i * arrRatio + (j % arrRatio)] | o[j % o_size]; } } return (PyObject*)outArray; } template static PyObject* glmArray_rorO_T(glmArray* arr, T* o, Py_ssize_t o_size, PyGLMTypeObject* pto) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; if ((size_t)arr->itemSize / sizeof(T) > (size_t)o_size || arr->glmType == PyGLM_TYPE_VEC || pto == NULL) { outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; } else { PyGLM_ASSERT(pto != ((PyGLMTypeObject *) NULL), "pto is NULL. This should never occur!"); outArray->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemCount * outArray->itemSize; outArray->subtype = pto->subtype; outArray->shape[0] = pto->C; outArray->shape[1] = pto->R; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arrRatio = arr->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { outArrayDataPtr[outArrayIndex++] = o[j % o_size] | arrDataPtr[i * arrRatio + (j % arrRatio)]; } } return (PyObject*)outArray; } static PyObject* glmArray_or(PyObject* obj1, PyObject* obj2) { if (PyObject_TypeCheck(obj1, &glmArrayType)) { // obj1 is an array glmArray* arr1 = (glmArray*)obj1; if (arr1->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (PyObject_TypeCheck(obj2, &glmArrayType)) { // obj2 is an array glmArray* arr2 = (glmArray*)obj2; if (arr1->itemCount != arr2->itemCount) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same amount of elements."); return NULL; } if (arr1->format != arr2->format) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same data type."); return NULL; } if (arr2->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || arr2->glmType == PyGLM_TYPE_CTYPES || arr1->subtype == arr2->subtype) { switch (arr1->format) { case get_format_specifier() : return glmArray_or_T(arr1, arr2); case get_format_specifier() : return glmArray_or_T(arr1, arr2); case get_format_specifier() : return glmArray_or_T(arr1, arr2); case get_format_specifier() : return glmArray_or_T(arr1, arr2); case get_format_specifier() : return glmArray_or_T(arr1, arr2); case get_format_specifier() : return glmArray_or_T(arr1, arr2); case get_format_specifier() : return glmArray_or_T(arr1, arr2); case get_format_specifier() : return glmArray_or_T(arr1, arr2); } } PyErr_SetString(PyExc_ValueError, "The given arrays are not compatible."); return NULL; } if (PyGLM_Number_Check(obj2)) { union { int64 i64; uint64 u64; int32 i32; uint32 u32; int16 i16; uint16 u16; int8 i8; uint8 u8; }; switch (arr1->format) { case get_format_specifier() : i64 = PyGLM_Number_FromPyObject(obj2); return glmArray_orO_T(arr1, &i64, 1, NULL); case get_format_specifier() : u64 = PyGLM_Number_FromPyObject(obj2); return glmArray_orO_T(arr1, &u64, 1, NULL); case get_format_specifier() : i32 = PyGLM_Number_FromPyObject(obj2); return glmArray_orO_T(arr1, &i32, 1, NULL); case get_format_specifier() : u32 = PyGLM_Number_FromPyObject(obj2); return glmArray_orO_T(arr1, &u32, 1, NULL); case get_format_specifier() : i16 = PyGLM_Number_FromPyObject(obj2); return glmArray_orO_T(arr1, &i16, 1, NULL); case get_format_specifier() : u16 = PyGLM_Number_FromPyObject(obj2); return glmArray_orO_T(arr1, &u16, 1, NULL); case get_format_specifier() : i8 = PyGLM_Number_FromPyObject(obj2); return glmArray_orO_T(arr1, &i8, 1, NULL); case get_format_specifier() : u8 = PyGLM_Number_FromPyObject(obj2); return glmArray_orO_T(arr1, &u8, 1, NULL); } } if (PyGLM_Is_PyGLM_Type(Py_TYPE(obj2))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(obj2)); if (arr1->format != pto->format) { PyErr_SetString(PyExc_ValueError, "The given array and object don't have the same data type."); return NULL; } if (pto->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || pto->glmType == PyGLM_TYPE_CTYPES || arr1->subtype == pto->subtype) { switch (arr1->format) { case get_format_specifier() : return glmArray_orO_T(arr1, (int64*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_orO_T(arr1, (uint64*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_orO_T(arr1, (int32*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_orO_T(arr1, (uint32*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_orO_T(arr1, (int16*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_orO_T(arr1, (uint16*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_orO_T(arr1, (int8*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_orO_T(arr1, (uint8*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); } } PyErr_SetString(PyExc_ValueError, "The given array and object are not compatible."); return NULL; } Py_RETURN_NOTIMPLEMENTED; } else { glmArray* arr2 = (glmArray*)obj2; if (arr2->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (PyGLM_Number_Check(obj1)) { union { int64 i64; uint64 u64; int32 i32; uint32 u32; int16 i16; uint16 u16; int8 i8; uint8 u8; }; switch (arr2->format) { case get_format_specifier() : i64 = PyGLM_Number_FromPyObject(obj1); return glmArray_rorO_T(arr2, &i64, 1, NULL); case get_format_specifier() : u64 = PyGLM_Number_FromPyObject(obj1); return glmArray_rorO_T(arr2, &u64, 1, NULL); case get_format_specifier() : i32 = PyGLM_Number_FromPyObject(obj1); return glmArray_rorO_T(arr2, &i32, 1, NULL); case get_format_specifier() : u32 = PyGLM_Number_FromPyObject(obj1); return glmArray_rorO_T(arr2, &u32, 1, NULL); case get_format_specifier() : i16 = PyGLM_Number_FromPyObject(obj1); return glmArray_rorO_T(arr2, &i16, 1, NULL); case get_format_specifier() : u16 = PyGLM_Number_FromPyObject(obj1); return glmArray_rorO_T(arr2, &u16, 1, NULL); case get_format_specifier() : i8 = PyGLM_Number_FromPyObject(obj1); return glmArray_rorO_T(arr2, &i8, 1, NULL); case get_format_specifier() : u8 = PyGLM_Number_FromPyObject(obj1); return glmArray_rorO_T(arr2, &u8, 1, NULL); } } if (PyGLM_Is_PyGLM_Type(Py_TYPE(obj1))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(obj1)); if (arr2->format != pto->format) { PyErr_SetString(PyExc_ValueError, "The given array and object don't have the same data type."); return NULL; } if (pto->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr2->glmType == PyGLM_TYPE_CTYPES || pto->glmType == PyGLM_TYPE_CTYPES || arr2->subtype == pto->subtype) { switch (arr2->format) { case get_format_specifier() : return glmArray_rorO_T(arr2, (int64*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rorO_T(arr2, (uint64*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rorO_T(arr2, (int32*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rorO_T(arr2, (uint32*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rorO_T(arr2, (int16*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rorO_T(arr2, (uint16*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rorO_T(arr2, (int8*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rorO_T(arr2, (uint8*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); } } PyErr_SetString(PyExc_ValueError, "The given array and object are not compatible."); return NULL; } } PyGLM_TYPEERROR_2O("Invalid operand type(s) for '|': ", obj1, obj2); return NULL; } template static PyObject* glmArray_div_T(glmArray* arr1, glmArray* arr2) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr1->dtSize; outArray->format = arr1->format; outArray->itemCount = arr1->itemCount; outArray->readonly = false; outArray->reference = NULL; if (arr1->nBytes > arr2->nBytes || arr1->glmType == PyGLM_TYPE_VEC) { outArray->glmType = arr1->glmType; outArray->itemSize = arr1->itemSize; outArray->nBytes = arr1->nBytes; outArray->subtype = arr1->subtype; outArray->shape[0] = arr1->shape[0]; outArray->shape[1] = arr1->shape[1]; } else { outArray->glmType = arr2->glmType; outArray->itemSize = arr2->itemSize; outArray->nBytes = arr2->nBytes; outArray->subtype = arr2->subtype; outArray->shape[0] = arr2->shape[0]; outArray->shape[1] = arr2->shape[1]; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arr1DataPtr = (T*)arr1->data; T* arr2DataPtr = (T*)arr2->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arr1Ratio = arr1->itemSize / outArray->dtSize; Py_ssize_t arr2Ratio = arr2->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { T b = arr2DataPtr[i * arr2Ratio + (j % arr2Ratio)]; if (b == (T)0) { PyGLM_ZERO_DIVISION_ERROR_T(T); } outArrayDataPtr[outArrayIndex++] = arr1DataPtr[i * arr1Ratio + (j % arr1Ratio)] / b; } } return (PyObject*)outArray; } template static PyObject* glmArray_divO_T(glmArray* arr, T* o, Py_ssize_t o_size, PyGLMTypeObject* pto) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; if ((size_t)arr->itemSize / sizeof(T) > (size_t)o_size || arr->glmType == PyGLM_TYPE_VEC || pto == NULL) { outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; } else { PyGLM_ASSERT(pto != ((PyGLMTypeObject *) NULL), "pto is NULL. This should never occur!"); outArray->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemCount * outArray->itemSize; outArray->subtype = pto->subtype; outArray->shape[0] = pto->C; outArray->shape[1] = pto->R; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arrRatio = arr->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { T b = o[j % o_size]; if (b == (T)0) { PyGLM_ZERO_DIVISION_ERROR_T(T); } outArrayDataPtr[outArrayIndex++] = arrDataPtr[i * arrRatio + (j % arrRatio)] / b; } } return (PyObject*)outArray; } template static PyObject* glmArray_rdivO_T(glmArray* arr, T* o, Py_ssize_t o_size, PyGLMTypeObject* pto) { glmArray* outArray = (glmArray*)glmArray_new(&glmArrayType, NULL, NULL); outArray->dtSize = arr->dtSize; outArray->format = arr->format; outArray->itemCount = arr->itemCount; outArray->readonly = false; outArray->reference = NULL; if ((size_t)arr->itemSize / sizeof(T) > (size_t)o_size || arr->glmType == PyGLM_TYPE_VEC || pto == NULL) { outArray->glmType = arr->glmType; outArray->itemSize = arr->itemSize; outArray->nBytes = arr->nBytes; outArray->subtype = arr->subtype; outArray->shape[0] = arr->shape[0]; outArray->shape[1] = arr->shape[1]; } else { PyGLM_ASSERT(pto != ((PyGLMTypeObject *) NULL), "pto is NULL. This should never occur!"); outArray->glmType = pto->glmType & PyGLM_TYPE_MVEC_FILTER; outArray->itemSize = pto->itemSize; outArray->nBytes = outArray->itemCount * outArray->itemSize; outArray->subtype = pto->subtype; outArray->shape[0] = pto->C; outArray->shape[1] = pto->R; } outArray->data = PyMem_Malloc(outArray->nBytes); if (outArray->data == NULL) { Py_DECREF(outArray); PyErr_SetString(PyExc_MemoryError, "Out of memory."); return NULL; } T* arrDataPtr = (T*)arr->data; T* outArrayDataPtr = (T*)outArray->data; Py_ssize_t outArrayIndex = 0; for (Py_ssize_t i = 0; i < outArray->itemCount; i++) { Py_ssize_t outArrayRatio = outArray->itemSize / outArray->dtSize; Py_ssize_t arrRatio = arr->itemSize / outArray->dtSize; for (Py_ssize_t j = 0; j < outArrayRatio; j++) { T b = arrDataPtr[i * arrRatio + (j % arrRatio)]; if (b == (T)0) { PyGLM_ZERO_DIVISION_ERROR_T(T); } outArrayDataPtr[outArrayIndex++] = o[j % o_size] / b; } } return (PyObject*)outArray; } static PyObject* glmArray_div(PyObject* obj1, PyObject* obj2) { if (PyObject_TypeCheck(obj1, &glmArrayType)) { // obj1 is an array glmArray* arr1 = (glmArray*)obj1; if (arr1->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (PyObject_TypeCheck(obj2, &glmArrayType)) { // obj2 is an array glmArray* arr2 = (glmArray*)obj2; if (arr1->itemCount != arr2->itemCount) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same amount of elements."); return NULL; } if (arr1->format != arr2->format) { PyErr_SetString(PyExc_ValueError, "The given arrays don't have the same data type."); return NULL; } if (arr2->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || arr2->glmType == PyGLM_TYPE_CTYPES || arr1->subtype == arr2->subtype) { switch (arr1->format) { case get_format_specifier() : return glmArray_div_T(arr1, arr2); case get_format_specifier() : return glmArray_div_T(arr1, arr2); case get_format_specifier() : return glmArray_div_T(arr1, arr2); case get_format_specifier() : return glmArray_div_T(arr1, arr2); case get_format_specifier() : return glmArray_div_T(arr1, arr2); case get_format_specifier() : return glmArray_div_T(arr1, arr2); case get_format_specifier() : return glmArray_div_T(arr1, arr2); case get_format_specifier() : return glmArray_div_T(arr1, arr2); case get_format_specifier() : return glmArray_div_T(arr1, arr2); case get_format_specifier() : return glmArray_div_T(arr1, arr2); } } PyErr_SetString(PyExc_ValueError, "The given arrays are not compatible."); return NULL; } if (PyGLM_Number_Check(obj2)) { union { float f; double d; int64 i64; uint64 u64; int32 i32; uint32 u32; int16 i16; uint16 u16; int8 i8; uint8 u8; }; switch (arr1->format) { case get_format_specifier() : f = PyGLM_Number_FromPyObject(obj2); return glmArray_divO_T(arr1, &f, 1, NULL); case get_format_specifier() : d = PyGLM_Number_FromPyObject(obj2); return glmArray_divO_T(arr1, &d, 1, NULL); case get_format_specifier() : i64 = PyGLM_Number_FromPyObject(obj2); return glmArray_divO_T(arr1, &i64, 1, NULL); case get_format_specifier() : u64 = PyGLM_Number_FromPyObject(obj2); return glmArray_divO_T(arr1, &u64, 1, NULL); case get_format_specifier() : i32 = PyGLM_Number_FromPyObject(obj2); return glmArray_divO_T(arr1, &i32, 1, NULL); case get_format_specifier() : u32 = PyGLM_Number_FromPyObject(obj2); return glmArray_divO_T(arr1, &u32, 1, NULL); case get_format_specifier() : i16 = PyGLM_Number_FromPyObject(obj2); return glmArray_divO_T(arr1, &i16, 1, NULL); case get_format_specifier() : u16 = PyGLM_Number_FromPyObject(obj2); return glmArray_divO_T(arr1, &u16, 1, NULL); case get_format_specifier() : i8 = PyGLM_Number_FromPyObject(obj2); return glmArray_divO_T(arr1, &i8, 1, NULL); case get_format_specifier() : u8 = PyGLM_Number_FromPyObject(obj2); return glmArray_divO_T(arr1, &u8, 1, NULL); } } if (PyGLM_Is_PyGLM_Type(Py_TYPE(obj2))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(obj2)); if (arr1->format != pto->format) { PyErr_SetString(PyExc_ValueError, "The given array and object don't have the same data type."); return NULL; } if (pto->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr1->glmType == PyGLM_TYPE_CTYPES || pto->glmType == PyGLM_TYPE_CTYPES || arr1->subtype == pto->subtype) { switch (arr1->format) { case get_format_specifier() : return glmArray_divO_T(arr1, (float*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_divO_T(arr1, (double*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_divO_T(arr1, (int64*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_divO_T(arr1, (uint64*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_divO_T(arr1, (int32*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_divO_T(arr1, (uint32*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_divO_T(arr1, (int16*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_divO_T(arr1, (uint16*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_divO_T(arr1, (int8*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_divO_T(arr1, (uint8*)(pto->getDataOf(obj2)), pto->itemSize / pto->dtSize, pto); } } PyErr_SetString(PyExc_ValueError, "The given array and object are not compatible."); return NULL; } Py_RETURN_NOTIMPLEMENTED; } else { glmArray* arr2 = (glmArray*)obj2; if (arr2->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (PyGLM_Number_Check(obj1)) { union { float f; double d; int64 i64; uint64 u64; int32 i32; uint32 u32; int16 i16; uint16 u16; int8 i8; uint8 u8; }; switch (arr2->format) { case get_format_specifier() : f = PyGLM_Number_FromPyObject(obj1); return glmArray_rdivO_T(arr2, &f, 1, NULL); case get_format_specifier() : d = PyGLM_Number_FromPyObject(obj1); return glmArray_rdivO_T(arr2, &d, 1, NULL); case get_format_specifier() : i64 = PyGLM_Number_FromPyObject(obj1); return glmArray_rdivO_T(arr2, &i64, 1, NULL); case get_format_specifier() : u64 = PyGLM_Number_FromPyObject(obj1); return glmArray_rdivO_T(arr2, &u64, 1, NULL); case get_format_specifier() : i32 = PyGLM_Number_FromPyObject(obj1); return glmArray_rdivO_T(arr2, &i32, 1, NULL); case get_format_specifier() : u32 = PyGLM_Number_FromPyObject(obj1); return glmArray_rdivO_T(arr2, &u32, 1, NULL); case get_format_specifier() : i16 = PyGLM_Number_FromPyObject(obj1); return glmArray_rdivO_T(arr2, &i16, 1, NULL); case get_format_specifier() : u16 = PyGLM_Number_FromPyObject(obj1); return glmArray_rdivO_T(arr2, &u16, 1, NULL); case get_format_specifier() : i8 = PyGLM_Number_FromPyObject(obj1); return glmArray_rdivO_T(arr2, &i8, 1, NULL); case get_format_specifier() : u8 = PyGLM_Number_FromPyObject(obj1); return glmArray_rdivO_T(arr2, &u8, 1, NULL); } } if (PyGLM_Is_PyGLM_Type(Py_TYPE(obj1))) { PyGLMTypeObject* pto = (PyGLMTypeObject*)(Py_TYPE(obj1)); if (arr2->format != pto->format) { PyErr_SetString(PyExc_ValueError, "The given array and object don't have the same data type."); return NULL; } if (pto->glmType == PyGLM_TYPE_MAT) { PyErr_SetString(PyExc_TypeError, "Matrices don't support this operation."); return NULL; } if (arr2->glmType == PyGLM_TYPE_CTYPES || pto->glmType == PyGLM_TYPE_CTYPES || arr2->subtype == pto->subtype) { switch (arr2->format) { case get_format_specifier() : return glmArray_rdivO_T(arr2, (float*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rdivO_T(arr2, (double*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rdivO_T(arr2, (int64*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rdivO_T(arr2, (uint64*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rdivO_T(arr2, (int32*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rdivO_T(arr2, (uint32*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rdivO_T(arr2, (int16*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rdivO_T(arr2, (uint16*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rdivO_T(arr2, (int8*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); case get_format_specifier() : return glmArray_rdivO_T(arr2, (uint8*)(pto->getDataOf(obj1)), pto->itemSize / pto->dtSize, pto); } } PyErr_SetString(PyExc_ValueError, "The given array and object are not compatible."); return NULL; } } PyGLM_TYPEERROR_2O("Invalid operand type(s) for '/': ", obj1, obj2); return NULL; } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/type_methods/mat.h000066400000000000000000002742251511156275200227610ustar00rootroot00000000000000#pragma once #include "../compiler_setup.h" #include "../internal_functions/all.h" #include "../types/mat/all.h" template static PyObject* mat_length(PyObject *, PyObject*) { return PyLong_FromLong(C); } static void mat_dealloc(PyObject* self) { if (self->ob_type != NULL) Py_TYPE(self)->tp_free(self); } template static PyObject * mat_new(PyTypeObject *type, PyObject *, PyObject *) { mat *self = (mat *)type->tp_alloc(type, 0); if (self != NULL) { //constexpr uint8_t info_type = get_type_helper_type(); //constexpr uint8_t info = (uint8_t)((C << PyGLM_TYPE_INFO_MAT_SHAPE1_OFFSET) | (R << PyGLM_TYPE_INFO_MAT_SHAPE2_OFFSET) | (info_type << PyGLM_TYPE_INFO_MAT_TYPE_OFFSET)); //self->info = info; self->super_type = glm::mat(); } return (PyObject *)self; } template static int mat2x2_init(mat<2, 2, T> *self, PyObject *args, PyObject *) { PyObject *arg1 = NULL; PyObject *arg2 = NULL; PyObject *arg3 = NULL; PyObject *arg4 = NULL; if (!PyArg_UnpackTuple(args, "mat2x2", 0, 4, &arg1, &arg2, &arg3, &arg4)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat2x2()"); return -1; } if (arg1 == NULL) { return 0; } if (arg2 == NULL) { if (PyGLM_Number_Check(arg1)) { self->super_type = glm::mat<2,2,T>(PyGLM_Number_FromPyObject(arg1)); return 0; } PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_NxM | PyGLM_PTI_GetDT(T)); if (PyGLM_Mat_PTI_Check0(2, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 4, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 4, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 4, T, arg1); return 0; } // mat2x2s with different data types PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_2x2 | PyGLM_DT_MAT_ALL); if (PyGLM_Mat_PTI_Check0(2, 2, float, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 2, float, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 2, double, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 2, double, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 2, int32, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 2, int32, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 2, uint32, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 2, uint32, arg1); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat2x2()"); return -1; } if (arg3 == NULL) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { T o = PyGLM_Number_FromPyObject(arg1); T o2 = PyGLM_Number_FromPyObject(arg2); self->super_type = glm::mat<2, 2, T>(o, (T)0, (T)0, o2); return 0; } PyGLM_PTI_Init0(arg1, (get_vec_PTI_info<2, T>())); PyGLM_PTI_Init1(arg2, (get_vec_PTI_info<2, T>())); if (PyGLM_PTI_IsNone(0) || PyGLM_PTI_IsNone(1)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat2x2()"); return -1; } PyGLM_Vec_PTI_Assign0(2, T); PyGLM_Vec_PTI_Assign1(2, T); self->super_type = glm::mat<2, 2, T>(o, o2); return 0; } if (arg4 == NULL) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat2x2()"); return -1; } if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4)) { self->super_type = glm::mat<2, 2, T>(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3), PyGLM_Number_FromPyObject(arg4)); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat2x2()"); return -1; } template static int mat2x3_init(mat<2, 3, T> *self, PyObject *args, PyObject *) { PyObject *arg1 = NULL; PyObject *arg2 = NULL; PyObject *arg3 = NULL; PyObject *arg4 = NULL; PyObject *arg5 = NULL; PyObject *arg6 = NULL; if (!PyArg_UnpackTuple(args, "mat2x3", 0, 6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat2x3()"); return -1; } if (arg1 == NULL) { return 0; } if (arg2 == NULL) { if (PyGLM_Number_Check(arg1)) { self->super_type = glm::mat<2, 3, T>(PyGLM_Number_FromPyObject(arg1)); return 0; } PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_NxM | PyGLM_PTI_GetDT(T)); if (PyGLM_Mat_PTI_Check0(2, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 4, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 4, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 4, T, arg1); return 0; } // mat2x3s with different data types PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_2x3 | PyGLM_DT_MAT_ALL); if (PyGLM_Mat_PTI_Check0(2, 3, float, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 3, float, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 3, double, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 3, double, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 3, int32, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 3, int32, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 3, uint32, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 3, uint32, arg1); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat2x3()"); return -1; } if (arg3 == NULL) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { T o = PyGLM_Number_FromPyObject(arg1); T o2 = PyGLM_Number_FromPyObject(arg2); self->super_type = glm::mat<2, 3, T>(o, (T)0, (T)0, (T)0, o2, (T)0); return 0; } PyGLM_PTI_Init0(arg1, (get_vec_PTI_info<3, T>())); PyGLM_PTI_Init1(arg2, (get_vec_PTI_info<3, T>())); if (PyGLM_PTI_IsNone(0) || PyGLM_PTI_IsNone(1)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat2x3()"); return -1; } PyGLM_Vec_PTI_Assign0(3, T); PyGLM_Vec_PTI_Assign1(3, T); self->super_type = glm::mat<2, 3, T>(o, o2); return 0; } if (arg4 == NULL || arg5 == NULL || arg6 == NULL) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat2x3()"); return -1; } if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4) && PyGLM_Number_Check(arg5) && PyGLM_Number_Check(arg6)) { self->super_type = glm::mat<2, 3, T>(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3), PyGLM_Number_FromPyObject(arg4), PyGLM_Number_FromPyObject(arg5), PyGLM_Number_FromPyObject(arg6)); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat2x3()"); return -1; } template static int mat2x4_init(mat<2, 4, T> *self, PyObject *args, PyObject *) { PyObject *arg1 = NULL; PyObject *arg2 = NULL; PyObject *arg3 = NULL; PyObject *arg4 = NULL; PyObject *arg5 = NULL; PyObject *arg6 = NULL; PyObject *arg7 = NULL; PyObject *arg8 = NULL; if (!PyArg_UnpackTuple(args, "mat2x4", 0, 8, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7, &arg8)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat2x4()"); return -1; } if (arg1 == NULL) { return 0; } if (arg2 == NULL) { if (PyGLM_Number_Check(arg1)) { self->super_type = glm::mat<2, 4, T>(PyGLM_Number_FromPyObject(arg1)); return 0; } PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_NxM | PyGLM_PTI_GetDT(T)); if (PyGLM_Mat_PTI_Check0(2, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 4, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 4, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 4, T, arg1); return 0; } // mat2x4s with different data types PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_2x4 | PyGLM_DT_MAT_ALL); if (PyGLM_Mat_PTI_Check0(2, 4, float, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 4, float, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 4, double, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 4, double, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 4, int32, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 4, int32, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 4, uint32, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 4, uint32, arg1); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat2x4()"); return -1; } if (arg3 == NULL) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { T o = PyGLM_Number_FromPyObject(arg1); T o2 = PyGLM_Number_FromPyObject(arg2); self->super_type = glm::mat<2, 4, T>(o, (T)0, (T)0, (T)0, (T)0, o2, (T)0, (T)0); return 0; } PyGLM_PTI_Init0(arg1, (get_vec_PTI_info<4, T>())); PyGLM_PTI_Init1(arg2, (get_vec_PTI_info<4, T>())); if (PyGLM_PTI_IsNone(0) || PyGLM_PTI_IsNone(1)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat2x4()"); return -1; } PyGLM_Vec_PTI_Assign0(4, T); PyGLM_Vec_PTI_Assign1(4, T); self->super_type = glm::mat<2, 4, T>(o, o2); return 0; } if (arg4 == NULL || arg5 == NULL || arg6 == NULL || arg7 == NULL || arg8 == NULL) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat2x4()"); return -1; } if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4) && PyGLM_Number_Check(arg5) && PyGLM_Number_Check(arg6) && PyGLM_Number_Check(arg7) && PyGLM_Number_Check(arg8)) { self->super_type = glm::mat<2, 4, T>(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3), PyGLM_Number_FromPyObject(arg4), PyGLM_Number_FromPyObject(arg5), PyGLM_Number_FromPyObject(arg6), PyGLM_Number_FromPyObject(arg7), PyGLM_Number_FromPyObject(arg8)); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat2x4()"); return -1; } template static int mat3x2_init(mat<3, 2, T> *self, PyObject *args, PyObject *) { PyObject *arg1 = NULL; PyObject *arg2 = NULL; PyObject *arg3 = NULL; PyObject *arg4 = NULL; PyObject *arg5 = NULL; PyObject *arg6 = NULL; if (!PyArg_UnpackTuple(args, "mat3x2", 0, 6, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat3x2()"); return -1; } if (arg1 == NULL) { return 0; } if (arg2 == NULL) { if (PyGLM_Number_Check(arg1)) { self->super_type = glm::mat<3, 2, T>(PyGLM_Number_FromPyObject(arg1)); return 0; } PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_NxM | PyGLM_PTI_GetDT(T)); if (PyGLM_Mat_PTI_Check0(2, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 4, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 4, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 4, T, arg1); return 0; } // mat3x2s with different data types PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_3x2 | PyGLM_DT_MAT_ALL); if (PyGLM_Mat_PTI_Check0(3, 2, float, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 2, float, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 2, double, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 2, double, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 2, int32, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 2, int32, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 2, uint32, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 2, uint32, arg1); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat3x2()"); return -1; } if (arg3 == NULL) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { T o = PyGLM_Number_FromPyObject(arg1); T o2 = PyGLM_Number_FromPyObject(arg2); self->super_type = glm::mat<3, 2, T>(o, (T)0, (T)0, o2, (T)0, (T)0); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat3x2()"); return -1; } if (arg4 == NULL) { PyGLM_PTI_Init0(arg1, (get_vec_PTI_info<2, T>())); PyGLM_PTI_Init1(arg2, (get_vec_PTI_info<2, T>())); PyGLM_PTI_Init2(arg3, (get_vec_PTI_info<2, T>())); if (PyGLM_PTI_IsNone(0) || PyGLM_PTI_IsNone(1) || PyGLM_PTI_IsNone(2)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat3x2()"); return -1; } PyGLM_Vec_PTI_Assign0(2, T); PyGLM_Vec_PTI_Assign1(2, T); PyGLM_Vec_PTI_Assign2(2, T); self->super_type = glm::mat<3, 2, T>(o, o2, o3); return 0; } if (arg5 == NULL || arg6 == NULL) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat3x2()"); return -1; } if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4) && PyGLM_Number_Check(arg5) && PyGLM_Number_Check(arg6)) { self->super_type = glm::mat<3, 2, T>(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3), PyGLM_Number_FromPyObject(arg4), PyGLM_Number_FromPyObject(arg5), PyGLM_Number_FromPyObject(arg6)); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat3x2()"); return -1; } template static int mat3x3_init(mat<3, 3, T> *self, PyObject *args, PyObject *) { PyObject *arg1 = NULL; PyObject *arg2 = NULL; PyObject *arg3 = NULL; PyObject *arg4 = NULL; PyObject *arg5 = NULL; PyObject *arg6 = NULL; PyObject *arg7 = NULL; PyObject *arg8 = NULL; PyObject *arg9 = NULL; if (!PyArg_UnpackTuple(args, "mat3x3", 0, 9, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat3x3()"); return -1; } if (arg1 == NULL) { return 0; } if (arg2 == NULL) { if (PyGLM_Number_Check(arg1)) { self->super_type = glm::mat<3, 3, T>(PyGLM_Number_FromPyObject(arg1)); return 0; } PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_NxM | PyGLM_PTI_GetDT(T)); if (PyGLM_Mat_PTI_Check0(2, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 4, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 4, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 4, T, arg1); return 0; } // mat3x3s with different data types PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_3x3 | PyGLM_DT_MAT_ALL); if (PyGLM_Mat_PTI_Check0(3, 3, float, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 3, float, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 3, double, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 3, double, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 3, int32, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 3, int32, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 3, uint32, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 3, uint32, arg1); return 0; } // quaternions PyGLM_PTI_Init0(arg1, PyGLM_T_QUA | PyGLM_PTI_GetDT(T)); if (!PyGLM_PTI_IsNone(0)) { self->super_type = glm::mat3_cast(PyGLM_Qua_PTI_Get0(T, arg1)); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat3x3()"); return -1; } if (arg3 == NULL) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat3x3()"); return -1; } if (arg4 == NULL) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { T o = PyGLM_Number_FromPyObject(arg1); T o2 = PyGLM_Number_FromPyObject(arg2); T o3 = PyGLM_Number_FromPyObject(arg3); self->super_type = glm::mat<3, 3, T>(o, (T)0, (T)0, (T)0, o2, (T)0, (T)0, (T)0, o3); return 0; } PyGLM_PTI_Init0(arg1, (get_vec_PTI_info<3, T>())); PyGLM_PTI_Init1(arg2, (get_vec_PTI_info<3, T>())); PyGLM_PTI_Init2(arg3, (get_vec_PTI_info<3, T>())); if (PyGLM_PTI_IsNone(0) || PyGLM_PTI_IsNone(1) || PyGLM_PTI_IsNone(2)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat3x3()"); return -1; } PyGLM_Vec_PTI_Assign0(3, T); PyGLM_Vec_PTI_Assign1(3, T); PyGLM_Vec_PTI_Assign2(3, T); self->super_type = glm::mat<3, 3, T>(o, o2, o3); return 0; } if (arg5 == NULL || arg6 == NULL || arg7 == NULL || arg8 == NULL || arg9 == NULL) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat3x3()"); return -1; } if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4) && PyGLM_Number_Check(arg5) && PyGLM_Number_Check(arg6) && PyGLM_Number_Check(arg7) && PyGLM_Number_Check(arg8) && PyGLM_Number_Check(arg9)) { self->super_type = glm::mat<3, 3, T>(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3), PyGLM_Number_FromPyObject(arg4), PyGLM_Number_FromPyObject(arg5), PyGLM_Number_FromPyObject(arg6), PyGLM_Number_FromPyObject(arg7), PyGLM_Number_FromPyObject(arg8), PyGLM_Number_FromPyObject(arg9)); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat3x3()"); return -1; } template static int mat3x4_init(mat<3, 4, T> *self, PyObject *args, PyObject *) { PyObject *arg1 = NULL; PyObject *arg2 = NULL; PyObject *arg3 = NULL; PyObject *arg4 = NULL; PyObject *arg5 = NULL; PyObject *arg6 = NULL; PyObject *arg7 = NULL; PyObject *arg8 = NULL; PyObject *arg9 = NULL; PyObject *arg10 = NULL; PyObject *arg11 = NULL; PyObject *arg12 = NULL; if (!PyArg_UnpackTuple(args, "mat3x4", 0, 12, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10, &arg11, &arg12)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat3x4()"); return -1; } if (arg1 == NULL) { return 0; } if (arg2 == NULL) { if (PyGLM_Number_Check(arg1)) { self->super_type = glm::mat<3, 4, T>(PyGLM_Number_FromPyObject(arg1)); return 0; } PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_NxM | PyGLM_PTI_GetDT(T)); if (PyGLM_Mat_PTI_Check0(2, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 4, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 4, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 4, T, arg1); return 0; } // mat3x4s with different data types PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_3x4 | PyGLM_DT_MAT_ALL); if (PyGLM_Mat_PTI_Check0(3, 4, float, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 4, float, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 4, double, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 4, double, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 4, int32, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 4, int32, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 4, uint32, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 4, uint32, arg1); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat3x4()"); return -1; } if (arg3 == NULL) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat3x4()"); return -1; } if (arg4 == NULL) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { T o = PyGLM_Number_FromPyObject(arg1); T o2 = PyGLM_Number_FromPyObject(arg2); T o3 = PyGLM_Number_FromPyObject(arg3); self->super_type = glm::mat<3, 4, T>(o, (T)0, (T)0, (T)0, (T)0, o2, (T)0, (T)0, (T)0, (T)0, o3, (T)0); return 0; } PyGLM_PTI_Init0(arg1, (get_vec_PTI_info<4, T>())); PyGLM_PTI_Init1(arg2, (get_vec_PTI_info<4, T>())); PyGLM_PTI_Init2(arg3, (get_vec_PTI_info<4, T>())); if (PyGLM_PTI_IsNone(0) || PyGLM_PTI_IsNone(1) || PyGLM_PTI_IsNone(2)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat3x4()"); return -1; } PyGLM_Vec_PTI_Assign0(4, T); PyGLM_Vec_PTI_Assign1(4, T); PyGLM_Vec_PTI_Assign2(4, T); self->super_type = glm::mat<3, 4, T>(o, o2, o3); return 0; } if (arg5 == NULL || arg6 == NULL || arg7 == NULL || arg8 == NULL || arg9 == NULL || arg10 == NULL || arg11 == NULL || arg12 == NULL) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat3x4()"); return -1; } if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4) && PyGLM_Number_Check(arg5) && PyGLM_Number_Check(arg6) && PyGLM_Number_Check(arg7) && PyGLM_Number_Check(arg8) && PyGLM_Number_Check(arg9) && PyGLM_Number_Check(arg10) && PyGLM_Number_Check(arg11) && PyGLM_Number_Check(arg12)) { self->super_type = glm::mat<3, 4, T>(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3), PyGLM_Number_FromPyObject(arg4), PyGLM_Number_FromPyObject(arg5), PyGLM_Number_FromPyObject(arg6), PyGLM_Number_FromPyObject(arg7), PyGLM_Number_FromPyObject(arg8), PyGLM_Number_FromPyObject(arg9), PyGLM_Number_FromPyObject(arg10), PyGLM_Number_FromPyObject(arg11), PyGLM_Number_FromPyObject(arg12)); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat3x4()"); return -1; } template static int mat4x2_init(mat<4, 2, T> *self, PyObject *args, PyObject *) { PyObject *arg1 = NULL; PyObject *arg2 = NULL; PyObject *arg3 = NULL; PyObject *arg4 = NULL; PyObject *arg5 = NULL; PyObject *arg6 = NULL; PyObject *arg7 = NULL; PyObject *arg8 = NULL; if (!PyArg_UnpackTuple(args, "mat4x2", 0, 8, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7, &arg8)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat4x2()"); return -1; } if (arg1 == NULL) { return 0; } if (arg2 == NULL) { if (PyGLM_Number_Check(arg1)) { self->super_type = glm::mat<4, 2, T>(PyGLM_Number_FromPyObject(arg1)); return 0; } PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_NxM | PyGLM_PTI_GetDT(T)); if (PyGLM_Mat_PTI_Check0(2, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 4, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 4, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 4, T, arg1); return 0; } // mat4x2s with different data types PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_4x2 | PyGLM_DT_MAT_ALL); if (PyGLM_Mat_PTI_Check0(4, 2, float, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 2, float, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 2, double, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 2, double, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 2, int32, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 2, int32, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 2, uint32, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 2, uint32, arg1); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat4x2()"); return -1; } if (arg3 == NULL) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { T o = PyGLM_Number_FromPyObject(arg1); T o2 = PyGLM_Number_FromPyObject(arg2); self->super_type = glm::mat<4, 2, T>(o, (T)0, (T)0, o2, (T)0, (T)0, (T)0, (T)0); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat4x2()"); return -1; } if (arg4 == NULL) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat4x2()"); return -1; } if (arg5 == NULL) { PyGLM_PTI_Init0(arg1, (get_vec_PTI_info<2, T>())); PyGLM_PTI_Init1(arg2, (get_vec_PTI_info<2, T>())); PyGLM_PTI_Init2(arg3, (get_vec_PTI_info<2, T>())); PyGLM_PTI_Init3(arg4, (get_vec_PTI_info<2, T>())); if (PyGLM_PTI_IsNone(0) || PyGLM_PTI_IsNone(1) || PyGLM_PTI_IsNone(2) || PyGLM_PTI_IsNone(3)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat4x2()"); return -1; } PyGLM_Vec_PTI_Assign0(2, T); PyGLM_Vec_PTI_Assign1(2, T); PyGLM_Vec_PTI_Assign2(2, T); PyGLM_Vec_PTI_Assign3(2, T); self->super_type = glm::mat<4, 2, T>(o, o2, o3, o4); return 0; } if (arg6 == NULL || arg7 == NULL || arg8 == NULL) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat4x2()"); return -1; } if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4) && PyGLM_Number_Check(arg5) && PyGLM_Number_Check(arg6) && PyGLM_Number_Check(arg7) && PyGLM_Number_Check(arg8)) { self->super_type = glm::mat<4, 2, T>(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3), PyGLM_Number_FromPyObject(arg4), PyGLM_Number_FromPyObject(arg5), PyGLM_Number_FromPyObject(arg6), PyGLM_Number_FromPyObject(arg7), PyGLM_Number_FromPyObject(arg8)); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat4x2()"); return -1; } template static int mat4x3_init(mat<4, 3, T> *self, PyObject *args, PyObject *) { PyObject *arg1 = NULL; PyObject *arg2 = NULL; PyObject *arg3 = NULL; PyObject *arg4 = NULL; PyObject *arg5 = NULL; PyObject *arg6 = NULL; PyObject *arg7 = NULL; PyObject *arg8 = NULL; PyObject *arg9 = NULL; PyObject *arg10 = NULL; PyObject *arg11 = NULL; PyObject *arg12 = NULL; if (!PyArg_UnpackTuple(args, "mat4x3", 0, 12, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10, &arg11, &arg12)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat4x3()"); return -1; } if (arg1 == NULL) { return 0; } if (arg2 == NULL) { if (PyGLM_Number_Check(arg1)) { self->super_type = glm::mat<4, 3, T>(PyGLM_Number_FromPyObject(arg1)); return 0; } PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_NxM | PyGLM_PTI_GetDT(T)); if (PyGLM_Mat_PTI_Check0(2, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 4, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 4, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 4, T, arg1); return 0; } // mat4x3s with different data types PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_4x3 | PyGLM_DT_MAT_ALL); if (PyGLM_Mat_PTI_Check0(4, 3, float, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 3, float, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 3, double, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 3, double, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 3, int32, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 3, int32, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 3, uint32, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 3, uint32, arg1); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat4x3()"); return -1; } if (arg3 == NULL) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat4x3()"); return -1; } if (arg4 == NULL) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { T o = PyGLM_Number_FromPyObject(arg1); T o2 = PyGLM_Number_FromPyObject(arg2); T o3 = PyGLM_Number_FromPyObject(arg3); self->super_type = glm::mat<4, 3, T>(o, (T)0, (T)0, (T)0, o2, (T)0, (T)0, (T)0, o3, (T)0, (T)0, (T)0); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat4x3()"); return -1; } if (arg5 == NULL) { PyGLM_PTI_Init0(arg1, (get_vec_PTI_info<3, T>())); PyGLM_PTI_Init1(arg2, (get_vec_PTI_info<3, T>())); PyGLM_PTI_Init2(arg3, (get_vec_PTI_info<3, T>())); PyGLM_PTI_Init3(arg4, (get_vec_PTI_info<3, T>())); if (PyGLM_PTI_IsNone(0) || PyGLM_PTI_IsNone(1) || PyGLM_PTI_IsNone(2) || PyGLM_PTI_IsNone(3)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat4x3()"); return -1; } PyGLM_Vec_PTI_Assign0(3, T); PyGLM_Vec_PTI_Assign1(3, T); PyGLM_Vec_PTI_Assign2(3, T); PyGLM_Vec_PTI_Assign3(3, T); self->super_type = glm::mat<4, 3, T>(o, o2, o3, o4); return 0; } if (arg6 == NULL || arg7 == NULL || arg8 == NULL || arg9 == NULL || arg10 == NULL || arg11 == NULL || arg12 == NULL) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat4x3()"); return -1; } if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4) && PyGLM_Number_Check(arg5) && PyGLM_Number_Check(arg6) && PyGLM_Number_Check(arg7) && PyGLM_Number_Check(arg8) && PyGLM_Number_Check(arg9) && PyGLM_Number_Check(arg10) && PyGLM_Number_Check(arg11) && PyGLM_Number_Check(arg12)) { self->super_type = glm::mat<4, 3, T>(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3), PyGLM_Number_FromPyObject(arg4), PyGLM_Number_FromPyObject(arg5), PyGLM_Number_FromPyObject(arg6), PyGLM_Number_FromPyObject(arg7), PyGLM_Number_FromPyObject(arg8), PyGLM_Number_FromPyObject(arg9), PyGLM_Number_FromPyObject(arg10), PyGLM_Number_FromPyObject(arg11), PyGLM_Number_FromPyObject(arg12)); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat4x3()"); return -1; } template static int mat4x4_init(mat<4, 4, T> *self, PyObject *args, PyObject *) { PyObject *arg1 = NULL; PyObject *arg2 = NULL; PyObject *arg3 = NULL; PyObject *arg4 = NULL; PyObject *arg5 = NULL; PyObject *arg6 = NULL; PyObject *arg7 = NULL; PyObject *arg8 = NULL; PyObject *arg9 = NULL; PyObject *arg10 = NULL; PyObject *arg11 = NULL; PyObject *arg12 = NULL; PyObject *arg13 = NULL; PyObject *arg14 = NULL; PyObject *arg15 = NULL; PyObject *arg16 = NULL; if (!PyArg_UnpackTuple(args, "mat4x4", 0, 16, &arg1, &arg2, &arg3, &arg4, &arg5, &arg6, &arg7, &arg8, &arg9, &arg10, &arg11, &arg12, &arg13, &arg14, &arg15, &arg16)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat4x4()"); return -1; } if (arg1 == NULL) { return 0; } if (arg2 == NULL) { if (PyGLM_Number_Check(arg1)) { self->super_type = glm::mat<4, 4, T>(PyGLM_Number_FromPyObject(arg1)); return 0; } PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_NxM | PyGLM_PTI_GetDT(T)); if (PyGLM_Mat_PTI_Check0(2, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(2, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(2, 4, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(3, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(3, 4, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 2, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 2, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 3, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 3, T, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 4, T, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 4, T, arg1); return 0; } // mat4x4s with different data types PyGLM_PTI_Init0(arg1, PyGLM_T_MAT | PyGLM_SHAPE_4x4 | PyGLM_DT_MAT_ALL); if (PyGLM_Mat_PTI_Check0(4, 4, float, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 4, float, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 4, double, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 4, double, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 4, int32, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 4, int32, arg1); return 0; } if (PyGLM_Mat_PTI_Check0(4, 4, uint32, arg1)) { self->super_type = PyGLM_Mat_PTI_Get0(4, 4, uint32, arg1); return 0; } // quaternions PyGLM_PTI_Init0(arg1, PyGLM_T_QUA | PyGLM_PTI_GetDT(T)); if (!PyGLM_PTI_IsNone(0)) { self->super_type = glm::mat4_cast(PyGLM_Qua_PTI_Get0(T, arg1)); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat4x4()"); return -1; } if (arg3 == NULL || arg4 == NULL) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat4x4()"); return -1; } if (arg5 == NULL) { if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4)) { T o = PyGLM_Number_FromPyObject(arg1); T o2 = PyGLM_Number_FromPyObject(arg2); T o3 = PyGLM_Number_FromPyObject(arg3); T o4 = PyGLM_Number_FromPyObject(arg4); self->super_type = glm::mat<4, 4, T>(o, (T)0, (T)0, (T)0, (T)0, o2, (T)0, (T)0, (T)0, (T)0, o3, (T)0, (T)0, (T)0, (T)0, o4); return 0; } PyGLM_PTI_Init0(arg1, (get_vec_PTI_info<4, T>())); PyGLM_PTI_Init1(arg2, (get_vec_PTI_info<4, T>())); PyGLM_PTI_Init2(arg3, (get_vec_PTI_info<4, T>())); PyGLM_PTI_Init3(arg4, (get_vec_PTI_info<4, T>())); if (PyGLM_PTI_IsNone(0) || PyGLM_PTI_IsNone(1) || PyGLM_PTI_IsNone(2) || PyGLM_PTI_IsNone(3)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat4x4()"); return -1; } PyGLM_Vec_PTI_Assign0(4, T); PyGLM_Vec_PTI_Assign1(4, T); PyGLM_Vec_PTI_Assign2(4, T); PyGLM_Vec_PTI_Assign3(4, T); self->super_type = glm::mat<4, 4, T>(o, o2, o3, o4); return 0; } if (arg6 == NULL || arg7 == NULL || arg8 == NULL || arg9 == NULL || arg10 == NULL || arg11 == NULL || arg12 == NULL || arg13 == NULL || arg14 == NULL || arg15 == NULL || arg16 == NULL) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat4x4()"); return -1; } if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4) && PyGLM_Number_Check(arg5) && PyGLM_Number_Check(arg6) && PyGLM_Number_Check(arg7) && PyGLM_Number_Check(arg8) && PyGLM_Number_Check(arg9) && PyGLM_Number_Check(arg10) && PyGLM_Number_Check(arg11) && PyGLM_Number_Check(arg12) && PyGLM_Number_Check(arg13) && PyGLM_Number_Check(arg14) && PyGLM_Number_Check(arg15) && PyGLM_Number_Check(arg16)) { self->super_type = glm::mat<4, 4, T>(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3), PyGLM_Number_FromPyObject(arg4), PyGLM_Number_FromPyObject(arg5), PyGLM_Number_FromPyObject(arg6), PyGLM_Number_FromPyObject(arg7), PyGLM_Number_FromPyObject(arg8), PyGLM_Number_FromPyObject(arg9), PyGLM_Number_FromPyObject(arg10), PyGLM_Number_FromPyObject(arg11), PyGLM_Number_FromPyObject(arg12), PyGLM_Number_FromPyObject(arg13), PyGLM_Number_FromPyObject(arg14), PyGLM_Number_FromPyObject(arg15), PyGLM_Number_FromPyObject(arg16)); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for mat4x4()"); return -1; } // unaryfunc template static PyObject * mat_neg(mat *obj) { return pack_mat(-obj->super_type); } template static PyObject * mat_pos(mat *obj) { return pack_mat(obj->super_type); } template static PyObject * mat_abs(mat *obj) { return pack_mat(glm::abs(obj->super_type)); } // binaryfunc template static PyObject * matsq_add(PyObject *obj1, PyObject *obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self return pack_mat(PyGLM_Number_FromPyObject(obj1) + (((mat*)obj2)->super_type)); } PyGLM_PTI_Init0(obj1, (get_mat_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for +: 'glm.mat' and ", obj1); return NULL; } glm::mat o = PyGLM_Mat_PTI_Get0(C, R, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_mat(o + PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init1(obj2, (get_mat_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::mat o2 = PyGLM_Mat_PTI_Get1(C, R, T, obj2); // obj1 and obj2 can be interpreted as a vec return pack_mat(o + o2); } template static PyObject * mat_add(PyObject *obj1, PyObject *obj2) { PyGLM_PTI_Init0(obj1, (get_mat_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for +: 'glm.mat' and ", obj1); return NULL; } glm::mat o = PyGLM_Mat_PTI_Get0(C, R, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_mat(o + PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init1(obj2, (get_mat_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::mat o2 = PyGLM_Mat_PTI_Get1(C, R, T, obj2); // obj1 and obj2 can be interpreted as a vec return pack_mat(o + o2); } template static PyObject * matsq_sub(PyObject *obj1, PyObject *obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self return pack_mat(PyGLM_Number_FromPyObject(obj1) - (((mat*)obj2)->super_type)); } PyGLM_PTI_Init0(obj1, (get_mat_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for -: 'glm.mat' and ", obj1); return NULL; } glm::mat o = PyGLM_Mat_PTI_Get0(C, R, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_mat(o - PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init1(obj2, (get_mat_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::mat o2 = PyGLM_Mat_PTI_Get1(C, R, T, obj2); // obj1 and obj2 can be interpreted as a vec return pack_mat(o - o2); } template static PyObject * mat_sub(PyObject *obj1, PyObject *obj2) { PyGLM_PTI_Init0(obj1, (get_mat_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for -: 'glm.mat' and ", obj1); return NULL; } glm::mat o = PyGLM_Mat_PTI_Get0(C, R, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_mat(o - PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init1(obj2, (get_mat_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::mat o2 = PyGLM_Mat_PTI_Get1(C, R, T, obj2); // obj1 and obj2 can be interpreted as a vec return pack_mat(o - o2); } template static inline PyObject* mat_hmul(glm::mat o, PyObject* obj2) { constexpr int Shom = S - 1; PyGLM_PTI_Init0(obj2, (get_vec_PTI_info())); if (!PyGLM_PTI_IsNone(0)) { // obj2 is a row_type in homogenous coordinates glm::vec o2 = glm::vec(PyGLM_Vec_PTI_Get0(Shom, T, obj2), static_cast(1)); return pack_vec(glm::vec(o * o2)); } Py_RETURN_NOTIMPLEMENTED; } template static PyObject * mat_mul(PyObject *obj1, PyObject *obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar return pack_mat(PyGLM_Number_FromPyObject(obj1) * ((mat*)obj2)->super_type); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info()) | (get_mat_PTI_info())); if (PyGLM_Vec_PTI_Check0(R, T, obj1)) { // obj1 is a col_type glm::vec o = PyGLM_Vec_PTI_Get0(R, T, obj1); return pack_vec(glm::custom::mat_mul(o, ((mat*)obj2)->super_type)); } if (!PyGLM_Mat_PTI_Check0(C, R, T, obj1)) { // obj1 can't be interpreted as mat PyGLM_TYPEERROR_2O("unsupported operand type(s) for *: ", obj1, obj2); return NULL; } glm::mat o = PyGLM_Mat_PTI_Get0(C, R, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj2 is a scalar return pack_mat(o * PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init0(obj2, (get_vec_PTI_info()) | (get_mat_PTI_info<2, C, T>()) | (get_mat_PTI_info<3, C, T>()) | (get_mat_PTI_info<4, C, T>())); if (PyGLM_Vec_PTI_Check0(C, T, obj2)) { // obj2 is a row_type glm::vec o2 = PyGLM_Vec_PTI_Get0(C, T, obj2); return pack_vec(glm::custom::mat_mul(o, o2)); } if (PyGLM_Mat_PTI_Check0(2, C, T, obj2)) { glm::mat<2, C, T> o2 = PyGLM_Mat_PTI_Get0(2, C, T, obj2); return pack_mat(o * o2); } if (PyGLM_Mat_PTI_Check0(3, C, T, obj2)) { glm::mat<3, C, T> o2 = PyGLM_Mat_PTI_Get0(3, C, T, obj2); return pack_mat(o * o2); } if (PyGLM_Mat_PTI_Check0(4, C, T, obj2)) { glm::mat<4, C, T> o2 = PyGLM_Mat_PTI_Get0(4, C, T, obj2); return pack_mat(o * o2); } if (C == R) { return mat_hmul(o, obj2); } Py_RETURN_NOTIMPLEMENTED; } template static PyObject * matsq_div(PyObject *obj1, PyObject *obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar for (int c = 0; c < C; c++) { for (int r = 0; r < R; r++) { if (((mat*)obj2)->super_type[c][r] == 0) { PyGLM_ZERO_DIVISION_ERROR_T(T); } } } return pack_mat(PyGLM_Number_FromPyObject(obj1) / ((mat*)obj2)->super_type); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info() | get_mat_PTI_info())); if (PyGLM_Vec_PTI_Check0(R, T, obj1)) { // obj1 is a col_type for (int c = 0; c < C; c++) { for (int r = 0; r < R; r++) { if (((mat*)obj2)->super_type[c][r] == 0) { PyGLM_ZERO_DIVISION_ERROR_T(T); } } } glm::vec o = PyGLM_Vec_PTI_Get0(R, T, obj1); return pack_vec(o / ((mat*)obj2)->super_type); } if (!PyGLM_Mat_PTI_Check0(C, R, T, obj1)) { // obj1 can't be interpreted as mat PyGLM_TYPEERROR_2O("unsupported operand type(s) for /: ", obj1, obj2); return NULL; } glm::mat o = PyGLM_Mat_PTI_Get0(C, R, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj2 is a scalar T o2 = PyGLM_Number_FromPyObject(obj2); if (o2 == (T)0) { PyGLM_ZERO_DIVISION_ERROR_T(T); } return pack_mat(o / o2); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info() | get_mat_PTI_info())); if (PyGLM_Vec_PTI_Check1(C, T, obj2)) { // obj2 is a row_type glm::vec o2 = PyGLM_Vec_PTI_Get1(C, T, obj2); for (int c = 0; c < C; c++) { if (o2[c] == 0) { PyGLM_ZERO_DIVISION_ERROR_T(T); } } return pack_vec(o / o2); } if (PyGLM_Mat_PTI_Check1(C, R, T, obj2)) { glm::mat o2 = PyGLM_Mat_PTI_Get1(C, R, T, obj2); for (int c = 0; c < C; c++) { for (int r = 0; r < R; r++) { if (((mat*)obj2)->super_type[c][r] == 0) { PyGLM_ZERO_DIVISION_ERROR_T(T); } } } return pack_mat(o / o2); } Py_RETURN_NOTIMPLEMENTED; } template static PyObject * mat_div(PyObject *obj1, PyObject *obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar for (int c = 0; c < C; c++) { for (int r = 0; r < R; r++) { if (((mat*)obj2)->super_type[c][r] == 0) { PyGLM_ZERO_DIVISION_ERROR_T(T); } } } return pack_mat(PyGLM_Number_FromPyObject(obj1) / ((mat*)obj2)->super_type); } PyGLM_PTI_Init0(obj1, (get_mat_PTI_info())); if (!PyGLM_Mat_PTI_Check0(C, R, T, obj1)) { // obj1 can't be interpreted as mat PyGLM_TYPEERROR_2O("unsupported operand type(s) for /: ", obj1, obj2); return NULL; } glm::mat o = PyGLM_Mat_PTI_Get0(C, R, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj2 is a scalar T o2 = PyGLM_Number_FromPyObject(obj2); if (o2 == (T)0) { PyGLM_ZERO_DIVISION_ERROR_T(T); } return pack_mat(o / o2); } Py_RETURN_NOTIMPLEMENTED; } static PyObject* mat_matmul(PyObject* obj1, PyObject* obj2) { PyObject* out = PyNumber_Multiply(obj1, obj2); if (out == NULL) { PyGLM_TYPEERROR_2O("unsupported operand type(s) for @: ", obj1, obj2); } return out; } // inplace // binaryfunc template static PyObject * matsq_iadd(mat *self, PyObject *obj) { mat * temp = (mat*)matsq_add((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * mat_iadd(mat *self, PyObject *obj) { mat * temp = (mat*)mat_add((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * matsq_isub(mat *self, PyObject *obj) { mat * temp = (mat*)matsq_sub((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * mat_isub(mat *self, PyObject *obj) { mat * temp = (mat*)mat_sub((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * mat_imul(mat *self, PyObject *obj) { mat * temp = (mat*)mat_mul((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; if (!PyGLM_Mat_Check(C, R, T, temp)) { Py_DECREF(temp); Py_RETURN_NOTIMPLEMENTED; } self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * matsq_idiv(mat *self, PyObject *obj) { mat * temp = (mat*)matsq_div((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; if (!PyGLM_Mat_Check(C, R, T, temp)) { Py_DECREF(temp); Py_RETURN_NOTIMPLEMENTED; } self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * mat_idiv(mat *self, PyObject *obj) { mat * temp = (mat*)mat_div((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject* mat_imatmul(mat* self, PyObject* obj) { mat* temp = (mat*)mat_matmul((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; if (!PyGLM_Mat_Check(C, R, T, temp)) { Py_DECREF(temp); Py_RETURN_NOTIMPLEMENTED; } self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * mat2x2_str(mat<2, 2, T>* self) { char * out = (char*)PyMem_Malloc((66) * sizeof(char)); snprintf(out, 66, "[ %12.6g ][ %12.6g ]\n[ %12.6g ][ %12.6g ]", (double)self->super_type[0][0], (double)self->super_type[1][0], (double)self->super_type[0][1], (double)self->super_type[1][1]); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * mat2x3_str(mat<2, 3, T>* self) { char * out = (char*)PyMem_Malloc((99) * sizeof(char)); snprintf(out, 99, "[ %12.6g ][ %12.6g ]\n[ %12.6g ][ %12.6g ]\n[ %12.6g ][ %12.6g ]", (double)self->super_type[0][0], (double)self->super_type[1][0], (double)self->super_type[0][1], (double)self->super_type[1][1], (double)self->super_type[0][2], (double)self->super_type[1][2]); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * mat2x4_str(mat<2, 4, T>* self) { char * out = (char*)PyMem_Malloc((132) * sizeof(char)); snprintf(out, 132, "[ %12.6g ][ %12.6g ]\n[ %12.6g ][ %12.6g ]\n[ %12.6g ][ %12.6g ]\n[ %12.6g ][ %12.6g ]", (double)self->super_type[0][0], (double)self->super_type[1][0], (double)self->super_type[0][1], (double)self->super_type[1][1], (double)self->super_type[0][2], (double)self->super_type[1][2], (double)self->super_type[0][3], (double)self->super_type[1][3]); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * mat3x2_str(mat<3, 2, T>* self) { char * out = (char*)PyMem_Malloc((98) * sizeof(char)); snprintf(out, 98, "[ %12.6g ][ %12.6g ][ %12.6g ]\n[ %12.6g ][ %12.6g ][ %12.6g ]", (double)self->super_type[0][0], (double)self->super_type[1][0], (double)self->super_type[2][0], (double)self->super_type[0][1], (double)self->super_type[1][1], (double)self->super_type[2][1]); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * mat3x3_str(mat<3, 3, T>* self) { char * out = (char*)PyMem_Malloc((147) * sizeof(char)); snprintf(out, 147, "[ %12.6g ][ %12.6g ][ %12.6g ]\n[ %12.6g ][ %12.6g ][ %12.6g ]\n[ %12.6g ][ %12.6g ][ %12.6g ]", (double)self->super_type[0][0], (double)self->super_type[1][0], (double)self->super_type[2][0], (double)self->super_type[0][1], (double)self->super_type[1][1], (double)self->super_type[2][1], (double)self->super_type[0][2], (double)self->super_type[1][2], (double)self->super_type[2][2]); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * mat3x4_str(mat<3, 4, T>* self) { char * out = (char*)PyMem_Malloc((196) * sizeof(char)); snprintf(out, 196, "[ %12.6g ][ %12.6g ][ %12.6g ]\n[ %12.6g ][ %12.6g ][ %12.6g ]\n[ %12.6g ][ %12.6g ][ %12.6g ]\n[ %12.6g ][ %12.6g ][ %12.6g ]", (double)self->super_type[0][0], (double)self->super_type[1][0], (double)self->super_type[2][0], (double)self->super_type[0][1], (double)self->super_type[1][1], (double)self->super_type[2][1], (double)self->super_type[0][2], (double)self->super_type[1][2], (double)self->super_type[2][2], (double)self->super_type[0][3], (double)self->super_type[1][3], (double)self->super_type[2][3]); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * mat4x2_str(mat<4, 2, T>* self) { char * out = (char*)PyMem_Malloc((130) * sizeof(char)); snprintf(out, 130, "[ %12.6g ][ %12.6g ][ %12.6g ][ %12.6g ]\n[ %12.6g ][ %12.6g ][ %12.6g ][ %12.6g ]", (double)self->super_type[0][0], (double)self->super_type[1][0], (double)self->super_type[2][0], (double)self->super_type[3][0], (double)self->super_type[0][1], (double)self->super_type[1][1], (double)self->super_type[2][1], (double)self->super_type[3][1]); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * mat4x3_str(mat<4, 3, T>* self) { char * out = (char*)PyMem_Malloc((195) * sizeof(char)); snprintf(out, 195, "[ %12.6g ][ %12.6g ][ %12.6g ][ %12.6g ]\n[ %12.6g ][ %12.6g ][ %12.6g ][ %12.6g ]\n[ %12.6g ][ %12.6g ][ %12.6g ][ %12.6g ]", (double)self->super_type[0][0], (double)self->super_type[1][0], (double)self->super_type[2][0], (double)self->super_type[3][0], (double)self->super_type[0][1], (double)self->super_type[1][1], (double)self->super_type[2][1], (double)self->super_type[3][1], (double)self->super_type[0][2], (double)self->super_type[1][2], (double)self->super_type[2][2], (double)self->super_type[3][2]); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * mat4x4_str(mat<4, 4, T>* self) { char * out = (char*)PyMem_Malloc((260) * sizeof(char)); snprintf(out, 260, "[ %12.6g ][ %12.6g ][ %12.6g ][ %12.6g ]\n[ %12.6g ][ %12.6g ][ %12.6g ][ %12.6g ]\n[ %12.6g ][ %12.6g ][ %12.6g ][ %12.6g ]\n[ %12.6g ][ %12.6g ][ %12.6g ][ %12.6g ]", (double)self->super_type[0][0], (double)self->super_type[1][0], (double)self->super_type[2][0], (double)self->super_type[3][0], (double)self->super_type[0][1], (double)self->super_type[1][1], (double)self->super_type[2][1], (double)self->super_type[3][1], (double)self->super_type[0][2], (double)self->super_type[1][2], (double)self->super_type[2][2], (double)self->super_type[3][2], (double)self->super_type[0][3], (double)self->super_type[1][3], (double)self->super_type[2][3], (double)self->super_type[3][3]); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * mat2x2_repr(mat<2, 2, T>* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 65 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s(( %.6g, %.6g ), ( %.6g, %.6g ))", name, (double)self->super_type[0][0], (double)self->super_type[0][1], (double)self->super_type[1][0], (double)self->super_type[1][1]); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * mat2x3_repr(mat<2, 3, T>* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 93 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s(( %.6g, %.6g, %.6g ), ( %.6g, %.6g, %.6g ))", name, (double)self->super_type[0][0], (double)self->super_type[0][1], (double)self->super_type[0][2], (double)self->super_type[1][0], (double)self->super_type[1][1], (double)self->super_type[1][2]); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * mat2x4_repr(mat<2, 4, T>* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 121 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s(( %.6g, %.6g, %.6g, %.6g ), ( %.6g, %.6g, %.6g, %.6g ))", name, (double)self->super_type[0][0], (double)self->super_type[0][1], (double)self->super_type[0][2], (double)self->super_type[0][3], (double)self->super_type[1][0], (double)self->super_type[1][1], (double)self->super_type[1][2], (double)self->super_type[1][3]); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * mat3x2_repr(mat<3, 2, T>* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 97 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s(( %.6g, %.6g ), ( %.6g, %.6g ), ( %.6g, %.6g ))", name, (double)self->super_type[0][0], (double)self->super_type[0][1], (double)self->super_type[1][0], (double)self->super_type[1][1], (double)self->super_type[2][0], (double)self->super_type[2][1]); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * mat3x3_repr(mat<3, 3, T>* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 139 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s(( %.6g, %.6g, %.6g ), ( %.6g, %.6g, %.6g ), ( %.6g, %.6g, %.6g ))", name, (double)self->super_type[0][0], (double)self->super_type[0][1], (double)self->super_type[0][2], (double)self->super_type[1][0], (double)self->super_type[1][1], (double)self->super_type[1][2], (double)self->super_type[2][0], (double)self->super_type[2][1], (double)self->super_type[2][2]); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * mat3x4_repr(mat<3, 4, T>* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 181 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s(( %.6g, %.6g, %.6g, %.6g ), ( %.6g, %.6g, %.6g, %.6g ), ( %.6g, %.6g, %.6g, %.6g ))", name, (double)self->super_type[0][0], (double)self->super_type[0][1], (double)self->super_type[0][2], (double)self->super_type[0][3], (double)self->super_type[1][0], (double)self->super_type[1][1], (double)self->super_type[1][2], (double)self->super_type[1][3], (double)self->super_type[2][0], (double)self->super_type[2][1], (double)self->super_type[2][2], (double)self->super_type[2][3]); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * mat4x2_repr(mat<4, 2, T>* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 129 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s(( %.6g, %.6g ), ( %.6g, %.6g ), ( %.6g, %.6g ), ( %.6g, %.6g ))", name, (double)self->super_type[0][0], (double)self->super_type[0][1], (double)self->super_type[1][0], (double)self->super_type[1][1], (double)self->super_type[2][0], (double)self->super_type[2][1], (double)self->super_type[3][0], (double)self->super_type[3][1]); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * mat4x3_repr(mat<4, 3, T>* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 185 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s(( %.6g, %.6g, %.6g ), ( %.6g, %.6g, %.6g ), ( %.6g, %.6g, %.6g ), ( %.6g, %.6g, %.6g ))", name, (double)self->super_type[0][0], (double)self->super_type[0][1], (double)self->super_type[0][2], (double)self->super_type[1][0], (double)self->super_type[1][1], (double)self->super_type[1][2], (double)self->super_type[2][0], (double)self->super_type[2][1], (double)self->super_type[2][2], (double)self->super_type[3][0], (double)self->super_type[3][1], (double)self->super_type[3][2]); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * mat4x4_repr(mat<4, 4, T>* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 241 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s(( %.6g, %.6g, %.6g, %.6g ), ( %.6g, %.6g, %.6g, %.6g ), ( %.6g, %.6g, %.6g, %.6g ), ( %.6g, %.6g, %.6g, %.6g ))", name, (double)self->super_type[0][0], (double)self->super_type[0][1], (double)self->super_type[0][2], (double)self->super_type[0][3], (double)self->super_type[1][0], (double)self->super_type[1][1], (double)self->super_type[1][2], (double)self->super_type[1][3], (double)self->super_type[2][0], (double)self->super_type[2][1], (double)self->super_type[2][2], (double)self->super_type[2][3], (double)self->super_type[3][0], (double)self->super_type[3][1], (double)self->super_type[3][2], (double)self->super_type[3][3]); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static Py_ssize_t mat_len(PyObject *) { return (Py_ssize_t)C; } template static PyObject* mat2x2_mp_item(mat<2, 2, T> * self, PyObject* key) { if (PyGLM_Number_Check(key)) { long index = PyGLM_Number_AsLong(key); if (index < 0 || index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } return pack_mvec<2, T>(&self->super_type[index], (PyObject*)self); } if (PyTuple_Check(key) && Py_SIZE(key) == 2) { PyObject* value0 = PyTuple_GET_ITEM(key, 0); PyObject* value1 = PyTuple_GET_ITEM(key, 1); if (value0 == NULL || value1 == NULL || !PyGLM_Number_Check(value0) || !PyGLM_Number_Check(value1)) { PyErr_SetString(PyExc_TypeError, "indices must be a pair of integer"); return NULL; } long value0_as_long = PyGLM_Number_AsLong(value0); long value1_as_long = PyGLM_Number_AsLong(value1); if (value0_as_long < 0 || value0_as_long > 1 || value1_as_long < 0 || value1_as_long > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } return PyGLM_PyObject_FromNumber(self->super_type[value0_as_long][value1_as_long]); } PyGLM_TYPEERROR_O("index must be int or a length 2 tuple, got ", key); return NULL; } template static PyObject* mat2x3_mp_item(mat<2, 3, T> * self, PyObject* key) { if (PyGLM_Number_Check(key)) { long index = PyGLM_Number_AsLong(key); if (index < 0 || index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } return pack_mvec<3, T>(&self->super_type[index], (PyObject*)self); } if (PyTuple_Check(key) && Py_SIZE(key) == 2) { PyObject* value0 = PyTuple_GET_ITEM(key, 0); PyObject* value1 = PyTuple_GET_ITEM(key, 1); if (value0 == NULL || value1 == NULL || !PyGLM_Number_Check(value0) || !PyGLM_Number_Check(value1)) { PyErr_SetString(PyExc_TypeError, "indices must be a pair of integer"); return NULL; } long value0_as_long = PyGLM_Number_AsLong(value0); long value1_as_long = PyGLM_Number_AsLong(value1); if (value0_as_long < 0 || value0_as_long > 1 || value1_as_long < 0 || value1_as_long > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } return PyGLM_PyObject_FromNumber(self->super_type[value0_as_long][value1_as_long]); } PyGLM_TYPEERROR_O("index must be int or a length 2 tuple, got ", key); return NULL; } template static PyObject* mat2x4_mp_item(mat<2, 4, T> * self, PyObject* key) { if (PyGLM_Number_Check(key)) { long index = PyGLM_Number_AsLong(key); if (index < 0 || index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } return pack_mvec<4, T>(&self->super_type[index], (PyObject*)self); } if (PyTuple_Check(key) && Py_SIZE(key) == 2) { PyObject* value0 = PyTuple_GET_ITEM(key, 0); PyObject* value1 = PyTuple_GET_ITEM(key, 1); if (value0 == NULL || value1 == NULL || !PyGLM_Number_Check(value0) || !PyGLM_Number_Check(value1)) { PyErr_SetString(PyExc_TypeError, "indices must be a pair of integer"); return NULL; } long value0_as_long = PyGLM_Number_AsLong(value0); long value1_as_long = PyGLM_Number_AsLong(value1); if (value0_as_long < 0 || value0_as_long > 1 || value1_as_long < 0 || value1_as_long > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } return PyGLM_PyObject_FromNumber(self->super_type[value0_as_long][value1_as_long]); } PyGLM_TYPEERROR_O("index must be int or a length 2 tuple, got ", key); return NULL; } template static PyObject* mat3x2_mp_item(mat<3, 2, T> * self, PyObject* key) { if (PyGLM_Number_Check(key)) { long index = PyGLM_Number_AsLong(key); if (index < 0 || index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } return pack_mvec<2, T>(&self->super_type[index], (PyObject*)self); } if (PyTuple_Check(key) && Py_SIZE(key) == 2) { PyObject* value0 = PyTuple_GET_ITEM(key, 0); PyObject* value1 = PyTuple_GET_ITEM(key, 1); if (value0 == NULL || value1 == NULL || !PyGLM_Number_Check(value0) || !PyGLM_Number_Check(value1)) { PyErr_SetString(PyExc_TypeError, "indices must be a pair of integer"); return NULL; } long value0_as_long = PyGLM_Number_AsLong(value0); long value1_as_long = PyGLM_Number_AsLong(value1); if (value0_as_long < 0 || value0_as_long > 2 || value1_as_long < 0 || value1_as_long > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } return PyGLM_PyObject_FromNumber(self->super_type[value0_as_long][value1_as_long]); } PyGLM_TYPEERROR_O("index must be int or a length 2 tuple, got ", key); return NULL; } template static PyObject* mat3x3_mp_item(mat<3, 3, T> * self, PyObject* key) { if (PyGLM_Number_Check(key)) { long index = PyGLM_Number_AsLong(key); if (index < 0 || index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } return pack_mvec<3, T>(&self->super_type[index], (PyObject*)self); } if (PyTuple_Check(key) && Py_SIZE(key) == 2) { PyObject* value0 = PyTuple_GET_ITEM(key, 0); PyObject* value1 = PyTuple_GET_ITEM(key, 1); if (value0 == NULL || value1 == NULL || !PyGLM_Number_Check(value0) || !PyGLM_Number_Check(value1)) { PyErr_SetString(PyExc_TypeError, "indices must be a pair of integer"); return NULL; } long value0_as_long = PyGLM_Number_AsLong(value0); long value1_as_long = PyGLM_Number_AsLong(value1); if (value0_as_long < 0 || value0_as_long > 2 || value1_as_long < 0 || value1_as_long > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } return PyGLM_PyObject_FromNumber(self->super_type[value0_as_long][value1_as_long]); } PyGLM_TYPEERROR_O("index must be int or a length 2 tuple, got ", key); return NULL; } template static PyObject* mat3x4_mp_item(mat<3, 4, T> * self, PyObject* key) { if (PyGLM_Number_Check(key)) { long index = PyGLM_Number_AsLong(key); if (index < 0 || index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } return pack_mvec<4, T>(&self->super_type[index], (PyObject*)self); } if (PyTuple_Check(key) && Py_SIZE(key) == 2) { PyObject* value0 = PyTuple_GET_ITEM(key, 0); PyObject* value1 = PyTuple_GET_ITEM(key, 1); if (value0 == NULL || value1 == NULL || !PyGLM_Number_Check(value0) || !PyGLM_Number_Check(value1)) { PyErr_SetString(PyExc_TypeError, "indices must be a pair of integer"); return NULL; } long value0_as_long = PyGLM_Number_AsLong(value0); long value1_as_long = PyGLM_Number_AsLong(value1); if (value0_as_long < 0 || value0_as_long > 2 || value1_as_long < 0 || value1_as_long > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } return PyGLM_PyObject_FromNumber(self->super_type[value0_as_long][value1_as_long]); } PyGLM_TYPEERROR_O("index must be int or a length 2 tuple, got ", key); return NULL; } template static PyObject* mat4x2_mp_item(mat<4, 2, T> * self, PyObject* key) { if (PyGLM_Number_Check(key)) { long index = PyGLM_Number_AsLong(key); if (index < 0 || index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } return pack_mvec<2, T>(&self->super_type[index], (PyObject*)self); } if (PyTuple_Check(key) && Py_SIZE(key) == 2) { PyObject* value0 = PyTuple_GET_ITEM(key, 0); PyObject* value1 = PyTuple_GET_ITEM(key, 1); if (value0 == NULL || value1 == NULL || !PyGLM_Number_Check(value0) || !PyGLM_Number_Check(value1)) { PyErr_SetString(PyExc_TypeError, "indices must be a pair of integer"); return NULL; } long value0_as_long = PyGLM_Number_AsLong(value0); long value1_as_long = PyGLM_Number_AsLong(value1); if (value0_as_long < 0 || value0_as_long > 3 || value1_as_long < 0 || value1_as_long > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } return PyGLM_PyObject_FromNumber(self->super_type[value0_as_long][value1_as_long]); } PyGLM_TYPEERROR_O("index must be int or a length 2 tuple, got ", key); return NULL; } template static PyObject* mat4x3_mp_item(mat<4, 3, T> * self, PyObject* key) { if (PyGLM_Number_Check(key)) { long index = PyGLM_Number_AsLong(key); if (index < 0 || index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } return pack_mvec<3, T>(&self->super_type[index], (PyObject*)self); } if (PyTuple_Check(key) && Py_SIZE(key) == 2) { PyObject* value0 = PyTuple_GET_ITEM(key, 0); PyObject* value1 = PyTuple_GET_ITEM(key, 1); if (value0 == NULL || value1 == NULL || !PyGLM_Number_Check(value0) || !PyGLM_Number_Check(value1)) { PyErr_SetString(PyExc_TypeError, "indices must be a pair of integer"); return NULL; } long value0_as_long = PyGLM_Number_AsLong(value0); long value1_as_long = PyGLM_Number_AsLong(value1); if (value0_as_long < 0 || value0_as_long > 3 || value1_as_long < 0 || value1_as_long > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } return PyGLM_PyObject_FromNumber(self->super_type[value0_as_long][value1_as_long]); } PyGLM_TYPEERROR_O("index must be int or a length 2 tuple, got ", key); return NULL; } template static PyObject* mat4x4_mp_item(mat<4, 4, T> * self, PyObject* key) { if (PyGLM_Number_Check(key)) { long index = PyGLM_Number_AsLong(key); if (index < 0 || index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } return pack_mvec<4, T>(&self->super_type[index], (PyObject*)self); } if (PyTuple_Check(key) && Py_SIZE(key) == 2) { PyObject* value0 = PyTuple_GET_ITEM(key, 0); PyObject* value1 = PyTuple_GET_ITEM(key, 1); if (value0 == NULL || value1 == NULL || !PyGLM_Number_Check(value0) || !PyGLM_Number_Check(value1)) { PyErr_SetString(PyExc_TypeError, "indices must be a pair of integer"); return NULL; } long value0_as_long = PyGLM_Number_AsLong(value0); long value1_as_long = PyGLM_Number_AsLong(value1); if (value0_as_long < 0 || value0_as_long > 3 || value1_as_long < 0 || value1_as_long > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } return PyGLM_PyObject_FromNumber(self->super_type[value0_as_long][value1_as_long]); } PyGLM_TYPEERROR_O("index must be int or a length 2 tuple, got ", key); return NULL; } template static int mat2x2_mp_ass_item(mat<2, 2, T> * self, PyObject* key, PyObject * value) { if (value == NULL) { PyErr_SetString(PyExc_NotImplementedError, "item deletion not supported"); return -1; } if (PyGLM_Number_Check(key)) { PyGLM_PTI_Init0(value, (get_vec_PTI_info<2, T>())); if (!PyGLM_Vec_PTI_Check0(2, T, value)) { PyGLM_TYPEERROR_O("expected vec2, got ", value); return -1; } glm::vec<2, T> o = PyGLM_Vec_PTI_Get0(2, T, value); long index = PyGLM_Number_AsLong(key); if (index < 0 || index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } self->super_type[index] = o; return 0; } if (PyTuple_Check(key) && Py_SIZE(key) == 2) { if (!PyGLM_Number_Check(value)) { PyGLM_TYPEERROR_O("expected a number, got ", value); return -1; } PyObject* value0 = PyTuple_GET_ITEM(key, 0); PyObject* value1 = PyTuple_GET_ITEM(key, 1); if (value0 == NULL || value1 == NULL || !PyGLM_Number_Check(value0) || !PyGLM_Number_Check(value1)) { PyErr_SetString(PyExc_TypeError, "indices must be a pair of integer"); return -1; } long value0_as_long = PyGLM_Number_AsLong(value0); long value1_as_long = PyGLM_Number_AsLong(value1); if (value0_as_long < 0 || value0_as_long > 1 || value1_as_long < 0 || value1_as_long > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } self->super_type[value0_as_long][value1_as_long] = PyGLM_Number_FromPyObject(value); return 0; } PyGLM_TYPEERROR_O("index must be int or tuple, not ", key); return -1; } template static int mat2x3_mp_ass_item(mat<2, 3, T> * self, PyObject* key, PyObject * value) { if (value == NULL) { PyErr_SetString(PyExc_NotImplementedError, "item deletion not supported"); return -1; } if (PyGLM_Number_Check(key)) { PyGLM_PTI_Init0(value, (get_vec_PTI_info<3, T>())) if (!PyGLM_Vec_PTI_Check0(3, T, value)) { PyGLM_TYPEERROR_O("expected vec3, got ", value); return -1; } glm::vec<3, T> o = PyGLM_Vec_PTI_Get0(3, T, value); long index = PyGLM_Number_AsLong(key); if (index < 0 || index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } self->super_type[index] = o; return 0; } if (PyTuple_Check(key) && Py_SIZE(key) == 2) { if (!PyGLM_Number_Check(value)) { PyGLM_TYPEERROR_O("expected a number, got ", value); return -1; } PyObject* value0 = PyTuple_GET_ITEM(key, 0); PyObject* value1 = PyTuple_GET_ITEM(key, 1); if (value0 == NULL || value1 == NULL || !PyGLM_Number_Check(value0) || !PyGLM_Number_Check(value1)) { PyErr_SetString(PyExc_TypeError, "indices must be a pair of integer"); return -1; } long value0_as_long = PyGLM_Number_AsLong(value0); long value1_as_long = PyGLM_Number_AsLong(value1); if (value0_as_long < 0 || value0_as_long > 1 || value1_as_long < 0 || value1_as_long > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } self->super_type[value0_as_long][value1_as_long] = PyGLM_Number_FromPyObject(value); return 0; } PyGLM_TYPEERROR_O("index must be int or tuple, not ", key); return -1; } template static int mat2x4_mp_ass_item(mat<2, 4, T> * self, PyObject* key, PyObject * value) { if (value == NULL) { PyErr_SetString(PyExc_NotImplementedError, "item deletion not supported"); return -1; } if (PyGLM_Number_Check(key)) { PyGLM_PTI_Init0(value, (get_vec_PTI_info<4, T>())); if (!PyGLM_Vec_PTI_Check0(4, T, value)) { PyGLM_TYPEERROR_O("expected vec4, got ", value); return -1; } glm::vec<4, T> o = PyGLM_Vec_PTI_Get0(4, T, value); long index = PyGLM_Number_AsLong(key); if (index < 0 || index > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } self->super_type[index] = o; return 0; } if (PyTuple_Check(key) && Py_SIZE(key) == 2) { if (!PyGLM_Number_Check(value)) { PyGLM_TYPEERROR_O("expected a number, got ", value); return -1; } PyObject* value0 = PyTuple_GET_ITEM(key, 0); PyObject* value1 = PyTuple_GET_ITEM(key, 1); if (value0 == NULL || value1 == NULL || !PyGLM_Number_Check(value0) || !PyGLM_Number_Check(value1)) { PyErr_SetString(PyExc_TypeError, "indices must be a pair of integer"); return -1; } long value0_as_long = PyGLM_Number_AsLong(value0); long value1_as_long = PyGLM_Number_AsLong(value1); if (value0_as_long < 0 || value0_as_long > 1 || value1_as_long < 0 || value1_as_long > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } self->super_type[value0_as_long][value1_as_long] = PyGLM_Number_FromPyObject(value); return 0; } PyGLM_TYPEERROR_O("index must be int or tuple, not ", key); return -1; } template static int mat3x2_mp_ass_item(mat<3, 2, T> * self, PyObject* key, PyObject * value) { if (value == NULL) { PyErr_SetString(PyExc_NotImplementedError, "item deletion not supported"); return -1; } if (PyGLM_Number_Check(key)) { PyGLM_PTI_Init0(value, (get_vec_PTI_info<2, T>())); if (!PyGLM_Vec_PTI_Check0(2, T, value)) { PyGLM_TYPEERROR_O("expected vec2, got ", value); return -1; } glm::vec<2, T> o = PyGLM_Vec_PTI_Get0(2, T, value); long index = PyGLM_Number_AsLong(key); if (index < 0 || index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } self->super_type[index] = o; return 0; } if (PyTuple_Check(key) && Py_SIZE(key) == 2) { if (!PyGLM_Number_Check(value)) { PyGLM_TYPEERROR_O("expected a number, got ", value); return -1; } PyObject* value0 = PyTuple_GET_ITEM(key, 0); PyObject* value1 = PyTuple_GET_ITEM(key, 1); if (value0 == NULL || value1 == NULL || !PyGLM_Number_Check(value0) || !PyGLM_Number_Check(value1)) { PyErr_SetString(PyExc_TypeError, "indices must be a pair of integer"); return -1; } long value0_as_long = PyGLM_Number_AsLong(value0); long value1_as_long = PyGLM_Number_AsLong(value1); if (value0_as_long < 0 || value0_as_long > 2 || value1_as_long < 0 || value1_as_long > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } self->super_type[value0_as_long][value1_as_long] = PyGLM_Number_FromPyObject(value); return 0; } PyGLM_TYPEERROR_O("index must be int or tuple, not ", key); return -1; } template static int mat3x3_mp_ass_item(mat<3, 3, T> * self, PyObject* key, PyObject * value) { if (value == NULL) { PyErr_SetString(PyExc_NotImplementedError, "item deletion not supported"); return -1; } if (PyGLM_Number_Check(key)) { PyGLM_PTI_Init0(value, (get_vec_PTI_info<3, T>())); if (!PyGLM_Vec_PTI_Check0(3, T, value)) { PyGLM_TYPEERROR_O("expected vec3, got ", value); return -1; } glm::vec<3, T> o = PyGLM_Vec_PTI_Get0(3, T, value); long index = PyGLM_Number_AsLong(key); if (index < 0 || index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } self->super_type[index] = o; return 0; } if (PyTuple_Check(key) && Py_SIZE(key) == 2) { if (!PyGLM_Number_Check(value)) { PyGLM_TYPEERROR_O("expected a number, got ", value); return -1; } PyObject* value0 = PyTuple_GET_ITEM(key, 0); PyObject* value1 = PyTuple_GET_ITEM(key, 1); if (value0 == NULL || value1 == NULL || !PyGLM_Number_Check(value0) || !PyGLM_Number_Check(value1)) { PyErr_SetString(PyExc_TypeError, "indices must be a pair of integer"); return -1; } long value0_as_long = PyGLM_Number_AsLong(value0); long value1_as_long = PyGLM_Number_AsLong(value1); if (value0_as_long < 0 || value0_as_long > 2 || value1_as_long < 0 || value1_as_long > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } self->super_type[value0_as_long][value1_as_long] = PyGLM_Number_FromPyObject(value); return 0; } PyGLM_TYPEERROR_O("index must be int or tuple, not ", key); return -1; } template static int mat3x4_mp_ass_item(mat<3, 4, T> * self, PyObject* key, PyObject * value) { if (value == NULL) { PyErr_SetString(PyExc_NotImplementedError, "item deletion not supported"); return -1; } if (PyGLM_Number_Check(key)) { PyGLM_PTI_Init0(value, (get_vec_PTI_info<4, T>())) if (!PyGLM_Vec_PTI_Check0(4, T, value)) { PyGLM_TYPEERROR_O("expected vec4, got ", value); return -1; } glm::vec<4, T> o = PyGLM_Vec_PTI_Get0(4, T, value); long index = PyGLM_Number_AsLong(key); if (index < 0 || index > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } self->super_type[index] = o; return 0; } if (PyTuple_Check(key) && Py_SIZE(key) == 2) { if (!PyGLM_Number_Check(value)) { PyGLM_TYPEERROR_O("expected a number, got ", value); return -1; } PyObject* value0 = PyTuple_GET_ITEM(key, 0); PyObject* value1 = PyTuple_GET_ITEM(key, 1); if (value0 == NULL || value1 == NULL || !PyGLM_Number_Check(value0) || !PyGLM_Number_Check(value1)) { PyErr_SetString(PyExc_TypeError, "indices must be a pair of integer"); return -1; } long value0_as_long = PyGLM_Number_AsLong(value0); long value1_as_long = PyGLM_Number_AsLong(value1); if (value0_as_long < 0 || value0_as_long > 2 || value1_as_long < 0 || value1_as_long > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } self->super_type[value0_as_long][value1_as_long] = PyGLM_Number_FromPyObject(value); return 0; } PyGLM_TYPEERROR_O("index must be int or tuple, not ", key); return -1; } template static int mat4x2_mp_ass_item(mat<4, 2, T> * self, PyObject* key, PyObject * value) { if (value == NULL) { PyErr_SetString(PyExc_NotImplementedError, "item deletion not supported"); return -1; } if (PyGLM_Number_Check(key)) { PyGLM_PTI_Init0(value, (get_vec_PTI_info<2, T>())); if (!PyGLM_Vec_PTI_Check0(2, T, value)) { PyGLM_TYPEERROR_O("expected vec2, got ", value); return -1; } glm::vec<2, T> o = PyGLM_Vec_PTI_Get0(2, T, value); long index = PyGLM_Number_AsLong(key); if (index < 0 || index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } self->super_type[index] = o; return 0; } if (PyTuple_Check(key) && Py_SIZE(key) == 2) { if (!PyGLM_Number_Check(value)) { PyGLM_TYPEERROR_O("expected a number, got ", value); return -1; } PyObject* value0 = PyTuple_GET_ITEM(key, 0); PyObject* value1 = PyTuple_GET_ITEM(key, 1); if (value0 == NULL || value1 == NULL || !PyGLM_Number_Check(value0) || !PyGLM_Number_Check(value1)) { PyErr_SetString(PyExc_TypeError, "indices must be a pair of integer"); return -1; } long value0_as_long = PyGLM_Number_AsLong(value0); long value1_as_long = PyGLM_Number_AsLong(value1); if (value0_as_long < 0 || value0_as_long > 3 || value1_as_long < 0 || value1_as_long > 1) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } self->super_type[value0_as_long][value1_as_long] = PyGLM_Number_FromPyObject(value); return 0; } PyGLM_TYPEERROR_O("index must be int or tuple, not ", key); return -1; } template static int mat4x3_mp_ass_item(mat<4, 3, T> * self, PyObject* key, PyObject * value) { if (value == NULL) { PyErr_SetString(PyExc_NotImplementedError, "item deletion not supported"); return -1; } if (PyGLM_Number_Check(key)) { PyGLM_PTI_Init0(value, (get_vec_PTI_info<3, T>())); if (!PyGLM_Vec_PTI_Check0(3, T, value)) { PyGLM_TYPEERROR_O("expected vec3, got ", value); return -1; } glm::vec<3, T> o = PyGLM_Vec_PTI_Get0(3, T, value); long index = PyGLM_Number_AsLong(key); if (index < 0 || index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } self->super_type[index] = o; return 0; } if (PyTuple_Check(key) && Py_SIZE(key) == 2) { if (!PyGLM_Number_Check(value)) { PyGLM_TYPEERROR_O("expected a number, got ", value); return -1; } PyObject* value0 = PyTuple_GET_ITEM(key, 0); PyObject* value1 = PyTuple_GET_ITEM(key, 1); if (value0 == NULL || value1 == NULL || !PyGLM_Number_Check(value0) || !PyGLM_Number_Check(value1)) { PyErr_SetString(PyExc_TypeError, "indices must be a pair of integer"); return -1; } long value0_as_long = PyGLM_Number_AsLong(value0); long value1_as_long = PyGLM_Number_AsLong(value1); if (value0_as_long < 0 || value0_as_long > 3 || value1_as_long < 0 || value1_as_long > 2) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } self->super_type[value0_as_long][value1_as_long] = PyGLM_Number_FromPyObject(value); return 0; } PyGLM_TYPEERROR_O("index must be int or tuple, not ", key); return -1; } template static int mat4x4_mp_ass_item(mat<4, 4, T> * self, PyObject* key, PyObject * value) { if (value == NULL) { PyErr_SetString(PyExc_NotImplementedError, "item deletion not supported"); return -1; } if (PyGLM_Number_Check(key)) { PyGLM_PTI_Init0(value, (get_vec_PTI_info<4, T>())); if (!PyGLM_Vec_PTI_Check0(4, T, value)) { PyGLM_TYPEERROR_O("expected vec4, got ", value); return -1; } glm::vec<4, T> o = PyGLM_Vec_PTI_Get0(4, T, value); long index = PyGLM_Number_AsLong(key); if (index < 0 || index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } self->super_type[index] = o; return 0; } if (PyTuple_Check(key) && Py_SIZE(key) == 2) { if (!PyGLM_Number_Check(value)) { PyGLM_TYPEERROR_O("expected a number, got ", value); return -1; } PyObject* value0 = PyTuple_GET_ITEM(key, 0); PyObject* value1 = PyTuple_GET_ITEM(key, 1); if (value0 == NULL || value1 == NULL || !PyGLM_Number_Check(value0) || !PyGLM_Number_Check(value1)) { PyErr_SetString(PyExc_TypeError, "indices must be a pair of integer"); return -1; } long value0_as_long = PyGLM_Number_AsLong(value0); long value1_as_long = PyGLM_Number_AsLong(value1); if (value0_as_long < 0 || value0_as_long > 3 || value1_as_long < 0 || value1_as_long > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } self->super_type[value0_as_long][value1_as_long] = PyGLM_Number_FromPyObject(value); return 0; } PyGLM_TYPEERROR_O("index must be int or tuple, not ", key); return -1; } template static int mat_contains(mat * self, PyObject * value) { if (PyGLM_Number_Check(value)) { T f = PyGLM_Number_FromPyObject(value); bool contains = false; for (int n = 0; n < C; n++) { for (int m = 0; m < R; m++) { if (f == self->super_type[n][m]) { contains = true; break; } } } return (int)contains; } PyGLM_PTI_Init0(value, (get_vec_PTI_info())); if (PyGLM_Vec_PTI_Check0(R, T, value)) { glm::vec o = PyGLM_Vec_PTI_Get0(R, T, value); for (int n = 0; n < C; n++) { bool contains = true; for (int m = 0; m < R; m++) { if (o[m] != self->super_type[n][m]) { contains = false; break; } } if (contains) { return 1; } } } return 0; } template static PyObject * mat_richcompare(mat * self, PyObject * other, int comp_type) { PyGLM_PTI_Init1(other, (get_mat_PTI_info())); if (PyGLM_PTI_IsNone(1)) { if (comp_type == Py_EQ) { Py_RETURN_FALSE; } if (comp_type == Py_NE) { Py_RETURN_TRUE; } Py_RETURN_NOTIMPLEMENTED; } glm::mat o2 = PyGLM_Mat_PTI_Get1(C, R, T, other); switch (comp_type) { case Py_EQ: if (self->super_type == o2) Py_RETURN_TRUE; else Py_RETURN_FALSE; break; case Py_NE: if (self->super_type != o2) Py_RETURN_TRUE; else Py_RETURN_FALSE; break; default: Py_RETURN_NOTIMPLEMENTED; } } // iterator template static PyObject * matIter_new(PyTypeObject *type, PyObject *args, PyObject *) { mat *sequence = NULL; if (!PyArg_UnpackTuple(args, "__iter__", 1, 1, &sequence)) return NULL; matIter *rgstate = (matIter *)type->tp_alloc(type, 0); if (!rgstate) return NULL; rgstate->sequence = sequence; Py_INCREF(sequence); rgstate->seq_index = 0; return (PyObject *)rgstate; } template static void matIter_dealloc(matIter *rgstate) { Py_XDECREF(rgstate->sequence); Py_TYPE(rgstate)->tp_free(rgstate); } template static PyObject * matIter_next(matIter *rgstate) { if (rgstate->seq_index < C) { return pack_mvec(&rgstate->sequence->super_type[rgstate->seq_index++], (PyObject*)rgstate->sequence); } rgstate->seq_index = C; Py_CLEAR(rgstate->sequence); return NULL; } template static PyObject * mat_geniter(mat* self) { PyTypeObject* matIterType = PyGLM_MATITER_TYPE(); matIter *rgstate = (matIter *)(matIterType->tp_alloc(matIterType, 0)); if (!rgstate) return NULL; rgstate->sequence = self; Py_INCREF(self); rgstate->seq_index = 0; return (PyObject *)rgstate; } template static int mat_getbuffer(mat* self, Py_buffer* view, int flags) { if (view == NULL) { PyErr_SetString(PyExc_ValueError, "NULL view in getbuffer"); return -1; } if ((flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS) { PyErr_SetString(PyExc_BufferError, "This type of buffer is not supported."); view->obj = NULL; return -1; } view->obj = (PyObject*)self; view->buf = (void*)&self->super_type[0][0]; view->len = sizeof(glm::mat); view->readonly = 0; view->itemsize = sizeof(T); if (flags & PyBUF_FORMAT) { view->format = (std::is_same::value) ? const_cast("f") : \ (std::is_same ::value) ? const_cast("d") : \ (std::is_same ::value) ? const_cast("i") : \ (std::is_same ::value) ? const_cast("I") : NULL; } else { view->format = NULL; } view->ndim = 2; if (flags & PyBUF_ND) { view->shape = (Py_ssize_t*)PyMem_Malloc(2 * sizeof(Py_ssize_t)); if (view->shape != NULL) { view->shape[0] = R; view->shape[1] = C; } } else { view->shape = NULL; } if ((flags & PyBUF_STRIDES) == PyBUF_STRIDES) { view->strides = (Py_ssize_t*)PyMem_Malloc(2 * sizeof(Py_ssize_t)); if (view->strides != NULL) { view->strides[0] = sizeof(T); view->strides[1] = sizeof(typename glm::mat::col_type); } } else { view->strides = NULL; } view->suboffsets = NULL; view->internal = NULL; Py_INCREF(self); return 0; } static void mat_releasebuffer(PyObject*, Py_buffer* view) { PyMem_Free(view->shape); PyMem_Free(view->strides); } template static PyObject* mat_from_bytes(PyObject*, PyObject* arg) { PyTypeObject* type = PyGLM_MAT_TYPE(); if (PyBytes_Check(arg) && PyBytes_GET_SIZE(arg) == ((PyGLMTypeObject*)type)->itemSize) { char* bytesAsString = PyBytes_AS_STRING(arg); mat* self = (mat *)type->tp_alloc(type, 0); self->super_type = *(glm::mat*)bytesAsString; return (PyObject*)self; } PyGLM_TYPEERROR_O("Invalid argument type for from_bytes(). Expected bytes, got ", arg); return NULL; } template static Py_hash_t mat_hash(mat* self, PyObject*) { std::hash> hasher; Py_hash_t out = (Py_hash_t)hasher(self->super_type); if (out == -1) { return -2; } return out; } template static PyObject* mat_to_list(mat* self, PyObject*) { PyObject* out = PyList_New(C); for (int n = 0; n < C; n++) { PyObject* innerList = PyList_New(R); for (int m = 0; m < R; m++) { PyList_SET_ITEM(innerList, m, PyGLM_PyObject_FromNumber(self->super_type[n][m])); } PyList_SET_ITEM(out, n, innerList); } return out; } template static PyObject* mat_to_tuple(mat* self, PyObject*) { PyObject* out = PyTuple_New(C); for (int n = 0; n < C; n++) { PyObject* innerList = PyTuple_New(R); for (int m = 0; m < R; m++) { PyTuple_SET_ITEM(innerList, m, PyGLM_PyObject_FromNumber(self->super_type[n][m])); } PyTuple_SET_ITEM(out, n, innerList); } return out; } template static PyObject* mat_setstate(mat* self, PyObject* state) { PyGLM_ASSERT(PyTuple_CheckExact(state) && PyTuple_GET_SIZE(state) == C, "Invalid state."); for (int c = 0; c < C; c++) { PyObject* innerList = PyTuple_GET_ITEM(state, c); PyGLM_ASSERT(PyTuple_CheckExact(innerList) && PyTuple_GET_SIZE(innerList) == R, "Invalid state."); for (int r = 0; r < R; r++) { self->super_type[c][r] = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(innerList, r)); } } Py_RETURN_NONE; }Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/type_methods/mvec.h000066400000000000000000001252621511156275200231260ustar00rootroot00000000000000#pragma once #include "../compiler_setup.h" #include "../internal_functions/all.h" #include "../types/mvec/all.h" #include "vec.h" static void mvec_dealloc(PyObject* self) { Py_XDECREF(((mvec_helper*)self)->master); self->ob_type->tp_free(self); } template static PyObject* mvec_new(PyTypeObject* type, PyObject*, PyObject*) { mvec* self = (mvec*)type->tp_alloc(type, 0); if (self != NULL) { //constexpr uint8_t info_type = get_type_helper_type(); //constexpr uint8_t info = L | (info_type << PyGLM_TYPE_INFO_VEC_TYPE_OFFSET); //self->info = info; self->master = NULL; self->super_type = NULL; } return (PyObject*)self; } template static int mvec_init(mvec* self, PyObject* args, PyObject* kwds) { if (PyTuple_GET_SIZE(args) == 1 && Py_TYPE(PyTuple_GET_ITEM(args, 0)) == PyGLM_VEC_TYPE()) { self->master = PyGLM_INCREF(PyTuple_GET_ITEM(args, 0)); } else { if (PyTuple_GET_SIZE(args) || kwds) { PyErr_SetString(PyExc_TypeError, "Invalid arguments for mvec(). Expected no arguments or a vector to reference."); return -1; } self->master = vec_new(PyGLM_VEC_TYPE(), NULL, NULL); } self->super_type = &((vec*)self->master)->super_type; return 0; } // unaryfunc template static PyObject * mvec_neg(mvec *obj) { return pack_vec(-*obj->super_type); } template static PyObject * mvec_pos(mvec *obj) { return pack_vec(*obj->super_type); } template static PyObject * mvec_abs(mvec *obj) { return pack_vec(glm::abs(*obj->super_type)); } template static PyObject* mvec_invert(mvec* obj) { return pack_vec(~*obj->super_type); } // binaryfunc template static PyObject * mvec_add(PyObject *obj1, PyObject *obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self return pack_vec(PyGLM_Number_FromPyObject(obj1) + *(((mvec*)obj2)->super_type)); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for +: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_vec(o + PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); // obj1 and obj2 can be interpreted as a mvec return pack_vec(o + o2); } template static PyObject * mvec_sub(PyObject *obj1, PyObject *obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self return pack_vec(PyGLM_Number_FromPyObject(obj1) - *((mvec*)obj2)->super_type); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for -: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_vec(o - PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); // obj1 and obj2 can be interpreted as a mvec return pack_vec(o - o2); } template static PyObject * mvec_mul(PyObject *obj1, PyObject *obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self return pack_vec(PyGLM_Number_FromPyObject(obj1) * *((mvec*)obj2)->super_type); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for *: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_vec(o * PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); // obj1 and obj2 can be interpreted as a mvec return pack_vec(o * o2); } template static PyObject * mvec_div(PyObject *obj1, PyObject *obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self if (!glm::all((glm::vec)(((mvec*)obj2)->super_type))) { PyGLM_ZERO_DIVISION_ERROR_T(T); } return pack_vec(PyGLM_Number_FromPyObject(obj1) / *((mvec*)obj2)->super_type); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for /: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar T o2 = PyGLM_Number_FromPyObject(obj2); if (o2 == (T)0) { PyGLM_ZERO_DIVISION_ERROR_T(T); } return pack_vec(o / o2); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); if (!glm::all((glm::vec)o2)) { PyGLM_ZERO_DIVISION_ERROR_T(T); } // obj1 and obj2 can be interpreted as a mvec return pack_vec(o / o2); } template static PyObject * imvec_floordiv(PyObject *obj1, PyObject *obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self PyObject* temp = pack_vec(glm::vec(PyGLM_Number_FromPyObject(obj1))); PyObject* result = imvec_floordiv(temp, obj2); Py_DECREF(temp); return result; } if (PyGLM_Number_Check(obj2)) { // obj2 is a scalar, obj1 is self PyObject* temp = pack_vec(glm::vec(PyGLM_Number_FromPyObject(obj2))); PyObject* result = imvec_floordiv(obj1, temp); Py_DECREF(temp); return result; } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for /: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); if (!glm::all((glm::vec)o2)) { PyGLM_ZERO_DIVISION_ERROR_T(T); } // obj1 and obj2 can be interpreted as a mvec return pack_vec(ivec_floordivmod(o, o2)); } template static PyObject * mvec_mod(PyObject *obj1, PyObject *obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self if (!glm::all((glm::vec)(((mvec*)obj2)->super_type))) { PyGLM_ZERO_DIVISION_ERROR_T(T); } return pack_vec(glm::mod(glm::vec(PyGLM_Number_FromPyObject(obj1)), *((mvec*)obj2)->super_type)); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for %: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar T o2 = PyGLM_Number_FromPyObject(obj2); if (o2 == (T)0) { PyGLM_ZERO_DIVISION_ERROR_T(T); } return pack_vec(glm::mod(o, glm::vec(o2))); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); if (!glm::all((glm::vec)o2)) { PyGLM_ZERO_DIVISION_ERROR_T(T); } // obj1 and obj2 can be interpreted as a mvec return pack_vec(glm::mod(o, o2)); } template static PyObject * mvec_floordiv(PyObject *obj1, PyObject *obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self if (!glm::all((glm::vec)(((mvec*)obj2)->super_type))) { PyGLM_ZERO_DIVISION_ERROR_T(T); } return pack_vec(floor(PyGLM_Number_FromPyObject(obj1) / *((mvec*)obj2)->super_type)); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for //: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar T o2 = PyGLM_Number_FromPyObject(obj2); if (o2 == (T)0) { PyGLM_ZERO_DIVISION_ERROR_T(T); } return pack_vec(floor(o / o2)); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); if (!glm::all((glm::vec)o2)) { PyGLM_ZERO_DIVISION_ERROR_T(T); } // obj1 and obj2 can be interpreted as a mvec return pack_vec(floor(o / o2)); } template static PyObject * mvec_divmod(PyObject * obj1, PyObject * obj2) { PyObject *arg1, *arg2; arg1 = mvec_floordiv(obj1, obj2); arg2 = mvec_mod(obj1, obj2); if (arg1 == NULL || arg2 == NULL) { return NULL; } PyObject* out = PyTuple_Pack(2, arg1, arg2); Py_DECREF(arg1); Py_DECREF(arg2); return out; } template static PyObject* mvec_lshift(PyObject* obj1, PyObject* obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self return pack_vec(PyGLM_Number_FromPyObject(obj1) << *(((mvec*)obj2)->super_type)); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for <<: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_vec(o << PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); // obj1 and obj2 can be interpreted as a mvec return pack_vec(o << o2); } template static PyObject* mvec_rshift(PyObject* obj1, PyObject* obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self return pack_vec(PyGLM_Number_FromPyObject(obj1) >> *(((mvec*)obj2)->super_type)); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for >>: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_vec(o >> PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); // obj1 and obj2 can be interpreted as a mvec return pack_vec(o >> o2); } template static PyObject* mvec_and(PyObject* obj1, PyObject* obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self return pack_vec(PyGLM_Number_FromPyObject(obj1) & *(((mvec*)obj2)->super_type)); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for &: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_vec(o & PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); // obj1 and obj2 can be interpreted as a mvec return pack_vec(o & o2); } template static PyObject* mvec_or(PyObject* obj1, PyObject* obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self return pack_vec(PyGLM_Number_FromPyObject(obj1) | *(((mvec*)obj2)->super_type)); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for |: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_vec(o | PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); // obj1 and obj2 can be interpreted as a mvec return pack_vec(o | o2); } template static PyObject* mvec_xor(PyObject* obj1, PyObject* obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self return pack_vec(PyGLM_Number_FromPyObject(obj1) ^ *(((mvec*)obj2)->super_type)); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for ^: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_vec(o ^ PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); // obj1 and obj2 can be interpreted as a mvec return pack_vec(o ^ o2); } // ternaryfunc template static PyObject * mvec_pow(PyObject * obj1, PyObject * obj2, PyObject * obj3) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self T f = PyGLM_Number_FromPyObject(obj1); if (obj3 == Py_None) { return pack_vec(glm::pow(glm::vec(f), *((mvec*)obj2)->super_type)); } if (PyGLM_Number_Check(obj3)) { T f2 = PyGLM_Number_FromPyObject(obj3); return pack_vec(glm::mod(glm::pow(glm::vec(f), *((mvec*)obj2)->super_type), glm::vec(f2))); } PyGLM_PTI_Init2(obj3, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(2)) { PyGLM_TYPEERROR_O("unsupported operand type(s) for **: ", obj3); return NULL; } glm::vec o3 = PyGLM_Vec_PTI_Get2(L, T, obj3); return pack_vec(glm::mod(glm::pow(glm::vec(f), *((mvec*)obj2)->super_type), o3)); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for **: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar T f = PyGLM_Number_FromPyObject(obj2); if (obj3 == Py_None) { return pack_vec(glm::pow(o, glm::vec(f))); } if (PyGLM_Number_Check(obj3)) { T f2 = PyGLM_Number_FromPyObject(obj3); return pack_vec(glm::mod(glm::pow(o, glm::vec(f)), glm::vec(f2))); } PyGLM_PTI_Init2(obj3, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(2)) { PyGLM_TYPEERROR_O("unsupported operand type(s) for **: ", obj3); return NULL; } glm::vec o3 = PyGLM_Vec_PTI_Get2(L, T, obj3); return pack_vec(glm::mod(glm::pow(o, glm::vec(f)), o3)); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else (maybe it knows how to do the operation) Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); // obj1 and obj2 can be interpreted as a mvec if (obj3 == Py_None) { return pack_vec(glm::pow(o, o2)); } if (PyGLM_Number_Check(obj3)) { T f2 = PyGLM_Number_FromPyObject(obj3); return pack_vec(glm::mod(glm::pow(o, o2), glm::vec(f2))); } PyGLM_PTI_Init2(obj3, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(2)) { PyGLM_TYPEERROR_O("unsupported operand type(s) for **: ", obj3); return NULL; } glm::vec o3 = PyGLM_Vec_PTI_Get2(L, T, obj3); return pack_vec(glm::mod(glm::pow(o, o2), o3)); } static PyObject* mvec_matmul(PyObject* obj1, PyObject* obj2) { PyObject* out = PyNumber_Multiply(obj1, obj2); if (out == NULL) { PyGLM_TYPEERROR_2O("unsupported operand type(s) for @: ", obj1, obj2); } return out; } // inplace // binaryfunc template static PyObject * mvec_iadd(mvec *self, PyObject *obj) { vec * temp = (vec*)mvec_add((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; *self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * mvec_isub(mvec *self, PyObject *obj) { vec * temp = (vec*)mvec_sub((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; *self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * mvec_imul(mvec *self, PyObject *obj) { vec * temp = (vec*)mvec_mul((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; *self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * mvec_idiv(mvec *self, PyObject *obj) { vec * temp = (vec*)mvec_div((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; *self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * mvec_imod(mvec *self, PyObject *obj) { vec * temp = (vec*)mvec_mod((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; *self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * mvec_ifloordiv(mvec *self, PyObject *obj) { vec * temp = (vec*)mvec_floordiv((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; *self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * imvec_ifloordiv(mvec *self, PyObject *obj) { vec * temp = (vec*)imvec_floordiv((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; *self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject* mvec_imatmul(mvec* self, PyObject* obj) { mvec* temp = (mvec*)mvec_matmul((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; if (!PyGLM_Vec_Check(L, T, temp)) { Py_DECREF(temp); Py_RETURN_NOTIMPLEMENTED; } self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject* mvec_ilshift(mvec* self, PyObject* obj) { vec* temp = (vec*)mvec_lshift((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; *self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject* mvec_irshift(mvec* self, PyObject* obj) { vec* temp = (vec*)mvec_rshift((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; *self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject* mvec_iand(mvec* self, PyObject* obj) { vec* temp = (vec*)mvec_and((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; *self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject* mvec_ixor(mvec* self, PyObject* obj) { vec* temp = (vec*)mvec_xor((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; *self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject* mvec_ior(mvec* self, PyObject* obj) { vec* temp = (vec*)mvec_or((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; *self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } // ternaryfunc template static PyObject * mvec_ipow(mvec *self, PyObject *obj1, PyObject *) // obj2 is unused. It points to an invalid address! { vec * temp = (vec*)mvec_pow((PyObject*)self, obj1, Py_None); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; *self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * mvec2_str(mvec<2, T>* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 32 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s( %12.6g, %12.6g )", name, (double)self->super_type->x, (double)self->super_type->y); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * mvec3_str(mvec<3, T>* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 46 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s( %12.6g, %12.6g, %12.6g )", name, (double)self->super_type->x, (double)self->super_type->y, (double)self->super_type->z); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * mvec4_str(mvec<4, T>* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 60 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s( %12.6g, %12.6g, %12.6g, %12.6g )", name, (double)self->super_type->x, (double)self->super_type->y, (double)self->super_type->z, (double)self->super_type->w); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static Py_ssize_t mvec_len(PyObject *) { return (Py_ssize_t)L; } template static PyObject* mvec2_sq_item(mvec<2, T> * self, Py_ssize_t index) { switch (index) { case 0: return PyGLM_PyObject_FromNumber((T)self->super_type->x); case 1: return PyGLM_PyObject_FromNumber((T)self->super_type->y); default: PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } } template static PyObject* mvec3_sq_item(mvec<3, T> * self, Py_ssize_t index) { switch (index) { case 0: return PyGLM_PyObject_FromNumber((T)self->super_type->x); case 1: return PyGLM_PyObject_FromNumber((T)self->super_type->y); case 2: return PyGLM_PyObject_FromNumber((T)self->super_type->z); default: PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } } template static PyObject* mvec4_sq_item(mvec<4, T> * self, Py_ssize_t index) { switch (index) { case 0: return PyGLM_PyObject_FromNumber((T)self->super_type->x); case 1: return PyGLM_PyObject_FromNumber((T)self->super_type->y); case 2: return PyGLM_PyObject_FromNumber((T)self->super_type->z); case 3: return PyGLM_PyObject_FromNumber((T)self->super_type->w); default: PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } } template static int mvec2_sq_ass_item(mvec<2, T> * self, Py_ssize_t index, PyObject * value) { T f; if (PyGLM_Number_Check(value)) { f = PyGLM_Number_FromPyObject(value); } else { PyGLM_TYPEERROR_O("must be a real number, not ", value); return -1; } switch (index) { case 0: self->super_type->x = f; return 0; case 1: self->super_type->y = f; return 0; default: PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } } template static int mvec3_sq_ass_item(mvec<3, T> * self, Py_ssize_t index, PyObject * value) { T f; if (PyGLM_Number_Check(value)) { f = PyGLM_Number_FromPyObject(value); } else { PyGLM_TYPEERROR_O("must be a real number, not ", value); return -1; } switch (index) { case 0: self->super_type->x = f; return 0; case 1: self->super_type->y = f; return 0; case 2: self->super_type->z = f; return 0; default: PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } } template static int mvec4_sq_ass_item(mvec<4, T> * self, Py_ssize_t index, PyObject * value) { T f; if (PyGLM_Number_Check(value)) { f = PyGLM_Number_FromPyObject(value); } else { PyGLM_TYPEERROR_O("must be a real number, not ", value); return -1; } switch (index) { case 0: self->super_type->x = f; return 0; case 1: self->super_type->y = f; return 0; case 2: self->super_type->z = f; return 0; case 3: self->super_type->w = f; return 0; default: PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } } template static int mvec_contains(mvec * self, PyObject * value) { if (PyGLM_Number_Check(value)) { T f = PyGLM_Number_FromPyObject(value); bool contains = false; for (int i = 0; i < L; i++) { if (f == (*self->super_type)[i]) { contains = true; break; } } return (int)contains; } return 0; } template static PyObject * mvec_richcompare(mvec * self, PyObject * other, int comp_type) { PyGLM_PTI_Init1(other, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { if (comp_type == Py_EQ) { Py_RETURN_FALSE; } if (comp_type == Py_NE) { Py_RETURN_TRUE; } Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, other); switch (comp_type) { case Py_EQ: if (*self->super_type == o2) Py_RETURN_TRUE; else Py_RETURN_FALSE; break; case Py_NE: if (*self->super_type != o2) Py_RETURN_TRUE; else Py_RETURN_FALSE; break; case Py_LT: return pack_vec(glm::lessThan(*self->super_type, o2)); break; case Py_LE: return pack_vec(glm::lessThanEqual(*self->super_type, o2)); break; case Py_GT: return pack_vec(glm::greaterThan(*self->super_type, o2)); break; case Py_GE: return pack_vec(glm::greaterThanEqual(*self->super_type, o2)); break; default: Py_RETURN_NOTIMPLEMENTED; } } template static bool unswizzle_mvec(mvec<2, T> * self, char c, T& out) { if (c == 'x' || c == 'r' || c == 's') { out = self->super_type->x; return true; } if (c == 'y' || c == 'g' || c == 't') { out = self->super_type->y; return true; } return false; } template static bool unswizzle_mvec(mvec<3, T> * self, char c, T& out) { if (c == 'x' || c == 'r' || c == 's') { out = self->super_type->x; return true; } if (c == 'y' || c == 'g' || c == 't') { out = self->super_type->y; return true; } if (c == 'z' || c == 'b' || c == 'q') { out = self->super_type->z; return true; } return false; } template static bool unswizzle_mvec(mvec<4, T> * self, char c, T& out) { if (c == 'x' || c == 'r' || c == 's') { out = self->super_type->x; return true; } if (c == 'y' || c == 'g' || c == 't') { out = self->super_type->y; return true; } if (c == 'z' || c == 'b' || c == 'q') { out = self->super_type->z; return true; } if (c == 'w' || c == 'a' || c == 'p') { out = self->super_type->w; return true; } return false; } template static T& unswizzle2_mvec(mvec<1, T> * self, char c, bool& success) { if (c == 'x' || c == 'r' || c == 's') { success = success && true; return self->super_type->x; } success = false; return self->super_type->x; } template static T& unswizzle2_mvec(mvec<2, T> * self, char c, bool& success) { if (c == 'x' || c == 'r' || c == 's') { success = success && true; return self->super_type->x; } if (c == 'y' || c == 'g' || c == 't') { success = success && true; return self->super_type->y; } success = false; return self->super_type->x; } template static T& unswizzle2_mvec(mvec<3, T> * self, char c, bool& success) { if (c == 'x' || c == 'r' || c == 's') { success = success && true; return self->super_type->x; } if (c == 'y' || c == 'g' || c == 't') { success = success && true; return self->super_type->y; } if (c == 'z' || c == 'b' || c == 'q') { success = success && true; return self->super_type->z; } success = false; return self->super_type->x; } template static T& unswizzle2_mvec(mvec<4, T> * self, char c, bool& success) { if (c == 'x' || c == 'r' || c == 's') { success = success && true; return self->super_type->x; } if (c == 'y' || c == 'g' || c == 't') { success = success && true; return self->super_type->y; } if (c == 'z' || c == 'b' || c == 'q') { success = success && true; return self->super_type->z; } if (c == 'w' || c == 'a' || c == 'p') { success = success && true; return self->super_type->w; } success = false; return self->super_type->x; } //template //static bool unswizzle_mvec(mvec* self, char c, T& out) { // if (L == 2) { // return unswizzle_mvec2(self, c, out); // } // if (L == 3) { // return unswizzle_mvec3(self, c, out); // } // return unswizzle_mvec4(self, c, out); //} template static PyObject * mvec_getattr(PyObject * obj, PyObject * name) { Py_ssize_t len; char* name_as_ccp; PyObject* asciiString = PyUnicode_AsASCIIString(name); if (asciiString == NULL) return NULL; if (PyBytes_AsStringAndSize(asciiString, &name_as_ccp, &len) != 0) { Py_DECREF(asciiString); return NULL; } PyObject * result = NULL; if (len >= 4 && name_as_ccp[0] == '_' && name_as_ccp[1] == '_' && name_as_ccp[len - 1] == '_' && name_as_ccp[len - 2] == '_') { result = PyObject_GenericGetAttr(obj, name); } else if (len == 1) { T x; if (unswizzle_mvec((mvec *)obj, name_as_ccp[0], x)) { result = PyGLM_PyObject_FromNumber((T)x); } } else if (len == 2) { T x; T y; if (unswizzle_mvec((mvec *)obj, name_as_ccp[0], x) && unswizzle_mvec((mvec *)obj, name_as_ccp[1], y)) { result = pack_vec<2, T>(glm::vec<2, T>(x, y)); } } else if (len == 3) { T x; T y; T z; if (unswizzle_mvec((mvec *)obj, name_as_ccp[0], x) && unswizzle_mvec((mvec *)obj, name_as_ccp[1], y) && unswizzle_mvec((mvec *)obj, name_as_ccp[2], z)) { result = pack_vec<3, T>(glm::vec<3, T>(x, y, z)); } } else if (len == 4) { T x; T y; T z; T w; if (unswizzle_mvec((mvec *)obj, name_as_ccp[0], x) && unswizzle_mvec((mvec *)obj, name_as_ccp[1], y) && unswizzle_mvec((mvec *)obj, name_as_ccp[2], z) && unswizzle_mvec((mvec *)obj, name_as_ccp[3], w)) { result = pack_vec<4, T>(glm::vec<4, T>(x, y, z, w)); } } Py_DECREF(asciiString); if (result == NULL) return PyObject_GenericGetAttr(obj, name); else return result; } template static int mvec_setattr(PyObject * obj, PyObject * name, PyObject* value) { if (value == NULL) { PyErr_SetString(PyExc_NotImplementedError, "deleting components is not permitted."); return -1; } PyObject* asciiString = PyUnicode_AsASCIIString(name); char* name_as_ccp = PyBytes_AsString(asciiString); size_t len = strlen(name_as_ccp); bool success = true; if (PyGLM_Number_Check(value)) { T v = PyGLM_Number_FromPyObject(value); if (len == 1) { T& x = unswizzle2_mvec((mvec*)obj, name_as_ccp[0], success); if (success) { x = v; } } else if (len == 2) { T& x = unswizzle2_mvec((mvec*)obj, name_as_ccp[0], success); T& y = unswizzle2_mvec((mvec*)obj, name_as_ccp[1], success); if (success) { x = v; y = v; } } else if (len == 3) { T& x = unswizzle2_mvec((mvec*)obj, name_as_ccp[0], success); T& y = unswizzle2_mvec((mvec*)obj, name_as_ccp[1], success); T& z = unswizzle2_mvec((mvec*)obj, name_as_ccp[2], success); if (success) { x = v; y = v; z = v; } } else if (len == 4) { T& x = unswizzle2_mvec((mvec*)obj, name_as_ccp[0], success); T& y = unswizzle2_mvec((mvec*)obj, name_as_ccp[1], success); T& z = unswizzle2_mvec((mvec*)obj, name_as_ccp[2], success); T& w = unswizzle2_mvec((mvec*)obj, name_as_ccp[3], success); if (success) { x = v; y = v; z = v; w = v; } } } else { PyGLM_PTI_Init0(value, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_PTI_GetDT(T)); if (len == 1 && PyGLM_Vec_PTI_Check0(1, T, value)) { glm::vec<1, T> v = PyGLM_Vec_PTI_Get0(1, T, value); T& x = unswizzle2_mvec((mvec*)obj, name_as_ccp[0], success); if (success) { x = v.x; } } else if (len == 2 && PyGLM_Vec_PTI_Check0(2, T, value)) { glm::vec<2, T> v = PyGLM_Vec_PTI_Get0(2, T, value); T& x = unswizzle2_mvec((mvec*)obj, name_as_ccp[0], success); T& y = unswizzle2_mvec((mvec*)obj, name_as_ccp[1], success); if (success) { x = v.x; y = v.y; } } else if (len == 3 && PyGLM_Vec_PTI_Check0(3, T, value)) { glm::vec<3, T> v = PyGLM_Vec_PTI_Get0(3, T, value); T& x = unswizzle2_mvec((mvec*)obj, name_as_ccp[0], success); T& y = unswizzle2_mvec((mvec*)obj, name_as_ccp[1], success); T& z = unswizzle2_mvec((mvec*)obj, name_as_ccp[2], success); if (success) { x = v.x; y = v.y; z = v.z; } } else if (len == 4 && PyGLM_Vec_PTI_Check0(4, T, value)) { glm::vec<4, T> v = PyGLM_Vec_PTI_Get0(4, T, value); T& x = unswizzle2_mvec((mvec*)obj, name_as_ccp[0], success); T& y = unswizzle2_mvec((mvec*)obj, name_as_ccp[1], success); T& z = unswizzle2_mvec((mvec*)obj, name_as_ccp[2], success); T& w = unswizzle2_mvec((mvec*)obj, name_as_ccp[3], success); if (success) { x = v.x; y = v.y; z = v.z; w = v.w; } } } Py_DECREF(asciiString); if (success) return 0; else return PyObject_GenericSetAttr(obj, name, value); } // iterator template static PyObject * mvecIter_new(PyTypeObject *type, PyObject *args, PyObject *) { mvec *sequence; if (!PyArg_UnpackTuple(args, "__iter__", 1, 1, &sequence)) return NULL; mvecIter *rgstate = (mvecIter *)type->tp_alloc(type, 0); if (!rgstate) return NULL; rgstate->sequence = sequence; Py_INCREF(sequence); rgstate->seq_index = 0; return (PyObject *)rgstate; } template static void mvecIter_dealloc(mvecIter *rgstate) { Py_XDECREF(rgstate->sequence); Py_TYPE(rgstate)->tp_free(rgstate); } template static PyObject * mvec2Iter_next(mvecIter<2, T> *rgstate) { if (rgstate->seq_index < 2) { switch (rgstate->seq_index++) { case 0: return PyGLM_PyObject_FromNumber(rgstate->sequence->super_type->x); case 1: return PyGLM_PyObject_FromNumber(rgstate->sequence->super_type->y); } } rgstate->seq_index = 2; Py_CLEAR(rgstate->sequence); return NULL; } template static PyObject * mvec3Iter_next(mvecIter<3, T> *rgstate) { if (rgstate->seq_index < 3) { switch (rgstate->seq_index++) { case 0: return PyGLM_PyObject_FromNumber(rgstate->sequence->super_type->x); case 1: return PyGLM_PyObject_FromNumber(rgstate->sequence->super_type->y); case 2: return PyGLM_PyObject_FromNumber(rgstate->sequence->super_type->z); } } rgstate->seq_index = 3; Py_CLEAR(rgstate->sequence); return NULL; } template static PyObject * mvec4Iter_next(mvecIter<4, T> *rgstate) { if (rgstate->seq_index < 4) { switch (rgstate->seq_index++) { case 0: return PyGLM_PyObject_FromNumber(rgstate->sequence->super_type->x); case 1: return PyGLM_PyObject_FromNumber(rgstate->sequence->super_type->y); case 2: return PyGLM_PyObject_FromNumber(rgstate->sequence->super_type->z); case 3: return PyGLM_PyObject_FromNumber(rgstate->sequence->super_type->w); } } rgstate->seq_index = 4; Py_CLEAR(rgstate->sequence); return NULL; } template static PyObject * mvec_geniter(mvec* self) { mvecIter *rgstate = (mvecIter *)(PyGLM_MVECITER_TYPE()->tp_alloc(PyGLM_MVECITER_TYPE(), 0)); if (!rgstate) return NULL; rgstate->sequence = self; Py_INCREF(self); rgstate->seq_index = 0; return (PyObject *)rgstate; } template static int mvec_getbuffer(mvec* self, Py_buffer* view, int flags) { if (view == NULL) { PyErr_SetString(PyExc_ValueError, "NULL view in getbuffer"); return -1; } view->obj = (PyObject*)self; view->buf = (void*)self->super_type; view->len = sizeof(glm::vec); view->readonly = 0; view->itemsize = sizeof(T); if (flags & PyBUF_FORMAT) { view->format = (std::is_same::value) ? const_cast("f") : \ (std::is_same ::value) ? const_cast("d") : \ (std::is_same ::value) ? const_cast("i") : \ (std::is_same ::value) ? const_cast("I") : NULL; } else { view->format = NULL; } view->ndim = 1; if (flags & PyBUF_ND) { view->shape = (Py_ssize_t*)PyMem_Malloc(sizeof(Py_ssize_t)); if (view->shape != NULL) { view->shape[0] = L; } } else { view->shape = NULL; } if ((flags & PyBUF_STRIDES) == PyBUF_STRIDES) { view->strides = &view->itemsize; } else { view->strides = NULL; } view->suboffsets = NULL; view->internal = NULL; Py_INCREF(self); return 0; } static void mvec_releasebuffer(PyObject*, Py_buffer* view) { PyMem_Free(view->shape); } template static Py_hash_t mvec_hash(mvec* self, PyObject*) { std::hash> hasher; Py_hash_t out = (Py_hash_t)hasher(*self->super_type); if (out == -1) { return -2; } return out; } template static PyObject* mvec1_to_list(mvec<1, T>* self, PyObject*) { PyObject* out = PyList_New(1); PyList_SET_ITEM(out, 0, PyGLM_PyObject_FromNumber(self->super_type->x)); return out; } template static PyObject* mvec2_to_list(mvec<2, T>* self, PyObject*) { PyObject* out = PyList_New(2); PyList_SET_ITEM(out, 0, PyGLM_PyObject_FromNumber(self->super_type->x)); PyList_SET_ITEM(out, 1, PyGLM_PyObject_FromNumber(self->super_type->y)); return out; } template static PyObject* mvec3_to_list(mvec<3, T>* self, PyObject*) { PyObject* out = PyList_New(3); PyList_SET_ITEM(out, 0, PyGLM_PyObject_FromNumber(self->super_type->x)); PyList_SET_ITEM(out, 1, PyGLM_PyObject_FromNumber(self->super_type->y)); PyList_SET_ITEM(out, 2, PyGLM_PyObject_FromNumber(self->super_type->z)); return out; } template static PyObject* mvec4_to_list(mvec<4, T>* self, PyObject*) { PyObject* out = PyList_New(4); PyList_SET_ITEM(out, 0, PyGLM_PyObject_FromNumber(self->super_type->x)); PyList_SET_ITEM(out, 1, PyGLM_PyObject_FromNumber(self->super_type->y)); PyList_SET_ITEM(out, 2, PyGLM_PyObject_FromNumber(self->super_type->z)); PyList_SET_ITEM(out, 3, PyGLM_PyObject_FromNumber(self->super_type->w)); return out; } template static PyObject* mvec1_to_tuple(mvec<1, T>* self, PyObject*) { return PyTuple_Pack(1, PyGLM_PyObject_FromNumber(self->super_type->x)); } template static PyObject* mvec2_to_tuple(mvec<2, T>* self, PyObject*) { return PyTuple_Pack(2, PyGLM_PyObject_FromNumber(self->super_type->x), PyGLM_PyObject_FromNumber(self->super_type->y)); } template static PyObject* mvec3_to_tuple(mvec<3, T>* self, PyObject*) { return PyTuple_Pack(3, PyGLM_PyObject_FromNumber(self->super_type->x), PyGLM_PyObject_FromNumber(self->super_type->y), PyGLM_PyObject_FromNumber(self->super_type->z)); } template static PyObject* mvec4_to_tuple(mvec<4, T>* self, PyObject*) { return PyTuple_Pack(4, PyGLM_PyObject_FromNumber(self->super_type->x), PyGLM_PyObject_FromNumber(self->super_type->y), PyGLM_PyObject_FromNumber(self->super_type->z), PyGLM_PyObject_FromNumber(self->super_type->w)); } template static PyObject* mvec2_setstate(mvec<2, T>* self, PyObject* state) { PyGLM_ASSERT(PyTuple_CheckExact(state) && PyTuple_GET_SIZE(state) == 2, "Invalid state. Expected a length 2 tuple."); self->super_type = (glm::vec<2, T>*)PyMem_MALLOC(sizeof(glm::vec<2, T>)); self->super_type->x = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 0)); self->super_type->y = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 1)); Py_RETURN_NONE; } template static PyObject* mvec3_setstate(mvec<3, T>* self, PyObject* state) { PyGLM_ASSERT(PyTuple_CheckExact(state) && PyTuple_GET_SIZE(state) == 3, "Invalid state. Expected a length 3 tuple."); self->super_type = (glm::vec<3, T>*)PyMem_MALLOC(sizeof(glm::vec<3, T>)); self->super_type->x = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 0)); self->super_type->y = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 1)); self->super_type->z = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 2)); Py_RETURN_NONE; } template static PyObject* mvec4_setstate(mvec<4, T>* self, PyObject* state) { PyGLM_ASSERT(PyTuple_CheckExact(state) && PyTuple_GET_SIZE(state) == 4, "Invalid state. Expected a length 4 tuple."); self->super_type = (glm::vec<4, T>*)PyMem_MALLOC(sizeof(glm::vec<4, T>)); self->super_type->x = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 0)); self->super_type->y = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 1)); self->super_type->z = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 2)); self->super_type->w = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 3)); Py_RETURN_NONE; } template static PyObject* mvec_copy(PyObject* self, PyObject*) { return pack_vec(*((mvec*)self)->super_type); } template static PyObject* mvec_deepcopy(PyObject* self, PyObject* memo) { PyObject* copy = mvec_copy(self, NULL); PyDict_SetItem(memo, PyLong_FromVoidPtr((void*)self), copy); return copy; } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/type_methods/qua.h000066400000000000000000000367051511156275200227650ustar00rootroot00000000000000#pragma once #include "../compiler_setup.h" #include "../internal_functions/all.h" #include "../types/qua/all.h" static PyObject* qua_length(PyObject*, PyObject*) { return PyLong_FromLong(4); } static void qua_dealloc(PyObject* self) { if (self != NULL) Py_TYPE(self)->tp_free(self); } template static PyObject * qua_new(PyTypeObject *type, PyObject *, PyObject *) { qua *self = (qua *)type->tp_alloc(type, 0); if (self != NULL) { //constexpr uint8_t info_type = get_type_helper_type(); //constexpr uint8_t info = 4 | (info_type << PyGLM_TYPE_INFO_VEC_TYPE_OFFSET); //self->info = info; self->super_type = glm::qua(); } return (PyObject *)self; } template static int qua_init(qua *self, PyObject *args, PyObject *kwds) { const char *kwlist[] = { "w", "x", "y", "z", NULL }; PyObject * arg1 = NULL; PyObject * arg2 = NULL; PyObject * arg3 = NULL; PyObject * arg4 = NULL; if (PyArg_ParseTupleAndKeywords(args, kwds, "|OOOO", const_cast(kwlist), &arg1, &arg2, &arg3, &arg4)) { if (arg1 == NULL) { return 0; } if (arg2 == NULL) { PyGLM_PTI_Init0(arg1, PyGLM_T_ALL | PyGLM_SHAPE_3 | PyGLM_SHAPE_3x3 | PyGLM_SHAPE_4x4 | PyGLM_PTI_GetDT(T)); if (PyGLM_Qua_PTI_Check0(T, arg1)) { self->super_type = PyGLM_Qua_PTI_Get0(T, arg1); return 0; } else if (PyGLM_Vec_PTI_Check0(3, T, arg1)) { self->super_type = glm::qua(PyGLM_Vec_PTI_Get0(3, T, arg1)); return 0; } else if (PyGLM_Mat_PTI_Check0(3, 3, T, arg1)) { self->super_type = glm::qua(PyGLM_Mat_PTI_Get0(3, 3, T, arg1)); return 0; } else if (PyGLM_Mat_PTI_Check0(4, 4, T, arg1)) { self->super_type = glm::qua(PyGLM_Mat_PTI_Get0(4, 4, T, arg1)); return 0; } PyGLM_PTI_Init0(arg1, PyGLM_T_QUA | PyGLM_DT_ALL); if (PyGLM_Qua_PTI_Check0(float, arg1)) { self->super_type = PyGLM_Qua_PTI_Get0(float, arg1); return 0; } else if (PyGLM_Qua_PTI_Check0(double, arg1)) { self->super_type = PyGLM_Qua_PTI_Get0(double, arg1); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for quat()"); return -1; } if (arg3 == NULL) { if (PyGLM_Number_Check(arg1)) { PyGLM_PTI_Init1(arg2, (get_vec_PTI_info<3, T>())); if (PyGLM_PTI_IsNone(1)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for quat()"); return -1; } glm::vec<3, T> o = PyGLM_Vec_PTI_Get1(3, T, arg2); self->super_type = glm::qua(PyGLM_Number_FromPyObject(arg1), o); return 0; } PyGLM_PTI_Init0(arg1, (get_vec_PTI_info<3, T>())); PyGLM_PTI_Init1(arg2, (get_vec_PTI_info<3, T>())); if (PyGLM_PTI_IsNone(0) || PyGLM_PTI_IsNone(1)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for quat()"); return -1; } PyGLM_Vec_PTI_Assign0(3, T); PyGLM_Vec_PTI_Assign1(3, T); self->super_type = glm::qua(o, o2); return 0; } if (arg4 == NULL) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for quat()"); return -1; } if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4)) { self->super_type = glm::qua(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3), PyGLM_Number_FromPyObject(arg4)); return 0; } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for quat()"); return -1; } // unaryfunc template static PyObject * qua_neg(qua *obj) { return pack_qua(-obj->super_type); } template static PyObject * qua_pos(qua *obj) { return pack_qua(obj->super_type); } // binaryfunc template static PyObject * qua_add(PyObject *obj1, PyObject *obj2) { PyGLM_PTI_Init0(obj1, (get_qua_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for +: 'glm.qua' and ", obj1); return NULL; } PyGLM_PTI_Init1(obj2, (get_qua_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::qua o = PyGLM_Qua_PTI_Get0(T, obj1); glm::qua o2 = PyGLM_Qua_PTI_Get1(T, obj2); // obj1 and obj2 can be interpreted as a qua return pack_qua(o + o2); } template static PyObject * qua_sub(PyObject *obj1, PyObject *obj2) { PyGLM_PTI_Init0(obj1, (get_qua_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for -: 'glm.qua' and ", obj1); return NULL; } PyGLM_PTI_Init1(obj2, (get_qua_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::qua o = PyGLM_Qua_PTI_Get0(T, obj1); glm::qua o2 = PyGLM_Qua_PTI_Get1(T, obj2); // obj1 and obj2 can be interpreted as a qua return pack_qua(o - o2); } template static PyObject * qua_mul(PyObject *obj1, PyObject *obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self return pack_qua(PyGLM_Number_FromPyObject(obj1) * ((qua*)obj2)->super_type); } PyGLM_PTI_Init0(obj1, PyGLM_T_QUA | PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_PTI_GetDT(T)); if (PyGLM_Vec_PTI_Check0(3, T, obj1)) { return pack_vec<3, T>(PyGLM_Vec_PTI_Get0(3, T, obj1) * ((qua*)obj2)->super_type); } if (PyGLM_Vec_PTI_Check0(4, T, obj1)) { return pack_vec<4, T>(PyGLM_Vec_PTI_Get0(4, T, obj1) * ((qua*)obj2)->super_type); } if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for *: 'glm.qua' and ", obj1); return NULL; } glm::qua o = PyGLM_Qua_PTI_Get0(T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_qua(o * PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init1(obj2, PyGLM_T_QUA | PyGLM_T_VEC | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_PTI_GetDT(T)); if (PyGLM_Vec_PTI_Check1(3, T, obj2)) { return pack_vec<3, T>(o * PyGLM_Vec_PTI_Get1(3, T, obj2)); } if (PyGLM_Vec_PTI_Check1(4, T, obj2)) { return pack_vec<4, T>(o * PyGLM_Vec_PTI_Get1(4, T, obj2)); } if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else (maybe it knows how to do the operation) Py_RETURN_NOTIMPLEMENTED; } glm::qua o2 = PyGLM_Qua_PTI_Get1(T, obj2); // obj1 and obj2 can be interpreted as a qua return pack_qua(o * o2); } template static PyObject * qua_div(PyObject *obj1, PyObject *obj2) { PyGLM_PTI_Init0(obj1, (get_qua_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for /: 'glm.qua' and ", obj1); return NULL; } glm::qua o = PyGLM_Qua_PTI_Get0(T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar T o2 = PyGLM_Number_FromPyObject(obj2); if (o2 == (T)0) { PyGLM_ZERO_DIVISION_ERROR_T(T); } return pack_qua(o / o2); } Py_RETURN_NOTIMPLEMENTED; } static PyObject* qua_matmul(PyObject* obj1, PyObject* obj2) { PyObject* out = PyNumber_Multiply(obj1, obj2); if (out == NULL) { PyGLM_TYPEERROR_2O("unsupported operand type(s) for @: ", obj1, obj2); } return out; } // inplace // binaryfunc template static PyObject * qua_iadd(qua *self, PyObject *obj) { qua * temp = (qua*)qua_add((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * qua_isub(qua *self, PyObject *obj) { qua * temp = (qua*)qua_sub((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * qua_imul(qua *self, PyObject *obj) { qua * temp = (qua*)qua_mul((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; if (!PyGLM_Qua_Check(T, temp)) { Py_DECREF(temp); Py_RETURN_NOTIMPLEMENTED; } self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * qua_idiv(qua *self, PyObject *obj) { qua * temp = (qua*)qua_div((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject* qua_imatmul(qua* self, PyObject* obj) { qua* temp = (qua*)qua_matmul((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; if (!PyGLM_Qua_Check(T, temp)) { Py_DECREF(temp); Py_RETURN_NOTIMPLEMENTED; } self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * qua_str(qua* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 59 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s( %12.6g, %12.6g, %12.6g, %12.6g )", name, (double)self->super_type.w, (double)self->super_type.x, (double)self->super_type.y, (double)self->super_type.z); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * qua_repr(qua* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 59 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s( %.6g, %.6g, %.6g, %.6g )", name, (double)self->super_type.w, (double)self->super_type.x, (double)self->super_type.y, (double)self->super_type.z); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } static Py_ssize_t qua_len(PyObject*) { return (Py_ssize_t)4; } template static PyObject* qua_sq_item(qua * self, Py_ssize_t index) { if (index < 0 || index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } return PyGLM_PyObject_FromNumber((T)self->super_type[(glm::length_t)index]); } template static int qua_sq_ass_item(qua * self, Py_ssize_t index, PyObject * value) { T f; if (PyGLM_Number_Check(value)) { f = PyGLM_Number_FromPyObject(value); } else { PyGLM_TYPEERROR_O("must be a real number, not ", value); return -1; } if (index < 0 || index > 3) { PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } self->super_type[(glm::length_t)index] = f; return 0; } template static int qua_contains(qua * self, PyObject * value) { if (PyGLM_Number_Check(value)) { T f = PyGLM_Number_FromPyObject(value); bool contains = false; for (int i = 0; i < 4; i++) { if (f == self->super_type[i]) { contains = true; break; } } return (int)contains; } return 0; } template static PyObject * qua_richcompare(qua * self, PyObject * other, int comp_type) { PyGLM_PTI_Init1(other, (get_qua_PTI_info())); if (PyGLM_PTI_IsNone(1)) { if (comp_type == Py_EQ) { Py_RETURN_FALSE; } if (comp_type == Py_NE) { Py_RETURN_TRUE; } Py_RETURN_NOTIMPLEMENTED; } glm::qua o2 = PyGLM_Qua_PTI_Get1(T, other); switch (comp_type) { case Py_EQ: if (self->super_type == o2) Py_RETURN_TRUE; else Py_RETURN_FALSE; break; case Py_NE: if (self->super_type != o2) Py_RETURN_TRUE; else Py_RETURN_FALSE; break; default: Py_RETURN_NOTIMPLEMENTED; } } // iterator template static PyObject * quaIter_new(PyTypeObject *type, PyObject *args, PyObject *) { qua *sequence; if (!PyArg_UnpackTuple(args, "__iter__", 1, 1, &sequence)) return NULL; quaIter *rgstate = (quaIter *)type->tp_alloc(type, 0); if (!rgstate) return NULL; rgstate->sequence = sequence; Py_INCREF(sequence); rgstate->seq_index = 0; return (PyObject *)rgstate; } template static void quaIter_dealloc(quaIter *rgstate) { Py_XDECREF(rgstate->sequence); Py_TYPE(rgstate)->tp_free(rgstate); } template static PyObject * quaIter_next(quaIter *rgstate) { if (rgstate->seq_index < 4) { return PyGLM_PyObject_FromNumber(rgstate->sequence->super_type[rgstate->seq_index++]); } rgstate->seq_index = 4; Py_CLEAR(rgstate->sequence); return NULL; } template static PyObject * qua_geniter(qua* self) { quaIter *rgstate = (quaIter *)(PyGLM_QUAITER_TYPE()->tp_alloc(PyGLM_QUAITER_TYPE(), 0)); if (!rgstate) return NULL; rgstate->sequence = self; Py_INCREF(self); rgstate->seq_index = 0; return (PyObject *)rgstate; } template static int qua_getbuffer(qua* self, Py_buffer* view, int flags) { if (view == NULL) { PyErr_SetString(PyExc_ValueError, "NULL view in getbuffer"); return -1; } view->obj = (PyObject*)self; view->buf = (void*)&self->super_type[0]; view->len = sizeof(glm::qua); view->readonly = 0; view->itemsize = sizeof(T); if (flags & PyBUF_FORMAT) { view->format = (std::is_same::value) ? const_cast("f") : \ (std::is_same ::value) ? const_cast("d") : NULL; } else { view->format = NULL; } view->ndim = 1; if (flags & PyBUF_ND) { view->shape = (Py_ssize_t*)PyMem_Malloc(sizeof(Py_ssize_t)); if (view->shape != NULL) { view->shape[0] = 4; } } else { view->shape = NULL; } if (flags & PyBUF_STRIDES) { view->strides = &view->itemsize; } else { view->strides = NULL; } view->suboffsets = NULL; view->internal = NULL; Py_INCREF(self); return 0; } static void qua_releasebuffer(PyObject*, Py_buffer* view) { PyMem_Free(view->shape); } template static PyObject* qua_from_bytes(PyObject*, PyObject* arg) { PyTypeObject* type = PyGLM_QUA_TYPE(); if (PyBytes_Check(arg) && PyBytes_GET_SIZE(arg) == ((PyGLMTypeObject*)type)->itemSize) { char* bytesAsString = PyBytes_AS_STRING(arg); qua* self = (qua *)type->tp_alloc(type, 0); self->super_type = *(glm::qua*)bytesAsString; return (PyObject*)self; } PyGLM_TYPEERROR_O("Invalid argument type for from_bytes(). Expected bytes, got ", arg); return NULL; } template static Py_hash_t qua_hash(qua* self, PyObject*) { std::hash> hasher; Py_hash_t out = (Py_hash_t)hasher(self->super_type); if (out == -1) { return -2; } return out; } template static PyObject* qua_to_list(qua* self, PyObject*) { PyObject* out = PyList_New(4); PyList_SET_ITEM(out, 0, PyGLM_PyObject_FromNumber(self->super_type.w)); PyList_SET_ITEM(out, 1, PyGLM_PyObject_FromNumber(self->super_type.x)); PyList_SET_ITEM(out, 2, PyGLM_PyObject_FromNumber(self->super_type.y)); PyList_SET_ITEM(out, 3, PyGLM_PyObject_FromNumber(self->super_type.z)); return out; } template static PyObject* qua_to_tuple(qua* self, PyObject*) { return PyTuple_Pack(4, PyGLM_PyObject_FromNumber(self->super_type.w), PyGLM_PyObject_FromNumber(self->super_type.x), PyGLM_PyObject_FromNumber(self->super_type.y), PyGLM_PyObject_FromNumber(self->super_type.z)); } template static PyObject* qua_setstate(qua* self, PyObject* state) { PyGLM_ASSERT(PyTuple_CheckExact(state) && PyTuple_GET_SIZE(state) == 4, "Invalid state. Expected a length 4 tuple."); self->super_type.w = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 0)); self->super_type.x = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 1)); self->super_type.y = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 2)); self->super_type.z = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 3)); Py_RETURN_NONE; }Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/type_methods/vec.h000066400000000000000000001764071511156275200227600ustar00rootroot00000000000000#pragma once #include "../compiler_setup.h" #include "../internal_functions/all.h" #include "../types/vec/all.h" static void vec_dealloc(PyObject* self) { Py_TYPE(self)->tp_free(self); } template static PyObject * vec_new(PyTypeObject *type, PyObject *, PyObject *) { vec *self = (vec *)type->tp_alloc(type, 0); if (self != NULL) { //constexpr uint8_t info_type = get_type_helper_type(); //constexpr uint8_t info = L | (info_type << PyGLM_TYPE_INFO_VEC_TYPE_OFFSET); //self->info = info; self->super_type = glm::vec(); } return (PyObject *)self; } template static int vec1_init(vec<1, T> *self, PyObject *args, PyObject *kwds) { const char *kwlist[] = { "x", NULL }; PyObject * arg = NULL; if (PyArg_ParseTupleAndKeywords(args, kwds, "|O", const_cast(kwlist), &arg)) { if (arg == NULL) { return 0; } if (PyGLM_Number_Check(arg)) { self->super_type = glm::vec<1, T>(PyGLM_Number_FromPyObject(arg)); return 0; } PyGLM_PTI_Init0(arg, PyGLM_T_ANY_VEC | PyGLM_SHAPE_ALL | PyGLM_PTI_GetDT(T)); if (PyGLM_Vec_PTI_Check0(1, T, arg)) { self->super_type = PyGLM_Vec_PTI_Get0(1, T, arg); return 0; } if (PyGLM_Vec_PTI_Check0(2, T, arg)) { self->super_type = PyGLM_Vec_PTI_Get0(2, T, arg); return 0; } if (PyGLM_Vec_PTI_Check0(3, T, arg)) { self->super_type = PyGLM_Vec_PTI_Get0(3, T, arg); return 0; } if (PyGLM_Vec_PTI_Check0(4, T, arg)) { self->super_type = PyGLM_Vec_PTI_Get0(4, T, arg); return 0; } PyGLM_PTI_Init0(arg, PyGLM_T_ANY_VEC | PyGLM_SHAPE_1 | PyGLM_DT_ALL); if (PyGLM_Vec_PTI_Check0(1, float, arg)) { self->super_type = PyGLM_Vec_PTI_Get0(1, float, arg); return 0; } if (PyGLM_Vec_PTI_Check0(1, double, arg)) { self->super_type = PyGLM_Vec_PTI_Get0(1, double, arg); return 0; } if (PyGLM_Vec_PTI_Check0(1, int32, arg)) { self->super_type = PyGLM_Vec_PTI_Get0(1, int32, arg); return 0; } if (PyGLM_Vec_PTI_Check0(1, uint32, arg)) { self->super_type = PyGLM_Vec_PTI_Get0(1, uint32, arg); return 0; } if (PyGLM_Vec_PTI_Check0(1, int64, arg)) { self->super_type = PyGLM_Vec_PTI_Get0(1, int64, arg); return 0; } if (PyGLM_Vec_PTI_Check0(1, uint64, arg)) { self->super_type = PyGLM_Vec_PTI_Get0(1, uint64, arg); return 0; } if (PyGLM_Vec_PTI_Check0(1, int16, arg)) { self->super_type = PyGLM_Vec_PTI_Get0(1, int16, arg); return 0; } if (PyGLM_Vec_PTI_Check0(1, uint16, arg)) { self->super_type = PyGLM_Vec_PTI_Get0(1, uint16, arg); return 0; } if (PyGLM_Vec_PTI_Check0(1, int8, arg)) { self->super_type = PyGLM_Vec_PTI_Get0(1, int8, arg); return 0; } if (PyGLM_Vec_PTI_Check0(1, uint8, arg)) { self->super_type = PyGLM_Vec_PTI_Get0(1, uint8, arg); return 0; } if (PyGLM_Vec_PTI_Check0(1, bool, arg)) { self->super_type = PyGLM_Vec_PTI_Get0(1, bool, arg); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for vec()"); return -1; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for vec()"); return -1; } template static int vec2_init(vec<2, T> *self, PyObject *args, PyObject *kwds) { const char *kwlist[] = { "x", "y", NULL }; PyObject * arg1 = NULL; PyObject * arg2 = NULL; if (PyArg_ParseTupleAndKeywords(args, kwds, "|OO", const_cast(kwlist), &arg1, &arg2)) { if (arg1 == NULL) { return 0; } if (arg2 == NULL) { if (PyGLM_Number_Check(arg1)) { self->super_type = glm::vec<2, T>(PyGLM_Number_FromPyObject(arg1)); return 0; } PyGLM_PTI_Init0(arg1, PyGLM_T_ANY_VEC | PyGLM_SHAPE_2 | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_PTI_GetDT(T)); if (PyGLM_Vec_PTI_Check0(2, T, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(2, T, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(3, T, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(3, T, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(4, T, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(4, T, arg1); return 0; } PyGLM_PTI_Init0(arg1, PyGLM_T_ANY_VEC | PyGLM_SHAPE_2 | PyGLM_DT_ALL); if (PyGLM_Vec_PTI_Check0(2, float, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(2, float, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(2, double, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(2, double, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(2, int32, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(2, int32, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(2, uint32, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(2, uint32, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(2, int64, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(2, int64, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(2, uint64, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(2, uint64, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(2, int16, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(2, int16, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(2, uint16, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(2, uint16, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(2, int8, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(2, int8, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(2, uint8, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(2, uint8, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(2, bool, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(2, bool, arg1); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for vec()"); return -1; } if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2)) { self->super_type = glm::vec<2, T>(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2)); return 0; } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for vec()"); return -1; } template static int vec3_init(vec<3, T> *self, PyObject *args, PyObject *kwds) { const char *kwlist[] = { "x", "y", "z", NULL }; PyObject * arg1 = NULL; PyObject * arg2 = NULL; PyObject * arg3 = NULL; if (PyArg_ParseTupleAndKeywords(args, kwds, "|OOO", const_cast(kwlist), &arg1, &arg2, &arg3)) { if (arg1 == NULL) { return 0; } if (arg2 == NULL) { if (PyGLM_Number_Check(arg1)) { self->super_type = glm::vec<3, T>(PyGLM_Number_FromPyObject(arg1)); return 0; } PyGLM_PTI_Init0(arg1, PyGLM_T_ANY_VEC | PyGLM_SHAPE_3 | PyGLM_SHAPE_4 | PyGLM_PTI_GetDT(T)); if (PyGLM_Vec_PTI_Check0(3, T, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(3, T, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(4, T, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(4, T, arg1); return 0; } PyGLM_PTI_Init0(arg1, PyGLM_T_ANY_VEC | PyGLM_SHAPE_3 | PyGLM_DT_ALL); if (PyGLM_Vec_PTI_Check0(3, float, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(3, float, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(3, double, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(3, double, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(3, int32, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(3, int32, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(3, uint32, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(3, uint32, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(3, int64, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(3, int64, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(3, uint64, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(3, uint64, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(3, int16, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(3, int16, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(3, uint16, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(3, uint16, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(3, int8, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(3, int8, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(3, uint8, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(3, uint8, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(3, bool, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(3, bool, arg1); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for vec3()"); return -1; } if (arg3 == NULL) { if (PyGLM_Number_Check(arg1)) { PyGLM_PTI_Init1(arg2, (get_vec_PTI_info<2, T>())); if (PyGLM_PTI_IsNone(1)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for vec3()"); return -1; } glm::vec<2, T> o = PyGLM_Vec_PTI_Get1(2, T, arg2); self->super_type = glm::vec<3, T>(PyGLM_Number_FromPyObject(arg1), o); return 0; } if (PyGLM_Number_Check(arg2)) { PyGLM_PTI_Init0(arg1, (get_vec_PTI_info<2, T>())); if (PyGLM_PTI_IsNone(0)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for vec3()"); return -1; } glm::vec<2, T> o = PyGLM_Vec_PTI_Get0(2, T, arg1); self->super_type = glm::vec<3, T>(o, PyGLM_Number_FromPyObject(arg2)); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for vec3()"); return -1; } if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { self->super_type = glm::vec<3, T>(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3)); return 0; } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for vec3()"); return -1; } template static int vec4_init(vec<4, T> *self, PyObject *args, PyObject *kwds) { const char *kwlist[] = { "x", "y", "z", "w", NULL }; PyObject * arg1 = NULL; PyObject * arg2 = NULL; PyObject * arg3 = NULL; PyObject * arg4 = NULL; if (PyArg_ParseTupleAndKeywords(args, kwds, "|OOOO", const_cast(kwlist), &arg1, &arg2, &arg3, &arg4)) { if (arg1 == NULL) { return 0; } if (arg2 == NULL) { if (PyGLM_Number_Check(arg1)) { self->super_type = glm::vec<4, T>(PyGLM_Number_FromPyObject(arg1)); return 0; } PyGLM_PTI_Init0(arg1, PyGLM_T_ANY_VEC | PyGLM_SHAPE_4 | PyGLM_PTI_GetDT(T)); if (PyGLM_Vec_PTI_Check0(4, T, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(4, T, arg1); return 0; } PyGLM_PTI_Init0(arg1, PyGLM_T_ANY_VEC | PyGLM_SHAPE_4 | PyGLM_DT_ALL); if (PyGLM_Vec_PTI_Check0(4, float, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(4, float, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(4, double, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(4, double, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(4, int32, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(4, int32, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(4, uint32, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(4, uint32, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(4, int64, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(4, int64, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(4, uint64, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(4, uint64, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(4, int16, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(4, int16, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(4, uint16, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(4, uint16, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(4, int8, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(4, int8, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(4, uint8, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(4, uint8, arg1); return 0; } if (PyGLM_Vec_PTI_Check0(4, bool, arg1)) { self->super_type = PyGLM_Vec_PTI_Get0(4, bool, arg1); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for vec4()"); return -1; } if (arg3 == NULL) { if (PyGLM_Number_Check(arg1)) { PyGLM_PTI_Init1(arg2, (get_vec_PTI_info<3, T>())); if (PyGLM_PTI_IsNone(1)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for vec4()"); return -1; } glm::vec<3, T> o = PyGLM_Vec_PTI_Get1(3, T, arg2); self->super_type = glm::vec<4, T>(PyGLM_Number_FromPyObject(arg1), o); return 0; } if (PyGLM_Number_Check(arg2)) { PyGLM_PTI_Init0(arg1, (get_vec_PTI_info<3, T>())); if (PyGLM_PTI_IsNone(0)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for vec4()"); return -1; } glm::vec<3, T> o = PyGLM_Vec_PTI_Get0(3, T, arg1); self->super_type = glm::vec<4, T>(o, PyGLM_Number_FromPyObject(arg2)); return 0; } PyGLM_PTI_Init0(arg1, (get_vec_PTI_info<2, T>())); PyGLM_PTI_Init1(arg2, (get_vec_PTI_info<2, T>())); if (PyGLM_PTI_IsNone(0) || PyGLM_PTI_IsNone(1)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for vec4()"); return -1; } PyGLM_Vec_PTI_Assign0(2, T); PyGLM_Vec_PTI_Assign1(2, T); self->super_type = glm::vec<4, T>(o, o2); return 0; } if (arg4 == NULL) { if (PyGLM_Number_Check(arg1)) { if (PyGLM_Number_Check(arg2)) { PyGLM_PTI_Init2(arg3, (get_vec_PTI_info<2, T>())); if (PyGLM_PTI_IsNone(2)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for vec4()"); return -1; } glm::vec<2, T> o = PyGLM_Vec_PTI_Get2(2, T, arg3); self->super_type = glm::vec<4, T>(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), o); return 0; } if (PyGLM_Number_Check(arg3)) { PyGLM_PTI_Init1(arg2, (get_vec_PTI_info<2, T>())); if (PyGLM_PTI_IsNone(1)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for vec4()"); return -1; } glm::vec<2, T> o = PyGLM_Vec_PTI_Get1(2, T, arg2); self->super_type = glm::vec<4, T>(PyGLM_Number_FromPyObject(arg1), o, PyGLM_Number_FromPyObject(arg3)); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for vec4()"); return -1; } if (PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3)) { PyGLM_PTI_Init0(arg1, (get_vec_PTI_info<2, T>())); if (PyGLM_PTI_IsNone(0)) { PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for vec4()"); return -1; } glm::vec<2, T> o = PyGLM_Vec_PTI_Get0(2, T, arg1); self->super_type = glm::vec<4, T>(o, PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3)); return 0; } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for vec4()"); return -1; } if (PyGLM_Number_Check(arg1) && PyGLM_Number_Check(arg2) && PyGLM_Number_Check(arg3) && PyGLM_Number_Check(arg4)) { self->super_type = glm::vec<4, T>(PyGLM_Number_FromPyObject(arg1), PyGLM_Number_FromPyObject(arg2), PyGLM_Number_FromPyObject(arg3), PyGLM_Number_FromPyObject(arg4)); return 0; } } PyErr_SetString(PyExc_TypeError, "invalid argument type(s) for vec4()"); return -1; } // unaryfunc template static PyObject * vec_neg(vec *obj) { return pack_vec(-obj->super_type); } template static PyObject* bvec_neg(vec* obj) { return pack_vec(glm::not_(obj->super_type)); } template static PyObject * vec_pos(vec *obj) { return pack_vec(obj->super_type); } template static PyObject * vec_abs(vec *obj) { return pack_vec(glm::abs(obj->super_type)); } template static PyObject* vec_invert(vec* obj) { return pack_vec(~obj->super_type); } // binaryfunc template static PyObject * vec_add(PyObject *obj1, PyObject *obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self return pack_vec(PyGLM_Number_FromPyObject(obj1) + (((vec*)obj2)->super_type)); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for +: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_vec(o + PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); // obj1 and obj2 can be interpreted as a vec return pack_vec(o + o2); } template static PyObject* bvec_add(PyObject* obj1, PyObject* obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self return pack_vec(glm::vec(PyGLM_Number_FromPyObject(obj1)) || (((vec*)obj2)->super_type)); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for +: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, bool, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_vec(o || glm::vec(PyGLM_Number_FromPyObject(obj2))); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, bool, obj2); // obj1 and obj2 can be interpreted as a vec return pack_vec(o || o2); } template static PyObject * vec_sub(PyObject *obj1, PyObject *obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self return pack_vec(PyGLM_Number_FromPyObject(obj1) - ((vec*)obj2)->super_type); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for -: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_vec(o - PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); // obj1 and obj2 can be interpreted as a vec return pack_vec(o - o2); } template static PyObject * vec_mul(PyObject *obj1, PyObject *obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self return pack_vec(PyGLM_Number_FromPyObject(obj1) * ((vec*)obj2)->super_type); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for *: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_vec(o * PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); // obj1 and obj2 can be interpreted as a vec return pack_vec(o * o2); } template static PyObject* bvec_mul(PyObject* obj1, PyObject* obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self return pack_vec(glm::vec(PyGLM_Number_FromPyObject(obj1)) && ((vec*)obj2)->super_type); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for *: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, bool, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_vec(o && glm::vec(PyGLM_Number_FromPyObject(obj2))); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, bool, obj2); // obj1 and obj2 can be interpreted as a vec return pack_vec(o && o2); } template static PyObject * vec_div(PyObject *obj1, PyObject *obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self if (!glm::all((glm::vec)(((vec*)obj2)->super_type))) { PyGLM_ZERO_DIVISION_ERROR_T(T); } return pack_vec(PyGLM_Number_FromPyObject(obj1) / ((vec*)obj2)->super_type); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for /: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar T o2 = PyGLM_Number_FromPyObject(obj2); if (o2 == (T)0) { PyGLM_ZERO_DIVISION_ERROR_T(T); } return pack_vec(o / o2); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); if (!glm::all((glm::vec)o2)) { PyGLM_ZERO_DIVISION_ERROR_T(T); } // obj1 and obj2 can be interpreted as a vec return pack_vec(o / o2); } template static glm::vec ivec_floordivmod(glm::vec a, glm::vec b) { const glm::vec u = glm::abs(a); const glm::vec v = glm::abs(b); glm::vec result; for (int i = 0; i < L; i++) { T q = u[i] / v[i]; T r = u[i] % v[i]; if ((a[i] < 0) != (b[i] < 0)) { result[i] = -(q + (r > 0)); } else { result[i] = q; } } return result; } template static PyObject * ivec_floordiv(PyObject *obj1, PyObject *obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self PyObject* temp = pack_vec(glm::vec(PyGLM_Number_FromPyObject(obj1))); PyObject* result = ivec_floordiv(temp, obj2); Py_DECREF(temp); return result; } if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar PyObject* temp = pack_vec(glm::vec(PyGLM_Number_FromPyObject(obj2))); PyObject* result = ivec_floordiv(obj1, temp); Py_DECREF(temp); return result; } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for /: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); if (!glm::all((glm::vec)o2)) { PyGLM_ZERO_DIVISION_ERROR_T(T); } // obj1 and obj2 can be interpreted as a vec return pack_vec(ivec_floordivmod(o, o2)); } template static inline glm::vec vec_mod_f(glm::vec a, glm::vec b) { return glm::mod(a, b); } template static inline glm::vec vec_mod_f(glm::vec a, glm::vec b) { return glm::mod(a, b); } template static inline glm::vec vec_mod_f(glm::vec a, glm::vec b) { glm::vec out{}; for (int i = 0; i < L; i++) { out[i] = a[i] % b[i]; } return out; } template static PyObject * vec_mod(PyObject *obj1, PyObject *obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self if (!glm::all((glm::vec)(((vec*)obj2)->super_type))) { PyGLM_ZERO_DIVISION_ERROR_T(T); } return pack_vec(vec_mod_f(glm::vec(PyGLM_Number_FromPyObject(obj1)), ((vec*)obj2)->super_type)); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for %: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar T o2 = PyGLM_Number_FromPyObject(obj2); if (o2 == (T)0) { PyGLM_ZERO_DIVISION_ERROR_T(T); } return pack_vec(vec_mod_f(o, glm::vec(o2))); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); if (!glm::all((glm::vec)o2)) { PyGLM_ZERO_DIVISION_ERROR_T(T); } // obj1 and obj2 can be interpreted as a vec return pack_vec(vec_mod_f(o, o2)); } template static PyObject * vec_floordiv(PyObject *obj1, PyObject *obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self if (!glm::all((glm::vec)(((vec*)obj2)->super_type))) { PyGLM_ZERO_DIVISION_ERROR_T(T); } return pack_vec(floor(PyGLM_Number_FromPyObject(obj1) / ((vec*)obj2)->super_type)); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for //: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar T o2 = PyGLM_Number_FromPyObject(obj2); if (o2 == (T)0) { PyGLM_ZERO_DIVISION_ERROR_T(T); } return pack_vec(floor(o / o2)); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); if (!glm::all((glm::vec)o2)) { PyGLM_ZERO_DIVISION_ERROR_T(T); } // obj1 and obj2 can be interpreted as a vec return pack_vec(floor(o / o2)); } template static PyObject * vec_divmod(PyObject * obj1, PyObject * obj2) { PyObject *arg1, *arg2; arg1 = vec_floordiv(obj1, obj2); arg2 = vec_mod(obj1, obj2); if (arg1 == NULL || arg2 == NULL) { return NULL; } PyObject* out = PyTuple_Pack(2, arg1, arg2); Py_DECREF(arg1); Py_DECREF(arg2); return out; } template static PyObject* vec_or(PyObject* obj1, PyObject* obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self return pack_vec(PyGLM_Number_FromPyObject(obj1) | (((vec*)obj2)->super_type)); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for |: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_vec(o | PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); // obj1 and obj2 can be interpreted as a vec return pack_vec(o | o2); } template static PyObject* vec_and(PyObject* obj1, PyObject* obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self return pack_vec(PyGLM_Number_FromPyObject(obj1) & (((vec*)obj2)->super_type)); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for &: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_vec(o & PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); // obj1 and obj2 can be interpreted as a vec return pack_vec(o & o2); } template static PyObject* vec_xor(PyObject* obj1, PyObject* obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self return pack_vec(PyGLM_Number_FromPyObject(obj1) ^ (((vec*)obj2)->super_type)); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for ^: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_vec(o ^ PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); // obj1 and obj2 can be interpreted as a vec return pack_vec(o ^ o2); } template static PyObject* vec_lshift(PyObject* obj1, PyObject* obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self return pack_vec(PyGLM_Number_FromPyObject(obj1) << (((vec*)obj2)->super_type)); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for <<: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_vec(o << PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); // obj1 and obj2 can be interpreted as a vec return pack_vec(o << o2); } template static PyObject* vec_rshift(PyObject* obj1, PyObject* obj2) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self return pack_vec(PyGLM_Number_FromPyObject(obj1) >> (((vec*)obj2)->super_type)); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for >>: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar return pack_vec(o >> PyGLM_Number_FromPyObject(obj2)); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is self, obj2 is something else Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); // obj1 and obj2 can be interpreted as a vec return pack_vec(o >> o2); } // ternaryfunc template static PyObject * vec_pow(PyObject * obj1, PyObject * obj2, PyObject * obj3) { if (PyGLM_Number_Check(obj1)) { // obj1 is a scalar, obj2 is self T f = PyGLM_Number_FromPyObject(obj1); if (obj3 == Py_None) { return pack_vec(glm::pow(glm::vec(f), ((vec*)obj2)->super_type)); } if (PyGLM_Number_Check(obj3)) { T f2 = PyGLM_Number_FromPyObject(obj3); return pack_vec(glm::mod(glm::pow(glm::vec(f), ((vec*)obj2)->super_type), glm::vec(f2))); } PyGLM_PTI_Init2(obj3, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(2)) { PyGLM_TYPEERROR_O("unsupported operand type(s) for **: ", obj3); return NULL; } glm::vec o3 = PyGLM_Vec_PTI_Get3(L, T, obj3); return pack_vec(glm::mod(glm::pow(glm::vec(f), ((vec*)obj2)->super_type), o3)); } PyGLM_PTI_Init0(obj1, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(0)) { // obj1 is not supported. PyGLM_TYPEERROR_O("unsupported operand type(s) for **: 'glm.vec' and ", obj1); return NULL; } glm::vec o = PyGLM_Vec_PTI_Get0(L, T, obj1); if (PyGLM_Number_Check(obj2)) { // obj1 is self, obj2 is a scalar T f = PyGLM_Number_FromPyObject(obj2); if (obj3 == Py_None) { return pack_vec(glm::pow(o, glm::vec(f))); } if (PyGLM_Number_Check(obj3)) { T f2 = PyGLM_Number_FromPyObject(obj3); return pack_vec(glm::mod(glm::pow(o, glm::vec(f)), glm::vec(f2))); } PyGLM_PTI_Init2(obj3, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(2)) { PyGLM_TYPEERROR_O("unsupported operand type(s) for **: ", obj3); return NULL; } glm::vec o3 = PyGLM_Vec_PTI_Get3(L, T, obj3); return pack_vec(glm::mod(glm::pow(o, glm::vec(f)), o3)); } PyGLM_PTI_Init1(obj2, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { // obj1 is not supported. Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, obj2); // obj1 and obj2 can be interpreted as a vec if (obj3 == Py_None) { return pack_vec(glm::pow(o, o2)); } if (PyGLM_Number_Check(obj3)) { T f2 = PyGLM_Number_FromPyObject(obj3); return pack_vec(glm::mod(glm::pow(o, o2), glm::vec(f2))); } PyGLM_PTI_Init2(obj3, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(2)) { PyGLM_TYPEERROR_O("unsupported operand type(s) for **: ", obj3); return NULL; } glm::vec o3 = PyGLM_Vec_PTI_Get2(L, T, obj3); return pack_vec(glm::mod(glm::pow(o, o2), o3)); } static PyObject* dot_(PyObject*, PyObject* args); static PyObject* vec_matmul(PyObject* obj1, PyObject* obj2) { PyObject* args = PyTuple_New(2); PyTuple_SET_ITEM(args, 0, PyGLM_INCREF(obj1)); PyTuple_SET_ITEM(args, 1, PyGLM_INCREF(obj2)); PyObject* out = dot_(NULL, args); Py_DECREF(args); if (out == NULL) { PyGLM_TYPEERROR_2O("unsupported operand type(s) for @: ", obj1, obj2); } return out; } // inplace // binaryfunc template static PyObject * vec_iadd(vec *self, PyObject *obj) { vec * temp = (vec*)vec_add((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject* bvec_iadd(vec* self, PyObject* obj) { vec* temp = (vec*)bvec_add((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * vec_isub(vec *self, PyObject *obj) { vec * temp = (vec*)vec_sub((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * vec_imul(vec *self, PyObject *obj) { vec * temp = (vec*)vec_mul((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject* bvec_imul(vec* self, PyObject* obj) { vec* temp = (vec*)bvec_mul((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * vec_idiv(vec *self, PyObject *obj) { vec * temp = (vec*)vec_div((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * vec_imod(vec *self, PyObject *obj) { vec * temp = (vec*)vec_mod((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * vec_ifloordiv(vec *self, PyObject *obj) { vec * temp = (vec*)vec_floordiv((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * ivec_ifloordiv(vec *self, PyObject *obj) { vec * temp = (vec*)ivec_floordiv((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject* vec_imatmul(vec* self, PyObject* obj) { vec* temp = (vec*)vec_matmul((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; if (!PyGLM_Vec_Check(L, T, temp)) { Py_DECREF(temp); Py_RETURN_NOTIMPLEMENTED; } self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject* vec_ilshift(vec* self, PyObject* obj) { vec* temp = (vec*)vec_lshift((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject* vec_irshift(vec* self, PyObject* obj) { vec* temp = (vec*)vec_rshift((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject* vec_iand(vec* self, PyObject* obj) { vec* temp = (vec*)vec_and((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject* vec_ixor(vec* self, PyObject* obj) { vec* temp = (vec*)vec_xor((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject* vec_ior(vec* self, PyObject* obj) { vec* temp = (vec*)vec_or((PyObject*)self, obj); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } // ternaryfunc template static PyObject * vec_ipow(vec *self, PyObject *obj1, PyObject *) // obj2 is unused. It points to an invalid address! { vec * temp = (vec*)vec_pow((PyObject*)self, obj1, Py_None); if (Py_IS_NOTIMPLEMENTED(temp)) return (PyObject*)temp; self->super_type = temp->super_type; Py_DECREF(temp); Py_INCREF(self); return (PyObject*)self; } template static PyObject * vec1_str(vec<1, T>* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 17 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s( %12.6g )", name, (double)self->super_type.x); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * vec2_str(vec<2, T>* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 31 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s( %12.6g, %12.6g )", name, (double)self->super_type.x, (double)self->super_type.y); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * vec3_str(vec<3, T>* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 45 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s( %12.6g, %12.6g, %12.6g )", name, (double)self->super_type.x, (double)self->super_type.y, (double)self->super_type.z); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * vec4_str(vec<4, T>* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 59 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s( %12.6g, %12.6g, %12.6g, %12.6g )", name, (double)self->super_type.x, (double)self->super_type.y, (double)self->super_type.z, (double)self->super_type.w); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * vec1_repr(vec<1, T>* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 17 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s( %.6g )", name, (double)self->super_type.x); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * vec2_repr(vec<2, T>* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 31 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s( %.6g, %.6g )", name, (double)self->super_type.x, (double)self->super_type.y); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * vec3_repr(vec<3, T>* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 45 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s( %.6g, %.6g, %.6g )", name, (double)self->super_type.x, (double)self->super_type.y, (double)self->super_type.z); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static PyObject * vec4_repr(vec<4, T>* self) { const char* name = PyGLM_GET_NAME(((PyObject*)self)->ob_type->tp_name); size_t required_space = 59 + strlen(name); char * out = (char*)PyMem_Malloc((required_space) * sizeof(char)); snprintf(out, required_space, "%s( %.6g, %.6g, %.6g, %.6g )", name, (double)self->super_type.x, (double)self->super_type.y, (double)self->super_type.z, (double)self->super_type.w); PyObject* po = PyUnicode_FromString(out); PyMem_Free(out); return po; } template static Py_ssize_t vec_len(PyObject *) { return (Py_ssize_t)L; } template static PyObject* vec1_sq_item(vec<1, T> * self, Py_ssize_t index) { if (index == 0) { return PyGLM_PyObject_FromNumber((T)self->super_type.x); } PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } template static PyObject* vec2_sq_item(vec<2, T> * self, Py_ssize_t index) { switch (index) { case 0: return PyGLM_PyObject_FromNumber((T)self->super_type.x); case 1: return PyGLM_PyObject_FromNumber((T)self->super_type.y); default: PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } } template static PyObject* vec3_sq_item(vec<3, T> * self, Py_ssize_t index) { switch (index) { case 0: return PyGLM_PyObject_FromNumber((T)self->super_type.x); case 1: return PyGLM_PyObject_FromNumber((T)self->super_type.y); case 2: return PyGLM_PyObject_FromNumber((T)self->super_type.z); default: PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } } template static PyObject* vec4_sq_item(vec<4, T> * self, Py_ssize_t index) { switch (index) { case 0: return PyGLM_PyObject_FromNumber((T)self->super_type.x); case 1: return PyGLM_PyObject_FromNumber((T)self->super_type.y); case 2: return PyGLM_PyObject_FromNumber((T)self->super_type.z); case 3: return PyGLM_PyObject_FromNumber((T)self->super_type.w); default: PyErr_SetString(PyExc_IndexError, "index out of range"); return NULL; } } template static int vec1_sq_ass_item(vec<1, T> * self, Py_ssize_t index, PyObject * value) { T f; if (PyGLM_Number_Check(value)) { f = PyGLM_Number_FromPyObject(value); } else { PyGLM_TYPEERROR_O("must be a real number, not ", value); return -1; } if (index == 0) { self->super_type.x = f; return 0; } PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } template static int vec2_sq_ass_item(vec<2, T> * self, Py_ssize_t index, PyObject * value) { T f; if (PyGLM_Number_Check(value)) { f = PyGLM_Number_FromPyObject(value); } else { PyGLM_TYPEERROR_O("must be a real number, not ", value); return -1; } switch (index) { case 0: self->super_type.x = f; return 0; case 1: self->super_type.y = f; return 0; default: PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } } template static int vec3_sq_ass_item(vec<3, T> * self, Py_ssize_t index, PyObject * value) { T f; if (PyGLM_Number_Check(value)) { f = PyGLM_Number_FromPyObject(value); } else { PyGLM_TYPEERROR_O("must be a real number, not ", value); return -1; } switch (index) { case 0: self->super_type.x = f; return 0; case 1: self->super_type.y = f; return 0; case 2: self->super_type.z = f; return 0; default: PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } } template static int vec4_sq_ass_item(vec<4, T> * self, Py_ssize_t index, PyObject * value) { T f; if (PyGLM_Number_Check(value)) { f = PyGLM_Number_FromPyObject(value); } else { PyGLM_TYPEERROR_O("must be a real number, not ", value); return -1; } switch (index) { case 0: self->super_type.x = f; return 0; case 1: self->super_type.y = f; return 0; case 2: self->super_type.z = f; return 0; case 3: self->super_type.w = f; return 0; default: PyErr_SetString(PyExc_IndexError, "index out of range"); return -1; } } template static int vec_contains(vec * self, PyObject * value) { if (PyGLM_Number_Check(value)) { T f = PyGLM_Number_FromPyObject(value); bool contains = false; for (int i = 0; i < L; i++) { if (f == self->super_type[i]) { contains = true; break; } } return (int)contains; } return 0; } template static PyObject * vec_richcompare(vec * self, PyObject * other, int comp_type) { PyGLM_PTI_Init1(other, (get_vec_PTI_info())); if (PyGLM_PTI_IsNone(1)) { if (comp_type == Py_EQ) { Py_RETURN_FALSE; } if (comp_type == Py_NE) { Py_RETURN_TRUE; } Py_RETURN_NOTIMPLEMENTED; } glm::vec o2 = PyGLM_Vec_PTI_Get1(L, T, other); switch (comp_type) { case Py_EQ: if (self->super_type == o2) Py_RETURN_TRUE; else Py_RETURN_FALSE; break; case Py_NE: if (self->super_type != o2) Py_RETURN_TRUE; else Py_RETURN_FALSE; break; case Py_LT: return pack_vec(glm::lessThan(self->super_type, o2)); break; case Py_LE: return pack_vec(glm::lessThanEqual(self->super_type, o2)); break; case Py_GT: return pack_vec(glm::greaterThan(self->super_type, o2)); break; case Py_GE: return pack_vec(glm::greaterThanEqual(self->super_type, o2)); break; default: Py_RETURN_NOTIMPLEMENTED; } } template static bool unswizzle_vec(vec<1, T> * self, char c, T& out) { if (c == 'x' || c == 'r' || c == 's') { out = self->super_type.x; return true; } return false; } template static bool unswizzle_vec(vec<2, T> * self, char c, T& out) { if (c == 'x' || c == 'r' || c == 's') { out = self->super_type.x; return true; } if (c == 'y' || c == 'g' || c == 't') { out = self->super_type.y; return true; } return false; } template static bool unswizzle_vec(vec<3, T> * self, char c, T& out) { if (c == 'x' || c == 'r' || c == 's') { out = self->super_type.x; return true; } if (c == 'y' || c == 'g' || c == 't') { out = self->super_type.y; return true; } if (c == 'z' || c == 'b' || c == 'q') { out = self->super_type.z; return true; } return false; } template static bool unswizzle_vec(vec<4, T> * self, char c, T& out) { if (c == 'x' || c == 'r' || c == 's') { out = self->super_type.x; return true; } if (c == 'y' || c == 'g' || c == 't') { out = self->super_type.y; return true; } if (c == 'z' || c == 'b' || c == 'q') { out = self->super_type.z; return true; } if (c == 'w' || c == 'a' || c == 'p') { out = self->super_type.w; return true; } return false; } template static T& unswizzle2_vec(vec<1, T> * self, char c, bool& success) { if (c == 'x' || c == 'r' || c == 's') { success = success && true; return self->super_type.x; } success = false; return self->super_type.x; } template static T& unswizzle2_vec(vec<2, T> * self, char c, bool& success) { if (c == 'x' || c == 'r' || c == 's') { success = success && true; return self->super_type.x; } if (c == 'y' || c == 'g' || c == 't') { success = success && true; return self->super_type.y; } success = false; return self->super_type.x; } template static T& unswizzle2_vec(vec<3, T> * self, char c, bool& success) { if (c == 'x' || c == 'r' || c == 's') { success = success && true; return self->super_type.x; } if (c == 'y' || c == 'g' || c == 't') { success = success && true; return self->super_type.y; } if (c == 'z' || c == 'b' || c == 'q') { success = success && true; return self->super_type.z; } success = false; return self->super_type.x; } template static T& unswizzle2_vec(vec<4, T> * self, char c, bool& success) { if (c == 'x' || c == 'r' || c == 's') { success = success && true; return self->super_type.x; } if (c == 'y' || c == 'g' || c == 't') { success = success && true; return self->super_type.y; } if (c == 'z' || c == 'b' || c == 'q') { success = success && true; return self->super_type.z; } if (c == 'w' || c == 'a' || c == 'p') { success = success && true; return self->super_type.w; } success = false; return self->super_type.x; } //template //static bool unswizzle_vec(vec* self, char c, T& out) { // if (L == 2) { // return unswizzle_vec2(self, c, out); // } // if (L == 3) { // return unswizzle_vec3(self, c, out); // } // return unswizzle_vec4(self, c, out); //} template static PyObject * vec_getattr(PyObject * obj, PyObject * name) { Py_ssize_t len; char* name_as_ccp; PyObject* asciiString = PyUnicode_AsASCIIString(name); if (asciiString == NULL) return NULL; if (PyBytes_AsStringAndSize(asciiString, &name_as_ccp, &len) != 0) { Py_DECREF(asciiString); return NULL; } PyObject * result = NULL; if (len >= 4 && name_as_ccp[0] == '_' && name_as_ccp[1] == '_' && name_as_ccp[len - 1] == '_' && name_as_ccp[len - 2] == '_') { result = PyObject_GenericGetAttr(obj, name); } else if (len == 1) { T x; if (unswizzle_vec((vec *)obj, name_as_ccp[0], x)) { result = PyGLM_PyObject_FromNumber((T)x); } } else if (len == 2) { T x; T y; if (unswizzle_vec((vec *)obj, name_as_ccp[0], x) && unswizzle_vec((vec *)obj, name_as_ccp[1], y)) { result = pack_vec<2, T>(glm::vec<2, T>(x, y)); } } else if (len == 3) { T x; T y; T z; if (unswizzle_vec((vec *)obj, name_as_ccp[0], x) && unswizzle_vec((vec *)obj, name_as_ccp[1], y) && unswizzle_vec((vec *)obj, name_as_ccp[2], z)) { result = pack_vec<3, T>(glm::vec<3, T>(x, y, z)); } } else if (len == 4) { T x; T y; T z; T w; if (unswizzle_vec((vec *)obj, name_as_ccp[0], x) && unswizzle_vec((vec *)obj, name_as_ccp[1], y) && unswizzle_vec((vec *)obj, name_as_ccp[2], z) && unswizzle_vec((vec *)obj, name_as_ccp[3], w)) { result = pack_vec<4, T>(glm::vec<4, T>(x, y, z, w)); } } Py_DECREF(asciiString); if (result == NULL) return PyObject_GenericGetAttr(obj, name); else return result; } template static int vec_setattr(PyObject * obj, PyObject * name, PyObject* value) { if (value == NULL) { PyErr_SetString(PyExc_NotImplementedError, "deleting components is not permitted."); return -1; } PyObject* asciiString = PyUnicode_AsASCIIString(name); char* name_as_ccp = PyBytes_AsString(asciiString); size_t len = strlen(name_as_ccp); bool success = true; if (PyGLM_Number_Check(value)) { T v = PyGLM_Number_FromPyObject(value); if (len == 1) { T& x = unswizzle2_vec((vec*)obj, name_as_ccp[0], success); if (success) { x = v; } } else if (len == 2) { T& x = unswizzle2_vec((vec*)obj, name_as_ccp[0], success); T& y = unswizzle2_vec((vec*)obj, name_as_ccp[1], success); if (success) { x = v; y = v; } } else if (len == 3) { T& x = unswizzle2_vec((vec*)obj, name_as_ccp[0], success); T& y = unswizzle2_vec((vec*)obj, name_as_ccp[1], success); T& z = unswizzle2_vec((vec*)obj, name_as_ccp[2], success); if (success) { x = v; y = v; z = v; } } else if (len == 4) { T& x = unswizzle2_vec((vec*)obj, name_as_ccp[0], success); T& y = unswizzle2_vec((vec*)obj, name_as_ccp[1], success); T& z = unswizzle2_vec((vec*)obj, name_as_ccp[2], success); T& w = unswizzle2_vec((vec*)obj, name_as_ccp[3], success); if (success) { x = v; y = v; z = v; w = v; } } } else { PyGLM_PTI_Init0(value, PyGLM_T_VEC | PyGLM_SHAPE_ALL | PyGLM_PTI_GetDT(T)); if (len == 1 && PyGLM_Vec_PTI_Check0(1, T, value)) { glm::vec<1, T> v = PyGLM_Vec_PTI_Get0(1, T, value); T& x = unswizzle2_vec((vec*)obj, name_as_ccp[0], success); if (success) { x = v.x; } } else if (len == 2 && PyGLM_Vec_PTI_Check0(2, T, value)) { glm::vec<2, T> v = PyGLM_Vec_PTI_Get0(2, T, value); T& x = unswizzle2_vec((vec*)obj, name_as_ccp[0], success); T& y = unswizzle2_vec((vec*)obj, name_as_ccp[1], success); if (success) { x = v.x; y = v.y; } } else if (len == 3 && PyGLM_Vec_PTI_Check0(3, T, value)) { glm::vec<3, T> v = PyGLM_Vec_PTI_Get0(3, T, value); T& x = unswizzle2_vec((vec*)obj, name_as_ccp[0], success); T& y = unswizzle2_vec((vec*)obj, name_as_ccp[1], success); T& z = unswizzle2_vec((vec*)obj, name_as_ccp[2], success); if (success) { x = v.x; y = v.y; z = v.z; } } else if (len == 4 && PyGLM_Vec_PTI_Check0(4, T, value)) { glm::vec<4, T> v = PyGLM_Vec_PTI_Get0(4, T, value); T& x = unswizzle2_vec((vec*)obj, name_as_ccp[0], success); T& y = unswizzle2_vec((vec*)obj, name_as_ccp[1], success); T& z = unswizzle2_vec((vec*)obj, name_as_ccp[2], success); T& w = unswizzle2_vec((vec*)obj, name_as_ccp[3], success); if (success) { x = v.x; y = v.y; z = v.z; w = v.w; } } } Py_DECREF(asciiString); if (success) return 0; else return PyObject_GenericSetAttr(obj, name, value); } // iterator template static PyObject * vecIter_new(PyTypeObject *type, PyObject *args, PyObject *) { vec *sequence; if (!PyArg_UnpackTuple(args, "__iter__", 1, 1, &sequence)) return NULL; vecIter *rgstate = (vecIter *)type->tp_alloc(type, 0); if (!rgstate) return NULL; rgstate->sequence = sequence; Py_INCREF(sequence); rgstate->seq_index = 0; return (PyObject *)rgstate; } template static void vecIter_dealloc(vecIter *rgstate) { Py_XDECREF(rgstate->sequence); Py_TYPE(rgstate)->tp_free(rgstate); } template static PyObject * vec1Iter_next(vecIter<1, T> *rgstate) { if (rgstate->seq_index++ == 0) { return PyGLM_PyObject_FromNumber(rgstate->sequence->super_type.x); } rgstate->seq_index = 1; Py_CLEAR(rgstate->sequence); return NULL; } template static PyObject * vec2Iter_next(vecIter<2, T> *rgstate) { if (rgstate->seq_index < 2) { switch (rgstate->seq_index++) { case 0: return PyGLM_PyObject_FromNumber(rgstate->sequence->super_type.x); case 1: return PyGLM_PyObject_FromNumber(rgstate->sequence->super_type.y); } } rgstate->seq_index = 2; Py_CLEAR(rgstate->sequence); return NULL; } template static PyObject * vec3Iter_next(vecIter<3, T> *rgstate) { if (rgstate->seq_index < 3) { switch (rgstate->seq_index++) { case 0: return PyGLM_PyObject_FromNumber(rgstate->sequence->super_type.x); case 1: return PyGLM_PyObject_FromNumber(rgstate->sequence->super_type.y); case 2: return PyGLM_PyObject_FromNumber(rgstate->sequence->super_type.z); } } rgstate->seq_index = 3; Py_CLEAR(rgstate->sequence); return NULL; } template static PyObject * vec4Iter_next(vecIter<4, T> *rgstate) { if (rgstate->seq_index < 4) { switch (rgstate->seq_index++) { case 0: return PyGLM_PyObject_FromNumber(rgstate->sequence->super_type.x); case 1: return PyGLM_PyObject_FromNumber(rgstate->sequence->super_type.y); case 2: return PyGLM_PyObject_FromNumber(rgstate->sequence->super_type.z); case 3: return PyGLM_PyObject_FromNumber(rgstate->sequence->super_type.w); } } rgstate->seq_index = 4; Py_CLEAR(rgstate->sequence); return NULL; } template static PyObject * vec_geniter(vec* self) { vecIter *rgstate = (vecIter *)(PyGLM_VECITER_TYPE()->tp_alloc(PyGLM_VECITER_TYPE(), 0)); if (!rgstate) return NULL; rgstate->sequence = self; Py_INCREF(self); rgstate->seq_index = 0; return (PyObject *)rgstate; } template static int vec_getbuffer(vec* self, Py_buffer* view, int flags) { if (view == NULL) { PyErr_SetString(PyExc_ValueError, "NULL view in getbuffer"); return -1; } view->obj = (PyObject*)self; view->buf = (void*)&self->super_type[0]; view->len = sizeof(glm::vec); view->readonly = 0; view->itemsize = sizeof(T); if (flags & PyBUF_FORMAT) { view->format = (std::is_same::value) ? const_cast("f") : \ (std::is_same ::value) ? const_cast("d") : \ (std::is_same ::value) ? const_cast("b") : \ (std::is_same ::value) ? const_cast("B") : \ (std::is_same ::value) ? const_cast("h") : \ (std::is_same ::value) ? const_cast("H") : \ (std::is_same ::value) ? const_cast("i") : \ (std::is_same ::value) ? const_cast("I") : \ (std::is_same ::value) ? const_cast("q") : \ (std::is_same ::value) ? const_cast("Q") : \ (std::is_same ::value) ? const_cast("?") : NULL; } else { view->format = NULL; } view->ndim = 1; if (flags & PyBUF_ND) { view->shape = (Py_ssize_t*)PyMem_Malloc(sizeof(Py_ssize_t)); if (view->shape != NULL) { view->shape[0] = L; } } else { view->shape = NULL; } if ((flags & PyBUF_STRIDES) == PyBUF_STRIDES) { view->strides = &view->itemsize; } else { view->strides = NULL; } view->suboffsets = NULL; view->internal = NULL; Py_INCREF(self); return 0; } static void vec_releasebuffer(PyObject*, Py_buffer* view) { PyMem_Free(view->shape); } template static PyObject* vec_from_bytes(PyObject*, PyObject* arg) { PyTypeObject* type = PyGLM_VEC_TYPE(); if (PyBytes_Check(arg) && PyBytes_GET_SIZE(arg) == ((PyGLMTypeObject*)type)->itemSize) { char* bytesAsString = PyBytes_AS_STRING(arg); vec* self = (vec *)type->tp_alloc(type, 0); self->super_type = *(glm::vec*)bytesAsString; return (PyObject*)self; } PyGLM_TYPEERROR_O("Invalid argument type for from_bytes(). Expected bytes, got ", arg); return NULL; } template static Py_hash_t vec_hash(vec* self, PyObject*) { std::hash> hasher; Py_hash_t out = (Py_hash_t)hasher(self->super_type); if (out == -1) { return -2; } return out; } template static PyObject* vec1_to_list(vec<1, T>* self, PyObject*) { PyObject* out = PyList_New(1); PyList_SET_ITEM(out, 0, PyGLM_PyObject_FromNumber(self->super_type.x)); return out; } template static PyObject* vec2_to_list(vec<2, T>* self, PyObject*) { PyObject* out = PyList_New(2); PyList_SET_ITEM(out, 0, PyGLM_PyObject_FromNumber(self->super_type.x)); PyList_SET_ITEM(out, 1, PyGLM_PyObject_FromNumber(self->super_type.y)); return out; } template static PyObject* vec3_to_list(vec<3, T>* self, PyObject*) { PyObject* out = PyList_New(3); PyList_SET_ITEM(out, 0, PyGLM_PyObject_FromNumber(self->super_type.x)); PyList_SET_ITEM(out, 1, PyGLM_PyObject_FromNumber(self->super_type.y)); PyList_SET_ITEM(out, 2, PyGLM_PyObject_FromNumber(self->super_type.z)); return out; } template static PyObject* vec4_to_list(vec<4, T>* self, PyObject*) { PyObject* out = PyList_New(4); PyList_SET_ITEM(out, 0, PyGLM_PyObject_FromNumber(self->super_type.x)); PyList_SET_ITEM(out, 1, PyGLM_PyObject_FromNumber(self->super_type.y)); PyList_SET_ITEM(out, 2, PyGLM_PyObject_FromNumber(self->super_type.z)); PyList_SET_ITEM(out, 3, PyGLM_PyObject_FromNumber(self->super_type.w)); return out; } template static PyObject* vec1_to_tuple(vec<1, T>* self, PyObject*) { return PyTuple_Pack(1, PyGLM_PyObject_FromNumber(self->super_type.x)); } template static PyObject* vec2_to_tuple(vec<2, T>* self, PyObject*) { return PyTuple_Pack(2, PyGLM_PyObject_FromNumber(self->super_type.x), PyGLM_PyObject_FromNumber(self->super_type.y)); } template static PyObject* vec3_to_tuple(vec<3, T>* self, PyObject*) { return PyTuple_Pack(3, PyGLM_PyObject_FromNumber(self->super_type.x), PyGLM_PyObject_FromNumber(self->super_type.y), PyGLM_PyObject_FromNumber(self->super_type.z)); } template static PyObject* vec4_to_tuple(vec<4, T>* self, PyObject*) { return PyTuple_Pack(4, PyGLM_PyObject_FromNumber(self->super_type.x), PyGLM_PyObject_FromNumber(self->super_type.y), PyGLM_PyObject_FromNumber(self->super_type.z), PyGLM_PyObject_FromNumber(self->super_type.w)); } template static PyObject* vec1_setstate(vec<1, T>* self, PyObject* state) { PyGLM_ASSERT(PyTuple_CheckExact(state) && PyTuple_GET_SIZE(state) == 1, "Invalid state. Expected a length 1 tuple."); self->super_type.x = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 0)); Py_RETURN_NONE; } template static PyObject* vec2_setstate(vec<2, T>* self, PyObject* state) { PyGLM_ASSERT(PyTuple_CheckExact(state) && PyTuple_GET_SIZE(state) == 2, "Invalid state. Expected a length 2 tuple."); self->super_type.x = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 0)); self->super_type.y = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 1)); Py_RETURN_NONE; } template static PyObject* vec3_setstate(vec<3, T>* self, PyObject* state) { PyGLM_ASSERT(PyTuple_CheckExact(state) && PyTuple_GET_SIZE(state) == 3, "Invalid state. Expected a length 3 tuple."); self->super_type.x = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 0)); self->super_type.y = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 1)); self->super_type.z = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 2)); Py_RETURN_NONE; } template static PyObject* vec4_setstate(vec<4, T>* self, PyObject* state) { PyGLM_ASSERT(PyTuple_CheckExact(state) && PyTuple_GET_SIZE(state) == 4, "Invalid state. Expected a length 4 tuple."); self->super_type.x = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 0)); self->super_type.y = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 1)); self->super_type.z = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 2)); self->super_type.w = PyGLM_Number_FromPyObject(PyTuple_GET_ITEM(state, 3)); Py_RETURN_NONE; } Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/000077500000000000000000000000001511156275200204535ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/all.h000066400000000000000000000002741511156275200213770ustar00rootroot00000000000000#pragma once #include "types.h" #include "forward_declarations.h" #include "mat/all.h" #include "vec/all.h" #include "mvec/all.h" #include "qua/all.h" #include "glmArray/glmArray.h"Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/forward_declarations.h000066400000000000000000000006471511156275200250270ustar00rootroot00000000000000#pragma once #include "types.h" PyDoc_STRVAR(generic_copy_docstr, "Create a copy of this instance" ); static PyObject* generic_copy(PyObject* self, PyObject*); PyDoc_STRVAR(generic_deepcopy_docstr, "Create a (deep)copy of this instance" ); static PyObject* generic_deepcopy(PyObject* self, PyObject* memo); static PyObject* generic_to_bytes(PyObject* self, PyObject*); static PyObject* generic_id(PyObject* self); Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/glmArray/000077500000000000000000000000001511156275200222315ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/glmArray/forward_declarations.h000066400000000000000000000176651511156275200266150ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static int glmArray_getbuffer(glmArray* self, Py_buffer* view, int flags); static void glmArray_releasebuffer(PyObject* self, Py_buffer* view); PyDoc_STRVAR(glmArray_to_bytes_docstr, "Return the data of this array as a bytes string" ); static PyObject* glmArray_to_bytes(glmArray* self, PyObject*); PyDoc_STRVAR(glmArray_from_bytes_docstr, "from_bytes(bytes_object: bytes, type_object: type = uint8) -> array\n" " Creates an array with the data given by `bytes_object`, using `type_object` as the element type.\n" " (The resulting array is a reference copy)" ); static PyObject* glmArray_from_bytes(PyObject*, PyObject* args); PyDoc_STRVAR(glmArray_reinterpret_cast_docstr, "reinterpret_cast(type_object: type) -> array\n" " Creates an array with the same data as this one, using `type_object` as the new element type.\n" " (The resulting array is a reference copy)" ); static PyObject* glmArray_reinterpret_cast(glmArray* self, PyObject* arg); PyDoc_STRVAR(glmArray_to_list_docstr, "Return the elements of this array as a list" ); static PyObject* glmArray_to_list(glmArray* self, PyObject*); PyDoc_STRVAR(glmArray_to_tuple_docstr, "Return the elements of this array as a tuple" ); static PyObject* glmArray_to_tuple(glmArray* self, PyObject*); PyDoc_STRVAR(glmArray_split_components_docstr, "Splits each element of this array into it's components.\n" "Returns one or multiple arrays wrapped in a tuple.\n" "For vector, quaternion and matrix arrays only!" ); static PyObject* glmArray_split_components(glmArray* self, PyObject*); PyDoc_STRVAR(glmArray_reduce_docstr, "reduce(function[, initializer])\n" " Applies the binary `function` to this array's elements cumulatively, reducing the array to\n" " a single value. If initializer is set, it is placed before the first element.\n" " Example: array.from_numbers(int32, 1, 2, 3, 4).reduce(add) -> (((1+2)+3)+4)\n" " Or with an initializer: arr.reduce(add, 6) -> ((((6+1)+2)+3)+4)" ); static PyObject* glmArray_reduce(glmArray* self, PyObject* args); PyDoc_STRVAR(glmArray_from_numbers_docstr, "from_numbers(data_type: type, *numbers: number) -> array\n" " Creates an array of numbers, using the specified data type and `numbers` as the values.\n" " `data_type` can be one of the supported ctypes types (e.g. `glm.float32`, `glm.uint8`, ...)" ); static PyObject* glmArray_from_numbers(PyObject*, PyObject* args); PyDoc_STRVAR(glmArray_as_reference_docstr, "as_reference(other) -> array\n" " Creates an array from another array (or a compatible buffer) as a reference instead of a copy." ); static PyObject* glmArray_as_reference(PyObject*, PyObject* args); PyDoc_STRVAR(glmArray_zeros_docstr, "zeros(count: int, data_type: type) -> array\n" " Creates an array of 0s using the specified data type.\n" " `data_type` can be any supported array data type:\n" " (`glm.vec3`, `glm.imat4x4`, `glm.int32`, `glm.u8vec2`, ...)" ); static PyObject* glmArray_zeros(PyObject*, PyObject* args); static PyObject* glmArray_getPtr(glmArray* self, void*); static PyObject* glmArray_getDtype(glmArray* self, void*); static PyObject* glmArray_getCtype(glmArray* self, void*); static Py_ssize_t glmArray_len(glmArray* self); PyDoc_STRVAR(glmArray_concat_docstr, "concat(other: array) -> array\n" " Appends the `other` array to this array and returns the result.\n" " The arrays need to have the same `element_type`." ); static PyObject* glmArray_concat(PyObject* obj1, PyObject* obj2); PyDoc_STRVAR(glmArray_repeat_docstr, "repeat(count: int) -> array\n" " Repeats the array `count` times and returns the results." ); static PyObject* glmArray_repeat(glmArray* self, PyObject* count); PyDoc_STRVAR(glmArray_inplace_concat_docstr, "iconcat(other: array) -> array\n" " Appends the `other` array to this array in-place.\n" " The arrays need to have the same `element_type`." ); static PyObject* glmArray_inplace_concat(glmArray* self, PyObject* obj); PyDoc_STRVAR(glmArray_inplace_repeat_docstr, "irepeat(count: int) -> array\n" " Repeats the array `count` times in-place." ); static PyObject* glmArray_inplace_repeat(glmArray* self, PyObject* count); static PyObject* glmArray_sq_item(glmArray * self, Py_ssize_t index); static int glmArray_sq_ass_item(glmArray * self, Py_ssize_t index, PyObject * value); static PyObject* glmArray_mp_subscript(glmArray* self, PyObject* key); static int glmArray_mp_ass_subscript(glmArray* self, PyObject* key, PyObject* value); static int glmArray_contains(glmArray * self, PyObject * value); static void glmArray_dealloc(glmArray* self); static PyObject* glmArray_str(glmArray* self); static PyObject* glmArray_repr(glmArray* self); static PyObject* glmArray_richcompare(glmArray* self, PyObject* other, int comp_type); static PyObject* glmArray_geniter(glmArray* self); static int glmArray_init(glmArray *self, PyObject *args, PyObject *kwds); static PyObject* glmArray_new(PyTypeObject *type, PyObject *args, PyObject *kwds); static void glmArrayIter_dealloc(glmArrayIter *rgstate); static PyObject* glmArrayIter_next(glmArrayIter *rgstate); static PyObject* glmArrayIter_new(PyTypeObject *type, PyObject *args, PyObject *kwargs); static Py_hash_t array_hash(glmArray* self, PyObject*); PyDoc_STRVAR(glmArray_getstate_docstr, "Returns a picklable state of this object" ); static PyObject* glmArray_getstate(glmArray* self, PyObject*); PyDoc_STRVAR(glmArray_setstate_docstr, "Restores a state that was previously acquired" ); static PyObject* glmArray_setstate(glmArray* self, PyObject* state); PyDoc_STRVAR(glmArray_class_getitem_docstr, "See PEP 585" ); PyDoc_STRVAR(glmArray_filter_docstr, "filter(func: callable) -> array\n" " Filters this array with the given funtion and returns the resulting array.\n" " The `func` is called with every element of the array and should return `True` for the\n" " elements to keep and `False` for the elements to discard." ); static PyObject* glmArray_filter(glmArray* self, PyObject* func); PyDoc_STRVAR(glmArray_map_docstr, "map(func: callable[, *args, ctype: type = None]) -> array\n" " Maps all elements of this array to the result of `func`.\n" " i.e. `func` is called with every element of the source array and the return value is used\n" " to construct the new array. Return values of `None` are discarded and when the return value\n" " is a tuple, the elements of the tuple are all added to the target array.\n" " `ctype` can be used to specify which ctypes type to use when `func` outputs numbers." ); static PyObject* glmArray_map(glmArray* self, PyObject* func, PyObject* kwargs); PyDoc_STRVAR(glmArray_sort_docstr, "sort(func: callable) -> array\n" " Sorts all elements in the array using the supplied ordering function.\n" " `func` will be called with two elements from the array and should return `-1` if\n" " the first argument is ordered before the second argument, `0` if they are ordered at the\n" " same position and `1` if the first argument is ordered after the second (e.g. `glm.cmp`).\n" " `sort` uses a quicksort or insertion sort." ); static PyObject* glmArray_sort(glmArray* self, PyObject* func); static PyObject* glmArray_add(PyObject* obj1, PyObject* obj2); static PyObject* glmArray_sub(PyObject* obj1, PyObject* obj2); static PyObject* glmArray_mul(PyObject* obj1, PyObject* obj2); static PyObject* glmArray_mod(PyObject* obj1, PyObject* obj2); static PyObject* glmArray_pow(PyObject* obj1, PyObject* obj2, PyObject* obj3); static PyObject* glmArray_neg(glmArray* arr); static PyObject* glmArray_pos(glmArray* arr); static PyObject* glmArray_abs(glmArray* arr); static PyObject* glmArray_inv(glmArray* arr); static PyObject* glmArray_lshift(PyObject* obj1, PyObject* obj2); static PyObject* glmArray_rshift(PyObject* obj1, PyObject* obj2); static PyObject* glmArray_and(PyObject* obj1, PyObject* obj2); static PyObject* glmArray_xor(PyObject* obj1, PyObject* obj2); static PyObject* glmArray_or(PyObject* obj1, PyObject* obj2); static PyObject* glmArray_div(PyObject* obj1, PyObject* obj2);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/glmArray/glmArray.h000066400000000000000000000214341511156275200241640ustar00rootroot00000000000000#pragma once #include "forward_declarations.h" #define T_PTR_AS_NUM ((sizeof(void*) == sizeof(unsigned long long)) ? T_ULONGLONG : (sizeof(void*) == sizeof(unsigned long)) ? T_ULONG : (sizeof(void*) == sizeof(unsigned int)) ? T_UINT : T_PYSSIZET) static PyMemberDef glmArray_members[] = { { (char*)"nbytes", T_PYSSIZET, offsetof(glmArray, nBytes), 1, (char*)"Total combined bytecount of all elements" }, { (char*)"typecode", T_CHAR, offsetof(glmArray, format), 1, (char*)"The typecode character of the underlying format" }, { (char*)"element_type", T_OBJECT, offsetof(glmArray, subtype), 1, (char*)"Type class of the contained elements" }, { (char*)"itemsize", T_PYSSIZET, offsetof(glmArray, itemSize), 1, (char*)"The size of one array item in bytes " }, { (char*)"dt_size", T_PYSSIZET, offsetof(glmArray, dtSize), 1, (char*)"The size of each single component of the elements in bytes (size of data type)" }, { (char*)"address", T_PTR_AS_NUM, offsetof(glmArray, data), 1, (char*)"The memory address where this array stores it's data" }, { (char*)"length", T_PYSSIZET, offsetof(glmArray, itemCount), 1, (char*)"The count of elements contained by this array" }, { (char*)"readonly", T_BOOL, offsetof(glmArray, readonly), 1, (char*)"Whether or not the array is read-only" }, { (char*)"reference", T_OBJECT, offsetof(glmArray, reference), 1, (char*)"The reference to the array owning the data (if any)" }, { NULL } /* Sentinel */ }; static PyGetSetDef glmArray_getSet[] = { { (char*)"ptr", (getter)glmArray_getPtr, NULL, (char*)"A ctypes pointer that points to the content of this array", NULL }, { (char*)"dtype", (getter)glmArray_getDtype, NULL, (char*)"A numpy-like data type string", NULL }, { (char*)"ctype", (getter)glmArray_getCtype, NULL, (char*)"The respective ctypes data type", NULL }, { NULL } /* Sentinel */ }; static PyMethodDef glmArray_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, generic_copy_docstr }, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, generic_deepcopy_docstr }, { "__getstate__", (PyCFunction)glmArray_getstate, METH_NOARGS, glmArray_getstate_docstr }, { "__setstate__", (PyCFunction)glmArray_setstate, METH_O, glmArray_setstate_docstr }, #if PY_MAJOR_VERSION >= 3 && PY_MINOR_VERSION >= 9 { "__class_getitem__", Py_GenericAlias, METH_O | METH_CLASS, glmArray_class_getitem_docstr }, #endif { "to_bytes", (PyCFunction)glmArray_to_bytes, METH_NOARGS, glmArray_to_bytes_docstr }, { "from_bytes", (PyCFunction)glmArray_from_bytes, METH_VARARGS | METH_STATIC, glmArray_from_bytes_docstr }, { "reinterpret_cast",(PyCFunction)glmArray_reinterpret_cast,METH_O, glmArray_reinterpret_cast_docstr }, { "to_list", (PyCFunction)glmArray_to_list, METH_NOARGS, glmArray_to_list_docstr }, { "to_tuple", (PyCFunction)glmArray_to_tuple, METH_NOARGS, glmArray_to_tuple_docstr }, { "split_components",(PyCFunction)glmArray_split_components,METH_NOARGS, glmArray_split_components_docstr }, { "reduce", (PyCFunction)glmArray_reduce, METH_VARARGS, glmArray_reduce_docstr }, { "from_numbers", (PyCFunction)glmArray_from_numbers, METH_VARARGS | METH_STATIC, glmArray_from_numbers_docstr }, { "as_reference", (PyCFunction)glmArray_as_reference, METH_O | METH_STATIC, glmArray_as_reference_docstr }, { "zeros", (PyCFunction)glmArray_zeros, METH_VARARGS | METH_STATIC, glmArray_zeros_docstr }, { "filter", (PyCFunction)glmArray_filter, METH_O, glmArray_filter_docstr }, { "map", (PyCFunction)glmArray_map, METH_VARARGS|METH_KEYWORDS, glmArray_map_docstr }, { "sort", (PyCFunction)glmArray_sort, METH_O, glmArray_sort_docstr }, { "concat", (PyCFunction)glmArray_concat, METH_O, glmArray_concat_docstr }, { "iconcat", (PyCFunction)glmArray_inplace_concat, METH_O, glmArray_inplace_concat_docstr }, { "repeat", (PyCFunction)glmArray_repeat, METH_O, glmArray_repeat_docstr }, { "irepeat", (PyCFunction)glmArray_inplace_repeat, METH_O, glmArray_inplace_repeat_docstr }, //{ "test", (PyCFunction)glmArray_pow_T, METH_O, glmArray_inplace_repeat_docstr }, //{ "add", (PyCFunction)glmArray_add, METH_O, glmArray_inplace_repeat_docstr }, { NULL } /* Sentinel */ }; static PyBufferProcs glmArrayBufferMethods = { (getbufferproc)glmArray_getbuffer, (releasebufferproc)glmArray_releasebuffer, }; static PySequenceMethods glmArraySeqMethods = { (lenfunc)glmArray_len, // sq_length 0,//(binaryfunc)glmArray_concat, // sq_concat 0,//(ssizeargfunc)glmArray_repeat, // sq_repeat (ssizeargfunc)glmArray_sq_item, // sq_item 0, (ssizeobjargproc)glmArray_sq_ass_item, // sq_ass_item 0, (objobjproc)glmArray_contains, // sq_contains 0,//(binaryfunc)glmArray_inplace_concat, // sq_inplace_concat 0,//(ssizeargfunc)glmArray_inplace_repeat, // sq_inplace_repeat }; static PyMappingMethods glmArrayMapMethods = { (lenfunc)glmArray_len, // mp_length (binaryfunc)glmArray_mp_subscript, // mp_subscript (objobjargproc)glmArray_mp_ass_subscript, // mp_ass_subscript }; static PyNumberMethods glmArrayNumMethods = { (binaryfunc)glmArray_add, //nb_add (binaryfunc)glmArray_sub,//(binaryfunc)matsq_sub<2, 2, float>, //nb_subtract (binaryfunc)glmArray_mul,//(binaryfunc)mat_mul<2, 2, float>, //nb_multiply (binaryfunc)glmArray_mod, //nb_remainder 0, //nb_divmod (ternaryfunc)glmArray_pow, //nb_power (unaryfunc)glmArray_neg,//(unaryfunc)mat_neg<2, 2, float>, //nb_negative (unaryfunc)glmArray_pos,//(unaryfunc)mat_pos<2, 2, float>, //nb_positive (unaryfunc)glmArray_abs, //nb_absolute 0, //nb_bool (unaryfunc)glmArray_inv, //nb_invert (binaryfunc)glmArray_lshift, //nb_lshift (binaryfunc)glmArray_rshift, //nb_rshift (binaryfunc)glmArray_and, //nb_and (binaryfunc)glmArray_xor, //nb_xor (binaryfunc)glmArray_or, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_float 0,//(binaryfunc)matsq_iadd<2, 2, float>, //nb_inplace_add 0,//(binaryfunc)matsq_isub<2, 2, float>, //nb_inplace_subtract 0,//(binaryfunc)mat_imul<2, 2, float>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)glmArray_div,//(binaryfunc)matsq_div<2, 2, float>, //nb_true_divide 0, //nb_inplace_floor_divide 0,//(binaryfunc)matsq_idiv<2, 2, float>, //nb_inplace_true_divide 0, //nb_index 0,//(binaryfunc)mat_matmul, //nb_matrix_multiply 0,//(binaryfunc)mat_imatmul<2, 2, float>, //nb_inplace_matrix_multiply }; static PyTypeObject glmArrayType = { PyVarObject_HEAD_INIT(NULL, 0) "glm.array", // tp_name sizeof(glmArray), // tp_basicsize 0, // tp_itemsize (destructor)glmArray_dealloc, // tp_dealloc 0, // tp_print 0, // tp_getattr 0, // tp_setattr 0, // tp_reserved (reprfunc)glmArray_repr, // tp_repr &glmArrayNumMethods, // tp_as_number &glmArraySeqMethods, // tp_as_sequence &glmArrayMapMethods, // tp_as_mapping (hashfunc)array_hash, // tp_hash 0, // tp_call (reprfunc)glmArray_str, // tp_str 0, // tp_getattro 0, // tp_setattro &glmArrayBufferMethods, // tp_as_buffer Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, // tp_flags "array( )\nAn in-place copy of glm types.", // tp_doc 0, // tp_traverse 0, // tp_clear (richcmpfunc)glmArray_richcompare, // tp_richcompare 0, // tp_weaklistoffset (getiterfunc)glmArray_geniter, // tp_iter 0, // tp_iternext glmArray_methods, // tp_methods glmArray_members, // tp_members glmArray_getSet, // tp_getset 0, // tp_base 0, // tp_dict 0, // tp_descr_get 0, // tp_descr_set 0, // tp_dictoffset (initproc)glmArray_init, // tp_init 0,// tp_alloc (newfunc)glmArray_new, // tp_new }; static PyTypeObject glmArrayIterType = { PyVarObject_HEAD_INIT(NULL, 0) "glmArrayIter", // tp_name sizeof(glmArrayIter), // tp_basicsize 0, // tp_itemsize (destructor)glmArrayIter_dealloc, // tp_dealloc 0, // tp_print 0, // tp_getattr 0, // tp_setattr 0, // tp_reserved 0, // tp_repr 0, // tp_as_number 0, // tp_as_sequence 0, // tp_as_mapping 0, // tp_hash 0, // tp_call 0, // tp_str 0, // tp_getattro 0, // tp_setattro 0, // tp_as_buffer Py_TPFLAGS_DEFAULT, // tp_flags "glmArray iterator", // tp_doc 0, // tp_traverse 0, // tp_clear 0, // tp_richcompare 0, // tp_weaklistoffset (getiterfunc)generic_id, // tp_iter (iternextfunc)glmArrayIter_next, // tp_iternext 0, // tp_methods 0, // tp_members 0, // tp_getset 0, // tp_base 0, // tp_dict 0, // tp_descr_get 0, // tp_descr_set 0, // tp_dictoffset 0, // tp_init 0, // tp_alloc (newfunc)glmArrayIter_new, // tp_new };Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/000077500000000000000000000000001511156275200212345ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/all.h000066400000000000000000000002701511156275200221540ustar00rootroot00000000000000#ifndef TYPES_MAT_ALL_H #define TYPES_MAT_ALL_H #include "forward_declarations.h" #include "double/all.h" #include "float/all.h" #include "int/all.h" #include "uint/all.h" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/double/000077500000000000000000000000001511156275200225065ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/double/all.h000066400000000000000000000003741511156275200234330ustar00rootroot00000000000000#ifndef TYPES_MAT_DOUBLE_ALL_H #define TYPES_MAT_DOUBLE_ALL_H #include "mat2x2.h" #include "mat2x3.h" #include "mat2x4.h" #include "mat3x2.h" #include "mat3x3.h" #include "mat3x4.h" #include "mat4x2.h" #include "mat4x3.h" #include "mat4x4.h" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/double/mat2x2.h000066400000000000000000000153541511156275200240040ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef hdmat2x2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<2>, METH_NOARGS, "returns the length of glm::dmat2x2"}, { "__getstate__", (PyCFunction)mat_to_tuple<2, 2, double>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<2, 2, double>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<2, 2, double>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<2, 2, double>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<2, 2, double>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs hdmat2x2BufferMethods = { (getbufferproc)mat_getbuffer<2, 2, double>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods hdmat2x2SeqMethods = { (lenfunc)mat_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<2, 2, double>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods hdmat2x2MapMethods = { (lenfunc)mat_len<2>, // mp_length (binaryfunc)mat2x2_mp_item, // mp_subscript (objobjargproc)mat2x2_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods hdmat2x2NumMethods = { (binaryfunc)matsq_add<2, 2, double>, //nb_add (binaryfunc)matsq_sub<2, 2, double>, //nb_subtract (binaryfunc)mat_mul<2, 2, double>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<2, 2, double>, //nb_negative (unaryfunc)mat_pos<2, 2, double>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_double (binaryfunc)matsq_iadd<2, 2, double>, //nb_inplace_add (binaryfunc)matsq_isub<2, 2, double>, //nb_inplace_subtract (binaryfunc)mat_imul<2, 2, double>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)matsq_div<2, 2, double>, 0, //nb_inplace_floor_divide (binaryfunc)matsq_idiv<2, 2, double>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<2, 2, double>, //nb_inplace_matrix_multiply }; static PyTypeObject hdmat2x2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "dmat2x2Iter", /* tp_name */ sizeof(matIter<2, 2, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<2, 2, double>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "dmat2x2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<2, 2, double>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<2, 2, double>, /* tp_new */ }; static PyGLMTypeObject hdmat2x2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.dmat2x2", /* tp_name */ sizeof(mat<2, 2, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat2x2_repr, /* tp_repr */ & hdmat2x2NumMethods, /* tp_as_number */ & hdmat2x2SeqMethods, /* tp_as_sequence */ & hdmat2x2MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<2, 2, double>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat2x2_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & hdmat2x2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "dmat2x2( )\n2 columns of 2 components matrix of double numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<2, 2, double>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<2, 2, double>, /* tp_iter */ 0, /* tp_iternext */ hdmat2x2_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat2x2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<2, 2, double>, /* tp_new */ }, PyGLM_TYPE_MAT, 2, 2, sizeof(double), sizeof(glm::mat<2, 2, double>), PyGLM_FS_DOUBLE }; static PyTypeObject& hdmat2x2Type = *((PyTypeObject*)&hdmat2x2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/double/mat2x3.h000066400000000000000000000153401511156275200240000ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef hdmat2x3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<2>, METH_NOARGS, "returns the length of glm::dmat2x3"}, { "__getstate__", (PyCFunction)mat_to_tuple<2, 3, double>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<2, 3, double>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<2, 3, double>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<2, 3, double>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<2, 3, double>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs hdmat2x3BufferMethods = { (getbufferproc)mat_getbuffer<2, 3, double>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods hdmat2x3SeqMethods = { (lenfunc)mat_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<2, 3, double>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods hdmat2x3MapMethods = { (lenfunc)mat_len<2>, // mp_length (binaryfunc)mat2x3_mp_item, // mp_subscript (objobjargproc)mat2x3_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods hdmat2x3NumMethods = { (binaryfunc)mat_add<2, 3, double>, //nb_add (binaryfunc)mat_sub<2, 3, double>, //nb_subtract (binaryfunc)mat_mul<2, 3, double>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<2, 3, double>, //nb_negative (unaryfunc)mat_pos<2, 3, double>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_double (binaryfunc)mat_iadd<2, 3, double>, //nb_inplace_add (binaryfunc)mat_isub<2, 3, double>, //nb_inplace_subtract (binaryfunc)mat_imul<2, 3, double>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<2, 3, double>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<2, 3, double>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<2, 3, double>, //nb_inplace_matrix_multiply }; static PyTypeObject hdmat2x3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "dmat2x3Iter", /* tp_name */ sizeof(matIter<2, 3, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<2, 3, double>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "dmat2x3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<2, 3, double>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<2, 3, double>, /* tp_new */ }; static PyGLMTypeObject hdmat2x3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.dmat2x3", /* tp_name */ sizeof(mat<2, 3, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat2x3_repr, /* tp_repr */ & hdmat2x3NumMethods, /* tp_as_number */ & hdmat2x3SeqMethods, /* tp_as_sequence */ & hdmat2x3MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<2, 3, double>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat2x3_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & hdmat2x3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "dmat2x3( )\n2 columns of 3 components matrix of double numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<2, 3, double>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<2, 3, double>, /* tp_iter */ 0, /* tp_iternext */ hdmat2x3_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat2x3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<2, 3, double>, /* tp_new */ }, PyGLM_TYPE_MAT, 2, 3, sizeof(double), sizeof(glm::mat<2, 3, double>), PyGLM_FS_DOUBLE }; static PyTypeObject& hdmat2x3Type = *((PyTypeObject*)&hdmat2x3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/double/mat2x4.h000066400000000000000000000153401511156275200240010ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef hdmat2x4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<2>, METH_NOARGS, "returns the length of glm::dmat2x4"}, { "__getstate__", (PyCFunction)mat_to_tuple<2, 4, double>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<2, 4, double>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<2, 4, double>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<2, 4, double>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<2, 4, double>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs hdmat2x4BufferMethods = { (getbufferproc)mat_getbuffer<2, 4, double>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods hdmat2x4SeqMethods = { (lenfunc)mat_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<2, 4, double>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods hdmat2x4MapMethods = { (lenfunc)mat_len<2>, // mp_length (binaryfunc)mat2x4_mp_item, // mp_subscript (objobjargproc)mat2x4_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods hdmat2x4NumMethods = { (binaryfunc)mat_add<2, 4, double>, //nb_add (binaryfunc)mat_sub<2, 4, double>, //nb_subtract (binaryfunc)mat_mul<2, 4, double>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<2, 4, double>, //nb_negative (unaryfunc)mat_pos<2, 4, double>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_double (binaryfunc)mat_iadd<2, 4, double>, //nb_inplace_add (binaryfunc)mat_isub<2, 4, double>, //nb_inplace_subtract (binaryfunc)mat_imul<2, 4, double>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<2, 4, double>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<2, 4, double>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<2, 4, double>, //nb_inplace_matrix_multiply }; static PyTypeObject hdmat2x4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "dmat2x4Iter", /* tp_name */ sizeof(matIter<2, 4, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<2, 4, double>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "dmat2x4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<2, 4, double>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<2, 4, double>, /* tp_new */ }; static PyGLMTypeObject hdmat2x4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.dmat2x4", /* tp_name */ sizeof(mat<2, 4, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat2x4_repr, /* tp_repr */ & hdmat2x4NumMethods, /* tp_as_number */ & hdmat2x4SeqMethods, /* tp_as_sequence */ & hdmat2x4MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<2, 4, double>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat2x4_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & hdmat2x4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "dmat2x4( )\n2 columns of 4 components matrix of double numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<2, 4, double>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<2, 4, double>, /* tp_iter */ 0, /* tp_iternext */ hdmat2x4_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat2x4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<2, 4, double>, /* tp_new */ }, PyGLM_TYPE_MAT, 2, 4, sizeof(double), sizeof(glm::mat<2, 4, double>), PyGLM_FS_DOUBLE }; static PyTypeObject& hdmat2x4Type = *((PyTypeObject*)&hdmat2x4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/double/mat3x2.h000066400000000000000000000153401511156275200240000ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef hdmat3x2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<3>, METH_NOARGS, "returns the length of glm::dmat3x2"}, { "__getstate__", (PyCFunction)mat_to_tuple<3, 2, double>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<3, 2, double>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<3, 2, double>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<3, 2, double>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<3, 2, double>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs hdmat3x2BufferMethods = { (getbufferproc)mat_getbuffer<3, 2, double>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods hdmat3x2SeqMethods = { (lenfunc)mat_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<3, 2, double>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods hdmat3x2MapMethods = { (lenfunc)mat_len<3>, // mp_length (binaryfunc)mat3x2_mp_item, // mp_subscript (objobjargproc)mat3x2_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods hdmat3x2NumMethods = { (binaryfunc)mat_add<3, 2, double>, //nb_add (binaryfunc)mat_sub<3, 2, double>, //nb_subtract (binaryfunc)mat_mul<3, 2, double>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<3, 2, double>, //nb_negative (unaryfunc)mat_pos<3, 2, double>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_double (binaryfunc)mat_iadd<3, 2, double>, //nb_inplace_add (binaryfunc)mat_isub<3, 2, double>, //nb_inplace_subtract (binaryfunc)mat_imul<3, 2, double>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<3, 2, double>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<3, 2, double>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<3, 2, double>, //nb_inplace_matrix_multiply }; static PyTypeObject hdmat3x2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "dmat3x2Iter", /* tp_name */ sizeof(matIter<3, 2, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<3, 2, double>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "dmat3x2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<3, 2, double>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<3, 2, double>, /* tp_new */ }; static PyGLMTypeObject hdmat3x2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.dmat3x2", /* tp_name */ sizeof(mat<3, 2, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat3x2_repr, /* tp_repr */ & hdmat3x2NumMethods, /* tp_as_number */ & hdmat3x2SeqMethods, /* tp_as_sequence */ & hdmat3x2MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<3, 2, double>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat3x2_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & hdmat3x2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "dmat3x2( )\n3 columns of 2 components matrix of double numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<3, 2, double>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<3, 2, double>, /* tp_iter */ 0, /* tp_iternext */ hdmat3x2_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat3x2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<3, 2, double>, /* tp_new */ }, PyGLM_TYPE_MAT, 3, 2, sizeof(double), sizeof(glm::mat<3, 2, double>), PyGLM_FS_DOUBLE }; static PyTypeObject& hdmat3x2Type = *((PyTypeObject*)&hdmat3x2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/double/mat3x3.h000066400000000000000000000153541511156275200240060ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef hdmat3x3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<3>, METH_NOARGS, "returns the length of glm::dmat3x3"}, { "__getstate__", (PyCFunction)mat_to_tuple<3, 3, double>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<3, 3, double>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<3, 3, double>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<3, 3, double>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<3, 3, double>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs hdmat3x3BufferMethods = { (getbufferproc)mat_getbuffer<3, 3, double>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods hdmat3x3SeqMethods = { (lenfunc)mat_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<3, 3, double>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods hdmat3x3MapMethods = { (lenfunc)mat_len<3>, // mp_length (binaryfunc)mat3x3_mp_item, // mp_subscript (objobjargproc)mat3x3_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods hdmat3x3NumMethods = { (binaryfunc)matsq_add<3, 3, double>, //nb_add (binaryfunc)matsq_sub<3, 3, double>, //nb_subtract (binaryfunc)mat_mul<3, 3, double>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<3, 3, double>, //nb_negative (unaryfunc)mat_pos<3, 3, double>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_double (binaryfunc)matsq_iadd<3, 3, double>, //nb_inplace_add (binaryfunc)matsq_isub<3, 3, double>, //nb_inplace_subtract (binaryfunc)mat_imul<3, 3, double>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)matsq_div<3, 3, double>, 0, //nb_inplace_floor_divide (binaryfunc)matsq_idiv<3, 3, double>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<3, 3, double>, //nb_inplace_matrix_multiply }; static PyTypeObject hdmat3x3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "dmat3x3Iter", /* tp_name */ sizeof(matIter<3, 3, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<3, 3, double>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "dmat3x3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<3, 3, double>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<3, 3, double>, /* tp_new */ }; static PyGLMTypeObject hdmat3x3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.dmat3x3", /* tp_name */ sizeof(mat<3, 3, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat3x3_repr, /* tp_repr */ & hdmat3x3NumMethods, /* tp_as_number */ & hdmat3x3SeqMethods, /* tp_as_sequence */ & hdmat3x3MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<3, 3, double>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat3x3_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & hdmat3x3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "dmat3x3( )\n3 columns of 3 components matrix of double numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<3, 3, double>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<3, 3, double>, /* tp_iter */ 0, /* tp_iternext */ hdmat3x3_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat3x3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<3, 3, double>, /* tp_new */ }, PyGLM_TYPE_MAT, 3, 3, sizeof(double), sizeof(glm::mat<3, 3, double>), PyGLM_FS_DOUBLE }; static PyTypeObject& hdmat3x3Type = *((PyTypeObject*)&hdmat3x3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/double/mat3x4.h000066400000000000000000000153401511156275200240020ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef hdmat3x4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<3>, METH_NOARGS, "returns the length of glm::dmat3x4"}, { "__getstate__", (PyCFunction)mat_to_tuple<3, 4, double>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<3, 4, double>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<3, 4, double>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<3, 4, double>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<3, 4, double>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs hdmat3x4BufferMethods = { (getbufferproc)mat_getbuffer<3, 4, double>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods hdmat3x4SeqMethods = { (lenfunc)mat_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<3, 4, double>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods hdmat3x4MapMethods = { (lenfunc)mat_len<3>, // mp_length (binaryfunc)mat3x4_mp_item, // mp_subscript (objobjargproc)mat3x4_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods hdmat3x4NumMethods = { (binaryfunc)mat_add<3, 4, double>, //nb_add (binaryfunc)mat_sub<3, 4, double>, //nb_subtract (binaryfunc)mat_mul<3, 4, double>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<3, 4, double>, //nb_negative (unaryfunc)mat_pos<3, 4, double>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_double (binaryfunc)mat_iadd<3, 4, double>, //nb_inplace_add (binaryfunc)mat_isub<3, 4, double>, //nb_inplace_subtract (binaryfunc)mat_imul<3, 4, double>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<3, 4, double>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<3, 4, double>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<3, 4, double>, //nb_inplace_matrix_multiply }; static PyTypeObject hdmat3x4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "dmat3x4Iter", /* tp_name */ sizeof(matIter<3, 4, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<3, 4, double>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "dmat3x4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<3, 4, double>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<3, 4, double>, /* tp_new */ }; static PyGLMTypeObject hdmat3x4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.dmat3x4", /* tp_name */ sizeof(mat<3, 4, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat3x4_repr, /* tp_repr */ & hdmat3x4NumMethods, /* tp_as_number */ & hdmat3x4SeqMethods, /* tp_as_sequence */ & hdmat3x4MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<3, 4, double>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat3x4_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & hdmat3x4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "dmat3x4( )\n3 columns of 4 components matrix of double numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<3, 4, double>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<3, 4, double>, /* tp_iter */ 0, /* tp_iternext */ hdmat3x4_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat3x4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<3, 4, double>, /* tp_new */ }, PyGLM_TYPE_MAT, 3, 4, sizeof(double), sizeof(glm::mat<3, 4, double>), PyGLM_FS_DOUBLE }; static PyTypeObject& hdmat3x4Type = *((PyTypeObject*)&hdmat3x4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/double/mat4x2.h000066400000000000000000000153401511156275200240010ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef hdmat4x2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<4>, METH_NOARGS, "returns the length of glm::dmat4x2"}, { "__getstate__", (PyCFunction)mat_to_tuple<4, 2, double>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<4, 2, double>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<4, 2, double>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<4, 2, double>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<4, 2, double>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs hdmat4x2BufferMethods = { (getbufferproc)mat_getbuffer<4, 2, double>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods hdmat4x2SeqMethods = { (lenfunc)mat_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<4, 2, double>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods hdmat4x2MapMethods = { (lenfunc)mat_len<4>, // mp_length (binaryfunc)mat4x2_mp_item, // mp_subscript (objobjargproc)mat4x2_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods hdmat4x2NumMethods = { (binaryfunc)mat_add<4, 2, double>, //nb_add (binaryfunc)mat_sub<4, 2, double>, //nb_subtract (binaryfunc)mat_mul<4, 2, double>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<4, 2, double>, //nb_negative (unaryfunc)mat_pos<4, 2, double>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_double (binaryfunc)mat_iadd<4, 2, double>, //nb_inplace_add (binaryfunc)mat_isub<4, 2, double>, //nb_inplace_subtract (binaryfunc)mat_imul<4, 2, double>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<4, 2, double>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<4, 2, double>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<4, 2, double>, //nb_inplace_matrix_multiply }; static PyTypeObject hdmat4x2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "dmat4x2Iter", /* tp_name */ sizeof(matIter<4, 2, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<4, 2, double>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "dmat4x2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<4, 2, double>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<4, 2, double>, /* tp_new */ }; static PyGLMTypeObject hdmat4x2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.dmat4x2", /* tp_name */ sizeof(mat<4, 2, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat4x2_repr, /* tp_repr */ & hdmat4x2NumMethods, /* tp_as_number */ & hdmat4x2SeqMethods, /* tp_as_sequence */ & hdmat4x2MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<4, 2, double>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat4x2_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & hdmat4x2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "dmat4x2( )\n4 columns of 2 components matrix of double numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<4, 2, double>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<4, 2, double>, /* tp_iter */ 0, /* tp_iternext */ hdmat4x2_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat4x2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<4, 2, double>, /* tp_new */ }, PyGLM_TYPE_MAT, 4, 2, sizeof(double), sizeof(glm::mat<4, 2, double>), PyGLM_FS_DOUBLE }; static PyTypeObject& hdmat4x2Type = *((PyTypeObject*)&hdmat4x2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/double/mat4x3.h000066400000000000000000000153401511156275200240020ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef hdmat4x3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<4>, METH_NOARGS, "returns the length of glm::dmat4x3"}, { "__getstate__", (PyCFunction)mat_to_tuple<4, 3, double>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<4, 3, double>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<4, 3, double>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<4, 3, double>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<4, 3, double>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs hdmat4x3BufferMethods = { (getbufferproc)mat_getbuffer<4, 3, double>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods hdmat4x3SeqMethods = { (lenfunc)mat_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<4, 3, double>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods hdmat4x3MapMethods = { (lenfunc)mat_len<4>, // mp_length (binaryfunc)mat4x3_mp_item, // mp_subscript (objobjargproc)mat4x3_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods hdmat4x3NumMethods = { (binaryfunc)mat_add<4, 3, double>, //nb_add (binaryfunc)mat_sub<4, 3, double>, //nb_subtract (binaryfunc)mat_mul<4, 3, double>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<4, 3, double>, //nb_negative (unaryfunc)mat_pos<4, 3, double>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_double (binaryfunc)mat_iadd<4, 3, double>, //nb_inplace_add (binaryfunc)mat_isub<4, 3, double>, //nb_inplace_subtract (binaryfunc)mat_imul<4, 3, double>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<4, 3, double>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<4, 3, double>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<4, 3, double>, //nb_inplace_matrix_multiply }; static PyTypeObject hdmat4x3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "dmat4x3Iter", /* tp_name */ sizeof(matIter<4, 3, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<4, 3, double>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "dmat4x3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<4, 3, double>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<4, 3, double>, /* tp_new */ }; static PyGLMTypeObject hdmat4x3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.dmat4x3", /* tp_name */ sizeof(mat<4, 3, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat4x3_repr, /* tp_repr */ & hdmat4x3NumMethods, /* tp_as_number */ & hdmat4x3SeqMethods, /* tp_as_sequence */ & hdmat4x3MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<4, 3, double>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat4x3_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & hdmat4x3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "dmat4x3( )\n4 columns of 3 components matrix of double numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<4, 3, double>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<4, 3, double>, /* tp_iter */ 0, /* tp_iternext */ hdmat4x3_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat4x3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<4, 3, double>, /* tp_new */ }, PyGLM_TYPE_MAT, 4, 3, sizeof(double), sizeof(glm::mat<4, 3, double>), PyGLM_FS_DOUBLE }; static PyTypeObject& hdmat4x3Type = *((PyTypeObject*)&hdmat4x3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/double/mat4x4.h000066400000000000000000000153541511156275200240100ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef hdmat4x4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<4>, METH_NOARGS, "returns the length of glm::dmat4x4"}, { "__getstate__", (PyCFunction)mat_to_tuple<4, 4, double>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<4, 4, double>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<4, 4, double>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<4, 4, double>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<4, 4, double>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs hdmat4x4BufferMethods = { (getbufferproc)mat_getbuffer<4, 4, double>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods hdmat4x4SeqMethods = { (lenfunc)mat_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<4, 4, double>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods hdmat4x4MapMethods = { (lenfunc)mat_len<4>, // mp_length (binaryfunc)mat4x4_mp_item, // mp_subscript (objobjargproc)mat4x4_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods hdmat4x4NumMethods = { (binaryfunc)matsq_add<4, 4, double>, //nb_add (binaryfunc)matsq_sub<4, 4, double>, //nb_subtract (binaryfunc)mat_mul<4, 4, double>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<4, 4, double>, //nb_negative (unaryfunc)mat_pos<4, 4, double>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_double (binaryfunc)matsq_iadd<4, 4, double>, //nb_inplace_add (binaryfunc)matsq_isub<4, 4, double>, //nb_inplace_subtract (binaryfunc)mat_imul<4, 4, double>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)matsq_div<4, 4, double>, 0, //nb_inplace_floor_divide (binaryfunc)matsq_idiv<4, 4, double>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<4, 4, double>, //nb_inplace_matrix_multiply }; static PyTypeObject hdmat4x4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "dmat4x4Iter", /* tp_name */ sizeof(matIter<4, 4, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<4, 4, double>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "dmat4x4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<4, 4, double>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<4, 4, double>, /* tp_new */ }; static PyGLMTypeObject hdmat4x4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.dmat4x4", /* tp_name */ sizeof(mat<4, 4, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat4x4_repr, /* tp_repr */ & hdmat4x4NumMethods, /* tp_as_number */ & hdmat4x4SeqMethods, /* tp_as_sequence */ & hdmat4x4MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<4, 4, double>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat4x4_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & hdmat4x4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "dmat4x4( )\n4 columns of 4 components matrix of double numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<4, 4, double>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<4, 4, double>, /* tp_iter */ 0, /* tp_iternext */ hdmat4x4_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat4x4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<4, 4, double>, /* tp_new */ }, PyGLM_TYPE_MAT, 4, 4, sizeof(double), sizeof(glm::mat<4, 4, double>), PyGLM_FS_DOUBLE }; static PyTypeObject& hdmat4x4Type = *((PyTypeObject*)&hdmat4x4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/float/000077500000000000000000000000001511156275200223415ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/float/all.h000066400000000000000000000003721511156275200232640ustar00rootroot00000000000000#ifndef TYPES_MAT_FLOAT_ALL_H #define TYPES_MAT_FLOAT_ALL_H #include "mat2x2.h" #include "mat2x3.h" #include "mat2x4.h" #include "mat3x2.h" #include "mat3x3.h" #include "mat3x4.h" #include "mat4x2.h" #include "mat4x3.h" #include "mat4x4.h" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/float/mat2x2.h000066400000000000000000000153121511156275200236310ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef hfmat2x2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<2>, METH_NOARGS, "returns the length of glm::mat2x2"}, { "__getstate__", (PyCFunction)mat_to_tuple<2, 2, float>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<2, 2, float>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<2, 2, float>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<2, 2, float>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<2, 2, float>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs hfmat2x2BufferMethods = { (getbufferproc)mat_getbuffer<2, 2, float>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods hfmat2x2SeqMethods = { (lenfunc)mat_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<2, 2, float>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods hfmat2x2MapMethods = { (lenfunc)mat_len<2>, // mp_length (binaryfunc)mat2x2_mp_item, // mp_subscript (objobjargproc)mat2x2_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods hfmat2x2NumMethods = { (binaryfunc)matsq_add<2, 2, float>, //nb_add (binaryfunc)matsq_sub<2, 2, float>, //nb_subtract (binaryfunc)mat_mul<2, 2, float>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<2, 2, float>, //nb_negative (unaryfunc)mat_pos<2, 2, float>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_float (binaryfunc)matsq_iadd<2, 2, float>, //nb_inplace_add (binaryfunc)matsq_isub<2, 2, float>, //nb_inplace_subtract (binaryfunc)mat_imul<2, 2, float>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)matsq_div<2, 2, float>, 0, //nb_inplace_floor_divide (binaryfunc)matsq_idiv<2, 2, float>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<2, 2, float>, //nb_inplace_matrix_multiply }; static PyTypeObject hfmat2x2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "mat2x2Iter", /* tp_name */ sizeof(matIter<2, 2, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<2, 2, float>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "mat2x2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<2, 2, float>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<2, 2, float>, /* tp_new */ }; static PyGLMTypeObject hfmat2x2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.mat2x2", /* tp_name */ sizeof(mat<2, 2, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat2x2_repr, /* tp_repr */ & hfmat2x2NumMethods, /* tp_as_number */ & hfmat2x2SeqMethods, /* tp_as_sequence */ & hfmat2x2MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<2, 2, float>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat2x2_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & hfmat2x2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "mat2x2( )\n2 columns of 2 components matrix of floating-point numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<2, 2, float>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<2, 2, float>, /* tp_iter */ 0, /* tp_iternext */ hfmat2x2_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat2x2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<2, 2, float>, /* tp_new */ }, PyGLM_TYPE_MAT, 2, 2, sizeof(float), sizeof(glm::mat<2, 2, float>), PyGLM_FS_FLOAT }; static PyTypeObject& hfmat2x2Type = *((PyTypeObject*)&hfmat2x2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/float/mat2x3.h000066400000000000000000000152761511156275200236430ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef hfmat2x3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<2>, METH_NOARGS, "returns the length of glm::mat2x3"}, { "__getstate__", (PyCFunction)mat_to_tuple<2, 3, float>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<2, 3, float>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<2, 3, float>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<2, 3, float>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<2, 3, float>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs hfmat2x3BufferMethods = { (getbufferproc)mat_getbuffer<2, 3, float>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods hfmat2x3SeqMethods = { (lenfunc)mat_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<2, 3, float>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods hfmat2x3MapMethods = { (lenfunc)mat_len<2>, // mp_length (binaryfunc)mat2x3_mp_item, // mp_subscript (objobjargproc)mat2x3_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods hfmat2x3NumMethods = { (binaryfunc)mat_add<2, 3, float>, //nb_add (binaryfunc)mat_sub<2, 3, float>, //nb_subtract (binaryfunc)mat_mul<2, 3, float>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<2, 3, float>, //nb_negative (unaryfunc)mat_pos<2, 3, float>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_float (binaryfunc)mat_iadd<2, 3, float>, //nb_inplace_add (binaryfunc)mat_isub<2, 3, float>, //nb_inplace_subtract (binaryfunc)mat_imul<2, 3, float>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<2, 3, float>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<2, 3, float>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<2, 3, float>, //nb_inplace_matrix_multiply }; static PyTypeObject hfmat2x3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "mat2x3Iter", /* tp_name */ sizeof(matIter<2, 3, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<2, 3, float>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "mat2x3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<2, 3, float>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<2, 3, float>, /* tp_new */ }; static PyGLMTypeObject hfmat2x3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.mat2x3", /* tp_name */ sizeof(mat<2, 3, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat2x3_repr, /* tp_repr */ & hfmat2x3NumMethods, /* tp_as_number */ & hfmat2x3SeqMethods, /* tp_as_sequence */ & hfmat2x3MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<2, 3, float>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat2x3_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & hfmat2x3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "mat2x3( )\n2 columns of 3 components matrix of floating-point numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<2, 3, float>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<2, 3, float>, /* tp_iter */ 0, /* tp_iternext */ hfmat2x3_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat2x3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<2, 3, float>, /* tp_new */ }, PyGLM_TYPE_MAT, 2, 3, sizeof(float), sizeof(glm::mat<2, 3, float>), PyGLM_FS_FLOAT }; static PyTypeObject& hfmat2x3Type = *((PyTypeObject*)&hfmat2x3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/float/mat2x4.h000066400000000000000000000152761511156275200236440ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef hfmat2x4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<2>, METH_NOARGS, "returns the length of glm::mat2x4"}, { "__getstate__", (PyCFunction)mat_to_tuple<2, 4, float>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<2, 4, float>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<2, 4, float>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<2, 4, float>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<2, 4, float>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs hfmat2x4BufferMethods = { (getbufferproc)mat_getbuffer<2, 4, float>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods hfmat2x4SeqMethods = { (lenfunc)mat_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<2, 4, float>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods hfmat2x4MapMethods = { (lenfunc)mat_len<2>, // mp_length (binaryfunc)mat2x4_mp_item, // mp_subscript (objobjargproc)mat2x4_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods hfmat2x4NumMethods = { (binaryfunc)mat_add<2, 4, float>, //nb_add (binaryfunc)mat_sub<2, 4, float>, //nb_subtract (binaryfunc)mat_mul<2, 4, float>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<2, 4, float>, //nb_negative (unaryfunc)mat_pos<2, 4, float>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_float (binaryfunc)mat_iadd<2, 4, float>, //nb_inplace_add (binaryfunc)mat_isub<2, 4, float>, //nb_inplace_subtract (binaryfunc)mat_imul<2, 4, float>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<2, 4, float>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<2, 4, float>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<2, 4, float>, //nb_inplace_matrix_multiply }; static PyTypeObject hfmat2x4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "mat2x4Iter", /* tp_name */ sizeof(matIter<2, 4, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<2, 4, float>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "mat2x4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<2, 4, float>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<2, 4, float>, /* tp_new */ }; static PyGLMTypeObject hfmat2x4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.mat2x4", /* tp_name */ sizeof(mat<2, 4, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat2x4_repr, /* tp_repr */ & hfmat2x4NumMethods, /* tp_as_number */ & hfmat2x4SeqMethods, /* tp_as_sequence */ & hfmat2x4MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<2, 4, float>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat2x4_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & hfmat2x4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "mat2x4( )\n2 columns of 4 components matrix of floating-point numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<2, 4, float>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<2, 4, float>, /* tp_iter */ 0, /* tp_iternext */ hfmat2x4_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat2x4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<2, 4, float>, /* tp_new */ }, PyGLM_TYPE_MAT, 2, 4, sizeof(float), sizeof(glm::mat<2, 4, float>), PyGLM_FS_FLOAT }; static PyTypeObject& hfmat2x4Type = *((PyTypeObject*)&hfmat2x4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/float/mat3x2.h000066400000000000000000000152761511156275200236430ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef hfmat3x2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<3>, METH_NOARGS, "returns the length of glm::mat3x2"}, { "__getstate__", (PyCFunction)mat_to_tuple<3, 2, float>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<3, 2, float>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<3, 2, float>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<3, 2, float>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<3, 2, float>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs hfmat3x2BufferMethods = { (getbufferproc)mat_getbuffer<3, 2, float>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods hfmat3x2SeqMethods = { (lenfunc)mat_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<3, 2, float>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods hfmat3x2MapMethods = { (lenfunc)mat_len<3>, // mp_length (binaryfunc)mat3x2_mp_item, // mp_subscript (objobjargproc)mat3x2_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods hfmat3x2NumMethods = { (binaryfunc)mat_add<3, 2, float>, //nb_add (binaryfunc)mat_sub<3, 2, float>, //nb_subtract (binaryfunc)mat_mul<3, 2, float>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<3, 2, float>, //nb_negative (unaryfunc)mat_pos<3, 2, float>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_float (binaryfunc)mat_iadd<3, 2, float>, //nb_inplace_add (binaryfunc)mat_isub<3, 2, float>, //nb_inplace_subtract (binaryfunc)mat_imul<3, 2, float>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<3, 2, float>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<3, 2, float>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<3, 2, float>, //nb_inplace_matrix_multiply }; static PyTypeObject hfmat3x2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "mat3x2Iter", /* tp_name */ sizeof(matIter<3, 2, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<3, 2, float>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "mat3x2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<3, 2, float>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<3, 2, float>, /* tp_new */ }; static PyGLMTypeObject hfmat3x2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.mat3x2", /* tp_name */ sizeof(mat<3, 2, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat3x2_repr, /* tp_repr */ & hfmat3x2NumMethods, /* tp_as_number */ & hfmat3x2SeqMethods, /* tp_as_sequence */ & hfmat3x2MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<3, 2, float>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat3x2_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & hfmat3x2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "mat3x2( )\n3 columns of 2 components matrix of floating-point numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<3, 2, float>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<3, 2, float>, /* tp_iter */ 0, /* tp_iternext */ hfmat3x2_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat3x2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<3, 2, float>, /* tp_new */ }, PyGLM_TYPE_MAT, 3, 2, sizeof(float), sizeof(glm::mat<3, 2, float>), PyGLM_FS_FLOAT }; static PyTypeObject& hfmat3x2Type = *((PyTypeObject*)&hfmat3x2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/float/mat3x3.h000066400000000000000000000153121511156275200236330ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef hfmat3x3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<3>, METH_NOARGS, "returns the length of glm::mat3x3"}, { "__getstate__", (PyCFunction)mat_to_tuple<3, 3, float>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<3, 3, float>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<3, 3, float>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<3, 3, float>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<3, 3, float>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs hfmat3x3BufferMethods = { (getbufferproc)mat_getbuffer<3, 3, float>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods hfmat3x3SeqMethods = { (lenfunc)mat_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<3, 3, float>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods hfmat3x3MapMethods = { (lenfunc)mat_len<3>, // mp_length (binaryfunc)mat3x3_mp_item, // mp_subscript (objobjargproc)mat3x3_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods hfmat3x3NumMethods = { (binaryfunc)matsq_add<3, 3, float>, //nb_add (binaryfunc)matsq_sub<3, 3, float>, //nb_subtract (binaryfunc)mat_mul<3, 3, float>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<3, 3, float>, //nb_negative (unaryfunc)mat_pos<3, 3, float>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_float (binaryfunc)matsq_iadd<3, 3, float>, //nb_inplace_add (binaryfunc)matsq_isub<3, 3, float>, //nb_inplace_subtract (binaryfunc)mat_imul<3, 3, float>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)matsq_div<3, 3, float>, 0, //nb_inplace_floor_divide (binaryfunc)matsq_idiv<3, 3, float>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<3, 3, float>, //nb_inplace_matrix_multiply }; static PyTypeObject hfmat3x3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "mat3x3Iter", /* tp_name */ sizeof(matIter<3, 3, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<3, 3, float>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "mat3x3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<3, 3, float>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<3, 3, float>, /* tp_new */ }; static PyGLMTypeObject hfmat3x3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.mat3x3", /* tp_name */ sizeof(mat<3, 3, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat3x3_repr, /* tp_repr */ & hfmat3x3NumMethods, /* tp_as_number */ & hfmat3x3SeqMethods, /* tp_as_sequence */ & hfmat3x3MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<3, 3, float>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat3x3_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & hfmat3x3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "mat3x3( )\n3 columns of 3 components matrix of floating-point numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<3, 3, float>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<3, 3, float>, /* tp_iter */ 0, /* tp_iternext */ hfmat3x3_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat3x3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<3, 3, float>, /* tp_new */ }, PyGLM_TYPE_MAT, 3, 3, sizeof(float), sizeof(glm::mat<3, 3, float>), PyGLM_FS_FLOAT }; static PyTypeObject& hfmat3x3Type = *((PyTypeObject*)&hfmat3x3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/float/mat3x4.h000066400000000000000000000152761511156275200236450ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef hfmat3x4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<3>, METH_NOARGS, "returns the length of glm::mat3x4"}, { "__getstate__", (PyCFunction)mat_to_tuple<3, 4, float>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<3, 4, float>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<3, 4, float>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<3, 4, float>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<3, 4, float>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs hfmat3x4BufferMethods = { (getbufferproc)mat_getbuffer<3, 4, float>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods hfmat3x4SeqMethods = { (lenfunc)mat_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<3, 4, float>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods hfmat3x4MapMethods = { (lenfunc)mat_len<3>, // mp_length (binaryfunc)mat3x4_mp_item, // mp_subscript (objobjargproc)mat3x4_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods hfmat3x4NumMethods = { (binaryfunc)mat_add<3, 4, float>, //nb_add (binaryfunc)mat_sub<3, 4, float>, //nb_subtract (binaryfunc)mat_mul<3, 4, float>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<3, 4, float>, //nb_negative (unaryfunc)mat_pos<3, 4, float>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_float (binaryfunc)mat_iadd<3, 4, float>, //nb_inplace_add (binaryfunc)mat_isub<3, 4, float>, //nb_inplace_subtract (binaryfunc)mat_imul<3, 4, float>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<3, 4, float>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<3, 4, float>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<3, 4, float>, //nb_inplace_matrix_multiply }; static PyTypeObject hfmat3x4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "mat3x4Iter", /* tp_name */ sizeof(matIter<3, 4, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<3, 4, float>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "mat3x4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<3, 4, float>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<3, 4, float>, /* tp_new */ }; static PyGLMTypeObject hfmat3x4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.mat3x4", /* tp_name */ sizeof(mat<3, 4, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat3x4_repr, /* tp_repr */ & hfmat3x4NumMethods, /* tp_as_number */ & hfmat3x4SeqMethods, /* tp_as_sequence */ & hfmat3x4MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<3, 4, float>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat3x4_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & hfmat3x4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "mat3x4( )\n3 columns of 4 components matrix of floating-point numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<3, 4, float>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<3, 4, float>, /* tp_iter */ 0, /* tp_iternext */ hfmat3x4_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat3x4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<3, 4, float>, /* tp_new */ }, PyGLM_TYPE_MAT, 3, 4, sizeof(float), sizeof(glm::mat<3, 4, float>), PyGLM_FS_FLOAT }; static PyTypeObject& hfmat3x4Type = *((PyTypeObject*)&hfmat3x4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/float/mat4x2.h000066400000000000000000000152761511156275200236440ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef hfmat4x2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<4>, METH_NOARGS, "returns the length of glm::mat4x2"}, { "__getstate__", (PyCFunction)mat_to_tuple<4, 2, float>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<4, 2, float>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<4, 2, float>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<4, 2, float>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<4, 2, float>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs hfmat4x2BufferMethods = { (getbufferproc)mat_getbuffer<4, 2, float>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods hfmat4x2SeqMethods = { (lenfunc)mat_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<4, 2, float>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods hfmat4x2MapMethods = { (lenfunc)mat_len<4>, // mp_length (binaryfunc)mat4x2_mp_item, // mp_subscript (objobjargproc)mat4x2_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods hfmat4x2NumMethods = { (binaryfunc)mat_add<4, 2, float>, //nb_add (binaryfunc)mat_sub<4, 2, float>, //nb_subtract (binaryfunc)mat_mul<4, 2, float>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<4, 2, float>, //nb_negative (unaryfunc)mat_pos<4, 2, float>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_float (binaryfunc)mat_iadd<4, 2, float>, //nb_inplace_add (binaryfunc)mat_isub<4, 2, float>, //nb_inplace_subtract (binaryfunc)mat_imul<4, 2, float>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<4, 2, float>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<4, 2, float>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<4, 2, float>, //nb_inplace_matrix_multiply }; static PyTypeObject hfmat4x2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "mat4x2Iter", /* tp_name */ sizeof(matIter<4, 2, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<4, 2, float>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "mat4x2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<4, 2, float>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<4, 2, float>, /* tp_new */ }; static PyGLMTypeObject hfmat4x2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.mat4x2", /* tp_name */ sizeof(mat<4, 2, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat4x2_repr, /* tp_repr */ & hfmat4x2NumMethods, /* tp_as_number */ & hfmat4x2SeqMethods, /* tp_as_sequence */ & hfmat4x2MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<4, 2, float>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat4x2_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & hfmat4x2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "mat4x2( )\n4 columns of 2 components matrix of floating-point numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<4, 2, float>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<4, 2, float>, /* tp_iter */ 0, /* tp_iternext */ hfmat4x2_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat4x2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<4, 2, float>, /* tp_new */ }, PyGLM_TYPE_MAT, 4, 2, sizeof(float), sizeof(glm::mat<4, 2, float>), PyGLM_FS_FLOAT }; static PyTypeObject& hfmat4x2Type = *((PyTypeObject*)&hfmat4x2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/float/mat4x3.h000066400000000000000000000152761511156275200236450ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef hfmat4x3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<4>, METH_NOARGS, "returns the length of glm::mat4x3"}, { "__getstate__", (PyCFunction)mat_to_tuple<4, 3, float>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<4, 3, float>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<4, 3, float>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<4, 3, float>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<4, 3, float>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs hfmat4x3BufferMethods = { (getbufferproc)mat_getbuffer<4, 3, float>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods hfmat4x3SeqMethods = { (lenfunc)mat_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<4, 3, float>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods hfmat4x3MapMethods = { (lenfunc)mat_len<4>, // mp_length (binaryfunc)mat4x3_mp_item, // mp_subscript (objobjargproc)mat4x3_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods hfmat4x3NumMethods = { (binaryfunc)mat_add<4, 3, float>, //nb_add (binaryfunc)mat_sub<4, 3, float>, //nb_subtract (binaryfunc)mat_mul<4, 3, float>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<4, 3, float>, //nb_negative (unaryfunc)mat_pos<4, 3, float>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_float (binaryfunc)mat_iadd<4, 3, float>, //nb_inplace_add (binaryfunc)mat_isub<4, 3, float>, //nb_inplace_subtract (binaryfunc)mat_imul<4, 3, float>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<4, 3, float>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<4, 3, float>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<4, 3, float>, //nb_inplace_matrix_multiply }; static PyTypeObject hfmat4x3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "mat4x3Iter", /* tp_name */ sizeof(matIter<4, 3, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<4, 3, float>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "mat4x3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<4, 3, float>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<4, 3, float>, /* tp_new */ }; static PyGLMTypeObject hfmat4x3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.mat4x3", /* tp_name */ sizeof(mat<4, 3, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat4x3_repr, /* tp_repr */ & hfmat4x3NumMethods, /* tp_as_number */ & hfmat4x3SeqMethods, /* tp_as_sequence */ & hfmat4x3MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<4, 3, float>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat4x3_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & hfmat4x3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "mat4x3( )\n4 columns of 3 components matrix of floating-point numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<4, 3, float>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<4, 3, float>, /* tp_iter */ 0, /* tp_iternext */ hfmat4x3_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat4x3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<4, 3, float>, /* tp_new */ }, PyGLM_TYPE_MAT, 4, 3, sizeof(float), sizeof(glm::mat<4, 3, float>), PyGLM_FS_FLOAT }; static PyTypeObject& hfmat4x3Type = *((PyTypeObject*)&hfmat4x3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/float/mat4x4.h000066400000000000000000000153121511156275200236350ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef hfmat4x4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<4>, METH_NOARGS, "returns the length of glm::mat4x4"}, { "__getstate__", (PyCFunction)mat_to_tuple<4, 4, float>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<4, 4, float>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<4, 4, float>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<4, 4, float>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<4, 4, float>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs hfmat4x4BufferMethods = { (getbufferproc)mat_getbuffer<4, 4, float>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods hfmat4x4SeqMethods = { (lenfunc)mat_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<4, 4, float>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods hfmat4x4MapMethods = { (lenfunc)mat_len<4>, // mp_length (binaryfunc)mat4x4_mp_item, // mp_subscript (objobjargproc)mat4x4_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods hfmat4x4NumMethods = { (binaryfunc)matsq_add<4, 4, float>, //nb_add (binaryfunc)matsq_sub<4, 4, float>, //nb_subtract (binaryfunc)mat_mul<4, 4, float>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<4, 4, float>, //nb_negative (unaryfunc)mat_pos<4, 4, float>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_float (binaryfunc)matsq_iadd<4, 4, float>, //nb_inplace_add (binaryfunc)matsq_isub<4, 4, float>, //nb_inplace_subtract (binaryfunc)mat_imul<4, 4, float>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)matsq_div<4, 4, float>, 0, //nb_inplace_floor_divide (binaryfunc)matsq_idiv<4, 4, float>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<4, 4, float>, //nb_inplace_matrix_multiply }; static PyTypeObject hfmat4x4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "mat4x4Iter", /* tp_name */ sizeof(matIter<4, 4, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<4, 4, float>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "mat4x4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<4, 4, float>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<4, 4, float>, /* tp_new */ }; static PyGLMTypeObject hfmat4x4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.mat4x4", /* tp_name */ sizeof(mat<4, 4, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat4x4_repr, /* tp_repr */ & hfmat4x4NumMethods, /* tp_as_number */ & hfmat4x4SeqMethods, /* tp_as_sequence */ & hfmat4x4MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<4, 4, float>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat4x4_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & hfmat4x4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "mat4x4( )\n4 columns of 4 components matrix of floating-point numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<4, 4, float>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<4, 4, float>, /* tp_iter */ 0, /* tp_iternext */ hfmat4x4_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat4x4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<4, 4, float>, /* tp_new */ }, PyGLM_TYPE_MAT, 4, 4, sizeof(float), sizeof(glm::mat<4, 4, float>), PyGLM_FS_FLOAT }; static PyTypeObject& hfmat4x4Type = *((PyTypeObject*)&hfmat4x4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/forward_declarations.h000066400000000000000000000162171511156275200256100ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" template static PyObject* mat_length(PyObject * self, PyObject* arg); template static int mat_getbuffer(mat* self, Py_buffer* view, int flags); static void mat_releasebuffer(PyObject* self, Py_buffer* view); template static Py_ssize_t mat_len(PyObject* self); template static PyObject* mat2x2_mp_item(mat<2, 2, T> * self, PyObject* key); template static PyObject* mat2x3_mp_item(mat<2, 3, T> * self, PyObject* key); template static PyObject* mat2x4_mp_item(mat<2, 4, T> * self, PyObject* key); template static PyObject* mat3x2_mp_item(mat<3, 2, T> * self, PyObject* key); template static PyObject* mat3x3_mp_item(mat<3, 3, T> * self, PyObject* key); template static PyObject* mat3x4_mp_item(mat<3, 4, T> * self, PyObject* key); template static PyObject* mat4x2_mp_item(mat<4, 2, T> * self, PyObject* key); template static PyObject* mat4x3_mp_item(mat<4, 3, T> * self, PyObject* key); template static PyObject* mat4x4_mp_item(mat<4, 4, T> * self, PyObject* key); template static int mat2x2_mp_ass_item(mat<2, 2, T> * self, PyObject* key, PyObject * value); template static int mat2x3_mp_ass_item(mat<2, 3, T> * self, PyObject* key, PyObject * value); template static int mat2x4_mp_ass_item(mat<2, 4, T> * self, PyObject* key, PyObject * value); template static int mat3x2_mp_ass_item(mat<3, 2, T> * self, PyObject* key, PyObject * value); template static int mat3x3_mp_ass_item(mat<3, 3, T> * self, PyObject* key, PyObject * value); template static int mat3x4_mp_ass_item(mat<3, 4, T> * self, PyObject* key, PyObject * value); template static int mat4x2_mp_ass_item(mat<4, 2, T> * self, PyObject* key, PyObject * value); template static int mat4x3_mp_ass_item(mat<4, 3, T> * self, PyObject* key, PyObject * value); template static int mat4x4_mp_ass_item(mat<4, 4, T> * self, PyObject* key, PyObject * value); template static int mat_contains(mat * self, PyObject * value); template static PyObject * matsq_add(PyObject *obj1, PyObject *obj2); template static PyObject * mat_add(PyObject *obj1, PyObject *obj2); template static PyObject * matsq_sub(PyObject *obj1, PyObject *obj2); template static PyObject * mat_sub(PyObject *obj1, PyObject *obj2); template static PyObject * mat_mul(PyObject *obj1, PyObject *obj2); template static PyObject * mat_neg(mat *obj); template static PyObject * mat_pos(mat *obj); template static PyObject * mat_abs(mat *obj); static PyObject* mat_matmul(PyObject* obj1, PyObject* obj2); template static PyObject * matsq_iadd(mat* self, PyObject *obj); template static PyObject * mat_iadd(mat* self, PyObject *obj); template static PyObject * matsq_isub(mat* self, PyObject *obj); template static PyObject * mat_isub(mat* self, PyObject *obj); template static PyObject * mat_imul(mat* self, PyObject *obj); template static PyObject * mat_div(PyObject *obj1, PyObject *obj2); template static PyObject * matsq_div(PyObject *obj1, PyObject *obj2); template static PyObject * matsq_idiv(mat* self, PyObject *obj); template static PyObject * mat_idiv(mat* self, PyObject *obj); template static PyObject* mat_imatmul(mat* self, PyObject* obj); static void mat_dealloc(PyObject* self); template static PyObject* mat2x2_str(mat<2, 2, T>* self); template static PyObject* mat2x3_str(mat<2, 3, T>* self); template static PyObject* mat2x4_str(mat<2, 4, T>* self); template static PyObject* mat3x2_str(mat<3, 2, T>* self); template static PyObject* mat3x3_str(mat<3, 3, T>* self); template static PyObject* mat3x4_str(mat<3, 4, T>* self); template static PyObject* mat4x2_str(mat<4, 2, T>* self); template static PyObject* mat4x3_str(mat<4, 3, T>* self); template static PyObject* mat4x4_str(mat<4, 4, T>* self); template static PyObject* mat2x2_repr(mat<2, 2, T>* self); template static PyObject* mat2x3_repr(mat<2, 3, T>* self); template static PyObject* mat2x4_repr(mat<2, 4, T>* self); template static PyObject* mat3x2_repr(mat<3, 2, T>* self); template static PyObject* mat3x3_repr(mat<3, 3, T>* self); template static PyObject* mat3x4_repr(mat<3, 4, T>* self); template static PyObject* mat4x2_repr(mat<4, 2, T>* self); template static PyObject* mat4x3_repr(mat<4, 3, T>* self); template static PyObject* mat4x4_repr(mat<4, 4, T>* self); template static PyObject* mat_richcompare(mat* self, PyObject* other, int comp_type); template static PyObject* mat_geniter(mat* self); template static int mat2x2_init(mat<2, 2, T> *self, PyObject *args, PyObject *kwds); template static int mat2x3_init(mat<2, 3, T> *self, PyObject *args, PyObject *kwds); template static int mat2x4_init(mat<2, 4, T> *self, PyObject *args, PyObject *kwds); template static int mat3x2_init(mat<3, 2, T> *self, PyObject *args, PyObject *kwds); template static int mat3x3_init(mat<3, 3, T> *self, PyObject *args, PyObject *kwds); template static int mat3x4_init(mat<3, 4, T> *self, PyObject *args, PyObject *kwds); template static int mat4x2_init(mat<4, 2, T> *self, PyObject *args, PyObject *kwds); template static int mat4x3_init(mat<4, 3, T> *self, PyObject *args, PyObject *kwds); template static int mat4x4_init(mat<4, 4, T> *self, PyObject *args, PyObject *kwds); template static PyObject* mat_new(PyTypeObject *type, PyObject *args, PyObject *kwds); template static void matIter_dealloc(matIter *rgstate); template static PyObject* matIter_next(matIter *rgstate); template static PyObject* matIter_new(PyTypeObject *type, PyObject *args, PyObject *kwargs); template static PyObject* mat_from_bytes(PyObject*, PyObject* arg); template static Py_hash_t mat_hash(mat* self, PyObject*); template static PyObject* mat_to_list(mat* self, PyObject*); template static PyObject* mat_to_tuple(mat* self, PyObject*); template static PyObject* mat_setstate(mat* self, PyObject* state);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/int/000077500000000000000000000000001511156275200220265ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/int/all.h000066400000000000000000000003671511156275200227550ustar00rootroot00000000000000#ifndef TYPES_MAT_INT_ALL_H #define TYPES_MAT_INT_ALL_H #include "mat2x2.h" #include "mat2x3.h" #include "mat2x4.h" #include "mat3x2.h" #include "mat3x3.h" #include "mat3x4.h" #include "mat4x2.h" #include "mat4x3.h" #include "mat4x4.h" #endif Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/int/mat2x2.h000066400000000000000000000154501511156275200233210ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef himat2x2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<2>, METH_NOARGS, "returns the length of glm::imat2x2"}, { "__getstate__", (PyCFunction)mat_to_tuple<2, 2, glm::i32>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<2, 2, glm::i32>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<2, 2, glm::i32>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<2, 2, glm::i32>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<2, 2, glm::i32>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs himat2x2BufferMethods = { (getbufferproc)mat_getbuffer<2, 2, glm::i32>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods himat2x2SeqMethods = { (lenfunc)mat_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<2, 2, glm::i32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods himat2x2MapMethods = { (lenfunc)mat_len<2>, // mp_length (binaryfunc)mat2x2_mp_item, // mp_subscript (objobjargproc)mat2x2_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods himat2x2NumMethods = { (binaryfunc)matsq_add<2, 2, glm::i32>, //nb_add (binaryfunc)matsq_sub<2, 2, glm::i32>, //nb_subtract (binaryfunc)mat_mul<2, 2, glm::i32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<2, 2, glm::i32>, //nb_negative (unaryfunc)mat_pos<2, 2, glm::i32>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_glm::i32 (binaryfunc)matsq_iadd<2, 2, glm::i32>, //nb_inplace_add (binaryfunc)matsq_isub<2, 2, glm::i32>, //nb_inplace_subtract (binaryfunc)mat_imul<2, 2, glm::i32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<2, 2, glm::i32>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<2, 2, glm::i32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<2, 2, glm::i32>, //nb_inplace_matrix_multiply }; static PyTypeObject himat2x2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "imat2x2Iter", /* tp_name */ sizeof(matIter<2, 2, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<2, 2, glm::i32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "imat2x2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<2, 2, glm::i32>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<2, 2, glm::i32>, /* tp_new */ }; static PyGLMTypeObject himat2x2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.imat2x2", /* tp_name */ sizeof(mat<2, 2, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat2x2_repr, /* tp_repr */ & himat2x2NumMethods, /* tp_as_number */ & himat2x2SeqMethods, /* tp_as_sequence */ & himat2x2MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<2, 2, glm::i32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat2x2_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & himat2x2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "imat2x2( )\n2 columns of 2 components matrix of integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<2, 2, glm::i32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<2, 2, glm::i32>, /* tp_iter */ 0, /* tp_iternext */ himat2x2_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat2x2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<2, 2, glm::i32>, /* tp_new */ }, PyGLM_TYPE_MAT, 2, 2, sizeof(int32), sizeof(glm::mat<2, 2, int32>), PyGLM_FS_INT32 }; static PyTypeObject& himat2x2Type = *((PyTypeObject*)&himat2x2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/int/mat2x3.h000066400000000000000000000154401511156275200233210ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef himat2x3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<2>, METH_NOARGS, "returns the length of glm::imat2x3"}, { "__getstate__", (PyCFunction)mat_to_tuple<2, 3, glm::i32>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<2, 3, glm::i32>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<2, 3, glm::i32>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<2, 3, glm::i32>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<2, 3, glm::i32>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs himat2x3BufferMethods = { (getbufferproc)mat_getbuffer<2, 3, glm::i32>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods himat2x3SeqMethods = { (lenfunc)mat_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<2, 3, glm::i32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods himat2x3MapMethods = { (lenfunc)mat_len<2>, // mp_length (binaryfunc)mat2x3_mp_item, // mp_subscript (objobjargproc)mat2x3_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods himat2x3NumMethods = { (binaryfunc)mat_add<2, 3, glm::i32>, //nb_add (binaryfunc)mat_sub<2, 3, glm::i32>, //nb_subtract (binaryfunc)mat_mul<2, 3, glm::i32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<2, 3, glm::i32>, //nb_negative (unaryfunc)mat_pos<2, 3, glm::i32>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_glm::i32 (binaryfunc)mat_iadd<2, 3, glm::i32>, //nb_inplace_add (binaryfunc)mat_isub<2, 3, glm::i32>, //nb_inplace_subtract (binaryfunc)mat_imul<2, 3, glm::i32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<2, 3, glm::i32>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<2, 3, glm::i32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<2, 3, glm::i32>, //nb_inplace_matrix_multiply }; static PyTypeObject himat2x3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "imat2x3Iter", /* tp_name */ sizeof(matIter<2, 3, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<2, 3, glm::i32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "imat2x3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<2, 3, glm::i32>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<2, 3, glm::i32>, /* tp_new */ }; static PyGLMTypeObject himat2x3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.imat2x3", /* tp_name */ sizeof(mat<2, 3, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat2x3_repr, /* tp_repr */ & himat2x3NumMethods, /* tp_as_number */ & himat2x3SeqMethods, /* tp_as_sequence */ & himat2x3MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<2, 3, glm::i32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat2x3_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & himat2x3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "imat2x3( )\n2 columns of 3 components matrix of integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<2, 3, glm::i32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<2, 3, glm::i32>, /* tp_iter */ 0, /* tp_iternext */ himat2x3_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat2x3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<2, 3, glm::i32>, /* tp_new */ }, PyGLM_TYPE_MAT, 2, 3, sizeof(int32), sizeof(glm::mat<2, 3, int32>), PyGLM_FS_INT32 }; static PyTypeObject& himat2x3Type = *((PyTypeObject*)&himat2x3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/int/mat2x4.h000066400000000000000000000154401511156275200233220ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef himat2x4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<2>, METH_NOARGS, "returns the length of glm::imat2x4"}, { "__getstate__", (PyCFunction)mat_to_tuple<2, 4, glm::i32>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<2, 4, glm::i32>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<2, 4, glm::i32>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<2, 4, glm::i32>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<2, 4, glm::i32>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs himat2x4BufferMethods = { (getbufferproc)mat_getbuffer<2, 4, glm::i32>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods himat2x4SeqMethods = { (lenfunc)mat_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<2, 4, glm::i32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods himat2x4MapMethods = { (lenfunc)mat_len<2>, // mp_length (binaryfunc)mat2x4_mp_item, // mp_subscript (objobjargproc)mat2x4_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods himat2x4NumMethods = { (binaryfunc)mat_add<2, 4, glm::i32>, //nb_add (binaryfunc)mat_sub<2, 4, glm::i32>, //nb_subtract (binaryfunc)mat_mul<2, 4, glm::i32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<2, 4, glm::i32>, //nb_negative (unaryfunc)mat_pos<2, 4, glm::i32>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_glm::i32 (binaryfunc)mat_iadd<2, 4, glm::i32>, //nb_inplace_add (binaryfunc)mat_isub<2, 4, glm::i32>, //nb_inplace_subtract (binaryfunc)mat_imul<2, 4, glm::i32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<2, 4, glm::i32>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<2, 4, glm::i32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<2, 4, glm::i32>, //nb_inplace_matrix_multiply }; static PyTypeObject himat2x4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "imat2x4Iter", /* tp_name */ sizeof(matIter<2, 4, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<2, 4, glm::i32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "imat2x4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<2, 4, glm::i32>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<2, 4, glm::i32>, /* tp_new */ }; static PyGLMTypeObject himat2x4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.imat2x4", /* tp_name */ sizeof(mat<2, 4, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat2x4_repr, /* tp_repr */ & himat2x4NumMethods, /* tp_as_number */ & himat2x4SeqMethods, /* tp_as_sequence */ & himat2x4MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<2, 4, glm::i32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat2x4_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & himat2x4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "imat2x4( )\n2 columns of 4 components matrix of integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<2, 4, glm::i32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<2, 4, glm::i32>, /* tp_iter */ 0, /* tp_iternext */ himat2x4_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat2x4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<2, 4, glm::i32>, /* tp_new */ }, PyGLM_TYPE_MAT, 2, 4, sizeof(int32), sizeof(glm::mat<2, 4, int32>), PyGLM_FS_INT32 }; static PyTypeObject& himat2x4Type = *((PyTypeObject*)&himat2x4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/int/mat3x2.h000066400000000000000000000154401511156275200233210ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef himat3x2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<3>, METH_NOARGS, "returns the length of glm::imat3x2"}, { "__getstate__", (PyCFunction)mat_to_tuple<3, 2, glm::i32>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<3, 2, glm::i32>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<3, 2, glm::i32>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<3, 2, glm::i32>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<3, 2, glm::i32>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs himat3x2BufferMethods = { (getbufferproc)mat_getbuffer<3, 2, glm::i32>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods himat3x2SeqMethods = { (lenfunc)mat_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<3, 2, glm::i32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods himat3x2MapMethods = { (lenfunc)mat_len<3>, // mp_length (binaryfunc)mat3x2_mp_item, // mp_subscript (objobjargproc)mat3x2_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods himat3x2NumMethods = { (binaryfunc)mat_add<3, 2, glm::i32>, //nb_add (binaryfunc)mat_sub<3, 2, glm::i32>, //nb_subtract (binaryfunc)mat_mul<3, 2, glm::i32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<3, 2, glm::i32>, //nb_negative (unaryfunc)mat_pos<3, 2, glm::i32>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_glm::i32 (binaryfunc)mat_iadd<3, 2, glm::i32>, //nb_inplace_add (binaryfunc)mat_isub<3, 2, glm::i32>, //nb_inplace_subtract (binaryfunc)mat_imul<3, 2, glm::i32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<3, 2, glm::i32>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<3, 2, glm::i32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<3, 2, glm::i32>, //nb_inplace_matrix_multiply }; static PyTypeObject himat3x2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "imat3x2Iter", /* tp_name */ sizeof(matIter<3, 2, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<3, 2, glm::i32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "imat3x2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<3, 2, glm::i32>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<3, 2, glm::i32>, /* tp_new */ }; static PyGLMTypeObject himat3x2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.imat3x2", /* tp_name */ sizeof(mat<3, 2, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat3x2_repr, /* tp_repr */ & himat3x2NumMethods, /* tp_as_number */ & himat3x2SeqMethods, /* tp_as_sequence */ & himat3x2MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<3, 2, glm::i32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat3x2_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & himat3x2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "imat3x2( )\n3 columns of 2 components matrix of integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<3, 2, glm::i32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<3, 2, glm::i32>, /* tp_iter */ 0, /* tp_iternext */ himat3x2_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat3x2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<3, 2, glm::i32>, /* tp_new */ }, PyGLM_TYPE_MAT, 3, 2, sizeof(int32), sizeof(glm::mat<3, 2, int32>), PyGLM_FS_INT32 }; static PyTypeObject& himat3x2Type = *((PyTypeObject*)&himat3x2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/int/mat3x3.h000066400000000000000000000154501511156275200233230ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef himat3x3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<3>, METH_NOARGS, "returns the length of glm::imat3x3"}, { "__getstate__", (PyCFunction)mat_to_tuple<3, 3, glm::i32>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<3, 3, glm::i32>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<3, 3, glm::i32>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<3, 3, glm::i32>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<3, 3, glm::i32>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs himat3x3BufferMethods = { (getbufferproc)mat_getbuffer<3, 3, glm::i32>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods himat3x3SeqMethods = { (lenfunc)mat_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<3, 3, glm::i32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods himat3x3MapMethods = { (lenfunc)mat_len<3>, // mp_length (binaryfunc)mat3x3_mp_item, // mp_subscript (objobjargproc)mat3x3_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods himat3x3NumMethods = { (binaryfunc)matsq_add<3, 3, glm::i32>, //nb_add (binaryfunc)matsq_sub<3, 3, glm::i32>, //nb_subtract (binaryfunc)mat_mul<3, 3, glm::i32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<3, 3, glm::i32>, //nb_negative (unaryfunc)mat_pos<3, 3, glm::i32>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_glm::i32 (binaryfunc)matsq_iadd<3, 3, glm::i32>, //nb_inplace_add (binaryfunc)matsq_isub<3, 3, glm::i32>, //nb_inplace_subtract (binaryfunc)mat_imul<3, 3, glm::i32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<3, 3, glm::i32>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<3, 3, glm::i32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<3, 3, glm::i32>, //nb_inplace_matrix_multiply }; static PyTypeObject himat3x3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "imat3x3Iter", /* tp_name */ sizeof(matIter<3, 3, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<3, 3, glm::i32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "imat3x3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<3, 3, glm::i32>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<3, 3, glm::i32>, /* tp_new */ }; static PyGLMTypeObject himat3x3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.imat3x3", /* tp_name */ sizeof(mat<3, 3, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat3x3_repr, /* tp_repr */ & himat3x3NumMethods, /* tp_as_number */ & himat3x3SeqMethods, /* tp_as_sequence */ & himat3x3MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<3, 3, glm::i32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat3x3_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & himat3x3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "imat3x3( )\n3 columns of 3 components matrix of integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<3, 3, glm::i32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<3, 3, glm::i32>, /* tp_iter */ 0, /* tp_iternext */ himat3x3_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat3x3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<3, 3, glm::i32>, /* tp_new */ }, PyGLM_TYPE_MAT, 3, 3, sizeof(int32), sizeof(glm::mat<3, 3, int32>), PyGLM_FS_INT32 }; static PyTypeObject& himat3x3Type = *((PyTypeObject*)&himat3x3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/int/mat3x4.h000066400000000000000000000154401511156275200233230ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef himat3x4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<3>, METH_NOARGS, "returns the length of glm::imat3x4"}, { "__getstate__", (PyCFunction)mat_to_tuple<3, 4, glm::i32>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<3, 4, glm::i32>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<3, 4, glm::i32>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<3, 4, glm::i32>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<3, 4, glm::i32>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs himat3x4BufferMethods = { (getbufferproc)mat_getbuffer<3, 4, glm::i32>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods himat3x4SeqMethods = { (lenfunc)mat_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<3, 4, glm::i32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods himat3x4MapMethods = { (lenfunc)mat_len<3>, // mp_length (binaryfunc)mat3x4_mp_item, // mp_subscript (objobjargproc)mat3x4_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods himat3x4NumMethods = { (binaryfunc)mat_add<3, 4, glm::i32>, //nb_add (binaryfunc)mat_sub<3, 4, glm::i32>, //nb_subtract (binaryfunc)mat_mul<3, 4, glm::i32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<3, 4, glm::i32>, //nb_negative (unaryfunc)mat_pos<3, 4, glm::i32>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_glm::i32 (binaryfunc)mat_iadd<3, 4, glm::i32>, //nb_inplace_add (binaryfunc)mat_isub<3, 4, glm::i32>, //nb_inplace_subtract (binaryfunc)mat_imul<3, 4, glm::i32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<3, 4, glm::i32>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<3, 4, glm::i32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<3, 4, glm::i32>, //nb_inplace_matrix_multiply }; static PyTypeObject himat3x4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "imat3x4Iter", /* tp_name */ sizeof(matIter<3, 4, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<3, 4, glm::i32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "imat3x4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<3, 4, glm::i32>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<3, 4, glm::i32>, /* tp_new */ }; static PyGLMTypeObject himat3x4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.imat3x4", /* tp_name */ sizeof(mat<3, 4, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat3x4_repr, /* tp_repr */ & himat3x4NumMethods, /* tp_as_number */ & himat3x4SeqMethods, /* tp_as_sequence */ & himat3x4MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<3, 4, glm::i32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat3x4_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & himat3x4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "imat3x4( )\n3 columns of 4 components matrix of integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<3, 4, glm::i32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<3, 4, glm::i32>, /* tp_iter */ 0, /* tp_iternext */ himat3x4_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat3x4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<3, 4, glm::i32>, /* tp_new */ }, PyGLM_TYPE_MAT, 3, 4, sizeof(int32), sizeof(glm::mat<3, 4, int32>), PyGLM_FS_INT32 }; static PyTypeObject& himat3x4Type = *((PyTypeObject*)&himat3x4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/int/mat4x2.h000066400000000000000000000154401511156275200233220ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef himat4x2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<4>, METH_NOARGS, "returns the length of glm::imat4x2"}, { "__getstate__", (PyCFunction)mat_to_tuple<4, 2, glm::i32>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<4, 2, glm::i32>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<4, 2, glm::i32>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<4, 2, glm::i32>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<4, 2, glm::i32>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs himat4x2BufferMethods = { (getbufferproc)mat_getbuffer<4, 2, glm::i32>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods himat4x2SeqMethods = { (lenfunc)mat_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<4, 2, glm::i32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods himat4x2MapMethods = { (lenfunc)mat_len<4>, // mp_length (binaryfunc)mat4x2_mp_item, // mp_subscript (objobjargproc)mat4x2_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods himat4x2NumMethods = { (binaryfunc)mat_add<4, 2, glm::i32>, //nb_add (binaryfunc)mat_sub<4, 2, glm::i32>, //nb_subtract (binaryfunc)mat_mul<4, 2, glm::i32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<4, 2, glm::i32>, //nb_negative (unaryfunc)mat_pos<4, 2, glm::i32>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_glm::i32 (binaryfunc)mat_iadd<4, 2, glm::i32>, //nb_inplace_add (binaryfunc)mat_isub<4, 2, glm::i32>, //nb_inplace_subtract (binaryfunc)mat_imul<4, 2, glm::i32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<4, 2, glm::i32>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<4, 2, glm::i32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<4, 2, glm::i32>, //nb_inplace_matrix_multiply }; static PyTypeObject himat4x2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "imat4x2Iter", /* tp_name */ sizeof(matIter<4, 2, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<4, 2, glm::i32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "imat4x2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<4, 2, glm::i32>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<4, 2, glm::i32>, /* tp_new */ }; static PyGLMTypeObject himat4x2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.imat4x2", /* tp_name */ sizeof(mat<4, 2, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat4x2_repr, /* tp_repr */ & himat4x2NumMethods, /* tp_as_number */ & himat4x2SeqMethods, /* tp_as_sequence */ & himat4x2MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<4, 2, glm::i32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat4x2_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & himat4x2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "imat4x2( )\n4 columns of 2 components matrix of integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<4, 2, glm::i32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<4, 2, glm::i32>, /* tp_iter */ 0, /* tp_iternext */ himat4x2_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat4x2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<4, 2, glm::i32>, /* tp_new */ }, PyGLM_TYPE_MAT, 4, 2, sizeof(int32), sizeof(glm::mat<4, 2, int32>), PyGLM_FS_INT32 }; static PyTypeObject& himat4x2Type = *((PyTypeObject*)&himat4x2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/int/mat4x3.h000066400000000000000000000154401511156275200233230ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef himat4x3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<4>, METH_NOARGS, "returns the length of glm::imat4x3"}, { "__getstate__", (PyCFunction)mat_to_tuple<4, 3, glm::i32>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<4, 3, glm::i32>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<4, 3, glm::i32>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<4, 3, glm::i32>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<4, 3, glm::i32>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs himat4x3BufferMethods = { (getbufferproc)mat_getbuffer<4, 3, glm::i32>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods himat4x3SeqMethods = { (lenfunc)mat_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<4, 3, glm::i32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods himat4x3MapMethods = { (lenfunc)mat_len<4>, // mp_length (binaryfunc)mat4x3_mp_item, // mp_subscript (objobjargproc)mat4x3_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods himat4x3NumMethods = { (binaryfunc)mat_add<4, 3, glm::i32>, //nb_add (binaryfunc)mat_sub<4, 3, glm::i32>, //nb_subtract (binaryfunc)mat_mul<4, 3, glm::i32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<4, 3, glm::i32>, //nb_negative (unaryfunc)mat_pos<4, 3, glm::i32>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_glm::i32 (binaryfunc)mat_iadd<4, 3, glm::i32>, //nb_inplace_add (binaryfunc)mat_isub<4, 3, glm::i32>, //nb_inplace_subtract (binaryfunc)mat_imul<4, 3, glm::i32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<4, 3, glm::i32>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<4, 3, glm::i32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<4, 3, glm::i32>, //nb_inplace_matrix_multiply }; static PyTypeObject himat4x3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "imat4x3Iter", /* tp_name */ sizeof(matIter<4, 3, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<4, 3, glm::i32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "imat4x3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<4, 3, glm::i32>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<4, 3, glm::i32>, /* tp_new */ }; static PyGLMTypeObject himat4x3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.imat4x3", /* tp_name */ sizeof(mat<4, 3, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat4x3_repr, /* tp_repr */ & himat4x3NumMethods, /* tp_as_number */ & himat4x3SeqMethods, /* tp_as_sequence */ & himat4x3MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<4, 3, glm::i32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat4x3_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & himat4x3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "imat4x3( )\n4 columns of 3 components matrix of integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<4, 3, glm::i32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<4, 3, glm::i32>, /* tp_iter */ 0, /* tp_iternext */ himat4x3_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat4x3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<4, 3, glm::i32>, /* tp_new */ }, PyGLM_TYPE_MAT, 4, 3, sizeof(int32), sizeof(glm::mat<4, 3, int32>), PyGLM_FS_INT32 }; static PyTypeObject& himat4x3Type = *((PyTypeObject*)&himat4x3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/int/mat4x4.h000066400000000000000000000154501511156275200233250ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef himat4x4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<4>, METH_NOARGS, "returns the length of glm::imat4x4"}, { "__getstate__", (PyCFunction)mat_to_tuple<4, 4, glm::i32>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<4, 4, glm::i32>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<4, 4, glm::i32>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<4, 4, glm::i32>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<4, 4, glm::i32>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs himat4x4BufferMethods = { (getbufferproc)mat_getbuffer<4, 4, glm::i32>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods himat4x4SeqMethods = { (lenfunc)mat_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<4, 4, glm::i32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods himat4x4MapMethods = { (lenfunc)mat_len<4>, // mp_length (binaryfunc)mat4x4_mp_item, // mp_subscript (objobjargproc)mat4x4_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods himat4x4NumMethods = { (binaryfunc)matsq_add<4, 4, glm::i32>, //nb_add (binaryfunc)matsq_sub<4, 4, glm::i32>, //nb_subtract (binaryfunc)mat_mul<4, 4, glm::i32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mat_neg<4, 4, glm::i32>, //nb_negative (unaryfunc)mat_pos<4, 4, glm::i32>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_glm::i32 (binaryfunc)matsq_iadd<4, 4, glm::i32>, //nb_inplace_add (binaryfunc)matsq_isub<4, 4, glm::i32>, //nb_inplace_subtract (binaryfunc)mat_imul<4, 4, glm::i32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<4, 4, glm::i32>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<4, 4, glm::i32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<4, 4, glm::i32>, //nb_inplace_matrix_multiply }; static PyTypeObject himat4x4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "imat4x4Iter", /* tp_name */ sizeof(matIter<4, 4, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<4, 4, glm::i32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "imat4x4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<4, 4, glm::i32>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<4, 4, glm::i32>, /* tp_new */ }; static PyGLMTypeObject himat4x4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.imat4x4", /* tp_name */ sizeof(mat<4, 4, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat4x4_repr, /* tp_repr */ & himat4x4NumMethods, /* tp_as_number */ & himat4x4SeqMethods, /* tp_as_sequence */ & himat4x4MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<4, 4, glm::i32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat4x4_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & himat4x4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "imat4x4( )\n4 columns of 4 components matrix of integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<4, 4, glm::i32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<4, 4, glm::i32>, /* tp_iter */ 0, /* tp_iternext */ himat4x4_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat4x4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<4, 4, glm::i32>, /* tp_new */ }, PyGLM_TYPE_MAT, 4, 4, sizeof(int32), sizeof(glm::mat<4, 4, int32>), PyGLM_FS_INT32 }; static PyTypeObject& himat4x4Type = *((PyTypeObject*)&himat4x4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/uint/000077500000000000000000000000001511156275200222135ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/uint/all.h000066400000000000000000000003701511156275200231340ustar00rootroot00000000000000#ifndef TYPES_MAT_UINT_ALL_H #define TYPES_MAT_UINT_ALL_H #include "mat2x2.h" #include "mat2x3.h" #include "mat2x4.h" #include "mat3x2.h" #include "mat3x3.h" #include "mat3x4.h" #include "mat4x2.h" #include "mat4x3.h" #include "mat4x4.h" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/uint/float.h000066400000000000000000000000151511156275200234650ustar00rootroot00000000000000#pragma once Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/uint/forward_declarations.h000066400000000000000000000043311511156275200265610ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyObject* qua_length(PyObject * self, PyObject* arg); template static int qua_getbuffer(qua* self, Py_buffer* view, int flags); void qua_releasebuffer(PyObject* self, Py_buffer* view); static Py_ssize_t qua_len(PyObject* self); template static PyObject* qua_sq_item(qua * self, Py_ssize_t index); template static int qua_sq_ass_item(qua * self, Py_ssize_t index, PyObject * value); template static int qua_contains(qua * self, PyObject * value); template static PyObject * qua_add(PyObject *obj1, PyObject *obj2); template static PyObject * qua_sub(PyObject *obj1, PyObject *obj2); template static PyObject * qua_mul(PyObject *obj1, PyObject *obj2); template static PyObject * qua_neg(qua *obj); template static PyObject * qua_pos(qua *obj); template static PyObject * qua_iadd(qua* self, PyObject *obj); template static PyObject * qua_isub(qua* self, PyObject *obj); template static PyObject * qua_imul(qua* self, PyObject *obj); template static PyObject * qua_div(PyObject *obj1, PyObject *obj2); template static PyObject * qua_idiv(qua* self, PyObject *obj); static void qua_dealloc(PyObject* self); template static PyObject* qua_str(qua* self); template static PyObject* qua_repr(qua* self); template static PyObject* qua_richcompare(qua* self, PyObject* other, int comp_type); template static PyObject* qua_geniter(qua* self); template static int qua_init(qua *self, PyObject *args, PyObject *kwds); template static PyObject* qua_new(PyTypeObject *type, PyObject *args, PyObject *kwds); template static void quaIter_dealloc(quaIter *rgstate); template static PyObject* quaIter_next(quaIter *rgstate); template static PyObject* quaIter_new(PyTypeObject *type, PyObject *args, PyObject *kwargs); template static PyObject* qua_to_list(qua* self, PyObject*); template static PyObject* qua_to_tuple(qua* self, PyObject*);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/uint/mat2x2.h000066400000000000000000000154231511156275200235060ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef humat2x2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<2>, METH_NOARGS, "returns the length of glm::umat2x2"}, { "__getstate__", (PyCFunction)mat_to_tuple<2, 2, glm::u32>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<2, 2, glm::u32>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<2, 2, glm::u32>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<2, 2, glm::u32>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<2, 2, glm::u32>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs humat2x2BufferMethods = { (getbufferproc)mat_getbuffer<2, 2, glm::u32>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods humat2x2SeqMethods = { (lenfunc)mat_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<2, 2, glm::u32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods humat2x2MapMethods = { (lenfunc)mat_len<2>, // mp_length (binaryfunc)mat2x2_mp_item, // mp_subscript (objobjargproc)mat2x2_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods humat2x2NumMethods = { (binaryfunc)matsq_add<2, 2, glm::u32>, //nb_add (binaryfunc)matsq_sub<2, 2, glm::u32>, //nb_subtract (binaryfunc)mat_mul<2, 2, glm::u32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)mat_pos<2, 2, glm::u32>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_glm::u32 (binaryfunc)matsq_iadd<2, 2, glm::u32>, //nb_inplace_add (binaryfunc)matsq_isub<2, 2, glm::u32>, //nb_inplace_subtract (binaryfunc)mat_imul<2, 2, glm::u32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<2, 2, glm::u32>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<2, 2, glm::u32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<2, 2, glm::u32>, //nb_inplace_matrix_multiply }; static PyTypeObject humat2x2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "umat2x2Iter", /* tp_name */ sizeof(matIter<2, 2, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<2, 2, glm::u32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "umat2x2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<2, 2, glm::u32>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<2, 2, glm::u32>, /* tp_new */ }; static PyGLMTypeObject humat2x2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.umat2x2", /* tp_name */ sizeof(mat<2, 2, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat2x2_repr, /* tp_repr */ & humat2x2NumMethods, /* tp_as_number */ & humat2x2SeqMethods, /* tp_as_sequence */ & humat2x2MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<2, 2, glm::u32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat2x2_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & humat2x2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "umat2x2( )\n2 columns of 2 components matrix of unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<2, 2, glm::u32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<2, 2, glm::u32>, /* tp_iter */ 0, /* tp_iternext */ humat2x2_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat2x2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<2, 2, glm::u32>, /* tp_new */ }, PyGLM_TYPE_MAT, 2, 2, sizeof(uint32), sizeof(glm::mat<2, 2, uint32>), PyGLM_FS_UINT32 }; static PyTypeObject& humat2x2Type = *((PyTypeObject*)&humat2x2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/uint/mat2x3.h000066400000000000000000000154131511156275200235060ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef humat2x3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<2>, METH_NOARGS, "returns the length of glm::umat2x3"}, { "__getstate__", (PyCFunction)mat_to_tuple<2, 3, glm::u32>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<2, 3, glm::u32>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<2, 3, glm::u32>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<2, 3, glm::u32>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<2, 3, glm::u32>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs humat2x3BufferMethods = { (getbufferproc)mat_getbuffer<2, 3, glm::u32>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods humat2x3SeqMethods = { (lenfunc)mat_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<2, 3, glm::u32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods humat2x3MapMethods = { (lenfunc)mat_len<2>, // mp_length (binaryfunc)mat2x3_mp_item, // mp_subscript (objobjargproc)mat2x3_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods humat2x3NumMethods = { (binaryfunc)mat_add<2, 3, glm::u32>, //nb_add (binaryfunc)mat_sub<2, 3, glm::u32>, //nb_subtract (binaryfunc)mat_mul<2, 3, glm::u32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)mat_pos<2, 3, glm::u32>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_glm::u32 (binaryfunc)mat_iadd<2, 3, glm::u32>, //nb_inplace_add (binaryfunc)mat_isub<2, 3, glm::u32>, //nb_inplace_subtract (binaryfunc)mat_imul<2, 3, glm::u32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<2, 3, glm::u32>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<2, 3, glm::u32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<2, 3, glm::u32>, //nb_inplace_matrix_multiply }; static PyTypeObject humat2x3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "umat2x3Iter", /* tp_name */ sizeof(matIter<2, 3, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<2, 3, glm::u32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "umat2x3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<2, 3, glm::u32>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<2, 3, glm::u32>, /* tp_new */ }; static PyGLMTypeObject humat2x3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.umat2x3", /* tp_name */ sizeof(mat<2, 3, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat2x3_repr, /* tp_repr */ & humat2x3NumMethods, /* tp_as_number */ & humat2x3SeqMethods, /* tp_as_sequence */ & humat2x3MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<2, 3, glm::u32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat2x3_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & humat2x3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "umat2x3( )\n2 columns of 3 components matrix of unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<2, 3, glm::u32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<2, 3, glm::u32>, /* tp_iter */ 0, /* tp_iternext */ humat2x3_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat2x3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<2, 3, glm::u32>, /* tp_new */ }, PyGLM_TYPE_MAT, 2, 3, sizeof(uint32), sizeof(glm::mat<2, 3, uint32>), PyGLM_FS_UINT32 }; static PyTypeObject& humat2x3Type = *((PyTypeObject*)&humat2x3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/uint/mat2x4.h000066400000000000000000000154131511156275200235070ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef humat2x4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<2>, METH_NOARGS, "returns the length of glm::umat2x4"}, { "__getstate__", (PyCFunction)mat_to_tuple<2, 4, glm::u32>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<2, 4, glm::u32>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<2, 4, glm::u32>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<2, 4, glm::u32>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<2, 4, glm::u32>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs humat2x4BufferMethods = { (getbufferproc)mat_getbuffer<2, 4, glm::u32>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods humat2x4SeqMethods = { (lenfunc)mat_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<2, 4, glm::u32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods humat2x4MapMethods = { (lenfunc)mat_len<2>, // mp_length (binaryfunc)mat2x4_mp_item, // mp_subscript (objobjargproc)mat2x4_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods humat2x4NumMethods = { (binaryfunc)mat_add<2, 4, glm::u32>, //nb_add (binaryfunc)mat_sub<2, 4, glm::u32>, //nb_subtract (binaryfunc)mat_mul<2, 4, glm::u32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)mat_pos<2, 4, glm::u32>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_glm::u32 (binaryfunc)mat_iadd<2, 4, glm::u32>, //nb_inplace_add (binaryfunc)mat_isub<2, 4, glm::u32>, //nb_inplace_subtract (binaryfunc)mat_imul<2, 4, glm::u32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<2, 4, glm::u32>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<2, 4, glm::u32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<2, 4, glm::u32>, //nb_inplace_matrix_multiply }; static PyTypeObject humat2x4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "umat2x4Iter", /* tp_name */ sizeof(matIter<2, 4, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<2, 4, glm::u32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "umat2x4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<2, 4, glm::u32>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<2, 4, glm::u32>, /* tp_new */ }; static PyGLMTypeObject humat2x4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.umat2x4", /* tp_name */ sizeof(mat<2, 4, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat2x4_repr, /* tp_repr */ & humat2x4NumMethods, /* tp_as_number */ & humat2x4SeqMethods, /* tp_as_sequence */ & humat2x4MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<2, 4, glm::u32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat2x4_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & humat2x4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "umat2x4( )\n2 columns of 4 components matrix of unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<2, 4, glm::u32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<2, 4, glm::u32>, /* tp_iter */ 0, /* tp_iternext */ humat2x4_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat2x4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<2, 4, glm::u32>, /* tp_new */ }, PyGLM_TYPE_MAT, 2, 4, sizeof(uint32), sizeof(glm::mat<2, 4, uint32>), PyGLM_FS_UINT32 }; static PyTypeObject& humat2x4Type = *((PyTypeObject*)&humat2x4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/uint/mat3x2.h000066400000000000000000000154131511156275200235060ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef humat3x2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<3>, METH_NOARGS, "returns the length of glm::umat3x2"}, { "__getstate__", (PyCFunction)mat_to_tuple<3, 2, glm::u32>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<3, 2, glm::u32>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<3, 2, glm::u32>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<3, 2, glm::u32>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<3, 2, glm::u32>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs humat3x2BufferMethods = { (getbufferproc)mat_getbuffer<3, 2, glm::u32>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods humat3x2SeqMethods = { (lenfunc)mat_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<3, 2, glm::u32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods humat3x2MapMethods = { (lenfunc)mat_len<3>, // mp_length (binaryfunc)mat3x2_mp_item, // mp_subscript (objobjargproc)mat3x2_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods humat3x2NumMethods = { (binaryfunc)mat_add<3, 2, glm::u32>, //nb_add (binaryfunc)mat_sub<3, 2, glm::u32>, //nb_subtract (binaryfunc)mat_mul<3, 2, glm::u32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)mat_pos<3, 2, glm::u32>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_glm::u32 (binaryfunc)mat_iadd<3, 2, glm::u32>, //nb_inplace_add (binaryfunc)mat_isub<3, 2, glm::u32>, //nb_inplace_subtract (binaryfunc)mat_imul<3, 2, glm::u32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<3, 2, glm::u32>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<3, 2, glm::u32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<3, 2, glm::u32>, //nb_inplace_matrix_multiply }; static PyTypeObject humat3x2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "umat3x2Iter", /* tp_name */ sizeof(matIter<3, 2, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<3, 2, glm::u32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "umat3x2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<3, 2, glm::u32>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<3, 2, glm::u32>, /* tp_new */ }; static PyGLMTypeObject humat3x2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.umat3x2", /* tp_name */ sizeof(mat<3, 2, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat3x2_repr, /* tp_repr */ & humat3x2NumMethods, /* tp_as_number */ & humat3x2SeqMethods, /* tp_as_sequence */ & humat3x2MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<3, 2, glm::u32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat3x2_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & humat3x2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "umat3x2( )\n3 columns of 2 components matrix of unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<3, 2, glm::u32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<3, 2, glm::u32>, /* tp_iter */ 0, /* tp_iternext */ humat3x2_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat3x2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<3, 2, glm::u32>, /* tp_new */ }, PyGLM_TYPE_MAT, 3, 2, sizeof(uint32), sizeof(glm::mat<3, 2, uint32>), PyGLM_FS_UINT32 }; static PyTypeObject& humat3x2Type = *((PyTypeObject*)&humat3x2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/uint/mat3x3.h000066400000000000000000000154231511156275200235100ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef humat3x3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<3>, METH_NOARGS, "returns the length of glm::umat3x3"}, { "__getstate__", (PyCFunction)mat_to_tuple<3, 3, glm::u32>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<3, 3, glm::u32>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<3, 3, glm::u32>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<3, 3, glm::u32>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<3, 3, glm::u32>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs humat3x3BufferMethods = { (getbufferproc)mat_getbuffer<3, 3, glm::u32>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods humat3x3SeqMethods = { (lenfunc)mat_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<3, 3, glm::u32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods humat3x3MapMethods = { (lenfunc)mat_len<3>, // mp_length (binaryfunc)mat3x3_mp_item, // mp_subscript (objobjargproc)mat3x3_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods humat3x3NumMethods = { (binaryfunc)matsq_add<3, 3, glm::u32>, //nb_add (binaryfunc)matsq_sub<3, 3, glm::u32>, //nb_subtract (binaryfunc)mat_mul<3, 3, glm::u32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)mat_pos<3, 3, glm::u32>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_glm::u32 (binaryfunc)matsq_iadd<3, 3, glm::u32>, //nb_inplace_add (binaryfunc)matsq_isub<3, 3, glm::u32>, //nb_inplace_subtract (binaryfunc)mat_imul<3, 3, glm::u32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<3, 3, glm::u32>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<3, 3, glm::u32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<3, 3, glm::u32>, //nb_inplace_matrix_multiply }; static PyTypeObject humat3x3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "umat3x3Iter", /* tp_name */ sizeof(matIter<3, 3, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<3, 3, glm::u32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "umat3x3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<3, 3, glm::u32>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<3, 3, glm::u32>, /* tp_new */ }; static PyGLMTypeObject humat3x3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.umat3x3", /* tp_name */ sizeof(mat<3, 3, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat3x3_repr, /* tp_repr */ & humat3x3NumMethods, /* tp_as_number */ & humat3x3SeqMethods, /* tp_as_sequence */ & humat3x3MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<3, 3, glm::u32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat3x3_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & humat3x3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "umat3x3( )\n3 columns of 3 components matrix of unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<3, 3, glm::u32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<3, 3, glm::u32>, /* tp_iter */ 0, /* tp_iternext */ humat3x3_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat3x3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<3, 3, glm::u32>, /* tp_new */ }, PyGLM_TYPE_MAT, 3, 3, sizeof(uint32), sizeof(glm::mat<3, 3, uint32>), PyGLM_FS_UINT32 }; static PyTypeObject& humat3x3Type = *((PyTypeObject*)&humat3x3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/uint/mat3x4.h000066400000000000000000000154131511156275200235100ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef humat3x4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<3>, METH_NOARGS, "returns the length of glm::umat3x4"}, { "__getstate__", (PyCFunction)mat_to_tuple<3, 4, glm::u32>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<3, 4, glm::u32>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<3, 4, glm::u32>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<3, 4, glm::u32>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<3, 4, glm::u32>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs humat3x4BufferMethods = { (getbufferproc)mat_getbuffer<3, 4, glm::u32>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods humat3x4SeqMethods = { (lenfunc)mat_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<3, 4, glm::u32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods humat3x4MapMethods = { (lenfunc)mat_len<3>, // mp_length (binaryfunc)mat3x4_mp_item, // mp_subscript (objobjargproc)mat3x4_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods humat3x4NumMethods = { (binaryfunc)mat_add<3, 4, glm::u32>, //nb_add (binaryfunc)mat_sub<3, 4, glm::u32>, //nb_subtract (binaryfunc)mat_mul<3, 4, glm::u32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)mat_pos<3, 4, glm::u32>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_glm::u32 (binaryfunc)mat_iadd<3, 4, glm::u32>, //nb_inplace_add (binaryfunc)mat_isub<3, 4, glm::u32>, //nb_inplace_subtract (binaryfunc)mat_imul<3, 4, glm::u32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<3, 4, glm::u32>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<3, 4, glm::u32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<3, 4, glm::u32>, //nb_inplace_matrix_multiply }; static PyTypeObject humat3x4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "umat3x4Iter", /* tp_name */ sizeof(matIter<3, 4, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<3, 4, glm::u32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "umat3x4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<3, 4, glm::u32>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<3, 4, glm::u32>, /* tp_new */ }; static PyGLMTypeObject humat3x4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.umat3x4", /* tp_name */ sizeof(mat<3, 4, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat3x4_repr, /* tp_repr */ & humat3x4NumMethods, /* tp_as_number */ & humat3x4SeqMethods, /* tp_as_sequence */ & humat3x4MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<3, 4, glm::u32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat3x4_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & humat3x4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "umat3x4( )\n3 columns of 4 components matrix of unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<3, 4, glm::u32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<3, 4, glm::u32>, /* tp_iter */ 0, /* tp_iternext */ humat3x4_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat3x4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<3, 4, glm::u32>, /* tp_new */ }, PyGLM_TYPE_MAT, 3, 4, sizeof(uint32), sizeof(glm::mat<3, 4, uint32>), PyGLM_FS_UINT32 }; static PyTypeObject& humat3x4Type = *((PyTypeObject*)&humat3x4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/uint/mat4x2.h000066400000000000000000000154131511156275200235070ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef humat4x2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<4>, METH_NOARGS, "returns the length of glm::umat4x2"}, { "__getstate__", (PyCFunction)mat_to_tuple<4, 2, glm::u32>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<4, 2, glm::u32>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<4, 2, glm::u32>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<4, 2, glm::u32>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<4, 2, glm::u32>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs humat4x2BufferMethods = { (getbufferproc)mat_getbuffer<4, 2, glm::u32>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods humat4x2SeqMethods = { (lenfunc)mat_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<4, 2, glm::u32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods humat4x2MapMethods = { (lenfunc)mat_len<4>, // mp_length (binaryfunc)mat4x2_mp_item, // mp_subscript (objobjargproc)mat4x2_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods humat4x2NumMethods = { (binaryfunc)mat_add<4, 2, glm::u32>, //nb_add (binaryfunc)mat_sub<4, 2, glm::u32>, //nb_subtract (binaryfunc)mat_mul<4, 2, glm::u32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)mat_pos<4, 2, glm::u32>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_glm::u32 (binaryfunc)mat_iadd<4, 2, glm::u32>, //nb_inplace_add (binaryfunc)mat_isub<4, 2, glm::u32>, //nb_inplace_subtract (binaryfunc)mat_imul<4, 2, glm::u32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<4, 2, glm::u32>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<4, 2, glm::u32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<4, 2, glm::u32>, //nb_inplace_matrix_multiply }; static PyTypeObject humat4x2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "umat4x2Iter", /* tp_name */ sizeof(matIter<4, 2, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<4, 2, glm::u32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "umat4x2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<4, 2, glm::u32>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<4, 2, glm::u32>, /* tp_new */ }; static PyGLMTypeObject humat4x2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.umat4x2", /* tp_name */ sizeof(mat<4, 2, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat4x2_repr, /* tp_repr */ & humat4x2NumMethods, /* tp_as_number */ & humat4x2SeqMethods, /* tp_as_sequence */ & humat4x2MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<4, 2, glm::u32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat4x2_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & humat4x2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "umat4x2( )\n4 columns of 2 components matrix of unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<4, 2, glm::u32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<4, 2, glm::u32>, /* tp_iter */ 0, /* tp_iternext */ humat4x2_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat4x2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<4, 2, glm::u32>, /* tp_new */ }, PyGLM_TYPE_MAT, 4, 2, sizeof(uint32), sizeof(glm::mat<4, 2, uint32>), PyGLM_FS_UINT32 }; static PyTypeObject& humat4x2Type = *((PyTypeObject*)&humat4x2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/uint/mat4x3.h000066400000000000000000000154131511156275200235100ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef humat4x3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<4>, METH_NOARGS, "returns the length of glm::umat4x3"}, { "__getstate__", (PyCFunction)mat_to_tuple<4, 3, glm::u32>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<4, 3, glm::u32>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<4, 3, glm::u32>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<4, 3, glm::u32>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<4, 3, glm::u32>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs humat4x3BufferMethods = { (getbufferproc)mat_getbuffer<4, 3, glm::u32>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods humat4x3SeqMethods = { (lenfunc)mat_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<4, 3, glm::u32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods humat4x3MapMethods = { (lenfunc)mat_len<4>, // mp_length (binaryfunc)mat4x3_mp_item, // mp_subscript (objobjargproc)mat4x3_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods humat4x3NumMethods = { (binaryfunc)mat_add<4, 3, glm::u32>, //nb_add (binaryfunc)mat_sub<4, 3, glm::u32>, //nb_subtract (binaryfunc)mat_mul<4, 3, glm::u32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)mat_pos<4, 3, glm::u32>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_glm::u32 (binaryfunc)mat_iadd<4, 3, glm::u32>, //nb_inplace_add (binaryfunc)mat_isub<4, 3, glm::u32>, //nb_inplace_subtract (binaryfunc)mat_imul<4, 3, glm::u32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<4, 3, glm::u32>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<4, 3, glm::u32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<4, 3, glm::u32>, //nb_inplace_matrix_multiply }; static PyTypeObject humat4x3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "umat4x3Iter", /* tp_name */ sizeof(matIter<4, 3, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<4, 3, glm::u32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "umat4x3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<4, 3, glm::u32>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<4, 3, glm::u32>, /* tp_new */ }; static PyGLMTypeObject humat4x3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.umat4x3", /* tp_name */ sizeof(mat<4, 3, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat4x3_repr, /* tp_repr */ & humat4x3NumMethods, /* tp_as_number */ & humat4x3SeqMethods, /* tp_as_sequence */ & humat4x3MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<4, 3, glm::u32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat4x3_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & humat4x3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "umat4x3( )\n4 columns of 3 components matrix of unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<4, 3, glm::u32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<4, 3, glm::u32>, /* tp_iter */ 0, /* tp_iternext */ humat4x3_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat4x3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<4, 3, glm::u32>, /* tp_new */ }, PyGLM_TYPE_MAT, 4, 3, sizeof(uint32), sizeof(glm::mat<4, 3, uint32>), PyGLM_FS_UINT32 }; static PyTypeObject& humat4x3Type = *((PyTypeObject*)&humat4x3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mat/uint/mat4x4.h000066400000000000000000000154231511156275200235120ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef humat4x4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)mat_length<4>, METH_NOARGS, "returns the length of glm::umat4x4"}, { "__getstate__", (PyCFunction)mat_to_tuple<4, 4, glm::u32>, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mat_setstate<4, 4, glm::u32>, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mat_to_list<4, 4, glm::u32>, METH_NOARGS, "Return the components of this matrix as a nested list"}, { "to_tuple", (PyCFunction)mat_to_tuple<4, 4, glm::u32>, METH_NOARGS, "Return the components of this matrix as a nested tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)mat_from_bytes<4, 4, glm::u32>, METH_O | METH_STATIC, "Create a matrix from a bytes string"}, { NULL } }; static PyBufferProcs humat4x4BufferMethods = { (getbufferproc)mat_getbuffer<4, 4, glm::u32>, (releasebufferproc)mat_releasebuffer, }; static PySequenceMethods humat4x4SeqMethods = { (lenfunc)mat_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat 0, // sq_item 0, 0, // sq_ass_item 0, (objobjproc)mat_contains<4, 4, glm::u32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyMappingMethods humat4x4MapMethods = { (lenfunc)mat_len<4>, // mp_length (binaryfunc)mat4x4_mp_item, // mp_subscript (objobjargproc)mat4x4_mp_ass_item, // mp_ass_subscript }; static PyNumberMethods humat4x4NumMethods = { (binaryfunc)matsq_add<4, 4, glm::u32>, //nb_add (binaryfunc)matsq_sub<4, 4, glm::u32>, //nb_subtract (binaryfunc)mat_mul<4, 4, glm::u32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)mat_pos<4, 4, glm::u32>, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_glm::u32 (binaryfunc)matsq_iadd<4, 4, glm::u32>, //nb_inplace_add (binaryfunc)matsq_isub<4, 4, glm::u32>, //nb_inplace_subtract (binaryfunc)mat_imul<4, 4, glm::u32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)mat_div<4, 4, glm::u32>, 0, //nb_inplace_floor_divide (binaryfunc)mat_idiv<4, 4, glm::u32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mat_matmul, //nb_matrix_multiply (binaryfunc)mat_imatmul<4, 4, glm::u32>, //nb_inplace_matrix_multiply }; static PyTypeObject humat4x4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "umat4x4Iter", /* tp_name */ sizeof(matIter<4, 4, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)matIter_dealloc<4, 4, glm::u32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "umat4x4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)matIter_next<4, 4, glm::u32>, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)matIter_new<4, 4, glm::u32>, /* tp_new */ }; static PyGLMTypeObject humat4x4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.umat4x4", /* tp_name */ sizeof(mat<4, 4, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mat_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mat4x4_repr, /* tp_repr */ & humat4x4NumMethods, /* tp_as_number */ & humat4x4SeqMethods, /* tp_as_sequence */ & humat4x4MapMethods, /* tp_as_mapping */ (hashfunc)mat_hash<4, 4, glm::u32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mat4x4_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & humat4x4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "umat4x4( )\n4 columns of 4 components matrix of unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mat_richcompare<4, 4, glm::u32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mat_geniter<4, 4, glm::u32>, /* tp_iter */ 0, /* tp_iternext */ humat4x4_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mat4x4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)mat_new<4, 4, glm::u32>, /* tp_new */ }, PyGLM_TYPE_MAT, 4, 4, sizeof(uint32), sizeof(glm::mat<4, 4, uint32>), PyGLM_FS_UINT32 }; static PyTypeObject& humat4x4Type = *((PyTypeObject*)&humat4x4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/000077500000000000000000000000001511156275200214055ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/all.h000066400000000000000000000003231511156275200223240ustar00rootroot00000000000000#ifndef TYPES_MVEC_ALL_H #define TYPES_MVEC_ALL_H #include "forward_declarations.h" #include "double/all.h" #include "float/all.h" #include "int/all.h" #include "uint/all.h" #include "../vec/all.h" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/double/000077500000000000000000000000001511156275200226575ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/double/all.h000066400000000000000000000002031511156275200235730ustar00rootroot00000000000000#ifndef TYPES_MVEC_DOUBLE_ALL_H #define TYPES_MVEC_DOUBLE_ALL_H #include "mvec2.h" #include "mvec3.h" #include "mvec4.h" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/double/mvec2.h000066400000000000000000000152601511156275200240500ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" #include "../../vec/all.h" static PyMethodDef hdmvec2_methods[] = { { "__copy__", (PyCFunction)mvec_copy<2, double>, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)mvec_deepcopy<2, double>, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)mvec2_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mvec2_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mvec2_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)mvec2_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { NULL } /* Sentinel */ }; static PyBufferProcs hdmvec2BufferMethods = { (getbufferproc)mvec_getbuffer<2, double>, (releasebufferproc)mvec_releasebuffer, }; static PySequenceMethods hdmvec2SeqMethods = { (lenfunc)mvec_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)mvec2_sq_item, // sq_item 0, (ssizeobjargproc)mvec2_sq_ass_item, // sq_ass_item 0, (objobjproc)mvec_contains<2, double>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hdmvec2NumMethods = { (binaryfunc)mvec_add<2, double>, //nb_add (binaryfunc)mvec_sub<2, double>, //nb_subtract (binaryfunc)mvec_mul<2, double>, //nb_multiply (binaryfunc)mvec_mod<2, double>, //nb_remainder (binaryfunc)mvec_divmod<2, double>, //nb_divmod (ternaryfunc)mvec_pow<2, double>, //nb_power (unaryfunc)mvec_neg<2, double>, //nb_negative (unaryfunc)mvec_pos<2, double>, //nb_positive (unaryfunc)mvec_abs<2, double>, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_double (binaryfunc)mvec_iadd<2, double>, //nb_inplace_add (binaryfunc)mvec_isub<2, double>, //nb_inplace_subtract (binaryfunc)mvec_imul<2, double>, //nb_inplace_multiply (binaryfunc)mvec_imod<2, double>, //nb_inplace_remainder (ternaryfunc)mvec_ipow<2, double>, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or (binaryfunc)mvec_floordiv<2, double>, //nb_floor_divide (binaryfunc)mvec_div<2, double>, (binaryfunc)mvec_ifloordiv<2, double>, //nb_inplace_floor_divide (binaryfunc)mvec_idiv<2, double>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mvec_matmul, //nb_matrix_multiply (binaryfunc)mvec_imatmul<2, double>, //nb_inplace_matrix_multiply }; static PyTypeObject hdmvec2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "dmvec2Iter", /* tp_name */ sizeof(mvecIter<2, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvecIter_dealloc<2, double>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "dmvec2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)mvec2Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvecIter_new<2, double>, /* tp_new */ }; static PyGLMTypeObject hdmvec2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.dmvec2", /* tp_name */ sizeof(mvec<2, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mvec2_str, /* tp_repr */ & hdmvec2NumMethods, /* tp_as_number */ & hdmvec2SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)mvec_hash<2, double>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mvec2_str, /* tp_str */ (getattrofunc)mvec_getattr<2, double>, /* tp_getattro */ (setattrofunc)mvec_setattr<2, double>, /* tp_setattro */ & hdmvec2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "dmvec2( )\n2 components mvector of high qualifier double numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mvec_richcompare<2, double>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mvec_geniter<2, double>, /* tp_iter */ 0, /* tp_iternext */ hdmvec2_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mvec_init<2, double>, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvec_new<2, double>, /* tp_new */ }, PyGLM_TYPE_MVEC, 2, 0, sizeof(double), sizeof(glm::vec<2, double>), PyGLM_FS_DOUBLE, &hdvec2Type }; static PyTypeObject& hdmvec2Type = *((PyTypeObject*)&hdmvec2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/double/mvec3.h000066400000000000000000000152601511156275200240510ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" #include "../../vec/all.h" static PyMethodDef hdmvec3_methods[] = { { "__copy__", (PyCFunction)mvec_copy<3, double>, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)mvec_deepcopy<3, double>, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)mvec3_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mvec3_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mvec3_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)mvec3_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { NULL } /* Sentinel */ }; static PyBufferProcs hdmvec3BufferMethods = { (getbufferproc)mvec_getbuffer<3, double>, (releasebufferproc)mvec_releasebuffer, }; static PySequenceMethods hdmvec3SeqMethods = { (lenfunc)mvec_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)mvec3_sq_item, // sq_item 0, (ssizeobjargproc)mvec3_sq_ass_item, // sq_ass_item 0, (objobjproc)mvec_contains<3, double>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hdmvec3NumMethods = { (binaryfunc)mvec_add<3, double>, //nb_add (binaryfunc)mvec_sub<3, double>, //nb_subtract (binaryfunc)mvec_mul<3, double>, //nb_multiply (binaryfunc)mvec_mod<3, double>, //nb_remainder (binaryfunc)mvec_divmod<3, double>, //nb_divmod (ternaryfunc)mvec_pow<3, double>, //nb_power (unaryfunc)mvec_neg<3, double>, //nb_negative (unaryfunc)mvec_pos<3, double>, //nb_positive (unaryfunc)mvec_abs<3, double>, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_double (binaryfunc)mvec_iadd<3, double>, //nb_inplace_add (binaryfunc)mvec_isub<3, double>, //nb_inplace_subtract (binaryfunc)mvec_imul<3, double>, //nb_inplace_multiply (binaryfunc)mvec_imod<3, double>, //nb_inplace_remainder (ternaryfunc)mvec_ipow<3, double>, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or (binaryfunc)mvec_floordiv<3, double>, //nb_floor_divide (binaryfunc)mvec_div<3, double>, (binaryfunc)mvec_ifloordiv<3, double>, //nb_inplace_floor_divide (binaryfunc)mvec_idiv<3, double>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mvec_matmul, //nb_matrix_multiply (binaryfunc)mvec_imatmul<3, double>, //nb_inplace_matrix_multiply }; static PyTypeObject hdmvec3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "dmvec3Iter", /* tp_name */ sizeof(mvecIter<3, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvecIter_dealloc<3, double>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "dmvec3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)mvec3Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvecIter_new<3, double>, /* tp_new */ }; static PyGLMTypeObject hdmvec3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.dmvec3", /* tp_name */ sizeof(mvec<3, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mvec3_str, /* tp_repr */ & hdmvec3NumMethods, /* tp_as_number */ & hdmvec3SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)mvec_hash<3, double>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mvec3_str, /* tp_str */ (getattrofunc)mvec_getattr<3, double>, /* tp_getattro */ (setattrofunc)mvec_setattr<3, double>, /* tp_setattro */ & hdmvec3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "dmvec3( )\n3 components mvector of high qualifier double numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mvec_richcompare<3, double>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mvec_geniter<3, double>, /* tp_iter */ 0, /* tp_iternext */ hdmvec3_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mvec_init<3, double>, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvec_new<3, double>, /* tp_new */ }, PyGLM_TYPE_MVEC, 3, 0, sizeof(double), sizeof(glm::vec<3, double>), PyGLM_FS_DOUBLE, &hdvec3Type }; static PyTypeObject& hdmvec3Type = *((PyTypeObject*)&hdmvec3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/double/mvec4.h000066400000000000000000000152601511156275200240520ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" #include "../../vec/all.h" static PyMethodDef hdmvec4_methods[] = { { "__copy__", (PyCFunction)mvec_copy<4, double>, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)mvec_deepcopy<4, double>, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)mvec4_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mvec4_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mvec4_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)mvec4_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { NULL } /* Sentinel */ }; static PyBufferProcs hdmvec4BufferMethods = { (getbufferproc)mvec_getbuffer<4, double>, (releasebufferproc)mvec_releasebuffer, }; static PySequenceMethods hdmvec4SeqMethods = { (lenfunc)mvec_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)mvec4_sq_item, // sq_item 0, (ssizeobjargproc)mvec4_sq_ass_item, // sq_ass_item 0, (objobjproc)mvec_contains<4, double>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hdmvec4NumMethods = { (binaryfunc)mvec_add<4, double>, //nb_add (binaryfunc)mvec_sub<4, double>, //nb_subtract (binaryfunc)mvec_mul<4, double>, //nb_multiply (binaryfunc)mvec_mod<4, double>, //nb_remainder (binaryfunc)mvec_divmod<4, double>, //nb_divmod (ternaryfunc)mvec_pow<4, double>, //nb_power (unaryfunc)mvec_neg<4, double>, //nb_negative (unaryfunc)mvec_pos<4, double>, //nb_positive (unaryfunc)mvec_abs<4, double>, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_double (binaryfunc)mvec_iadd<4, double>, //nb_inplace_add (binaryfunc)mvec_isub<4, double>, //nb_inplace_subtract (binaryfunc)mvec_imul<4, double>, //nb_inplace_multiply (binaryfunc)mvec_imod<4, double>, //nb_inplace_remainder (ternaryfunc)mvec_ipow<4, double>, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or (binaryfunc)mvec_floordiv<4, double>, //nb_floor_divide (binaryfunc)mvec_div<4, double>, (binaryfunc)mvec_ifloordiv<4, double>, //nb_inplace_floor_divide (binaryfunc)mvec_idiv<4, double>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mvec_matmul, //nb_matrix_multiply (binaryfunc)mvec_imatmul<4, double>, //nb_inplace_matrix_multiply }; static PyTypeObject hdmvec4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "dmvec4Iter", /* tp_name */ sizeof(mvecIter<4, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvecIter_dealloc<4, double>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "dmvec4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)mvec4Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvecIter_new<4, double>, /* tp_new */ }; static PyGLMTypeObject hdmvec4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.dmvec4", /* tp_name */ sizeof(mvec<4, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mvec4_str, /* tp_repr */ & hdmvec4NumMethods, /* tp_as_number */ & hdmvec4SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)mvec_hash<4, double>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mvec4_str, /* tp_str */ (getattrofunc)mvec_getattr<4, double>, /* tp_getattro */ (setattrofunc)mvec_setattr<4, double>, /* tp_setattro */ & hdmvec4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "dmvec4( )\n4 components mvector of high qualifier double numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mvec_richcompare<4, double>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mvec_geniter<4, double>, /* tp_iter */ 0, /* tp_iternext */ hdmvec4_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mvec_init<4, double>, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvec_new<4, double>, /* tp_new */ }, PyGLM_TYPE_MVEC, 4, 0, sizeof(double), sizeof(glm::vec<4, double>), PyGLM_FS_DOUBLE, &hdvec4Type }; static PyTypeObject& hdmvec4Type = *((PyTypeObject*)&hdmvec4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/float/000077500000000000000000000000001511156275200225125ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/float/all.h000066400000000000000000000002011511156275200234240ustar00rootroot00000000000000#ifndef TYPES_MVEC_FLOAT_ALL_H #define TYPES_MVEC_FLOAT_ALL_H #include "mvec2.h" #include "mvec3.h" #include "mvec4.h" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/float/mvec2.h000066400000000000000000000151741511156275200237070ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" #include "../../vec/all.h" static PyMethodDef hfmvec2_methods[] = { { "__copy__", (PyCFunction)mvec_copy<2, float>, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)mvec_deepcopy<2, float>, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)mvec2_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mvec2_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mvec2_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)mvec2_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { NULL } /* Sentinel */ }; static PyBufferProcs hfmvec2BufferMethods = { (getbufferproc)mvec_getbuffer<2, float>, (releasebufferproc)mvec_releasebuffer, }; static PySequenceMethods hfmvec2SeqMethods = { (lenfunc)mvec_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)mvec2_sq_item, // sq_item 0, (ssizeobjargproc)mvec2_sq_ass_item, // sq_ass_item 0, (objobjproc)mvec_contains<2, float>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hfmvec2NumMethods = { (binaryfunc)mvec_add<2, float>, //nb_add (binaryfunc)mvec_sub<2, float>, //nb_subtract (binaryfunc)mvec_mul<2, float>, //nb_multiply (binaryfunc)mvec_mod<2, float>, //nb_remainder (binaryfunc)mvec_divmod<2, float>, //nb_divmod (ternaryfunc)mvec_pow<2, float>, //nb_power (unaryfunc)mvec_neg<2, float>, //nb_negative (unaryfunc)mvec_pos<2, float>, //nb_positive (unaryfunc)mvec_abs<2, float>, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_float (binaryfunc)mvec_iadd<2, float>, //nb_inplace_add (binaryfunc)mvec_isub<2, float>, //nb_inplace_subtract (binaryfunc)mvec_imul<2, float>, //nb_inplace_multiply (binaryfunc)mvec_imod<2, float>, //nb_inplace_remainder (ternaryfunc)mvec_ipow<2, float>, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or (binaryfunc)mvec_floordiv<2, float>, //nb_floor_divide (binaryfunc)mvec_div<2, float>, (binaryfunc)mvec_ifloordiv<2, float>, //nb_inplace_floor_divide (binaryfunc)mvec_idiv<2, float>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mvec_matmul, //nb_matrix_multiply (binaryfunc)mvec_imatmul<2, float>, //nb_inplace_matrix_multiply }; static PyTypeObject hfmvec2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "mvec2Iter", /* tp_name */ sizeof(mvecIter<2, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvecIter_dealloc<2, float>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "mvec2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)mvec2Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvecIter_new<2, float>, /* tp_new */ }; static PyGLMTypeObject hfmvec2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.mvec2", /* tp_name */ sizeof(mvec<2, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mvec2_str, /* tp_repr */ & hfmvec2NumMethods, /* tp_as_number */ & hfmvec2SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)mvec_hash<2, float>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mvec2_str, /* tp_str */ (getattrofunc)mvec_getattr<2, float>, /* tp_getattro */ (setattrofunc)mvec_setattr<2, float>, /* tp_setattro */ & hfmvec2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "mvec2( )\n2 components mvector of high qualifier float numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mvec_richcompare<2, float>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mvec_geniter<2, float>, /* tp_iter */ 0, /* tp_iternext */ hfmvec2_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mvec_init<2, float>, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvec_new<2, float>, /* tp_new */ }, PyGLM_TYPE_MVEC, 2, 0, sizeof(float), sizeof(glm::vec<2, float>), PyGLM_FS_FLOAT, &hfvec2Type }; static PyTypeObject& hfmvec2Type = *((PyTypeObject*)&hfmvec2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/float/mvec3.h000066400000000000000000000151741511156275200237100ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" #include "../../vec/all.h" static PyMethodDef hfmvec3_methods[] = { { "__copy__", (PyCFunction)mvec_copy<3, float>, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)mvec_deepcopy<3, float>, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)mvec3_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mvec3_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mvec3_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)mvec3_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { NULL } /* Sentinel */ }; static PyBufferProcs hfmvec3BufferMethods = { (getbufferproc)mvec_getbuffer<3, float>, (releasebufferproc)mvec_releasebuffer, }; static PySequenceMethods hfmvec3SeqMethods = { (lenfunc)mvec_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)mvec3_sq_item, // sq_item 0, (ssizeobjargproc)mvec3_sq_ass_item, // sq_ass_item 0, (objobjproc)mvec_contains<3, float>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hfmvec3NumMethods = { (binaryfunc)mvec_add<3, float>, //nb_add (binaryfunc)mvec_sub<3, float>, //nb_subtract (binaryfunc)mvec_mul<3, float>, //nb_multiply (binaryfunc)mvec_mod<3, float>, //nb_remainder (binaryfunc)mvec_divmod<3, float>, //nb_divmod (ternaryfunc)mvec_pow<3, float>, //nb_power (unaryfunc)mvec_neg<3, float>, //nb_negative (unaryfunc)mvec_pos<3, float>, //nb_positive (unaryfunc)mvec_abs<3, float>, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_float (binaryfunc)mvec_iadd<3, float>, //nb_inplace_add (binaryfunc)mvec_isub<3, float>, //nb_inplace_subtract (binaryfunc)mvec_imul<3, float>, //nb_inplace_multiply (binaryfunc)mvec_imod<3, float>, //nb_inplace_remainder (ternaryfunc)mvec_ipow<3, float>, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or (binaryfunc)mvec_floordiv<3, float>, //nb_floor_divide (binaryfunc)mvec_div<3, float>, (binaryfunc)mvec_ifloordiv<3, float>, //nb_inplace_floor_divide (binaryfunc)mvec_idiv<3, float>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mvec_matmul, //nb_matrix_multiply (binaryfunc)mvec_imatmul<3, float>, //nb_inplace_matrix_multiply }; static PyTypeObject hfmvec3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "mvec3Iter", /* tp_name */ sizeof(mvecIter<3, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvecIter_dealloc<3, float>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "mvec3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)mvec3Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvecIter_new<3, float>, /* tp_new */ }; static PyGLMTypeObject hfmvec3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.mvec3", /* tp_name */ sizeof(mvec<3, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mvec3_str, /* tp_repr */ & hfmvec3NumMethods, /* tp_as_number */ & hfmvec3SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)mvec_hash<3, float>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mvec3_str, /* tp_str */ (getattrofunc)mvec_getattr<3, float>, /* tp_getattro */ (setattrofunc)mvec_setattr<3, float>, /* tp_setattro */ & hfmvec3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "mvec3( )\n3 components mvector of high qualifier float numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mvec_richcompare<3, float>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mvec_geniter<3, float>, /* tp_iter */ 0, /* tp_iternext */ hfmvec3_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mvec_init<3, float>, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvec_new<3, float>, /* tp_new */ }, PyGLM_TYPE_MVEC, 3, 0, sizeof(float), sizeof(glm::vec<3, float>), PyGLM_FS_FLOAT, &hfvec3Type }; static PyTypeObject& hfmvec3Type = *((PyTypeObject*)&hfmvec3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/float/mvec4.h000066400000000000000000000151741511156275200237110ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" #include "../../vec/all.h" static PyMethodDef hfmvec4_methods[] = { { "__copy__", (PyCFunction)mvec_copy<4, float>, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)mvec_deepcopy<4, float>, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)mvec4_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mvec4_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mvec4_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)mvec4_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { NULL } /* Sentinel */ }; static PyBufferProcs hfmvec4BufferMethods = { (getbufferproc)mvec_getbuffer<4, float>, (releasebufferproc)mvec_releasebuffer, }; static PySequenceMethods hfmvec4SeqMethods = { (lenfunc)mvec_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)mvec4_sq_item, // sq_item 0, (ssizeobjargproc)mvec4_sq_ass_item, // sq_ass_item 0, (objobjproc)mvec_contains<4, float>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hfmvec4NumMethods = { (binaryfunc)mvec_add<4, float>, //nb_add (binaryfunc)mvec_sub<4, float>, //nb_subtract (binaryfunc)mvec_mul<4, float>, //nb_multiply (binaryfunc)mvec_mod<4, float>, //nb_remainder (binaryfunc)mvec_divmod<4, float>, //nb_divmod (ternaryfunc)mvec_pow<4, float>, //nb_power (unaryfunc)mvec_neg<4, float>, //nb_negative (unaryfunc)mvec_pos<4, float>, //nb_positive (unaryfunc)mvec_abs<4, float>, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_float (binaryfunc)mvec_iadd<4, float>, //nb_inplace_add (binaryfunc)mvec_isub<4, float>, //nb_inplace_subtract (binaryfunc)mvec_imul<4, float>, //nb_inplace_multiply (binaryfunc)mvec_imod<4, float>, //nb_inplace_remainder (ternaryfunc)mvec_ipow<4, float>, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or (binaryfunc)mvec_floordiv<4, float>, //nb_floor_divide (binaryfunc)mvec_div<4, float>, (binaryfunc)mvec_ifloordiv<4, float>, //nb_inplace_floor_divide (binaryfunc)mvec_idiv<4, float>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mvec_matmul, //nb_matrix_multiply (binaryfunc)mvec_imatmul<4, float>, //nb_inplace_matrix_multiply }; static PyTypeObject hfmvec4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "mvec4Iter", /* tp_name */ sizeof(mvecIter<4, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvecIter_dealloc<4, float>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "mvec4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)mvec4Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvecIter_new<4, float>, /* tp_new */ }; static PyGLMTypeObject hfmvec4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.mvec4", /* tp_name */ sizeof(mvec<4, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mvec4_str, /* tp_repr */ & hfmvec4NumMethods, /* tp_as_number */ & hfmvec4SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)mvec_hash<4, float>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mvec4_str, /* tp_str */ (getattrofunc)mvec_getattr<4, float>, /* tp_getattro */ (setattrofunc)mvec_setattr<4, float>, /* tp_setattro */ & hfmvec4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "mvec4( )\n4 components mvector of high qualifier float numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mvec_richcompare<4, float>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mvec_geniter<4, float>, /* tp_iter */ 0, /* tp_iternext */ hfmvec4_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mvec_init<4, float>, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvec_new<4, float>, /* tp_new */ }, PyGLM_TYPE_MVEC, 4, 0, sizeof(float), sizeof(glm::vec<4, float>), PyGLM_FS_FLOAT, &hfvec4Type }; static PyTypeObject& hfmvec4Type = *((PyTypeObject*)&hfmvec4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/forward_declarations.h000066400000000000000000000140661511156275200257610ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" template static int mvec_getbuffer(mvec* self, Py_buffer* view, int flags); static void mvec_releasebuffer(PyObject* self, Py_buffer* view); template static PyObject* mvec2_to_list(mvec<2, T>* self, PyObject*); template static PyObject* mvec3_to_list(mvec<3, T>* self, PyObject*); template static PyObject* mvec4_to_list(mvec<4, T>* self, PyObject*); template static PyObject* mvec2_to_tuple(mvec<2, T>* self, PyObject*); template static PyObject* mvec3_to_tuple(mvec<3, T>* self, PyObject*); template static PyObject* mvec4_to_tuple(mvec<4, T>* self, PyObject*); template static PyObject* mvec2_setstate(mvec<2, T>* self, PyObject* state); template static PyObject* mvec3_setstate(mvec<3, T>* self, PyObject* state); template static PyObject* mvec4_setstate(mvec<4, T>* self, PyObject* state); template static PyObject* mvec_new(PyTypeObject* type, PyObject*, PyObject*); template static int mvec_init(mvec* self, PyObject* args, PyObject* kwds); template static Py_ssize_t mvec_len(PyObject* self); template static PyObject* mvec2_sq_item(mvec<2, T> * self, Py_ssize_t index); template static PyObject* mvec3_sq_item(mvec<3, T> * self, Py_ssize_t index); template static PyObject* mvec4_sq_item(mvec<4, T> * self, Py_ssize_t index); template static int mvec2_sq_ass_item(mvec<2, T> * self, Py_ssize_t index, PyObject * value); template static int mvec3_sq_ass_item(mvec<3, T> * self, Py_ssize_t index, PyObject * value); template static int mvec4_sq_ass_item(mvec<4, T> * self, Py_ssize_t index, PyObject * value); template static int mvec_contains(mvec * self, PyObject * value); template static PyObject * mvec_add(PyObject *obj1, PyObject *obj2); template static PyObject * mvec_sub(PyObject *obj1, PyObject *obj2); template static PyObject * mvec_mul(PyObject *obj1, PyObject *obj2); template static PyObject * mvec_mod(PyObject *obj1, PyObject *obj2); template static PyObject * mvec_divmod(PyObject *obj1, PyObject *obj2); template static PyObject* mvec_lshift(PyObject* obj1, PyObject* obj2); template static PyObject* mvec_rshift(PyObject* obj1, PyObject* obj2); template static PyObject* mvec_and(PyObject* obj1, PyObject* obj2); template static PyObject* mvec_xor(PyObject* obj1, PyObject* obj2); template static PyObject* mvec_or(PyObject* obj1, PyObject* obj2); template static PyObject * mvec_pow(PyObject * obj1, PyObject * obj2, PyObject * obj3); template static PyObject * mvec_neg(mvec *obj); template static PyObject * mvec_pos(mvec *obj); template static PyObject * mvec_abs(mvec *obj); template static PyObject* mvec_invert(mvec* obj); static PyObject* mvec_matmul(PyObject* obj1, PyObject* obj2); template static PyObject * mvec_iadd(mvec* self, PyObject *obj); template static PyObject * mvec_isub(mvec* self, PyObject *obj); template static PyObject * mvec_imul(mvec* self, PyObject *obj); template static PyObject * mvec_imod(mvec* self, PyObject *obj); template static PyObject * mvec_ipow(mvec* self, PyObject * obj2, PyObject * obj3); template static PyObject * mvec_floordiv(PyObject *obj1, PyObject *obj2); template static PyObject * mvec_div(PyObject *obj1, PyObject *obj2); template static PyObject* imvec_floordiv(PyObject* obj1, PyObject* obj2); template static PyObject * mvec_ifloordiv(mvec* self, PyObject *obj); template static PyObject* imvec_ifloordiv(mvec* self, PyObject* obj); template static PyObject * mvec_idiv(mvec* self, PyObject *obj); template static PyObject* mvec_imatmul(mvec* self, PyObject* obj); template static PyObject* mvec_ilshift(mvec* self, PyObject* obj); template static PyObject* mvec_irshift(mvec* self, PyObject* obj); template static PyObject* mvec_iand(mvec* self, PyObject* obj); template static PyObject* mvec_ixor(mvec* self, PyObject* obj); template static PyObject* mvec_ior(mvec* self, PyObject* obj); static void mvec_dealloc(PyObject* self); template static PyObject* mvec_copy(PyObject* self, PyObject*); template static PyObject* mvec_deepcopy(PyObject* self, PyObject* memo); template static PyObject* mvec2_str(mvec<2, T>* self); template static PyObject* mvec3_str(mvec<3, T>* self); template static PyObject* mvec4_str(mvec<4, T>* self); template static PyObject* mvec_getattr(PyObject* obj, PyObject* name); template static int mvec_setattr(PyObject* obj, PyObject* name, PyObject* value); template static PyObject* mvec_richcompare(mvec* self, PyObject* other, int comp_type); template static PyObject* mvec_geniter(mvec* self); template static void mvecIter_dealloc(mvecIter *rgstate); template static PyObject* mvec2Iter_next(mvecIter<2, T> *rgstate); template static PyObject* mvec3Iter_next(mvecIter<3, T> *rgstate); template static PyObject* mvec4Iter_next(mvecIter<4, T> *rgstate); template static PyObject* mvecIter_new(PyTypeObject *type, PyObject *args, PyObject *kwargs); template static Py_hash_t mvec_hash(mvec* self, PyObject*);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/int/000077500000000000000000000000001511156275200221775ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/int/all.h000066400000000000000000000001751511156275200231230ustar00rootroot00000000000000#ifndef TYPES_MVEC_INT_ALL_H #define TYPES_MVEC_INT_ALL_H #include "mvec2.h" #include "mvec3.h" #include "mvec4.h" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/int/mvec2.h000066400000000000000000000157151511156275200233750ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" #include "../../vec/all.h" static PyMethodDef himvec2_methods[] = { { "__copy__", (PyCFunction)mvec_copy<2, glm::i32>, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)mvec_deepcopy<2, glm::i32>, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)mvec2_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mvec2_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mvec2_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)mvec2_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { NULL } /* Sentinel */ }; static PyBufferProcs himvec2BufferMethods = { (getbufferproc)mvec_getbuffer<2, glm::i32>, (releasebufferproc)mvec_releasebuffer, }; static PySequenceMethods himvec2SeqMethods = { (lenfunc)mvec_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)mvec2_sq_item, // sq_item 0, (ssizeobjargproc)mvec2_sq_ass_item, // sq_ass_item 0, (objobjproc)mvec_contains<2, glm::i32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods himvec2NumMethods = { (binaryfunc)mvec_add<2, glm::i32>, //nb_add (binaryfunc)mvec_sub<2, glm::i32>, //nb_subtract (binaryfunc)mvec_mul<2, glm::i32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mvec_neg<2, glm::i32>, //nb_negative (unaryfunc)mvec_pos<2, glm::i32>, //nb_positive (unaryfunc)mvec_abs<2, glm::i32>, //nb_absolute 0, //nb_bool (unaryfunc)mvec_invert<2, glm::i32>, //nb_invert (binaryfunc)mvec_lshift<2, glm::i32>, //nb_lshift (binaryfunc)mvec_rshift<2, glm::i32>, //nb_rshift (binaryfunc)mvec_and<2, glm::i32>, //nb_and (binaryfunc)mvec_xor<2, glm::i32>, //nb_xor (binaryfunc)mvec_or<2, glm::i32>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)mvec_iadd<2, glm::i32>, //nb_inplace_add (binaryfunc)mvec_isub<2, glm::i32>, //nb_inplace_subtract (binaryfunc)mvec_imul<2, glm::i32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)mvec_ilshift<2, glm::i32>, //nb_inplace_lshift (binaryfunc)mvec_irshift<2, glm::i32>, //nb_inplace_rshift (binaryfunc)mvec_iand<2, glm::i32>, //nb_inplace_and (binaryfunc)mvec_ixor<2, glm::i32>, //nb_inplace_xor (binaryfunc)mvec_ior<2, glm::i32>, //nb_inplace_or (binaryfunc)imvec_floordiv<2, glm::i32>, //nb_floor_divide (binaryfunc)mvec_div<2, glm::i32>, (binaryfunc)imvec_ifloordiv<2, glm::i32>, //nb_inplace_floor_divide (binaryfunc)mvec_idiv<2, glm::i32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mvec_matmul, //nb_matrix_multiply (binaryfunc)mvec_imatmul<2, glm::i32>, //nb_inplace_matrix_multiply }; static PyTypeObject himvec2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "imvec2Iter", /* tp_name */ sizeof(mvecIter<2, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvecIter_dealloc<2, glm::i32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "imvec2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)mvec2Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvecIter_new<2, glm::i32>, /* tp_new */ }; static PyGLMTypeObject himvec2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.imvec2", /* tp_name */ sizeof(mvec<2, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mvec2_str, /* tp_repr */ & himvec2NumMethods, /* tp_as_number */ & himvec2SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)mvec_hash<2, glm::i32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mvec2_str, /* tp_str */ (getattrofunc)mvec_getattr<2, glm::i32>, /* tp_getattro */ (setattrofunc)mvec_setattr<2, glm::i32>, /* tp_setattro */ & himvec2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "imvec2( )\n2 components mvector of high qualifier integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mvec_richcompare<2, glm::i32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mvec_geniter<2, glm::i32>, /* tp_iter */ 0, /* tp_iternext */ himvec2_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mvec_init<2, glm::i32>, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvec_new<2, glm::i32>, /* tp_new */ }, PyGLM_TYPE_MVEC, 2, 0, sizeof(int32), sizeof(glm::vec<2, int32>), PyGLM_FS_INT32, &hivec2Type }; static PyTypeObject& himvec2Type = *((PyTypeObject*)&himvec2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/int/mvec3.h000066400000000000000000000157151511156275200233760ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" #include "../../vec/all.h" static PyMethodDef himvec3_methods[] = { { "__copy__", (PyCFunction)mvec_copy<3, glm::i32>, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)mvec_deepcopy<3, glm::i32>, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)mvec3_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mvec3_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mvec3_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)mvec3_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { NULL } /* Sentinel */ }; static PyBufferProcs himvec3BufferMethods = { (getbufferproc)mvec_getbuffer<3, glm::i32>, (releasebufferproc)mvec_releasebuffer, }; static PySequenceMethods himvec3SeqMethods = { (lenfunc)mvec_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)mvec3_sq_item, // sq_item 0, (ssizeobjargproc)mvec3_sq_ass_item, // sq_ass_item 0, (objobjproc)mvec_contains<3, glm::i32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods himvec3NumMethods = { (binaryfunc)mvec_add<3, glm::i32>, //nb_add (binaryfunc)mvec_sub<3, glm::i32>, //nb_subtract (binaryfunc)mvec_mul<3, glm::i32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mvec_neg<3, glm::i32>, //nb_negative (unaryfunc)mvec_pos<3, glm::i32>, //nb_positive (unaryfunc)mvec_abs<3, glm::i32>, //nb_absolute 0, //nb_bool (unaryfunc)mvec_invert<3, glm::i32>, //nb_invert (binaryfunc)mvec_lshift<3, glm::i32>, //nb_lshift (binaryfunc)mvec_rshift<3, glm::i32>, //nb_rshift (binaryfunc)mvec_and<3, glm::i32>, //nb_and (binaryfunc)mvec_xor<3, glm::i32>, //nb_xor (binaryfunc)mvec_or<3, glm::i32>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)mvec_iadd<3, glm::i32>, //nb_inplace_add (binaryfunc)mvec_isub<3, glm::i32>, //nb_inplace_subtract (binaryfunc)mvec_imul<3, glm::i32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)mvec_ilshift<3, glm::i32>, //nb_inplace_lshift (binaryfunc)mvec_irshift<3, glm::i32>, //nb_inplace_rshift (binaryfunc)mvec_iand<3, glm::i32>, //nb_inplace_and (binaryfunc)mvec_ixor<3, glm::i32>, //nb_inplace_xor (binaryfunc)mvec_ior<3, glm::i32>, //nb_inplace_or (binaryfunc)imvec_floordiv<3, glm::i32>, //nb_floor_divide (binaryfunc)mvec_div<3, glm::i32>, (binaryfunc)imvec_ifloordiv<3, glm::i32>, //nb_inplace_floor_divide (binaryfunc)mvec_idiv<3, glm::i32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mvec_matmul, //nb_matrix_multiply (binaryfunc)mvec_imatmul<3, glm::i32>, //nb_inplace_matrix_multiply }; static PyTypeObject himvec3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "imvec3Iter", /* tp_name */ sizeof(mvecIter<3, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvecIter_dealloc<3, glm::i32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "imvec3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)mvec3Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvecIter_new<3, glm::i32>, /* tp_new */ }; static PyGLMTypeObject himvec3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.imvec3", /* tp_name */ sizeof(mvec<3, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mvec3_str, /* tp_repr */ & himvec3NumMethods, /* tp_as_number */ & himvec3SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)mvec_hash<3, glm::i32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mvec3_str, /* tp_str */ (getattrofunc)mvec_getattr<3, glm::i32>, /* tp_getattro */ (setattrofunc)mvec_setattr<3, glm::i32>, /* tp_setattro */ & himvec3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "imvec3( )\n3 components mvector of high qualifier integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mvec_richcompare<3, glm::i32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mvec_geniter<3, glm::i32>, /* tp_iter */ 0, /* tp_iternext */ himvec3_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mvec_init<3, glm::i32>, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvec_new<3, glm::i32>, /* tp_new */ }, PyGLM_TYPE_MVEC, 3, 0, sizeof(int32), sizeof(glm::vec<3, int32>), PyGLM_FS_INT32, &hivec3Type }; static PyTypeObject& himvec3Type = *((PyTypeObject*)&himvec3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/int/mvec4.h000066400000000000000000000157151511156275200233770ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" #include "../../vec/all.h" static PyMethodDef himvec4_methods[] = { { "__copy__", (PyCFunction)mvec_copy<4, glm::i32>, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)mvec_deepcopy<4, glm::i32>, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)mvec4_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mvec4_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mvec4_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)mvec4_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { NULL } /* Sentinel */ }; static PyBufferProcs himvec4BufferMethods = { (getbufferproc)mvec_getbuffer<4, glm::i32>, (releasebufferproc)mvec_releasebuffer, }; static PySequenceMethods himvec4SeqMethods = { (lenfunc)mvec_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)mvec4_sq_item, // sq_item 0, (ssizeobjargproc)mvec4_sq_ass_item, // sq_ass_item 0, (objobjproc)mvec_contains<4, glm::i32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods himvec4NumMethods = { (binaryfunc)mvec_add<4, glm::i32>, //nb_add (binaryfunc)mvec_sub<4, glm::i32>, //nb_subtract (binaryfunc)mvec_mul<4, glm::i32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)mvec_neg<4, glm::i32>, //nb_negative (unaryfunc)mvec_pos<4, glm::i32>, //nb_positive (unaryfunc)mvec_abs<4, glm::i32>, //nb_absolute 0, //nb_bool (unaryfunc)mvec_invert<4, glm::i32>, //nb_invert (binaryfunc)mvec_lshift<4, glm::i32>, //nb_lshift (binaryfunc)mvec_rshift<4, glm::i32>, //nb_rshift (binaryfunc)mvec_and<4, glm::i32>, //nb_and (binaryfunc)mvec_xor<4, glm::i32>, //nb_xor (binaryfunc)mvec_or<4, glm::i32>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)mvec_iadd<4, glm::i32>, //nb_inplace_add (binaryfunc)mvec_isub<4, glm::i32>, //nb_inplace_subtract (binaryfunc)mvec_imul<4, glm::i32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)mvec_ilshift<4, glm::i32>, //nb_inplace_lshift (binaryfunc)mvec_irshift<4, glm::i32>, //nb_inplace_rshift (binaryfunc)mvec_iand<4, glm::i32>, //nb_inplace_and (binaryfunc)mvec_ixor<4, glm::i32>, //nb_inplace_xor (binaryfunc)mvec_ior<4, glm::i32>, //nb_inplace_or (binaryfunc)imvec_floordiv<4, glm::i32>, //nb_floor_divide (binaryfunc)mvec_div<4, glm::i32>, (binaryfunc)imvec_ifloordiv<4, glm::i32>, //nb_inplace_floor_divide (binaryfunc)mvec_idiv<4, glm::i32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mvec_matmul, //nb_matrix_multiply (binaryfunc)mvec_imatmul<4, glm::i32>, //nb_inplace_matrix_multiply }; static PyTypeObject himvec4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "imvec4Iter", /* tp_name */ sizeof(mvecIter<4, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvecIter_dealloc<4, glm::i32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "imvec4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)mvec4Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvecIter_new<4, glm::i32>, /* tp_new */ }; static PyGLMTypeObject himvec4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.imvec4", /* tp_name */ sizeof(mvec<4, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mvec4_str, /* tp_repr */ & himvec4NumMethods, /* tp_as_number */ & himvec4SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)mvec_hash<4, glm::i32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mvec4_str, /* tp_str */ (getattrofunc)mvec_getattr<4, glm::i32>, /* tp_getattro */ (setattrofunc)mvec_setattr<4, glm::i32>, /* tp_setattro */ & himvec4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "imvec4( )\n4 components mvector of high qualifier integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mvec_richcompare<4, glm::i32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mvec_geniter<4, glm::i32>, /* tp_iter */ 0, /* tp_iternext */ himvec4_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mvec_init<4, glm::i32>, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvec_new<4, glm::i32>, /* tp_new */ }, PyGLM_TYPE_MVEC, 4, 0, sizeof(int32), sizeof(glm::vec<4, int32>), PyGLM_FS_INT32, &hivec4Type }; static PyTypeObject& himvec4Type = *((PyTypeObject*)&himvec4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/uint/000077500000000000000000000000001511156275200223645ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/uint/all.h000066400000000000000000000001771511156275200233120ustar00rootroot00000000000000#ifndef TYPES_MVEC_UINT_ALL_H #define TYPES_MVEC_UINT_ALL_H #include "mvec2.h" #include "mvec3.h" #include "mvec4.h" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/uint/mvec2.h000066400000000000000000000156561511156275200235660ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" #include "../../vec/all.h" static PyMethodDef humvec2_methods[] = { { "__copy__", (PyCFunction)mvec_copy<2, glm::u32>, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)mvec_deepcopy<2, glm::u32>, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)mvec2_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mvec2_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mvec2_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)mvec2_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { NULL } /* Sentinel */ }; static PyBufferProcs humvec2BufferMethods = { (getbufferproc)mvec_getbuffer<2, glm::u32>, (releasebufferproc)mvec_releasebuffer, }; static PySequenceMethods humvec2SeqMethods = { (lenfunc)mvec_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)mvec2_sq_item, // sq_item 0, (ssizeobjargproc)mvec2_sq_ass_item, // sq_ass_item 0, (objobjproc)mvec_contains<2, glm::u32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods humvec2NumMethods = { (binaryfunc)mvec_add<2, glm::u32>, //nb_add (binaryfunc)mvec_sub<2, glm::u32>, //nb_subtract (binaryfunc)mvec_mul<2, glm::u32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)mvec_pos<2, glm::u32>, //nb_positive (unaryfunc)mvec_abs<2, glm::u32>, //nb_absolute 0, //nb_bool (unaryfunc)mvec_invert<2, glm::u32>, //nb_invert (binaryfunc)mvec_lshift<2, glm::u32>, //nb_lshift (binaryfunc)mvec_rshift<2, glm::u32>, //nb_rshift (binaryfunc)mvec_and<2, glm::u32>, //nb_and (binaryfunc)mvec_xor<2, glm::u32>, //nb_xor (binaryfunc)mvec_or<2, glm::u32>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)mvec_iadd<2, glm::u32>, //nb_inplace_add (binaryfunc)mvec_isub<2, glm::u32>, //nb_inplace_subtract (binaryfunc)mvec_imul<2, glm::u32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)mvec_ilshift<2, glm::u32>, //nb_inplace_lshift (binaryfunc)mvec_irshift<2, glm::u32>, //nb_inplace_rshift (binaryfunc)mvec_iand<2, glm::u32>, //nb_inplace_and (binaryfunc)mvec_ixor<2, glm::u32>, //nb_inplace_xor (binaryfunc)mvec_ior<2, glm::u32>, //nb_inplace_or (binaryfunc)mvec_div<2, glm::u32>, //nb_floor_divide (binaryfunc)mvec_div<2, glm::u32>, (binaryfunc)mvec_idiv<2, glm::u32>, //nb_inplace_floor_divide (binaryfunc)mvec_idiv<2, glm::u32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mvec_matmul, //nb_matrix_multiply (binaryfunc)mvec_imatmul<2, glm::u32>, //nb_inplace_matrix_multiply }; static PyTypeObject humvec2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "umvec2Iter", /* tp_name */ sizeof(mvecIter<2, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvecIter_dealloc<2, glm::u32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "umvec2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)mvec2Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvecIter_new<2, glm::u32>, /* tp_new */ }; static PyGLMTypeObject humvec2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.umvec2", /* tp_name */ sizeof(mvec<2, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mvec2_str, /* tp_repr */ & humvec2NumMethods, /* tp_as_number */ & humvec2SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)mvec_hash<2, glm::u32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mvec2_str, /* tp_str */ (getattrofunc)mvec_getattr<2, glm::u32>, /* tp_getattro */ (setattrofunc)mvec_setattr<2, glm::u32>, /* tp_setattro */ & humvec2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "umvec2( )\n2 components mvector of high qualifier unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mvec_richcompare<2, glm::u32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mvec_geniter<2, glm::u32>, /* tp_iter */ 0, /* tp_iternext */ humvec2_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mvec_init<2, glm::u32>, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvec_new<2, glm::u32>, /* tp_new */ }, PyGLM_TYPE_MVEC, 2, 0, sizeof(uint32), sizeof(glm::vec<2, uint32>), PyGLM_FS_UINT32, &huvec2Type }; static PyTypeObject& humvec2Type = *((PyTypeObject*)&humvec2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/uint/mvec3.h000066400000000000000000000156561511156275200235670ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" #include "../../vec/all.h" static PyMethodDef humvec3_methods[] = { { "__copy__", (PyCFunction)mvec_copy<3, glm::u32>, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)mvec_deepcopy<3, glm::u32>, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)mvec3_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mvec3_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mvec3_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)mvec3_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { NULL } /* Sentinel */ }; static PyBufferProcs humvec3BufferMethods = { (getbufferproc)mvec_getbuffer<3, glm::u32>, (releasebufferproc)mvec_releasebuffer, }; static PySequenceMethods humvec3SeqMethods = { (lenfunc)mvec_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)mvec3_sq_item, // sq_item 0, (ssizeobjargproc)mvec3_sq_ass_item, // sq_ass_item 0, (objobjproc)mvec_contains<3, glm::u32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods humvec3NumMethods = { (binaryfunc)mvec_add<3, glm::u32>, //nb_add (binaryfunc)mvec_sub<3, glm::u32>, //nb_subtract (binaryfunc)mvec_mul<3, glm::u32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)mvec_pos<3, glm::u32>, //nb_positive (unaryfunc)mvec_abs<3, glm::u32>, //nb_absolute 0, //nb_bool (unaryfunc)mvec_invert<3, glm::u32>, //nb_invert (binaryfunc)mvec_lshift<3, glm::u32>, //nb_lshift (binaryfunc)mvec_rshift<3, glm::u32>, //nb_rshift (binaryfunc)mvec_and<3, glm::u32>, //nb_and (binaryfunc)mvec_xor<3, glm::u32>, //nb_xor (binaryfunc)mvec_or<3, glm::u32>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)mvec_iadd<3, glm::u32>, //nb_inplace_add (binaryfunc)mvec_isub<3, glm::u32>, //nb_inplace_subtract (binaryfunc)mvec_imul<3, glm::u32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)mvec_ilshift<3, glm::u32>, //nb_inplace_lshift (binaryfunc)mvec_irshift<3, glm::u32>, //nb_inplace_rshift (binaryfunc)mvec_iand<3, glm::u32>, //nb_inplace_and (binaryfunc)mvec_ixor<3, glm::u32>, //nb_inplace_xor (binaryfunc)mvec_ior<3, glm::u32>, //nb_inplace_or (binaryfunc)mvec_div<3, glm::u32>, //nb_floor_divide (binaryfunc)mvec_div<3, glm::u32>, (binaryfunc)mvec_idiv<3, glm::u32>, //nb_inplace_floor_divide (binaryfunc)mvec_idiv<3, glm::u32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mvec_matmul, //nb_matrix_multiply (binaryfunc)mvec_imatmul<3, glm::u32>, //nb_inplace_matrix_multiply }; static PyTypeObject humvec3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "umvec3Iter", /* tp_name */ sizeof(mvecIter<3, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvecIter_dealloc<3, glm::u32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "umvec3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)mvec3Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvecIter_new<3, glm::u32>, /* tp_new */ }; static PyGLMTypeObject humvec3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.umvec3", /* tp_name */ sizeof(mvec<3, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mvec3_str, /* tp_repr */ & humvec3NumMethods, /* tp_as_number */ & humvec3SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)mvec_hash<3, glm::u32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mvec3_str, /* tp_str */ (getattrofunc)mvec_getattr<3, glm::u32>, /* tp_getattro */ (setattrofunc)mvec_setattr<3, glm::u32>, /* tp_setattro */ & humvec3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "umvec3( )\n3 components mvector of high qualifier unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mvec_richcompare<3, glm::u32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mvec_geniter<3, glm::u32>, /* tp_iter */ 0, /* tp_iternext */ humvec3_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mvec_init<3, glm::u32>, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvec_new<3, glm::u32>, /* tp_new */ }, PyGLM_TYPE_MVEC, 3, 0, sizeof(uint32), sizeof(glm::vec<3, uint32>), PyGLM_FS_UINT32, &huvec3Type }; static PyTypeObject& humvec3Type = *((PyTypeObject*)&humvec3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/mvec/uint/mvec4.h000066400000000000000000000156561511156275200235700ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" #include "../../vec/all.h" static PyMethodDef humvec4_methods[] = { { "__copy__", (PyCFunction)mvec_copy<4, glm::u32>, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)mvec_deepcopy<4, glm::u32>, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)mvec4_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)mvec4_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)mvec4_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)mvec4_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { NULL } /* Sentinel */ }; static PyBufferProcs humvec4BufferMethods = { (getbufferproc)mvec_getbuffer<4, glm::u32>, (releasebufferproc)mvec_releasebuffer, }; static PySequenceMethods humvec4SeqMethods = { (lenfunc)mvec_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)mvec4_sq_item, // sq_item 0, (ssizeobjargproc)mvec4_sq_ass_item, // sq_ass_item 0, (objobjproc)mvec_contains<4, glm::u32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods humvec4NumMethods = { (binaryfunc)mvec_add<4, glm::u32>, //nb_add (binaryfunc)mvec_sub<4, glm::u32>, //nb_subtract (binaryfunc)mvec_mul<4, glm::u32>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)mvec_pos<4, glm::u32>, //nb_positive (unaryfunc)mvec_abs<4, glm::u32>, //nb_absolute 0, //nb_bool (unaryfunc)mvec_invert<4, glm::u32>, //nb_invert (binaryfunc)mvec_lshift<4, glm::u32>, //nb_lshift (binaryfunc)mvec_rshift<4, glm::u32>, //nb_rshift (binaryfunc)mvec_and<4, glm::u32>, //nb_and (binaryfunc)mvec_xor<4, glm::u32>, //nb_xor (binaryfunc)mvec_or<4, glm::u32>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)mvec_iadd<4, glm::u32>, //nb_inplace_add (binaryfunc)mvec_isub<4, glm::u32>, //nb_inplace_subtract (binaryfunc)mvec_imul<4, glm::u32>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)mvec_ilshift<4, glm::u32>, //nb_inplace_lshift (binaryfunc)mvec_irshift<4, glm::u32>, //nb_inplace_rshift (binaryfunc)mvec_iand<4, glm::u32>, //nb_inplace_and (binaryfunc)mvec_ixor<4, glm::u32>, //nb_inplace_xor (binaryfunc)mvec_ior<4, glm::u32>, //nb_inplace_or (binaryfunc)mvec_div<4, glm::u32>, //nb_floor_divide (binaryfunc)mvec_div<4, glm::u32>, (binaryfunc)mvec_idiv<4, glm::u32>, //nb_inplace_floor_divide (binaryfunc)mvec_idiv<4, glm::u32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)mvec_matmul, //nb_matrix_multiply (binaryfunc)mvec_imatmul<4, glm::u32>, //nb_inplace_matrix_multiply }; static PyTypeObject humvec4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "umvec4Iter", /* tp_name */ sizeof(mvecIter<4, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvecIter_dealloc<4, glm::u32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "umvec4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)mvec4Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvecIter_new<4, glm::u32>, /* tp_new */ }; static PyGLMTypeObject humvec4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.umvec4", /* tp_name */ sizeof(mvec<4, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)mvec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)mvec4_str, /* tp_repr */ & humvec4NumMethods, /* tp_as_number */ & humvec4SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)mvec_hash<4, glm::u32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)mvec4_str, /* tp_str */ (getattrofunc)mvec_getattr<4, glm::u32>, /* tp_getattro */ (setattrofunc)mvec_setattr<4, glm::u32>, /* tp_setattro */ & humvec4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "umvec4( )\n4 components mvector of high qualifier unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)mvec_richcompare<4, glm::u32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)mvec_geniter<4, glm::u32>, /* tp_iter */ 0, /* tp_iternext */ humvec4_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)mvec_init<4, glm::u32>, /* tp_init */ 0, /* tp_alloc */ (newfunc)mvec_new<4, glm::u32>, /* tp_new */ }, PyGLM_TYPE_MVEC, 4, 0, sizeof(uint32), sizeof(glm::vec<4, uint32>), PyGLM_FS_UINT32, &huvec4Type }; static PyTypeObject& humvec4Type = *((PyTypeObject*)&humvec4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/qua/000077500000000000000000000000001511156275200212415ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/qua/all.h000066400000000000000000000002151511156275200221600ustar00rootroot00000000000000#ifndef TYPES_QUA_ALL_H #define TYPES_QUA_ALL_H #include "forward_declarations.h" #include "double/quat.h" #include "float/quat.h" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/qua/double/000077500000000000000000000000001511156275200225135ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/qua/double/quat.h000066400000000000000000000154761511156275200236530ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef hdqua_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)qua_length, METH_NOARGS, "returns the length of glm::dquat"}, { "__getstate__", (PyCFunction)qua_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)qua_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)qua_to_list, METH_NOARGS, "Return the components of this quaterion as a list"}, { "to_tuple", (PyCFunction)qua_to_tuple, METH_NOARGS, "Return the components of this quaterion as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)qua_from_bytes, METH_O | METH_STATIC, "Create a quaternion from a bytes string"}, { NULL } }; static PyMemberDef hdqua_members[] = { { (char*)"x", T_DOUBLE, offsetof(UNBRACKET(qua), super_type.x), 0, (char*)"dquat.x" }, { (char*)"y", T_DOUBLE, offsetof(UNBRACKET(qua), super_type.y), 0, (char*)"dquat.y" }, { (char*)"z", T_DOUBLE, offsetof(UNBRACKET(qua), super_type.z), 0, (char*)"dquat.z" }, { (char*)"w", T_DOUBLE, offsetof(UNBRACKET(qua), super_type.w), 0, (char*)"dquat.w" }, { NULL } /* Sentinel */ }; static PyBufferProcs hdquaBufferMethods = { (getbufferproc)qua_getbuffer, (releasebufferproc)qua_releasebuffer, }; static PySequenceMethods hdquaSeqMethods = { (lenfunc)qua_len, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)qua_sq_item, // sq_item 0, (ssizeobjargproc)qua_sq_ass_item, // sq_ass_item 0, (objobjproc)qua_contains, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hdquaNumMethods = { (binaryfunc)qua_add, //nb_add (binaryfunc)qua_sub, //nb_subtract (binaryfunc)qua_mul, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)qua_neg, //nb_negative (unaryfunc)qua_pos, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_double (binaryfunc)qua_iadd, //nb_inplace_add (binaryfunc)qua_isub, //nb_inplace_subtract (binaryfunc)qua_imul, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)qua_div, 0, //nb_inplace_floor_divide (binaryfunc)qua_idiv, //nb_inplace_true_divide 0, //nb_index (binaryfunc)qua_matmul, //nb_matrix_multiply (binaryfunc)qua_imatmul, //nb_inplace_matrix_multiply }; static PyTypeObject hdquaIterType = { PyVarObject_HEAD_INIT(NULL, 0) "dquatIter", /* tp_name */ sizeof(quaIter), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)quaIter_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "dquat iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)quaIter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)quaIter_new, /* tp_new */ }; static PyGLMTypeObject hdquaGLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.dquat", /* tp_name */ sizeof(qua), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)qua_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)qua_repr, /* tp_repr */ & hdquaNumMethods, /* tp_as_number */ & hdquaSeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)qua_hash, /* tp_hash */ 0, /* tp_call */ (reprfunc)qua_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & hdquaBufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "dquat( )\n4 components quaternion of double numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)qua_richcompare, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)qua_geniter, /* tp_iter */ 0, /* tp_iternext */ hdqua_methods, /* tp_methods */ hdqua_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)qua_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)qua_new, /* tp_new */ }, PyGLM_TYPE_QUA, 4, 0, sizeof(double), sizeof(glm::qua), PyGLM_FS_DOUBLE }; static PyTypeObject& hdquaType = *((PyTypeObject*)&hdquaGLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/qua/float/000077500000000000000000000000001511156275200223465ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/qua/float/quat.h000066400000000000000000000154201511156275200234730ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyMethodDef hfqua_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, {"length", (PyCFunction)qua_length, METH_NOARGS, "returns the length of glm::quat"}, { "__getstate__", (PyCFunction)qua_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)qua_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)qua_to_list, METH_NOARGS, "Return the components of this quaterion as a list"}, { "to_tuple", (PyCFunction)qua_to_tuple, METH_NOARGS, "Return the components of this quaterion as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)qua_from_bytes, METH_O | METH_STATIC, "Create a quaternion from a bytes string"}, { NULL } }; static PyMemberDef hfqua_members[] = { { (char*)"x", T_FLOAT, offsetof(UNBRACKET(qua), super_type.x), 0, (char*)"quat.x" }, { (char*)"y", T_FLOAT, offsetof(UNBRACKET(qua), super_type.y), 0, (char*)"quat.y" }, { (char*)"z", T_FLOAT, offsetof(UNBRACKET(qua), super_type.z), 0, (char*)"quat.z" }, { (char*)"w", T_FLOAT, offsetof(UNBRACKET(qua), super_type.w), 0, (char*)"quat.w" }, { NULL } /* Sentinel */ }; static PyBufferProcs hfquaBufferMethods = { (getbufferproc)qua_getbuffer, (releasebufferproc)qua_releasebuffer, }; static PySequenceMethods hfquaSeqMethods = { (lenfunc)qua_len, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)qua_sq_item, // sq_item 0, (ssizeobjargproc)qua_sq_ass_item, // sq_ass_item 0, (objobjproc)qua_contains, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hfquaNumMethods = { (binaryfunc)qua_add, //nb_add (binaryfunc)qua_sub, //nb_subtract (binaryfunc)qua_mul, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)qua_neg, //nb_negative (unaryfunc)qua_pos, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_float (binaryfunc)qua_iadd, //nb_inplace_add (binaryfunc)qua_isub, //nb_inplace_subtract (binaryfunc)qua_imul, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide (binaryfunc)qua_div, 0, //nb_inplace_floor_divide (binaryfunc)qua_idiv, //nb_inplace_true_divide 0, //nb_index (binaryfunc)qua_matmul, //nb_matrix_multiply (binaryfunc)qua_imatmul, //nb_inplace_matrix_multiply }; static PyTypeObject hfquaIterType = { PyVarObject_HEAD_INIT(NULL, 0) "quaIter", /* tp_name */ sizeof(quaIter), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)quaIter_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "quat iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)quaIter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)quaIter_new, /* tp_new */ }; static PyGLMTypeObject hfquaGLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.quat", /* tp_name */ sizeof(qua), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)qua_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)qua_repr, /* tp_repr */ & hfquaNumMethods, /* tp_as_number */ & hfquaSeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)qua_hash, /* tp_hash */ 0, /* tp_call */ (reprfunc)qua_str, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ & hfquaBufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "quat( )\n4 components quaternion of floating-point numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)qua_richcompare, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)qua_geniter, /* tp_iter */ 0, /* tp_iternext */ hfqua_methods, /* tp_methods */ hfqua_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)qua_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)qua_new, /* tp_new */ }, PyGLM_TYPE_QUA, 4, 0, sizeof(float), sizeof(glm::qua), PyGLM_FS_FLOAT }; static PyTypeObject& hfquaType = *((PyTypeObject*)&hfquaGLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/qua/forward_declarations.h000066400000000000000000000051361511156275200256130ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" static PyObject* qua_length(PyObject * self, PyObject* arg); template static int qua_getbuffer(qua* self, Py_buffer* view, int flags); static void qua_releasebuffer(PyObject* self, Py_buffer* view); static Py_ssize_t qua_len(PyObject* self); template static PyObject* qua_sq_item(qua * self, Py_ssize_t index); template static int qua_sq_ass_item(qua * self, Py_ssize_t index, PyObject * value); template static int qua_contains(qua * self, PyObject * value); template static PyObject * qua_add(PyObject *obj1, PyObject *obj2); template static PyObject * qua_sub(PyObject *obj1, PyObject *obj2); template static PyObject * qua_mul(PyObject *obj1, PyObject *obj2); template static PyObject * qua_neg(qua *obj); template static PyObject * qua_pos(qua *obj); static PyObject* qua_matmul(PyObject* obj1, PyObject* obj2); template static PyObject * qua_iadd(qua* self, PyObject *obj); template static PyObject * qua_isub(qua* self, PyObject *obj); template static PyObject * qua_imul(qua* self, PyObject *obj); template static PyObject * qua_div(PyObject *obj1, PyObject *obj2); template static PyObject * qua_idiv(qua* self, PyObject *obj); template static PyObject* qua_imatmul(qua* self, PyObject* obj); static void qua_dealloc(PyObject* self); template static PyObject* qua_str(qua* self); template static PyObject* qua_repr(qua* self); template static PyObject* qua_richcompare(qua* self, PyObject* other, int comp_type); template static PyObject* qua_geniter(qua* self); template static int qua_init(qua *self, PyObject *args, PyObject *kwds); template static PyObject* qua_new(PyTypeObject *type, PyObject *args, PyObject *kwds); template static void quaIter_dealloc(quaIter *rgstate); template static PyObject* quaIter_next(quaIter *rgstate); template static PyObject* quaIter_new(PyTypeObject *type, PyObject *args, PyObject *kwargs); template static PyObject* qua_from_bytes(PyObject*, PyObject* arg); template static Py_hash_t qua_hash(qua* self, PyObject*); template static PyObject* qua_to_list(qua* self, PyObject*); template static PyObject* qua_to_tuple(qua* self, PyObject*); template static PyObject* qua_setstate(qua* self, PyObject* state);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/types.h000066400000000000000000000264771511156275200220100ustar00rootroot00000000000000#pragma once #include "../imports.h" // type identifiers #define PyGLM_TYPE_UNKNOWN 0 #define PyGLM_TYPE_VEC 1 #define PyGLM_TYPE_MAT 2 #define PyGLM_TYPE_QUA 4 #define PyGLM_TYPE_CTYPES 8 #define PyGLM_TYPE_MVEC_FILTER 15 #define PyGLM_TYPE_MVEC (16 | PyGLM_TYPE_VEC) // format specifiers #define PyGLM_FS_FLOAT 'f' #define PyGLM_FS_DOUBLE 'd' #define PyGLM_FS_INT8 'b' #define PyGLM_FS_UINT8 'B' #define PyGLM_FS_INT16 'h' #define PyGLM_FS_UINT16 'H' #define PyGLM_FS_INT32 'i' #define PyGLM_FS_UINT32 'I' #define PyGLM_FS_INT64 'q' #define PyGLM_FS_UINT64 'Q' #define PyGLM_FS_BOOL '?' /* shape looks like this: For Vec: bits 0-3 = shape bits 4-7 = type examples: 0 1 2 3 4 5 6 7 0 0 1 0 1 1 0 1 = bvec4 0 1 2 3 4 5 6 7 1 0 0 0 0 0 0 0 = fvec1 For Mat: bits 0-2 = shape1 (n) bits 3-5 = shape2 (m) bits 6-7 = type examples: 0 1 2 3 4 5 6 7 0 1 0 1 1 0 1 0 = dmat2x3 For Qua: bits 0-3 = 4 (shape == 4) bits 4-7 = type (0 or 1 i.e. float or double respectively) examples: 0 1 2 3 4 5 6 7 0 0 1 0 0 0 0 0 = quat */ //#define PyGLM_TYPE_INFO_VEC_SHAPE_OFFSET 0 //#define PyGLM_TYPE_INFO_VEC_SHAPE_LENGTH 4 // //#define PyGLM_TYPE_INFO_VEC_TYPE_OFFSET 4 //#define PyGLM_TYPE_INFO_VEC_TYPE_LENGTH 4 // // //#define PyGLM_TYPE_INFO_MAT_SHAPE1_OFFSET 0 //#define PyGLM_TYPE_INFO_MAT_SHAPE1_LENGTH 3 // //#define PyGLM_TYPE_INFO_MAT_SHAPE2_OFFSET 3 //#define PyGLM_TYPE_INFO_MAT_SHAPE2_LENGTH 3 // //#define PyGLM_TYPE_INFO_MAT_TYPE_OFFSET 6 //#define PyGLM_TYPE_INFO_MAT_TYPE_LENGTH 2 #define PyGLM_TYPE_INFO_FLOAT 0 #define PyGLM_TYPE_INFO_DOUBLE 1 #define PyGLM_TYPE_INFO_INT 2 #define PyGLM_TYPE_INFO_UINT 3 #define PyGLM_TYPE_INFO_INT8 4 #define PyGLM_TYPE_INFO_UINT8 5 #define PyGLM_TYPE_INFO_INT16 6 #define PyGLM_TYPE_INFO_UINT16 7 #define PyGLM_TYPE_INFO_INT64 8 #define PyGLM_TYPE_INFO_UINT64 9 #define PyGLM_TYPE_INFO_BOOL 10 #define PyGLM_TYPE_INFO_UNKNOWN 15 #define PyGLM_UNKNOWN 0x0000000 #define PyGLM_DT_UNKNOWN PyGLM_UNKNOWN #define PyGLM_DT_FLOAT 0x0000001 #define PyGLM_DT_DOUBLE 0x0000002 #define PyGLM_DT_INT 0x0000004 #define PyGLM_DT_UINT 0x0000008 #define PyGLM_DT_INT8 0x0000010 #define PyGLM_DT_UINT8 0x0000020 #define PyGLM_DT_INT16 0x0000040 #define PyGLM_DT_UINT16 0x0000080 #define PyGLM_DT_INT64 0x0000100 #define PyGLM_DT_UINT64 0x0000200 #define PyGLM_DT_BOOL 0x0000400 #define PyGLM_DT_float PyGLM_DT_FLOAT #define PyGLM_DT_double PyGLM_DT_DOUBLE #define PyGLM_DT_int32 PyGLM_DT_INT #define PyGLM_DT_uint32 PyGLM_DT_UINT #define PyGLM_DT_int64 PyGLM_DT_INT64 #define PyGLM_DT_uint64 PyGLM_DT_UINT64 #define PyGLM_DT_int16 PyGLM_DT_INT16 #define PyGLM_DT_uint16 PyGLM_DT_UINT16 #define PyGLM_DT_int8 PyGLM_DT_INT8 #define PyGLM_DT_uint8 PyGLM_DT_UINT8 #define PyGLM_DT_bool PyGLM_DT_BOOL #define PyGLM_DT_FD (PyGLM_DT_FLOAT | PyGLM_DT_DOUBLE) #define PyGLM_DT_I32 (PyGLM_DT_INT | PyGLM_DT_UINT) #define PyGLM_DT_I64 (PyGLM_DT_INT64 | PyGLM_DT_UINT64) #define PyGLM_DT_I16 (PyGLM_DT_INT16 | PyGLM_DT_UINT16) #define PyGLM_DT_I8 (PyGLM_DT_INT8 | PyGLM_DT_UINT8) #define PyGLM_DT_I (PyGLM_DT_I32 | PyGLM_DT_I64 | PyGLM_DT_I16 | PyGLM_DT_I8) #define PyGLM_DT_NORMAL (PyGLM_DT_FD | PyGLM_DT_I32) #define PyGLM_SHAPE_2x2 0x0000800 #define PyGLM_SHAPE_2x3 0x0001000 #define PyGLM_SHAPE_2x4 0x0002000 #define PyGLM_SHAPE_3x2 0x0004000 #define PyGLM_SHAPE_3x3 0x0008000 #define PyGLM_SHAPE_3x4 0x0010000 #define PyGLM_SHAPE_4x2 0x0020000 #define PyGLM_SHAPE_4x3 0x0040000 #define PyGLM_SHAPE_4x4 0x0080000 #define PyGLM_SHAPE_1 0x0100000 #define PyGLM_SHAPE_2 0x0200000 #define PyGLM_SHAPE_3 0x0400000 #define PyGLM_SHAPE_4 0x0800000 #define PyGLM_T_VEC_ONLY 0x1000000 #define PyGLM_T_MVEC 0x2000000 #define PyGLM_T_VEC (PyGLM_T_VEC_ONLY | PyGLM_T_MVEC) #define PyGLM_T_MAT 0x4000000 #define PyGLM_T_QUA 0x8000000 #define PyGLM_T_NUMBER 0x10000000 #define PyGLM_T_ANY_VEC (PyGLM_T_VEC | PyGLM_T_MVEC) #define PyGLM_T_ANY_ARR (PyGLM_T_ANY_VEC | PyGLM_T_QUA) #define PyGLM_SHAPE_SQUARE (PyGLM_SHAPE_2x2 | PyGLM_SHAPE_3x3 | PyGLM_SHAPE_4x4) #define PyGLM_SHAPE_2xM (PyGLM_SHAPE_2x2 | PyGLM_SHAPE_2x3 | PyGLM_SHAPE_2x4) #define PyGLM_SHAPE_3xM (PyGLM_SHAPE_3x2 | PyGLM_SHAPE_3x3 | PyGLM_SHAPE_3x4) #define PyGLM_SHAPE_4xM (PyGLM_SHAPE_4x2 | PyGLM_SHAPE_4x3 | PyGLM_SHAPE_4x4) #define PyGLM_SHAPE_Nx2 (PyGLM_SHAPE_2x2 | PyGLM_SHAPE_3x2 | PyGLM_SHAPE_4x2) #define PyGLM_SHAPE_Nx3 (PyGLM_SHAPE_2x3 | PyGLM_SHAPE_3x3 | PyGLM_SHAPE_4x3) #define PyGLM_SHAPE_Nx4 (PyGLM_SHAPE_2x4 | PyGLM_SHAPE_3x4 | PyGLM_SHAPE_4x4) #define PyGLM_SHAPE_NxM (PyGLM_SHAPE_2xM | PyGLM_SHAPE_3xM | PyGLM_SHAPE_4xM) #define PyGLM_DT_MAT_ALL (PyGLM_DT_FLOAT | PyGLM_DT_DOUBLE | PyGLM_DT_INT | PyGLM_DT_UINT) #define PyGLM_DT_ALL ((1 << 11) - 1) #define PyGLM_SHAPE_ALL (((1 << 13) - 1) << 11) #define PyGLM_T_ALL (((1 << 5) - 1) << 24) #define PyGLM_ALL (PyGLM_DT_ALL | PyGLM_SHAPE_ALL | PyGLM_T_ALL) typedef int8_t int8; typedef uint8_t uint8; typedef int16_t int16; typedef uint16_t uint16; typedef int32_t int32; typedef uint32_t uint32; typedef int64_t int64; typedef uint64_t uint64; template constexpr uint8_t get_type_helper_type() { return (std::is_same::value) ? PyGLM_TYPE_INFO_FLOAT : (std::is_same::value) ? PyGLM_TYPE_INFO_DOUBLE : (std::is_same::value) ? PyGLM_TYPE_INFO_INT : (std::is_same::value) ? PyGLM_TYPE_INFO_UINT : (std::is_same::value) ? PyGLM_TYPE_INFO_INT8 : (std::is_same::value) ? PyGLM_TYPE_INFO_UINT8 : (std::is_same::value) ? PyGLM_TYPE_INFO_INT16 : (std::is_same::value) ? PyGLM_TYPE_INFO_UINT16 : (std::is_same::value) ? PyGLM_TYPE_INFO_INT64 : (std::is_same::value) ? PyGLM_TYPE_INFO_UINT64 : (std::is_same::value) ? PyGLM_TYPE_INFO_BOOL : PyGLM_TYPE_INFO_UNKNOWN; } template constexpr char get_format_specifier() { return (std::is_same::value) ? 'f' : (std::is_same::value) ? 'd' : (std::is_same::value) ? 'i' : (std::is_same::value) ? 'I' : (std::is_same::value) ? 'b' : (std::is_same::value) ? 'B' : (std::is_same::value) ? 'h' : (std::is_same::value) ? 'H' : (std::is_same::value) ? 'q' : (std::is_same::value) ? 'Q' : (std::is_same::value) ? '?' : 'B'; } //struct shape_helper { // PyObject_HEAD // uint8_t shape; //}; // type definitions //struct type_helper { // PyObject_HEAD // uint8_t info; //}; struct ctypes_helper { PyObject_HEAD void* b_ptr; /* pointer to memory block */ }; template struct vec { PyObject_HEAD //uint8_t info; glm::vec super_type; }; template struct vecIter { PyObject_VAR_HEAD glm::length_t seq_index; vec* sequence; }; struct mvec_helper { PyObject_HEAD //uint8_t info; void* super_type; PyObject* master; }; template struct mvec { PyObject_HEAD //uint8_t info; glm::vec* super_type; PyObject* master; }; template struct mvecIter { PyObject_VAR_HEAD glm::length_t seq_index; mvec* sequence; }; template struct mat { PyObject_HEAD //uint8_t info; glm::mat super_type; }; template struct matIter { PyObject_VAR_HEAD glm::length_t seq_index; mat* sequence; }; template struct qua { PyObject_HEAD //uint8_t info; glm::qua super_type; }; template struct quaIter { PyObject_VAR_HEAD glm::length_t seq_index; qua* sequence; }; struct glmArray { PyObject_HEAD char format; uint8 shape[2]; uint8 glmType; Py_ssize_t nBytes; Py_ssize_t itemCount; Py_ssize_t dtSize; Py_ssize_t itemSize; PyTypeObject* subtype; PyObject* reference; bool readonly; void* data; const int getShape() { return static_cast(shape[0]); } const int getShape(uint8 index) { return static_cast(shape[index]); } void setShape(int L) { shape[0] = static_cast(L); } void setShape(int C, int R) { shape[0] = static_cast(C); shape[1] = static_cast(R); } }; #define PyGLM_ARRAY_OFFSET sizeof(PyObject) #define PyGLM_ARRAY_SIZE (sizeof(glmArray) - PyGLM_ARRAY_OFFSET) struct glmArrayIter { PyObject_VAR_HEAD Py_ssize_t seq_index; glmArray* sequence; }; struct PyGLMTypeObject { PyTypeObject typeObject; uint8 glmType; uint8 C; uint8 R; Py_ssize_t dtSize; Py_ssize_t itemSize; char format; char reserved = '\x00'; int PTI_info; PyTypeObject* subtype; PyGLMTypeObject(PyTypeObject typeObject, uint8 glmType, uint8 C, uint8 R, Py_ssize_t dtSize, Py_ssize_t itemSize, char format) : PyGLMTypeObject(typeObject, glmType, C, R, dtSize, itemSize, format, (PyTypeObject*)this) {} PyGLMTypeObject(PyTypeObject typeObject, uint8 glmType, uint8 C, uint8 R, Py_ssize_t dtSize, Py_ssize_t itemSize, char format, PyTypeObject* subtype) : typeObject(typeObject), glmType(glmType), C(C), R(R), dtSize(dtSize), itemSize(itemSize), format(format), subtype(subtype) { if (glmType == PyGLM_TYPE_VEC) { int shape = (C == 1) ? PyGLM_SHAPE_1 : (C == 2) ? PyGLM_SHAPE_2 : (C == 3) ? PyGLM_SHAPE_3 : PyGLM_SHAPE_4; int type_info = (format == PyGLM_FS_FLOAT) ? PyGLM_DT_FLOAT : (format == PyGLM_FS_DOUBLE) ? PyGLM_DT_DOUBLE : (format == PyGLM_FS_INT32) ? PyGLM_DT_INT : (format == PyGLM_FS_UINT32) ? PyGLM_DT_UINT : (format == PyGLM_FS_INT64) ? PyGLM_DT_INT64 : (format == PyGLM_FS_UINT64) ? PyGLM_DT_UINT64 : (format == PyGLM_FS_INT16) ? PyGLM_DT_INT16 : (format == PyGLM_FS_UINT16) ? PyGLM_DT_UINT16 : (format == PyGLM_FS_INT8) ? PyGLM_DT_INT8 : (format == PyGLM_FS_UINT8) ? PyGLM_DT_UINT8 : PyGLM_DT_BOOL; PTI_info = shape | type_info | PyGLM_T_VEC; } else if (glmType == PyGLM_TYPE_MAT) { int shape = (C == 2) ? (R == 2) ? PyGLM_SHAPE_2x2 : (R == 3) ? PyGLM_SHAPE_2x3 : PyGLM_SHAPE_2x4 : (C == 3) ? (R == 2) ? PyGLM_SHAPE_3x2 : (R == 3) ? PyGLM_SHAPE_3x3 : PyGLM_SHAPE_3x4 : (R == 2) ? PyGLM_SHAPE_4x2 : (R == 3) ? PyGLM_SHAPE_4x3 : PyGLM_SHAPE_4x4; int type_info = (format == PyGLM_FS_FLOAT) ? PyGLM_DT_FLOAT : (format == PyGLM_FS_DOUBLE) ? PyGLM_DT_DOUBLE : (format == PyGLM_FS_INT32) ? PyGLM_DT_INT : PyGLM_DT_UINT; PTI_info = shape | type_info | PyGLM_T_MAT; } else if (glmType == PyGLM_TYPE_QUA) { int type_info = (format == PyGLM_FS_FLOAT) ? PyGLM_DT_FLOAT : PyGLM_DT_DOUBLE; PTI_info = type_info | PyGLM_T_QUA; } else { int shape = (C == 1) ? PyGLM_SHAPE_1 : (C == 2) ? PyGLM_SHAPE_2 : (C == 3) ? PyGLM_SHAPE_3 : PyGLM_SHAPE_4; int type_info = (format == PyGLM_FS_FLOAT) ? PyGLM_DT_FLOAT : (format == PyGLM_FS_DOUBLE) ? PyGLM_DT_DOUBLE : (format == PyGLM_FS_INT32) ? PyGLM_DT_INT : PyGLM_DT_UINT; PTI_info = shape | type_info | PyGLM_T_MVEC; } } inline char* getDataOf(PyObject* src) { char* out = reinterpret_cast(src); if (glmType == PyGLM_TYPE_MVEC) { return *reinterpret_cast((out + sizeof(PyObject))); } return (out + sizeof(PyObject)); } //inline PyTypeObject* typeObjectPointer() { // return &typeObject; //} //static inline PyGLMTypeObject* fromTypeObjectPointer(PyTypeObject* typeObject) { // constexpr uint64 typeObjectOffset = sizeof(PyGLMTypeObject) - sizeof(PyTypeObject); // return reinterpret_cast(reinterpret_cast(typeObject) - typeObjectOffset); //} };Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/000077500000000000000000000000001511156275200212305ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/all.h000066400000000000000000000005441511156275200221540ustar00rootroot00000000000000#ifndef TYPES_VEC_ALL_H #define TYPES_VEC_ALL_H #include "forward_declarations.h" #include "bool/all.h" #include "double/all.h" #include "float/all.h" #include "int8/all.h" #include "int16/all.h" #include "int32/all.h" #include "int64/all.h" #include "uint8/all.h" #include "uint16/all.h" #include "uint32/all.h" #include "uint64/all.h" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/bool/000077500000000000000000000000001511156275200221635ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/bool/all.h000066400000000000000000000002151511156275200231020ustar00rootroot00000000000000#ifndef TYPES_VEC_BOOL_ALL_H #define TYPES_VEC_BOOL_ALL_H #include "vec1.h" #include "vec2.h" #include "vec3.h" #include "vec4.h" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/bool/vec1.h000066400000000000000000000146011511156275200231740ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<1, bool> vec1_bool_t; static PyMemberDef hbvec1_members[] = { { (char*)"x", T_BOOL, offsetof(vec1_bool_t, super_type.x), 0, (char*)"bvec1.x" }, { NULL } /* Sentinel */ }; static PyMethodDef hbvec1_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec1_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec1_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<1, bool>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hbvec1BufferMethods = { (getbufferproc)vec_getbuffer<1, bool>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hbvec1SeqMethods = { (lenfunc)vec_len<1>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec1_sq_item, // sq_item 0, (ssizeobjargproc)vec1_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<1, bool>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hbvec1NumMethods = { (binaryfunc)bvec_add<1>, //nb_add 0, //nb_subtract (binaryfunc)bvec_mul<1>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)bvec_neg<1>, //nb_negative 0, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift vec_and<1, bool>, //nb_and vec_xor<1, bool>, //nb_xor vec_or<1, bool>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)bvec_iadd<1>, //nb_inplace_add 0, //nb_inplace_subtract (binaryfunc)bvec_imul<1>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide 0, 0, //nb_inplace_floor_divide 0, //nb_inplace_true_divide 0, //nb_index 0, //nb_matrix_multiply 0, //nb_inplace_matrix_multiply }; static PyTypeObject hbvec1IterType = { PyVarObject_HEAD_INIT(NULL, 0) "bvec1Iter", /* tp_name */ sizeof(vecIter<1, bool>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<1, bool>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "bvec1 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec1Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<1, bool>, /* tp_new */ }; static PyGLMTypeObject hbvec1GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.bvec1", /* tp_name */ sizeof(vec<1, bool>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec1_repr, /* tp_repr */ &hbvec1NumMethods, /* tp_as_number */ &hbvec1SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<1, bool>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec1_str, /* tp_str */ (getattrofunc)vec_getattr<1, bool>, /* tp_getattro */ (setattrofunc)vec_setattr<1, bool>, /* tp_setattro */ &hbvec1BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "bvec1( )\n1 component vector of high qualifier boolean values.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<1, bool>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<1, bool>, /* tp_iter */ 0, /* tp_iternext */ hbvec1_methods, /* tp_methods */ hbvec1_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec1_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<1, bool>, /* tp_new */ }, PyGLM_TYPE_VEC, 1, 0, sizeof(bool), sizeof(glm::vec<1, bool>), PyGLM_FS_BOOL }; static PyTypeObject& hbvec1Type = *((PyTypeObject*)&hbvec1GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/bool/vec2.h000066400000000000000000000147301511156275200232000ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<2, bool> vec2_bool_t; static PyMemberDef hbvec2_members[] = { { (char*)"x", T_BOOL, offsetof(vec2_bool_t, super_type.x), 0, (char*)"bvec2.x" }, { (char*)"y", T_BOOL, offsetof(vec2_bool_t, super_type.y), 0, (char*)"bvec2.y" }, { NULL } /* Sentinel */ }; static PyMethodDef hbvec2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec2_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec2_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<2, bool>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hbvec2BufferMethods = { (getbufferproc)vec_getbuffer<2, bool>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hbvec2SeqMethods = { (lenfunc)vec_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec2_sq_item, // sq_item 0, (ssizeobjargproc)vec2_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<2, bool>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hbvec2NumMethods = { (binaryfunc)bvec_add<2>, //nb_add 0, //nb_subtract (binaryfunc)bvec_mul<2>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)bvec_neg<2>, //nb_negative 0, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift vec_and<2, bool>, //nb_and vec_xor<2, bool>, //nb_xor vec_or<2, bool>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)bvec_iadd<2>, //nb_inplace_add 0, //nb_inplace_subtract (binaryfunc)bvec_imul<2>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide 0, 0, //nb_inplace_floor_divide 0, //nb_inplace_true_divide 0, //nb_index 0, //nb_matrix_multiply 0, //nb_inplace_matrix_multiply }; static PyTypeObject hbvec2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "bvec2Iter", /* tp_name */ sizeof(vecIter<2, bool>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<2, bool>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "bvec2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec2Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<2, bool>, /* tp_new */ }; static PyGLMTypeObject hbvec2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.bvec2", /* tp_name */ sizeof(vec<2, bool>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec2_repr, /* tp_repr */ & hbvec2NumMethods, /* tp_as_number */ & hbvec2SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<2, bool>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec2_str, /* tp_str */ (getattrofunc)vec_getattr<2, bool>, /* tp_getattro */ (setattrofunc)vec_setattr<2, bool>, /* tp_setattro */ & hbvec2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "bvec2( )\n2 components vector of high qualifier boolean values.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<2, bool>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<2, bool>, /* tp_iter */ 0, /* tp_iternext */ hbvec2_methods, /* tp_methods */ hbvec2_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<2, bool>, /* tp_new */ }, PyGLM_TYPE_VEC, 2, 0, sizeof(bool), sizeof(glm::vec<2, bool>), PyGLM_FS_BOOL }; static PyTypeObject& hbvec2Type = *((PyTypeObject*)&hbvec2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/bool/vec3.h000066400000000000000000000150531511156275200232000ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<3, bool> vec3_bool_t; static PyMemberDef hbvec3_members[] = { { (char*)"x", T_BOOL, offsetof(vec3_bool_t, super_type.x), 0, (char*)"bvec3.x" }, { (char*)"y", T_BOOL, offsetof(vec3_bool_t, super_type.y), 0, (char*)"bvec3.y" }, { (char*)"z", T_BOOL, offsetof(vec3_bool_t, super_type.z), 0, (char*)"bvec3.z" }, { NULL } /* Sentinel */ }; static PyMethodDef hbvec3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec3_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec3_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<3, bool>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hbvec3BufferMethods = { (getbufferproc)vec_getbuffer<3, bool>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hbvec3SeqMethods = { (lenfunc)vec_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec3_sq_item, // sq_item 0, (ssizeobjargproc)vec3_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<3, bool>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hbvec3NumMethods = { (binaryfunc)bvec_add<3>, //nb_add 0, //nb_subtract (binaryfunc)bvec_mul<3>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)bvec_neg<3>, //nb_negative 0, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift vec_and<3, bool>, //nb_and vec_xor<3, bool>, //nb_xor vec_or<3, bool>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)bvec_iadd<3>, //nb_inplace_add 0, //nb_inplace_subtract (binaryfunc)bvec_imul<3>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide 0, 0, //nb_inplace_floor_divide 0, //nb_inplace_true_divide 0, //nb_index 0, //nb_matrix_multiply 0, //nb_inplace_matrix_multiply }; static PyTypeObject hbvec3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "bvec3Iter", /* tp_name */ sizeof(vecIter<3, bool>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<3, bool>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "bvec3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec3Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<3, bool>, /* tp_new */ }; static PyGLMTypeObject hbvec3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.bvec3", /* tp_name */ sizeof(vec<3, bool>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec3_repr, /* tp_repr */ & hbvec3NumMethods, /* tp_as_number */ & hbvec3SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<3, bool>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec3_str, /* tp_str */ (getattrofunc)vec_getattr<3, bool>, /* tp_getattro */ (setattrofunc)vec_setattr<3, bool>, /* tp_setattro */ & hbvec3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "bvec3( )\n3 components vector of high qualifier boolean values.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<3, bool>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<3, bool>, /* tp_iter */ 0, /* tp_iternext */ hbvec3_methods, /* tp_methods */ hbvec3_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<3, bool>, /* tp_new */ }, PyGLM_TYPE_VEC, 3, 0, sizeof(bool), sizeof(glm::vec<3, bool>), PyGLM_FS_BOOL }; static PyTypeObject& hbvec3Type = *((PyTypeObject*)&hbvec3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/bool/vec4.h000066400000000000000000000151741511156275200232050ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<4, bool> vec4_bool_t; static PyMemberDef hbvec4_members[] = { { (char*)"x", T_BOOL, offsetof(vec4_bool_t, super_type.x), 0, (char*)"bvec4.x" }, { (char*)"y", T_BOOL, offsetof(vec4_bool_t, super_type.y), 0, (char*)"bvec4.y" }, { (char*)"z", T_BOOL, offsetof(vec4_bool_t, super_type.z), 0, (char*)"bvec4.z" }, { (char*)"w", T_BOOL, offsetof(vec4_bool_t, super_type.w), 0, (char*)"bvec4.w" }, { NULL } /* Sentinel */ }; static PyMethodDef hbvec4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec4_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec4_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<4, bool>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hbvec4BufferMethods = { (getbufferproc)vec_getbuffer<4, bool>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hbvec4SeqMethods = { (lenfunc)vec_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec4_sq_item, // sq_item 0, (ssizeobjargproc)vec4_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<4, bool>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hbvec4NumMethods = { (binaryfunc)bvec_add<4>, //nb_add 0, //nb_subtract (binaryfunc)bvec_mul<4>, //nb_multiply 0, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)bvec_neg<4>, //nb_negative 0, //nb_positive 0, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift vec_and<4, bool>, //nb_and vec_xor<4, bool>, //nb_xor vec_or<4, bool>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)bvec_iadd<4>, //nb_inplace_add 0, //nb_inplace_subtract (binaryfunc)bvec_imul<4>, //nb_inplace_multiply 0, //nb_inplace_remainder 0, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or 0, //nb_floor_divide 0, 0, //nb_inplace_floor_divide 0, //nb_inplace_true_divide 0, //nb_index 0, //nb_matrix_multiply 0, //nb_inplace_matrix_multiply }; static PyTypeObject hbvec4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "bvec4Iter", /* tp_name */ sizeof(vecIter<4, bool>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<4, bool>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "bvec4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec4Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<4, bool>, /* tp_new */ }; static PyGLMTypeObject hbvec4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.bvec4", /* tp_name */ sizeof(vec<4, bool>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec4_repr, /* tp_repr */ &hbvec4NumMethods, /* tp_as_number */ &hbvec4SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<4, bool>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec4_str, /* tp_str */ (getattrofunc)vec_getattr<4, bool>, /* tp_getattro */ (setattrofunc)vec_setattr<4, bool>, /* tp_setattro */ & hbvec4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "bvec4( )\n4 components vector of high qualifier boolean values.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<4, bool>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<4, bool>, /* tp_iter */ 0, /* tp_iternext */ hbvec4_methods, /* tp_methods */ hbvec4_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<4, bool>, /* tp_new */ }, PyGLM_TYPE_VEC, 4, 0, sizeof(bool), sizeof(glm::vec<4, bool>), PyGLM_FS_BOOL }; static PyTypeObject& hbvec4Type = *((PyTypeObject*)&hbvec4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/double/000077500000000000000000000000001511156275200225025ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/double/all.h000066400000000000000000000002231511156275200234200ustar00rootroot00000000000000#ifndef TYPES_VEC_DOUBLE_ALL_H #define TYPES_VEC_DOUBLE_ALL_H #include "vec1.h" #include "vec2.h" #include "vec3.h" #include "vec4.h" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/double/vec1.h000066400000000000000000000155731511156275200235240ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<1, double> vec1_double_t; static PyMemberDef hdvec1_members[] = { { (char*)"x", T_DOUBLE, offsetof(vec1_double_t, super_type.x), 0, (char*)"dvec1.x" }, { NULL } /* Sentinel */ }; static PyMethodDef hdvec1_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec1_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec1_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<1, double>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hdvec1BufferMethods = { (getbufferproc)vec_getbuffer<1, double>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hdvec1SeqMethods = { (lenfunc)vec_len<1>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec1_sq_item, // sq_item 0, (ssizeobjargproc)vec1_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<1, double>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hdvec1NumMethods = { (binaryfunc)vec_add<1, double>, //nb_add (binaryfunc)vec_sub<1, double>, //nb_subtract (binaryfunc)vec_mul<1, double>, //nb_multiply (binaryfunc)vec_mod<1, double>, //nb_remainder (binaryfunc)vec_divmod<1, double>, //nb_divmod (ternaryfunc)vec_pow<1, double>, //nb_power (unaryfunc)vec_neg<1, double>, //nb_negative (unaryfunc)vec_pos<1, double>, //nb_positive (unaryfunc)vec_abs<1, double>, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_double (binaryfunc)vec_iadd<1, double>, //nb_inplace_add (binaryfunc)vec_isub<1, double>, //nb_inplace_subtract (binaryfunc)vec_imul<1, double>, //nb_inplace_multiply (binaryfunc)vec_imod<1, double>, //nb_inplace_remainder (ternaryfunc)vec_ipow<1, double>, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or (binaryfunc)vec_floordiv<1, double>, //nb_floor_divide (binaryfunc)vec_div<1, double>, (binaryfunc)vec_ifloordiv<1, double>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<1, double>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<1, double>, //nb_inplace_matrix_multiply }; static PyTypeObject hdvec1IterType = { PyVarObject_HEAD_INIT(NULL, 0) "dvec1Iter", /* tp_name */ sizeof(vecIter<1, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<1, double>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "dvec1 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec1Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<1, double>, /* tp_new */ }; static PyGLMTypeObject hdvec1GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.dvec1", /* tp_name */ sizeof(vec<1, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec1_repr, /* tp_repr */ & hdvec1NumMethods, /* tp_as_number */ & hdvec1SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<1, double>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec1_str, /* tp_str */ (getattrofunc)vec_getattr<1, double>, /* tp_getattro */ (setattrofunc)vec_setattr<1, double>, /* tp_setattro */ & hdvec1BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "dvec1( )\n1 component vector of high qualifier double numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<1, double>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<1, double>, /* tp_iter */ 0, /* tp_iternext */ hdvec1_methods, /* tp_methods */ hdvec1_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec1_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<1, double>, /* tp_new */ }, PyGLM_TYPE_VEC, 1, 0, sizeof(double), sizeof(glm::vec<1, double>), PyGLM_FS_DOUBLE }; static PyTypeObject& hdvec1Type = *((PyTypeObject*)&hdvec1GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/double/vec2.h000066400000000000000000000157231511156275200235220ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<2, double> vec2_double_t; static PyMemberDef hdvec2_members[] = { { (char*)"x", T_DOUBLE, offsetof(vec2_double_t, super_type.x), 0, (char*)"dvec2.x" }, { (char*)"y", T_DOUBLE, offsetof(vec2_double_t, super_type.y), 0, (char*)"dvec2.y" }, { NULL } /* Sentinel */ }; static PyMethodDef hdvec2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec2_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec2_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<2, double>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hdvec2BufferMethods = { (getbufferproc)vec_getbuffer<2, double>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hdvec2SeqMethods = { (lenfunc)vec_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec2_sq_item, // sq_item 0, (ssizeobjargproc)vec2_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<2, double>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hdvec2NumMethods = { (binaryfunc)vec_add<2, double>, //nb_add (binaryfunc)vec_sub<2, double>, //nb_subtract (binaryfunc)vec_mul<2, double>, //nb_multiply (binaryfunc)vec_mod<2, double>, //nb_remainder (binaryfunc)vec_divmod<2, double>, //nb_divmod (ternaryfunc)vec_pow<2, double>, //nb_power (unaryfunc)vec_neg<2, double>, //nb_negative (unaryfunc)vec_pos<2, double>, //nb_positive (unaryfunc)vec_abs<2, double>, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_double (binaryfunc)vec_iadd<2, double>, //nb_inplace_add (binaryfunc)vec_isub<2, double>, //nb_inplace_subtract (binaryfunc)vec_imul<2, double>, //nb_inplace_multiply (binaryfunc)vec_imod<2, double>, //nb_inplace_remainder (ternaryfunc)vec_ipow<2, double>, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or (binaryfunc)vec_floordiv<2, double>, //nb_floor_divide (binaryfunc)vec_div<2, double>, (binaryfunc)vec_ifloordiv<2, double>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<2, double>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<2, double>, //nb_inplace_matrix_multiply }; static PyTypeObject hdvec2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "dvec2Iter", /* tp_name */ sizeof(vecIter<2, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<2, double>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "dvec2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec2Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<2, double>, /* tp_new */ }; static PyGLMTypeObject hdvec2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.dvec2", /* tp_name */ sizeof(vec<2, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec2_repr, /* tp_repr */ & hdvec2NumMethods, /* tp_as_number */ & hdvec2SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<2, double>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec2_str, /* tp_str */ (getattrofunc)vec_getattr<2, double>, /* tp_getattro */ (setattrofunc)vec_setattr<2, double>, /* tp_setattro */ & hdvec2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "dvec2( )\n2 components vector of high qualifier double numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<2, double>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<2, double>, /* tp_iter */ 0, /* tp_iternext */ hdvec2_methods, /* tp_methods */ hdvec2_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<2, double>, /* tp_new */ }, PyGLM_TYPE_VEC, 2, 0, sizeof(double), sizeof(glm::vec<2, double>), PyGLM_FS_DOUBLE }; static PyTypeObject& hdvec2Type = *((PyTypeObject*)&hdvec2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/double/vec3.h000066400000000000000000000160521511156275200235170ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<3, double> vec3_double_t; static PyMemberDef hdvec3_members[] = { { (char*)"x", T_DOUBLE, offsetof(vec3_double_t, super_type.x), 0, (char*)"dvec3.x" }, { (char*)"y", T_DOUBLE, offsetof(vec3_double_t, super_type.y), 0, (char*)"dvec3.y" }, { (char*)"z", T_DOUBLE, offsetof(vec3_double_t, super_type.z), 0, (char*)"dvec3.z" }, { NULL } /* Sentinel */ }; static PyMethodDef hdvec3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec3_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec3_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<3, double>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hdvec3BufferMethods = { (getbufferproc)vec_getbuffer<3, double>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hdvec3SeqMethods = { (lenfunc)vec_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec3_sq_item, // sq_item 0, (ssizeobjargproc)vec3_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<3, double>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hdvec3NumMethods = { (binaryfunc)vec_add<3, double>, //nb_add (binaryfunc)vec_sub<3, double>, //nb_subtract (binaryfunc)vec_mul<3, double>, //nb_multiply (binaryfunc)vec_mod<3, double>, //nb_remainder (binaryfunc)vec_divmod<3, double>, //nb_divmod (ternaryfunc)vec_pow<3, double>, //nb_power (unaryfunc)vec_neg<3, double>, //nb_negative (unaryfunc)vec_pos<3, double>, //nb_positive (unaryfunc)vec_abs<3, double>, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_double (binaryfunc)vec_iadd<3, double>, //nb_inplace_add (binaryfunc)vec_isub<3, double>, //nb_inplace_subtract (binaryfunc)vec_imul<3, double>, //nb_inplace_multiply (binaryfunc)vec_imod<3, double>, //nb_inplace_remainder (ternaryfunc)vec_ipow<3, double>, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or (binaryfunc)vec_floordiv<3, double>, //nb_floor_divide (binaryfunc)vec_div<3, double>, (binaryfunc)vec_ifloordiv<3, double>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<3, double>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<3, double>, //nb_inplace_matrix_multiply }; static PyTypeObject hdvec3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "dvec3Iter", /* tp_name */ sizeof(vecIter<3, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<3, double>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "dvec3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec3Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<3, double>, /* tp_new */ }; static PyGLMTypeObject hdvec3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.dvec3", /* tp_name */ sizeof(vec<3, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec3_repr, /* tp_repr */ & hdvec3NumMethods, /* tp_as_number */ & hdvec3SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<3, double>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec3_str, /* tp_str */ (getattrofunc)vec_getattr<3, double>, /* tp_getattro */ (setattrofunc)vec_setattr<3, double>, /* tp_setattro */ & hdvec3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "dvec3( )\n3 components vector of high qualifier double numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<3, double>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<3, double>, /* tp_iter */ 0, /* tp_iternext */ hdvec3_methods, /* tp_methods */ hdvec3_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<3, double>, /* tp_new */ }, PyGLM_TYPE_VEC, 3, 0, sizeof(double), sizeof(glm::vec<3, double>), PyGLM_FS_DOUBLE }; static PyTypeObject& hdvec3Type = *((PyTypeObject*)&hdvec3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/double/vec4.h000066400000000000000000000162011511156275200235140ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<4, double> vec4_double_t; static PyMemberDef hdvec4_members[] = { { (char*)"x", T_DOUBLE, offsetof(vec4_double_t, super_type.x), 0, (char*)"dvec4.x" }, { (char*)"y", T_DOUBLE, offsetof(vec4_double_t, super_type.y), 0, (char*)"dvec4.y" }, { (char*)"z", T_DOUBLE, offsetof(vec4_double_t, super_type.z), 0, (char*)"dvec4.z" }, { (char*)"w", T_DOUBLE, offsetof(vec4_double_t, super_type.w), 0, (char*)"dvec4.w" }, { NULL } /* Sentinel */ }; static PyMethodDef hdvec4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec4_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec4_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<4, double>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hdvec4BufferMethods = { (getbufferproc)vec_getbuffer<4, double>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hdvec4SeqMethods = { (lenfunc)vec_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec4_sq_item, // sq_item 0, (ssizeobjargproc)vec4_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<4, double>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hdvec4NumMethods = { (binaryfunc)vec_add<4, double>, //nb_add (binaryfunc)vec_sub<4, double>, //nb_subtract (binaryfunc)vec_mul<4, double>, //nb_multiply (binaryfunc)vec_mod<4, double>, //nb_remainder (binaryfunc)vec_divmod<4, double>, //nb_divmod (ternaryfunc)vec_pow<4, double>, //nb_power (unaryfunc)vec_neg<4, double>, //nb_negative (unaryfunc)vec_pos<4, double>, //nb_positive (unaryfunc)vec_abs<4, double>, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_double (binaryfunc)vec_iadd<4, double>, //nb_inplace_add (binaryfunc)vec_isub<4, double>, //nb_inplace_subtract (binaryfunc)vec_imul<4, double>, //nb_inplace_multiply (binaryfunc)vec_imod<4, double>, //nb_inplace_remainder (ternaryfunc)vec_ipow<4, double>, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or (binaryfunc)vec_floordiv<4, double>, //nb_floor_divide (binaryfunc)vec_div<4, double>, (binaryfunc)vec_ifloordiv<4, double>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<4, double>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<4, double>, //nb_inplace_matrix_multiply }; static PyTypeObject hdvec4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "dvec4Iter", /* tp_name */ sizeof(vecIter<4, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<4, double>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "dvec4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec4Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<4, double>, /* tp_new */ }; static PyGLMTypeObject hdvec4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.dvec4", /* tp_name */ sizeof(vec<4, double>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec4_repr, /* tp_repr */ & hdvec4NumMethods, /* tp_as_number */ & hdvec4SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<4, double>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec4_str, /* tp_str */ (getattrofunc)vec_getattr<4, double>, /* tp_getattro */ (setattrofunc)vec_setattr<4, double>, /* tp_setattro */ & hdvec4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "dvec4( )\n4 components vector of high qualifier double numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<4, double>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<4, double>, /* tp_iter */ 0, /* tp_iternext */ hdvec4_methods, /* tp_methods */ hdvec4_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<4, double>, /* tp_new */ }, PyGLM_TYPE_VEC, 4, 0, sizeof(double), sizeof(glm::vec<4, double>), PyGLM_FS_DOUBLE }; static PyTypeObject& hdvec4Type = *((PyTypeObject*)&hdvec4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/float/000077500000000000000000000000001511156275200223355ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/float/all.h000066400000000000000000000002171511156275200232560ustar00rootroot00000000000000#ifndef TYPES_VEC_FLOAT_ALL_H #define TYPES_VEC_FLOAT_ALL_H #include "vec1.h" #include "vec2.h" #include "vec3.h" #include "vec4.h" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/float/vec1.h000066400000000000000000000155031511156275200233500ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<1, float> vec1_float_t; static PyMemberDef hfvec1_members[] = { { (char*)"x", T_FLOAT, offsetof(vec1_float_t, super_type.x), 0, (char*)"vec1.x" }, { NULL } /* Sentinel */ }; static PyMethodDef hfvec1_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec1_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec1_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<1, float>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hfvec1BufferMethods = { (getbufferproc)vec_getbuffer<1, float>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hfvec1SeqMethods = { (lenfunc)vec_len<1>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec1_sq_item, // sq_item 0, (ssizeobjargproc)vec1_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<2, float>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hfvec1NumMethods = { (binaryfunc)vec_add<1, float>, //nb_add (binaryfunc)vec_sub<1, float>, //nb_subtract (binaryfunc)vec_mul<1, float>, //nb_multiply (binaryfunc)vec_mod<1, float>, //nb_remainder (binaryfunc)vec_divmod<1, float>, //nb_divmod (ternaryfunc)vec_pow<1, float>, //nb_power (unaryfunc)vec_neg<1, float>, //nb_negative (unaryfunc)vec_pos<1, float>, //nb_positive (unaryfunc)vec_abs<1, float>, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_float (binaryfunc)vec_iadd<1, float>, //nb_inplace_add (binaryfunc)vec_isub<1, float>, //nb_inplace_subtract (binaryfunc)vec_imul<1, float>, //nb_inplace_multiply (binaryfunc)vec_imod<1, float>, //nb_inplace_remainder (ternaryfunc)vec_ipow<1, float>, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or (binaryfunc)vec_floordiv<1, float>, //nb_floor_divide (binaryfunc)vec_div<1, float>, (binaryfunc)vec_ifloordiv<1, float>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<1, float>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<1, float>, //nb_inplace_matrix_multiply }; static PyTypeObject hfvec1IterType = { PyVarObject_HEAD_INIT(NULL, 0) "vec1Iter", /* tp_name */ sizeof(vecIter<1, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<1, float>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "vec1 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec1Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<1, float>, /* tp_new */ }; static PyGLMTypeObject hfvec1GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.vec1", /* tp_name */ sizeof(vec<1, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec1_repr, /* tp_repr */ & hfvec1NumMethods, /* tp_as_number */ & hfvec1SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<1, float>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec1_str, /* tp_str */ (getattrofunc)vec_getattr<1, float>, /* tp_getattro */ (setattrofunc)vec_setattr<1, float>, /* tp_setattro */ & hfvec1BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "vec1( )\n1 component vector of high qualifier float numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<1, float>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<1, float>, /* tp_iter */ 0, /* tp_iternext */ hfvec1_methods, /* tp_methods */ hfvec1_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec1_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<1, float>, /* tp_new */ }, PyGLM_TYPE_VEC, 1, 0, sizeof(float), sizeof(glm::vec<1, float>), PyGLM_FS_FLOAT }; static PyTypeObject& hfvec1Type = *((PyTypeObject*)&hfvec1GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/float/vec2.h000066400000000000000000000156301511156275200233520ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<2, float> vec2_float_t; static PyMemberDef hfvec2_members[] = { { (char*)"x", T_FLOAT, offsetof(vec2_float_t, super_type.x), 0, (char*)"vec2.x" }, { (char*)"y", T_FLOAT, offsetof(vec2_float_t, super_type.y), 0, (char*)"vec2.y" }, { NULL } /* Sentinel */ }; static PyMethodDef hfvec2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec2_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec2_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<2, float>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hfvec2BufferMethods = { (getbufferproc)vec_getbuffer<2, float>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hfvec2SeqMethods = { (lenfunc)vec_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec2_sq_item, // sq_item 0, (ssizeobjargproc)vec2_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<2, float>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hfvec2NumMethods = { (binaryfunc)vec_add<2, float>, //nb_add (binaryfunc)vec_sub<2, float>, //nb_subtract (binaryfunc)vec_mul<2, float>, //nb_multiply (binaryfunc)vec_mod<2, float>, //nb_remainder (binaryfunc)vec_divmod<2, float>, //nb_divmod (ternaryfunc)vec_pow<2, float>, //nb_power (unaryfunc)vec_neg<2, float>, //nb_negative (unaryfunc)vec_pos<2, float>, //nb_positive (unaryfunc)vec_abs<2, float>, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_float (binaryfunc)vec_iadd<2, float>, //nb_inplace_add (binaryfunc)vec_isub<2, float>, //nb_inplace_subtract (binaryfunc)vec_imul<2, float>, //nb_inplace_multiply (binaryfunc)vec_imod<2, float>, //nb_inplace_remainder (ternaryfunc)vec_ipow<2, float>, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or (binaryfunc)vec_floordiv<2, float>, //nb_floor_divide (binaryfunc)vec_div<2, float>, (binaryfunc)vec_ifloordiv<2, float>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<2, float>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<2, float>, //nb_inplace_matrix_multiply }; static PyTypeObject hfvec2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "vec2Iter", /* tp_name */ sizeof(vecIter<2, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<2, float>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "vec2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec2Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<2, float>, /* tp_new */ }; static PyGLMTypeObject hfvec2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.vec2", /* tp_name */ sizeof(vec<2, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec2_repr, /* tp_repr */ & hfvec2NumMethods, /* tp_as_number */ & hfvec2SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<2, float>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec2_str, /* tp_str */ (getattrofunc)vec_getattr<2, float>, /* tp_getattro */ (setattrofunc)vec_setattr<2, float>, /* tp_setattro */ & hfvec2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "vec2( )\n2 components vector of high qualifier float numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<2, float>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<2, float>, /* tp_iter */ 0, /* tp_iternext */ hfvec2_methods, /* tp_methods */ hfvec2_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<2, float>, /* tp_new */ }, PyGLM_TYPE_VEC, 2, 0, sizeof(float), sizeof(glm::vec<2, float>), PyGLM_FS_FLOAT }; static PyTypeObject& hfvec2Type = *((PyTypeObject*)&hfvec2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/float/vec3.h000066400000000000000000000157541511156275200233620ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<3, float> vec3_float_t; static PyMemberDef hfvec3_members[] = { { (char*)"x", T_FLOAT, offsetof(vec3_float_t, super_type.x), 0, (char*)"vec3.x" }, { (char*)"y", T_FLOAT, offsetof(vec3_float_t, super_type.y), 0, (char*)"vec3.y" }, { (char*)"z", T_FLOAT, offsetof(vec3_float_t, super_type.z), 0, (char*)"vec3.z" }, { NULL } /* Sentinel */ }; static PyMethodDef hfvec3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec3_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec3_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<3, float>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hfvec3BufferMethods = { (getbufferproc)vec_getbuffer<3, float>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hfvec3SeqMethods = { (lenfunc)vec_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec3_sq_item, // sq_item 0, (ssizeobjargproc)vec3_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<3, float>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hfvec3NumMethods = { (binaryfunc)vec_add<3, float>, //nb_add (binaryfunc)vec_sub<3, float>, //nb_subtract (binaryfunc)vec_mul<3, float>, //nb_multiply (binaryfunc)vec_mod<3, float>, //nb_remainder (binaryfunc)vec_divmod<3, float>, //nb_divmod (ternaryfunc)vec_pow<3, float>, //nb_power (unaryfunc)vec_neg<3, float>, //nb_negative (unaryfunc)vec_pos<3, float>, //nb_positive (unaryfunc)vec_abs<3, float>, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_float (binaryfunc)vec_iadd<3, float>, //nb_inplace_add (binaryfunc)vec_isub<3, float>, //nb_inplace_subtract (binaryfunc)vec_imul<3, float>, //nb_inplace_multiply (binaryfunc)vec_imod<3, float>, //nb_inplace_remainder (ternaryfunc)vec_ipow<3, float>, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or (binaryfunc)vec_floordiv<3, float>, //nb_floor_divide (binaryfunc)vec_div<3, float>, (binaryfunc)vec_ifloordiv<3, float>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<3, float>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<3, float>, //nb_inplace_matrix_multiply }; static PyTypeObject hfvec3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "vec3Iter", /* tp_name */ sizeof(vecIter<3, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<3, float>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "vec3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec3Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<3, float>, /* tp_new */ }; static PyGLMTypeObject hfvec3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.vec3", /* tp_name */ sizeof(vec<3, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec3_repr, /* tp_repr */ & hfvec3NumMethods, /* tp_as_number */ & hfvec3SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<3, float>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec3_str, /* tp_str */ (getattrofunc)vec_getattr<3, float>, /* tp_getattro */ (setattrofunc)vec_setattr<3, float>, /* tp_setattro */ & hfvec3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "vec3( )\n3 components vector of high qualifier float numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<3, float>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<3, float>, /* tp_iter */ 0, /* tp_iternext */ hfvec3_methods, /* tp_methods */ hfvec3_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<3, float>, /* tp_new */ }, PyGLM_TYPE_VEC, 3, 0, sizeof(float), sizeof(glm::vec<3, float>), PyGLM_FS_FLOAT }; static PyTypeObject& hfvec3Type = *((PyTypeObject*)&hfvec3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/float/vec4.h000066400000000000000000000161001511156275200233450ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<4, float> vec4_float_t; static PyMemberDef hfvec4_members[] = { { (char*)"x", T_FLOAT, offsetof(vec4_float_t, super_type.x), 0, (char*)"vec4.x" }, { (char*)"y", T_FLOAT, offsetof(vec4_float_t, super_type.y), 0, (char*)"vec4.y" }, { (char*)"z", T_FLOAT, offsetof(vec4_float_t, super_type.z), 0, (char*)"vec4.z" }, { (char*)"w", T_FLOAT, offsetof(vec4_float_t, super_type.w), 0, (char*)"vec4.w" }, { NULL } /* Sentinel */ }; static PyMethodDef hfvec4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec4_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec4_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<4, float>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hfvec4BufferMethods = { (getbufferproc)vec_getbuffer<4, float>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hfvec4SeqMethods = { (lenfunc)vec_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec4_sq_item, // sq_item 0, (ssizeobjargproc)vec4_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<4, float>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hfvec4NumMethods = { (binaryfunc)vec_add<4, float>, //nb_add (binaryfunc)vec_sub<4, float>, //nb_subtract (binaryfunc)vec_mul<4, float>, //nb_multiply (binaryfunc)vec_mod<4, float>, //nb_remainder (binaryfunc)vec_divmod<4, float>, //nb_divmod (ternaryfunc)vec_pow<4, float>, //nb_power (unaryfunc)vec_neg<4, float>, //nb_negative (unaryfunc)vec_pos<4, float>, //nb_positive (unaryfunc)vec_abs<4, float>, //nb_absolute 0, //nb_bool 0, //nb_invert 0, //nb_lshift 0, //nb_rshift 0, //nb_and 0, //nb_xor 0, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_float (binaryfunc)vec_iadd<4, float>, //nb_inplace_add (binaryfunc)vec_isub<4, float>, //nb_inplace_subtract (binaryfunc)vec_imul<4, float>, //nb_inplace_multiply (binaryfunc)vec_imod<4, float>, //nb_inplace_remainder (ternaryfunc)vec_ipow<4, float>, //nb_inplace_power 0, //nb_inplace_lshift 0, //nb_inplace_rshift 0, //nb_inplace_and 0, //nb_inplace_xor 0, //nb_inplace_or (binaryfunc)vec_floordiv<4, float>, //nb_floor_divide (binaryfunc)vec_div<4, float>, (binaryfunc)vec_ifloordiv<4, float>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<4, float>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<4, float>, //nb_inplace_matrix_multiply }; static PyTypeObject hfvec4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "vec4Iter", /* tp_name */ sizeof(vecIter<4, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<4, float>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "vec4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec4Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<4, float>, /* tp_new */ }; static PyGLMTypeObject hfvec4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.vec4", /* tp_name */ sizeof(vec<4, float>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec4_repr, /* tp_repr */ & hfvec4NumMethods, /* tp_as_number */ & hfvec4SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<4, float>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec4_str, /* tp_str */ (getattrofunc)vec_getattr<4, float>, /* tp_getattro */ (setattrofunc)vec_setattr<4, float>, /* tp_setattro */ & hfvec4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "vec4( )\n4 components vector of high qualifier float numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<4, float>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<4, float>, /* tp_iter */ 0, /* tp_iternext */ hfvec4_methods, /* tp_methods */ hfvec4_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<4, float>, /* tp_new */ }, PyGLM_TYPE_VEC, 4, 0, sizeof(float), sizeof(glm::vec<4, float>), PyGLM_FS_FLOAT }; static PyTypeObject& hfvec4Type = *((PyTypeObject*)&hfvec4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/forward_declarations.h000066400000000000000000000165131511156275200256030ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" template static int vec_getbuffer(vec* self, Py_buffer* view, int flags); static void vec_releasebuffer(PyObject* self, Py_buffer* view); template static PyObject* vec1_to_list(vec<1, T>* self, PyObject*); template static PyObject* vec2_to_list(vec<2, T>* self, PyObject*); template static PyObject* vec3_to_list(vec<3, T>* self, PyObject*); template static PyObject* vec4_to_list(vec<4, T>* self, PyObject*); template static PyObject* vec1_to_tuple(vec<1, T>* self, PyObject*); template static PyObject* vec2_to_tuple(vec<2, T>* self, PyObject*); template static PyObject* vec3_to_tuple(vec<3, T>* self, PyObject*); template static PyObject* vec4_to_tuple(vec<4, T>* self, PyObject*); template static PyObject* vec1_setstate(vec<1, T>* self, PyObject* state); template static PyObject* vec2_setstate(vec<2, T>* self, PyObject* state); template static PyObject* vec3_setstate(vec<3, T>* self, PyObject* state); template static PyObject* vec4_setstate(vec<4, T>* self, PyObject* state); template static Py_ssize_t vec_len(PyObject* self); template static PyObject* vec1_sq_item(vec<1, T> * self, Py_ssize_t index); template static PyObject* vec2_sq_item(vec<2, T> * self, Py_ssize_t index); template static PyObject* vec3_sq_item(vec<3, T> * self, Py_ssize_t index); template static PyObject* vec4_sq_item(vec<4, T> * self, Py_ssize_t index); template static int vec1_sq_ass_item(vec<1, T> * self, Py_ssize_t index, PyObject * value); template static int vec2_sq_ass_item(vec<2, T> * self, Py_ssize_t index, PyObject * value); template static int vec3_sq_ass_item(vec<3, T> * self, Py_ssize_t index, PyObject * value); template static int vec4_sq_ass_item(vec<4, T> * self, Py_ssize_t index, PyObject * value); template static int vec_contains(vec * self, PyObject * value); template static PyObject * vec_add(PyObject *obj1, PyObject *obj2); template static PyObject* bvec_add(PyObject* obj1, PyObject* obj2); template static PyObject * vec_sub(PyObject *obj1, PyObject *obj2); template static PyObject * vec_mul(PyObject *obj1, PyObject *obj2); template static PyObject* bvec_mul(PyObject* obj1, PyObject* obj2); template static PyObject * vec_mod(PyObject *obj1, PyObject *obj2); template static PyObject * vec_divmod(PyObject *obj1, PyObject *obj2); template static PyObject* vec_lshift(PyObject* obj1, PyObject* obj2); template static PyObject* vec_rshift(PyObject* obj1, PyObject* obj2); template static PyObject* vec_and(PyObject* obj1, PyObject* obj2); template static PyObject* vec_xor(PyObject* obj1, PyObject* obj2); template static PyObject * vec_or(PyObject* obj1, PyObject* obj2); template static PyObject * vec_pow(PyObject * obj1, PyObject * obj2, PyObject * obj3); template static PyObject * vec_neg(vec *obj); template static PyObject* bvec_neg(vec* obj); template static PyObject * vec_pos(vec *obj); template static PyObject * vec_abs(vec *obj); template static PyObject* vec_invert(vec* obj); static PyObject* vec_matmul(PyObject* obj1, PyObject* obj2); template static PyObject * vec_iadd(vec* self, PyObject *obj); template static PyObject* bvec_iadd(vec* self, PyObject* obj); template static PyObject * vec_isub(vec* self, PyObject *obj); template static PyObject * vec_imul(vec* self, PyObject *obj); template static PyObject* bvec_imul(vec* self, PyObject* obj); template static PyObject * vec_imod(vec* self, PyObject *obj); template static PyObject* vec_ilshift(vec* self, PyObject* obj); template static PyObject* vec_irshift(vec* self, PyObject* obj); template static PyObject* vec_iand(vec* self, PyObject* obj); template static PyObject* vec_ixor(vec* self, PyObject* obj); template static PyObject* vec_ior(vec* self, PyObject* obj); template static PyObject * vec_ipow(vec* self, PyObject * obj2, PyObject * obj3); template static PyObject * vec_floordiv(PyObject *obj1, PyObject *obj2); template static PyObject * ivec_floordiv(PyObject *obj1, PyObject *obj2); template static PyObject * vec_div(PyObject *obj1, PyObject *obj2); template static PyObject * vec_ifloordiv(vec* self, PyObject *obj); template static PyObject * ivec_ifloordiv(vec *self, PyObject *obj); template static PyObject * vec_idiv(vec* self, PyObject *obj); template static PyObject* vec_imatmul(vec* self, PyObject* obj); static void vec_dealloc(PyObject* self); template static PyObject* vec1_str(vec<1, T>* self); template static PyObject* vec2_str(vec<2, T>* self); template static PyObject* vec3_str(vec<3, T>* self); template static PyObject* vec4_str(vec<4, T>* self); template static PyObject* vec1_repr(vec<1, T>* self); template static PyObject* vec2_repr(vec<2, T>* self); template static PyObject* vec3_repr(vec<3, T>* self); template static PyObject* vec4_repr(vec<4, T>* self); template static PyObject* vec_getattr(PyObject* obj, PyObject* name); template static int vec_setattr(PyObject* obj, PyObject* name, PyObject* value); template static PyObject* vec_richcompare(vec* self, PyObject* other, int comp_type); template static PyObject* vec_geniter(vec* self); template static int vec1_init(vec<1, T> *self, PyObject *args, PyObject *kwds); template static int vec2_init(vec<2, T> *self, PyObject *args, PyObject *kwds); template static int vec3_init(vec<3, T> *self, PyObject *args, PyObject *kwds); template static int vec4_init(vec<4, T> *self, PyObject *args, PyObject *kwds); template static PyObject* vec_new(PyTypeObject *type, PyObject *args, PyObject *kwds); template static void vecIter_dealloc(vecIter *rgstate); template static PyObject* vec1Iter_next(vecIter<1, T> *rgstate); template static PyObject* vec2Iter_next(vecIter<2, T> *rgstate); template static PyObject* vec3Iter_next(vecIter<3, T> *rgstate); template static PyObject* vec4Iter_next(vecIter<4, T> *rgstate); template static PyObject* vecIter_new(PyTypeObject *type, PyObject *args, PyObject *kwargs); template static PyObject* vec_from_bytes(PyObject*, PyObject* arg); template static Py_hash_t vec_hash(vec* self, PyObject*);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int16/000077500000000000000000000000001511156275200221715ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int16/all.h000066400000000000000000000002171511156275200231120ustar00rootroot00000000000000#ifndef TYPES_VEC_INT16_ALL_H #define TYPES_VEC_INT16_ALL_H #include "vec1.h" #include "vec2.h" #include "vec3.h" #include "vec4.h" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int16/vec1.h000066400000000000000000000163731511156275200232120ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<1, glm::i16> vec1_int16_t; static PyMemberDef hi16vec1_members[] = { { (char*)"x", T_SHORT, offsetof(vec1_int16_t, super_type.x), 0, (char*)"i16vec1.x" }, { NULL } /* Sentinel */ }; static PyMethodDef hi16vec1_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec1_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec1_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<1, glm::i16>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hi16vec1BufferMethods = { (getbufferproc)vec_getbuffer<1, glm::i16>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hi16vec1SeqMethods = { (lenfunc)vec_len<1>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec1_sq_item, // sq_item 0, (ssizeobjargproc)vec1_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<1, glm::i16>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hi16vec1NumMethods = { (binaryfunc)vec_add<1, glm::i16>, //nb_add (binaryfunc)vec_sub<1, glm::i16>, //nb_subtract (binaryfunc)vec_mul<1, glm::i16>, //nb_multiply (binaryfunc)vec_mod<1, glm::i16>, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)vec_neg<1, glm::i16>, //nb_negative (unaryfunc)vec_pos<1, glm::i16>, //nb_positive (unaryfunc)vec_abs<1, glm::i16>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<1, glm::i16>, //nb_invert (binaryfunc)vec_lshift<1, glm::i16>, //nb_lshift (binaryfunc)vec_rshift<1, glm::i16>, //nb_rshift (binaryfunc)vec_and<1, glm::i16>, //nb_and (binaryfunc)vec_xor<1, glm::i16>, //nb_xor (binaryfunc)vec_or<1, glm::i16>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<1, glm::i16>, //nb_inplace_add (binaryfunc)vec_isub<1, glm::i16>, //nb_inplace_subtract (binaryfunc)vec_imul<1, glm::i16>, //nb_inplace_multiply (binaryfunc)vec_imod<1, glm::i16>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<1, glm::i16>, //nb_inplace_lshift (binaryfunc)vec_irshift<1, glm::i16>, //nb_inplace_rshift (binaryfunc)vec_iand<1, glm::i16>, //nb_inplace_and (binaryfunc)vec_ixor<1, glm::i16>, //nb_inplace_xor (binaryfunc)vec_ior<1, glm::i16>, //nb_inplace_or (binaryfunc)ivec_floordiv<1, glm::i16>, //nb_floor_divide (binaryfunc)vec_div<1, glm::i16>, (binaryfunc)ivec_ifloordiv<1, glm::i16>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<1, glm::i16>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<1, glm::i16>, //nb_inplace_matrix_multiply }; static PyTypeObject hi16vec1IterType = { PyVarObject_HEAD_INIT(NULL, 0) "i16vec1Iter", /* tp_name */ sizeof(vecIter<1, glm::i16>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<1, glm::i16>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "i16vec1 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec1Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<1, glm::i16>, /* tp_new */ }; static PyGLMTypeObject hi16vec1GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.i16vec1", /* tp_name */ sizeof(vec<1, glm::i16>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec1_repr, /* tp_repr */ & hi16vec1NumMethods, /* tp_as_number */ & hi16vec1SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<1, glm::i16>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec1_str, /* tp_str */ (getattrofunc)vec_getattr<1, glm::i16>, /* tp_getattro */ (setattrofunc)vec_setattr<1, glm::i16>, /* tp_setattro */ & hi16vec1BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "i16vec1( )\n1 component vector of high qualifier 16 bit integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<1, glm::i16>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<1, glm::i16>, /* tp_iter */ 0, /* tp_iternext */ hi16vec1_methods, /* tp_methods */ hi16vec1_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec1_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<1, glm::i16>, /* tp_new */ }, PyGLM_TYPE_VEC, 1, 0, sizeof(int16), sizeof(glm::vec<1, int16>), PyGLM_FS_INT16 }; static PyTypeObject& hi16vec1Type = *((PyTypeObject*)&hi16vec1GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int16/vec2.h000066400000000000000000000165231511156275200232100ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<2, glm::i16> vec2_int16_t; static PyMemberDef hi16vec2_members[] = { { (char*)"x", T_SHORT, offsetof(vec2_int16_t, super_type.x), 0, (char*)"i16vec2.x" }, { (char*)"y", T_SHORT, offsetof(vec2_int16_t, super_type.y), 0, (char*)"i16vec2.y" }, { NULL } /* Sentinel */ }; static PyMethodDef hi16vec2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec2_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec2_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<2, glm::i16>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hi16vec2BufferMethods = { (getbufferproc)vec_getbuffer<2, glm::i16>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hi16vec2SeqMethods = { (lenfunc)vec_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec2_sq_item, // sq_item 0, (ssizeobjargproc)vec2_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<2, glm::i16>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hi16vec2NumMethods = { (binaryfunc)vec_add<2, glm::i16>, //nb_add (binaryfunc)vec_sub<2, glm::i16>, //nb_subtract (binaryfunc)vec_mul<2, glm::i16>, //nb_multiply (binaryfunc)vec_mod<2, glm::i16>, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)vec_neg<2, glm::i16>, //nb_negative (unaryfunc)vec_pos<2, glm::i16>, //nb_positive (unaryfunc)vec_abs<2, glm::i16>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<2, glm::i16>, //nb_invert (binaryfunc)vec_lshift<2, glm::i16>, //nb_lshift (binaryfunc)vec_rshift<2, glm::i16>, //nb_rshift (binaryfunc)vec_and<2, glm::i16>, //nb_and (binaryfunc)vec_xor<2, glm::i16>, //nb_xor (binaryfunc)vec_or<2, glm::i16>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<2, glm::i16>, //nb_inplace_add (binaryfunc)vec_isub<2, glm::i16>, //nb_inplace_subtract (binaryfunc)vec_imul<2, glm::i16>, //nb_inplace_multiply (binaryfunc)vec_imod<2, glm::i16>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<2, glm::i16>, //nb_inplace_lshift (binaryfunc)vec_irshift<2, glm::i16>, //nb_inplace_rshift (binaryfunc)vec_iand<2, glm::i16>, //nb_inplace_and (binaryfunc)vec_ixor<2, glm::i16>, //nb_inplace_xor (binaryfunc)vec_ior<2, glm::i16>, //nb_inplace_or (binaryfunc)ivec_floordiv<2, glm::i16>, //nb_floor_divide (binaryfunc)vec_div<2, glm::i16>, (binaryfunc)ivec_ifloordiv<2, glm::i16>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<2, glm::i16>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<2, glm::i16>, //nb_inplace_matrix_multiply }; static PyTypeObject hi16vec2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "i16vec2Iter", /* tp_name */ sizeof(vecIter<2, glm::i16>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<2, glm::i16>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "i16vec2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec2Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<2, glm::i16>, /* tp_new */ }; static PyGLMTypeObject hi16vec2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.i16vec2", /* tp_name */ sizeof(vec<2, glm::i16>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec2_repr, /* tp_repr */ & hi16vec2NumMethods, /* tp_as_number */ & hi16vec2SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<2, glm::i16>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec2_str, /* tp_str */ (getattrofunc)vec_getattr<2, glm::i16>, /* tp_getattro */ (setattrofunc)vec_setattr<2, glm::i16>, /* tp_setattro */ & hi16vec2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "i16vec2( )\n2 components vector of high qualifier 16 bit integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<2, glm::i16>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<2, glm::i16>, /* tp_iter */ 0, /* tp_iternext */ hi16vec2_methods, /* tp_methods */ hi16vec2_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<2, glm::i16>, /* tp_new */ }, PyGLM_TYPE_VEC, 2, 0, sizeof(int16), sizeof(glm::vec<2, int16>), PyGLM_FS_INT16 }; static PyTypeObject& hi16vec2Type = *((PyTypeObject*)&hi16vec2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int16/vec3.h000066400000000000000000000166521511156275200232140ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<3, glm::i16> vec3_int16_t; static PyMemberDef hi16vec3_members[] = { { (char*)"x", T_SHORT, offsetof(vec3_int16_t, super_type.x), 0, (char*)"i16vec3.x" }, { (char*)"y", T_SHORT, offsetof(vec3_int16_t, super_type.y), 0, (char*)"i16vec3.y" }, { (char*)"z", T_SHORT, offsetof(vec3_int16_t, super_type.z), 0, (char*)"i16vec3.z" }, { NULL } /* Sentinel */ }; static PyMethodDef hi16vec3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec3_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec3_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<3, glm::i16>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hi16vec3BufferMethods = { (getbufferproc)vec_getbuffer<3, glm::i16>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hi16vec3SeqMethods = { (lenfunc)vec_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec3_sq_item, // sq_item 0, (ssizeobjargproc)vec3_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<3, glm::i16>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hi16vec3NumMethods = { (binaryfunc)vec_add<3, glm::i16>, //nb_add (binaryfunc)vec_sub<3, glm::i16>, //nb_subtract (binaryfunc)vec_mul<3, glm::i16>, //nb_multiply (binaryfunc)vec_mod<3, glm::i16>, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)vec_neg<3, glm::i16>, //nb_negative (unaryfunc)vec_pos<3, glm::i16>, //nb_positive (unaryfunc)vec_abs<3, glm::i16>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<3, glm::i16>, //nb_invert (binaryfunc)vec_lshift<3, glm::i16>, //nb_lshift (binaryfunc)vec_rshift<3, glm::i16>, //nb_rshift (binaryfunc)vec_and<3, glm::i16>, //nb_and (binaryfunc)vec_xor<3, glm::i16>, //nb_xor (binaryfunc)vec_or<3, glm::i16>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<3, glm::i16>, //nb_inplace_add (binaryfunc)vec_isub<3, glm::i16>, //nb_inplace_subtract (binaryfunc)vec_imul<3, glm::i16>, //nb_inplace_multiply (binaryfunc)vec_imod<3, glm::i16>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<3, glm::i16>, //nb_inplace_lshift (binaryfunc)vec_irshift<3, glm::i16>, //nb_inplace_rshift (binaryfunc)vec_iand<3, glm::i16>, //nb_inplace_and (binaryfunc)vec_ixor<3, glm::i16>, //nb_inplace_xor (binaryfunc)vec_ior<3, glm::i16>, //nb_inplace_or (binaryfunc)ivec_floordiv<3, glm::i16>, //nb_floor_divide (binaryfunc)vec_div<3, glm::i16>, (binaryfunc)ivec_ifloordiv<3, glm::i16>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<3, glm::i16>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<3, glm::i16>, //nb_inplace_matrix_multiply }; static PyTypeObject hi16vec3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "i16vec3Iter", /* tp_name */ sizeof(vecIter<3, glm::i16>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<3, glm::i16>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "i16vec3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec3Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<3, glm::i16>, /* tp_new */ }; static PyGLMTypeObject hi16vec3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.i16vec3", /* tp_name */ sizeof(vec<3, glm::i16>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec3_repr, /* tp_repr */ & hi16vec3NumMethods, /* tp_as_number */ & hi16vec3SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<3, glm::i16>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec3_str, /* tp_str */ (getattrofunc)vec_getattr<3, glm::i16>, /* tp_getattro */ (setattrofunc)vec_setattr<3, glm::i16>, /* tp_setattro */ & hi16vec3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "i16vec3( )\n3 components vector of high qualifier 16 bit integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<3, glm::i16>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<3, glm::i16>, /* tp_iter */ 0, /* tp_iternext */ hi16vec3_methods, /* tp_methods */ hi16vec3_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<3, glm::i16>, /* tp_new */ }, PyGLM_TYPE_VEC, 3, 0, sizeof(int16), sizeof(glm::vec<3, int16>), PyGLM_FS_INT16 }; static PyTypeObject& hi16vec3Type = *((PyTypeObject*)&hi16vec3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int16/vec4.h000066400000000000000000000170011511156275200232020ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<4, glm::i16> vec4_int16_t; static PyMemberDef hi16vec4_members[] = { { (char*)"x", T_SHORT, offsetof(vec4_int16_t, super_type.x), 0, (char*)"i16vec4.x" }, { (char*)"y", T_SHORT, offsetof(vec4_int16_t, super_type.y), 0, (char*)"i16vec4.y" }, { (char*)"z", T_SHORT, offsetof(vec4_int16_t, super_type.z), 0, (char*)"i16vec4.z" }, { (char*)"w", T_SHORT, offsetof(vec4_int16_t, super_type.w), 0, (char*)"i16vec4.w" }, { NULL } /* Sentinel */ }; static PyMethodDef hi16vec4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec4_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec4_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<4, glm::i16>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hi16vec4BufferMethods = { (getbufferproc)vec_getbuffer<4, glm::i16>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hi16vec4SeqMethods = { (lenfunc)vec_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec4_sq_item, // sq_item 0, (ssizeobjargproc)vec4_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<4, glm::i16>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hi16vec4NumMethods = { (binaryfunc)vec_add<4, glm::i16>, //nb_add (binaryfunc)vec_sub<4, glm::i16>, //nb_subtract (binaryfunc)vec_mul<4, glm::i16>, //nb_multiply (binaryfunc)vec_mod<4, glm::i16>, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)vec_neg<4, glm::i16>, //nb_negative (unaryfunc)vec_pos<4, glm::i16>, //nb_positive (unaryfunc)vec_abs<4, glm::i16>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<4, glm::i16>, //nb_invert (binaryfunc)vec_lshift<4, glm::i16>, //nb_lshift (binaryfunc)vec_rshift<4, glm::i16>, //nb_rshift (binaryfunc)vec_and<4, glm::i16>, //nb_and (binaryfunc)vec_xor<4, glm::i16>, //nb_xor (binaryfunc)vec_or<4, glm::i16>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<4, glm::i16>, //nb_inplace_add (binaryfunc)vec_isub<4, glm::i16>, //nb_inplace_subtract (binaryfunc)vec_imul<4, glm::i16>, //nb_inplace_multiply (binaryfunc)vec_imod<4, glm::i16>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<4, glm::i16>, //nb_inplace_lshift (binaryfunc)vec_irshift<4, glm::i16>, //nb_inplace_rshift (binaryfunc)vec_iand<4, glm::i16>, //nb_inplace_and (binaryfunc)vec_ixor<4, glm::i16>, //nb_inplace_xor (binaryfunc)vec_ior<4, glm::i16>, //nb_inplace_or (binaryfunc)ivec_floordiv<4, glm::i16>, //nb_floor_divide (binaryfunc)vec_div<4, glm::i16>, (binaryfunc)ivec_ifloordiv<4, glm::i16>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<4, glm::i16>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<4, glm::i16>, //nb_inplace_matrix_multiply }; static PyTypeObject hi16vec4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "i16vec4Iter", /* tp_name */ sizeof(vecIter<4, glm::i16>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<4, glm::i16>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "i16vec4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec4Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<4, glm::i16>, /* tp_new */ }; static PyGLMTypeObject hi16vec4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.i16vec4", /* tp_name */ sizeof(vec<4, glm::i16>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec4_repr, /* tp_repr */ & hi16vec4NumMethods, /* tp_as_number */ & hi16vec4SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<4, glm::i16>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec4_str, /* tp_str */ (getattrofunc)vec_getattr<4, glm::i16>, /* tp_getattro */ (setattrofunc)vec_setattr<4, glm::i16>, /* tp_setattro */ & hi16vec4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "i16vec4( )\n4 components vector of high qualifier 16 bit integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<4, glm::i16>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<4, glm::i16>, /* tp_iter */ 0, /* tp_iternext */ hi16vec4_methods, /* tp_methods */ hi16vec4_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<4, glm::i16>, /* tp_new */ }, PyGLM_TYPE_VEC, 4, 0, sizeof(int16), sizeof(glm::vec<4, int16>), PyGLM_FS_INT16 }; static PyTypeObject& hi16vec4Type = *((PyTypeObject*)&hi16vec4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int32/000077500000000000000000000000001511156275200221675ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int32/all.h000066400000000000000000000002201511156275200231020ustar00rootroot00000000000000#ifndef TYPES_VEC_INT32_ALL_H #define TYPES_VEC_INT32_ALL_H #include "vec1.h" #include "vec2.h" #include "vec3.h" #include "vec4.h" #endif Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int32/vec1.h000066400000000000000000000163141511156275200232030ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<1, glm::i32> vec1_int32_t; static PyMemberDef hivec1_members[] = { { (char*)"x", T_INT, offsetof(vec1_int32_t, super_type.x), 0, (char*)"ivec1.x" }, { NULL } /* Sentinel */ }; static PyMethodDef hivec1_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec1_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec1_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<1, glm::i32>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hivec1BufferMethods = { (getbufferproc)vec_getbuffer<1, glm::i32>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hivec1SeqMethods = { (lenfunc)vec_len<1>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec1_sq_item, // sq_item 0, (ssizeobjargproc)vec1_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<1, glm::i32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hivec1NumMethods = { (binaryfunc)vec_add<1, glm::i32>, //nb_add (binaryfunc)vec_sub<1, glm::i32>, //nb_subtract (binaryfunc)vec_mul<1, glm::i32>, //nb_multiply (binaryfunc)vec_mod<1, glm::i32>, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)vec_neg<1, glm::i32>, //nb_negative (unaryfunc)vec_pos<1, glm::i32>, //nb_positive (unaryfunc)vec_abs<1, glm::i32>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<1, glm::i32>, //nb_invert (binaryfunc)vec_lshift<1, glm::i32>, //nb_lshift (binaryfunc)vec_rshift<1, glm::i32>, //nb_rshift (binaryfunc)vec_and<1, glm::i32>, //nb_and (binaryfunc)vec_xor<1, glm::i32>, //nb_xor (binaryfunc)vec_or<1, glm::i32>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<1, glm::i32>, //nb_inplace_add (binaryfunc)vec_isub<1, glm::i32>, //nb_inplace_subtract (binaryfunc)vec_imul<1, glm::i32>, //nb_inplace_multiply (binaryfunc)vec_imod<1, glm::i32>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<1, glm::i32>, //nb_inplace_lshift (binaryfunc)vec_irshift<1, glm::i32>, //nb_inplace_rshift (binaryfunc)vec_iand<1, glm::i32>, //nb_inplace_and (binaryfunc)vec_ixor<1, glm::i32>, //nb_inplace_xor (binaryfunc)vec_ior<1, glm::i32>, //nb_inplace_or (binaryfunc)ivec_floordiv<1, glm::i32>, //nb_floor_divide (binaryfunc)vec_div<1, glm::i32>, (binaryfunc)ivec_ifloordiv<1, glm::i32>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<1, glm::i32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<1, glm::i32>, //nb_inplace_matrix_multiply }; static PyTypeObject hivec1IterType = { PyVarObject_HEAD_INIT(NULL, 0) "ivec1Iter", /* tp_name */ sizeof(vecIter<1, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<1, glm::i32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "ivec1 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec1Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<1, glm::i32>, /* tp_new */ }; static PyGLMTypeObject hivec1GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.ivec1", /* tp_name */ sizeof(vec<1, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec1_repr, /* tp_repr */ & hivec1NumMethods, /* tp_as_number */ & hivec1SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<1, glm::i32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec1_str, /* tp_str */ (getattrofunc)vec_getattr<1, glm::i32>, /* tp_getattro */ (setattrofunc)vec_setattr<1, glm::i32>, /* tp_setattro */ & hivec1BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "ivec1( )\n1 component vector of high qualifier integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<1, glm::i32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<1, glm::i32>, /* tp_iter */ 0, /* tp_iternext */ hivec1_methods, /* tp_methods */ hivec1_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec1_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<1, glm::i32>, /* tp_new */ }, PyGLM_TYPE_VEC, 1, 0, sizeof(int32), sizeof(glm::vec<1, int32>), PyGLM_FS_INT32 }; static PyTypeObject& hivec1Type = *((PyTypeObject*)&hivec1GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int32/vec2.h000066400000000000000000000164401511156275200232040ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<2, glm::i32> vec2_int32_t; static PyMemberDef hivec2_members[] = { { (char*)"x", T_INT, offsetof(vec2_int32_t, super_type.x), 0, (char*)"ivec2.x" }, { (char*)"y", T_INT, offsetof(vec2_int32_t, super_type.y), 0, (char*)"ivec2.y" }, { NULL } /* Sentinel */ }; static PyMethodDef hivec2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec2_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec2_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<2, glm::i32>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hivec2BufferMethods = { (getbufferproc)vec_getbuffer<2, glm::i32>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hivec2SeqMethods = { (lenfunc)vec_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec2_sq_item, // sq_item 0, (ssizeobjargproc)vec2_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<2, glm::i32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hivec2NumMethods = { (binaryfunc)vec_add<2, glm::i32>, //nb_add (binaryfunc)vec_sub<2, glm::i32>, //nb_subtract (binaryfunc)vec_mul<2, glm::i32>, //nb_multiply (binaryfunc)vec_mod<2, glm::i32>, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)vec_neg<2, glm::i32>, //nb_negative (unaryfunc)vec_pos<2, glm::i32>, //nb_positive (unaryfunc)vec_abs<2, glm::i32>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<2, glm::i32>, //nb_invert (binaryfunc)vec_lshift<2, glm::i32>, //nb_lshift (binaryfunc)vec_rshift<2, glm::i32>, //nb_rshift (binaryfunc)vec_and<2, glm::i32>, //nb_and (binaryfunc)vec_xor<2, glm::i32>, //nb_xor (binaryfunc)vec_or<2, glm::i32>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<2, glm::i32>, //nb_inplace_add (binaryfunc)vec_isub<2, glm::i32>, //nb_inplace_subtract (binaryfunc)vec_imul<2, glm::i32>, //nb_inplace_multiply (binaryfunc)vec_imod<2, glm::i32>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<2, glm::i32>, //nb_inplace_lshift (binaryfunc)vec_irshift<2, glm::i32>, //nb_inplace_rshift (binaryfunc)vec_iand<2, glm::i32>, //nb_inplace_and (binaryfunc)vec_ixor<2, glm::i32>, //nb_inplace_xor (binaryfunc)vec_ior<2, glm::i32>, //nb_inplace_or (binaryfunc)ivec_floordiv<2, glm::i32>, //nb_floor_divide (binaryfunc)vec_div<2, glm::i32>, (binaryfunc)ivec_ifloordiv<2, glm::i32>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<2, glm::i32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<2, glm::i32>, //nb_inplace_matrix_multiply }; static PyTypeObject hivec2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "ivec2Iter", /* tp_name */ sizeof(vecIter<2, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<2, glm::i32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "ivec2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec2Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<2, glm::i32>, /* tp_new */ }; static PyGLMTypeObject hivec2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.ivec2", /* tp_name */ sizeof(vec<2, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec2_repr, /* tp_repr */ & hivec2NumMethods, /* tp_as_number */ & hivec2SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<2, glm::i32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec2_str, /* tp_str */ (getattrofunc)vec_getattr<2, glm::i32>, /* tp_getattro */ (setattrofunc)vec_setattr<2, glm::i32>, /* tp_setattro */ & hivec2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "ivec2( )\n2 components vector of high qualifier integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<2, glm::i32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<2, glm::i32>, /* tp_iter */ 0, /* tp_iternext */ hivec2_methods, /* tp_methods */ hivec2_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<2, glm::i32>, /* tp_new */ }, PyGLM_TYPE_VEC, 2, 0, sizeof(int32), sizeof(glm::vec<2, int32>), PyGLM_FS_INT32 }; static PyTypeObject& hivec2Type = *((PyTypeObject*)&hivec2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int32/vec3.h000066400000000000000000000165631511156275200232130ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<3, glm::i32> vec3_int32_t; static PyMemberDef hivec3_members[] = { { (char*)"x", T_INT, offsetof(vec3_int32_t, super_type.x), 0, (char*)"ivec3.x" }, { (char*)"y", T_INT, offsetof(vec3_int32_t, super_type.y), 0, (char*)"ivec3.y" }, { (char*)"z", T_INT, offsetof(vec3_int32_t, super_type.z), 0, (char*)"ivec3.z" }, { NULL } /* Sentinel */ }; static PyMethodDef hivec3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec3_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec3_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<3, glm::i32>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hivec3BufferMethods = { (getbufferproc)vec_getbuffer<3, glm::i32>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hivec3SeqMethods = { (lenfunc)vec_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec3_sq_item, // sq_item 0, (ssizeobjargproc)vec3_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<3, glm::i32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hivec3NumMethods = { (binaryfunc)vec_add<3, glm::i32>, //nb_add (binaryfunc)vec_sub<3, glm::i32>, //nb_subtract (binaryfunc)vec_mul<3, glm::i32>, //nb_multiply (binaryfunc)vec_mod<3, glm::i32>, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)vec_neg<3, glm::i32>, //nb_negative (unaryfunc)vec_pos<3, glm::i32>, //nb_positive (unaryfunc)vec_abs<3, glm::i32>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<3, glm::i32>, //nb_invert (binaryfunc)vec_lshift<3, glm::i32>, //nb_lshift (binaryfunc)vec_rshift<3, glm::i32>, //nb_rshift (binaryfunc)vec_and<3, glm::i32>, //nb_and (binaryfunc)vec_xor<3, glm::i32>, //nb_xor (binaryfunc)vec_or<3, glm::i32>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<3, glm::i32>, //nb_inplace_add (binaryfunc)vec_isub<3, glm::i32>, //nb_inplace_subtract (binaryfunc)vec_imul<3, glm::i32>, //nb_inplace_multiply (binaryfunc)vec_imod<3, glm::i32>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<3, glm::i32>, //nb_inplace_lshift (binaryfunc)vec_irshift<3, glm::i32>, //nb_inplace_rshift (binaryfunc)vec_iand<3, glm::i32>, //nb_inplace_and (binaryfunc)vec_ixor<3, glm::i32>, //nb_inplace_xor (binaryfunc)vec_ior<3, glm::i32>, //nb_inplace_or (binaryfunc)ivec_floordiv<3, glm::i32>, //nb_floor_divide (binaryfunc)vec_div<3, glm::i32>, (binaryfunc)ivec_ifloordiv<3, glm::i32>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<3, glm::i32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<3, glm::i32>, //nb_inplace_matrix_multiply }; static PyTypeObject hivec3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "ivec3Iter", /* tp_name */ sizeof(vecIter<3, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<3, glm::i32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "ivec3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec3Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<3, glm::i32>, /* tp_new */ }; static PyGLMTypeObject hivec3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.ivec3", /* tp_name */ sizeof(vec<3, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec3_repr, /* tp_repr */ & hivec3NumMethods, /* tp_as_number */ & hivec3SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<3, glm::i32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec3_str, /* tp_str */ (getattrofunc)vec_getattr<3, glm::i32>, /* tp_getattro */ (setattrofunc)vec_setattr<3, glm::i32>, /* tp_setattro */ & hivec3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "ivec3( )\n3 components vector of high qualifier integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<3, glm::i32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<3, glm::i32>, /* tp_iter */ 0, /* tp_iternext */ hivec3_methods, /* tp_methods */ hivec3_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<3, glm::i32>, /* tp_new */ }, PyGLM_TYPE_VEC, 3, 0, sizeof(int32), sizeof(glm::vec<3, int32>), PyGLM_FS_INT32 }; static PyTypeObject& hivec3Type = *((PyTypeObject*)&hivec3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int32/vec4.h000066400000000000000000000167061511156275200232130ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<4, glm::i32> vec4_int32_t; static PyMemberDef hivec4_members[] = { { (char*)"x", T_INT, offsetof(vec4_int32_t, super_type.x), 0, (char*)"ivec4.x" }, { (char*)"y", T_INT, offsetof(vec4_int32_t, super_type.y), 0, (char*)"ivec4.y" }, { (char*)"z", T_INT, offsetof(vec4_int32_t, super_type.z), 0, (char*)"ivec4.z" }, { (char*)"w", T_INT, offsetof(vec4_int32_t, super_type.w), 0, (char*)"ivec4.w" }, { NULL } /* Sentinel */ }; static PyMethodDef hivec4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec4_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec4_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<4, glm::i32>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hivec4BufferMethods = { (getbufferproc)vec_getbuffer<4, glm::i32>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hivec4SeqMethods = { (lenfunc)vec_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec4_sq_item, // sq_item 0, (ssizeobjargproc)vec4_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<4, glm::i32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hivec4NumMethods = { (binaryfunc)vec_add<4, glm::i32>, //nb_add (binaryfunc)vec_sub<4, glm::i32>, //nb_subtract (binaryfunc)vec_mul<4, glm::i32>, //nb_multiply (binaryfunc)vec_mod<4, glm::i32>, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)vec_neg<4, glm::i32>, //nb_negative (unaryfunc)vec_pos<4, glm::i32>, //nb_positive (unaryfunc)vec_abs<4, glm::i32>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<4, glm::i32>, //nb_invert (binaryfunc)vec_lshift<4, glm::i32>, //nb_lshift (binaryfunc)vec_rshift<4, glm::i32>, //nb_rshift (binaryfunc)vec_and<4, glm::i32>, //nb_and (binaryfunc)vec_xor<4, glm::i32>, //nb_xor (binaryfunc)vec_or<4, glm::i32>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<4, glm::i32>, //nb_inplace_add (binaryfunc)vec_isub<4, glm::i32>, //nb_inplace_subtract (binaryfunc)vec_imul<4, glm::i32>, //nb_inplace_multiply (binaryfunc)vec_imod<4, glm::i32>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<4, glm::i32>, //nb_inplace_lshift (binaryfunc)vec_irshift<4, glm::i32>, //nb_inplace_rshift (binaryfunc)vec_iand<4, glm::i32>, //nb_inplace_and (binaryfunc)vec_ixor<4, glm::i32>, //nb_inplace_xor (binaryfunc)vec_ior<4, glm::i32>, //nb_inplace_or (binaryfunc)ivec_floordiv<4, glm::i32>, //nb_floor_divide (binaryfunc)vec_div<4, glm::i32>, (binaryfunc)ivec_ifloordiv<4, glm::i32>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<4, glm::i32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<4, glm::i32>, //nb_inplace_matrix_multiply }; static PyTypeObject hivec4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "ivec4Iter", /* tp_name */ sizeof(vecIter<4, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<4, glm::i32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "ivec4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec4Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<4, glm::i32>, /* tp_new */ }; static PyGLMTypeObject hivec4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.ivec4", /* tp_name */ sizeof(vec<4, glm::i32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec4_repr, /* tp_repr */ & hivec4NumMethods, /* tp_as_number */ & hivec4SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<4, glm::i32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec4_str, /* tp_str */ (getattrofunc)vec_getattr<4, glm::i32>, /* tp_getattro */ (setattrofunc)vec_setattr<4, glm::i32>, /* tp_setattro */ & hivec4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "ivec4( )\n4 components vector of high qualifier integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<4, glm::i32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<4, glm::i32>, /* tp_iter */ 0, /* tp_iternext */ hivec4_methods, /* tp_methods */ hivec4_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<4, glm::i32>, /* tp_new */ }, PyGLM_TYPE_VEC, 4, 0, sizeof(int32), sizeof(glm::vec<4, int32>), PyGLM_FS_INT32 }; static PyTypeObject& hivec4Type = *((PyTypeObject*)&hivec4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int64/000077500000000000000000000000001511156275200221745ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int64/all.h000066400000000000000000000002171511156275200231150ustar00rootroot00000000000000#ifndef TYPES_VEC_INT64_ALL_H #define TYPES_VEC_INT64_ALL_H #include "vec1.h" #include "vec2.h" #include "vec3.h" #include "vec4.h" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int64/vec1.h000066400000000000000000000163761511156275200232200ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<1, glm::i64> vec1_int64_t; static PyMemberDef hi64vec1_members[] = { { (char*)"x", T_LONGLONG, offsetof(vec1_int64_t, super_type.x), 0, (char*)"i64vec1.x" }, { NULL } /* Sentinel */ }; static PyMethodDef hi64vec1_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec1_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec1_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<1, glm::i64>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hi64vec1BufferMethods = { (getbufferproc)vec_getbuffer<1, glm::i64>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hi64vec1SeqMethods = { (lenfunc)vec_len<1>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec1_sq_item, // sq_item 0, (ssizeobjargproc)vec1_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<1, glm::i64>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hi64vec1NumMethods = { (binaryfunc)vec_add<1, glm::i64>, //nb_add (binaryfunc)vec_sub<1, glm::i64>, //nb_subtract (binaryfunc)vec_mul<1, glm::i64>, //nb_multiply (binaryfunc)vec_mod<1, glm::i64>, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)vec_neg<1, glm::i64>, //nb_negative (unaryfunc)vec_pos<1, glm::i64>, //nb_positive (unaryfunc)vec_abs<1, glm::i64>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<1, glm::i64>, //nb_invert (binaryfunc)vec_lshift<1, glm::i64>, //nb_lshift (binaryfunc)vec_rshift<1, glm::i64>, //nb_rshift (binaryfunc)vec_and<1, glm::i64>, //nb_and (binaryfunc)vec_xor<1, glm::i64>, //nb_xor (binaryfunc)vec_or<1, glm::i64>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<1, glm::i64>, //nb_inplace_add (binaryfunc)vec_isub<1, glm::i64>, //nb_inplace_subtract (binaryfunc)vec_imul<1, glm::i64>, //nb_inplace_multiply (binaryfunc)vec_imod<1, glm::i64>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<1, glm::i64>, //nb_inplace_lshift (binaryfunc)vec_irshift<1, glm::i64>, //nb_inplace_rshift (binaryfunc)vec_iand<1, glm::i64>, //nb_inplace_and (binaryfunc)vec_ixor<1, glm::i64>, //nb_inplace_xor (binaryfunc)vec_ior<1, glm::i64>, //nb_inplace_or (binaryfunc)ivec_floordiv<1, glm::i64>, //nb_floor_divide (binaryfunc)vec_div<1, glm::i64>, (binaryfunc)ivec_ifloordiv<1, glm::i64>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<1, glm::i64>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<1, glm::i64>, //nb_inplace_matrix_multiply }; static PyTypeObject hi64vec1IterType = { PyVarObject_HEAD_INIT(NULL, 0) "i64vec1Iter", /* tp_name */ sizeof(vecIter<1, glm::i64>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<1, glm::i64>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "i64vec1 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec1Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<1, glm::i64>, /* tp_new */ }; static PyGLMTypeObject hi64vec1GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.i64vec1", /* tp_name */ sizeof(vec<1, glm::i64>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec1_repr, /* tp_repr */ & hi64vec1NumMethods, /* tp_as_number */ & hi64vec1SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<1, glm::i64>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec1_str, /* tp_str */ (getattrofunc)vec_getattr<1, glm::i64>, /* tp_getattro */ (setattrofunc)vec_setattr<1, glm::i64>, /* tp_setattro */ & hi64vec1BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "i64vec1( )\n1 component vector of high qualifier 64 bit integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<1, glm::i64>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<1, glm::i64>, /* tp_iter */ 0, /* tp_iternext */ hi64vec1_methods, /* tp_methods */ hi64vec1_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec1_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<1, glm::i64>, /* tp_new */ }, PyGLM_TYPE_VEC, 1, 0, sizeof(int64), sizeof(glm::vec<1, int64>), PyGLM_FS_INT64 }; static PyTypeObject& hi64vec1Type = *((PyTypeObject*)&hi64vec1GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int64/vec2.h000066400000000000000000000165301511156275200232110ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<2, glm::i64> vec2_int64_t; static PyMemberDef hi64vec2_members[] = { { (char*)"x", T_LONGLONG, offsetof(vec2_int64_t, super_type.x), 0, (char*)"i64vec2.x" }, { (char*)"y", T_LONGLONG, offsetof(vec2_int64_t, super_type.y), 0, (char*)"i64vec2.y" }, { NULL } /* Sentinel */ }; static PyMethodDef hi64vec2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec2_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec2_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<2, glm::i64>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hi64vec2BufferMethods = { (getbufferproc)vec_getbuffer<2, glm::i64>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hi64vec2SeqMethods = { (lenfunc)vec_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec2_sq_item, // sq_item 0, (ssizeobjargproc)vec2_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<2, glm::i64>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hi64vec2NumMethods = { (binaryfunc)vec_add<2, glm::i64>, //nb_add (binaryfunc)vec_sub<2, glm::i64>, //nb_subtract (binaryfunc)vec_mul<2, glm::i64>, //nb_multiply (binaryfunc)vec_mod<2, glm::i64>, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)vec_neg<2, glm::i64>, //nb_negative (unaryfunc)vec_pos<2, glm::i64>, //nb_positive (unaryfunc)vec_abs<2, glm::i64>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<2, glm::i64>, //nb_invert (binaryfunc)vec_lshift<2, glm::i64>, //nb_lshift (binaryfunc)vec_rshift<2, glm::i64>, //nb_rshift (binaryfunc)vec_and<2, glm::i64>, //nb_and (binaryfunc)vec_xor<2, glm::i64>, //nb_xor (binaryfunc)vec_or<2, glm::i64>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<2, glm::i64>, //nb_inplace_add (binaryfunc)vec_isub<2, glm::i64>, //nb_inplace_subtract (binaryfunc)vec_imul<2, glm::i64>, //nb_inplace_multiply (binaryfunc)vec_mod<2, glm::i64>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<2, glm::i64>, //nb_inplace_lshift (binaryfunc)vec_irshift<2, glm::i64>, //nb_inplace_rshift (binaryfunc)vec_iand<2, glm::i64>, //nb_inplace_and (binaryfunc)vec_ixor<2, glm::i64>, //nb_inplace_xor (binaryfunc)vec_ior<2, glm::i64>, //nb_inplace_or (binaryfunc)ivec_floordiv<2, glm::i64>, //nb_floor_divide (binaryfunc)vec_div<2, glm::i64>, (binaryfunc)ivec_ifloordiv<2, glm::i64>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<2, glm::i64>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<2, glm::i64>, //nb_inplace_matrix_multiply }; static PyTypeObject hi64vec2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "i64vec2Iter", /* tp_name */ sizeof(vecIter<2, glm::i64>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<2, glm::i64>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "i64vec2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec2Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<2, glm::i64>, /* tp_new */ }; static PyGLMTypeObject hi64vec2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.i64vec2", /* tp_name */ sizeof(vec<2, glm::i64>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec2_repr, /* tp_repr */ & hi64vec2NumMethods, /* tp_as_number */ & hi64vec2SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<2, glm::i64>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec2_str, /* tp_str */ (getattrofunc)vec_getattr<2, glm::i64>, /* tp_getattro */ (setattrofunc)vec_setattr<2, glm::i64>, /* tp_setattro */ & hi64vec2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "i64vec2( )\n2 components vector of high qualifier 64 bit integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<2, glm::i64>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<2, glm::i64>, /* tp_iter */ 0, /* tp_iternext */ hi64vec2_methods, /* tp_methods */ hi64vec2_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<2, glm::i64>, /* tp_new */ }, PyGLM_TYPE_VEC, 2, 0, sizeof(int64), sizeof(glm::vec<2, int64>), PyGLM_FS_INT64 }; static PyTypeObject& hi64vec2Type = *((PyTypeObject*)&hi64vec2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int64/vec3.h000066400000000000000000000166621511156275200232200ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<3, glm::i64> vec3_int64_t; static PyMemberDef hi64vec3_members[] = { { (char*)"x", T_LONGLONG, offsetof(vec3_int64_t, super_type.x), 0, (char*)"i64vec3.x" }, { (char*)"y", T_LONGLONG, offsetof(vec3_int64_t, super_type.y), 0, (char*)"i64vec3.y" }, { (char*)"z", T_LONGLONG, offsetof(vec3_int64_t, super_type.z), 0, (char*)"i64vec3.z" }, { NULL } /* Sentinel */ }; static PyMethodDef hi64vec3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec3_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec3_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<3, glm::i64>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hi64vec3BufferMethods = { (getbufferproc)vec_getbuffer<3, glm::i64>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hi64vec3SeqMethods = { (lenfunc)vec_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec3_sq_item, // sq_item 0, (ssizeobjargproc)vec3_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<3, glm::i64>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hi64vec3NumMethods = { (binaryfunc)vec_add<3, glm::i64>, //nb_add (binaryfunc)vec_sub<3, glm::i64>, //nb_subtract (binaryfunc)vec_mul<3, glm::i64>, //nb_multiply (binaryfunc)vec_mod<3, glm::i64>, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)vec_neg<3, glm::i64>, //nb_negative (unaryfunc)vec_pos<3, glm::i64>, //nb_positive (unaryfunc)vec_abs<3, glm::i64>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<3, glm::i64>, //nb_invert (binaryfunc)vec_lshift<3, glm::i64>, //nb_lshift (binaryfunc)vec_rshift<3, glm::i64>, //nb_rshift (binaryfunc)vec_and<3, glm::i64>, //nb_and (binaryfunc)vec_xor<3, glm::i64>, //nb_xor (binaryfunc)vec_or<3, glm::i64>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<3, glm::i64>, //nb_inplace_add (binaryfunc)vec_isub<3, glm::i64>, //nb_inplace_subtract (binaryfunc)vec_imul<3, glm::i64>, //nb_inplace_multiply (binaryfunc)vec_mod<3, glm::i64>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<3, glm::i64>, //nb_inplace_lshift (binaryfunc)vec_irshift<3, glm::i64>, //nb_inplace_rshift (binaryfunc)vec_iand<3, glm::i64>, //nb_inplace_and (binaryfunc)vec_ixor<3, glm::i64>, //nb_inplace_xor (binaryfunc)vec_ior<3, glm::i64>, //nb_inplace_or (binaryfunc)ivec_floordiv<3, glm::i64>, //nb_floor_divide (binaryfunc)vec_div<3, glm::i64>, (binaryfunc)ivec_ifloordiv<3, glm::i64>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<3, glm::i64>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<3, glm::i64>, //nb_inplace_matrix_multiply }; static PyTypeObject hi64vec3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "i64vec3Iter", /* tp_name */ sizeof(vecIter<3, glm::i64>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<3, glm::i64>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "i64vec3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec3Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<3, glm::i64>, /* tp_new */ }; static PyGLMTypeObject hi64vec3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.i64vec3", /* tp_name */ sizeof(vec<3, glm::i64>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec3_repr, /* tp_repr */ & hi64vec3NumMethods, /* tp_as_number */ & hi64vec3SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<3, glm::i64>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec3_str, /* tp_str */ (getattrofunc)vec_getattr<3, glm::i64>, /* tp_getattro */ (setattrofunc)vec_setattr<3, glm::i64>, /* tp_setattro */ & hi64vec3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "i64vec3( )\n3 components vector of high qualifier 64 bit integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<3, glm::i64>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<3, glm::i64>, /* tp_iter */ 0, /* tp_iternext */ hi64vec3_methods, /* tp_methods */ hi64vec3_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<3, glm::i64>, /* tp_new */ }, PyGLM_TYPE_VEC, 3, 0, sizeof(int64), sizeof(glm::vec<3, int64>), PyGLM_FS_INT64 }; static PyTypeObject& hi64vec3Type = *((PyTypeObject*)&hi64vec3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int64/vec4.h000066400000000000000000000170141511156275200232110ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<4, glm::i64> vec4_int64_t; static PyMemberDef hi64vec4_members[] = { { (char*)"x", T_LONGLONG, offsetof(vec4_int64_t, super_type.x), 0, (char*)"i64vec4.x" }, { (char*)"y", T_LONGLONG, offsetof(vec4_int64_t, super_type.y), 0, (char*)"i64vec4.y" }, { (char*)"z", T_LONGLONG, offsetof(vec4_int64_t, super_type.z), 0, (char*)"i64vec4.z" }, { (char*)"w", T_LONGLONG, offsetof(vec4_int64_t, super_type.w), 0, (char*)"i64vec4.w" }, { NULL } /* Sentinel */ }; static PyMethodDef hi64vec4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec4_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec4_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<4, glm::i64>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hi64vec4BufferMethods = { (getbufferproc)vec_getbuffer<4, glm::i64>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hi64vec4SeqMethods = { (lenfunc)vec_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec4_sq_item, // sq_item 0, (ssizeobjargproc)vec4_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<4, glm::i64>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hi64vec4NumMethods = { (binaryfunc)vec_add<4, glm::i64>, //nb_add (binaryfunc)vec_sub<4, glm::i64>, //nb_subtract (binaryfunc)vec_mul<4, glm::i64>, //nb_multiply (binaryfunc)vec_mod<4, glm::i64>, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)vec_neg<4, glm::i64>, //nb_negative (unaryfunc)vec_pos<4, glm::i64>, //nb_positive (unaryfunc)vec_abs<4, glm::i64>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<4, glm::i64>, //nb_invert (binaryfunc)vec_lshift<4, glm::i64>, //nb_lshift (binaryfunc)vec_rshift<4, glm::i64>, //nb_rshift (binaryfunc)vec_and<4, glm::i64>, //nb_and (binaryfunc)vec_xor<4, glm::i64>, //nb_xor (binaryfunc)vec_or<4, glm::i64>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<4, glm::i64>, //nb_inplace_add (binaryfunc)vec_isub<4, glm::i64>, //nb_inplace_subtract (binaryfunc)vec_imul<4, glm::i64>, //nb_inplace_multiply (binaryfunc)vec_mod<4, glm::i64>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<4, glm::i64>, //nb_inplace_lshift (binaryfunc)vec_irshift<4, glm::i64>, //nb_inplace_rshift (binaryfunc)vec_iand<4, glm::i64>, //nb_inplace_and (binaryfunc)vec_ixor<4, glm::i64>, //nb_inplace_xor (binaryfunc)vec_ior<4, glm::i64>, //nb_inplace_or (binaryfunc)ivec_floordiv<4, glm::i64>, //nb_floor_divide (binaryfunc)vec_div<4, glm::i64>, (binaryfunc)ivec_ifloordiv<4, glm::i64>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<4, glm::i64>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<4, glm::i64>, //nb_inplace_matrix_multiply }; static PyTypeObject hi64vec4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "i64vec4Iter", /* tp_name */ sizeof(vecIter<4, glm::i64>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<4, glm::i64>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "i64vec4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec4Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<4, glm::i64>, /* tp_new */ }; static PyGLMTypeObject hi64vec4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.i64vec4", /* tp_name */ sizeof(vec<4, glm::i64>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec4_repr, /* tp_repr */ & hi64vec4NumMethods, /* tp_as_number */ & hi64vec4SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<4, glm::i64>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec4_str, /* tp_str */ (getattrofunc)vec_getattr<4, glm::i64>, /* tp_getattro */ (setattrofunc)vec_setattr<4, glm::i64>, /* tp_setattro */ & hi64vec4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "i64vec4( )\n4 components vector of high qualifier 64 bit integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<4, glm::i64>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<4, glm::i64>, /* tp_iter */ 0, /* tp_iternext */ hi64vec4_methods, /* tp_methods */ hi64vec4_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<4, glm::i64>, /* tp_new */ }, PyGLM_TYPE_VEC, 4, 0, sizeof(int64), sizeof(glm::vec<4, int64>), PyGLM_FS_INT64 }; static PyTypeObject& hi64vec4Type = *((PyTypeObject*)&hi64vec4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int8/000077500000000000000000000000001511156275200221125ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int8/all.h000066400000000000000000000002151511156275200230310ustar00rootroot00000000000000#ifndef TYPES_VEC_INT8_ALL_H #define TYPES_VEC_INT8_ALL_H #include "vec1.h" #include "vec2.h" #include "vec3.h" #include "vec4.h" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int8/vec1.h000066400000000000000000000162561511156275200231330ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<1, glm::i8> vec1_int8_t; static PyMemberDef hi8vec1_members[] = { { (char*)"x", T_BYTE, offsetof(vec1_int8_t, super_type.x), 0, (char*)"i8vec1.x" }, { NULL } /* Sentinel */ }; static PyMethodDef hi8vec1_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec1_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec1_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<1, glm::i8>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hi8vec1BufferMethods = { (getbufferproc)vec_getbuffer<1, glm::i8>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hi8vec1SeqMethods = { (lenfunc)vec_len<1>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec1_sq_item, // sq_item 0, (ssizeobjargproc)vec1_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<1, glm::i8>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hi8vec1NumMethods = { (binaryfunc)vec_add<1, glm::i8>, //nb_add (binaryfunc)vec_sub<1, glm::i8>, //nb_subtract (binaryfunc)vec_mul<1, glm::i8>, //nb_multiply (binaryfunc)vec_mod<1, glm::i8>, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)vec_neg<1, glm::i8>, //nb_negative (unaryfunc)vec_pos<1, glm::i8>, //nb_positive (unaryfunc)vec_abs<1, glm::i8>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<1, glm::i8>, //nb_invert (binaryfunc)vec_lshift<1, glm::i8>, //nb_lshift (binaryfunc)vec_rshift<1, glm::i8>, //nb_rshift (binaryfunc)vec_and<1, glm::i8>, //nb_and (binaryfunc)vec_xor<1, glm::i8>, //nb_xor (binaryfunc)vec_or<1, glm::i8>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<1, glm::i8>, //nb_inplace_add (binaryfunc)vec_isub<1, glm::i8>, //nb_inplace_subtract (binaryfunc)vec_imul<1, glm::i8>, //nb_inplace_multiply (binaryfunc)vec_imod<1, glm::i8>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<1, glm::i8>, //nb_inplace_lshift (binaryfunc)vec_irshift<1, glm::i8>, //nb_inplace_rshift (binaryfunc)vec_iand<1, glm::i8>, //nb_inplace_and (binaryfunc)vec_ixor<1, glm::i8>, //nb_inplace_xor (binaryfunc)vec_ior<1, glm::i8>, //nb_inplace_or (binaryfunc)ivec_floordiv<1, glm::i8>, //nb_floor_divide (binaryfunc)vec_div<1, glm::i8>, (binaryfunc)ivec_ifloordiv<1, glm::i8>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<1, glm::i8>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<1, glm::i8>, //nb_inplace_matrix_multiply }; static PyTypeObject hi8vec1IterType = { PyVarObject_HEAD_INIT(NULL, 0) "i8vec1Iter", /* tp_name */ sizeof(vecIter<1, glm::i8>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<1, glm::i8>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "i8vec1 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec1Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<1, glm::i8>, /* tp_new */ }; static PyGLMTypeObject hi8vec1GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.i8vec1", /* tp_name */ sizeof(vec<1, glm::i8>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec1_repr, /* tp_repr */ & hi8vec1NumMethods, /* tp_as_number */ & hi8vec1SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<1, glm::i8>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec1_str, /* tp_str */ (getattrofunc)vec_getattr<1, glm::i8>, /* tp_getattro */ (setattrofunc)vec_setattr<1, glm::i8>, /* tp_setattro */ & hi8vec1BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "i8vec1( )\n1 component vector of high qualifier 8 bit integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<1, glm::i8>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<1, glm::i8>, /* tp_iter */ 0, /* tp_iternext */ hi8vec1_methods, /* tp_methods */ hi8vec1_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec1_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<1, glm::i8>, /* tp_new */ }, PyGLM_TYPE_VEC, 1, 0, sizeof(int8), sizeof(glm::vec<1, int8>), PyGLM_FS_INT8 }; static PyTypeObject& hi8vec1Type = *((PyTypeObject*)&hi8vec1GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int8/vec2.h000066400000000000000000000164031511156275200231260ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<2, glm::i8> vec2_int8_t; static PyMemberDef hi8vec2_members[] = { { (char*)"x", T_BYTE, offsetof(vec2_int8_t, super_type.x), 0, (char*)"i8vec2.x" }, { (char*)"y", T_BYTE, offsetof(vec2_int8_t, super_type.y), 0, (char*)"i8vec2.y" }, { NULL } /* Sentinel */ }; static PyMethodDef hi8vec2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec2_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec2_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<2, glm::i8>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hi8vec2BufferMethods = { (getbufferproc)vec_getbuffer<2, glm::i8>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hi8vec2SeqMethods = { (lenfunc)vec_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec2_sq_item, // sq_item 0, (ssizeobjargproc)vec2_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<2, glm::i8>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hi8vec2NumMethods = { (binaryfunc)vec_add<2, glm::i8>, //nb_add (binaryfunc)vec_sub<2, glm::i8>, //nb_subtract (binaryfunc)vec_mul<2, glm::i8>, //nb_multiply (binaryfunc)vec_mod<2, glm::i8>, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)vec_neg<2, glm::i8>, //nb_negative (unaryfunc)vec_pos<2, glm::i8>, //nb_positive (unaryfunc)vec_abs<2, glm::i8>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<2, glm::i8>, //nb_invert (binaryfunc)vec_lshift<2, glm::i8>, //nb_lshift (binaryfunc)vec_rshift<2, glm::i8>, //nb_rshift (binaryfunc)vec_and<2, glm::i8>, //nb_and (binaryfunc)vec_xor<2, glm::i8>, //nb_xor (binaryfunc)vec_or<2, glm::i8>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<2, glm::i8>, //nb_inplace_add (binaryfunc)vec_isub<2, glm::i8>, //nb_inplace_subtract (binaryfunc)vec_imul<2, glm::i8>, //nb_inplace_multiply (binaryfunc)vec_imod<2, glm::i8>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<2, glm::i8>, //nb_inplace_lshift (binaryfunc)vec_irshift<2, glm::i8>, //nb_inplace_rshift (binaryfunc)vec_iand<2, glm::i8>, //nb_inplace_and (binaryfunc)vec_ixor<2, glm::i8>, //nb_inplace_xor (binaryfunc)vec_ior<2, glm::i8>, //nb_inplace_or (binaryfunc)ivec_floordiv<2, glm::i8>, //nb_floor_divide (binaryfunc)vec_div<2, glm::i8>, (binaryfunc)ivec_ifloordiv<2, glm::i8>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<2, glm::i8>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<2, glm::i8>, //nb_inplace_matrix_multiply }; static PyTypeObject hi8vec2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "i8vec2Iter", /* tp_name */ sizeof(vecIter<2, glm::i8>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<2, glm::i8>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "i8vec2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec2Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<2, glm::i8>, /* tp_new */ }; static PyGLMTypeObject hi8vec2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.i8vec2", /* tp_name */ sizeof(vec<2, glm::i8>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec2_repr, /* tp_repr */ & hi8vec2NumMethods, /* tp_as_number */ & hi8vec2SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<2, glm::i8>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec2_str, /* tp_str */ (getattrofunc)vec_getattr<2, glm::i8>, /* tp_getattro */ (setattrofunc)vec_setattr<2, glm::i8>, /* tp_setattro */ & hi8vec2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "i8vec2( )\n2 components vector of high qualifier 8 bit integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<2, glm::i8>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<2, glm::i8>, /* tp_iter */ 0, /* tp_iternext */ hi8vec2_methods, /* tp_methods */ hi8vec2_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<2, glm::i8>, /* tp_new */ }, PyGLM_TYPE_VEC, 2, 0, sizeof(int8), sizeof(glm::vec<2, int8>), PyGLM_FS_INT8 }; static PyTypeObject& hi8vec2Type = *((PyTypeObject*)&hi8vec2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int8/vec3.h000066400000000000000000000165271511156275200231360ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<3, glm::i8> vec3_int8_t; static PyMemberDef hi8vec3_members[] = { { (char*)"x", T_BYTE, offsetof(vec3_int8_t, super_type.x), 0, (char*)"i8vec3.x" }, { (char*)"y", T_BYTE, offsetof(vec3_int8_t, super_type.y), 0, (char*)"i8vec3.y" }, { (char*)"z", T_BYTE, offsetof(vec3_int8_t, super_type.z), 0, (char*)"i8vec3.z" }, { NULL } /* Sentinel */ }; static PyMethodDef hi8vec3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec3_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec3_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<3, glm::i8>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hi8vec3BufferMethods = { (getbufferproc)vec_getbuffer<3, glm::i8>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hi8vec3SeqMethods = { (lenfunc)vec_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec3_sq_item, // sq_item 0, (ssizeobjargproc)vec3_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<3, glm::i8>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hi8vec3NumMethods = { (binaryfunc)vec_add<3, glm::i8>, //nb_add (binaryfunc)vec_sub<3, glm::i8>, //nb_subtract (binaryfunc)vec_mul<3, glm::i8>, //nb_multiply (binaryfunc)vec_mod<3, glm::i8>, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)vec_neg<3, glm::i8>, //nb_negative (unaryfunc)vec_pos<3, glm::i8>, //nb_positive (unaryfunc)vec_abs<3, glm::i8>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<3, glm::i8>, //nb_invert (binaryfunc)vec_lshift<3, glm::i8>, //nb_lshift (binaryfunc)vec_rshift<3, glm::i8>, //nb_rshift (binaryfunc)vec_and<3, glm::i8>, //nb_and (binaryfunc)vec_xor<3, glm::i8>, //nb_xor (binaryfunc)vec_or<3, glm::i8>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<3, glm::i8>, //nb_inplace_add (binaryfunc)vec_isub<3, glm::i8>, //nb_inplace_subtract (binaryfunc)vec_imul<3, glm::i8>, //nb_inplace_multiply (binaryfunc)vec_imod<3, glm::i8>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<3, glm::i8>, //nb_inplace_lshift (binaryfunc)vec_irshift<3, glm::i8>, //nb_inplace_rshift (binaryfunc)vec_iand<3, glm::i8>, //nb_inplace_and (binaryfunc)vec_ixor<3, glm::i8>, //nb_inplace_xor (binaryfunc)vec_ior<3, glm::i8>, //nb_inplace_or (binaryfunc)ivec_floordiv<3, glm::i8>, //nb_floor_divide (binaryfunc)vec_div<3, glm::i8>, (binaryfunc)ivec_ifloordiv<3, glm::i8>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<3, glm::i8>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<3, glm::i8>, //nb_inplace_matrix_multiply }; static PyTypeObject hi8vec3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "i8vec3Iter", /* tp_name */ sizeof(vecIter<3, glm::i8>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<3, glm::i8>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "i8vec3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec3Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<3, glm::i8>, /* tp_new */ }; static PyGLMTypeObject hi8vec3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.i8vec3", /* tp_name */ sizeof(vec<3, glm::i8>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec3_repr, /* tp_repr */ & hi8vec3NumMethods, /* tp_as_number */ & hi8vec3SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<3, glm::i8>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec3_str, /* tp_str */ (getattrofunc)vec_getattr<3, glm::i8>, /* tp_getattro */ (setattrofunc)vec_setattr<3, glm::i8>, /* tp_setattro */ & hi8vec3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "i8vec3( )\n3 components vector of high qualifier 8 bit integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<3, glm::i8>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<3, glm::i8>, /* tp_iter */ 0, /* tp_iternext */ hi8vec3_methods, /* tp_methods */ hi8vec3_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<3, glm::i8>, /* tp_new */ }, PyGLM_TYPE_VEC, 3, 0, sizeof(int8), sizeof(glm::vec<3, int8>), PyGLM_FS_INT8 }; static PyTypeObject& hi8vec3Type = *((PyTypeObject*)&hi8vec3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/int8/vec4.h000066400000000000000000000166531511156275200231370ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<4, glm::i8> vec4_int8_t; static PyMemberDef hi8vec4_members[] = { { (char*)"x", T_BYTE, offsetof(vec4_int8_t, super_type.x), 0, (char*)"i8vec4.x" }, { (char*)"y", T_BYTE, offsetof(vec4_int8_t, super_type.y), 0, (char*)"i8vec4.y" }, { (char*)"z", T_BYTE, offsetof(vec4_int8_t, super_type.z), 0, (char*)"i8vec4.z" }, { (char*)"w", T_BYTE, offsetof(vec4_int8_t, super_type.w), 0, (char*)"i8vec4.w" }, { NULL } /* Sentinel */ }; static PyMethodDef hi8vec4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec4_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec4_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<4, glm::i8>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hi8vec4BufferMethods = { (getbufferproc)vec_getbuffer<4, glm::i8>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hi8vec4SeqMethods = { (lenfunc)vec_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec4_sq_item, // sq_item 0, (ssizeobjargproc)vec4_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<4, glm::i8>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hi8vec4NumMethods = { (binaryfunc)vec_add<4, glm::i8>, //nb_add (binaryfunc)vec_sub<4, glm::i8>, //nb_subtract (binaryfunc)vec_mul<4, glm::i8>, //nb_multiply (binaryfunc)vec_mod<4, glm::i8>, //nb_remainder 0, //nb_divmod 0, //nb_power (unaryfunc)vec_neg<4, glm::i8>, //nb_negative (unaryfunc)vec_pos<4, glm::i8>, //nb_positive (unaryfunc)vec_abs<4, glm::i8>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<4, glm::i8>, //nb_invert (binaryfunc)vec_lshift<4, glm::i8>, //nb_lshift (binaryfunc)vec_rshift<4, glm::i8>, //nb_rshift (binaryfunc)vec_and<4, glm::i8>, //nb_and (binaryfunc)vec_xor<4, glm::i8>, //nb_xor (binaryfunc)vec_or<4, glm::i8>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<4, glm::i8>, //nb_inplace_add (binaryfunc)vec_isub<4, glm::i8>, //nb_inplace_subtract (binaryfunc)vec_imul<4, glm::i8>, //nb_inplace_multiply (binaryfunc)vec_imod<4, glm::i8>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<4, glm::i8>, //nb_inplace_lshift (binaryfunc)vec_irshift<4, glm::i8>, //nb_inplace_rshift (binaryfunc)vec_iand<4, glm::i8>, //nb_inplace_and (binaryfunc)vec_ixor<4, glm::i8>, //nb_inplace_xor (binaryfunc)vec_ior<4, glm::i8>, //nb_inplace_or (binaryfunc)ivec_floordiv<4, glm::i8>, //nb_floor_divide (binaryfunc)vec_div<4, glm::i8>, (binaryfunc)ivec_ifloordiv<4, glm::i8>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<4, glm::i8>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<4, glm::i8>, //nb_inplace_matrix_multiply }; static PyTypeObject hi8vec4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "i8vec4Iter", /* tp_name */ sizeof(vecIter<4, glm::i8>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<4, glm::i8>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "i8vec4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec4Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<4, glm::i8>, /* tp_new */ }; static PyGLMTypeObject hi8vec4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.i8vec4", /* tp_name */ sizeof(vec<4, glm::i8>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec4_repr, /* tp_repr */ & hi8vec4NumMethods, /* tp_as_number */ & hi8vec4SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<4, glm::i8>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec4_str, /* tp_str */ (getattrofunc)vec_getattr<4, glm::i8>, /* tp_getattro */ (setattrofunc)vec_setattr<4, glm::i8>, /* tp_setattro */ & hi8vec4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "i8vec4( )\n4 components vector of high qualifier 8 bit integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<4, glm::i8>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<4, glm::i8>, /* tp_iter */ 0, /* tp_iternext */ hi8vec4_methods, /* tp_methods */ hi8vec4_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<4, glm::i8>, /* tp_new */ }, PyGLM_TYPE_VEC, 4, 0, sizeof(int8), sizeof(glm::vec<4, int8>), PyGLM_FS_INT8 }; static PyTypeObject& hi8vec4Type = *((PyTypeObject*)&hi8vec4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint16/000077500000000000000000000000001511156275200223565ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint16/all.h000066400000000000000000000002211511156275200232720ustar00rootroot00000000000000#ifndef TYPES_VEC_UINT16_ALL_H #define TYPES_VEC_UINT16_ALL_H #include "vec1.h" #include "vec2.h" #include "vec3.h" #include "vec4.h" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint16/vec1.h000066400000000000000000000163401511156275200233710ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<1, glm::u16> vec1_uint16_t; static PyMemberDef hu16vec1_members[] = { { (char*)"x", T_USHORT, offsetof(vec1_uint16_t, super_type.x), 0, (char*)"u16vec1.x" }, { NULL } /* Sentinel */ }; static PyMethodDef hu16vec1_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec1_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec1_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<1, glm::u16>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hu16vec1BufferMethods = { (getbufferproc)vec_getbuffer<1, glm::u16>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hu16vec1SeqMethods = { (lenfunc)vec_len<1>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec1_sq_item, // sq_item 0, (ssizeobjargproc)vec1_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<1, glm::u16>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hu16vec1NumMethods = { (binaryfunc)vec_add<1, glm::u16>, //nb_add (binaryfunc)vec_sub<1, glm::u16>, //nb_subtract (binaryfunc)vec_mul<1, glm::u16>, //nb_multiply (binaryfunc)vec_mod<1, glm::u16>, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)vec_pos<1, glm::u16>, //nb_positive (unaryfunc)vec_abs<1, glm::u16>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<1, glm::u16>, //nb_invert (binaryfunc)vec_lshift<1, glm::u16>, //nb_lshift (binaryfunc)vec_rshift<1, glm::u16>, //nb_rshift (binaryfunc)vec_and<1, glm::u16>, //nb_and (binaryfunc)vec_xor<1, glm::u16>, //nb_xor (binaryfunc)vec_or<1, glm::u16>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<1, glm::u16>, //nb_inplace_add (binaryfunc)vec_isub<1, glm::u16>, //nb_inplace_subtract (binaryfunc)vec_imul<1, glm::u16>, //nb_inplace_multiply (binaryfunc)vec_imod<1, glm::u16>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<1, glm::u16>, //nb_inplace_lshift (binaryfunc)vec_irshift<1, glm::u16>, //nb_inplace_rshift (binaryfunc)vec_iand<1, glm::u16>, //nb_inplace_and (binaryfunc)vec_ixor<1, glm::u16>, //nb_inplace_xor (binaryfunc)vec_ior<1, glm::u16>, //nb_inplace_or (binaryfunc)vec_div<1, glm::u16>, //nb_floor_divide (binaryfunc)vec_div<1, glm::u16>, (binaryfunc)vec_idiv<1, glm::u16>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<1, glm::u16>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<1, glm::u16>, //nb_inplace_matrix_multiply }; static PyTypeObject hu16vec1IterType = { PyVarObject_HEAD_INIT(NULL, 0) "u16vec1Iter", /* tp_name */ sizeof(vecIter<1, glm::u16>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<1, glm::u16>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "u16vec1 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec1Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<1, glm::u16>, /* tp_new */ }; static PyGLMTypeObject hu16vec1GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.u16vec1", /* tp_name */ sizeof(vec<1, glm::u16>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec1_repr, /* tp_repr */ & hu16vec1NumMethods, /* tp_as_number */ & hu16vec1SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<1, glm::u16>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec1_str, /* tp_str */ (getattrofunc)vec_getattr<1, glm::u16>, /* tp_getattro */ (setattrofunc)vec_setattr<1, glm::u16>, /* tp_setattro */ & hu16vec1BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "u16vec1( )\n1 component vector of high qualifier 16 bit unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<1, glm::u16>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<1, glm::u16>, /* tp_iter */ 0, /* tp_iternext */ hu16vec1_methods, /* tp_methods */ hu16vec1_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec1_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<1, glm::u16>, /* tp_new */ }, PyGLM_TYPE_VEC, 1, 0, sizeof(uint16), sizeof(glm::vec<1, uint16>), PyGLM_FS_UINT16 }; static PyTypeObject& hu16vec1Type = *((PyTypeObject*)&hu16vec1GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint16/vec2.h000066400000000000000000000164721511156275200234000ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<2, glm::u16> vec2_uint16_t; static PyMemberDef hu16vec2_members[] = { { (char*)"x", T_USHORT, offsetof(vec2_uint16_t, super_type.x), 0, (char*)"u16vec2.x" }, { (char*)"y", T_USHORT, offsetof(vec2_uint16_t, super_type.y), 0, (char*)"u16vec2.y" }, { NULL } /* Sentinel */ }; static PyMethodDef hu16vec2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec2_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec2_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<2, glm::u16>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hu16vec2BufferMethods = { (getbufferproc)vec_getbuffer<2, glm::u16>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hu16vec2SeqMethods = { (lenfunc)vec_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec2_sq_item, // sq_item 0, (ssizeobjargproc)vec2_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<2, glm::u16>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hu16vec2NumMethods = { (binaryfunc)vec_add<2, glm::u16>, //nb_add (binaryfunc)vec_sub<2, glm::u16>, //nb_subtract (binaryfunc)vec_mul<2, glm::u16>, //nb_multiply (binaryfunc)vec_mod<2, glm::u16>, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)vec_pos<2, glm::u16>, //nb_positive (unaryfunc)vec_abs<2, glm::u16>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<2, glm::u16>, //nb_invert (binaryfunc)vec_lshift<2, glm::u16>, //nb_lshift (binaryfunc)vec_rshift<2, glm::u16>, //nb_rshift (binaryfunc)vec_and<2, glm::u16>, //nb_and (binaryfunc)vec_xor<2, glm::u16>, //nb_xor (binaryfunc)vec_or<2, glm::u16>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<2, glm::u16>, //nb_inplace_add (binaryfunc)vec_isub<2, glm::u16>, //nb_inplace_subtract (binaryfunc)vec_imul<2, glm::u16>, //nb_inplace_multiply (binaryfunc)vec_imod<2, glm::u16>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<2, glm::u16>, //nb_inplace_lshift (binaryfunc)vec_irshift<2, glm::u16>, //nb_inplace_rshift (binaryfunc)vec_iand<2, glm::u16>, //nb_inplace_and (binaryfunc)vec_ixor<2, glm::u16>, //nb_inplace_xor (binaryfunc)vec_ior<2, glm::u16>, //nb_inplace_or (binaryfunc)vec_div<2, glm::u16>, //nb_floor_divide (binaryfunc)vec_div<2, glm::u16>, (binaryfunc)vec_idiv<2, glm::u16>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<2, glm::u16>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<2, glm::u16>, //nb_inplace_matrix_multiply }; static PyTypeObject hu16vec2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "u16vec2Iter", /* tp_name */ sizeof(vecIter<2, glm::u16>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<2, glm::u16>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "u16vec2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec2Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<2, glm::u16>, /* tp_new */ }; static PyGLMTypeObject hu16vec2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.u16vec2", /* tp_name */ sizeof(vec<2, glm::u16>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec2_repr, /* tp_repr */ & hu16vec2NumMethods, /* tp_as_number */ & hu16vec2SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<2, glm::u16>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec2_str, /* tp_str */ (getattrofunc)vec_getattr<2, glm::u16>, /* tp_getattro */ (setattrofunc)vec_setattr<2, glm::u16>, /* tp_setattro */ & hu16vec2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "u16vec2( )\n2 components vector of high qualifier 16 bit unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<2, glm::u16>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<2, glm::u16>, /* tp_iter */ 0, /* tp_iternext */ hu16vec2_methods, /* tp_methods */ hu16vec2_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<2, glm::u16>, /* tp_new */ }, PyGLM_TYPE_VEC, 2, 0, sizeof(uint16), sizeof(glm::vec<2, uint16>), PyGLM_FS_UINT16 }; static PyTypeObject& hu16vec2Type = *((PyTypeObject*)&hu16vec2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint16/vec3.h000066400000000000000000000166231511156275200233770ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<3, glm::u16> vec3_uint16_t; static PyMemberDef hu16vec3_members[] = { { (char*)"x", T_USHORT, offsetof(vec3_uint16_t, super_type.x), 0, (char*)"u16vec3.x" }, { (char*)"y", T_USHORT, offsetof(vec3_uint16_t, super_type.y), 0, (char*)"u16vec3.y" }, { (char*)"z", T_USHORT, offsetof(vec3_uint16_t, super_type.z), 0, (char*)"u16vec3.z" }, { NULL } /* Sentinel */ }; static PyMethodDef hu16vec3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec3_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec3_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<3, glm::u16>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hu16vec3BufferMethods = { (getbufferproc)vec_getbuffer<3, glm::u16>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hu16vec3SeqMethods = { (lenfunc)vec_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec3_sq_item, // sq_item 0, (ssizeobjargproc)vec3_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<3, glm::u16>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hu16vec3NumMethods = { (binaryfunc)vec_add<3, glm::u16>, //nb_add (binaryfunc)vec_sub<3, glm::u16>, //nb_subtract (binaryfunc)vec_mul<3, glm::u16>, //nb_multiply (binaryfunc)vec_mod<3, glm::u16>, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)vec_pos<3, glm::u16>, //nb_positive (unaryfunc)vec_abs<3, glm::u16>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<3, glm::u16>, //nb_invert (binaryfunc)vec_lshift<3, glm::u16>, //nb_lshift (binaryfunc)vec_rshift<3, glm::u16>, //nb_rshift (binaryfunc)vec_and<3, glm::u16>, //nb_and (binaryfunc)vec_xor<3, glm::u16>, //nb_xor (binaryfunc)vec_or<3, glm::u16>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<3, glm::u16>, //nb_inplace_add (binaryfunc)vec_isub<3, glm::u16>, //nb_inplace_subtract (binaryfunc)vec_imul<3, glm::u16>, //nb_inplace_multiply (binaryfunc)vec_imod<3, glm::u16>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<3, glm::u16>, //nb_inplace_lshift (binaryfunc)vec_irshift<3, glm::u16>, //nb_inplace_rshift (binaryfunc)vec_iand<3, glm::u16>, //nb_inplace_and (binaryfunc)vec_ixor<3, glm::u16>, //nb_inplace_xor (binaryfunc)vec_ior<3, glm::u16>, //nb_inplace_or (binaryfunc)vec_div<3, glm::u16>, //nb_floor_divide (binaryfunc)vec_div<3, glm::u16>, (binaryfunc)vec_idiv<3, glm::u16>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<3, glm::u16>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<3, glm::u16>, //nb_inplace_matrix_multiply }; static PyTypeObject hu16vec3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "u16vec3Iter", /* tp_name */ sizeof(vecIter<3, glm::u16>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<3, glm::u16>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "u16vec3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec3Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<3, glm::u16>, /* tp_new */ }; static PyGLMTypeObject hu16vec3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.u16vec3", /* tp_name */ sizeof(vec<3, glm::u16>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec3_repr, /* tp_repr */ & hu16vec3NumMethods, /* tp_as_number */ & hu16vec3SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<3, glm::u16>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec3_str, /* tp_str */ (getattrofunc)vec_getattr<3, glm::u16>, /* tp_getattro */ (setattrofunc)vec_setattr<3, glm::u16>, /* tp_setattro */ & hu16vec3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "u16vec3( )\n3 components vector of high qualifier 16 bit unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<3, glm::u16>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<3, glm::u16>, /* tp_iter */ 0, /* tp_iternext */ hu16vec3_methods, /* tp_methods */ hu16vec3_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<3, glm::u16>, /* tp_new */ }, PyGLM_TYPE_VEC, 3, 0, sizeof(uint16), sizeof(glm::vec<3, uint16>), PyGLM_FS_UINT16 }; static PyTypeObject& hu16vec3Type = *((PyTypeObject*)&hu16vec3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint16/vec4.h000066400000000000000000000167541511156275200234050ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<4, glm::u16> vec4_uint16_t; static PyMemberDef hu16vec4_members[] = { { (char*)"x", T_USHORT, offsetof(vec4_uint16_t, super_type.x), 0, (char*)"u16vec4.x" }, { (char*)"y", T_USHORT, offsetof(vec4_uint16_t, super_type.y), 0, (char*)"u16vec4.y" }, { (char*)"z", T_USHORT, offsetof(vec4_uint16_t, super_type.z), 0, (char*)"u16vec4.z" }, { (char*)"w", T_USHORT, offsetof(vec4_uint16_t, super_type.w), 0, (char*)"u16vec4.w" }, { NULL } /* Sentinel */ }; static PyMethodDef hu16vec4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec4_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec4_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<4, glm::u16>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hu16vec4BufferMethods = { (getbufferproc)vec_getbuffer<4, glm::u16>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hu16vec4SeqMethods = { (lenfunc)vec_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec4_sq_item, // sq_item 0, (ssizeobjargproc)vec4_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<4, glm::u16>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hu16vec4NumMethods = { (binaryfunc)vec_add<4, glm::u16>, //nb_add (binaryfunc)vec_sub<4, glm::u16>, //nb_subtract (binaryfunc)vec_mul<4, glm::u16>, //nb_multiply (binaryfunc)vec_mod<4, glm::u16>, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)vec_pos<4, glm::u16>, //nb_positive (unaryfunc)vec_abs<4, glm::u16>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<4, glm::u16>, //nb_invert (binaryfunc)vec_lshift<4, glm::u16>, //nb_lshift (binaryfunc)vec_rshift<4, glm::u16>, //nb_rshift (binaryfunc)vec_and<4, glm::u16>, //nb_and (binaryfunc)vec_xor<4, glm::u16>, //nb_xor (binaryfunc)vec_or<4, glm::u16>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<4, glm::u16>, //nb_inplace_add (binaryfunc)vec_isub<4, glm::u16>, //nb_inplace_subtract (binaryfunc)vec_imul<4, glm::u16>, //nb_inplace_multiply (binaryfunc)vec_imod<4, glm::u16>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<4, glm::u16>, //nb_inplace_lshift (binaryfunc)vec_irshift<4, glm::u16>, //nb_inplace_rshift (binaryfunc)vec_iand<4, glm::u16>, //nb_inplace_and (binaryfunc)vec_ixor<4, glm::u16>, //nb_inplace_xor (binaryfunc)vec_ior<4, glm::u16>, //nb_inplace_or (binaryfunc)vec_div<4, glm::u16>, //nb_floor_divide (binaryfunc)vec_div<4, glm::u16>, (binaryfunc)vec_idiv<4, glm::u16>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<4, glm::u16>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<4, glm::u16>, //nb_inplace_matrix_multiply }; static PyTypeObject hu16vec4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "u16vec4Iter", /* tp_name */ sizeof(vecIter<4, glm::u16>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<4, glm::u16>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "u16vec4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec4Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<4, glm::u16>, /* tp_new */ }; static PyGLMTypeObject hu16vec4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.u16vec4", /* tp_name */ sizeof(vec<4, glm::u16>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec4_repr, /* tp_repr */ & hu16vec4NumMethods, /* tp_as_number */ & hu16vec4SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<4, glm::u16>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec4_str, /* tp_str */ (getattrofunc)vec_getattr<4, glm::u16>, /* tp_getattro */ (setattrofunc)vec_setattr<4, glm::u16>, /* tp_setattro */ & hu16vec4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "u16vec4( )\n4 components vector of high qualifier 16 bit unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<4, glm::u16>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<4, glm::u16>, /* tp_iter */ 0, /* tp_iternext */ hu16vec4_methods, /* tp_methods */ hu16vec4_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<4, glm::u16>, /* tp_new */ }, PyGLM_TYPE_VEC, 4, 0, sizeof(uint16), sizeof(glm::vec<4, uint16>), PyGLM_FS_UINT16 }; static PyTypeObject& hu16vec4Type = *((PyTypeObject*)&hu16vec4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint32/000077500000000000000000000000001511156275200223545ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint32/all.h000066400000000000000000000002211511156275200232700ustar00rootroot00000000000000#ifndef TYPES_VEC_UINT32_ALL_H #define TYPES_VEC_UINT32_ALL_H #include "vec1.h" #include "vec2.h" #include "vec3.h" #include "vec4.h" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint32/vec1.h000066400000000000000000000162611511156275200233710ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<1, glm::u32> vec1_uint32_t; static PyMemberDef huvec1_members[] = { { (char*)"x", T_UINT, offsetof(vec1_uint32_t, super_type.x), 0, (char*)"uvec1.x" }, { NULL } /* Sentinel */ }; static PyMethodDef huvec1_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec1_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec1_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<1, glm::u32>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs huvec1BufferMethods = { (getbufferproc)vec_getbuffer<1, glm::u32>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods huvec1SeqMethods = { (lenfunc)vec_len<1>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec1_sq_item, // sq_item 0, (ssizeobjargproc)vec1_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<1, glm::u32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods huvec1NumMethods = { (binaryfunc)vec_add<1, glm::u32>, //nb_add (binaryfunc)vec_sub<1, glm::u32>, //nb_subtract (binaryfunc)vec_mul<1, glm::u32>, //nb_multiply (binaryfunc)vec_mod<1, glm::u32>, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)vec_pos<1, glm::u32>, //nb_positive (unaryfunc)vec_abs<1, glm::u32>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<1, glm::u32>, //nb_invert (binaryfunc)vec_lshift<1, glm::u32>, //nb_lshift (binaryfunc)vec_rshift<1, glm::u32>, //nb_rshift (binaryfunc)vec_and<1, glm::u32>, //nb_and (binaryfunc)vec_xor<1, glm::u32>, //nb_xor (binaryfunc)vec_or<1, glm::u32>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<1, glm::u32>, //nb_inplace_add (binaryfunc)vec_isub<1, glm::u32>, //nb_inplace_subtract (binaryfunc)vec_imul<1, glm::u32>, //nb_inplace_multiply (binaryfunc)vec_imod<1, glm::u32>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<1, glm::u32>, //nb_inplace_lshift (binaryfunc)vec_irshift<1, glm::u32>, //nb_inplace_rshift (binaryfunc)vec_iand<1, glm::u32>, //nb_inplace_and (binaryfunc)vec_ixor<1, glm::u32>, //nb_inplace_xor (binaryfunc)vec_ior<1, glm::u32>, //nb_inplace_or (binaryfunc)vec_div<1, glm::u32>, //nb_floor_divide (binaryfunc)vec_div<1, glm::u32>, (binaryfunc)vec_idiv<1, glm::u32>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<1, glm::u32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<1, glm::u32>, //nb_inplace_matrix_multiply }; static PyTypeObject huvec1IterType = { PyVarObject_HEAD_INIT(NULL, 0) "uvec1Iter", /* tp_name */ sizeof(vecIter<1, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<1, glm::u32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "uvec1 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec1Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<1, glm::u32>, /* tp_new */ }; static PyGLMTypeObject huvec1GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.uvec1", /* tp_name */ sizeof(vec<1, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec1_repr, /* tp_repr */ & huvec1NumMethods, /* tp_as_number */ & huvec1SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<1, glm::u32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec1_str, /* tp_str */ (getattrofunc)vec_getattr<1, glm::u32>, /* tp_getattro */ (setattrofunc)vec_setattr<1, glm::u32>, /* tp_setattro */ & huvec1BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "uvec1( )\n1 component vector of high qualifier unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<1, glm::u32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<1, glm::u32>, /* tp_iter */ 0, /* tp_iternext */ huvec1_methods, /* tp_methods */ huvec1_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec1_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<1, glm::u32>, /* tp_new */ }, PyGLM_TYPE_VEC, 1, 0, sizeof(uint32), sizeof(glm::vec<1, uint32>), PyGLM_FS_UINT32 }; static PyTypeObject& huvec1Type = *((PyTypeObject*)&huvec1GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint32/vec2.h000066400000000000000000000164071511156275200233740ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<2, glm::u32> vec2_uint32_t; static PyMemberDef huvec2_members[] = { { (char*)"x", T_UINT, offsetof(vec2_uint32_t, super_type.x), 0, (char*)"uvec2.x" }, { (char*)"y", T_UINT, offsetof(vec2_uint32_t, super_type.y), 0, (char*)"uvec2.y" }, { NULL } /* Sentinel */ }; static PyMethodDef huvec2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec2_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec2_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<2, glm::u32>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs huvec2BufferMethods = { (getbufferproc)vec_getbuffer<2, glm::u32>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods huvec2SeqMethods = { (lenfunc)vec_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec2_sq_item, // sq_item 0, (ssizeobjargproc)vec2_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<2, glm::u32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods huvec2NumMethods = { (binaryfunc)vec_add<2, glm::u32>, //nb_add (binaryfunc)vec_sub<2, glm::u32>, //nb_subtract (binaryfunc)vec_mul<2, glm::u32>, //nb_multiply (binaryfunc)vec_mod<2, glm::u32>, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)vec_pos<2, glm::u32>, //nb_positive (unaryfunc)vec_abs<2, glm::u32>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<2, glm::u32>, //nb_invert (binaryfunc)vec_lshift<2, glm::u32>, //nb_lshift (binaryfunc)vec_rshift<2, glm::u32>, //nb_rshift (binaryfunc)vec_and<2, glm::u32>, //nb_and (binaryfunc)vec_xor<2, glm::u32>, //nb_xor (binaryfunc)vec_or<2, glm::u32>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<2, glm::u32>, //nb_inplace_add (binaryfunc)vec_isub<2, glm::u32>, //nb_inplace_subtract (binaryfunc)vec_imul<2, glm::u32>, //nb_inplace_multiply (binaryfunc)vec_imod<2, glm::u32>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<2, glm::u32>, //nb_inplace_lshift (binaryfunc)vec_irshift<2, glm::u32>, //nb_inplace_rshift (binaryfunc)vec_iand<2, glm::u32>, //nb_inplace_and (binaryfunc)vec_ixor<2, glm::u32>, //nb_inplace_xor (binaryfunc)vec_ior<2, glm::u32>, //nb_inplace_or (binaryfunc)vec_div<2, glm::u32>, //nb_floor_divide (binaryfunc)vec_div<2, glm::u32>, (binaryfunc)vec_idiv<2, glm::u32>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<2, glm::u32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<2, glm::u32>, //nb_inplace_matrix_multiply }; static PyTypeObject huvec2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "uvec2Iter", /* tp_name */ sizeof(vecIter<2, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<2, glm::u32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "uvec2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec2Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<2, glm::u32>, /* tp_new */ }; static PyGLMTypeObject huvec2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.uvec2", /* tp_name */ sizeof(vec<2, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec2_repr, /* tp_repr */ & huvec2NumMethods, /* tp_as_number */ & huvec2SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<2, glm::u32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec2_str, /* tp_str */ (getattrofunc)vec_getattr<2, glm::u32>, /* tp_getattro */ (setattrofunc)vec_setattr<2, glm::u32>, /* tp_setattro */ & huvec2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "uvec2( )\n2 components vector of high qualifier unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<2, glm::u32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<2, glm::u32>, /* tp_iter */ 0, /* tp_iternext */ huvec2_methods, /* tp_methods */ huvec2_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<2, glm::u32>, /* tp_new */ }, PyGLM_TYPE_VEC, 2, 0, sizeof(uint32), sizeof(glm::vec<2, uint32>), PyGLM_FS_UINT32 }; static PyTypeObject& huvec2Type = *((PyTypeObject*)&huvec2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint32/vec3.h000066400000000000000000000165631511156275200234000ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<3, glm::u32> vec3_uint32_t; static PyMemberDef huvec3_members[] = { { (char*)"x", T_UINT, offsetof(vec3_uint32_t, super_type.x), 0, (char*)"uvec3.x" }, { (char*)"y", T_UINT, offsetof(vec3_uint32_t, super_type.y), 0, (char*)"uvec3.y" }, { (char*)"z", T_UINT, offsetof(vec3_uint32_t, super_type.z), 0, (char*)"uvec3.z" }, { NULL } /* Sentinel */ }; static PyMethodDef huvec3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec3_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec3_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<3, glm::u32>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs huvec3BufferMethods = { (getbufferproc)vec_getbuffer<3, glm::u32>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods huvec3SeqMethods = { (lenfunc)vec_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec3_sq_item, // sq_item 0, (ssizeobjargproc)vec3_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<3, glm::u32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods huvec3NumMethods = { (binaryfunc)vec_add<3, glm::u32>, //nb_add (binaryfunc)vec_sub<3, glm::u32>, //nb_subtract (binaryfunc)vec_mul<3, glm::u32>, //nb_multiply (binaryfunc)vec_mod<3, glm::u32>, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)vec_pos<3, glm::u32>, //nb_positive (unaryfunc)vec_abs<3, glm::u32>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<3, glm::u32>, //nb_invert (binaryfunc)vec_lshift<3, glm::u32>, //nb_lshift (binaryfunc)vec_rshift<3, glm::u32>, //nb_rshift (binaryfunc)vec_and<3, glm::u32>, //nb_and (binaryfunc)vec_xor<3, glm::u32>, //nb_xor (binaryfunc)vec_or<3, glm::u32>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<3, glm::u32>, //nb_inplace_add (binaryfunc)vec_isub<3, glm::u32>, //nb_inplace_subtract (binaryfunc)vec_imul<3, glm::u32>, //nb_inplace_multiply (binaryfunc)vec_imod<3, glm::u32>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<3, glm::u32>, //nb_inplace_lshift (binaryfunc)vec_irshift<3, glm::u32>, //nb_inplace_rshift (binaryfunc)vec_iand<3, glm::u32>, //nb_inplace_and (binaryfunc)vec_ixor<3, glm::u32>, //nb_inplace_xor (binaryfunc)vec_ior<3, glm::u32>, //nb_inplace_or (binaryfunc)vec_div<3, glm::u32>, //nb_floor_divide (binaryfunc)vec_div<3, glm::u32>, (binaryfunc)vec_idiv<3, glm::u32>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<3, glm::u32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<3, glm::u32>, //nb_inplace_matrix_multiply }; static PyTypeObject huvec3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "uvec3Iter", /* tp_name */ sizeof(vecIter<3, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<3, glm::u32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "uvec3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec3Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<3, glm::u32>, /* tp_new */ }; static PyGLMTypeObject huvec3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.uvec3", /* tp_name */ sizeof(vec<3, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec3_repr, /* tp_repr */ & huvec3NumMethods, /* tp_as_number */ & huvec3SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<3, glm::u32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec3_str, /* tp_str */ (getattrofunc)vec_getattr<3, glm::u32>, /* tp_getattro */ (setattrofunc)vec_setattr<3, glm::u32>, /* tp_setattro */ & huvec3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "uvec3( )\n3 components vector of high qualifier unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<3, glm::u32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<3, glm::u32>, /* tp_iter */ 0, /* tp_iternext */ huvec3_methods, /* tp_methods */ huvec3_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<3, glm::u32>, /* tp_new */ }, PyGLM_TYPE_VEC, 3, 0, sizeof(uint32), sizeof(glm::vec<3, uint32>), PyGLM_FS_UINT32 }; static PyTypeObject& huvec3Type = *((PyTypeObject*)&huvec3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint32/vec4.h000066400000000000000000000166611511156275200234000ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<4, glm::u32> vec4_uint32_t; static PyMemberDef huvec4_members[] = { { (char*)"x", T_UINT, offsetof(vec4_uint32_t, super_type.x), 0, (char*)"uvec4.x" }, { (char*)"y", T_UINT, offsetof(vec4_uint32_t, super_type.y), 0, (char*)"uvec4.y" }, { (char*)"z", T_UINT, offsetof(vec4_uint32_t, super_type.z), 0, (char*)"uvec4.z" }, { (char*)"w", T_UINT, offsetof(vec4_uint32_t, super_type.w), 0, (char*)"uvec4.w" }, { NULL } /* Sentinel */ }; static PyMethodDef huvec4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec4_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec4_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<4, glm::u32>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs huvec4BufferMethods = { (getbufferproc)vec_getbuffer<4, glm::u32>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods huvec4SeqMethods = { (lenfunc)vec_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec4_sq_item, // sq_item 0, (ssizeobjargproc)vec4_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<4, glm::u32>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods huvec4NumMethods = { (binaryfunc)vec_add<4, glm::u32>, //nb_add (binaryfunc)vec_sub<4, glm::u32>, //nb_subtract (binaryfunc)vec_mul<4, glm::u32>, //nb_multiply (binaryfunc)vec_mod<4, glm::u32>, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)vec_pos<4, glm::u32>, //nb_positive (unaryfunc)vec_abs<4, glm::u32>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<4, glm::u32>, //nb_invert (binaryfunc)vec_lshift<4, glm::u32>, //nb_lshift (binaryfunc)vec_rshift<4, glm::u32>, //nb_rshift (binaryfunc)vec_and<4, glm::u32>, //nb_and (binaryfunc)vec_xor<4, glm::u32>, //nb_xor (binaryfunc)vec_or<4, glm::u32>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<4, glm::u32>, //nb_inplace_add (binaryfunc)vec_isub<4, glm::u32>, //nb_inplace_subtract (binaryfunc)vec_imul<4, glm::u32>, //nb_inplace_multiply (binaryfunc)vec_imod<4, glm::u32>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<4, glm::u32>, //nb_inplace_lshift (binaryfunc)vec_irshift<4, glm::u32>, //nb_inplace_rshift (binaryfunc)vec_iand<4, glm::u32>, //nb_inplace_and (binaryfunc)vec_ixor<4, glm::u32>, //nb_inplace_xor (binaryfunc)vec_ior<4, glm::u32>, //nb_inplace_or (binaryfunc)vec_div<4, glm::u32>, //nb_floor_divide (binaryfunc)vec_div<4, glm::u32>, (binaryfunc)vec_idiv<4, glm::u32>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<4, glm::u32>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<4, glm::u32>, //nb_inplace_matrix_multiply }; static PyTypeObject huvec4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "uvec4Iter", /* tp_name */ sizeof(vecIter<4, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<4, glm::u32>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "uvec4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec4Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<4, glm::u32>, /* tp_new */ }; static PyGLMTypeObject huvec4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.uvec4", /* tp_name */ sizeof(vec<4, glm::u32>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec4_repr, /* tp_repr */ & huvec4NumMethods, /* tp_as_number */ & huvec4SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<4, glm::u32>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec4_str, /* tp_str */ (getattrofunc)vec_getattr<4, glm::u32>, /* tp_getattro */ (setattrofunc)vec_setattr<4, glm::u32>, /* tp_setattro */ & huvec4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "uvec4( )\n4 components vector of high qualifier unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<4, glm::u32>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<4, glm::u32>, /* tp_iter */ 0, /* tp_iternext */ huvec4_methods, /* tp_methods */ huvec4_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<4, glm::u32>, /* tp_new */ }, PyGLM_TYPE_VEC, 4, 0, sizeof(uint32), sizeof(glm::vec<4, uint32>), PyGLM_FS_UINT32 }; static PyTypeObject& huvec4Type = *((PyTypeObject*)&huvec4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint64/000077500000000000000000000000001511156275200223615ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint64/all.h000066400000000000000000000002211511156275200232750ustar00rootroot00000000000000#ifndef TYPES_VEC_UINT64_ALL_H #define TYPES_VEC_UINT64_ALL_H #include "vec1.h" #include "vec2.h" #include "vec3.h" #include "vec4.h" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint64/vec1.h000066400000000000000000000163431511156275200233770ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<1, glm::u64> vec1_uint64_t; static PyMemberDef hu64vec1_members[] = { { (char*)"x", T_ULONGLONG, offsetof(vec1_uint64_t, super_type.x), 0, (char*)"u64vec1.x" }, { NULL } /* Sentinel */ }; static PyMethodDef hu64vec1_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec1_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec1_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<1, glm::u64>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hu64vec1BufferMethods = { (getbufferproc)vec_getbuffer<1, glm::u64>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hu64vec1SeqMethods = { (lenfunc)vec_len<1>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec1_sq_item, // sq_item 0, (ssizeobjargproc)vec1_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<1, glm::u64>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hu64vec1NumMethods = { (binaryfunc)vec_add<1, glm::u64>, //nb_add (binaryfunc)vec_sub<1, glm::u64>, //nb_subtract (binaryfunc)vec_mul<1, glm::u64>, //nb_multiply (binaryfunc)vec_mod<1, glm::u64>, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)vec_pos<1, glm::u64>, //nb_positive (unaryfunc)vec_abs<1, glm::u64>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<1, glm::u64>, //nb_invert (binaryfunc)vec_lshift<1, glm::u64>, //nb_lshift (binaryfunc)vec_rshift<1, glm::u64>, //nb_rshift (binaryfunc)vec_and<1, glm::u64>, //nb_and (binaryfunc)vec_xor<1, glm::u64>, //nb_xor (binaryfunc)vec_or<1, glm::u64>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<1, glm::u64>, //nb_inplace_add (binaryfunc)vec_isub<1, glm::u64>, //nb_inplace_subtract (binaryfunc)vec_imul<1, glm::u64>, //nb_inplace_multiply (binaryfunc)vec_imod<1, glm::u64>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<1, glm::u64>, //nb_inplace_lshift (binaryfunc)vec_irshift<1, glm::u64>, //nb_inplace_rshift (binaryfunc)vec_iand<1, glm::u64>, //nb_inplace_and (binaryfunc)vec_ixor<1, glm::u64>, //nb_inplace_xor (binaryfunc)vec_ior<1, glm::u64>, //nb_inplace_or (binaryfunc)vec_div<1, glm::u64>, //nb_floor_divide (binaryfunc)vec_div<1, glm::u64>, (binaryfunc)vec_idiv<1, glm::u64>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<1, glm::u64>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<1, glm::u64>, //nb_inplace_matrix_multiply }; static PyTypeObject hu64vec1IterType = { PyVarObject_HEAD_INIT(NULL, 0) "u64vec1Iter", /* tp_name */ sizeof(vecIter<1, glm::u64>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<1, glm::u64>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "u64vec1 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec1Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<1, glm::u64>, /* tp_new */ }; static PyGLMTypeObject hu64vec1GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.u64vec1", /* tp_name */ sizeof(vec<1, glm::u64>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec1_repr, /* tp_repr */ & hu64vec1NumMethods, /* tp_as_number */ & hu64vec1SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<1, glm::u64>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec1_str, /* tp_str */ (getattrofunc)vec_getattr<1, glm::u64>, /* tp_getattro */ (setattrofunc)vec_setattr<1, glm::u64>, /* tp_setattro */ & hu64vec1BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "u64vec1( )\n1 component vector of high qualifier 64 bit unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<1, glm::u64>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<1, glm::u64>, /* tp_iter */ 0, /* tp_iternext */ hu64vec1_methods, /* tp_methods */ hu64vec1_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec1_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<1, glm::u64>, /* tp_new */ }, PyGLM_TYPE_VEC, 1, 0, sizeof(uint64), sizeof(glm::vec<1, uint64>), PyGLM_FS_UINT64 }; static PyTypeObject& hu64vec1Type = *((PyTypeObject*)&hu64vec1GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint64/vec2.h000066400000000000000000000165001511156275200233730ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<2, glm::u64> vec2_uint64_t; static PyMemberDef hu64vec2_members[] = { { (char*)"x", T_ULONGLONG, offsetof(vec2_uint64_t, super_type.x), 0, (char*)"u64vec2.x" }, { (char*)"y", T_ULONGLONG, offsetof(vec2_uint64_t, super_type.y), 0, (char*)"u64vec2.y" }, { NULL } /* Sentinel */ }; static PyMethodDef hu64vec2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec2_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec2_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<2, glm::u64>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hu64vec2BufferMethods = { (getbufferproc)vec_getbuffer<2, glm::u64>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hu64vec2SeqMethods = { (lenfunc)vec_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec2_sq_item, // sq_item 0, (ssizeobjargproc)vec2_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<2, glm::u64>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hu64vec2NumMethods = { (binaryfunc)vec_add<2, glm::u64>, //nb_add (binaryfunc)vec_sub<2, glm::u64>, //nb_subtract (binaryfunc)vec_mul<2, glm::u64>, //nb_multiply (binaryfunc)vec_mod<2, glm::u64>, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)vec_pos<2, glm::u64>, //nb_positive (unaryfunc)vec_abs<2, glm::u64>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<2, glm::u64>, //nb_invert (binaryfunc)vec_lshift<2, glm::u64>, //nb_lshift (binaryfunc)vec_rshift<2, glm::u64>, //nb_rshift (binaryfunc)vec_and<2, glm::u64>, //nb_and (binaryfunc)vec_xor<2, glm::u64>, //nb_xor (binaryfunc)vec_or<2, glm::u64>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<2, glm::u64>, //nb_inplace_add (binaryfunc)vec_isub<2, glm::u64>, //nb_inplace_subtract (binaryfunc)vec_imul<2, glm::u64>, //nb_inplace_multiply (binaryfunc)vec_imod<2, glm::u64>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<2, glm::u64>, //nb_inplace_lshift (binaryfunc)vec_irshift<2, glm::u64>, //nb_inplace_rshift (binaryfunc)vec_iand<2, glm::u64>, //nb_inplace_and (binaryfunc)vec_ixor<2, glm::u64>, //nb_inplace_xor (binaryfunc)vec_ior<2, glm::u64>, //nb_inplace_or (binaryfunc)vec_div<2, glm::u64>, //nb_floor_divide (binaryfunc)vec_div<2, glm::u64>, (binaryfunc)vec_idiv<2, glm::u64>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<2, glm::u64>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<2, glm::u64>, //nb_inplace_matrix_multiply }; static PyTypeObject hu64vec2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "u64vec2Iter", /* tp_name */ sizeof(vecIter<2, glm::u64>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<2, glm::u64>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "u64vec2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec2Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<2, glm::u64>, /* tp_new */ }; static PyGLMTypeObject hu64vec2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.u64vec2", /* tp_name */ sizeof(vec<2, glm::u64>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec2_repr, /* tp_repr */ & hu64vec2NumMethods, /* tp_as_number */ & hu64vec2SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<2, glm::u64>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec2_str, /* tp_str */ (getattrofunc)vec_getattr<2, glm::u64>, /* tp_getattro */ (setattrofunc)vec_setattr<2, glm::u64>, /* tp_setattro */ & hu64vec2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "u64vec2( )\n2 components vector of high qualifier 64 bit unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<2, glm::u64>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<2, glm::u64>, /* tp_iter */ 0, /* tp_iternext */ hu64vec2_methods, /* tp_methods */ hu64vec2_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<2, glm::u64>, /* tp_new */ }, PyGLM_TYPE_VEC, 2, 0, sizeof(uint64), sizeof(glm::vec<2, uint64>), PyGLM_FS_UINT64 }; static PyTypeObject& hu64vec2Type = *((PyTypeObject*)&hu64vec2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint64/vec3.h000066400000000000000000000166341511156275200234040ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<3, glm::u64> vec3_uint64_t; static PyMemberDef hu64vec3_members[] = { { (char*)"x", T_ULONGLONG, offsetof(vec3_uint64_t, super_type.x), 0, (char*)"u64vec3.x" }, { (char*)"y", T_ULONGLONG, offsetof(vec3_uint64_t, super_type.y), 0, (char*)"u64vec3.y" }, { (char*)"z", T_ULONGLONG, offsetof(vec3_uint64_t, super_type.z), 0, (char*)"u64vec3.z" }, { NULL } /* Sentinel */ }; static PyMethodDef hu64vec3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec3_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec3_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<3, glm::u64>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hu64vec3BufferMethods = { (getbufferproc)vec_getbuffer<3, glm::u64>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hu64vec3SeqMethods = { (lenfunc)vec_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec3_sq_item, // sq_item 0, (ssizeobjargproc)vec3_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<3, glm::u64>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hu64vec3NumMethods = { (binaryfunc)vec_add<3, glm::u64>, //nb_add (binaryfunc)vec_sub<3, glm::u64>, //nb_subtract (binaryfunc)vec_mul<3, glm::u64>, //nb_multiply (binaryfunc)vec_mod<3, glm::u64>, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)vec_pos<3, glm::u64>, //nb_positive (unaryfunc)vec_abs<3, glm::u64>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<3, glm::u64>, //nb_invert (binaryfunc)vec_lshift<3, glm::u64>, //nb_lshift (binaryfunc)vec_rshift<3, glm::u64>, //nb_rshift (binaryfunc)vec_and<3, glm::u64>, //nb_and (binaryfunc)vec_xor<3, glm::u64>, //nb_xor (binaryfunc)vec_or<3, glm::u64>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<3, glm::u64>, //nb_inplace_add (binaryfunc)vec_isub<3, glm::u64>, //nb_inplace_subtract (binaryfunc)vec_imul<3, glm::u64>, //nb_inplace_multiply (binaryfunc)vec_imod<3, glm::u64>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<3, glm::u64>, //nb_inplace_lshift (binaryfunc)vec_irshift<3, glm::u64>, //nb_inplace_rshift (binaryfunc)vec_iand<3, glm::u64>, //nb_inplace_and (binaryfunc)vec_ixor<3, glm::u64>, //nb_inplace_xor (binaryfunc)vec_ior<3, glm::u64>, //nb_inplace_or (binaryfunc)vec_div<3, glm::u64>, //nb_floor_divide (binaryfunc)vec_div<3, glm::u64>, (binaryfunc)vec_idiv<3, glm::u64>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<3, glm::u64>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<3, glm::u64>, //nb_inplace_matrix_multiply }; static PyTypeObject hu64vec3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "u64vec3Iter", /* tp_name */ sizeof(vecIter<3, glm::u64>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<3, glm::u64>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "u64vec3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec3Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<3, glm::u64>, /* tp_new */ }; static PyGLMTypeObject hu64vec3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.u64vec3", /* tp_name */ sizeof(vec<3, glm::u64>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec3_repr, /* tp_repr */ & hu64vec3NumMethods, /* tp_as_number */ & hu64vec3SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<3, glm::u64>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec3_str, /* tp_str */ (getattrofunc)vec_getattr<3, glm::u64>, /* tp_getattro */ (setattrofunc)vec_setattr<3, glm::u64>, /* tp_setattro */ & hu64vec3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "u64vec3( )\n3 components vector of high qualifier 64 bit unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<3, glm::u64>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<3, glm::u64>, /* tp_iter */ 0, /* tp_iternext */ hu64vec3_methods, /* tp_methods */ hu64vec3_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<3, glm::u64>, /* tp_new */ }, PyGLM_TYPE_VEC, 3, 0, sizeof(uint64), sizeof(glm::vec<3, uint64>), PyGLM_FS_UINT64 }; static PyTypeObject& hu64vec3Type = *((PyTypeObject*)&hu64vec3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint64/vec4.h000066400000000000000000000167701511156275200234060ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<4, glm::u64> vec4_uint64_t; static PyMemberDef hu64vec4_members[] = { { (char*)"x", T_ULONGLONG, offsetof(vec4_uint64_t, super_type.x), 0, (char*)"u64vec4.x" }, { (char*)"y", T_ULONGLONG, offsetof(vec4_uint64_t, super_type.y), 0, (char*)"u64vec4.y" }, { (char*)"z", T_ULONGLONG, offsetof(vec4_uint64_t, super_type.z), 0, (char*)"u64vec4.z" }, { (char*)"w", T_ULONGLONG, offsetof(vec4_uint64_t, super_type.w), 0, (char*)"u64vec4.w" }, { NULL } /* Sentinel */ }; static PyMethodDef hu64vec4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec4_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec4_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<4, glm::u64>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hu64vec4BufferMethods = { (getbufferproc)vec_getbuffer<4, glm::u64>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hu64vec4SeqMethods = { (lenfunc)vec_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec4_sq_item, // sq_item 0, (ssizeobjargproc)vec4_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<4, glm::u64>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hu64vec4NumMethods = { (binaryfunc)vec_add<4, glm::u64>, //nb_add (binaryfunc)vec_sub<4, glm::u64>, //nb_subtract (binaryfunc)vec_mul<4, glm::u64>, //nb_multiply (binaryfunc)vec_mod<4, glm::u64>, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)vec_pos<4, glm::u64>, //nb_positive (unaryfunc)vec_abs<4, glm::u64>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<4, glm::u64>, //nb_invert (binaryfunc)vec_lshift<4, glm::u64>, //nb_lshift (binaryfunc)vec_rshift<4, glm::u64>, //nb_rshift (binaryfunc)vec_and<4, glm::u64>, //nb_and (binaryfunc)vec_xor<4, glm::u64>, //nb_xor (binaryfunc)vec_or<4, glm::u64>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<4, glm::u64>, //nb_inplace_add (binaryfunc)vec_isub<4, glm::u64>, //nb_inplace_subtract (binaryfunc)vec_imul<4, glm::u64>, //nb_inplace_multiply (binaryfunc)vec_imod<4, glm::u64>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<4, glm::u64>, //nb_inplace_lshift (binaryfunc)vec_irshift<4, glm::u64>, //nb_inplace_rshift (binaryfunc)vec_iand<4, glm::u64>, //nb_inplace_and (binaryfunc)vec_ixor<4, glm::u64>, //nb_inplace_xor (binaryfunc)vec_ior<4, glm::u64>, //nb_inplace_or (binaryfunc)vec_div<4, glm::u64>, //nb_floor_divide (binaryfunc)vec_div<4, glm::u64>, (binaryfunc)vec_idiv<4, glm::u64>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<4, glm::u64>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<4, glm::u64>, //nb_inplace_matrix_multiply }; static PyTypeObject hu64vec4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "u64vec4Iter", /* tp_name */ sizeof(vecIter<4, glm::u64>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<4, glm::u64>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "u64vec4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec4Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<4, glm::u64>, /* tp_new */ }; static PyGLMTypeObject hu64vec4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.u64vec4", /* tp_name */ sizeof(vec<4, glm::u64>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec4_repr, /* tp_repr */ & hu64vec4NumMethods, /* tp_as_number */ & hu64vec4SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<4, glm::u64>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec4_str, /* tp_str */ (getattrofunc)vec_getattr<4, glm::u64>, /* tp_getattro */ (setattrofunc)vec_setattr<4, glm::u64>, /* tp_setattro */ & hu64vec4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "u64vec4( )\n4 components vector of high qualifier 64 bit unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<4, glm::u64>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<4, glm::u64>, /* tp_iter */ 0, /* tp_iternext */ hu64vec4_methods, /* tp_methods */ hu64vec4_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<4, glm::u64>, /* tp_new */ }, PyGLM_TYPE_VEC, 4, 0, sizeof(uint64), sizeof(glm::vec<4, uint64>), PyGLM_FS_UINT64 }; static PyTypeObject& hu64vec4Type = *((PyTypeObject*)&hu64vec4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint8/000077500000000000000000000000001511156275200222775ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint8/all.h000066400000000000000000000002171511156275200232200ustar00rootroot00000000000000#ifndef TYPES_VEC_UINT8_ALL_H #define TYPES_VEC_UINT8_ALL_H #include "vec1.h" #include "vec2.h" #include "vec3.h" #include "vec4.h" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint8/vec1.h000066400000000000000000000162241511156275200233130ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<1, glm::u8> vec1_uint8_t; static PyMemberDef hu8vec1_members[] = { { (char*)"x", T_UBYTE, offsetof(vec1_uint8_t, super_type.x), 0, (char*)"u8vec1.x" }, { NULL } /* Sentinel */ }; static PyMethodDef hu8vec1_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec1_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec1_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec1_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<1, glm::u8>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hu8vec1BufferMethods = { (getbufferproc)vec_getbuffer<1, glm::u8>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hu8vec1SeqMethods = { (lenfunc)vec_len<1>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec1_sq_item, // sq_item 0, (ssizeobjargproc)vec1_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<1, glm::u8>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hu8vec1NumMethods = { (binaryfunc)vec_add<1, glm::u8>, //nb_add (binaryfunc)vec_sub<1, glm::u8>, //nb_subtract (binaryfunc)vec_mul<1, glm::u8>, //nb_multiply (binaryfunc)vec_mod<1, glm::u8>, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)vec_pos<1, glm::u8>, //nb_positive (unaryfunc)vec_abs<1, glm::u8>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<1, glm::u8>, //nb_invert (binaryfunc)vec_lshift<1, glm::u8>, //nb_lshift (binaryfunc)vec_rshift<1, glm::u8>, //nb_rshift (binaryfunc)vec_and<1, glm::u8>, //nb_and (binaryfunc)vec_xor<1, glm::u8>, //nb_xor (binaryfunc)vec_or<1, glm::u8>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<1, glm::u8>, //nb_inplace_add (binaryfunc)vec_isub<1, glm::u8>, //nb_inplace_subtract (binaryfunc)vec_imul<1, glm::u8>, //nb_inplace_multiply (binaryfunc)vec_imod<1, glm::u8>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<1, glm::u8>, //nb_inplace_lshift (binaryfunc)vec_irshift<1, glm::u8>, //nb_inplace_rshift (binaryfunc)vec_iand<1, glm::u8>, //nb_inplace_and (binaryfunc)vec_ixor<1, glm::u8>, //nb_inplace_xor (binaryfunc)vec_ior<1, glm::u8>, //nb_inplace_or (binaryfunc)vec_div<1, glm::u8>, //nb_floor_divide (binaryfunc)vec_div<1, glm::u8>, (binaryfunc)vec_idiv<1, glm::u8>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<1, glm::u8>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<1, glm::u8>, //nb_inplace_matrix_multiply }; static PyTypeObject hu8vec1IterType = { PyVarObject_HEAD_INIT(NULL, 0) "u8vec1Iter", /* tp_name */ sizeof(vecIter<1, glm::u8>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<1, glm::u8>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "u8vec1 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec1Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<1, glm::u8>, /* tp_new */ }; static PyGLMTypeObject hu8vec1GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.u8vec1", /* tp_name */ sizeof(vec<1, glm::u8>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec1_repr, /* tp_repr */ & hu8vec1NumMethods, /* tp_as_number */ & hu8vec1SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<1, glm::u8>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec1_str, /* tp_str */ (getattrofunc)vec_getattr<1, glm::u8>, /* tp_getattro */ (setattrofunc)vec_setattr<1, glm::u8>, /* tp_setattro */ & hu8vec1BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "u8vec1( )\n1 component vector of high qualifier 8 bit unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<1, glm::u8>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<1, glm::u8>, /* tp_iter */ 0, /* tp_iternext */ hu8vec1_methods, /* tp_methods */ hu8vec1_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec1_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<1, glm::u8>, /* tp_new */ }, PyGLM_TYPE_VEC, 1, 0, sizeof(uint8), sizeof(glm::vec<1, uint8>), PyGLM_FS_UINT8 }; static PyTypeObject& hu8vec1Type = *((PyTypeObject*)&hu8vec1GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint8/vec2.h000066400000000000000000000163531511156275200233170ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<2, glm::u8> vec2_uint8_t; static PyMemberDef hu8vec2_members[] = { { (char*)"x", T_UBYTE, offsetof(vec2_uint8_t, super_type.x), 0, (char*)"u8vec2.x" }, { (char*)"y", T_UBYTE, offsetof(vec2_uint8_t, super_type.y), 0, (char*)"u8vec2.y" }, { NULL } /* Sentinel */ }; static PyMethodDef hu8vec2_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec2_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec2_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec2_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<2, glm::u8>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hu8vec2BufferMethods = { (getbufferproc)vec_getbuffer<2, glm::u8>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hu8vec2SeqMethods = { (lenfunc)vec_len<2>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec2_sq_item, // sq_item 0, (ssizeobjargproc)vec2_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<2, glm::u8>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hu8vec2NumMethods = { (binaryfunc)vec_add<2, glm::u8>, //nb_add (binaryfunc)vec_sub<2, glm::u8>, //nb_subtract (binaryfunc)vec_mul<2, glm::u8>, //nb_multiply (binaryfunc)vec_mod<2, glm::u8>, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)vec_pos<2, glm::u8>, //nb_positive (unaryfunc)vec_abs<2, glm::u8>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<2, glm::u8>, //nb_invert (binaryfunc)vec_lshift<2, glm::u8>, //nb_lshift (binaryfunc)vec_rshift<2, glm::u8>, //nb_rshift (binaryfunc)vec_and<2, glm::u8>, //nb_and (binaryfunc)vec_xor<2, glm::u8>, //nb_xor (binaryfunc)vec_or<2, glm::u8>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<2, glm::u8>, //nb_inplace_add (binaryfunc)vec_isub<2, glm::u8>, //nb_inplace_subtract (binaryfunc)vec_imul<2, glm::u8>, //nb_inplace_multiply (binaryfunc)vec_imod<2, glm::u8>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<2, glm::u8>, //nb_inplace_lshift (binaryfunc)vec_irshift<2, glm::u8>, //nb_inplace_rshift (binaryfunc)vec_iand<2, glm::u8>, //nb_inplace_and (binaryfunc)vec_ixor<2, glm::u8>, //nb_inplace_xor (binaryfunc)vec_ior<2, glm::u8>, //nb_inplace_or (binaryfunc)vec_div<2, glm::u8>, //nb_floor_divide (binaryfunc)vec_div<2, glm::u8>, (binaryfunc)vec_idiv<2, glm::u8>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<2, glm::u8>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<2, glm::u8>, //nb_inplace_matrix_multiply }; static PyTypeObject hu8vec2IterType = { PyVarObject_HEAD_INIT(NULL, 0) "u8vec2Iter", /* tp_name */ sizeof(vecIter<2, glm::u8>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<2, glm::u8>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "u8vec2 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec2Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<2, glm::u8>, /* tp_new */ }; static PyGLMTypeObject hu8vec2GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.u8vec2", /* tp_name */ sizeof(vec<2, glm::u8>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec2_repr, /* tp_repr */ & hu8vec2NumMethods, /* tp_as_number */ & hu8vec2SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<2, glm::u8>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec2_str, /* tp_str */ (getattrofunc)vec_getattr<2, glm::u8>, /* tp_getattro */ (setattrofunc)vec_setattr<2, glm::u8>, /* tp_setattro */ & hu8vec2BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "u8vec2( )\n2 components vector of high qualifier 8 bit unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<2, glm::u8>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<2, glm::u8>, /* tp_iter */ 0, /* tp_iternext */ hu8vec2_methods, /* tp_methods */ hu8vec2_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec2_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<2, glm::u8>, /* tp_new */ }, PyGLM_TYPE_VEC, 2, 0, sizeof(uint8), sizeof(glm::vec<2, uint8>), PyGLM_FS_UINT8 }; static PyTypeObject& hu8vec2Type = *((PyTypeObject*)&hu8vec2GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint8/vec3.h000066400000000000000000000165011511156275200233130ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<3, glm::u8> vec3_uint8_t; static PyMemberDef hu8vec3_members[] = { { (char*)"x", T_UBYTE, offsetof(vec3_uint8_t, super_type.x), 0, (char*)"u8vec3.x" }, { (char*)"y", T_UBYTE, offsetof(vec3_uint8_t, super_type.y), 0, (char*)"u8vec3.y" }, { (char*)"z", T_UBYTE, offsetof(vec3_uint8_t, super_type.z), 0, (char*)"u8vec3.z" }, { NULL } /* Sentinel */ }; static PyMethodDef hu8vec3_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec3_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec3_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec3_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<3, glm::u8>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hu8vec3BufferMethods = { (getbufferproc)vec_getbuffer<3, glm::u8>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hu8vec3SeqMethods = { (lenfunc)vec_len<3>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec3_sq_item, // sq_item 0, (ssizeobjargproc)vec3_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<3, glm::u8>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hu8vec3NumMethods = { (binaryfunc)vec_add<3, glm::u8>, //nb_add (binaryfunc)vec_sub<3, glm::u8>, //nb_subtract (binaryfunc)vec_mul<3, glm::u8>, //nb_multiply (binaryfunc)vec_mod<3, glm::u8>, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)vec_pos<3, glm::u8>, //nb_positive (unaryfunc)vec_abs<3, glm::u8>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<3, glm::u8>, //nb_invert (binaryfunc)vec_lshift<3, glm::u8>, //nb_lshift (binaryfunc)vec_rshift<3, glm::u8>, //nb_rshift (binaryfunc)vec_and<3, glm::u8>, //nb_and (binaryfunc)vec_xor<3, glm::u8>, //nb_xor (binaryfunc)vec_or<3, glm::u8>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<3, glm::u8>, //nb_inplace_add (binaryfunc)vec_isub<3, glm::u8>, //nb_inplace_subtract (binaryfunc)vec_imul<3, glm::u8>, //nb_inplace_multiply (binaryfunc)vec_imod<3, glm::u8>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<3, glm::u8>, //nb_inplace_lshift (binaryfunc)vec_irshift<3, glm::u8>, //nb_inplace_rshift (binaryfunc)vec_iand<3, glm::u8>, //nb_inplace_and (binaryfunc)vec_ixor<3, glm::u8>, //nb_inplace_xor (binaryfunc)vec_ior<3, glm::u8>, //nb_inplace_or (binaryfunc)vec_div<3, glm::u8>, //nb_floor_divide (binaryfunc)vec_div<3, glm::u8>, (binaryfunc)vec_idiv<3, glm::u8>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<3, glm::u8>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<3, glm::u8>, //nb_inplace_matrix_multiply }; static PyTypeObject hu8vec3IterType = { PyVarObject_HEAD_INIT(NULL, 0) "u8vec3Iter", /* tp_name */ sizeof(vecIter<3, glm::u8>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<3, glm::u8>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "u8vec3 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec3Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<3, glm::u8>, /* tp_new */ }; static PyGLMTypeObject hu8vec3GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.u8vec3", /* tp_name */ sizeof(vec<3, glm::u8>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec3_repr, /* tp_repr */ & hu8vec3NumMethods, /* tp_as_number */ & hu8vec3SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<3, glm::u8>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec3_str, /* tp_str */ (getattrofunc)vec_getattr<3, glm::u8>, /* tp_getattro */ (setattrofunc)vec_setattr<3, glm::u8>, /* tp_setattro */ & hu8vec3BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "u8vec3( )\n3 components vector of high qualifier 8 bit unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<3, glm::u8>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<3, glm::u8>, /* tp_iter */ 0, /* tp_iternext */ hu8vec3_methods, /* tp_methods */ hu8vec3_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec3_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<3, glm::u8>, /* tp_new */ }, PyGLM_TYPE_VEC, 3, 0, sizeof(uint8), sizeof(glm::vec<3, uint8>), PyGLM_FS_UINT8 }; static PyTypeObject& hu8vec3Type = *((PyTypeObject*)&hu8vec3GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/PyGLM/types/vec/uint8/vec4.h000066400000000000000000000166271511156275200233250ustar00rootroot00000000000000#pragma once #include "../forward_declarations.h" typedef vec<4, glm::u8> vec4_uint8_t; static PyMemberDef hu8vec4_members[] = { { (char*)"x", T_UBYTE, offsetof(vec4_uint8_t, super_type.x), 0, (char*)"u8vec4.x" }, { (char*)"y", T_UBYTE, offsetof(vec4_uint8_t, super_type.y), 0, (char*)"u8vec4.y" }, { (char*)"z", T_UBYTE, offsetof(vec4_uint8_t, super_type.z), 0, (char*)"u8vec4.z" }, { (char*)"w", T_UBYTE, offsetof(vec4_uint8_t, super_type.w), 0, (char*)"u8vec4.w" }, { NULL } /* Sentinel */ }; static PyMethodDef hu8vec4_methods[] = { { "__copy__", (PyCFunction)generic_copy, METH_NOARGS, "Create a copy of this instance"}, { "__deepcopy__", (PyCFunction)generic_deepcopy, METH_O, "Create a (deep)copy of this instance"}, { "__getstate__", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Returns a picklable state of this object"}, { "__setstate__", (PyCFunction)vec4_setstate, METH_O, "Restores a state that was previously acquired"}, { "to_list", (PyCFunction)vec4_to_list, METH_NOARGS, "Return the components of this vector as a list"}, { "to_tuple", (PyCFunction)vec4_to_tuple, METH_NOARGS, "Return the components of this vector as a tuple"}, { "to_bytes", (PyCFunction)generic_to_bytes, METH_NOARGS, "Create a bytes string from this object"}, { "from_bytes", (PyCFunction)vec_from_bytes<4, glm::u8>, METH_O | METH_STATIC, "Create a vector from a bytes string"}, { NULL } /* Sentinel */ }; static PyBufferProcs hu8vec4BufferMethods = { (getbufferproc)vec_getbuffer<4, glm::u8>, (releasebufferproc)vec_releasebuffer, }; static PySequenceMethods hu8vec4SeqMethods = { (lenfunc)vec_len<4>, // sq_length 0, // sq_concat 0, // sq_repeat (ssizeargfunc)vec4_sq_item, // sq_item 0, (ssizeobjargproc)vec4_sq_ass_item, // sq_ass_item 0, (objobjproc)vec_contains<4, glm::u8>, // sq_contains 0, // sq_inplace_concat 0, // sq_inplace_repeat }; static PyNumberMethods hu8vec4NumMethods = { (binaryfunc)vec_add<4, glm::u8>, //nb_add (binaryfunc)vec_sub<4, glm::u8>, //nb_subtract (binaryfunc)vec_mul<4, glm::u8>, //nb_multiply (binaryfunc)vec_mod<4, glm::u8>, //nb_remainder 0, //nb_divmod 0, //nb_power 0, //nb_negative (unaryfunc)vec_pos<4, glm::u8>, //nb_positive (unaryfunc)vec_abs<4, glm::u8>, //nb_absolute 0, //nb_bool (unaryfunc)vec_invert<4, glm::u8>, //nb_invert (binaryfunc)vec_lshift<4, glm::u8>, //nb_lshift (binaryfunc)vec_rshift<4, glm::u8>, //nb_rshift (binaryfunc)vec_and<4, glm::u8>, //nb_and (binaryfunc)vec_xor<4, glm::u8>, //nb_xor (binaryfunc)vec_or<4, glm::u8>, //nb_or 0, //nb_int 0, //nb_reserved 0, //nb_int (binaryfunc)vec_iadd<4, glm::u8>, //nb_inplace_add (binaryfunc)vec_isub<4, glm::u8>, //nb_inplace_subtract (binaryfunc)vec_imul<4, glm::u8>, //nb_inplace_multiply (binaryfunc)vec_imod<4, glm::u8>, //nb_inplace_remainder 0, //nb_inplace_power (binaryfunc)vec_ilshift<4, glm::u8>, //nb_inplace_lshift (binaryfunc)vec_irshift<4, glm::u8>, //nb_inplace_rshift (binaryfunc)vec_iand<4, glm::u8>, //nb_inplace_and (binaryfunc)vec_ixor<4, glm::u8>, //nb_inplace_xor (binaryfunc)vec_ior<4, glm::u8>, //nb_inplace_or (binaryfunc)vec_div<4, glm::u8>, //nb_floor_divide (binaryfunc)vec_div<4, glm::u8>, (binaryfunc)vec_idiv<4, glm::u8>, //nb_inplace_floor_divide (binaryfunc)vec_idiv<4, glm::u8>, //nb_inplace_true_divide 0, //nb_index (binaryfunc)vec_matmul, //nb_matrix_multiply (binaryfunc)vec_imatmul<4, glm::u8>, //nb_inplace_matrix_multiply }; static PyTypeObject hu8vec4IterType = { PyVarObject_HEAD_INIT(NULL, 0) "u8vec4Iter", /* tp_name */ sizeof(vecIter<4, glm::u8>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vecIter_dealloc<4, glm::u8>, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ "u8vec4 iterator", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)generic_id, /* tp_iter */ (iternextfunc)vec4Iter_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ 0, /* tp_alloc */ (newfunc)vecIter_new<4, glm::u8>, /* tp_new */ }; static PyGLMTypeObject hu8vec4GLMType = { { PyVarObject_HEAD_INIT(NULL, 0) "glm.u8vec4", /* tp_name */ sizeof(vec<4, glm::u8>), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)vec_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ (reprfunc)vec4_repr, /* tp_repr */ & hu8vec4NumMethods, /* tp_as_number */ & hu8vec4SeqMethods, /* tp_as_sequence */ 0, /* tp_as_mapping */ (hashfunc)vec_hash<4, glm::u8>, /* tp_hash */ 0, /* tp_call */ (reprfunc)vec4_str, /* tp_str */ (getattrofunc)vec_getattr<4, glm::u8>, /* tp_getattro */ (setattrofunc)vec_setattr<4, glm::u8>, /* tp_setattro */ & hu8vec4BufferMethods, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ "u8vec4( )\n4 components vector of high qualifier 8 bit unsigned integer numbers.", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ (richcmpfunc)vec_richcompare<4, glm::u8>, /* tp_richcompare */ 0, /* tp_weaklistoffset */ (getiterfunc)vec_geniter<4, glm::u8>, /* tp_iter */ 0, /* tp_iternext */ hu8vec4_methods, /* tp_methods */ hu8vec4_members, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ (initproc)vec4_init, /* tp_init */ 0, /* tp_alloc */ (newfunc)vec_new<4, glm::u8>, /* tp_new */ }, PyGLM_TYPE_VEC, 4, 0, sizeof(uint8), sizeof(glm::vec<4, uint8>), PyGLM_FS_UINT8 }; static PyTypeObject& hu8vec4Type = *((PyTypeObject*)&hu8vec4GLMType);Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/build_options.h000066400000000000000000000024631511156275200214070ustar00rootroot00000000000000#pragma once // Use this option to build PyGLM's entire package with all optional features #define PyGLM_DEFAULT 0 // This build option will tell PyGLM to not build any methods that do not belong to PyGLM types // (like glm.translate, glm.sizeof, glm.value_ptr or other functions) #define PyGLM_NO_FUNCTIONS 1 // This build option will disable PyGLM's iterable and buffer protocol compatibility features. // If you do not construct PyGLM types from e.g. nested lists or numpy arrays, you may // safely enable this option. #define PyGLM_NO_ITER_TYPECHECKING 2 // Alternate name: 'PyGLM_FAST' #define PyGLM_FAST PyGLM_NO_ITER_TYPECHECKING // This combines 'PyGLM_NO_FUNCTIONS' and 'PyGLM_NO_ITER_TYPECHECKING' #define PyGLM_MINIMAL (PyGLM_NO_FUNCTIONS | PyGLM_NO_ITER_TYPECHECKING) // ################################################ // # This is where you can set the build option # // ################################################ #define PyGLM_BUILD PyGLM_DEFAULT #if (PyGLM_BUILD == PyGLM_DEFAULT) #define PyGLM_BUILD_STRING "DEFAULT" #elif (PyGLM_BUILD == PyGLM_FAST) #define PyGLM_BUILD_STRING "FAST" #elif (PyGLM_BUILD == PyGLM_NO_FUNCTIONS) #define PyGLM_BUILD_STRING "NO_FUNCTIONS" #elif (PyGLM_BUILD == PyGLM_MINIMAL) #define PyGLM_BUILD_STRING "MINIMAL" #else #define PyGLM_BUILD_STRING "CUSTOM" #endifZuzu-Typ-PyGLM-e113a8a/PyGLM_lib/glm/000077500000000000000000000000001511156275200171365ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/license.h000066400000000000000000000060121511156275200201510ustar00rootroot00000000000000#define PyGLM_LICENSE "PyGLM license information:\n"\ "\n"\ "================================================================================\n"\ "OpenGL Mathematics (GLM)\n"\ "--------------------------------------------------------------------------------\n"\ "This is a redistribution of OpenGL Mathematics (GLM), which is licensed under\n"\ "\n"\ "================================================================================\n"\ "The MIT License\n"\ "--------------------------------------------------------------------------------\n"\ "Copyright (c) 2005 G-Truc Creation\n"\ "\n"\ "Permission is hereby granted, PyMem_Free of charge, to any person obtaining a copy\n"\ "of this software and associated documentation files (the \"Software\"), to deal\n"\ "in the Software without restriction, including without limitation the rights\n"\ "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n"\ "copies of the Software, and to permit persons to whom the Software is\n"\ "furnished to do so, subject to the following conditions:\n"\ "\n"\ "The above copyright notice and this permission notice shall be included in\n"\ "all copies or substantial portions of the Software.\n"\ "\n"\ "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n"\ "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n"\ "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n"\ "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n"\ "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n"\ "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n"\ "THE SOFTWARE.\n"\ "\n"\ "================================================================================\n"\ "PyGLM\n"\ "--------------------------------------------------------------------------------\n"\ "PyGLM is licensed under the zlib/libpng License\n"\ "\n"\ "================================================================================\n"\ "zlib/libpng license\n"\ "--------------------------------------------------------------------------------\n"\ "Copyright (c) 2017 Zuzu_Typ\n"\ "\n"\ "This software is provided 'as-is', without any express or implied\n"\ "warranty. In no event will the authors be held liable for any damages\n"\ "arising from the use of this software.\n"\ "\n"\ "Permission is granted to anyone to use this software for any purpose,\n"\ "including commercial applications, and to alter it and redistribute it\n"\ "freely, subject to the following restrictions:\n"\ "\n"\ "1. The origin of this software must not be misrepresented; you must not\n"\ " claim that you wrote the original software. If you use this software\n"\ " in a product, an acknowledgment in the product documentation would be\n"\ " appreciated but is not required.\n"\ "2. Altered source versions must be plainly marked as such, and must not be\n"\ " misrepresented as being the original software.\n"\ "3. This notice may not be removed or altered from any source distribution." Zuzu-Typ-PyGLM-e113a8a/PyGLM_lib/version.h000066400000000000000000000002271511156275200202160ustar00rootroot00000000000000#define _TO_STRING(x) #x #define TO_STRING(x) _TO_STRING(x) #ifdef PyGLM_DEBUG #define VERSION 2.dev1 #endif #define PyGLM_VERSION TO_STRING(VERSION)Zuzu-Typ-PyGLM-e113a8a/README.md000066400000000000000000000300301511156275200160540ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # PyGLM ## OpenGL Mathematics \(GLM\) library for Python **GLSL \+ Optional features \+ Python = PyGLM** **A mathematics library for graphics programming\.** **PyGLM** is a Python extension written in **C\+\+**\. By using [GLM by G\-Truc](https://glm.g-truc.net) under the hood, it manages to bring **glm's features** to Python\.   Some features are unsupported \(such as most unstable extensions\)\. If you encounter any issues or want to request a feature, please create an issue on the [issue tracker](https://github.com/Zuzu-Typ/PyGLM/issues)\. **For a complete reference of the types and functions, please take a look at the [wiki](https://github.com/Zuzu-Typ/PyGLM/wiki)**\. ## Tiny Documentation ### Why PyGLM? Besides the obvious \- being mostly compatible with **GLM** \- PyGLM offers a variety of features for **vector** and **matrix manipulation**\. It has a lot of possible use cases, including **3D\-Graphics** \(OpenGL, DirectX, \.\.\.\), **Physics** and more\. At the same time, it has **great performance**, usually being **a lot faster than numpy\!** \(see [end of page](#speed-comparison-to-numpy)\) \(*depending on the individual function*\) ### Installation **PyGLM** supports **Windows**, **Linux**, **MacOS** and other operating systems\. It can be installed from the [PyPI](https://pypi.python.org/pypi/PyGLM) using [pip](https://pip.pypa.io/en/stable/): ``` batch pip install pyglm ``` And finally imported and used: ``` python from pyglm import glm ``` *Changed in version 2\.8* When using PyGLM version *2\.7\.3* or earlier, use ``` python try: from pyglm import glm except ImportError: import glm ``` **Attention: Using ``` import glm ``` will be deprecated in PyGLM 3\.0\.** ### Using PyGLM PyGLM's syntax is very similar to the original GLM's syntax\. The module ``` glm ``` contains all of PyGLM's types and functions\. [Typing stubs](https://github.com/esoma/pyglm-typing) by [@esoma](https://github.com/esoma) are available in the ``` glm_typing ``` module\. For more information, take a look at the [wiki](https://github.com/Zuzu-Typ/PyGLM/wiki)\. #### License requirements Please make sure to **include COPYING** in your project when you use PyGLM\! \(this is especially relevant for **binary distributions**, e\.g\. \*\.exe\) You can do so by copying the ``` COPYING ``` file \(or it's contents\) to your project\. #### Differences to glm Instead of using double colons \(**::**\) for namespaces, periods \(**\.**\) are used, so ``` glm::vec2 ``` becomes ``` glm.vec2 ```\. PyGLM supports the [buffer protocol](https://docs.python.org/3/c-api/buffer.html), meaning its compitible to other objects that support the buffer protocol, such as ``` bytes ``` or ``` numpy.array ``` \(for example you can convert a glm matrix to a numpy array and vice versa\)\. PyGLM is also capable of interpreting iterables \(such as tuples\) as vectors, so e\.g\. the following equasion is possible: ``` python result = glm.vec2(1) * (2, 3) ``` *Note: This feature might not or only partially be available in PyGLM versions prior to 2\.0\.0* PyGLM doesn't support precision qualifiers\. All types use the default precision \(``` packed_highp ```\)\. If a glm function normally accepts ``` float ``` and ``` double ``` arguments, the higher precision \(``` double ```\) is used\. There is no way to set preprocessor definitions \(macros\)\. If \- for example \- you need to use the left handed coordinate system, you have to use **\*LH**, so ``` glm.perspective ``` becomes ``` glm.perspectiveLH ```\. All types are initialized by default to avoid memory access violations\. \(i\.e\. the macro ``` GLM_FORCE_CTOR_INIT ``` is defined\) In case you need the size of a PyGLM datatype, you can use ``` python glm.sizeof() ``` The function ``` glm.identity ``` requires a matrix type as it's argument\. The function ``` glm.frexp(x, exp) ``` returns a tuple ``` (m, e) ```, if the input arguments are numerical\. This function may issue a ``` UserWarning ```\. You can silence this warning using ``` glm.silence(1) ```\. The function ``` glm.value_ptr(x) ``` returns a ctypes pointer of the respective type\. I\.e\. if the datatype of ``` x ``` is ``` float ```, then a ``` c_float ``` pointer will be returned\. Likewise the reverse\-functions \(such as ``` make_vec2(ptr) ```\) will take a ctypes pointer as their argument and return \(in this case\) a 2 component vector of the pointers underlying type\. ``` glm.silence(ID) ``` can be used to silence specific warnings\. Supplying an id of 0 will silence all warnings\. ### FAQ #### How to pass the matrices generated by PyGLM to OpenGL functions? You will find an overview on the \[[Passing data to external libs](https://github.com/Zuzu-Typ/PyGLM/wiki/Passing-data-to-external-libs/)\] page\. #### Types and functions are not available after installing from the PyPI using ``` pip install glm ``` Most likely you've installed [glm](https://pypi.org/project/glm/), a JSON parser and not [PyGLM](https://pypi.org/project/PyGLM/) \(or a very early version of PyGLM\)\. The correct install command is: ``` batch pip install pyglm ``` #### Why is *<experimental extension name here>* not supported? I prefer not to add too many experimental extensions to PyGLM, especially as they might change or be removed in the future and it is simply too much effort for me to keep up with all that\.   If you **need a specific experimental extension**, feel free to **submit a feature request** on the [issue tracker](https://github.com/Zuzu-Typ/PyGLM/issues)\.   I try adding them on a one\-by\-one basis\. ### Short example ``` Python from pyglm import glm # Create a 3D vector v1 = glm.vec3(1, 2, 3) v2 = glm.vec3(4, 5, 6) # Vector addition v3 = v1 + v2 print(f"Vector addition: {v3}") # Vector addition: vec3( 5, 7, 9 ) # Vector cross product # -> The resulting vector is perpendicular to v1 and v2. cross_product = glm.cross(v1, v2) print(f"Cross product: {cross_product}") # Cross product: vec3( -3, 6, -3 ) # Vector dot product # -> If the dot product is equal to 0, the two inputs are perpendicular. dot_product = glm.dot(v1, cross_product) print(f"Dot product: {dot_product}") # Dot product: 0.0 # Create a 4x4 identity matrix matrix = glm.mat4() print(f"Identity matrix:\n{matrix}") # Identity matrix: # [ 1 ][ 0 ][ 0 ][ 0 ] # [ 0 ][ 1 ][ 0 ][ 0 ] # [ 0 ][ 0 ][ 1 ][ 0 ] # [ 0 ][ 0 ][ 0 ][ 1 ] # Rotate the matrix around the Z-axis angle_in_radians = glm.radians(45) # Convert 45 degrees to radians rotation_matrix = glm.rotate(matrix, angle_in_radians, glm.vec3(0, 0, 1)) print(f"Rotation matrix (45 degrees around Z-axis):\n{rotation_matrix}") # Rotation matrix (45 degrees around Z-axis): # [ 0.707107 ][ -0.707107 ][ 0 ][ 0 ] # [ 0.707107 ][ 0.707107 ][ 0 ][ 0 ] # [ 0 ][ 0 ][ 1 ][ 0 ] # [ 0 ][ 0 ][ 0 ][ 1 ] # Apply the rotation to a vector # -> We use a vec4 with the w-component (given vec4(x, y, z, w)) set to 1, # to put v1 into homogenous coordinates. rotated_vector = rotation_matrix * glm.vec4(v1, 1) print(f"Rotated vector: {rotated_vector}") # Rotated vector: vec4( -0.707107, 2.12132, 3, 1 ) ``` ### PyGLM in action Want to see what PyGLM can do? Take a look at the [examples](https://github.com/Zuzu-Typ/LearnOpenGL-Python) from the popular LearnOpenGL tutorials by Joey De Vries running in Python using PyGLM\. ![LearnOpenGL](https://raw.githubusercontent.com/Zuzu-Typ/PyGLM/master/LearnOpenGL.png) ### Speed comparison to numpy The following is the output generated by [test/PyGLM vs Numpy\.py](https://github.com/Zuzu-Typ/PyGLM/blob/master/test/PyGLM_vs_NumPy.py) ``` Evaluating performance of PyGLM compared to NumPy. Running on platform 'win32'. Python version: 3.13.0 (tags/v3.13.0:60403a5, Oct 7 2024, 09:38:07) [MSC v.1941 64 bit (AMD64)] Comparing the following module versions: PyGLM (DEFAULT) version 2.7.2 vs NumPy version 2.1.2 ________________________________________________________________________________ The following table shows information about a task to be achieved and the time it took when using the given module. Lower time is better. Each task is repeated ten times per module, only showing the best (i.e. lowest) value. +----------------------------------------+------------+------------+-----------+ | Description | PyGLM time | NumPy time | ratio | +----------------------------------------+------------+------------+-----------+ | 3 component vector creation | | | | | (100,000 times) | 8ms | 30ms | 3.78x | +----------------------------------------+------------+------------+-----------+ | 3 component vector creation with | | | | | custom components | | | | | (50,000 times) | 8ms | 33ms | 4.05x | +----------------------------------------+------------+------------+-----------+ | dot product | | | | | (50,000 times) | 3ms | 46ms | 13.53x | +----------------------------------------+------------+------------+-----------+ | cross product | | | | | (25,000 times) | 2ms | 523ms | 288.77x | +----------------------------------------+------------+------------+-----------+ | L2-Norm of 3 component vector | | | | | (100,000 times) | 5ms | 249ms | 49.05x | +----------------------------------------+------------+------------+-----------+ | 4x4 matrix creation | | | | | (50,000 times) | 5ms | 15ms | 3.03x | +----------------------------------------+------------+------------+-----------+ | 4x4 identity matrix creation | | | | | (100,000 times) | 6ms | 222ms | 36.61x | +----------------------------------------+------------+------------+-----------+ | 4x4 matrix transposition | | | | | (50,000 times) | 3ms | 23ms | 6.73x | +----------------------------------------+------------+------------+-----------+ | 4x4 multiplicative inverse | | | | | (50,000 times) | 4ms | 336ms | 90.30x | +----------------------------------------+------------+------------+-----------+ | 3 component vector addition | | | | | (100,000 times) | 5ms | 52ms | 10.11x | +----------------------------------------+------------+------------+-----------+ | 4x4 matrix multiplication | | | | | (100,000 times) | 8ms | 55ms | 6.85x | +----------------------------------------+------------+------------+-----------+ | 4x4 matrix x vector multiplication | | | | | (100,000 times) | 6ms | 152ms | 23.39x | +----------------------------------------+------------+------------+-----------+ | TOTAL | 0.06s | 1.74s | 26.97x | +----------------------------------------+------------+------------+-----------+ ```Zuzu-Typ-PyGLM-e113a8a/README.sb000066400000000000000000000302671511156275200160740ustar00rootroot00000000000000\h1 \PyGLM\ h1\ \h2 \OpenGL Mathematics (GLM) library for Python\ h2\ \b \GLSL + Optional features + Python = PyGLM\ b\ \b \A mathematics library for graphics programming.\ b\ \b \PyGLM\ b\ is a Python extension written in \b \C++\ b\. By using \url https://glm.g-truc.net \GLM by G-Truc\ url\ under the hood, it manages to bring \b \glm's features\ b\ to Python. Some features are unsupported (such as most unstable extensions). If you encounter any issues or want to request a feature, please create an issue on the \url https://github.com/Zuzu-Typ/PyGLM/issues \issue tracker\ url\. \b\For a complete reference of the types and functions, please take a look at the \url https://github.com/Zuzu-Typ/PyGLM/wiki \wiki\ url\\b\. \h2 \Tiny Documentation\ h2\ \h3 \Why PyGLM?\ h3\ Besides the obvious - being mostly compatible with \b \GLM\ b\ - PyGLM offers a variety of features for \b \vector\ b\ and \b \matrix manipulation\ b\. It has a lot of possible use cases, including \b \3D-Graphics\ b\ (OpenGL, DirectX, ...), \b \Physics\ b\ and more. At the same time, it has \b \great performance\ b\, usually being \b \a lot faster than numpy!\ b\ (see \url #speed-comparison-to-numpy \end of page\ url\) (\i \depending on the individual function\ i\) \h3 \Installation\ h3\ \b \PyGLM\ b\ supports \b \Windows\ b\, \b \Linux\ b\, \b \MacOS\ b\ and other operating systems. It can be installed from the \url https://pypi.python.org/pypi/PyGLM \PyPI\ url\ using \url https://pip.pypa.io/en/stable/ \pip\ url\: \code batch\ pip install pyglm \ code\ And finally imported and used: \code python \ from pyglm import glm \ code\ \i\Changed in version 2.8\i\ When using PyGLM version \i \2.7.3\ i\ or earlier, use \code python \ try: from pyglm import glm except ImportError: import glm \ code\ \b \Attention: Using \code \import glm\ code\ will be deprecated in PyGLM 3.0.\ b\ \h3 \Using PyGLM\ h3\ PyGLM's syntax is very similar to the original GLM's syntax. The module \code \glm\ code\ contains all of PyGLM's types and functions. \url https://github.com/esoma/pyglm-typing \Typing stubs\ url\ by \url https://github.com/esoma \@esoma\ url\ are available in the \code \glm_typing\ code\ module. For more information, take a look at the \url https://github.com/Zuzu-Typ/PyGLM/wiki \wiki\ url\. \h4 \License requirements\ h4\ Please make sure to \b \include COPYING\ b\ in your project when you use PyGLM! (this is especially relevant for \b \binary distributions\ b\, e.g. *.exe) You can do so by copying the \code \COPYING\ code\ file (or it's contents) to your project. \h4 \Differences to glm\ h4\ Instead of using double colons (\b \::\ b\) for namespaces, periods (\b \.\ b\) are used, so \code \glm::vec2\ code\ becomes \code \glm.vec2\ code\. PyGLM supports the \url https://docs.python.org/3/c-api/buffer.html \buffer protocol\ url\, meaning its compitible to other objects that support the buffer protocol, such as \code \bytes\ code\ or \code \numpy.array\ code\ (for example you can convert a glm matrix to a numpy array and vice versa). PyGLM is also capable of interpreting iterables (such as tuples) as vectors, so e.g. the following equasion is possible: \code python \ result = glm.vec2(1) * (2, 3) \ code\ \i\Note: This feature might not or only partially be available in PyGLM versions prior to 2.0.0\i\ PyGLM doesn't support precision qualifiers. All types use the default precision (\code \packed_highp\ code\). If a glm function normally accepts \code \float\ code\ and \code \double\ code\ arguments, the higher precision (\code \double\ code\) is used. There is no way to set preprocessor definitions (macros). If - for example - you need to use the left handed coordinate system, you have to use \b \*LH\ b\, so \code \glm.perspective\ code\ becomes \code \glm.perspectiveLH\ code\. All types are initialized by default to avoid memory access violations. (i.e. the macro \code \GLM_FORCE_CTOR_INIT\ code\ is defined) In case you need the size of a PyGLM datatype, you can use \code python \ glm.sizeof() \ code\ The function \code \glm.identity\ code\ requires a matrix type as it's argument. The function \code \glm.frexp(x, exp)\ code\ returns a tuple \code \(m, e)\ code\, if the input arguments are numerical. This function may issue a \code \UserWarning\ code\. You can silence this warning using \code \glm.silence(1)\ code\. The function \code \glm.value_ptr(x)\ code\ returns a ctypes pointer of the respective type. I.e. if the datatype of \code \x\ code\ is \code \float\ code\, then a \code \c_float\ code\ pointer will be returned. Likewise the reverse-functions (such as \code \make_vec2(ptr)\ code\) will take a ctypes pointer as their argument and return (in this case) a 2 component vector of the pointers underlying type. \code \glm.silence(ID)\ code\ can be used to silence specific warnings. Supplying an id of 0 will silence all warnings. \h3\FAQ\h3\ \h4\How to pass the matrices generated by PyGLM to OpenGL functions?\h4\ You will find an overview on the [\url https://github.com/Zuzu-Typ/PyGLM/wiki/Passing-data-to-external-libs/ \Passing data to external libs\ url\] page. \h4\Types and functions are not available after installing from the PyPI using \code \pip install glm\ code\\h4\ Most likely you've installed \url https://pypi.org/project/glm/ \glm\ url\, a JSON parser and not \url https://pypi.org/project/PyGLM/ \PyGLM\ url\ (or a very early version of PyGLM). The correct install command is: \code batch \ pip install pyglm \ code\ \h4\Why is \i\\i\ not supported?\h4\ I prefer not to add too many experimental extensions to PyGLM, especially as they might change or be removed in the future and it is simply too much effort for me to keep up with all that. If you \b\need a specific experimental extension\b\, feel free to \b\submit a feature request\b\ on the \url https://github.com/Zuzu-Typ/PyGLM/issues \issue tracker\ url\. I try adding them on a one-by-one basis. \h3 \Short example\ h3\ \code Python \ from pyglm import glm # Create a 3D vector v1 = glm.vec3(1, 2, 3) v2 = glm.vec3(4, 5, 6) # Vector addition v3 = v1 + v2 print(f"Vector addition: {v3}") # Vector addition: vec3( 5, 7, 9 ) # Vector cross product # -> The resulting vector is perpendicular to v1 and v2. cross_product = glm.cross(v1, v2) print(f"Cross product: {cross_product}") # Cross product: vec3( -3, 6, -3 ) # Vector dot product # -> If the dot product is equal to 0, the two inputs are perpendicular. dot_product = glm.dot(v1, cross_product) print(f"Dot product: {dot_product}") # Dot product: 0.0 # Create a 4x4 identity matrix matrix = glm.mat4() print(f"Identity matrix:\\n{matrix}") # Identity matrix: # [ 1 ][ 0 ][ 0 ][ 0 ] # [ 0 ][ 1 ][ 0 ][ 0 ] # [ 0 ][ 0 ][ 1 ][ 0 ] # [ 0 ][ 0 ][ 0 ][ 1 ] # Rotate the matrix around the Z-axis angle_in_radians = glm.radians(45) # Convert 45 degrees to radians rotation_matrix = glm.rotate(matrix, angle_in_radians, glm.vec3(0, 0, 1)) print(f"Rotation matrix (45 degrees around Z-axis):\\n{rotation_matrix}") # Rotation matrix (45 degrees around Z-axis): # [ 0.707107 ][ -0.707107 ][ 0 ][ 0 ] # [ 0.707107 ][ 0.707107 ][ 0 ][ 0 ] # [ 0 ][ 0 ][ 1 ][ 0 ] # [ 0 ][ 0 ][ 0 ][ 1 ] # Apply the rotation to a vector # -> We use a vec4 with the w-component (given vec4(x, y, z, w)) set to 1, # to put v1 into homogenous coordinates. rotated_vector = rotation_matrix * glm.vec4(v1, 1) print(f"Rotated vector: {rotated_vector}") # Rotated vector: vec4( -0.707107, 2.12132, 3, 1 ) \ code\ \h3\PyGLM in action\h3\ Want to see what PyGLM can do? Take a look at the \url https://github.com/Zuzu-Typ/LearnOpenGL-Python\examples\ url\ from the popular LearnOpenGL tutorials by Joey De Vries running in Python using PyGLM. \raw\![LearnOpenGL](https://raw.githubusercontent.com/Zuzu-Typ/PyGLM/master/LearnOpenGL.png)\raw\ \h3 \Speed comparison to numpy\ h3\ The following is the output generated by \url https://github.com/Zuzu-Typ/PyGLM/blob/master/test/PyGLM_vs_NumPy.py \test/PyGLM vs Numpy.py\ url\ \code \ Evaluating performance of PyGLM compared to NumPy. Running on platform 'win32'. Python version: 3.13.0 (tags/v3.13.0:60403a5, Oct 7 2024, 09:38:07) [MSC v.1941 64 bit (AMD64)] Comparing the following module versions: PyGLM (DEFAULT) version 2.7.2 vs NumPy version 2.1.2 ________________________________________________________________________________ The following table shows information about a task to be achieved and the time it took when using the given module. Lower time is better. Each task is repeated ten times per module, only showing the best (i.e. lowest) value. +----------------------------------------+------------+------------+-----------+ | Description | PyGLM time | NumPy time | ratio | +----------------------------------------+------------+------------+-----------+ | 3 component vector creation | | | | | (100,000 times) | 8ms | 30ms | 3.78x | +----------------------------------------+------------+------------+-----------+ | 3 component vector creation with | | | | | custom components | | | | | (50,000 times) | 8ms | 33ms | 4.05x | +----------------------------------------+------------+------------+-----------+ | dot product | | | | | (50,000 times) | 3ms | 46ms | 13.53x | +----------------------------------------+------------+------------+-----------+ | cross product | | | | | (25,000 times) | 2ms | 523ms | 288.77x | +----------------------------------------+------------+------------+-----------+ | L2-Norm of 3 component vector | | | | | (100,000 times) | 5ms | 249ms | 49.05x | +----------------------------------------+------------+------------+-----------+ | 4x4 matrix creation | | | | | (50,000 times) | 5ms | 15ms | 3.03x | +----------------------------------------+------------+------------+-----------+ | 4x4 identity matrix creation | | | | | (100,000 times) | 6ms | 222ms | 36.61x | +----------------------------------------+------------+------------+-----------+ | 4x4 matrix transposition | | | | | (50,000 times) | 3ms | 23ms | 6.73x | +----------------------------------------+------------+------------+-----------+ | 4x4 multiplicative inverse | | | | | (50,000 times) | 4ms | 336ms | 90.30x | +----------------------------------------+------------+------------+-----------+ | 3 component vector addition | | | | | (100,000 times) | 5ms | 52ms | 10.11x | +----------------------------------------+------------+------------+-----------+ | 4x4 matrix multiplication | | | | | (100,000 times) | 8ms | 55ms | 6.85x | +----------------------------------------+------------+------------+-----------+ | 4x4 matrix x vector multiplication | | | | | (100,000 times) | 6ms | 152ms | 23.39x | +----------------------------------------+------------+------------+-----------+ | TOTAL | 0.06s | 1.74s | 26.97x | +----------------------------------------+------------+------------+-----------+ \ code\Zuzu-Typ-PyGLM-e113a8a/Update README.bat000066400000000000000000000000601511156275200174250ustar00rootroot00000000000000python "vs-project/SlashBack.py" README.sb PAUSEZuzu-Typ-PyGLM-e113a8a/VERSION000066400000000000000000000000061511156275200156450ustar00rootroot000000000000002.8.3 Zuzu-Typ-PyGLM-e113a8a/glm/000077500000000000000000000000001511156275200153605ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/glm/__init__.py000066400000000000000000000004311511156275200174670ustar00rootroot00000000000000from pyglm.glm import * from pyglm import glm_typing, typing, __version__ import warnings as __warnings __warnings.warn("Importing PyGLM via \"import glm\" is going to be deprecated in the future.\nUse \"from pyglm import glm\" instead", PendingDeprecationWarning, stacklevel=2) Zuzu-Typ-PyGLM-e113a8a/glm/py.typed000066400000000000000000000000001511156275200170450ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/pyglm-stubs/000077500000000000000000000000001511156275200170675ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/pyglm-stubs/LICENSE000066400000000000000000000020301511156275200200670ustar00rootroot00000000000000Copyright 2021 Erik Soma Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.Zuzu-Typ-PyGLM-e113a8a/pyglm-stubs/__init__.py000066400000000000000000000000001511156275200211660ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/pyglm-stubs/glm/000077500000000000000000000000001511156275200176465ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/pyglm-stubs/glm/__init__.py000066400000000000000000000000001511156275200217450ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/pyglm-stubs/glm/__init__.pyi000066400000000000000000026110721511156275200221410ustar00rootroot00000000000000 # generated by tools/generate.py # https://github.com/esoma/pyglm-typing/ import ctypes from typing import (Any, Callable, Generator, Generic, Iterable, List, Literal, Optional, SupportsInt, Tuple, Type, TypeVar, Union, overload) from PyGLM import glm_typing _T = TypeVar('_T') _VT = TypeVar('_VT', bvec1, bvec2, bvec3, bvec4, dmvec2, dmvec3, dmvec4, dvec1, dvec2, dvec3, dvec4, i16vec1, i16vec2, i16vec3, i16vec4, i64vec1, i64vec2, i64vec3, i64vec4, i8vec1, i8vec2, i8vec3, i8vec4, imvec2, imvec3, imvec4, ivec1, ivec2, ivec3, ivec4, mvec2, mvec3, mvec4, u16vec1, u16vec2, u16vec3, u16vec4, u64vec1, u64vec2, u64vec3, u64vec4, u8vec1, u8vec2, u8vec3, u8vec4, umvec2, umvec3, umvec4, uvec1, uvec2, uvec3, uvec4, vec1, vec2, vec3, vec4) _NF32VT = TypeVar('_NF32VT', bvec1, bvec2, bvec3, bvec4, dmvec2, dmvec3, dmvec4, dvec1, dvec2, dvec3, dvec4, i16vec1, i16vec2, i16vec3, i16vec4, i64vec1, i64vec2, i64vec3, i64vec4, i8vec1, i8vec2, i8vec3, i8vec4, imvec2, imvec3, imvec4, ivec1, ivec2, ivec3, ivec4, u16vec1, u16vec2, u16vec3, u16vec4, u64vec1, u64vec2, u64vec3, u64vec4, u8vec1, u8vec2, u8vec3, u8vec4, umvec2, umvec3, umvec4, uvec1, uvec2, uvec3, uvec4) _FDVT = TypeVar('_FDVT', dmvec2, dmvec3, dmvec4, dvec1, dvec2, dvec3, dvec4, mvec2, mvec3, mvec4, vec1, vec2, vec3, vec4) _NF32DFVT = TypeVar('_NF32DFVT', dmvec2, dmvec3, dmvec4, dvec1, dvec2, dvec3, dvec4) _NF32DFV1T = TypeVar('_NF32DFV1T', bound=dvec1) _NF32DFV2T = TypeVar('_NF32DFV2T', dmvec2, dvec2) _NF32DFV3T = TypeVar('_NF32DFV3T', dmvec3, dvec3) _NF32DFV4T = TypeVar('_NF32DFV4T', dmvec4, dvec4) _NF32V1T = TypeVar('_NF32V1T', bvec1, dvec1, i16vec1, i64vec1, i8vec1, ivec1, u16vec1, u64vec1, u8vec1, uvec1) _NF32V2T = TypeVar('_NF32V2T', bvec2, dmvec2, dvec2, i16vec2, i64vec2, i8vec2, imvec2, ivec2, u16vec2, u64vec2, u8vec2, umvec2, uvec2) _NF32V3T = TypeVar('_NF32V3T', bvec3, dmvec3, dvec3, i16vec3, i64vec3, i8vec3, imvec3, ivec3, u16vec3, u64vec3, u8vec3, umvec3, uvec3) _NF32V4T = TypeVar('_NF32V4T', bvec4, dmvec4, dvec4, i16vec4, i64vec4, i8vec4, imvec4, ivec4, u16vec4, u64vec4, u8vec4, umvec4, uvec4) _IVT = TypeVar('_IVT', i16vec1, i16vec2, i16vec3, i16vec4, i64vec1, i64vec2, i64vec3, i64vec4, i8vec1, i8vec2, i8vec3, i8vec4, imvec2, imvec3, imvec4, ivec1, ivec2, ivec3, ivec4) _UVT = TypeVar('_UVT', u16vec1, u16vec2, u16vec3, u16vec4, u64vec1, u64vec2, u64vec3, u64vec4, u8vec1, u8vec2, u8vec3, u8vec4, umvec2, umvec3, umvec4, uvec1, uvec2, uvec3, uvec4) _NI32IVT = TypeVar('_NI32IVT', i16vec1, i16vec2, i16vec3, i16vec4, i64vec1, i64vec2, i64vec3, i64vec4, i8vec1, i8vec2, i8vec3, i8vec4) _NI32IUVT = TypeVar('_NI32IUVT', i16vec1, i16vec2, i16vec3, i16vec4, i64vec1, i64vec2, i64vec3, i64vec4, i8vec1, i8vec2, i8vec3, i8vec4, u16vec1, u16vec2, u16vec3, u16vec4, u64vec1, u64vec2, u64vec3, u64vec4, u8vec1, u8vec2, u8vec3, u8vec4, umvec2, umvec3, umvec4, uvec1, uvec2, uvec3, uvec4) _NI32IUV1T = TypeVar('_NI32IUV1T', i16vec1, i64vec1, i8vec1, u16vec1, u64vec1, u8vec1, uvec1) _NI32IUV2T = TypeVar('_NI32IUV2T', i16vec2, i64vec2, i8vec2, u16vec2, u64vec2, u8vec2, umvec2, uvec2) _NI32IUV3T = TypeVar('_NI32IUV3T', i16vec3, i64vec3, i8vec3, u16vec3, u64vec3, u8vec3, umvec3, uvec3) _NI32IUV4T = TypeVar('_NI32IUV4T', i16vec4, i64vec4, i8vec4, u16vec4, u64vec4, u8vec4, umvec4, uvec4) _MT = TypeVar('_MT', dmat2x2, dmat2x3, dmat2x4, dmat3x2, dmat3x3, dmat3x4, dmat4x2, dmat4x3, dmat4x4, imat2x2, imat2x3, imat2x4, imat3x2, imat3x3, imat3x4, imat4x2, imat4x3, imat4x4, mat2x2, mat2x3, mat2x4, mat3x2, mat3x3, mat3x4, mat4x2, mat4x3, mat4x4, umat2x2, umat2x3, umat2x4, umat3x2, umat3x3, umat3x4, umat4x2, umat4x3, umat4x4) _NF32FDMSQRT = TypeVar('_NF32FDMSQRT', dmat2x2, dmat3x3, dmat4x4) _NF32M2XNT = TypeVar('_NF32M2XNT', dmat2x2, dmat2x3, dmat2x4, imat2x2, imat2x3, imat2x4, umat2x2, umat2x3, umat2x4) _NF32M3XNT = TypeVar('_NF32M3XNT', dmat3x2, dmat3x3, dmat3x4, imat3x2, imat3x3, imat3x4, umat3x2, umat3x3, umat3x4) _NF32M4XNT = TypeVar('_NF32M4XNT', dmat4x2, dmat4x3, dmat4x4, imat4x2, imat4x3, imat4x4, umat4x2, umat4x3, umat4x4) _NF32M2X2T = TypeVar('_NF32M2X2T', dmat2x2, imat2x2, umat2x2) _NF32M2X3T = TypeVar('_NF32M2X3T', dmat2x3, imat2x3, umat2x3) _NF32M2X4T = TypeVar('_NF32M2X4T', dmat2x4, imat2x4, umat2x4) _NF32M3X2T = TypeVar('_NF32M3X2T', dmat3x2, imat3x2, umat3x2) _NF32M3X3T = TypeVar('_NF32M3X3T', dmat3x3, imat3x3, umat3x3) _NF32M3X4T = TypeVar('_NF32M3X4T', dmat3x4, imat3x4, umat3x4) _NF32M4X2T = TypeVar('_NF32M4X2T', dmat4x2, imat4x2, umat4x2) _NF32M4X3T = TypeVar('_NF32M4X3T', dmat4x3, imat4x3, umat4x3) _NF32M4X4T = TypeVar('_NF32M4X4T', dmat4x4, imat4x4, umat4x4) _QT = TypeVar('_QT', dquat, quat) _NF32QT = TypeVar('_NF32QT', bound=dquat) bool_ = ctypes.c_bool c_int16 = ctypes.c_short int16 = ctypes.c_short c_int32 = ctypes.c_long int32 = ctypes.c_long c_int64 = ctypes.c_longlong int64 = ctypes.c_longlong c_int8 = ctypes.c_byte int8 = ctypes.c_byte c_uint16 = ctypes.c_ushort uint16 = ctypes.c_ushort c_uint32 = ctypes.c_ulong uint32 = ctypes.c_ulong c_uint64 = ctypes.c_ulonglong uint64 = ctypes.c_ulonglong c_uint8 = ctypes.c_ubyte uint8 = ctypes.c_ubyte double = ctypes.c_double float64 = ctypes.c_double float32 = ctypes.c_float float_ = ctypes.c_float class bvec1: x: bool @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.BAnyVector2, glm_typing.BAnyVector3, glm_typing.BAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> bool: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[bool, None, None]: ... def __neg__(self) -> bvec1: ... def __pos__(self) -> bvec1: ... def __abs__(self) -> bvec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[bool]: ... def to_tuple(self) -> Tuple[bool]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> bvec1: ... def __add__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __radd__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __iadd__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __sub__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __rsub__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __isub__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... @overload def __mul__(self, other: glm_typing.Number) -> bvec1: ... @overload def __mul__(self, other: glm_typing.B8Vector1) -> bvec1: ... @overload def __rmul__(self, other: glm_typing.Number) -> bvec1: ... @overload def __rmul__(self, other: glm_typing.B8Vector1) -> bvec1: ... @overload def __imul__(self, other: glm_typing.Number) -> bvec1: ... @overload def __imul__(self, other: glm_typing.B8Vector1) -> bvec1: ... def __mod__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __rmod__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __imod__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __pow__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __rpow__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __ipow__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __truediv__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __rtruediv__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __itruediv__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __floordiv__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __rfloordiv__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __ifloordiv__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> bvec1: ... @overload def __matmul__(self, other: glm_typing.B8Vector1) -> bvec1: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> bvec1: ... @overload def __rmatmul__(self, other: glm_typing.B8Vector1) -> bvec1: ... @overload def __imatmul__(self, other: glm_typing.Number) -> bvec1: ... @overload def __imatmul__(self, other: glm_typing.B8Vector1) -> bvec1: ... def __divmod__(self, other: bvec1) -> Tuple[bvec1, bvec1]: ... class bvec2: x: bool y: bool @property def xy(self) -> b8vec2: ... @xy.setter def xy(self, value: glm_typing.B8Vector2) -> None: ... @property def yx(self) -> b8vec2: ... @yx.setter def yx(self, value: glm_typing.B8Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.BAnyVector3, glm_typing.BAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> bool: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[bool, None, None]: ... def __neg__(self) -> bvec2: ... def __pos__(self) -> bvec2: ... def __abs__(self) -> bvec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[bool]: ... def to_tuple(self) -> Tuple[bool, bool]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> bvec2: ... def __add__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __radd__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __iadd__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __sub__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __rsub__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __isub__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... @overload def __mul__(self, other: glm_typing.Number) -> bvec2: ... @overload def __mul__(self, other: glm_typing.B8Vector2) -> bvec2: ... @overload def __rmul__(self, other: glm_typing.Number) -> bvec2: ... @overload def __rmul__(self, other: glm_typing.B8Vector2) -> bvec2: ... @overload def __imul__(self, other: glm_typing.Number) -> bvec2: ... @overload def __imul__(self, other: glm_typing.B8Vector2) -> bvec2: ... def __mod__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __rmod__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __imod__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __pow__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __rpow__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __ipow__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __truediv__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __rtruediv__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __itruediv__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __floordiv__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __rfloordiv__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __ifloordiv__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> bvec2: ... @overload def __matmul__(self, other: glm_typing.B8Vector2) -> bvec2: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> bvec2: ... @overload def __rmatmul__(self, other: glm_typing.B8Vector2) -> bvec2: ... @overload def __imatmul__(self, other: glm_typing.Number) -> bvec2: ... @overload def __imatmul__(self, other: glm_typing.B8Vector2) -> bvec2: ... def __divmod__(self, other: bvec2) -> Tuple[bvec2, bvec2]: ... class bvec3: x: bool y: bool z: bool @property def xy(self) -> b8vec2: ... @xy.setter def xy(self, value: glm_typing.B8Vector2) -> None: ... @property def yx(self) -> b8vec2: ... @yx.setter def yx(self, value: glm_typing.B8Vector2) -> None: ... @property def xz(self) -> b8vec2: ... @xz.setter def xz(self, value: glm_typing.B8Vector2) -> None: ... @property def zx(self) -> b8vec2: ... @zx.setter def zx(self, value: glm_typing.B8Vector2) -> None: ... @property def yz(self) -> b8vec2: ... @yz.setter def yz(self, value: glm_typing.B8Vector2) -> None: ... @property def zy(self) -> b8vec2: ... @zy.setter def zy(self, value: glm_typing.B8Vector2) -> None: ... @property def xyz(self) -> b8vec3: ... @xyz.setter def xyz(self, value: glm_typing.B8Vector3) -> None: ... @property def xzy(self) -> b8vec3: ... @xzy.setter def xzy(self, value: glm_typing.B8Vector3) -> None: ... @property def yxz(self) -> b8vec3: ... @yxz.setter def yxz(self, value: glm_typing.B8Vector3) -> None: ... @property def yzx(self) -> b8vec3: ... @yzx.setter def yzx(self, value: glm_typing.B8Vector3) -> None: ... @property def zxy(self) -> b8vec3: ... @zxy.setter def zxy(self, value: glm_typing.B8Vector3) -> None: ... @property def zyx(self) -> b8vec3: ... @zyx.setter def zyx(self, value: glm_typing.B8Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.BAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> bool: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[bool, None, None]: ... def __neg__(self) -> bvec3: ... def __pos__(self) -> bvec3: ... def __abs__(self) -> bvec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[bool]: ... def to_tuple(self) -> Tuple[bool, bool, bool]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> bvec3: ... def __add__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __radd__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __iadd__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __sub__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __rsub__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __isub__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... @overload def __mul__(self, other: glm_typing.Number) -> bvec3: ... @overload def __mul__(self, other: glm_typing.B8Vector3) -> bvec3: ... @overload def __rmul__(self, other: glm_typing.Number) -> bvec3: ... @overload def __rmul__(self, other: glm_typing.B8Vector3) -> bvec3: ... @overload def __imul__(self, other: glm_typing.Number) -> bvec3: ... @overload def __imul__(self, other: glm_typing.B8Vector3) -> bvec3: ... def __mod__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __rmod__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __imod__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __pow__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __rpow__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __ipow__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __truediv__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __rtruediv__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __itruediv__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __floordiv__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __rfloordiv__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __ifloordiv__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> bvec3: ... @overload def __matmul__(self, other: glm_typing.B8Vector3) -> bvec3: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> bvec3: ... @overload def __rmatmul__(self, other: glm_typing.B8Vector3) -> bvec3: ... @overload def __imatmul__(self, other: glm_typing.Number) -> bvec3: ... @overload def __imatmul__(self, other: glm_typing.B8Vector3) -> bvec3: ... def __divmod__(self, other: bvec3) -> Tuple[bvec3, bvec3]: ... class bvec4: x: bool y: bool z: bool w: bool @property def xy(self) -> b8vec2: ... @xy.setter def xy(self, value: glm_typing.B8Vector2) -> None: ... @property def yx(self) -> b8vec2: ... @yx.setter def yx(self, value: glm_typing.B8Vector2) -> None: ... @property def xz(self) -> b8vec2: ... @xz.setter def xz(self, value: glm_typing.B8Vector2) -> None: ... @property def zx(self) -> b8vec2: ... @zx.setter def zx(self, value: glm_typing.B8Vector2) -> None: ... @property def xw(self) -> b8vec2: ... @xw.setter def xw(self, value: glm_typing.B8Vector2) -> None: ... @property def wx(self) -> b8vec2: ... @wx.setter def wx(self, value: glm_typing.B8Vector2) -> None: ... @property def yz(self) -> b8vec2: ... @yz.setter def yz(self, value: glm_typing.B8Vector2) -> None: ... @property def zy(self) -> b8vec2: ... @zy.setter def zy(self, value: glm_typing.B8Vector2) -> None: ... @property def yw(self) -> b8vec2: ... @yw.setter def yw(self, value: glm_typing.B8Vector2) -> None: ... @property def wy(self) -> b8vec2: ... @wy.setter def wy(self, value: glm_typing.B8Vector2) -> None: ... @property def zw(self) -> b8vec2: ... @zw.setter def zw(self, value: glm_typing.B8Vector2) -> None: ... @property def wz(self) -> b8vec2: ... @wz.setter def wz(self, value: glm_typing.B8Vector2) -> None: ... @property def xyz(self) -> b8vec3: ... @xyz.setter def xyz(self, value: glm_typing.B8Vector3) -> None: ... @property def xzy(self) -> b8vec3: ... @xzy.setter def xzy(self, value: glm_typing.B8Vector3) -> None: ... @property def yxz(self) -> b8vec3: ... @yxz.setter def yxz(self, value: glm_typing.B8Vector3) -> None: ... @property def yzx(self) -> b8vec3: ... @yzx.setter def yzx(self, value: glm_typing.B8Vector3) -> None: ... @property def zxy(self) -> b8vec3: ... @zxy.setter def zxy(self, value: glm_typing.B8Vector3) -> None: ... @property def zyx(self) -> b8vec3: ... @zyx.setter def zyx(self, value: glm_typing.B8Vector3) -> None: ... @property def xyw(self) -> b8vec3: ... @xyw.setter def xyw(self, value: glm_typing.B8Vector3) -> None: ... @property def xwy(self) -> b8vec3: ... @xwy.setter def xwy(self, value: glm_typing.B8Vector3) -> None: ... @property def yxw(self) -> b8vec3: ... @yxw.setter def yxw(self, value: glm_typing.B8Vector3) -> None: ... @property def ywx(self) -> b8vec3: ... @ywx.setter def ywx(self, value: glm_typing.B8Vector3) -> None: ... @property def wxy(self) -> b8vec3: ... @wxy.setter def wxy(self, value: glm_typing.B8Vector3) -> None: ... @property def wyx(self) -> b8vec3: ... @wyx.setter def wyx(self, value: glm_typing.B8Vector3) -> None: ... @property def xzw(self) -> b8vec3: ... @xzw.setter def xzw(self, value: glm_typing.B8Vector3) -> None: ... @property def xwz(self) -> b8vec3: ... @xwz.setter def xwz(self, value: glm_typing.B8Vector3) -> None: ... @property def zxw(self) -> b8vec3: ... @zxw.setter def zxw(self, value: glm_typing.B8Vector3) -> None: ... @property def zwx(self) -> b8vec3: ... @zwx.setter def zwx(self, value: glm_typing.B8Vector3) -> None: ... @property def wxz(self) -> b8vec3: ... @wxz.setter def wxz(self, value: glm_typing.B8Vector3) -> None: ... @property def wzx(self) -> b8vec3: ... @wzx.setter def wzx(self, value: glm_typing.B8Vector3) -> None: ... @property def yzw(self) -> b8vec3: ... @yzw.setter def yzw(self, value: glm_typing.B8Vector3) -> None: ... @property def ywz(self) -> b8vec3: ... @ywz.setter def ywz(self, value: glm_typing.B8Vector3) -> None: ... @property def zyw(self) -> b8vec3: ... @zyw.setter def zyw(self, value: glm_typing.B8Vector3) -> None: ... @property def zwy(self) -> b8vec3: ... @zwy.setter def zwy(self, value: glm_typing.B8Vector3) -> None: ... @property def wyz(self) -> b8vec3: ... @wyz.setter def wyz(self, value: glm_typing.B8Vector3) -> None: ... @property def wzy(self) -> b8vec3: ... @wzy.setter def wzy(self, value: glm_typing.B8Vector3) -> None: ... @property def xyzw(self) -> b8vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.B8Vector4) -> None: ... @property def xywz(self) -> b8vec4: ... @xywz.setter def xywz(self, value: glm_typing.B8Vector4) -> None: ... @property def xzyw(self) -> b8vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.B8Vector4) -> None: ... @property def xzwy(self) -> b8vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.B8Vector4) -> None: ... @property def xwyz(self) -> b8vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.B8Vector4) -> None: ... @property def xwzy(self) -> b8vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.B8Vector4) -> None: ... @property def yxzw(self) -> b8vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.B8Vector4) -> None: ... @property def yxwz(self) -> b8vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.B8Vector4) -> None: ... @property def yzxw(self) -> b8vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.B8Vector4) -> None: ... @property def yzwx(self) -> b8vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.B8Vector4) -> None: ... @property def ywxz(self) -> b8vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.B8Vector4) -> None: ... @property def ywzx(self) -> b8vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.B8Vector4) -> None: ... @property def zxyw(self) -> b8vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.B8Vector4) -> None: ... @property def zxwy(self) -> b8vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.B8Vector4) -> None: ... @property def zyxw(self) -> b8vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.B8Vector4) -> None: ... @property def zywx(self) -> b8vec4: ... @zywx.setter def zywx(self, value: glm_typing.B8Vector4) -> None: ... @property def zwxy(self) -> b8vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.B8Vector4) -> None: ... @property def zwyx(self) -> b8vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.B8Vector4) -> None: ... @property def wxyz(self) -> b8vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.B8Vector4) -> None: ... @property def wxzy(self) -> b8vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.B8Vector4) -> None: ... @property def wyxz(self) -> b8vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.B8Vector4) -> None: ... @property def wyzx(self) -> b8vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.B8Vector4) -> None: ... @property def wzxy(self) -> b8vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.B8Vector4) -> None: ... @property def wzyx(self) -> b8vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.B8Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> bool: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[bool, None, None]: ... def __neg__(self) -> bvec4: ... def __pos__(self) -> bvec4: ... def __abs__(self) -> bvec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[bool]: ... def to_tuple(self) -> Tuple[bool, bool, bool, bool]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> bvec4: ... def __add__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __radd__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __iadd__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __sub__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __rsub__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __isub__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... @overload def __mul__(self, other: glm_typing.Number) -> bvec4: ... @overload def __mul__(self, other: glm_typing.B8Vector4) -> bvec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> bvec4: ... @overload def __rmul__(self, other: glm_typing.B8Vector4) -> bvec4: ... @overload def __imul__(self, other: glm_typing.Number) -> bvec4: ... @overload def __imul__(self, other: glm_typing.B8Vector4) -> bvec4: ... def __mod__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __rmod__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __imod__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __pow__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __rpow__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __ipow__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __truediv__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __rtruediv__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __itruediv__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __floordiv__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __rfloordiv__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __ifloordiv__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> bvec4: ... @overload def __matmul__(self, other: glm_typing.B8Vector4) -> bvec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> bvec4: ... @overload def __rmatmul__(self, other: glm_typing.B8Vector4) -> bvec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> bvec4: ... @overload def __imatmul__(self, other: glm_typing.B8Vector4) -> bvec4: ... def __divmod__(self, other: bvec4) -> Tuple[bvec4, bvec4]: ... class dmvec2: x: float y: float @property def xy(self) -> d64vec2: ... @xy.setter def xy(self, value: glm_typing.D64Vector2) -> None: ... @property def yx(self) -> d64vec2: ... @yx.setter def yx(self, value: glm_typing.D64Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.DAnyVector3, glm_typing.DAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> dmvec2: ... def __pos__(self) -> dmvec2: ... def __abs__(self) -> dmvec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmvec2: ... def __add__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __radd__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __iadd__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __sub__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __rsub__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __isub__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... @overload def __mul__(self, other: glm_typing.Number) -> dmvec2: ... @overload def __mul__(self, other: glm_typing.D64Vector2) -> dmvec2: ... @overload def __mul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> dmvec2: ... @overload def __rmul__(self, other: glm_typing.D64Vector2) -> dmvec2: ... @overload def __rmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> dmvec2: ... @overload def __imul__(self, other: glm_typing.D64Vector2) -> dmvec2: ... @overload def __imul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __rmod__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __imod__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __pow__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __rpow__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __ipow__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __truediv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __rtruediv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __itruediv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __floordiv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __rfloordiv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __ifloordiv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> dmvec2: ... @overload def __matmul__(self, other: glm_typing.D64Vector2) -> dmvec2: ... @overload def __matmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> dmvec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector2) -> dmvec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> dmvec2: ... @overload def __imatmul__(self, other: glm_typing.D64Vector2) -> dmvec2: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __divmod__(self, other: dmvec2) -> Tuple[dmvec2, dmvec2]: ... class dmvec3: x: float y: float z: float @property def xy(self) -> d64vec2: ... @xy.setter def xy(self, value: glm_typing.D64Vector2) -> None: ... @property def yx(self) -> d64vec2: ... @yx.setter def yx(self, value: glm_typing.D64Vector2) -> None: ... @property def xz(self) -> d64vec2: ... @xz.setter def xz(self, value: glm_typing.D64Vector2) -> None: ... @property def zx(self) -> d64vec2: ... @zx.setter def zx(self, value: glm_typing.D64Vector2) -> None: ... @property def yz(self) -> d64vec2: ... @yz.setter def yz(self, value: glm_typing.D64Vector2) -> None: ... @property def zy(self) -> d64vec2: ... @zy.setter def zy(self, value: glm_typing.D64Vector2) -> None: ... @property def xyz(self) -> d64vec3: ... @xyz.setter def xyz(self, value: glm_typing.D64Vector3) -> None: ... @property def xzy(self) -> d64vec3: ... @xzy.setter def xzy(self, value: glm_typing.D64Vector3) -> None: ... @property def yxz(self) -> d64vec3: ... @yxz.setter def yxz(self, value: glm_typing.D64Vector3) -> None: ... @property def yzx(self) -> d64vec3: ... @yzx.setter def yzx(self, value: glm_typing.D64Vector3) -> None: ... @property def zxy(self) -> d64vec3: ... @zxy.setter def zxy(self, value: glm_typing.D64Vector3) -> None: ... @property def zyx(self) -> d64vec3: ... @zyx.setter def zyx(self, value: glm_typing.D64Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.DAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> dmvec3: ... def __pos__(self) -> dmvec3: ... def __abs__(self) -> dmvec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmvec3: ... def __add__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __radd__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __iadd__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __sub__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __rsub__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __isub__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... @overload def __mul__(self, other: glm_typing.Number) -> dmvec3: ... @overload def __mul__(self, other: glm_typing.D64Vector3) -> dmvec3: ... @overload def __mul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> dmvec3: ... @overload def __rmul__(self, other: glm_typing.D64Vector3) -> dmvec3: ... @overload def __rmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> dmvec3: ... @overload def __imul__(self, other: glm_typing.D64Vector3) -> dmvec3: ... @overload def __imul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __rmod__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __imod__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __pow__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __rpow__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __ipow__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __truediv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __rtruediv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __itruediv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __floordiv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __rfloordiv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __ifloordiv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> dmvec3: ... @overload def __matmul__(self, other: glm_typing.D64Vector3) -> dmvec3: ... @overload def __matmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> dmvec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector3) -> dmvec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> dmvec3: ... @overload def __imatmul__(self, other: glm_typing.D64Vector3) -> dmvec3: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __divmod__(self, other: dmvec3) -> Tuple[dmvec3, dmvec3]: ... class dmvec4: x: float y: float z: float w: float @property def xy(self) -> d64vec2: ... @xy.setter def xy(self, value: glm_typing.D64Vector2) -> None: ... @property def yx(self) -> d64vec2: ... @yx.setter def yx(self, value: glm_typing.D64Vector2) -> None: ... @property def xz(self) -> d64vec2: ... @xz.setter def xz(self, value: glm_typing.D64Vector2) -> None: ... @property def zx(self) -> d64vec2: ... @zx.setter def zx(self, value: glm_typing.D64Vector2) -> None: ... @property def xw(self) -> d64vec2: ... @xw.setter def xw(self, value: glm_typing.D64Vector2) -> None: ... @property def wx(self) -> d64vec2: ... @wx.setter def wx(self, value: glm_typing.D64Vector2) -> None: ... @property def yz(self) -> d64vec2: ... @yz.setter def yz(self, value: glm_typing.D64Vector2) -> None: ... @property def zy(self) -> d64vec2: ... @zy.setter def zy(self, value: glm_typing.D64Vector2) -> None: ... @property def yw(self) -> d64vec2: ... @yw.setter def yw(self, value: glm_typing.D64Vector2) -> None: ... @property def wy(self) -> d64vec2: ... @wy.setter def wy(self, value: glm_typing.D64Vector2) -> None: ... @property def zw(self) -> d64vec2: ... @zw.setter def zw(self, value: glm_typing.D64Vector2) -> None: ... @property def wz(self) -> d64vec2: ... @wz.setter def wz(self, value: glm_typing.D64Vector2) -> None: ... @property def xyz(self) -> d64vec3: ... @xyz.setter def xyz(self, value: glm_typing.D64Vector3) -> None: ... @property def xzy(self) -> d64vec3: ... @xzy.setter def xzy(self, value: glm_typing.D64Vector3) -> None: ... @property def yxz(self) -> d64vec3: ... @yxz.setter def yxz(self, value: glm_typing.D64Vector3) -> None: ... @property def yzx(self) -> d64vec3: ... @yzx.setter def yzx(self, value: glm_typing.D64Vector3) -> None: ... @property def zxy(self) -> d64vec3: ... @zxy.setter def zxy(self, value: glm_typing.D64Vector3) -> None: ... @property def zyx(self) -> d64vec3: ... @zyx.setter def zyx(self, value: glm_typing.D64Vector3) -> None: ... @property def xyw(self) -> d64vec3: ... @xyw.setter def xyw(self, value: glm_typing.D64Vector3) -> None: ... @property def xwy(self) -> d64vec3: ... @xwy.setter def xwy(self, value: glm_typing.D64Vector3) -> None: ... @property def yxw(self) -> d64vec3: ... @yxw.setter def yxw(self, value: glm_typing.D64Vector3) -> None: ... @property def ywx(self) -> d64vec3: ... @ywx.setter def ywx(self, value: glm_typing.D64Vector3) -> None: ... @property def wxy(self) -> d64vec3: ... @wxy.setter def wxy(self, value: glm_typing.D64Vector3) -> None: ... @property def wyx(self) -> d64vec3: ... @wyx.setter def wyx(self, value: glm_typing.D64Vector3) -> None: ... @property def xzw(self) -> d64vec3: ... @xzw.setter def xzw(self, value: glm_typing.D64Vector3) -> None: ... @property def xwz(self) -> d64vec3: ... @xwz.setter def xwz(self, value: glm_typing.D64Vector3) -> None: ... @property def zxw(self) -> d64vec3: ... @zxw.setter def zxw(self, value: glm_typing.D64Vector3) -> None: ... @property def zwx(self) -> d64vec3: ... @zwx.setter def zwx(self, value: glm_typing.D64Vector3) -> None: ... @property def wxz(self) -> d64vec3: ... @wxz.setter def wxz(self, value: glm_typing.D64Vector3) -> None: ... @property def wzx(self) -> d64vec3: ... @wzx.setter def wzx(self, value: glm_typing.D64Vector3) -> None: ... @property def yzw(self) -> d64vec3: ... @yzw.setter def yzw(self, value: glm_typing.D64Vector3) -> None: ... @property def ywz(self) -> d64vec3: ... @ywz.setter def ywz(self, value: glm_typing.D64Vector3) -> None: ... @property def zyw(self) -> d64vec3: ... @zyw.setter def zyw(self, value: glm_typing.D64Vector3) -> None: ... @property def zwy(self) -> d64vec3: ... @zwy.setter def zwy(self, value: glm_typing.D64Vector3) -> None: ... @property def wyz(self) -> d64vec3: ... @wyz.setter def wyz(self, value: glm_typing.D64Vector3) -> None: ... @property def wzy(self) -> d64vec3: ... @wzy.setter def wzy(self, value: glm_typing.D64Vector3) -> None: ... @property def xyzw(self) -> d64vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.D64Vector4) -> None: ... @property def xywz(self) -> d64vec4: ... @xywz.setter def xywz(self, value: glm_typing.D64Vector4) -> None: ... @property def xzyw(self) -> d64vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.D64Vector4) -> None: ... @property def xzwy(self) -> d64vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.D64Vector4) -> None: ... @property def xwyz(self) -> d64vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.D64Vector4) -> None: ... @property def xwzy(self) -> d64vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.D64Vector4) -> None: ... @property def yxzw(self) -> d64vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.D64Vector4) -> None: ... @property def yxwz(self) -> d64vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.D64Vector4) -> None: ... @property def yzxw(self) -> d64vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.D64Vector4) -> None: ... @property def yzwx(self) -> d64vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.D64Vector4) -> None: ... @property def ywxz(self) -> d64vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.D64Vector4) -> None: ... @property def ywzx(self) -> d64vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.D64Vector4) -> None: ... @property def zxyw(self) -> d64vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.D64Vector4) -> None: ... @property def zxwy(self) -> d64vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.D64Vector4) -> None: ... @property def zyxw(self) -> d64vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.D64Vector4) -> None: ... @property def zywx(self) -> d64vec4: ... @zywx.setter def zywx(self, value: glm_typing.D64Vector4) -> None: ... @property def zwxy(self) -> d64vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.D64Vector4) -> None: ... @property def zwyx(self) -> d64vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.D64Vector4) -> None: ... @property def wxyz(self) -> d64vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.D64Vector4) -> None: ... @property def wxzy(self) -> d64vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.D64Vector4) -> None: ... @property def wyxz(self) -> d64vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.D64Vector4) -> None: ... @property def wyzx(self) -> d64vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.D64Vector4) -> None: ... @property def wzxy(self) -> d64vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.D64Vector4) -> None: ... @property def wzyx(self) -> d64vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.D64Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> dmvec4: ... def __pos__(self) -> dmvec4: ... def __abs__(self) -> dmvec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float, float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmvec4: ... def __add__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __radd__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __iadd__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __sub__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __rsub__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __isub__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... @overload def __mul__(self, other: glm_typing.Number) -> dmvec4: ... @overload def __mul__(self, other: glm_typing.D64Vector4) -> dmvec4: ... @overload def __mul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> dmvec4: ... @overload def __rmul__(self, other: glm_typing.D64Vector4) -> dmvec4: ... @overload def __rmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> dmvec4: ... @overload def __imul__(self, other: glm_typing.D64Vector4) -> dmvec4: ... @overload def __imul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __rmod__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __imod__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __pow__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __rpow__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __ipow__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __truediv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __rtruediv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __itruediv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __floordiv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __rfloordiv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __ifloordiv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> dmvec4: ... @overload def __matmul__(self, other: glm_typing.D64Vector4) -> dmvec4: ... @overload def __matmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> dmvec4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector4) -> dmvec4: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> dmvec4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector4) -> dmvec4: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __divmod__(self, other: dmvec4) -> Tuple[dmvec4, dmvec4]: ... f64vec1 = dvec1 class dvec1: x: float @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.DAnyVector2, glm_typing.DAnyVector3, glm_typing.DAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> dvec1: ... def __pos__(self) -> dvec1: ... def __abs__(self) -> dvec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dvec1: ... def __add__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __radd__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __iadd__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __sub__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __rsub__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __isub__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... @overload def __mul__(self, other: glm_typing.Number) -> dvec1: ... @overload def __mul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __mul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> dvec1: ... @overload def __rmul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __rmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> dvec1: ... @overload def __imul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __imul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __rmod__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __imod__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __pow__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __rpow__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __ipow__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __truediv__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __rtruediv__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __itruediv__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __floordiv__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __rfloordiv__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __ifloordiv__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> dvec1: ... @overload def __matmul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __matmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> dvec1: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> dvec1: ... @overload def __imatmul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __divmod__(self, other: dvec1) -> Tuple[dvec1, dvec1]: ... f64vec2 = dvec2 class dvec2: x: float y: float @property def xy(self) -> d64vec2: ... @xy.setter def xy(self, value: glm_typing.D64Vector2) -> None: ... @property def yx(self) -> d64vec2: ... @yx.setter def yx(self, value: glm_typing.D64Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.DAnyVector3, glm_typing.DAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> dvec2: ... def __pos__(self) -> dvec2: ... def __abs__(self) -> dvec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dvec2: ... def __add__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __radd__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __iadd__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __sub__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __rsub__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __isub__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... @overload def __mul__(self, other: glm_typing.Number) -> dvec2: ... @overload def __mul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __mul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> dvec2: ... @overload def __rmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __rmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> dvec2: ... @overload def __imul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __imul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __rmod__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __imod__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __pow__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __rpow__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __ipow__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __truediv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __rtruediv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __itruediv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __floordiv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __rfloordiv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __ifloordiv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> dvec2: ... @overload def __matmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __matmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> dvec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> dvec2: ... @overload def __imatmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __divmod__(self, other: dvec2) -> Tuple[dvec2, dvec2]: ... f64vec3 = dvec3 class dvec3: x: float y: float z: float @property def xy(self) -> d64vec2: ... @xy.setter def xy(self, value: glm_typing.D64Vector2) -> None: ... @property def yx(self) -> d64vec2: ... @yx.setter def yx(self, value: glm_typing.D64Vector2) -> None: ... @property def xz(self) -> d64vec2: ... @xz.setter def xz(self, value: glm_typing.D64Vector2) -> None: ... @property def zx(self) -> d64vec2: ... @zx.setter def zx(self, value: glm_typing.D64Vector2) -> None: ... @property def yz(self) -> d64vec2: ... @yz.setter def yz(self, value: glm_typing.D64Vector2) -> None: ... @property def zy(self) -> d64vec2: ... @zy.setter def zy(self, value: glm_typing.D64Vector2) -> None: ... @property def xyz(self) -> d64vec3: ... @xyz.setter def xyz(self, value: glm_typing.D64Vector3) -> None: ... @property def xzy(self) -> d64vec3: ... @xzy.setter def xzy(self, value: glm_typing.D64Vector3) -> None: ... @property def yxz(self) -> d64vec3: ... @yxz.setter def yxz(self, value: glm_typing.D64Vector3) -> None: ... @property def yzx(self) -> d64vec3: ... @yzx.setter def yzx(self, value: glm_typing.D64Vector3) -> None: ... @property def zxy(self) -> d64vec3: ... @zxy.setter def zxy(self, value: glm_typing.D64Vector3) -> None: ... @property def zyx(self) -> d64vec3: ... @zyx.setter def zyx(self, value: glm_typing.D64Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.DAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> dvec3: ... def __pos__(self) -> dvec3: ... def __abs__(self) -> dvec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dvec3: ... def __add__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __radd__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __iadd__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __sub__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __rsub__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __isub__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... @overload def __mul__(self, other: glm_typing.Number) -> dvec3: ... @overload def __mul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __mul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> dvec3: ... @overload def __rmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __rmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> dvec3: ... @overload def __imul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __imul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __rmod__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __imod__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __pow__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __rpow__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __ipow__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __truediv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __rtruediv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __itruediv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __floordiv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __rfloordiv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __ifloordiv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> dvec3: ... @overload def __matmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __matmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> dvec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> dvec3: ... @overload def __imatmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __divmod__(self, other: dvec3) -> Tuple[dvec3, dvec3]: ... f64vec4 = dvec4 class dvec4: x: float y: float z: float w: float @property def xy(self) -> d64vec2: ... @xy.setter def xy(self, value: glm_typing.D64Vector2) -> None: ... @property def yx(self) -> d64vec2: ... @yx.setter def yx(self, value: glm_typing.D64Vector2) -> None: ... @property def xz(self) -> d64vec2: ... @xz.setter def xz(self, value: glm_typing.D64Vector2) -> None: ... @property def zx(self) -> d64vec2: ... @zx.setter def zx(self, value: glm_typing.D64Vector2) -> None: ... @property def xw(self) -> d64vec2: ... @xw.setter def xw(self, value: glm_typing.D64Vector2) -> None: ... @property def wx(self) -> d64vec2: ... @wx.setter def wx(self, value: glm_typing.D64Vector2) -> None: ... @property def yz(self) -> d64vec2: ... @yz.setter def yz(self, value: glm_typing.D64Vector2) -> None: ... @property def zy(self) -> d64vec2: ... @zy.setter def zy(self, value: glm_typing.D64Vector2) -> None: ... @property def yw(self) -> d64vec2: ... @yw.setter def yw(self, value: glm_typing.D64Vector2) -> None: ... @property def wy(self) -> d64vec2: ... @wy.setter def wy(self, value: glm_typing.D64Vector2) -> None: ... @property def zw(self) -> d64vec2: ... @zw.setter def zw(self, value: glm_typing.D64Vector2) -> None: ... @property def wz(self) -> d64vec2: ... @wz.setter def wz(self, value: glm_typing.D64Vector2) -> None: ... @property def xyz(self) -> d64vec3: ... @xyz.setter def xyz(self, value: glm_typing.D64Vector3) -> None: ... @property def xzy(self) -> d64vec3: ... @xzy.setter def xzy(self, value: glm_typing.D64Vector3) -> None: ... @property def yxz(self) -> d64vec3: ... @yxz.setter def yxz(self, value: glm_typing.D64Vector3) -> None: ... @property def yzx(self) -> d64vec3: ... @yzx.setter def yzx(self, value: glm_typing.D64Vector3) -> None: ... @property def zxy(self) -> d64vec3: ... @zxy.setter def zxy(self, value: glm_typing.D64Vector3) -> None: ... @property def zyx(self) -> d64vec3: ... @zyx.setter def zyx(self, value: glm_typing.D64Vector3) -> None: ... @property def xyw(self) -> d64vec3: ... @xyw.setter def xyw(self, value: glm_typing.D64Vector3) -> None: ... @property def xwy(self) -> d64vec3: ... @xwy.setter def xwy(self, value: glm_typing.D64Vector3) -> None: ... @property def yxw(self) -> d64vec3: ... @yxw.setter def yxw(self, value: glm_typing.D64Vector3) -> None: ... @property def ywx(self) -> d64vec3: ... @ywx.setter def ywx(self, value: glm_typing.D64Vector3) -> None: ... @property def wxy(self) -> d64vec3: ... @wxy.setter def wxy(self, value: glm_typing.D64Vector3) -> None: ... @property def wyx(self) -> d64vec3: ... @wyx.setter def wyx(self, value: glm_typing.D64Vector3) -> None: ... @property def xzw(self) -> d64vec3: ... @xzw.setter def xzw(self, value: glm_typing.D64Vector3) -> None: ... @property def xwz(self) -> d64vec3: ... @xwz.setter def xwz(self, value: glm_typing.D64Vector3) -> None: ... @property def zxw(self) -> d64vec3: ... @zxw.setter def zxw(self, value: glm_typing.D64Vector3) -> None: ... @property def zwx(self) -> d64vec3: ... @zwx.setter def zwx(self, value: glm_typing.D64Vector3) -> None: ... @property def wxz(self) -> d64vec3: ... @wxz.setter def wxz(self, value: glm_typing.D64Vector3) -> None: ... @property def wzx(self) -> d64vec3: ... @wzx.setter def wzx(self, value: glm_typing.D64Vector3) -> None: ... @property def yzw(self) -> d64vec3: ... @yzw.setter def yzw(self, value: glm_typing.D64Vector3) -> None: ... @property def ywz(self) -> d64vec3: ... @ywz.setter def ywz(self, value: glm_typing.D64Vector3) -> None: ... @property def zyw(self) -> d64vec3: ... @zyw.setter def zyw(self, value: glm_typing.D64Vector3) -> None: ... @property def zwy(self) -> d64vec3: ... @zwy.setter def zwy(self, value: glm_typing.D64Vector3) -> None: ... @property def wyz(self) -> d64vec3: ... @wyz.setter def wyz(self, value: glm_typing.D64Vector3) -> None: ... @property def wzy(self) -> d64vec3: ... @wzy.setter def wzy(self, value: glm_typing.D64Vector3) -> None: ... @property def xyzw(self) -> d64vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.D64Vector4) -> None: ... @property def xywz(self) -> d64vec4: ... @xywz.setter def xywz(self, value: glm_typing.D64Vector4) -> None: ... @property def xzyw(self) -> d64vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.D64Vector4) -> None: ... @property def xzwy(self) -> d64vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.D64Vector4) -> None: ... @property def xwyz(self) -> d64vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.D64Vector4) -> None: ... @property def xwzy(self) -> d64vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.D64Vector4) -> None: ... @property def yxzw(self) -> d64vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.D64Vector4) -> None: ... @property def yxwz(self) -> d64vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.D64Vector4) -> None: ... @property def yzxw(self) -> d64vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.D64Vector4) -> None: ... @property def yzwx(self) -> d64vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.D64Vector4) -> None: ... @property def ywxz(self) -> d64vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.D64Vector4) -> None: ... @property def ywzx(self) -> d64vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.D64Vector4) -> None: ... @property def zxyw(self) -> d64vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.D64Vector4) -> None: ... @property def zxwy(self) -> d64vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.D64Vector4) -> None: ... @property def zyxw(self) -> d64vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.D64Vector4) -> None: ... @property def zywx(self) -> d64vec4: ... @zywx.setter def zywx(self, value: glm_typing.D64Vector4) -> None: ... @property def zwxy(self) -> d64vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.D64Vector4) -> None: ... @property def zwyx(self) -> d64vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.D64Vector4) -> None: ... @property def wxyz(self) -> d64vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.D64Vector4) -> None: ... @property def wxzy(self) -> d64vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.D64Vector4) -> None: ... @property def wyxz(self) -> d64vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.D64Vector4) -> None: ... @property def wyzx(self) -> d64vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.D64Vector4) -> None: ... @property def wzxy(self) -> d64vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.D64Vector4) -> None: ... @property def wzyx(self) -> d64vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.D64Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> dvec4: ... def __pos__(self) -> dvec4: ... def __abs__(self) -> dvec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float, float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dvec4: ... def __add__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __radd__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __iadd__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __sub__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __rsub__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __isub__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... @overload def __mul__(self, other: glm_typing.Number) -> dvec4: ... @overload def __mul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __mul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> dvec4: ... @overload def __rmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __rmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> dvec4: ... @overload def __imul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __imul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __rmod__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __imod__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __pow__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __rpow__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __ipow__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __truediv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __rtruediv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __itruediv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __floordiv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __rfloordiv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __ifloordiv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> dvec4: ... @overload def __matmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __matmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> dvec4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> dvec4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __divmod__(self, other: dvec4) -> Tuple[dvec4, dvec4]: ... class i16vec1: x: int @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.IAnyVector2, glm_typing.IAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i16vec1: ... def __pos__(self) -> i16vec1: ... def __abs__(self) -> i16vec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i16vec1: ... def __add__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __radd__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __iadd__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __sub__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __rsub__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __isub__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... @overload def __mul__(self, other: glm_typing.Number) -> i16vec1: ... @overload def __mul__(self, other: glm_typing.I16Vector1) -> i16vec1: ... @overload def __rmul__(self, other: glm_typing.Number) -> i16vec1: ... @overload def __rmul__(self, other: glm_typing.I16Vector1) -> i16vec1: ... @overload def __imul__(self, other: glm_typing.Number) -> i16vec1: ... @overload def __imul__(self, other: glm_typing.I16Vector1) -> i16vec1: ... def __mod__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __rmod__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __imod__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __pow__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __rpow__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __ipow__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __truediv__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __rtruediv__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __itruediv__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __floordiv__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __rfloordiv__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __ifloordiv__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> i16vec1: ... @overload def __matmul__(self, other: glm_typing.I16Vector1) -> i16vec1: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i16vec1: ... @overload def __rmatmul__(self, other: glm_typing.I16Vector1) -> i16vec1: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i16vec1: ... @overload def __imatmul__(self, other: glm_typing.I16Vector1) -> i16vec1: ... def __divmod__(self, other: i16vec1) -> Tuple[i16vec1, i16vec1]: ... class i16vec2: x: int y: int @property def xy(self) -> i16vec2: ... @xy.setter def xy(self, value: glm_typing.I16Vector2) -> None: ... @property def yx(self) -> i16vec2: ... @yx.setter def yx(self, value: glm_typing.I16Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.IAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i16vec2: ... def __pos__(self) -> i16vec2: ... def __abs__(self) -> i16vec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i16vec2: ... def __add__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __radd__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __iadd__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __sub__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __rsub__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __isub__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... @overload def __mul__(self, other: glm_typing.Number) -> i16vec2: ... @overload def __mul__(self, other: glm_typing.I16Vector2) -> i16vec2: ... @overload def __rmul__(self, other: glm_typing.Number) -> i16vec2: ... @overload def __rmul__(self, other: glm_typing.I16Vector2) -> i16vec2: ... @overload def __imul__(self, other: glm_typing.Number) -> i16vec2: ... @overload def __imul__(self, other: glm_typing.I16Vector2) -> i16vec2: ... def __mod__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __rmod__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __imod__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __pow__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __rpow__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __ipow__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __truediv__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __rtruediv__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __itruediv__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __floordiv__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __rfloordiv__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __ifloordiv__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> i16vec2: ... @overload def __matmul__(self, other: glm_typing.I16Vector2) -> i16vec2: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i16vec2: ... @overload def __rmatmul__(self, other: glm_typing.I16Vector2) -> i16vec2: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i16vec2: ... @overload def __imatmul__(self, other: glm_typing.I16Vector2) -> i16vec2: ... def __divmod__(self, other: i16vec2) -> Tuple[i16vec2, i16vec2]: ... class i16vec3: x: int y: int z: int @property def xy(self) -> i16vec2: ... @xy.setter def xy(self, value: glm_typing.I16Vector2) -> None: ... @property def yx(self) -> i16vec2: ... @yx.setter def yx(self, value: glm_typing.I16Vector2) -> None: ... @property def xz(self) -> i16vec2: ... @xz.setter def xz(self, value: glm_typing.I16Vector2) -> None: ... @property def zx(self) -> i16vec2: ... @zx.setter def zx(self, value: glm_typing.I16Vector2) -> None: ... @property def yz(self) -> i16vec2: ... @yz.setter def yz(self, value: glm_typing.I16Vector2) -> None: ... @property def zy(self) -> i16vec2: ... @zy.setter def zy(self, value: glm_typing.I16Vector2) -> None: ... @property def xyz(self) -> i16vec3: ... @xyz.setter def xyz(self, value: glm_typing.I16Vector3) -> None: ... @property def xzy(self) -> i16vec3: ... @xzy.setter def xzy(self, value: glm_typing.I16Vector3) -> None: ... @property def yxz(self) -> i16vec3: ... @yxz.setter def yxz(self, value: glm_typing.I16Vector3) -> None: ... @property def yzx(self) -> i16vec3: ... @yzx.setter def yzx(self, value: glm_typing.I16Vector3) -> None: ... @property def zxy(self) -> i16vec3: ... @zxy.setter def zxy(self, value: glm_typing.I16Vector3) -> None: ... @property def zyx(self) -> i16vec3: ... @zyx.setter def zyx(self, value: glm_typing.I16Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i16vec3: ... def __pos__(self) -> i16vec3: ... def __abs__(self) -> i16vec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i16vec3: ... def __add__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __radd__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __iadd__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __sub__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __rsub__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __isub__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... @overload def __mul__(self, other: glm_typing.Number) -> i16vec3: ... @overload def __mul__(self, other: glm_typing.I16Vector3) -> i16vec3: ... @overload def __rmul__(self, other: glm_typing.Number) -> i16vec3: ... @overload def __rmul__(self, other: glm_typing.I16Vector3) -> i16vec3: ... @overload def __imul__(self, other: glm_typing.Number) -> i16vec3: ... @overload def __imul__(self, other: glm_typing.I16Vector3) -> i16vec3: ... def __mod__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __rmod__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __imod__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __pow__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __rpow__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __ipow__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __truediv__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __rtruediv__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __itruediv__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __floordiv__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __rfloordiv__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __ifloordiv__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> i16vec3: ... @overload def __matmul__(self, other: glm_typing.I16Vector3) -> i16vec3: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i16vec3: ... @overload def __rmatmul__(self, other: glm_typing.I16Vector3) -> i16vec3: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i16vec3: ... @overload def __imatmul__(self, other: glm_typing.I16Vector3) -> i16vec3: ... def __divmod__(self, other: i16vec3) -> Tuple[i16vec3, i16vec3]: ... class i16vec4: x: int y: int z: int w: int @property def xy(self) -> i16vec2: ... @xy.setter def xy(self, value: glm_typing.I16Vector2) -> None: ... @property def yx(self) -> i16vec2: ... @yx.setter def yx(self, value: glm_typing.I16Vector2) -> None: ... @property def xz(self) -> i16vec2: ... @xz.setter def xz(self, value: glm_typing.I16Vector2) -> None: ... @property def zx(self) -> i16vec2: ... @zx.setter def zx(self, value: glm_typing.I16Vector2) -> None: ... @property def xw(self) -> i16vec2: ... @xw.setter def xw(self, value: glm_typing.I16Vector2) -> None: ... @property def wx(self) -> i16vec2: ... @wx.setter def wx(self, value: glm_typing.I16Vector2) -> None: ... @property def yz(self) -> i16vec2: ... @yz.setter def yz(self, value: glm_typing.I16Vector2) -> None: ... @property def zy(self) -> i16vec2: ... @zy.setter def zy(self, value: glm_typing.I16Vector2) -> None: ... @property def yw(self) -> i16vec2: ... @yw.setter def yw(self, value: glm_typing.I16Vector2) -> None: ... @property def wy(self) -> i16vec2: ... @wy.setter def wy(self, value: glm_typing.I16Vector2) -> None: ... @property def zw(self) -> i16vec2: ... @zw.setter def zw(self, value: glm_typing.I16Vector2) -> None: ... @property def wz(self) -> i16vec2: ... @wz.setter def wz(self, value: glm_typing.I16Vector2) -> None: ... @property def xyz(self) -> i16vec3: ... @xyz.setter def xyz(self, value: glm_typing.I16Vector3) -> None: ... @property def xzy(self) -> i16vec3: ... @xzy.setter def xzy(self, value: glm_typing.I16Vector3) -> None: ... @property def yxz(self) -> i16vec3: ... @yxz.setter def yxz(self, value: glm_typing.I16Vector3) -> None: ... @property def yzx(self) -> i16vec3: ... @yzx.setter def yzx(self, value: glm_typing.I16Vector3) -> None: ... @property def zxy(self) -> i16vec3: ... @zxy.setter def zxy(self, value: glm_typing.I16Vector3) -> None: ... @property def zyx(self) -> i16vec3: ... @zyx.setter def zyx(self, value: glm_typing.I16Vector3) -> None: ... @property def xyw(self) -> i16vec3: ... @xyw.setter def xyw(self, value: glm_typing.I16Vector3) -> None: ... @property def xwy(self) -> i16vec3: ... @xwy.setter def xwy(self, value: glm_typing.I16Vector3) -> None: ... @property def yxw(self) -> i16vec3: ... @yxw.setter def yxw(self, value: glm_typing.I16Vector3) -> None: ... @property def ywx(self) -> i16vec3: ... @ywx.setter def ywx(self, value: glm_typing.I16Vector3) -> None: ... @property def wxy(self) -> i16vec3: ... @wxy.setter def wxy(self, value: glm_typing.I16Vector3) -> None: ... @property def wyx(self) -> i16vec3: ... @wyx.setter def wyx(self, value: glm_typing.I16Vector3) -> None: ... @property def xzw(self) -> i16vec3: ... @xzw.setter def xzw(self, value: glm_typing.I16Vector3) -> None: ... @property def xwz(self) -> i16vec3: ... @xwz.setter def xwz(self, value: glm_typing.I16Vector3) -> None: ... @property def zxw(self) -> i16vec3: ... @zxw.setter def zxw(self, value: glm_typing.I16Vector3) -> None: ... @property def zwx(self) -> i16vec3: ... @zwx.setter def zwx(self, value: glm_typing.I16Vector3) -> None: ... @property def wxz(self) -> i16vec3: ... @wxz.setter def wxz(self, value: glm_typing.I16Vector3) -> None: ... @property def wzx(self) -> i16vec3: ... @wzx.setter def wzx(self, value: glm_typing.I16Vector3) -> None: ... @property def yzw(self) -> i16vec3: ... @yzw.setter def yzw(self, value: glm_typing.I16Vector3) -> None: ... @property def ywz(self) -> i16vec3: ... @ywz.setter def ywz(self, value: glm_typing.I16Vector3) -> None: ... @property def zyw(self) -> i16vec3: ... @zyw.setter def zyw(self, value: glm_typing.I16Vector3) -> None: ... @property def zwy(self) -> i16vec3: ... @zwy.setter def zwy(self, value: glm_typing.I16Vector3) -> None: ... @property def wyz(self) -> i16vec3: ... @wyz.setter def wyz(self, value: glm_typing.I16Vector3) -> None: ... @property def wzy(self) -> i16vec3: ... @wzy.setter def wzy(self, value: glm_typing.I16Vector3) -> None: ... @property def xyzw(self) -> i16vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.I16Vector4) -> None: ... @property def xywz(self) -> i16vec4: ... @xywz.setter def xywz(self, value: glm_typing.I16Vector4) -> None: ... @property def xzyw(self) -> i16vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.I16Vector4) -> None: ... @property def xzwy(self) -> i16vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.I16Vector4) -> None: ... @property def xwyz(self) -> i16vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.I16Vector4) -> None: ... @property def xwzy(self) -> i16vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.I16Vector4) -> None: ... @property def yxzw(self) -> i16vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.I16Vector4) -> None: ... @property def yxwz(self) -> i16vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.I16Vector4) -> None: ... @property def yzxw(self) -> i16vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.I16Vector4) -> None: ... @property def yzwx(self) -> i16vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.I16Vector4) -> None: ... @property def ywxz(self) -> i16vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.I16Vector4) -> None: ... @property def ywzx(self) -> i16vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.I16Vector4) -> None: ... @property def zxyw(self) -> i16vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.I16Vector4) -> None: ... @property def zxwy(self) -> i16vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.I16Vector4) -> None: ... @property def zyxw(self) -> i16vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.I16Vector4) -> None: ... @property def zywx(self) -> i16vec4: ... @zywx.setter def zywx(self, value: glm_typing.I16Vector4) -> None: ... @property def zwxy(self) -> i16vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.I16Vector4) -> None: ... @property def zwyx(self) -> i16vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.I16Vector4) -> None: ... @property def wxyz(self) -> i16vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.I16Vector4) -> None: ... @property def wxzy(self) -> i16vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.I16Vector4) -> None: ... @property def wyxz(self) -> i16vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.I16Vector4) -> None: ... @property def wyzx(self) -> i16vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.I16Vector4) -> None: ... @property def wzxy(self) -> i16vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.I16Vector4) -> None: ... @property def wzyx(self) -> i16vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.I16Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i16vec4: ... def __pos__(self) -> i16vec4: ... def __abs__(self) -> i16vec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i16vec4: ... def __add__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __radd__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __iadd__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __sub__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __rsub__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __isub__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... @overload def __mul__(self, other: glm_typing.Number) -> i16vec4: ... @overload def __mul__(self, other: glm_typing.I16Vector4) -> i16vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> i16vec4: ... @overload def __rmul__(self, other: glm_typing.I16Vector4) -> i16vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> i16vec4: ... @overload def __imul__(self, other: glm_typing.I16Vector4) -> i16vec4: ... def __mod__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __rmod__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __imod__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __pow__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __rpow__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __ipow__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __truediv__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __rtruediv__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __itruediv__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __floordiv__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __rfloordiv__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __ifloordiv__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> i16vec4: ... @overload def __matmul__(self, other: glm_typing.I16Vector4) -> i16vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i16vec4: ... @overload def __rmatmul__(self, other: glm_typing.I16Vector4) -> i16vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i16vec4: ... @overload def __imatmul__(self, other: glm_typing.I16Vector4) -> i16vec4: ... def __divmod__(self, other: i16vec4) -> Tuple[i16vec4, i16vec4]: ... class i64vec1: x: int @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.IAnyVector2, glm_typing.IAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i64vec1: ... def __pos__(self) -> i64vec1: ... def __abs__(self) -> i64vec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i64vec1: ... def __add__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __radd__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __iadd__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __sub__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __rsub__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __isub__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... @overload def __mul__(self, other: glm_typing.Number) -> i64vec1: ... @overload def __mul__(self, other: glm_typing.I64Vector1) -> i64vec1: ... @overload def __rmul__(self, other: glm_typing.Number) -> i64vec1: ... @overload def __rmul__(self, other: glm_typing.I64Vector1) -> i64vec1: ... @overload def __imul__(self, other: glm_typing.Number) -> i64vec1: ... @overload def __imul__(self, other: glm_typing.I64Vector1) -> i64vec1: ... def __mod__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __rmod__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __imod__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __pow__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __rpow__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __ipow__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __truediv__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __rtruediv__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __itruediv__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __floordiv__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __rfloordiv__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __ifloordiv__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> i64vec1: ... @overload def __matmul__(self, other: glm_typing.I64Vector1) -> i64vec1: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i64vec1: ... @overload def __rmatmul__(self, other: glm_typing.I64Vector1) -> i64vec1: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i64vec1: ... @overload def __imatmul__(self, other: glm_typing.I64Vector1) -> i64vec1: ... def __divmod__(self, other: i64vec1) -> Tuple[i64vec1, i64vec1]: ... class i64vec2: x: int y: int @property def xy(self) -> i64vec2: ... @xy.setter def xy(self, value: glm_typing.I64Vector2) -> None: ... @property def yx(self) -> i64vec2: ... @yx.setter def yx(self, value: glm_typing.I64Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.IAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i64vec2: ... def __pos__(self) -> i64vec2: ... def __abs__(self) -> i64vec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i64vec2: ... def __add__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __radd__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __iadd__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __sub__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __rsub__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __isub__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... @overload def __mul__(self, other: glm_typing.Number) -> i64vec2: ... @overload def __mul__(self, other: glm_typing.I64Vector2) -> i64vec2: ... @overload def __rmul__(self, other: glm_typing.Number) -> i64vec2: ... @overload def __rmul__(self, other: glm_typing.I64Vector2) -> i64vec2: ... @overload def __imul__(self, other: glm_typing.Number) -> i64vec2: ... @overload def __imul__(self, other: glm_typing.I64Vector2) -> i64vec2: ... def __mod__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __rmod__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __imod__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __pow__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __rpow__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __ipow__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __truediv__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __rtruediv__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __itruediv__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __floordiv__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __rfloordiv__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __ifloordiv__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> i64vec2: ... @overload def __matmul__(self, other: glm_typing.I64Vector2) -> i64vec2: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i64vec2: ... @overload def __rmatmul__(self, other: glm_typing.I64Vector2) -> i64vec2: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i64vec2: ... @overload def __imatmul__(self, other: glm_typing.I64Vector2) -> i64vec2: ... def __divmod__(self, other: i64vec2) -> Tuple[i64vec2, i64vec2]: ... class i64vec3: x: int y: int z: int @property def xy(self) -> i64vec2: ... @xy.setter def xy(self, value: glm_typing.I64Vector2) -> None: ... @property def yx(self) -> i64vec2: ... @yx.setter def yx(self, value: glm_typing.I64Vector2) -> None: ... @property def xz(self) -> i64vec2: ... @xz.setter def xz(self, value: glm_typing.I64Vector2) -> None: ... @property def zx(self) -> i64vec2: ... @zx.setter def zx(self, value: glm_typing.I64Vector2) -> None: ... @property def yz(self) -> i64vec2: ... @yz.setter def yz(self, value: glm_typing.I64Vector2) -> None: ... @property def zy(self) -> i64vec2: ... @zy.setter def zy(self, value: glm_typing.I64Vector2) -> None: ... @property def xyz(self) -> i64vec3: ... @xyz.setter def xyz(self, value: glm_typing.I64Vector3) -> None: ... @property def xzy(self) -> i64vec3: ... @xzy.setter def xzy(self, value: glm_typing.I64Vector3) -> None: ... @property def yxz(self) -> i64vec3: ... @yxz.setter def yxz(self, value: glm_typing.I64Vector3) -> None: ... @property def yzx(self) -> i64vec3: ... @yzx.setter def yzx(self, value: glm_typing.I64Vector3) -> None: ... @property def zxy(self) -> i64vec3: ... @zxy.setter def zxy(self, value: glm_typing.I64Vector3) -> None: ... @property def zyx(self) -> i64vec3: ... @zyx.setter def zyx(self, value: glm_typing.I64Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i64vec3: ... def __pos__(self) -> i64vec3: ... def __abs__(self) -> i64vec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i64vec3: ... def __add__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __radd__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __iadd__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __sub__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __rsub__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __isub__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... @overload def __mul__(self, other: glm_typing.Number) -> i64vec3: ... @overload def __mul__(self, other: glm_typing.I64Vector3) -> i64vec3: ... @overload def __rmul__(self, other: glm_typing.Number) -> i64vec3: ... @overload def __rmul__(self, other: glm_typing.I64Vector3) -> i64vec3: ... @overload def __imul__(self, other: glm_typing.Number) -> i64vec3: ... @overload def __imul__(self, other: glm_typing.I64Vector3) -> i64vec3: ... def __mod__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __rmod__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __imod__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __pow__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __rpow__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __ipow__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __truediv__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __rtruediv__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __itruediv__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __floordiv__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __rfloordiv__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __ifloordiv__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> i64vec3: ... @overload def __matmul__(self, other: glm_typing.I64Vector3) -> i64vec3: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i64vec3: ... @overload def __rmatmul__(self, other: glm_typing.I64Vector3) -> i64vec3: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i64vec3: ... @overload def __imatmul__(self, other: glm_typing.I64Vector3) -> i64vec3: ... def __divmod__(self, other: i64vec3) -> Tuple[i64vec3, i64vec3]: ... class i64vec4: x: int y: int z: int w: int @property def xy(self) -> i64vec2: ... @xy.setter def xy(self, value: glm_typing.I64Vector2) -> None: ... @property def yx(self) -> i64vec2: ... @yx.setter def yx(self, value: glm_typing.I64Vector2) -> None: ... @property def xz(self) -> i64vec2: ... @xz.setter def xz(self, value: glm_typing.I64Vector2) -> None: ... @property def zx(self) -> i64vec2: ... @zx.setter def zx(self, value: glm_typing.I64Vector2) -> None: ... @property def xw(self) -> i64vec2: ... @xw.setter def xw(self, value: glm_typing.I64Vector2) -> None: ... @property def wx(self) -> i64vec2: ... @wx.setter def wx(self, value: glm_typing.I64Vector2) -> None: ... @property def yz(self) -> i64vec2: ... @yz.setter def yz(self, value: glm_typing.I64Vector2) -> None: ... @property def zy(self) -> i64vec2: ... @zy.setter def zy(self, value: glm_typing.I64Vector2) -> None: ... @property def yw(self) -> i64vec2: ... @yw.setter def yw(self, value: glm_typing.I64Vector2) -> None: ... @property def wy(self) -> i64vec2: ... @wy.setter def wy(self, value: glm_typing.I64Vector2) -> None: ... @property def zw(self) -> i64vec2: ... @zw.setter def zw(self, value: glm_typing.I64Vector2) -> None: ... @property def wz(self) -> i64vec2: ... @wz.setter def wz(self, value: glm_typing.I64Vector2) -> None: ... @property def xyz(self) -> i64vec3: ... @xyz.setter def xyz(self, value: glm_typing.I64Vector3) -> None: ... @property def xzy(self) -> i64vec3: ... @xzy.setter def xzy(self, value: glm_typing.I64Vector3) -> None: ... @property def yxz(self) -> i64vec3: ... @yxz.setter def yxz(self, value: glm_typing.I64Vector3) -> None: ... @property def yzx(self) -> i64vec3: ... @yzx.setter def yzx(self, value: glm_typing.I64Vector3) -> None: ... @property def zxy(self) -> i64vec3: ... @zxy.setter def zxy(self, value: glm_typing.I64Vector3) -> None: ... @property def zyx(self) -> i64vec3: ... @zyx.setter def zyx(self, value: glm_typing.I64Vector3) -> None: ... @property def xyw(self) -> i64vec3: ... @xyw.setter def xyw(self, value: glm_typing.I64Vector3) -> None: ... @property def xwy(self) -> i64vec3: ... @xwy.setter def xwy(self, value: glm_typing.I64Vector3) -> None: ... @property def yxw(self) -> i64vec3: ... @yxw.setter def yxw(self, value: glm_typing.I64Vector3) -> None: ... @property def ywx(self) -> i64vec3: ... @ywx.setter def ywx(self, value: glm_typing.I64Vector3) -> None: ... @property def wxy(self) -> i64vec3: ... @wxy.setter def wxy(self, value: glm_typing.I64Vector3) -> None: ... @property def wyx(self) -> i64vec3: ... @wyx.setter def wyx(self, value: glm_typing.I64Vector3) -> None: ... @property def xzw(self) -> i64vec3: ... @xzw.setter def xzw(self, value: glm_typing.I64Vector3) -> None: ... @property def xwz(self) -> i64vec3: ... @xwz.setter def xwz(self, value: glm_typing.I64Vector3) -> None: ... @property def zxw(self) -> i64vec3: ... @zxw.setter def zxw(self, value: glm_typing.I64Vector3) -> None: ... @property def zwx(self) -> i64vec3: ... @zwx.setter def zwx(self, value: glm_typing.I64Vector3) -> None: ... @property def wxz(self) -> i64vec3: ... @wxz.setter def wxz(self, value: glm_typing.I64Vector3) -> None: ... @property def wzx(self) -> i64vec3: ... @wzx.setter def wzx(self, value: glm_typing.I64Vector3) -> None: ... @property def yzw(self) -> i64vec3: ... @yzw.setter def yzw(self, value: glm_typing.I64Vector3) -> None: ... @property def ywz(self) -> i64vec3: ... @ywz.setter def ywz(self, value: glm_typing.I64Vector3) -> None: ... @property def zyw(self) -> i64vec3: ... @zyw.setter def zyw(self, value: glm_typing.I64Vector3) -> None: ... @property def zwy(self) -> i64vec3: ... @zwy.setter def zwy(self, value: glm_typing.I64Vector3) -> None: ... @property def wyz(self) -> i64vec3: ... @wyz.setter def wyz(self, value: glm_typing.I64Vector3) -> None: ... @property def wzy(self) -> i64vec3: ... @wzy.setter def wzy(self, value: glm_typing.I64Vector3) -> None: ... @property def xyzw(self) -> i64vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.I64Vector4) -> None: ... @property def xywz(self) -> i64vec4: ... @xywz.setter def xywz(self, value: glm_typing.I64Vector4) -> None: ... @property def xzyw(self) -> i64vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.I64Vector4) -> None: ... @property def xzwy(self) -> i64vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.I64Vector4) -> None: ... @property def xwyz(self) -> i64vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.I64Vector4) -> None: ... @property def xwzy(self) -> i64vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.I64Vector4) -> None: ... @property def yxzw(self) -> i64vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.I64Vector4) -> None: ... @property def yxwz(self) -> i64vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.I64Vector4) -> None: ... @property def yzxw(self) -> i64vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.I64Vector4) -> None: ... @property def yzwx(self) -> i64vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.I64Vector4) -> None: ... @property def ywxz(self) -> i64vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.I64Vector4) -> None: ... @property def ywzx(self) -> i64vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.I64Vector4) -> None: ... @property def zxyw(self) -> i64vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.I64Vector4) -> None: ... @property def zxwy(self) -> i64vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.I64Vector4) -> None: ... @property def zyxw(self) -> i64vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.I64Vector4) -> None: ... @property def zywx(self) -> i64vec4: ... @zywx.setter def zywx(self, value: glm_typing.I64Vector4) -> None: ... @property def zwxy(self) -> i64vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.I64Vector4) -> None: ... @property def zwyx(self) -> i64vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.I64Vector4) -> None: ... @property def wxyz(self) -> i64vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.I64Vector4) -> None: ... @property def wxzy(self) -> i64vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.I64Vector4) -> None: ... @property def wyxz(self) -> i64vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.I64Vector4) -> None: ... @property def wyzx(self) -> i64vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.I64Vector4) -> None: ... @property def wzxy(self) -> i64vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.I64Vector4) -> None: ... @property def wzyx(self) -> i64vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.I64Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i64vec4: ... def __pos__(self) -> i64vec4: ... def __abs__(self) -> i64vec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i64vec4: ... def __add__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __radd__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __iadd__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __sub__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __rsub__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __isub__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... @overload def __mul__(self, other: glm_typing.Number) -> i64vec4: ... @overload def __mul__(self, other: glm_typing.I64Vector4) -> i64vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> i64vec4: ... @overload def __rmul__(self, other: glm_typing.I64Vector4) -> i64vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> i64vec4: ... @overload def __imul__(self, other: glm_typing.I64Vector4) -> i64vec4: ... def __mod__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __rmod__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __imod__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __pow__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __rpow__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __ipow__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __truediv__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __rtruediv__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __itruediv__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __floordiv__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __rfloordiv__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __ifloordiv__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> i64vec4: ... @overload def __matmul__(self, other: glm_typing.I64Vector4) -> i64vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i64vec4: ... @overload def __rmatmul__(self, other: glm_typing.I64Vector4) -> i64vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i64vec4: ... @overload def __imatmul__(self, other: glm_typing.I64Vector4) -> i64vec4: ... def __divmod__(self, other: i64vec4) -> Tuple[i64vec4, i64vec4]: ... class i8vec1: x: int @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.IAnyVector2, glm_typing.IAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i8vec1: ... def __pos__(self) -> i8vec1: ... def __abs__(self) -> i8vec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i8vec1: ... def __add__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __radd__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __iadd__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __sub__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __rsub__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __isub__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... @overload def __mul__(self, other: glm_typing.Number) -> i8vec1: ... @overload def __mul__(self, other: glm_typing.I8Vector1) -> i8vec1: ... @overload def __rmul__(self, other: glm_typing.Number) -> i8vec1: ... @overload def __rmul__(self, other: glm_typing.I8Vector1) -> i8vec1: ... @overload def __imul__(self, other: glm_typing.Number) -> i8vec1: ... @overload def __imul__(self, other: glm_typing.I8Vector1) -> i8vec1: ... def __mod__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __rmod__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __imod__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __pow__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __rpow__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __ipow__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __truediv__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __rtruediv__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __itruediv__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __floordiv__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __rfloordiv__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __ifloordiv__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> i8vec1: ... @overload def __matmul__(self, other: glm_typing.I8Vector1) -> i8vec1: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i8vec1: ... @overload def __rmatmul__(self, other: glm_typing.I8Vector1) -> i8vec1: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i8vec1: ... @overload def __imatmul__(self, other: glm_typing.I8Vector1) -> i8vec1: ... def __divmod__(self, other: i8vec1) -> Tuple[i8vec1, i8vec1]: ... class i8vec2: x: int y: int @property def xy(self) -> i8vec2: ... @xy.setter def xy(self, value: glm_typing.I8Vector2) -> None: ... @property def yx(self) -> i8vec2: ... @yx.setter def yx(self, value: glm_typing.I8Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.IAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i8vec2: ... def __pos__(self) -> i8vec2: ... def __abs__(self) -> i8vec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i8vec2: ... def __add__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __radd__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __iadd__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __sub__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __rsub__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __isub__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... @overload def __mul__(self, other: glm_typing.Number) -> i8vec2: ... @overload def __mul__(self, other: glm_typing.I8Vector2) -> i8vec2: ... @overload def __rmul__(self, other: glm_typing.Number) -> i8vec2: ... @overload def __rmul__(self, other: glm_typing.I8Vector2) -> i8vec2: ... @overload def __imul__(self, other: glm_typing.Number) -> i8vec2: ... @overload def __imul__(self, other: glm_typing.I8Vector2) -> i8vec2: ... def __mod__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __rmod__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __imod__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __pow__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __rpow__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __ipow__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __truediv__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __rtruediv__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __itruediv__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __floordiv__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __rfloordiv__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __ifloordiv__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> i8vec2: ... @overload def __matmul__(self, other: glm_typing.I8Vector2) -> i8vec2: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i8vec2: ... @overload def __rmatmul__(self, other: glm_typing.I8Vector2) -> i8vec2: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i8vec2: ... @overload def __imatmul__(self, other: glm_typing.I8Vector2) -> i8vec2: ... def __divmod__(self, other: i8vec2) -> Tuple[i8vec2, i8vec2]: ... class i8vec3: x: int y: int z: int @property def xy(self) -> i8vec2: ... @xy.setter def xy(self, value: glm_typing.I8Vector2) -> None: ... @property def yx(self) -> i8vec2: ... @yx.setter def yx(self, value: glm_typing.I8Vector2) -> None: ... @property def xz(self) -> i8vec2: ... @xz.setter def xz(self, value: glm_typing.I8Vector2) -> None: ... @property def zx(self) -> i8vec2: ... @zx.setter def zx(self, value: glm_typing.I8Vector2) -> None: ... @property def yz(self) -> i8vec2: ... @yz.setter def yz(self, value: glm_typing.I8Vector2) -> None: ... @property def zy(self) -> i8vec2: ... @zy.setter def zy(self, value: glm_typing.I8Vector2) -> None: ... @property def xyz(self) -> i8vec3: ... @xyz.setter def xyz(self, value: glm_typing.I8Vector3) -> None: ... @property def xzy(self) -> i8vec3: ... @xzy.setter def xzy(self, value: glm_typing.I8Vector3) -> None: ... @property def yxz(self) -> i8vec3: ... @yxz.setter def yxz(self, value: glm_typing.I8Vector3) -> None: ... @property def yzx(self) -> i8vec3: ... @yzx.setter def yzx(self, value: glm_typing.I8Vector3) -> None: ... @property def zxy(self) -> i8vec3: ... @zxy.setter def zxy(self, value: glm_typing.I8Vector3) -> None: ... @property def zyx(self) -> i8vec3: ... @zyx.setter def zyx(self, value: glm_typing.I8Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i8vec3: ... def __pos__(self) -> i8vec3: ... def __abs__(self) -> i8vec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i8vec3: ... def __add__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __radd__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __iadd__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __sub__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __rsub__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __isub__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... @overload def __mul__(self, other: glm_typing.Number) -> i8vec3: ... @overload def __mul__(self, other: glm_typing.I8Vector3) -> i8vec3: ... @overload def __rmul__(self, other: glm_typing.Number) -> i8vec3: ... @overload def __rmul__(self, other: glm_typing.I8Vector3) -> i8vec3: ... @overload def __imul__(self, other: glm_typing.Number) -> i8vec3: ... @overload def __imul__(self, other: glm_typing.I8Vector3) -> i8vec3: ... def __mod__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __rmod__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __imod__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __pow__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __rpow__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __ipow__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __truediv__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __rtruediv__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __itruediv__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __floordiv__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __rfloordiv__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __ifloordiv__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> i8vec3: ... @overload def __matmul__(self, other: glm_typing.I8Vector3) -> i8vec3: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i8vec3: ... @overload def __rmatmul__(self, other: glm_typing.I8Vector3) -> i8vec3: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i8vec3: ... @overload def __imatmul__(self, other: glm_typing.I8Vector3) -> i8vec3: ... def __divmod__(self, other: i8vec3) -> Tuple[i8vec3, i8vec3]: ... class i8vec4: x: int y: int z: int w: int @property def xy(self) -> i8vec2: ... @xy.setter def xy(self, value: glm_typing.I8Vector2) -> None: ... @property def yx(self) -> i8vec2: ... @yx.setter def yx(self, value: glm_typing.I8Vector2) -> None: ... @property def xz(self) -> i8vec2: ... @xz.setter def xz(self, value: glm_typing.I8Vector2) -> None: ... @property def zx(self) -> i8vec2: ... @zx.setter def zx(self, value: glm_typing.I8Vector2) -> None: ... @property def xw(self) -> i8vec2: ... @xw.setter def xw(self, value: glm_typing.I8Vector2) -> None: ... @property def wx(self) -> i8vec2: ... @wx.setter def wx(self, value: glm_typing.I8Vector2) -> None: ... @property def yz(self) -> i8vec2: ... @yz.setter def yz(self, value: glm_typing.I8Vector2) -> None: ... @property def zy(self) -> i8vec2: ... @zy.setter def zy(self, value: glm_typing.I8Vector2) -> None: ... @property def yw(self) -> i8vec2: ... @yw.setter def yw(self, value: glm_typing.I8Vector2) -> None: ... @property def wy(self) -> i8vec2: ... @wy.setter def wy(self, value: glm_typing.I8Vector2) -> None: ... @property def zw(self) -> i8vec2: ... @zw.setter def zw(self, value: glm_typing.I8Vector2) -> None: ... @property def wz(self) -> i8vec2: ... @wz.setter def wz(self, value: glm_typing.I8Vector2) -> None: ... @property def xyz(self) -> i8vec3: ... @xyz.setter def xyz(self, value: glm_typing.I8Vector3) -> None: ... @property def xzy(self) -> i8vec3: ... @xzy.setter def xzy(self, value: glm_typing.I8Vector3) -> None: ... @property def yxz(self) -> i8vec3: ... @yxz.setter def yxz(self, value: glm_typing.I8Vector3) -> None: ... @property def yzx(self) -> i8vec3: ... @yzx.setter def yzx(self, value: glm_typing.I8Vector3) -> None: ... @property def zxy(self) -> i8vec3: ... @zxy.setter def zxy(self, value: glm_typing.I8Vector3) -> None: ... @property def zyx(self) -> i8vec3: ... @zyx.setter def zyx(self, value: glm_typing.I8Vector3) -> None: ... @property def xyw(self) -> i8vec3: ... @xyw.setter def xyw(self, value: glm_typing.I8Vector3) -> None: ... @property def xwy(self) -> i8vec3: ... @xwy.setter def xwy(self, value: glm_typing.I8Vector3) -> None: ... @property def yxw(self) -> i8vec3: ... @yxw.setter def yxw(self, value: glm_typing.I8Vector3) -> None: ... @property def ywx(self) -> i8vec3: ... @ywx.setter def ywx(self, value: glm_typing.I8Vector3) -> None: ... @property def wxy(self) -> i8vec3: ... @wxy.setter def wxy(self, value: glm_typing.I8Vector3) -> None: ... @property def wyx(self) -> i8vec3: ... @wyx.setter def wyx(self, value: glm_typing.I8Vector3) -> None: ... @property def xzw(self) -> i8vec3: ... @xzw.setter def xzw(self, value: glm_typing.I8Vector3) -> None: ... @property def xwz(self) -> i8vec3: ... @xwz.setter def xwz(self, value: glm_typing.I8Vector3) -> None: ... @property def zxw(self) -> i8vec3: ... @zxw.setter def zxw(self, value: glm_typing.I8Vector3) -> None: ... @property def zwx(self) -> i8vec3: ... @zwx.setter def zwx(self, value: glm_typing.I8Vector3) -> None: ... @property def wxz(self) -> i8vec3: ... @wxz.setter def wxz(self, value: glm_typing.I8Vector3) -> None: ... @property def wzx(self) -> i8vec3: ... @wzx.setter def wzx(self, value: glm_typing.I8Vector3) -> None: ... @property def yzw(self) -> i8vec3: ... @yzw.setter def yzw(self, value: glm_typing.I8Vector3) -> None: ... @property def ywz(self) -> i8vec3: ... @ywz.setter def ywz(self, value: glm_typing.I8Vector3) -> None: ... @property def zyw(self) -> i8vec3: ... @zyw.setter def zyw(self, value: glm_typing.I8Vector3) -> None: ... @property def zwy(self) -> i8vec3: ... @zwy.setter def zwy(self, value: glm_typing.I8Vector3) -> None: ... @property def wyz(self) -> i8vec3: ... @wyz.setter def wyz(self, value: glm_typing.I8Vector3) -> None: ... @property def wzy(self) -> i8vec3: ... @wzy.setter def wzy(self, value: glm_typing.I8Vector3) -> None: ... @property def xyzw(self) -> i8vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.I8Vector4) -> None: ... @property def xywz(self) -> i8vec4: ... @xywz.setter def xywz(self, value: glm_typing.I8Vector4) -> None: ... @property def xzyw(self) -> i8vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.I8Vector4) -> None: ... @property def xzwy(self) -> i8vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.I8Vector4) -> None: ... @property def xwyz(self) -> i8vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.I8Vector4) -> None: ... @property def xwzy(self) -> i8vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.I8Vector4) -> None: ... @property def yxzw(self) -> i8vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.I8Vector4) -> None: ... @property def yxwz(self) -> i8vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.I8Vector4) -> None: ... @property def yzxw(self) -> i8vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.I8Vector4) -> None: ... @property def yzwx(self) -> i8vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.I8Vector4) -> None: ... @property def ywxz(self) -> i8vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.I8Vector4) -> None: ... @property def ywzx(self) -> i8vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.I8Vector4) -> None: ... @property def zxyw(self) -> i8vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.I8Vector4) -> None: ... @property def zxwy(self) -> i8vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.I8Vector4) -> None: ... @property def zyxw(self) -> i8vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.I8Vector4) -> None: ... @property def zywx(self) -> i8vec4: ... @zywx.setter def zywx(self, value: glm_typing.I8Vector4) -> None: ... @property def zwxy(self) -> i8vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.I8Vector4) -> None: ... @property def zwyx(self) -> i8vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.I8Vector4) -> None: ... @property def wxyz(self) -> i8vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.I8Vector4) -> None: ... @property def wxzy(self) -> i8vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.I8Vector4) -> None: ... @property def wyxz(self) -> i8vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.I8Vector4) -> None: ... @property def wyzx(self) -> i8vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.I8Vector4) -> None: ... @property def wzxy(self) -> i8vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.I8Vector4) -> None: ... @property def wzyx(self) -> i8vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.I8Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i8vec4: ... def __pos__(self) -> i8vec4: ... def __abs__(self) -> i8vec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i8vec4: ... def __add__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __radd__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __iadd__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __sub__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __rsub__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __isub__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... @overload def __mul__(self, other: glm_typing.Number) -> i8vec4: ... @overload def __mul__(self, other: glm_typing.I8Vector4) -> i8vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> i8vec4: ... @overload def __rmul__(self, other: glm_typing.I8Vector4) -> i8vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> i8vec4: ... @overload def __imul__(self, other: glm_typing.I8Vector4) -> i8vec4: ... def __mod__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __rmod__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __imod__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __pow__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __rpow__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __ipow__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __truediv__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __rtruediv__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __itruediv__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __floordiv__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __rfloordiv__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __ifloordiv__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> i8vec4: ... @overload def __matmul__(self, other: glm_typing.I8Vector4) -> i8vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i8vec4: ... @overload def __rmatmul__(self, other: glm_typing.I8Vector4) -> i8vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i8vec4: ... @overload def __imatmul__(self, other: glm_typing.I8Vector4) -> i8vec4: ... def __divmod__(self, other: i8vec4) -> Tuple[i8vec4, i8vec4]: ... class imvec2: x: int y: int @property def xy(self) -> i32vec2: ... @xy.setter def xy(self, value: glm_typing.I32Vector2) -> None: ... @property def yx(self) -> i32vec2: ... @yx.setter def yx(self, value: glm_typing.I32Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.IAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> imvec2: ... def __pos__(self) -> imvec2: ... def __abs__(self) -> imvec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imvec2: ... def __add__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __radd__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __iadd__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __sub__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __rsub__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __isub__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... @overload def __mul__(self, other: glm_typing.Number) -> imvec2: ... @overload def __mul__(self, other: glm_typing.I32Vector2) -> imvec2: ... @overload def __mul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> imvec2: ... @overload def __rmul__(self, other: glm_typing.I32Vector2) -> imvec2: ... @overload def __rmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> imvec2: ... @overload def __imul__(self, other: glm_typing.I32Vector2) -> imvec2: ... @overload def __imul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __rmod__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __imod__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __pow__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __rpow__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __ipow__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __truediv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __rtruediv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __itruediv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __floordiv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __rfloordiv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __ifloordiv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> imvec2: ... @overload def __matmul__(self, other: glm_typing.I32Vector2) -> imvec2: ... @overload def __matmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> imvec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector2) -> imvec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> imvec2: ... @overload def __imatmul__(self, other: glm_typing.I32Vector2) -> imvec2: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __divmod__(self, other: imvec2) -> Tuple[imvec2, imvec2]: ... class imvec3: x: int y: int z: int @property def xy(self) -> i32vec2: ... @xy.setter def xy(self, value: glm_typing.I32Vector2) -> None: ... @property def yx(self) -> i32vec2: ... @yx.setter def yx(self, value: glm_typing.I32Vector2) -> None: ... @property def xz(self) -> i32vec2: ... @xz.setter def xz(self, value: glm_typing.I32Vector2) -> None: ... @property def zx(self) -> i32vec2: ... @zx.setter def zx(self, value: glm_typing.I32Vector2) -> None: ... @property def yz(self) -> i32vec2: ... @yz.setter def yz(self, value: glm_typing.I32Vector2) -> None: ... @property def zy(self) -> i32vec2: ... @zy.setter def zy(self, value: glm_typing.I32Vector2) -> None: ... @property def xyz(self) -> i32vec3: ... @xyz.setter def xyz(self, value: glm_typing.I32Vector3) -> None: ... @property def xzy(self) -> i32vec3: ... @xzy.setter def xzy(self, value: glm_typing.I32Vector3) -> None: ... @property def yxz(self) -> i32vec3: ... @yxz.setter def yxz(self, value: glm_typing.I32Vector3) -> None: ... @property def yzx(self) -> i32vec3: ... @yzx.setter def yzx(self, value: glm_typing.I32Vector3) -> None: ... @property def zxy(self) -> i32vec3: ... @zxy.setter def zxy(self, value: glm_typing.I32Vector3) -> None: ... @property def zyx(self) -> i32vec3: ... @zyx.setter def zyx(self, value: glm_typing.I32Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> imvec3: ... def __pos__(self) -> imvec3: ... def __abs__(self) -> imvec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imvec3: ... def __add__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __radd__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __iadd__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __sub__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __rsub__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __isub__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... @overload def __mul__(self, other: glm_typing.Number) -> imvec3: ... @overload def __mul__(self, other: glm_typing.I32Vector3) -> imvec3: ... @overload def __mul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> imvec3: ... @overload def __rmul__(self, other: glm_typing.I32Vector3) -> imvec3: ... @overload def __rmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> imvec3: ... @overload def __imul__(self, other: glm_typing.I32Vector3) -> imvec3: ... @overload def __imul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __rmod__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __imod__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __pow__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __rpow__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __ipow__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __truediv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __rtruediv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __itruediv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __floordiv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __rfloordiv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __ifloordiv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> imvec3: ... @overload def __matmul__(self, other: glm_typing.I32Vector3) -> imvec3: ... @overload def __matmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> imvec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector3) -> imvec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> imvec3: ... @overload def __imatmul__(self, other: glm_typing.I32Vector3) -> imvec3: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __divmod__(self, other: imvec3) -> Tuple[imvec3, imvec3]: ... class imvec4: x: int y: int z: int w: int @property def xy(self) -> i32vec2: ... @xy.setter def xy(self, value: glm_typing.I32Vector2) -> None: ... @property def yx(self) -> i32vec2: ... @yx.setter def yx(self, value: glm_typing.I32Vector2) -> None: ... @property def xz(self) -> i32vec2: ... @xz.setter def xz(self, value: glm_typing.I32Vector2) -> None: ... @property def zx(self) -> i32vec2: ... @zx.setter def zx(self, value: glm_typing.I32Vector2) -> None: ... @property def xw(self) -> i32vec2: ... @xw.setter def xw(self, value: glm_typing.I32Vector2) -> None: ... @property def wx(self) -> i32vec2: ... @wx.setter def wx(self, value: glm_typing.I32Vector2) -> None: ... @property def yz(self) -> i32vec2: ... @yz.setter def yz(self, value: glm_typing.I32Vector2) -> None: ... @property def zy(self) -> i32vec2: ... @zy.setter def zy(self, value: glm_typing.I32Vector2) -> None: ... @property def yw(self) -> i32vec2: ... @yw.setter def yw(self, value: glm_typing.I32Vector2) -> None: ... @property def wy(self) -> i32vec2: ... @wy.setter def wy(self, value: glm_typing.I32Vector2) -> None: ... @property def zw(self) -> i32vec2: ... @zw.setter def zw(self, value: glm_typing.I32Vector2) -> None: ... @property def wz(self) -> i32vec2: ... @wz.setter def wz(self, value: glm_typing.I32Vector2) -> None: ... @property def xyz(self) -> i32vec3: ... @xyz.setter def xyz(self, value: glm_typing.I32Vector3) -> None: ... @property def xzy(self) -> i32vec3: ... @xzy.setter def xzy(self, value: glm_typing.I32Vector3) -> None: ... @property def yxz(self) -> i32vec3: ... @yxz.setter def yxz(self, value: glm_typing.I32Vector3) -> None: ... @property def yzx(self) -> i32vec3: ... @yzx.setter def yzx(self, value: glm_typing.I32Vector3) -> None: ... @property def zxy(self) -> i32vec3: ... @zxy.setter def zxy(self, value: glm_typing.I32Vector3) -> None: ... @property def zyx(self) -> i32vec3: ... @zyx.setter def zyx(self, value: glm_typing.I32Vector3) -> None: ... @property def xyw(self) -> i32vec3: ... @xyw.setter def xyw(self, value: glm_typing.I32Vector3) -> None: ... @property def xwy(self) -> i32vec3: ... @xwy.setter def xwy(self, value: glm_typing.I32Vector3) -> None: ... @property def yxw(self) -> i32vec3: ... @yxw.setter def yxw(self, value: glm_typing.I32Vector3) -> None: ... @property def ywx(self) -> i32vec3: ... @ywx.setter def ywx(self, value: glm_typing.I32Vector3) -> None: ... @property def wxy(self) -> i32vec3: ... @wxy.setter def wxy(self, value: glm_typing.I32Vector3) -> None: ... @property def wyx(self) -> i32vec3: ... @wyx.setter def wyx(self, value: glm_typing.I32Vector3) -> None: ... @property def xzw(self) -> i32vec3: ... @xzw.setter def xzw(self, value: glm_typing.I32Vector3) -> None: ... @property def xwz(self) -> i32vec3: ... @xwz.setter def xwz(self, value: glm_typing.I32Vector3) -> None: ... @property def zxw(self) -> i32vec3: ... @zxw.setter def zxw(self, value: glm_typing.I32Vector3) -> None: ... @property def zwx(self) -> i32vec3: ... @zwx.setter def zwx(self, value: glm_typing.I32Vector3) -> None: ... @property def wxz(self) -> i32vec3: ... @wxz.setter def wxz(self, value: glm_typing.I32Vector3) -> None: ... @property def wzx(self) -> i32vec3: ... @wzx.setter def wzx(self, value: glm_typing.I32Vector3) -> None: ... @property def yzw(self) -> i32vec3: ... @yzw.setter def yzw(self, value: glm_typing.I32Vector3) -> None: ... @property def ywz(self) -> i32vec3: ... @ywz.setter def ywz(self, value: glm_typing.I32Vector3) -> None: ... @property def zyw(self) -> i32vec3: ... @zyw.setter def zyw(self, value: glm_typing.I32Vector3) -> None: ... @property def zwy(self) -> i32vec3: ... @zwy.setter def zwy(self, value: glm_typing.I32Vector3) -> None: ... @property def wyz(self) -> i32vec3: ... @wyz.setter def wyz(self, value: glm_typing.I32Vector3) -> None: ... @property def wzy(self) -> i32vec3: ... @wzy.setter def wzy(self, value: glm_typing.I32Vector3) -> None: ... @property def xyzw(self) -> i32vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.I32Vector4) -> None: ... @property def xywz(self) -> i32vec4: ... @xywz.setter def xywz(self, value: glm_typing.I32Vector4) -> None: ... @property def xzyw(self) -> i32vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.I32Vector4) -> None: ... @property def xzwy(self) -> i32vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.I32Vector4) -> None: ... @property def xwyz(self) -> i32vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.I32Vector4) -> None: ... @property def xwzy(self) -> i32vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.I32Vector4) -> None: ... @property def yxzw(self) -> i32vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.I32Vector4) -> None: ... @property def yxwz(self) -> i32vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.I32Vector4) -> None: ... @property def yzxw(self) -> i32vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.I32Vector4) -> None: ... @property def yzwx(self) -> i32vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.I32Vector4) -> None: ... @property def ywxz(self) -> i32vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.I32Vector4) -> None: ... @property def ywzx(self) -> i32vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.I32Vector4) -> None: ... @property def zxyw(self) -> i32vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.I32Vector4) -> None: ... @property def zxwy(self) -> i32vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.I32Vector4) -> None: ... @property def zyxw(self) -> i32vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.I32Vector4) -> None: ... @property def zywx(self) -> i32vec4: ... @zywx.setter def zywx(self, value: glm_typing.I32Vector4) -> None: ... @property def zwxy(self) -> i32vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.I32Vector4) -> None: ... @property def zwyx(self) -> i32vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.I32Vector4) -> None: ... @property def wxyz(self) -> i32vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.I32Vector4) -> None: ... @property def wxzy(self) -> i32vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.I32Vector4) -> None: ... @property def wyxz(self) -> i32vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.I32Vector4) -> None: ... @property def wyzx(self) -> i32vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.I32Vector4) -> None: ... @property def wzxy(self) -> i32vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.I32Vector4) -> None: ... @property def wzyx(self) -> i32vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.I32Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> imvec4: ... def __pos__(self) -> imvec4: ... def __abs__(self) -> imvec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imvec4: ... def __add__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __radd__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __iadd__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __sub__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __rsub__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __isub__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... @overload def __mul__(self, other: glm_typing.Number) -> imvec4: ... @overload def __mul__(self, other: glm_typing.I32Vector4) -> imvec4: ... @overload def __mul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> imvec4: ... @overload def __rmul__(self, other: glm_typing.I32Vector4) -> imvec4: ... @overload def __rmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> imvec4: ... @overload def __imul__(self, other: glm_typing.I32Vector4) -> imvec4: ... @overload def __imul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __rmod__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __imod__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __pow__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __rpow__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __ipow__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __truediv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __rtruediv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __itruediv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __floordiv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __rfloordiv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __ifloordiv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> imvec4: ... @overload def __matmul__(self, other: glm_typing.I32Vector4) -> imvec4: ... @overload def __matmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> imvec4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector4) -> imvec4: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> imvec4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector4) -> imvec4: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __divmod__(self, other: imvec4) -> Tuple[imvec4, imvec4]: ... i32vec1 = ivec1 class ivec1: x: int @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.IAnyVector2, glm_typing.IAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> ivec1: ... def __pos__(self) -> ivec1: ... def __abs__(self) -> ivec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> ivec1: ... def __add__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __radd__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __iadd__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __sub__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __rsub__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __isub__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... @overload def __mul__(self, other: glm_typing.Number) -> ivec1: ... @overload def __mul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __mul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> ivec1: ... @overload def __rmul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __rmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> ivec1: ... @overload def __imul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __imul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __rmod__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __imod__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __pow__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __rpow__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __ipow__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __truediv__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __rtruediv__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __itruediv__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __floordiv__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __rfloordiv__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __ifloordiv__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> ivec1: ... @overload def __matmul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __matmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> ivec1: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> ivec1: ... @overload def __imatmul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __divmod__(self, other: ivec1) -> Tuple[ivec1, ivec1]: ... i32vec2 = ivec2 class ivec2: x: int y: int @property def xy(self) -> i32vec2: ... @xy.setter def xy(self, value: glm_typing.I32Vector2) -> None: ... @property def yx(self) -> i32vec2: ... @yx.setter def yx(self, value: glm_typing.I32Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.IAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> ivec2: ... def __pos__(self) -> ivec2: ... def __abs__(self) -> ivec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> ivec2: ... def __add__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __radd__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __iadd__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __sub__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __rsub__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __isub__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... @overload def __mul__(self, other: glm_typing.Number) -> ivec2: ... @overload def __mul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __mul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> ivec2: ... @overload def __rmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __rmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> ivec2: ... @overload def __imul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __imul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __rmod__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __imod__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __pow__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __rpow__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __ipow__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __truediv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __rtruediv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __itruediv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __floordiv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __rfloordiv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __ifloordiv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> ivec2: ... @overload def __matmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __matmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> ivec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> ivec2: ... @overload def __imatmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __divmod__(self, other: ivec2) -> Tuple[ivec2, ivec2]: ... i32vec3 = ivec3 class ivec3: x: int y: int z: int @property def xy(self) -> i32vec2: ... @xy.setter def xy(self, value: glm_typing.I32Vector2) -> None: ... @property def yx(self) -> i32vec2: ... @yx.setter def yx(self, value: glm_typing.I32Vector2) -> None: ... @property def xz(self) -> i32vec2: ... @xz.setter def xz(self, value: glm_typing.I32Vector2) -> None: ... @property def zx(self) -> i32vec2: ... @zx.setter def zx(self, value: glm_typing.I32Vector2) -> None: ... @property def yz(self) -> i32vec2: ... @yz.setter def yz(self, value: glm_typing.I32Vector2) -> None: ... @property def zy(self) -> i32vec2: ... @zy.setter def zy(self, value: glm_typing.I32Vector2) -> None: ... @property def xyz(self) -> i32vec3: ... @xyz.setter def xyz(self, value: glm_typing.I32Vector3) -> None: ... @property def xzy(self) -> i32vec3: ... @xzy.setter def xzy(self, value: glm_typing.I32Vector3) -> None: ... @property def yxz(self) -> i32vec3: ... @yxz.setter def yxz(self, value: glm_typing.I32Vector3) -> None: ... @property def yzx(self) -> i32vec3: ... @yzx.setter def yzx(self, value: glm_typing.I32Vector3) -> None: ... @property def zxy(self) -> i32vec3: ... @zxy.setter def zxy(self, value: glm_typing.I32Vector3) -> None: ... @property def zyx(self) -> i32vec3: ... @zyx.setter def zyx(self, value: glm_typing.I32Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> ivec3: ... def __pos__(self) -> ivec3: ... def __abs__(self) -> ivec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> ivec3: ... def __add__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __radd__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __iadd__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __sub__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __rsub__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __isub__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... @overload def __mul__(self, other: glm_typing.Number) -> ivec3: ... @overload def __mul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __mul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> ivec3: ... @overload def __rmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __rmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> ivec3: ... @overload def __imul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __imul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __rmod__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __imod__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __pow__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __rpow__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __ipow__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __truediv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __rtruediv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __itruediv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __floordiv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __rfloordiv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __ifloordiv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> ivec3: ... @overload def __matmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __matmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> ivec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> ivec3: ... @overload def __imatmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __divmod__(self, other: ivec3) -> Tuple[ivec3, ivec3]: ... i32vec4 = ivec4 class ivec4: x: int y: int z: int w: int @property def xy(self) -> i32vec2: ... @xy.setter def xy(self, value: glm_typing.I32Vector2) -> None: ... @property def yx(self) -> i32vec2: ... @yx.setter def yx(self, value: glm_typing.I32Vector2) -> None: ... @property def xz(self) -> i32vec2: ... @xz.setter def xz(self, value: glm_typing.I32Vector2) -> None: ... @property def zx(self) -> i32vec2: ... @zx.setter def zx(self, value: glm_typing.I32Vector2) -> None: ... @property def xw(self) -> i32vec2: ... @xw.setter def xw(self, value: glm_typing.I32Vector2) -> None: ... @property def wx(self) -> i32vec2: ... @wx.setter def wx(self, value: glm_typing.I32Vector2) -> None: ... @property def yz(self) -> i32vec2: ... @yz.setter def yz(self, value: glm_typing.I32Vector2) -> None: ... @property def zy(self) -> i32vec2: ... @zy.setter def zy(self, value: glm_typing.I32Vector2) -> None: ... @property def yw(self) -> i32vec2: ... @yw.setter def yw(self, value: glm_typing.I32Vector2) -> None: ... @property def wy(self) -> i32vec2: ... @wy.setter def wy(self, value: glm_typing.I32Vector2) -> None: ... @property def zw(self) -> i32vec2: ... @zw.setter def zw(self, value: glm_typing.I32Vector2) -> None: ... @property def wz(self) -> i32vec2: ... @wz.setter def wz(self, value: glm_typing.I32Vector2) -> None: ... @property def xyz(self) -> i32vec3: ... @xyz.setter def xyz(self, value: glm_typing.I32Vector3) -> None: ... @property def xzy(self) -> i32vec3: ... @xzy.setter def xzy(self, value: glm_typing.I32Vector3) -> None: ... @property def yxz(self) -> i32vec3: ... @yxz.setter def yxz(self, value: glm_typing.I32Vector3) -> None: ... @property def yzx(self) -> i32vec3: ... @yzx.setter def yzx(self, value: glm_typing.I32Vector3) -> None: ... @property def zxy(self) -> i32vec3: ... @zxy.setter def zxy(self, value: glm_typing.I32Vector3) -> None: ... @property def zyx(self) -> i32vec3: ... @zyx.setter def zyx(self, value: glm_typing.I32Vector3) -> None: ... @property def xyw(self) -> i32vec3: ... @xyw.setter def xyw(self, value: glm_typing.I32Vector3) -> None: ... @property def xwy(self) -> i32vec3: ... @xwy.setter def xwy(self, value: glm_typing.I32Vector3) -> None: ... @property def yxw(self) -> i32vec3: ... @yxw.setter def yxw(self, value: glm_typing.I32Vector3) -> None: ... @property def ywx(self) -> i32vec3: ... @ywx.setter def ywx(self, value: glm_typing.I32Vector3) -> None: ... @property def wxy(self) -> i32vec3: ... @wxy.setter def wxy(self, value: glm_typing.I32Vector3) -> None: ... @property def wyx(self) -> i32vec3: ... @wyx.setter def wyx(self, value: glm_typing.I32Vector3) -> None: ... @property def xzw(self) -> i32vec3: ... @xzw.setter def xzw(self, value: glm_typing.I32Vector3) -> None: ... @property def xwz(self) -> i32vec3: ... @xwz.setter def xwz(self, value: glm_typing.I32Vector3) -> None: ... @property def zxw(self) -> i32vec3: ... @zxw.setter def zxw(self, value: glm_typing.I32Vector3) -> None: ... @property def zwx(self) -> i32vec3: ... @zwx.setter def zwx(self, value: glm_typing.I32Vector3) -> None: ... @property def wxz(self) -> i32vec3: ... @wxz.setter def wxz(self, value: glm_typing.I32Vector3) -> None: ... @property def wzx(self) -> i32vec3: ... @wzx.setter def wzx(self, value: glm_typing.I32Vector3) -> None: ... @property def yzw(self) -> i32vec3: ... @yzw.setter def yzw(self, value: glm_typing.I32Vector3) -> None: ... @property def ywz(self) -> i32vec3: ... @ywz.setter def ywz(self, value: glm_typing.I32Vector3) -> None: ... @property def zyw(self) -> i32vec3: ... @zyw.setter def zyw(self, value: glm_typing.I32Vector3) -> None: ... @property def zwy(self) -> i32vec3: ... @zwy.setter def zwy(self, value: glm_typing.I32Vector3) -> None: ... @property def wyz(self) -> i32vec3: ... @wyz.setter def wyz(self, value: glm_typing.I32Vector3) -> None: ... @property def wzy(self) -> i32vec3: ... @wzy.setter def wzy(self, value: glm_typing.I32Vector3) -> None: ... @property def xyzw(self) -> i32vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.I32Vector4) -> None: ... @property def xywz(self) -> i32vec4: ... @xywz.setter def xywz(self, value: glm_typing.I32Vector4) -> None: ... @property def xzyw(self) -> i32vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.I32Vector4) -> None: ... @property def xzwy(self) -> i32vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.I32Vector4) -> None: ... @property def xwyz(self) -> i32vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.I32Vector4) -> None: ... @property def xwzy(self) -> i32vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.I32Vector4) -> None: ... @property def yxzw(self) -> i32vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.I32Vector4) -> None: ... @property def yxwz(self) -> i32vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.I32Vector4) -> None: ... @property def yzxw(self) -> i32vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.I32Vector4) -> None: ... @property def yzwx(self) -> i32vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.I32Vector4) -> None: ... @property def ywxz(self) -> i32vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.I32Vector4) -> None: ... @property def ywzx(self) -> i32vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.I32Vector4) -> None: ... @property def zxyw(self) -> i32vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.I32Vector4) -> None: ... @property def zxwy(self) -> i32vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.I32Vector4) -> None: ... @property def zyxw(self) -> i32vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.I32Vector4) -> None: ... @property def zywx(self) -> i32vec4: ... @zywx.setter def zywx(self, value: glm_typing.I32Vector4) -> None: ... @property def zwxy(self) -> i32vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.I32Vector4) -> None: ... @property def zwyx(self) -> i32vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.I32Vector4) -> None: ... @property def wxyz(self) -> i32vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.I32Vector4) -> None: ... @property def wxzy(self) -> i32vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.I32Vector4) -> None: ... @property def wyxz(self) -> i32vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.I32Vector4) -> None: ... @property def wyzx(self) -> i32vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.I32Vector4) -> None: ... @property def wzxy(self) -> i32vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.I32Vector4) -> None: ... @property def wzyx(self) -> i32vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.I32Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> ivec4: ... def __pos__(self) -> ivec4: ... def __abs__(self) -> ivec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> ivec4: ... def __add__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __radd__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __iadd__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __sub__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __rsub__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __isub__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... @overload def __mul__(self, other: glm_typing.Number) -> ivec4: ... @overload def __mul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __mul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> ivec4: ... @overload def __rmul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __rmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> ivec4: ... @overload def __imul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __imul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __rmod__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __imod__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __pow__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __rpow__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __ipow__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __truediv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __rtruediv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __itruediv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __floordiv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __rfloordiv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __ifloordiv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> ivec4: ... @overload def __matmul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __matmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> ivec4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> ivec4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __divmod__(self, other: ivec4) -> Tuple[ivec4, ivec4]: ... class mvec2: x: float y: float @property def xy(self) -> f32vec2: ... @xy.setter def xy(self, value: glm_typing.F32Vector2) -> None: ... @property def yx(self) -> f32vec2: ... @yx.setter def yx(self, value: glm_typing.F32Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.FAnyVector3, glm_typing.FAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> mvec2: ... def __pos__(self) -> mvec2: ... def __abs__(self) -> mvec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mvec2: ... def __add__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __radd__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __iadd__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __sub__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __rsub__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __isub__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... @overload def __mul__(self, other: glm_typing.Number) -> mvec2: ... @overload def __mul__(self, other: glm_typing.F32Vector2) -> mvec2: ... @overload def __mul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> mvec2: ... @overload def __rmul__(self, other: glm_typing.F32Vector2) -> mvec2: ... @overload def __rmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> mvec2: ... @overload def __imul__(self, other: glm_typing.F32Vector2) -> mvec2: ... @overload def __imul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __rmod__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __imod__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __pow__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __rpow__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __ipow__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __truediv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __rtruediv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __itruediv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __floordiv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __rfloordiv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __ifloordiv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> mvec2: ... @overload def __matmul__(self, other: glm_typing.F32Vector2) -> mvec2: ... @overload def __matmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> mvec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector2) -> mvec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> mvec2: ... @overload def __imatmul__(self, other: glm_typing.F32Vector2) -> mvec2: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __divmod__(self, other: mvec2) -> Tuple[mvec2, mvec2]: ... class mvec3: x: float y: float z: float @property def xy(self) -> f32vec2: ... @xy.setter def xy(self, value: glm_typing.F32Vector2) -> None: ... @property def yx(self) -> f32vec2: ... @yx.setter def yx(self, value: glm_typing.F32Vector2) -> None: ... @property def xz(self) -> f32vec2: ... @xz.setter def xz(self, value: glm_typing.F32Vector2) -> None: ... @property def zx(self) -> f32vec2: ... @zx.setter def zx(self, value: glm_typing.F32Vector2) -> None: ... @property def yz(self) -> f32vec2: ... @yz.setter def yz(self, value: glm_typing.F32Vector2) -> None: ... @property def zy(self) -> f32vec2: ... @zy.setter def zy(self, value: glm_typing.F32Vector2) -> None: ... @property def xyz(self) -> f32vec3: ... @xyz.setter def xyz(self, value: glm_typing.F32Vector3) -> None: ... @property def xzy(self) -> f32vec3: ... @xzy.setter def xzy(self, value: glm_typing.F32Vector3) -> None: ... @property def yxz(self) -> f32vec3: ... @yxz.setter def yxz(self, value: glm_typing.F32Vector3) -> None: ... @property def yzx(self) -> f32vec3: ... @yzx.setter def yzx(self, value: glm_typing.F32Vector3) -> None: ... @property def zxy(self) -> f32vec3: ... @zxy.setter def zxy(self, value: glm_typing.F32Vector3) -> None: ... @property def zyx(self) -> f32vec3: ... @zyx.setter def zyx(self, value: glm_typing.F32Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.FAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> mvec3: ... def __pos__(self) -> mvec3: ... def __abs__(self) -> mvec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mvec3: ... def __add__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __radd__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __iadd__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __sub__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __rsub__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __isub__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... @overload def __mul__(self, other: glm_typing.Number) -> mvec3: ... @overload def __mul__(self, other: glm_typing.F32Vector3) -> mvec3: ... @overload def __mul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> mvec3: ... @overload def __rmul__(self, other: glm_typing.F32Vector3) -> mvec3: ... @overload def __rmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> mvec3: ... @overload def __imul__(self, other: glm_typing.F32Vector3) -> mvec3: ... @overload def __imul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __rmod__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __imod__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __pow__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __rpow__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __ipow__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __truediv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __rtruediv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __itruediv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __floordiv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __rfloordiv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __ifloordiv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> mvec3: ... @overload def __matmul__(self, other: glm_typing.F32Vector3) -> mvec3: ... @overload def __matmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> mvec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector3) -> mvec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> mvec3: ... @overload def __imatmul__(self, other: glm_typing.F32Vector3) -> mvec3: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __divmod__(self, other: mvec3) -> Tuple[mvec3, mvec3]: ... class mvec4: x: float y: float z: float w: float @property def xy(self) -> f32vec2: ... @xy.setter def xy(self, value: glm_typing.F32Vector2) -> None: ... @property def yx(self) -> f32vec2: ... @yx.setter def yx(self, value: glm_typing.F32Vector2) -> None: ... @property def xz(self) -> f32vec2: ... @xz.setter def xz(self, value: glm_typing.F32Vector2) -> None: ... @property def zx(self) -> f32vec2: ... @zx.setter def zx(self, value: glm_typing.F32Vector2) -> None: ... @property def xw(self) -> f32vec2: ... @xw.setter def xw(self, value: glm_typing.F32Vector2) -> None: ... @property def wx(self) -> f32vec2: ... @wx.setter def wx(self, value: glm_typing.F32Vector2) -> None: ... @property def yz(self) -> f32vec2: ... @yz.setter def yz(self, value: glm_typing.F32Vector2) -> None: ... @property def zy(self) -> f32vec2: ... @zy.setter def zy(self, value: glm_typing.F32Vector2) -> None: ... @property def yw(self) -> f32vec2: ... @yw.setter def yw(self, value: glm_typing.F32Vector2) -> None: ... @property def wy(self) -> f32vec2: ... @wy.setter def wy(self, value: glm_typing.F32Vector2) -> None: ... @property def zw(self) -> f32vec2: ... @zw.setter def zw(self, value: glm_typing.F32Vector2) -> None: ... @property def wz(self) -> f32vec2: ... @wz.setter def wz(self, value: glm_typing.F32Vector2) -> None: ... @property def xyz(self) -> f32vec3: ... @xyz.setter def xyz(self, value: glm_typing.F32Vector3) -> None: ... @property def xzy(self) -> f32vec3: ... @xzy.setter def xzy(self, value: glm_typing.F32Vector3) -> None: ... @property def yxz(self) -> f32vec3: ... @yxz.setter def yxz(self, value: glm_typing.F32Vector3) -> None: ... @property def yzx(self) -> f32vec3: ... @yzx.setter def yzx(self, value: glm_typing.F32Vector3) -> None: ... @property def zxy(self) -> f32vec3: ... @zxy.setter def zxy(self, value: glm_typing.F32Vector3) -> None: ... @property def zyx(self) -> f32vec3: ... @zyx.setter def zyx(self, value: glm_typing.F32Vector3) -> None: ... @property def xyw(self) -> f32vec3: ... @xyw.setter def xyw(self, value: glm_typing.F32Vector3) -> None: ... @property def xwy(self) -> f32vec3: ... @xwy.setter def xwy(self, value: glm_typing.F32Vector3) -> None: ... @property def yxw(self) -> f32vec3: ... @yxw.setter def yxw(self, value: glm_typing.F32Vector3) -> None: ... @property def ywx(self) -> f32vec3: ... @ywx.setter def ywx(self, value: glm_typing.F32Vector3) -> None: ... @property def wxy(self) -> f32vec3: ... @wxy.setter def wxy(self, value: glm_typing.F32Vector3) -> None: ... @property def wyx(self) -> f32vec3: ... @wyx.setter def wyx(self, value: glm_typing.F32Vector3) -> None: ... @property def xzw(self) -> f32vec3: ... @xzw.setter def xzw(self, value: glm_typing.F32Vector3) -> None: ... @property def xwz(self) -> f32vec3: ... @xwz.setter def xwz(self, value: glm_typing.F32Vector3) -> None: ... @property def zxw(self) -> f32vec3: ... @zxw.setter def zxw(self, value: glm_typing.F32Vector3) -> None: ... @property def zwx(self) -> f32vec3: ... @zwx.setter def zwx(self, value: glm_typing.F32Vector3) -> None: ... @property def wxz(self) -> f32vec3: ... @wxz.setter def wxz(self, value: glm_typing.F32Vector3) -> None: ... @property def wzx(self) -> f32vec3: ... @wzx.setter def wzx(self, value: glm_typing.F32Vector3) -> None: ... @property def yzw(self) -> f32vec3: ... @yzw.setter def yzw(self, value: glm_typing.F32Vector3) -> None: ... @property def ywz(self) -> f32vec3: ... @ywz.setter def ywz(self, value: glm_typing.F32Vector3) -> None: ... @property def zyw(self) -> f32vec3: ... @zyw.setter def zyw(self, value: glm_typing.F32Vector3) -> None: ... @property def zwy(self) -> f32vec3: ... @zwy.setter def zwy(self, value: glm_typing.F32Vector3) -> None: ... @property def wyz(self) -> f32vec3: ... @wyz.setter def wyz(self, value: glm_typing.F32Vector3) -> None: ... @property def wzy(self) -> f32vec3: ... @wzy.setter def wzy(self, value: glm_typing.F32Vector3) -> None: ... @property def xyzw(self) -> f32vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.F32Vector4) -> None: ... @property def xywz(self) -> f32vec4: ... @xywz.setter def xywz(self, value: glm_typing.F32Vector4) -> None: ... @property def xzyw(self) -> f32vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.F32Vector4) -> None: ... @property def xzwy(self) -> f32vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.F32Vector4) -> None: ... @property def xwyz(self) -> f32vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.F32Vector4) -> None: ... @property def xwzy(self) -> f32vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.F32Vector4) -> None: ... @property def yxzw(self) -> f32vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.F32Vector4) -> None: ... @property def yxwz(self) -> f32vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.F32Vector4) -> None: ... @property def yzxw(self) -> f32vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.F32Vector4) -> None: ... @property def yzwx(self) -> f32vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.F32Vector4) -> None: ... @property def ywxz(self) -> f32vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.F32Vector4) -> None: ... @property def ywzx(self) -> f32vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.F32Vector4) -> None: ... @property def zxyw(self) -> f32vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.F32Vector4) -> None: ... @property def zxwy(self) -> f32vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.F32Vector4) -> None: ... @property def zyxw(self) -> f32vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.F32Vector4) -> None: ... @property def zywx(self) -> f32vec4: ... @zywx.setter def zywx(self, value: glm_typing.F32Vector4) -> None: ... @property def zwxy(self) -> f32vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.F32Vector4) -> None: ... @property def zwyx(self) -> f32vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.F32Vector4) -> None: ... @property def wxyz(self) -> f32vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.F32Vector4) -> None: ... @property def wxzy(self) -> f32vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.F32Vector4) -> None: ... @property def wyxz(self) -> f32vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.F32Vector4) -> None: ... @property def wyzx(self) -> f32vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.F32Vector4) -> None: ... @property def wzxy(self) -> f32vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.F32Vector4) -> None: ... @property def wzyx(self) -> f32vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.F32Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> mvec4: ... def __pos__(self) -> mvec4: ... def __abs__(self) -> mvec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float, float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mvec4: ... def __add__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __radd__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __iadd__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __sub__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __rsub__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __isub__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... @overload def __mul__(self, other: glm_typing.Number) -> mvec4: ... @overload def __mul__(self, other: glm_typing.F32Vector4) -> mvec4: ... @overload def __mul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> mvec4: ... @overload def __rmul__(self, other: glm_typing.F32Vector4) -> mvec4: ... @overload def __rmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> mvec4: ... @overload def __imul__(self, other: glm_typing.F32Vector4) -> mvec4: ... @overload def __imul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __rmod__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __imod__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __pow__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __rpow__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __ipow__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __truediv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __rtruediv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __itruediv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __floordiv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __rfloordiv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __ifloordiv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> mvec4: ... @overload def __matmul__(self, other: glm_typing.F32Vector4) -> mvec4: ... @overload def __matmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> mvec4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector4) -> mvec4: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> mvec4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector4) -> mvec4: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __divmod__(self, other: mvec4) -> Tuple[mvec4, mvec4]: ... class u16vec1: x: int @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.UAnyVector2, glm_typing.UAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u16vec1: ... def __pos__(self) -> u16vec1: ... def __abs__(self) -> u16vec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u16vec1: ... def __add__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __radd__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __iadd__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __sub__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __rsub__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __isub__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... @overload def __mul__(self, other: glm_typing.Number) -> u16vec1: ... @overload def __mul__(self, other: glm_typing.U16Vector1) -> u16vec1: ... @overload def __rmul__(self, other: glm_typing.Number) -> u16vec1: ... @overload def __rmul__(self, other: glm_typing.U16Vector1) -> u16vec1: ... @overload def __imul__(self, other: glm_typing.Number) -> u16vec1: ... @overload def __imul__(self, other: glm_typing.U16Vector1) -> u16vec1: ... def __mod__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __rmod__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __imod__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __pow__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __rpow__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __ipow__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __truediv__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __rtruediv__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __itruediv__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __floordiv__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __rfloordiv__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __ifloordiv__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> u16vec1: ... @overload def __matmul__(self, other: glm_typing.U16Vector1) -> u16vec1: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u16vec1: ... @overload def __rmatmul__(self, other: glm_typing.U16Vector1) -> u16vec1: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u16vec1: ... @overload def __imatmul__(self, other: glm_typing.U16Vector1) -> u16vec1: ... def __divmod__(self, other: u16vec1) -> Tuple[u16vec1, u16vec1]: ... class u16vec2: x: int y: int @property def xy(self) -> u16vec2: ... @xy.setter def xy(self, value: glm_typing.U16Vector2) -> None: ... @property def yx(self) -> u16vec2: ... @yx.setter def yx(self, value: glm_typing.U16Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.UAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u16vec2: ... def __pos__(self) -> u16vec2: ... def __abs__(self) -> u16vec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u16vec2: ... def __add__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __radd__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __iadd__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __sub__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __rsub__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __isub__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... @overload def __mul__(self, other: glm_typing.Number) -> u16vec2: ... @overload def __mul__(self, other: glm_typing.U16Vector2) -> u16vec2: ... @overload def __rmul__(self, other: glm_typing.Number) -> u16vec2: ... @overload def __rmul__(self, other: glm_typing.U16Vector2) -> u16vec2: ... @overload def __imul__(self, other: glm_typing.Number) -> u16vec2: ... @overload def __imul__(self, other: glm_typing.U16Vector2) -> u16vec2: ... def __mod__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __rmod__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __imod__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __pow__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __rpow__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __ipow__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __truediv__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __rtruediv__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __itruediv__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __floordiv__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __rfloordiv__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __ifloordiv__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> u16vec2: ... @overload def __matmul__(self, other: glm_typing.U16Vector2) -> u16vec2: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u16vec2: ... @overload def __rmatmul__(self, other: glm_typing.U16Vector2) -> u16vec2: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u16vec2: ... @overload def __imatmul__(self, other: glm_typing.U16Vector2) -> u16vec2: ... def __divmod__(self, other: u16vec2) -> Tuple[u16vec2, u16vec2]: ... class u16vec3: x: int y: int z: int @property def xy(self) -> u16vec2: ... @xy.setter def xy(self, value: glm_typing.U16Vector2) -> None: ... @property def yx(self) -> u16vec2: ... @yx.setter def yx(self, value: glm_typing.U16Vector2) -> None: ... @property def xz(self) -> u16vec2: ... @xz.setter def xz(self, value: glm_typing.U16Vector2) -> None: ... @property def zx(self) -> u16vec2: ... @zx.setter def zx(self, value: glm_typing.U16Vector2) -> None: ... @property def yz(self) -> u16vec2: ... @yz.setter def yz(self, value: glm_typing.U16Vector2) -> None: ... @property def zy(self) -> u16vec2: ... @zy.setter def zy(self, value: glm_typing.U16Vector2) -> None: ... @property def xyz(self) -> u16vec3: ... @xyz.setter def xyz(self, value: glm_typing.U16Vector3) -> None: ... @property def xzy(self) -> u16vec3: ... @xzy.setter def xzy(self, value: glm_typing.U16Vector3) -> None: ... @property def yxz(self) -> u16vec3: ... @yxz.setter def yxz(self, value: glm_typing.U16Vector3) -> None: ... @property def yzx(self) -> u16vec3: ... @yzx.setter def yzx(self, value: glm_typing.U16Vector3) -> None: ... @property def zxy(self) -> u16vec3: ... @zxy.setter def zxy(self, value: glm_typing.U16Vector3) -> None: ... @property def zyx(self) -> u16vec3: ... @zyx.setter def zyx(self, value: glm_typing.U16Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u16vec3: ... def __pos__(self) -> u16vec3: ... def __abs__(self) -> u16vec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u16vec3: ... def __add__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __radd__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __iadd__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __sub__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __rsub__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __isub__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... @overload def __mul__(self, other: glm_typing.Number) -> u16vec3: ... @overload def __mul__(self, other: glm_typing.U16Vector3) -> u16vec3: ... @overload def __rmul__(self, other: glm_typing.Number) -> u16vec3: ... @overload def __rmul__(self, other: glm_typing.U16Vector3) -> u16vec3: ... @overload def __imul__(self, other: glm_typing.Number) -> u16vec3: ... @overload def __imul__(self, other: glm_typing.U16Vector3) -> u16vec3: ... def __mod__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __rmod__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __imod__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __pow__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __rpow__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __ipow__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __truediv__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __rtruediv__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __itruediv__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __floordiv__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __rfloordiv__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __ifloordiv__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> u16vec3: ... @overload def __matmul__(self, other: glm_typing.U16Vector3) -> u16vec3: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u16vec3: ... @overload def __rmatmul__(self, other: glm_typing.U16Vector3) -> u16vec3: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u16vec3: ... @overload def __imatmul__(self, other: glm_typing.U16Vector3) -> u16vec3: ... def __divmod__(self, other: u16vec3) -> Tuple[u16vec3, u16vec3]: ... class u16vec4: x: int y: int z: int w: int @property def xy(self) -> u16vec2: ... @xy.setter def xy(self, value: glm_typing.U16Vector2) -> None: ... @property def yx(self) -> u16vec2: ... @yx.setter def yx(self, value: glm_typing.U16Vector2) -> None: ... @property def xz(self) -> u16vec2: ... @xz.setter def xz(self, value: glm_typing.U16Vector2) -> None: ... @property def zx(self) -> u16vec2: ... @zx.setter def zx(self, value: glm_typing.U16Vector2) -> None: ... @property def xw(self) -> u16vec2: ... @xw.setter def xw(self, value: glm_typing.U16Vector2) -> None: ... @property def wx(self) -> u16vec2: ... @wx.setter def wx(self, value: glm_typing.U16Vector2) -> None: ... @property def yz(self) -> u16vec2: ... @yz.setter def yz(self, value: glm_typing.U16Vector2) -> None: ... @property def zy(self) -> u16vec2: ... @zy.setter def zy(self, value: glm_typing.U16Vector2) -> None: ... @property def yw(self) -> u16vec2: ... @yw.setter def yw(self, value: glm_typing.U16Vector2) -> None: ... @property def wy(self) -> u16vec2: ... @wy.setter def wy(self, value: glm_typing.U16Vector2) -> None: ... @property def zw(self) -> u16vec2: ... @zw.setter def zw(self, value: glm_typing.U16Vector2) -> None: ... @property def wz(self) -> u16vec2: ... @wz.setter def wz(self, value: glm_typing.U16Vector2) -> None: ... @property def xyz(self) -> u16vec3: ... @xyz.setter def xyz(self, value: glm_typing.U16Vector3) -> None: ... @property def xzy(self) -> u16vec3: ... @xzy.setter def xzy(self, value: glm_typing.U16Vector3) -> None: ... @property def yxz(self) -> u16vec3: ... @yxz.setter def yxz(self, value: glm_typing.U16Vector3) -> None: ... @property def yzx(self) -> u16vec3: ... @yzx.setter def yzx(self, value: glm_typing.U16Vector3) -> None: ... @property def zxy(self) -> u16vec3: ... @zxy.setter def zxy(self, value: glm_typing.U16Vector3) -> None: ... @property def zyx(self) -> u16vec3: ... @zyx.setter def zyx(self, value: glm_typing.U16Vector3) -> None: ... @property def xyw(self) -> u16vec3: ... @xyw.setter def xyw(self, value: glm_typing.U16Vector3) -> None: ... @property def xwy(self) -> u16vec3: ... @xwy.setter def xwy(self, value: glm_typing.U16Vector3) -> None: ... @property def yxw(self) -> u16vec3: ... @yxw.setter def yxw(self, value: glm_typing.U16Vector3) -> None: ... @property def ywx(self) -> u16vec3: ... @ywx.setter def ywx(self, value: glm_typing.U16Vector3) -> None: ... @property def wxy(self) -> u16vec3: ... @wxy.setter def wxy(self, value: glm_typing.U16Vector3) -> None: ... @property def wyx(self) -> u16vec3: ... @wyx.setter def wyx(self, value: glm_typing.U16Vector3) -> None: ... @property def xzw(self) -> u16vec3: ... @xzw.setter def xzw(self, value: glm_typing.U16Vector3) -> None: ... @property def xwz(self) -> u16vec3: ... @xwz.setter def xwz(self, value: glm_typing.U16Vector3) -> None: ... @property def zxw(self) -> u16vec3: ... @zxw.setter def zxw(self, value: glm_typing.U16Vector3) -> None: ... @property def zwx(self) -> u16vec3: ... @zwx.setter def zwx(self, value: glm_typing.U16Vector3) -> None: ... @property def wxz(self) -> u16vec3: ... @wxz.setter def wxz(self, value: glm_typing.U16Vector3) -> None: ... @property def wzx(self) -> u16vec3: ... @wzx.setter def wzx(self, value: glm_typing.U16Vector3) -> None: ... @property def yzw(self) -> u16vec3: ... @yzw.setter def yzw(self, value: glm_typing.U16Vector3) -> None: ... @property def ywz(self) -> u16vec3: ... @ywz.setter def ywz(self, value: glm_typing.U16Vector3) -> None: ... @property def zyw(self) -> u16vec3: ... @zyw.setter def zyw(self, value: glm_typing.U16Vector3) -> None: ... @property def zwy(self) -> u16vec3: ... @zwy.setter def zwy(self, value: glm_typing.U16Vector3) -> None: ... @property def wyz(self) -> u16vec3: ... @wyz.setter def wyz(self, value: glm_typing.U16Vector3) -> None: ... @property def wzy(self) -> u16vec3: ... @wzy.setter def wzy(self, value: glm_typing.U16Vector3) -> None: ... @property def xyzw(self) -> u16vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.U16Vector4) -> None: ... @property def xywz(self) -> u16vec4: ... @xywz.setter def xywz(self, value: glm_typing.U16Vector4) -> None: ... @property def xzyw(self) -> u16vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.U16Vector4) -> None: ... @property def xzwy(self) -> u16vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.U16Vector4) -> None: ... @property def xwyz(self) -> u16vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.U16Vector4) -> None: ... @property def xwzy(self) -> u16vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.U16Vector4) -> None: ... @property def yxzw(self) -> u16vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.U16Vector4) -> None: ... @property def yxwz(self) -> u16vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.U16Vector4) -> None: ... @property def yzxw(self) -> u16vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.U16Vector4) -> None: ... @property def yzwx(self) -> u16vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.U16Vector4) -> None: ... @property def ywxz(self) -> u16vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.U16Vector4) -> None: ... @property def ywzx(self) -> u16vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.U16Vector4) -> None: ... @property def zxyw(self) -> u16vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.U16Vector4) -> None: ... @property def zxwy(self) -> u16vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.U16Vector4) -> None: ... @property def zyxw(self) -> u16vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.U16Vector4) -> None: ... @property def zywx(self) -> u16vec4: ... @zywx.setter def zywx(self, value: glm_typing.U16Vector4) -> None: ... @property def zwxy(self) -> u16vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.U16Vector4) -> None: ... @property def zwyx(self) -> u16vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.U16Vector4) -> None: ... @property def wxyz(self) -> u16vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.U16Vector4) -> None: ... @property def wxzy(self) -> u16vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.U16Vector4) -> None: ... @property def wyxz(self) -> u16vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.U16Vector4) -> None: ... @property def wyzx(self) -> u16vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.U16Vector4) -> None: ... @property def wzxy(self) -> u16vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.U16Vector4) -> None: ... @property def wzyx(self) -> u16vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.U16Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u16vec4: ... def __pos__(self) -> u16vec4: ... def __abs__(self) -> u16vec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u16vec4: ... def __add__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __radd__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __iadd__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __sub__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __rsub__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __isub__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... @overload def __mul__(self, other: glm_typing.Number) -> u16vec4: ... @overload def __mul__(self, other: glm_typing.U16Vector4) -> u16vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> u16vec4: ... @overload def __rmul__(self, other: glm_typing.U16Vector4) -> u16vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> u16vec4: ... @overload def __imul__(self, other: glm_typing.U16Vector4) -> u16vec4: ... def __mod__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __rmod__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __imod__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __pow__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __rpow__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __ipow__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __truediv__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __rtruediv__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __itruediv__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __floordiv__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __rfloordiv__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __ifloordiv__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> u16vec4: ... @overload def __matmul__(self, other: glm_typing.U16Vector4) -> u16vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u16vec4: ... @overload def __rmatmul__(self, other: glm_typing.U16Vector4) -> u16vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u16vec4: ... @overload def __imatmul__(self, other: glm_typing.U16Vector4) -> u16vec4: ... def __divmod__(self, other: u16vec4) -> Tuple[u16vec4, u16vec4]: ... class u64vec1: x: int @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.UAnyVector2, glm_typing.UAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u64vec1: ... def __pos__(self) -> u64vec1: ... def __abs__(self) -> u64vec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u64vec1: ... def __add__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __radd__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __iadd__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __sub__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __rsub__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __isub__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... @overload def __mul__(self, other: glm_typing.Number) -> u64vec1: ... @overload def __mul__(self, other: glm_typing.U64Vector1) -> u64vec1: ... @overload def __rmul__(self, other: glm_typing.Number) -> u64vec1: ... @overload def __rmul__(self, other: glm_typing.U64Vector1) -> u64vec1: ... @overload def __imul__(self, other: glm_typing.Number) -> u64vec1: ... @overload def __imul__(self, other: glm_typing.U64Vector1) -> u64vec1: ... def __mod__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __rmod__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __imod__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __pow__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __rpow__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __ipow__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __truediv__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __rtruediv__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __itruediv__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __floordiv__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __rfloordiv__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __ifloordiv__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> u64vec1: ... @overload def __matmul__(self, other: glm_typing.U64Vector1) -> u64vec1: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u64vec1: ... @overload def __rmatmul__(self, other: glm_typing.U64Vector1) -> u64vec1: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u64vec1: ... @overload def __imatmul__(self, other: glm_typing.U64Vector1) -> u64vec1: ... def __divmod__(self, other: u64vec1) -> Tuple[u64vec1, u64vec1]: ... class u64vec2: x: int y: int @property def xy(self) -> u64vec2: ... @xy.setter def xy(self, value: glm_typing.U64Vector2) -> None: ... @property def yx(self) -> u64vec2: ... @yx.setter def yx(self, value: glm_typing.U64Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.UAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u64vec2: ... def __pos__(self) -> u64vec2: ... def __abs__(self) -> u64vec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u64vec2: ... def __add__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __radd__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __iadd__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __sub__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __rsub__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __isub__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... @overload def __mul__(self, other: glm_typing.Number) -> u64vec2: ... @overload def __mul__(self, other: glm_typing.U64Vector2) -> u64vec2: ... @overload def __rmul__(self, other: glm_typing.Number) -> u64vec2: ... @overload def __rmul__(self, other: glm_typing.U64Vector2) -> u64vec2: ... @overload def __imul__(self, other: glm_typing.Number) -> u64vec2: ... @overload def __imul__(self, other: glm_typing.U64Vector2) -> u64vec2: ... def __mod__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __rmod__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __imod__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __pow__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __rpow__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __ipow__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __truediv__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __rtruediv__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __itruediv__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __floordiv__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __rfloordiv__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __ifloordiv__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> u64vec2: ... @overload def __matmul__(self, other: glm_typing.U64Vector2) -> u64vec2: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u64vec2: ... @overload def __rmatmul__(self, other: glm_typing.U64Vector2) -> u64vec2: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u64vec2: ... @overload def __imatmul__(self, other: glm_typing.U64Vector2) -> u64vec2: ... def __divmod__(self, other: u64vec2) -> Tuple[u64vec2, u64vec2]: ... class u64vec3: x: int y: int z: int @property def xy(self) -> u64vec2: ... @xy.setter def xy(self, value: glm_typing.U64Vector2) -> None: ... @property def yx(self) -> u64vec2: ... @yx.setter def yx(self, value: glm_typing.U64Vector2) -> None: ... @property def xz(self) -> u64vec2: ... @xz.setter def xz(self, value: glm_typing.U64Vector2) -> None: ... @property def zx(self) -> u64vec2: ... @zx.setter def zx(self, value: glm_typing.U64Vector2) -> None: ... @property def yz(self) -> u64vec2: ... @yz.setter def yz(self, value: glm_typing.U64Vector2) -> None: ... @property def zy(self) -> u64vec2: ... @zy.setter def zy(self, value: glm_typing.U64Vector2) -> None: ... @property def xyz(self) -> u64vec3: ... @xyz.setter def xyz(self, value: glm_typing.U64Vector3) -> None: ... @property def xzy(self) -> u64vec3: ... @xzy.setter def xzy(self, value: glm_typing.U64Vector3) -> None: ... @property def yxz(self) -> u64vec3: ... @yxz.setter def yxz(self, value: glm_typing.U64Vector3) -> None: ... @property def yzx(self) -> u64vec3: ... @yzx.setter def yzx(self, value: glm_typing.U64Vector3) -> None: ... @property def zxy(self) -> u64vec3: ... @zxy.setter def zxy(self, value: glm_typing.U64Vector3) -> None: ... @property def zyx(self) -> u64vec3: ... @zyx.setter def zyx(self, value: glm_typing.U64Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u64vec3: ... def __pos__(self) -> u64vec3: ... def __abs__(self) -> u64vec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u64vec3: ... def __add__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __radd__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __iadd__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __sub__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __rsub__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __isub__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... @overload def __mul__(self, other: glm_typing.Number) -> u64vec3: ... @overload def __mul__(self, other: glm_typing.U64Vector3) -> u64vec3: ... @overload def __rmul__(self, other: glm_typing.Number) -> u64vec3: ... @overload def __rmul__(self, other: glm_typing.U64Vector3) -> u64vec3: ... @overload def __imul__(self, other: glm_typing.Number) -> u64vec3: ... @overload def __imul__(self, other: glm_typing.U64Vector3) -> u64vec3: ... def __mod__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __rmod__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __imod__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __pow__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __rpow__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __ipow__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __truediv__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __rtruediv__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __itruediv__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __floordiv__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __rfloordiv__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __ifloordiv__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> u64vec3: ... @overload def __matmul__(self, other: glm_typing.U64Vector3) -> u64vec3: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u64vec3: ... @overload def __rmatmul__(self, other: glm_typing.U64Vector3) -> u64vec3: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u64vec3: ... @overload def __imatmul__(self, other: glm_typing.U64Vector3) -> u64vec3: ... def __divmod__(self, other: u64vec3) -> Tuple[u64vec3, u64vec3]: ... class u64vec4: x: int y: int z: int w: int @property def xy(self) -> u64vec2: ... @xy.setter def xy(self, value: glm_typing.U64Vector2) -> None: ... @property def yx(self) -> u64vec2: ... @yx.setter def yx(self, value: glm_typing.U64Vector2) -> None: ... @property def xz(self) -> u64vec2: ... @xz.setter def xz(self, value: glm_typing.U64Vector2) -> None: ... @property def zx(self) -> u64vec2: ... @zx.setter def zx(self, value: glm_typing.U64Vector2) -> None: ... @property def xw(self) -> u64vec2: ... @xw.setter def xw(self, value: glm_typing.U64Vector2) -> None: ... @property def wx(self) -> u64vec2: ... @wx.setter def wx(self, value: glm_typing.U64Vector2) -> None: ... @property def yz(self) -> u64vec2: ... @yz.setter def yz(self, value: glm_typing.U64Vector2) -> None: ... @property def zy(self) -> u64vec2: ... @zy.setter def zy(self, value: glm_typing.U64Vector2) -> None: ... @property def yw(self) -> u64vec2: ... @yw.setter def yw(self, value: glm_typing.U64Vector2) -> None: ... @property def wy(self) -> u64vec2: ... @wy.setter def wy(self, value: glm_typing.U64Vector2) -> None: ... @property def zw(self) -> u64vec2: ... @zw.setter def zw(self, value: glm_typing.U64Vector2) -> None: ... @property def wz(self) -> u64vec2: ... @wz.setter def wz(self, value: glm_typing.U64Vector2) -> None: ... @property def xyz(self) -> u64vec3: ... @xyz.setter def xyz(self, value: glm_typing.U64Vector3) -> None: ... @property def xzy(self) -> u64vec3: ... @xzy.setter def xzy(self, value: glm_typing.U64Vector3) -> None: ... @property def yxz(self) -> u64vec3: ... @yxz.setter def yxz(self, value: glm_typing.U64Vector3) -> None: ... @property def yzx(self) -> u64vec3: ... @yzx.setter def yzx(self, value: glm_typing.U64Vector3) -> None: ... @property def zxy(self) -> u64vec3: ... @zxy.setter def zxy(self, value: glm_typing.U64Vector3) -> None: ... @property def zyx(self) -> u64vec3: ... @zyx.setter def zyx(self, value: glm_typing.U64Vector3) -> None: ... @property def xyw(self) -> u64vec3: ... @xyw.setter def xyw(self, value: glm_typing.U64Vector3) -> None: ... @property def xwy(self) -> u64vec3: ... @xwy.setter def xwy(self, value: glm_typing.U64Vector3) -> None: ... @property def yxw(self) -> u64vec3: ... @yxw.setter def yxw(self, value: glm_typing.U64Vector3) -> None: ... @property def ywx(self) -> u64vec3: ... @ywx.setter def ywx(self, value: glm_typing.U64Vector3) -> None: ... @property def wxy(self) -> u64vec3: ... @wxy.setter def wxy(self, value: glm_typing.U64Vector3) -> None: ... @property def wyx(self) -> u64vec3: ... @wyx.setter def wyx(self, value: glm_typing.U64Vector3) -> None: ... @property def xzw(self) -> u64vec3: ... @xzw.setter def xzw(self, value: glm_typing.U64Vector3) -> None: ... @property def xwz(self) -> u64vec3: ... @xwz.setter def xwz(self, value: glm_typing.U64Vector3) -> None: ... @property def zxw(self) -> u64vec3: ... @zxw.setter def zxw(self, value: glm_typing.U64Vector3) -> None: ... @property def zwx(self) -> u64vec3: ... @zwx.setter def zwx(self, value: glm_typing.U64Vector3) -> None: ... @property def wxz(self) -> u64vec3: ... @wxz.setter def wxz(self, value: glm_typing.U64Vector3) -> None: ... @property def wzx(self) -> u64vec3: ... @wzx.setter def wzx(self, value: glm_typing.U64Vector3) -> None: ... @property def yzw(self) -> u64vec3: ... @yzw.setter def yzw(self, value: glm_typing.U64Vector3) -> None: ... @property def ywz(self) -> u64vec3: ... @ywz.setter def ywz(self, value: glm_typing.U64Vector3) -> None: ... @property def zyw(self) -> u64vec3: ... @zyw.setter def zyw(self, value: glm_typing.U64Vector3) -> None: ... @property def zwy(self) -> u64vec3: ... @zwy.setter def zwy(self, value: glm_typing.U64Vector3) -> None: ... @property def wyz(self) -> u64vec3: ... @wyz.setter def wyz(self, value: glm_typing.U64Vector3) -> None: ... @property def wzy(self) -> u64vec3: ... @wzy.setter def wzy(self, value: glm_typing.U64Vector3) -> None: ... @property def xyzw(self) -> u64vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.U64Vector4) -> None: ... @property def xywz(self) -> u64vec4: ... @xywz.setter def xywz(self, value: glm_typing.U64Vector4) -> None: ... @property def xzyw(self) -> u64vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.U64Vector4) -> None: ... @property def xzwy(self) -> u64vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.U64Vector4) -> None: ... @property def xwyz(self) -> u64vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.U64Vector4) -> None: ... @property def xwzy(self) -> u64vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.U64Vector4) -> None: ... @property def yxzw(self) -> u64vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.U64Vector4) -> None: ... @property def yxwz(self) -> u64vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.U64Vector4) -> None: ... @property def yzxw(self) -> u64vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.U64Vector4) -> None: ... @property def yzwx(self) -> u64vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.U64Vector4) -> None: ... @property def ywxz(self) -> u64vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.U64Vector4) -> None: ... @property def ywzx(self) -> u64vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.U64Vector4) -> None: ... @property def zxyw(self) -> u64vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.U64Vector4) -> None: ... @property def zxwy(self) -> u64vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.U64Vector4) -> None: ... @property def zyxw(self) -> u64vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.U64Vector4) -> None: ... @property def zywx(self) -> u64vec4: ... @zywx.setter def zywx(self, value: glm_typing.U64Vector4) -> None: ... @property def zwxy(self) -> u64vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.U64Vector4) -> None: ... @property def zwyx(self) -> u64vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.U64Vector4) -> None: ... @property def wxyz(self) -> u64vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.U64Vector4) -> None: ... @property def wxzy(self) -> u64vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.U64Vector4) -> None: ... @property def wyxz(self) -> u64vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.U64Vector4) -> None: ... @property def wyzx(self) -> u64vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.U64Vector4) -> None: ... @property def wzxy(self) -> u64vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.U64Vector4) -> None: ... @property def wzyx(self) -> u64vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.U64Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u64vec4: ... def __pos__(self) -> u64vec4: ... def __abs__(self) -> u64vec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u64vec4: ... def __add__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __radd__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __iadd__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __sub__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __rsub__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __isub__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... @overload def __mul__(self, other: glm_typing.Number) -> u64vec4: ... @overload def __mul__(self, other: glm_typing.U64Vector4) -> u64vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> u64vec4: ... @overload def __rmul__(self, other: glm_typing.U64Vector4) -> u64vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> u64vec4: ... @overload def __imul__(self, other: glm_typing.U64Vector4) -> u64vec4: ... def __mod__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __rmod__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __imod__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __pow__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __rpow__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __ipow__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __truediv__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __rtruediv__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __itruediv__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __floordiv__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __rfloordiv__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __ifloordiv__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> u64vec4: ... @overload def __matmul__(self, other: glm_typing.U64Vector4) -> u64vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u64vec4: ... @overload def __rmatmul__(self, other: glm_typing.U64Vector4) -> u64vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u64vec4: ... @overload def __imatmul__(self, other: glm_typing.U64Vector4) -> u64vec4: ... def __divmod__(self, other: u64vec4) -> Tuple[u64vec4, u64vec4]: ... class u8vec1: x: int @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.UAnyVector2, glm_typing.UAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u8vec1: ... def __pos__(self) -> u8vec1: ... def __abs__(self) -> u8vec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u8vec1: ... def __add__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __radd__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __iadd__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __sub__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __rsub__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __isub__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... @overload def __mul__(self, other: glm_typing.Number) -> u8vec1: ... @overload def __mul__(self, other: glm_typing.U8Vector1) -> u8vec1: ... @overload def __rmul__(self, other: glm_typing.Number) -> u8vec1: ... @overload def __rmul__(self, other: glm_typing.U8Vector1) -> u8vec1: ... @overload def __imul__(self, other: glm_typing.Number) -> u8vec1: ... @overload def __imul__(self, other: glm_typing.U8Vector1) -> u8vec1: ... def __mod__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __rmod__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __imod__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __pow__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __rpow__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __ipow__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __truediv__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __rtruediv__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __itruediv__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __floordiv__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __rfloordiv__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __ifloordiv__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> u8vec1: ... @overload def __matmul__(self, other: glm_typing.U8Vector1) -> u8vec1: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u8vec1: ... @overload def __rmatmul__(self, other: glm_typing.U8Vector1) -> u8vec1: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u8vec1: ... @overload def __imatmul__(self, other: glm_typing.U8Vector1) -> u8vec1: ... def __divmod__(self, other: u8vec1) -> Tuple[u8vec1, u8vec1]: ... class u8vec2: x: int y: int @property def xy(self) -> u8vec2: ... @xy.setter def xy(self, value: glm_typing.U8Vector2) -> None: ... @property def yx(self) -> u8vec2: ... @yx.setter def yx(self, value: glm_typing.U8Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.UAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u8vec2: ... def __pos__(self) -> u8vec2: ... def __abs__(self) -> u8vec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u8vec2: ... def __add__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __radd__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __iadd__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __sub__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __rsub__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __isub__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... @overload def __mul__(self, other: glm_typing.Number) -> u8vec2: ... @overload def __mul__(self, other: glm_typing.U8Vector2) -> u8vec2: ... @overload def __rmul__(self, other: glm_typing.Number) -> u8vec2: ... @overload def __rmul__(self, other: glm_typing.U8Vector2) -> u8vec2: ... @overload def __imul__(self, other: glm_typing.Number) -> u8vec2: ... @overload def __imul__(self, other: glm_typing.U8Vector2) -> u8vec2: ... def __mod__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __rmod__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __imod__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __pow__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __rpow__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __ipow__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __truediv__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __rtruediv__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __itruediv__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __floordiv__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __rfloordiv__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __ifloordiv__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> u8vec2: ... @overload def __matmul__(self, other: glm_typing.U8Vector2) -> u8vec2: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u8vec2: ... @overload def __rmatmul__(self, other: glm_typing.U8Vector2) -> u8vec2: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u8vec2: ... @overload def __imatmul__(self, other: glm_typing.U8Vector2) -> u8vec2: ... def __divmod__(self, other: u8vec2) -> Tuple[u8vec2, u8vec2]: ... class u8vec3: x: int y: int z: int @property def xy(self) -> u8vec2: ... @xy.setter def xy(self, value: glm_typing.U8Vector2) -> None: ... @property def yx(self) -> u8vec2: ... @yx.setter def yx(self, value: glm_typing.U8Vector2) -> None: ... @property def xz(self) -> u8vec2: ... @xz.setter def xz(self, value: glm_typing.U8Vector2) -> None: ... @property def zx(self) -> u8vec2: ... @zx.setter def zx(self, value: glm_typing.U8Vector2) -> None: ... @property def yz(self) -> u8vec2: ... @yz.setter def yz(self, value: glm_typing.U8Vector2) -> None: ... @property def zy(self) -> u8vec2: ... @zy.setter def zy(self, value: glm_typing.U8Vector2) -> None: ... @property def xyz(self) -> u8vec3: ... @xyz.setter def xyz(self, value: glm_typing.U8Vector3) -> None: ... @property def xzy(self) -> u8vec3: ... @xzy.setter def xzy(self, value: glm_typing.U8Vector3) -> None: ... @property def yxz(self) -> u8vec3: ... @yxz.setter def yxz(self, value: glm_typing.U8Vector3) -> None: ... @property def yzx(self) -> u8vec3: ... @yzx.setter def yzx(self, value: glm_typing.U8Vector3) -> None: ... @property def zxy(self) -> u8vec3: ... @zxy.setter def zxy(self, value: glm_typing.U8Vector3) -> None: ... @property def zyx(self) -> u8vec3: ... @zyx.setter def zyx(self, value: glm_typing.U8Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u8vec3: ... def __pos__(self) -> u8vec3: ... def __abs__(self) -> u8vec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u8vec3: ... def __add__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __radd__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __iadd__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __sub__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __rsub__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __isub__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... @overload def __mul__(self, other: glm_typing.Number) -> u8vec3: ... @overload def __mul__(self, other: glm_typing.U8Vector3) -> u8vec3: ... @overload def __rmul__(self, other: glm_typing.Number) -> u8vec3: ... @overload def __rmul__(self, other: glm_typing.U8Vector3) -> u8vec3: ... @overload def __imul__(self, other: glm_typing.Number) -> u8vec3: ... @overload def __imul__(self, other: glm_typing.U8Vector3) -> u8vec3: ... def __mod__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __rmod__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __imod__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __pow__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __rpow__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __ipow__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __truediv__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __rtruediv__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __itruediv__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __floordiv__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __rfloordiv__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __ifloordiv__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> u8vec3: ... @overload def __matmul__(self, other: glm_typing.U8Vector3) -> u8vec3: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u8vec3: ... @overload def __rmatmul__(self, other: glm_typing.U8Vector3) -> u8vec3: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u8vec3: ... @overload def __imatmul__(self, other: glm_typing.U8Vector3) -> u8vec3: ... def __divmod__(self, other: u8vec3) -> Tuple[u8vec3, u8vec3]: ... class u8vec4: x: int y: int z: int w: int @property def xy(self) -> u8vec2: ... @xy.setter def xy(self, value: glm_typing.U8Vector2) -> None: ... @property def yx(self) -> u8vec2: ... @yx.setter def yx(self, value: glm_typing.U8Vector2) -> None: ... @property def xz(self) -> u8vec2: ... @xz.setter def xz(self, value: glm_typing.U8Vector2) -> None: ... @property def zx(self) -> u8vec2: ... @zx.setter def zx(self, value: glm_typing.U8Vector2) -> None: ... @property def xw(self) -> u8vec2: ... @xw.setter def xw(self, value: glm_typing.U8Vector2) -> None: ... @property def wx(self) -> u8vec2: ... @wx.setter def wx(self, value: glm_typing.U8Vector2) -> None: ... @property def yz(self) -> u8vec2: ... @yz.setter def yz(self, value: glm_typing.U8Vector2) -> None: ... @property def zy(self) -> u8vec2: ... @zy.setter def zy(self, value: glm_typing.U8Vector2) -> None: ... @property def yw(self) -> u8vec2: ... @yw.setter def yw(self, value: glm_typing.U8Vector2) -> None: ... @property def wy(self) -> u8vec2: ... @wy.setter def wy(self, value: glm_typing.U8Vector2) -> None: ... @property def zw(self) -> u8vec2: ... @zw.setter def zw(self, value: glm_typing.U8Vector2) -> None: ... @property def wz(self) -> u8vec2: ... @wz.setter def wz(self, value: glm_typing.U8Vector2) -> None: ... @property def xyz(self) -> u8vec3: ... @xyz.setter def xyz(self, value: glm_typing.U8Vector3) -> None: ... @property def xzy(self) -> u8vec3: ... @xzy.setter def xzy(self, value: glm_typing.U8Vector3) -> None: ... @property def yxz(self) -> u8vec3: ... @yxz.setter def yxz(self, value: glm_typing.U8Vector3) -> None: ... @property def yzx(self) -> u8vec3: ... @yzx.setter def yzx(self, value: glm_typing.U8Vector3) -> None: ... @property def zxy(self) -> u8vec3: ... @zxy.setter def zxy(self, value: glm_typing.U8Vector3) -> None: ... @property def zyx(self) -> u8vec3: ... @zyx.setter def zyx(self, value: glm_typing.U8Vector3) -> None: ... @property def xyw(self) -> u8vec3: ... @xyw.setter def xyw(self, value: glm_typing.U8Vector3) -> None: ... @property def xwy(self) -> u8vec3: ... @xwy.setter def xwy(self, value: glm_typing.U8Vector3) -> None: ... @property def yxw(self) -> u8vec3: ... @yxw.setter def yxw(self, value: glm_typing.U8Vector3) -> None: ... @property def ywx(self) -> u8vec3: ... @ywx.setter def ywx(self, value: glm_typing.U8Vector3) -> None: ... @property def wxy(self) -> u8vec3: ... @wxy.setter def wxy(self, value: glm_typing.U8Vector3) -> None: ... @property def wyx(self) -> u8vec3: ... @wyx.setter def wyx(self, value: glm_typing.U8Vector3) -> None: ... @property def xzw(self) -> u8vec3: ... @xzw.setter def xzw(self, value: glm_typing.U8Vector3) -> None: ... @property def xwz(self) -> u8vec3: ... @xwz.setter def xwz(self, value: glm_typing.U8Vector3) -> None: ... @property def zxw(self) -> u8vec3: ... @zxw.setter def zxw(self, value: glm_typing.U8Vector3) -> None: ... @property def zwx(self) -> u8vec3: ... @zwx.setter def zwx(self, value: glm_typing.U8Vector3) -> None: ... @property def wxz(self) -> u8vec3: ... @wxz.setter def wxz(self, value: glm_typing.U8Vector3) -> None: ... @property def wzx(self) -> u8vec3: ... @wzx.setter def wzx(self, value: glm_typing.U8Vector3) -> None: ... @property def yzw(self) -> u8vec3: ... @yzw.setter def yzw(self, value: glm_typing.U8Vector3) -> None: ... @property def ywz(self) -> u8vec3: ... @ywz.setter def ywz(self, value: glm_typing.U8Vector3) -> None: ... @property def zyw(self) -> u8vec3: ... @zyw.setter def zyw(self, value: glm_typing.U8Vector3) -> None: ... @property def zwy(self) -> u8vec3: ... @zwy.setter def zwy(self, value: glm_typing.U8Vector3) -> None: ... @property def wyz(self) -> u8vec3: ... @wyz.setter def wyz(self, value: glm_typing.U8Vector3) -> None: ... @property def wzy(self) -> u8vec3: ... @wzy.setter def wzy(self, value: glm_typing.U8Vector3) -> None: ... @property def xyzw(self) -> u8vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.U8Vector4) -> None: ... @property def xywz(self) -> u8vec4: ... @xywz.setter def xywz(self, value: glm_typing.U8Vector4) -> None: ... @property def xzyw(self) -> u8vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.U8Vector4) -> None: ... @property def xzwy(self) -> u8vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.U8Vector4) -> None: ... @property def xwyz(self) -> u8vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.U8Vector4) -> None: ... @property def xwzy(self) -> u8vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.U8Vector4) -> None: ... @property def yxzw(self) -> u8vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.U8Vector4) -> None: ... @property def yxwz(self) -> u8vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.U8Vector4) -> None: ... @property def yzxw(self) -> u8vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.U8Vector4) -> None: ... @property def yzwx(self) -> u8vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.U8Vector4) -> None: ... @property def ywxz(self) -> u8vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.U8Vector4) -> None: ... @property def ywzx(self) -> u8vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.U8Vector4) -> None: ... @property def zxyw(self) -> u8vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.U8Vector4) -> None: ... @property def zxwy(self) -> u8vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.U8Vector4) -> None: ... @property def zyxw(self) -> u8vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.U8Vector4) -> None: ... @property def zywx(self) -> u8vec4: ... @zywx.setter def zywx(self, value: glm_typing.U8Vector4) -> None: ... @property def zwxy(self) -> u8vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.U8Vector4) -> None: ... @property def zwyx(self) -> u8vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.U8Vector4) -> None: ... @property def wxyz(self) -> u8vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.U8Vector4) -> None: ... @property def wxzy(self) -> u8vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.U8Vector4) -> None: ... @property def wyxz(self) -> u8vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.U8Vector4) -> None: ... @property def wyzx(self) -> u8vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.U8Vector4) -> None: ... @property def wzxy(self) -> u8vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.U8Vector4) -> None: ... @property def wzyx(self) -> u8vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.U8Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u8vec4: ... def __pos__(self) -> u8vec4: ... def __abs__(self) -> u8vec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u8vec4: ... def __add__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __radd__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __iadd__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __sub__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __rsub__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __isub__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... @overload def __mul__(self, other: glm_typing.Number) -> u8vec4: ... @overload def __mul__(self, other: glm_typing.U8Vector4) -> u8vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> u8vec4: ... @overload def __rmul__(self, other: glm_typing.U8Vector4) -> u8vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> u8vec4: ... @overload def __imul__(self, other: glm_typing.U8Vector4) -> u8vec4: ... def __mod__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __rmod__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __imod__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __pow__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __rpow__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __ipow__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __truediv__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __rtruediv__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __itruediv__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __floordiv__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __rfloordiv__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __ifloordiv__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> u8vec4: ... @overload def __matmul__(self, other: glm_typing.U8Vector4) -> u8vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u8vec4: ... @overload def __rmatmul__(self, other: glm_typing.U8Vector4) -> u8vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u8vec4: ... @overload def __imatmul__(self, other: glm_typing.U8Vector4) -> u8vec4: ... def __divmod__(self, other: u8vec4) -> Tuple[u8vec4, u8vec4]: ... class umvec2: x: int y: int @property def xy(self) -> u32vec2: ... @xy.setter def xy(self, value: glm_typing.U32Vector2) -> None: ... @property def yx(self) -> u32vec2: ... @yx.setter def yx(self, value: glm_typing.U32Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.UAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> umvec2: ... def __pos__(self) -> umvec2: ... def __abs__(self) -> umvec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umvec2: ... def __add__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __radd__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __iadd__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __sub__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __rsub__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __isub__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... @overload def __mul__(self, other: glm_typing.Number) -> umvec2: ... @overload def __mul__(self, other: glm_typing.U32Vector2) -> umvec2: ... @overload def __mul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> umvec2: ... @overload def __rmul__(self, other: glm_typing.U32Vector2) -> umvec2: ... @overload def __rmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> umvec2: ... @overload def __imul__(self, other: glm_typing.U32Vector2) -> umvec2: ... @overload def __imul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __rmod__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __imod__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __pow__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __rpow__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __ipow__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __truediv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __rtruediv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __itruediv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __floordiv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __rfloordiv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __ifloordiv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> umvec2: ... @overload def __matmul__(self, other: glm_typing.U32Vector2) -> umvec2: ... @overload def __matmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> umvec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector2) -> umvec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> umvec2: ... @overload def __imatmul__(self, other: glm_typing.U32Vector2) -> umvec2: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __divmod__(self, other: umvec2) -> Tuple[umvec2, umvec2]: ... class umvec3: x: int y: int z: int @property def xy(self) -> u32vec2: ... @xy.setter def xy(self, value: glm_typing.U32Vector2) -> None: ... @property def yx(self) -> u32vec2: ... @yx.setter def yx(self, value: glm_typing.U32Vector2) -> None: ... @property def xz(self) -> u32vec2: ... @xz.setter def xz(self, value: glm_typing.U32Vector2) -> None: ... @property def zx(self) -> u32vec2: ... @zx.setter def zx(self, value: glm_typing.U32Vector2) -> None: ... @property def yz(self) -> u32vec2: ... @yz.setter def yz(self, value: glm_typing.U32Vector2) -> None: ... @property def zy(self) -> u32vec2: ... @zy.setter def zy(self, value: glm_typing.U32Vector2) -> None: ... @property def xyz(self) -> u32vec3: ... @xyz.setter def xyz(self, value: glm_typing.U32Vector3) -> None: ... @property def xzy(self) -> u32vec3: ... @xzy.setter def xzy(self, value: glm_typing.U32Vector3) -> None: ... @property def yxz(self) -> u32vec3: ... @yxz.setter def yxz(self, value: glm_typing.U32Vector3) -> None: ... @property def yzx(self) -> u32vec3: ... @yzx.setter def yzx(self, value: glm_typing.U32Vector3) -> None: ... @property def zxy(self) -> u32vec3: ... @zxy.setter def zxy(self, value: glm_typing.U32Vector3) -> None: ... @property def zyx(self) -> u32vec3: ... @zyx.setter def zyx(self, value: glm_typing.U32Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> umvec3: ... def __pos__(self) -> umvec3: ... def __abs__(self) -> umvec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umvec3: ... def __add__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __radd__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __iadd__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __sub__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __rsub__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __isub__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... @overload def __mul__(self, other: glm_typing.Number) -> umvec3: ... @overload def __mul__(self, other: glm_typing.U32Vector3) -> umvec3: ... @overload def __mul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> umvec3: ... @overload def __rmul__(self, other: glm_typing.U32Vector3) -> umvec3: ... @overload def __rmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> umvec3: ... @overload def __imul__(self, other: glm_typing.U32Vector3) -> umvec3: ... @overload def __imul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __rmod__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __imod__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __pow__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __rpow__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __ipow__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __truediv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __rtruediv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __itruediv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __floordiv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __rfloordiv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __ifloordiv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> umvec3: ... @overload def __matmul__(self, other: glm_typing.U32Vector3) -> umvec3: ... @overload def __matmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> umvec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector3) -> umvec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> umvec3: ... @overload def __imatmul__(self, other: glm_typing.U32Vector3) -> umvec3: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __divmod__(self, other: umvec3) -> Tuple[umvec3, umvec3]: ... class umvec4: x: int y: int z: int w: int @property def xy(self) -> u32vec2: ... @xy.setter def xy(self, value: glm_typing.U32Vector2) -> None: ... @property def yx(self) -> u32vec2: ... @yx.setter def yx(self, value: glm_typing.U32Vector2) -> None: ... @property def xz(self) -> u32vec2: ... @xz.setter def xz(self, value: glm_typing.U32Vector2) -> None: ... @property def zx(self) -> u32vec2: ... @zx.setter def zx(self, value: glm_typing.U32Vector2) -> None: ... @property def xw(self) -> u32vec2: ... @xw.setter def xw(self, value: glm_typing.U32Vector2) -> None: ... @property def wx(self) -> u32vec2: ... @wx.setter def wx(self, value: glm_typing.U32Vector2) -> None: ... @property def yz(self) -> u32vec2: ... @yz.setter def yz(self, value: glm_typing.U32Vector2) -> None: ... @property def zy(self) -> u32vec2: ... @zy.setter def zy(self, value: glm_typing.U32Vector2) -> None: ... @property def yw(self) -> u32vec2: ... @yw.setter def yw(self, value: glm_typing.U32Vector2) -> None: ... @property def wy(self) -> u32vec2: ... @wy.setter def wy(self, value: glm_typing.U32Vector2) -> None: ... @property def zw(self) -> u32vec2: ... @zw.setter def zw(self, value: glm_typing.U32Vector2) -> None: ... @property def wz(self) -> u32vec2: ... @wz.setter def wz(self, value: glm_typing.U32Vector2) -> None: ... @property def xyz(self) -> u32vec3: ... @xyz.setter def xyz(self, value: glm_typing.U32Vector3) -> None: ... @property def xzy(self) -> u32vec3: ... @xzy.setter def xzy(self, value: glm_typing.U32Vector3) -> None: ... @property def yxz(self) -> u32vec3: ... @yxz.setter def yxz(self, value: glm_typing.U32Vector3) -> None: ... @property def yzx(self) -> u32vec3: ... @yzx.setter def yzx(self, value: glm_typing.U32Vector3) -> None: ... @property def zxy(self) -> u32vec3: ... @zxy.setter def zxy(self, value: glm_typing.U32Vector3) -> None: ... @property def zyx(self) -> u32vec3: ... @zyx.setter def zyx(self, value: glm_typing.U32Vector3) -> None: ... @property def xyw(self) -> u32vec3: ... @xyw.setter def xyw(self, value: glm_typing.U32Vector3) -> None: ... @property def xwy(self) -> u32vec3: ... @xwy.setter def xwy(self, value: glm_typing.U32Vector3) -> None: ... @property def yxw(self) -> u32vec3: ... @yxw.setter def yxw(self, value: glm_typing.U32Vector3) -> None: ... @property def ywx(self) -> u32vec3: ... @ywx.setter def ywx(self, value: glm_typing.U32Vector3) -> None: ... @property def wxy(self) -> u32vec3: ... @wxy.setter def wxy(self, value: glm_typing.U32Vector3) -> None: ... @property def wyx(self) -> u32vec3: ... @wyx.setter def wyx(self, value: glm_typing.U32Vector3) -> None: ... @property def xzw(self) -> u32vec3: ... @xzw.setter def xzw(self, value: glm_typing.U32Vector3) -> None: ... @property def xwz(self) -> u32vec3: ... @xwz.setter def xwz(self, value: glm_typing.U32Vector3) -> None: ... @property def zxw(self) -> u32vec3: ... @zxw.setter def zxw(self, value: glm_typing.U32Vector3) -> None: ... @property def zwx(self) -> u32vec3: ... @zwx.setter def zwx(self, value: glm_typing.U32Vector3) -> None: ... @property def wxz(self) -> u32vec3: ... @wxz.setter def wxz(self, value: glm_typing.U32Vector3) -> None: ... @property def wzx(self) -> u32vec3: ... @wzx.setter def wzx(self, value: glm_typing.U32Vector3) -> None: ... @property def yzw(self) -> u32vec3: ... @yzw.setter def yzw(self, value: glm_typing.U32Vector3) -> None: ... @property def ywz(self) -> u32vec3: ... @ywz.setter def ywz(self, value: glm_typing.U32Vector3) -> None: ... @property def zyw(self) -> u32vec3: ... @zyw.setter def zyw(self, value: glm_typing.U32Vector3) -> None: ... @property def zwy(self) -> u32vec3: ... @zwy.setter def zwy(self, value: glm_typing.U32Vector3) -> None: ... @property def wyz(self) -> u32vec3: ... @wyz.setter def wyz(self, value: glm_typing.U32Vector3) -> None: ... @property def wzy(self) -> u32vec3: ... @wzy.setter def wzy(self, value: glm_typing.U32Vector3) -> None: ... @property def xyzw(self) -> u32vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.U32Vector4) -> None: ... @property def xywz(self) -> u32vec4: ... @xywz.setter def xywz(self, value: glm_typing.U32Vector4) -> None: ... @property def xzyw(self) -> u32vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.U32Vector4) -> None: ... @property def xzwy(self) -> u32vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.U32Vector4) -> None: ... @property def xwyz(self) -> u32vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.U32Vector4) -> None: ... @property def xwzy(self) -> u32vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.U32Vector4) -> None: ... @property def yxzw(self) -> u32vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.U32Vector4) -> None: ... @property def yxwz(self) -> u32vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.U32Vector4) -> None: ... @property def yzxw(self) -> u32vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.U32Vector4) -> None: ... @property def yzwx(self) -> u32vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.U32Vector4) -> None: ... @property def ywxz(self) -> u32vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.U32Vector4) -> None: ... @property def ywzx(self) -> u32vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.U32Vector4) -> None: ... @property def zxyw(self) -> u32vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.U32Vector4) -> None: ... @property def zxwy(self) -> u32vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.U32Vector4) -> None: ... @property def zyxw(self) -> u32vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.U32Vector4) -> None: ... @property def zywx(self) -> u32vec4: ... @zywx.setter def zywx(self, value: glm_typing.U32Vector4) -> None: ... @property def zwxy(self) -> u32vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.U32Vector4) -> None: ... @property def zwyx(self) -> u32vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.U32Vector4) -> None: ... @property def wxyz(self) -> u32vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.U32Vector4) -> None: ... @property def wxzy(self) -> u32vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.U32Vector4) -> None: ... @property def wyxz(self) -> u32vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.U32Vector4) -> None: ... @property def wyzx(self) -> u32vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.U32Vector4) -> None: ... @property def wzxy(self) -> u32vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.U32Vector4) -> None: ... @property def wzyx(self) -> u32vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.U32Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> umvec4: ... def __pos__(self) -> umvec4: ... def __abs__(self) -> umvec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umvec4: ... def __add__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __radd__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __iadd__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __sub__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __rsub__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __isub__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... @overload def __mul__(self, other: glm_typing.Number) -> umvec4: ... @overload def __mul__(self, other: glm_typing.U32Vector4) -> umvec4: ... @overload def __mul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> umvec4: ... @overload def __rmul__(self, other: glm_typing.U32Vector4) -> umvec4: ... @overload def __rmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> umvec4: ... @overload def __imul__(self, other: glm_typing.U32Vector4) -> umvec4: ... @overload def __imul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __rmod__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __imod__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __pow__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __rpow__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __ipow__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __truediv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __rtruediv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __itruediv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __floordiv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __rfloordiv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __ifloordiv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> umvec4: ... @overload def __matmul__(self, other: glm_typing.U32Vector4) -> umvec4: ... @overload def __matmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> umvec4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector4) -> umvec4: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> umvec4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector4) -> umvec4: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __divmod__(self, other: umvec4) -> Tuple[umvec4, umvec4]: ... u32vec1 = uvec1 class uvec1: x: int @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.UAnyVector2, glm_typing.UAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> uvec1: ... def __pos__(self) -> uvec1: ... def __abs__(self) -> uvec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> uvec1: ... def __add__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __radd__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __iadd__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __sub__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __rsub__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __isub__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... @overload def __mul__(self, other: glm_typing.Number) -> uvec1: ... @overload def __mul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __mul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> uvec1: ... @overload def __rmul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __rmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> uvec1: ... @overload def __imul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __imul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __rmod__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __imod__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __pow__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __rpow__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __ipow__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __truediv__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __rtruediv__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __itruediv__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __floordiv__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __rfloordiv__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __ifloordiv__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> uvec1: ... @overload def __matmul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __matmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> uvec1: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> uvec1: ... @overload def __imatmul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __divmod__(self, other: uvec1) -> Tuple[uvec1, uvec1]: ... u32vec2 = uvec2 class uvec2: x: int y: int @property def xy(self) -> u32vec2: ... @xy.setter def xy(self, value: glm_typing.U32Vector2) -> None: ... @property def yx(self) -> u32vec2: ... @yx.setter def yx(self, value: glm_typing.U32Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.UAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> uvec2: ... def __pos__(self) -> uvec2: ... def __abs__(self) -> uvec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> uvec2: ... def __add__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __radd__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __iadd__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __sub__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __rsub__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __isub__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... @overload def __mul__(self, other: glm_typing.Number) -> uvec2: ... @overload def __mul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __mul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> uvec2: ... @overload def __rmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __rmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> uvec2: ... @overload def __imul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __imul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __rmod__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __imod__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __pow__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __rpow__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __ipow__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __truediv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __rtruediv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __itruediv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __floordiv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __rfloordiv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __ifloordiv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> uvec2: ... @overload def __matmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __matmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> uvec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> uvec2: ... @overload def __imatmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __divmod__(self, other: uvec2) -> Tuple[uvec2, uvec2]: ... u32vec3 = uvec3 class uvec3: x: int y: int z: int @property def xy(self) -> u32vec2: ... @xy.setter def xy(self, value: glm_typing.U32Vector2) -> None: ... @property def yx(self) -> u32vec2: ... @yx.setter def yx(self, value: glm_typing.U32Vector2) -> None: ... @property def xz(self) -> u32vec2: ... @xz.setter def xz(self, value: glm_typing.U32Vector2) -> None: ... @property def zx(self) -> u32vec2: ... @zx.setter def zx(self, value: glm_typing.U32Vector2) -> None: ... @property def yz(self) -> u32vec2: ... @yz.setter def yz(self, value: glm_typing.U32Vector2) -> None: ... @property def zy(self) -> u32vec2: ... @zy.setter def zy(self, value: glm_typing.U32Vector2) -> None: ... @property def xyz(self) -> u32vec3: ... @xyz.setter def xyz(self, value: glm_typing.U32Vector3) -> None: ... @property def xzy(self) -> u32vec3: ... @xzy.setter def xzy(self, value: glm_typing.U32Vector3) -> None: ... @property def yxz(self) -> u32vec3: ... @yxz.setter def yxz(self, value: glm_typing.U32Vector3) -> None: ... @property def yzx(self) -> u32vec3: ... @yzx.setter def yzx(self, value: glm_typing.U32Vector3) -> None: ... @property def zxy(self) -> u32vec3: ... @zxy.setter def zxy(self, value: glm_typing.U32Vector3) -> None: ... @property def zyx(self) -> u32vec3: ... @zyx.setter def zyx(self, value: glm_typing.U32Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> uvec3: ... def __pos__(self) -> uvec3: ... def __abs__(self) -> uvec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> uvec3: ... def __add__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __radd__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __iadd__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __sub__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __rsub__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __isub__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... @overload def __mul__(self, other: glm_typing.Number) -> uvec3: ... @overload def __mul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __mul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> uvec3: ... @overload def __rmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __rmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> uvec3: ... @overload def __imul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __imul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __rmod__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __imod__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __pow__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __rpow__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __ipow__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __truediv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __rtruediv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __itruediv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __floordiv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __rfloordiv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __ifloordiv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> uvec3: ... @overload def __matmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __matmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> uvec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> uvec3: ... @overload def __imatmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __divmod__(self, other: uvec3) -> Tuple[uvec3, uvec3]: ... u32vec4 = uvec4 class uvec4: x: int y: int z: int w: int @property def xy(self) -> u32vec2: ... @xy.setter def xy(self, value: glm_typing.U32Vector2) -> None: ... @property def yx(self) -> u32vec2: ... @yx.setter def yx(self, value: glm_typing.U32Vector2) -> None: ... @property def xz(self) -> u32vec2: ... @xz.setter def xz(self, value: glm_typing.U32Vector2) -> None: ... @property def zx(self) -> u32vec2: ... @zx.setter def zx(self, value: glm_typing.U32Vector2) -> None: ... @property def xw(self) -> u32vec2: ... @xw.setter def xw(self, value: glm_typing.U32Vector2) -> None: ... @property def wx(self) -> u32vec2: ... @wx.setter def wx(self, value: glm_typing.U32Vector2) -> None: ... @property def yz(self) -> u32vec2: ... @yz.setter def yz(self, value: glm_typing.U32Vector2) -> None: ... @property def zy(self) -> u32vec2: ... @zy.setter def zy(self, value: glm_typing.U32Vector2) -> None: ... @property def yw(self) -> u32vec2: ... @yw.setter def yw(self, value: glm_typing.U32Vector2) -> None: ... @property def wy(self) -> u32vec2: ... @wy.setter def wy(self, value: glm_typing.U32Vector2) -> None: ... @property def zw(self) -> u32vec2: ... @zw.setter def zw(self, value: glm_typing.U32Vector2) -> None: ... @property def wz(self) -> u32vec2: ... @wz.setter def wz(self, value: glm_typing.U32Vector2) -> None: ... @property def xyz(self) -> u32vec3: ... @xyz.setter def xyz(self, value: glm_typing.U32Vector3) -> None: ... @property def xzy(self) -> u32vec3: ... @xzy.setter def xzy(self, value: glm_typing.U32Vector3) -> None: ... @property def yxz(self) -> u32vec3: ... @yxz.setter def yxz(self, value: glm_typing.U32Vector3) -> None: ... @property def yzx(self) -> u32vec3: ... @yzx.setter def yzx(self, value: glm_typing.U32Vector3) -> None: ... @property def zxy(self) -> u32vec3: ... @zxy.setter def zxy(self, value: glm_typing.U32Vector3) -> None: ... @property def zyx(self) -> u32vec3: ... @zyx.setter def zyx(self, value: glm_typing.U32Vector3) -> None: ... @property def xyw(self) -> u32vec3: ... @xyw.setter def xyw(self, value: glm_typing.U32Vector3) -> None: ... @property def xwy(self) -> u32vec3: ... @xwy.setter def xwy(self, value: glm_typing.U32Vector3) -> None: ... @property def yxw(self) -> u32vec3: ... @yxw.setter def yxw(self, value: glm_typing.U32Vector3) -> None: ... @property def ywx(self) -> u32vec3: ... @ywx.setter def ywx(self, value: glm_typing.U32Vector3) -> None: ... @property def wxy(self) -> u32vec3: ... @wxy.setter def wxy(self, value: glm_typing.U32Vector3) -> None: ... @property def wyx(self) -> u32vec3: ... @wyx.setter def wyx(self, value: glm_typing.U32Vector3) -> None: ... @property def xzw(self) -> u32vec3: ... @xzw.setter def xzw(self, value: glm_typing.U32Vector3) -> None: ... @property def xwz(self) -> u32vec3: ... @xwz.setter def xwz(self, value: glm_typing.U32Vector3) -> None: ... @property def zxw(self) -> u32vec3: ... @zxw.setter def zxw(self, value: glm_typing.U32Vector3) -> None: ... @property def zwx(self) -> u32vec3: ... @zwx.setter def zwx(self, value: glm_typing.U32Vector3) -> None: ... @property def wxz(self) -> u32vec3: ... @wxz.setter def wxz(self, value: glm_typing.U32Vector3) -> None: ... @property def wzx(self) -> u32vec3: ... @wzx.setter def wzx(self, value: glm_typing.U32Vector3) -> None: ... @property def yzw(self) -> u32vec3: ... @yzw.setter def yzw(self, value: glm_typing.U32Vector3) -> None: ... @property def ywz(self) -> u32vec3: ... @ywz.setter def ywz(self, value: glm_typing.U32Vector3) -> None: ... @property def zyw(self) -> u32vec3: ... @zyw.setter def zyw(self, value: glm_typing.U32Vector3) -> None: ... @property def zwy(self) -> u32vec3: ... @zwy.setter def zwy(self, value: glm_typing.U32Vector3) -> None: ... @property def wyz(self) -> u32vec3: ... @wyz.setter def wyz(self, value: glm_typing.U32Vector3) -> None: ... @property def wzy(self) -> u32vec3: ... @wzy.setter def wzy(self, value: glm_typing.U32Vector3) -> None: ... @property def xyzw(self) -> u32vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.U32Vector4) -> None: ... @property def xywz(self) -> u32vec4: ... @xywz.setter def xywz(self, value: glm_typing.U32Vector4) -> None: ... @property def xzyw(self) -> u32vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.U32Vector4) -> None: ... @property def xzwy(self) -> u32vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.U32Vector4) -> None: ... @property def xwyz(self) -> u32vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.U32Vector4) -> None: ... @property def xwzy(self) -> u32vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.U32Vector4) -> None: ... @property def yxzw(self) -> u32vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.U32Vector4) -> None: ... @property def yxwz(self) -> u32vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.U32Vector4) -> None: ... @property def yzxw(self) -> u32vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.U32Vector4) -> None: ... @property def yzwx(self) -> u32vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.U32Vector4) -> None: ... @property def ywxz(self) -> u32vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.U32Vector4) -> None: ... @property def ywzx(self) -> u32vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.U32Vector4) -> None: ... @property def zxyw(self) -> u32vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.U32Vector4) -> None: ... @property def zxwy(self) -> u32vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.U32Vector4) -> None: ... @property def zyxw(self) -> u32vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.U32Vector4) -> None: ... @property def zywx(self) -> u32vec4: ... @zywx.setter def zywx(self, value: glm_typing.U32Vector4) -> None: ... @property def zwxy(self) -> u32vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.U32Vector4) -> None: ... @property def zwyx(self) -> u32vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.U32Vector4) -> None: ... @property def wxyz(self) -> u32vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.U32Vector4) -> None: ... @property def wxzy(self) -> u32vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.U32Vector4) -> None: ... @property def wyxz(self) -> u32vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.U32Vector4) -> None: ... @property def wyzx(self) -> u32vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.U32Vector4) -> None: ... @property def wzxy(self) -> u32vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.U32Vector4) -> None: ... @property def wzyx(self) -> u32vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.U32Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> uvec4: ... def __pos__(self) -> uvec4: ... def __abs__(self) -> uvec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> uvec4: ... def __add__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __radd__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __iadd__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __sub__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __rsub__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __isub__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... @overload def __mul__(self, other: glm_typing.Number) -> uvec4: ... @overload def __mul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __mul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> uvec4: ... @overload def __rmul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __rmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> uvec4: ... @overload def __imul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __imul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __rmod__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __imod__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __pow__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __rpow__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __ipow__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __truediv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __rtruediv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __itruediv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __floordiv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __rfloordiv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __ifloordiv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> uvec4: ... @overload def __matmul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __matmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> uvec4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> uvec4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __divmod__(self, other: uvec4) -> Tuple[uvec4, uvec4]: ... f32vec1 = vec1 fvec1 = vec1 class vec1: x: float @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.FAnyVector2, glm_typing.FAnyVector3, glm_typing.FAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> vec1: ... def __pos__(self) -> vec1: ... def __abs__(self) -> vec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> vec1: ... def __add__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __radd__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __iadd__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __sub__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __rsub__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __isub__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... @overload def __mul__(self, other: glm_typing.Number) -> vec1: ... @overload def __mul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __mul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> vec1: ... @overload def __rmul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __rmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> vec1: ... @overload def __imul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __imul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __rmod__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __imod__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __pow__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __rpow__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __ipow__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __truediv__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __rtruediv__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __itruediv__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __floordiv__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __rfloordiv__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __ifloordiv__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> vec1: ... @overload def __matmul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __matmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> vec1: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> vec1: ... @overload def __imatmul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __divmod__(self, other: vec1) -> Tuple[vec1, vec1]: ... f32vec2 = vec2 fvec2 = vec2 class vec2: x: float y: float @property def xy(self) -> f32vec2: ... @xy.setter def xy(self, value: glm_typing.F32Vector2) -> None: ... @property def yx(self) -> f32vec2: ... @yx.setter def yx(self, value: glm_typing.F32Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.FAnyVector3, glm_typing.FAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> vec2: ... def __pos__(self) -> vec2: ... def __abs__(self) -> vec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> vec2: ... def __add__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __radd__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __iadd__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __sub__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __rsub__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __isub__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... @overload def __mul__(self, other: glm_typing.Number) -> vec2: ... @overload def __mul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __mul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> vec2: ... @overload def __rmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> vec2: ... @overload def __imul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __imul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __rmod__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __imod__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __pow__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __rpow__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __ipow__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __truediv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __rtruediv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __itruediv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __floordiv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __rfloordiv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __ifloordiv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> vec2: ... @overload def __matmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __divmod__(self, other: vec2) -> Tuple[vec2, vec2]: ... f32vec3 = vec3 fvec3 = vec3 class vec3: x: float y: float z: float @property def xy(self) -> f32vec2: ... @xy.setter def xy(self, value: glm_typing.F32Vector2) -> None: ... @property def yx(self) -> f32vec2: ... @yx.setter def yx(self, value: glm_typing.F32Vector2) -> None: ... @property def xz(self) -> f32vec2: ... @xz.setter def xz(self, value: glm_typing.F32Vector2) -> None: ... @property def zx(self) -> f32vec2: ... @zx.setter def zx(self, value: glm_typing.F32Vector2) -> None: ... @property def yz(self) -> f32vec2: ... @yz.setter def yz(self, value: glm_typing.F32Vector2) -> None: ... @property def zy(self) -> f32vec2: ... @zy.setter def zy(self, value: glm_typing.F32Vector2) -> None: ... @property def xyz(self) -> f32vec3: ... @xyz.setter def xyz(self, value: glm_typing.F32Vector3) -> None: ... @property def xzy(self) -> f32vec3: ... @xzy.setter def xzy(self, value: glm_typing.F32Vector3) -> None: ... @property def yxz(self) -> f32vec3: ... @yxz.setter def yxz(self, value: glm_typing.F32Vector3) -> None: ... @property def yzx(self) -> f32vec3: ... @yzx.setter def yzx(self, value: glm_typing.F32Vector3) -> None: ... @property def zxy(self) -> f32vec3: ... @zxy.setter def zxy(self, value: glm_typing.F32Vector3) -> None: ... @property def zyx(self) -> f32vec3: ... @zyx.setter def zyx(self, value: glm_typing.F32Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.FAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> vec3: ... def __pos__(self) -> vec3: ... def __abs__(self) -> vec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> vec3: ... def __add__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __radd__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __iadd__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __sub__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __rsub__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __isub__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... @overload def __mul__(self, other: glm_typing.Number) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __rmod__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __imod__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __pow__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __rpow__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __ipow__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __truediv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __rtruediv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __itruediv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __floordiv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __rfloordiv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __ifloordiv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __divmod__(self, other: vec3) -> Tuple[vec3, vec3]: ... f32vec4 = vec4 fvec4 = vec4 class vec4: x: float y: float z: float w: float @property def xy(self) -> f32vec2: ... @xy.setter def xy(self, value: glm_typing.F32Vector2) -> None: ... @property def yx(self) -> f32vec2: ... @yx.setter def yx(self, value: glm_typing.F32Vector2) -> None: ... @property def xz(self) -> f32vec2: ... @xz.setter def xz(self, value: glm_typing.F32Vector2) -> None: ... @property def zx(self) -> f32vec2: ... @zx.setter def zx(self, value: glm_typing.F32Vector2) -> None: ... @property def xw(self) -> f32vec2: ... @xw.setter def xw(self, value: glm_typing.F32Vector2) -> None: ... @property def wx(self) -> f32vec2: ... @wx.setter def wx(self, value: glm_typing.F32Vector2) -> None: ... @property def yz(self) -> f32vec2: ... @yz.setter def yz(self, value: glm_typing.F32Vector2) -> None: ... @property def zy(self) -> f32vec2: ... @zy.setter def zy(self, value: glm_typing.F32Vector2) -> None: ... @property def yw(self) -> f32vec2: ... @yw.setter def yw(self, value: glm_typing.F32Vector2) -> None: ... @property def wy(self) -> f32vec2: ... @wy.setter def wy(self, value: glm_typing.F32Vector2) -> None: ... @property def zw(self) -> f32vec2: ... @zw.setter def zw(self, value: glm_typing.F32Vector2) -> None: ... @property def wz(self) -> f32vec2: ... @wz.setter def wz(self, value: glm_typing.F32Vector2) -> None: ... @property def xyz(self) -> f32vec3: ... @xyz.setter def xyz(self, value: glm_typing.F32Vector3) -> None: ... @property def xzy(self) -> f32vec3: ... @xzy.setter def xzy(self, value: glm_typing.F32Vector3) -> None: ... @property def yxz(self) -> f32vec3: ... @yxz.setter def yxz(self, value: glm_typing.F32Vector3) -> None: ... @property def yzx(self) -> f32vec3: ... @yzx.setter def yzx(self, value: glm_typing.F32Vector3) -> None: ... @property def zxy(self) -> f32vec3: ... @zxy.setter def zxy(self, value: glm_typing.F32Vector3) -> None: ... @property def zyx(self) -> f32vec3: ... @zyx.setter def zyx(self, value: glm_typing.F32Vector3) -> None: ... @property def xyw(self) -> f32vec3: ... @xyw.setter def xyw(self, value: glm_typing.F32Vector3) -> None: ... @property def xwy(self) -> f32vec3: ... @xwy.setter def xwy(self, value: glm_typing.F32Vector3) -> None: ... @property def yxw(self) -> f32vec3: ... @yxw.setter def yxw(self, value: glm_typing.F32Vector3) -> None: ... @property def ywx(self) -> f32vec3: ... @ywx.setter def ywx(self, value: glm_typing.F32Vector3) -> None: ... @property def wxy(self) -> f32vec3: ... @wxy.setter def wxy(self, value: glm_typing.F32Vector3) -> None: ... @property def wyx(self) -> f32vec3: ... @wyx.setter def wyx(self, value: glm_typing.F32Vector3) -> None: ... @property def xzw(self) -> f32vec3: ... @xzw.setter def xzw(self, value: glm_typing.F32Vector3) -> None: ... @property def xwz(self) -> f32vec3: ... @xwz.setter def xwz(self, value: glm_typing.F32Vector3) -> None: ... @property def zxw(self) -> f32vec3: ... @zxw.setter def zxw(self, value: glm_typing.F32Vector3) -> None: ... @property def zwx(self) -> f32vec3: ... @zwx.setter def zwx(self, value: glm_typing.F32Vector3) -> None: ... @property def wxz(self) -> f32vec3: ... @wxz.setter def wxz(self, value: glm_typing.F32Vector3) -> None: ... @property def wzx(self) -> f32vec3: ... @wzx.setter def wzx(self, value: glm_typing.F32Vector3) -> None: ... @property def yzw(self) -> f32vec3: ... @yzw.setter def yzw(self, value: glm_typing.F32Vector3) -> None: ... @property def ywz(self) -> f32vec3: ... @ywz.setter def ywz(self, value: glm_typing.F32Vector3) -> None: ... @property def zyw(self) -> f32vec3: ... @zyw.setter def zyw(self, value: glm_typing.F32Vector3) -> None: ... @property def zwy(self) -> f32vec3: ... @zwy.setter def zwy(self, value: glm_typing.F32Vector3) -> None: ... @property def wyz(self) -> f32vec3: ... @wyz.setter def wyz(self, value: glm_typing.F32Vector3) -> None: ... @property def wzy(self) -> f32vec3: ... @wzy.setter def wzy(self, value: glm_typing.F32Vector3) -> None: ... @property def xyzw(self) -> f32vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.F32Vector4) -> None: ... @property def xywz(self) -> f32vec4: ... @xywz.setter def xywz(self, value: glm_typing.F32Vector4) -> None: ... @property def xzyw(self) -> f32vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.F32Vector4) -> None: ... @property def xzwy(self) -> f32vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.F32Vector4) -> None: ... @property def xwyz(self) -> f32vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.F32Vector4) -> None: ... @property def xwzy(self) -> f32vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.F32Vector4) -> None: ... @property def yxzw(self) -> f32vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.F32Vector4) -> None: ... @property def yxwz(self) -> f32vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.F32Vector4) -> None: ... @property def yzxw(self) -> f32vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.F32Vector4) -> None: ... @property def yzwx(self) -> f32vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.F32Vector4) -> None: ... @property def ywxz(self) -> f32vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.F32Vector4) -> None: ... @property def ywzx(self) -> f32vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.F32Vector4) -> None: ... @property def zxyw(self) -> f32vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.F32Vector4) -> None: ... @property def zxwy(self) -> f32vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.F32Vector4) -> None: ... @property def zyxw(self) -> f32vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.F32Vector4) -> None: ... @property def zywx(self) -> f32vec4: ... @zywx.setter def zywx(self, value: glm_typing.F32Vector4) -> None: ... @property def zwxy(self) -> f32vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.F32Vector4) -> None: ... @property def zwyx(self) -> f32vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.F32Vector4) -> None: ... @property def wxyz(self) -> f32vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.F32Vector4) -> None: ... @property def wxzy(self) -> f32vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.F32Vector4) -> None: ... @property def wyxz(self) -> f32vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.F32Vector4) -> None: ... @property def wyzx(self) -> f32vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.F32Vector4) -> None: ... @property def wzxy(self) -> f32vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.F32Vector4) -> None: ... @property def wzyx(self) -> f32vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.F32Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> vec4: ... def __pos__(self) -> vec4: ... def __abs__(self) -> vec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float, float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> vec4: ... def __add__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __radd__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __iadd__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __sub__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __rsub__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __isub__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... @overload def __mul__(self, other: glm_typing.Number) -> vec4: ... @overload def __mul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __mul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> vec4: ... @overload def __rmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __rmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> vec4: ... @overload def __imul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __imul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __rmod__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __imod__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __pow__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __rpow__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __ipow__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __truediv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __rtruediv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __itruediv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __floordiv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __rfloordiv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __ifloordiv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> vec4: ... @overload def __matmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __matmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __divmod__(self, other: vec4) -> Tuple[vec4, vec4]: ... dmat2 = dmat2x2 f64mat2 = dmat2x2 f64mat2x2 = dmat2x2 class dmat2x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x2, glm_typing.DAnyMatrix2x2, glm_typing.DAnyMatrix2x3, glm_typing.DAnyMatrix2x4, glm_typing.DAnyMatrix3x2, glm_typing.DAnyMatrix3x3, glm_typing.DAnyMatrix3x4, glm_typing.DAnyMatrix4x2, glm_typing.DAnyMatrix4x3, glm_typing.DAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[dmvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> dmvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[dvec2, dmvec2]) -> None: ... def __neg__(self) -> dmat2x2: ... def __pos__(self) -> dmat2x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float], Tuple[float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmat2x2: ... def __add__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... def __radd__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... def __iadd__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... def __sub__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... def __rsub__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... def __isub__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __mul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __mul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __rmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __rmul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __imul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __imul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __truediv__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __truediv__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __rtruediv__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __rtruediv__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __itruediv__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __itruediv__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __matmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __matmul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __imatmul__(self, other: glm_typing.D64Vector1) -> dvec1: ... f64mat2x3 = dmat2x3 class dmat2x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x3, glm_typing.DAnyMatrix2x3, glm_typing.DAnyMatrix2x4, glm_typing.DAnyMatrix3x3, glm_typing.DAnyMatrix3x4, glm_typing.DAnyMatrix4x3, glm_typing.DAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[dmvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> dmvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[dvec3, dmvec3]) -> None: ... def __neg__(self) -> dmat2x3: ... def __pos__(self) -> dmat2x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float], Tuple[float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmat2x3: ... def __add__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... def __radd__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... def __iadd__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... def __sub__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... def __rsub__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... def __isub__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __mul__(self, other: glm_typing.D64Vector2) -> dvec3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __rmul__(self, other: glm_typing.D64Vector2) -> dvec3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __imul__(self, other: glm_typing.D64Vector2) -> dvec3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __matmul__(self, other: glm_typing.D64Vector2) -> dvec3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector2) -> dvec3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector2) -> dvec3: ... f64mat2x4 = dmat2x4 class dmat2x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x4, glm_typing.DAnyMatrix2x4, glm_typing.DAnyMatrix3x4, glm_typing.DAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[dmvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> dmvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[dvec4, dmvec4]) -> None: ... def __neg__(self) -> dmat2x4: ... def __pos__(self) -> dmat2x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float, float], Tuple[float, float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmat2x4: ... def __add__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... def __radd__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... def __iadd__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... def __sub__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... def __rsub__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... def __isub__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __mul__(self, other: glm_typing.D64Vector2) -> dvec4: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __rmul__(self, other: glm_typing.D64Vector2) -> dvec4: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __imul__(self, other: glm_typing.D64Vector2) -> dvec4: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __matmul__(self, other: glm_typing.D64Vector2) -> dvec4: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector2) -> dvec4: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector2) -> dvec4: ... f64mat3x2 = dmat3x2 class dmat3x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x2, glm_typing.DAnyMatrix3x2, glm_typing.DAnyMatrix3x3, glm_typing.DAnyMatrix3x4, glm_typing.DAnyMatrix4x2, glm_typing.DAnyMatrix4x3, glm_typing.DAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[dmvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> dmvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[dvec2, dmvec2]) -> None: ... def __neg__(self) -> dmat3x2: ... def __pos__(self) -> dmat3x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float], Tuple[float, float], Tuple[float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmat3x2: ... def __add__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... def __radd__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... def __iadd__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... def __sub__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... def __rsub__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... def __isub__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __mul__(self, other: glm_typing.D64Vector3) -> dvec2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __rmul__(self, other: glm_typing.D64Vector3) -> dvec2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __imul__(self, other: glm_typing.D64Vector3) -> dvec2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __matmul__(self, other: glm_typing.D64Vector3) -> dvec2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector3) -> dvec2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector3) -> dvec2: ... dmat3 = dmat3x3 f64mat3 = dmat3x3 f64mat3x3 = dmat3x3 class dmat3x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x3, glm_typing.DAnyMatrix3x3, glm_typing.DAnyMatrix3x4, glm_typing.DAnyMatrix4x3, glm_typing.DAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[dmvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> dmvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[dvec3, dmvec3]) -> None: ... def __neg__(self) -> dmat3x3: ... def __pos__(self) -> dmat3x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float], Tuple[float, float, float], Tuple[float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmat3x3: ... def __add__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... def __radd__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... def __iadd__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... def __sub__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... def __rsub__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... def __isub__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __mul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __mul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __rmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __rmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __imul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __imul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __truediv__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __truediv__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __rtruediv__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __rtruediv__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __itruediv__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __itruediv__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __matmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __matmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __imatmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... f64mat3x4 = dmat3x4 class dmat3x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x4, glm_typing.DAnyMatrix3x4, glm_typing.DAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[dmvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> dmvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[dvec4, dmvec4]) -> None: ... def __neg__(self) -> dmat3x4: ... def __pos__(self) -> dmat3x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float, float], Tuple[float, float, float, float], Tuple[float, float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmat3x4: ... def __add__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... def __radd__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... def __iadd__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... def __sub__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... def __rsub__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... def __isub__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __mul__(self, other: glm_typing.D64Vector3) -> dvec4: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __rmul__(self, other: glm_typing.D64Vector3) -> dvec4: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __imul__(self, other: glm_typing.D64Vector3) -> dvec4: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __matmul__(self, other: glm_typing.D64Vector3) -> dvec4: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector3) -> dvec4: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector3) -> dvec4: ... f64mat4x2 = dmat4x2 class dmat4x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x2, glm_typing.DAnyMatrix4x2, glm_typing.DAnyMatrix4x3, glm_typing.DAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[dmvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> dmvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[dvec2, dmvec2]) -> None: ... def __neg__(self) -> dmat4x2: ... def __pos__(self) -> dmat4x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float], Tuple[float, float], Tuple[float, float], Tuple[float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmat4x2: ... def __add__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... def __radd__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... def __iadd__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... def __sub__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... def __rsub__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... def __isub__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __mul__(self, other: glm_typing.D64Vector4) -> dvec2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __rmul__(self, other: glm_typing.D64Vector4) -> dvec2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __imul__(self, other: glm_typing.D64Vector4) -> dvec2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __matmul__(self, other: glm_typing.D64Vector4) -> dvec2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector4) -> dvec2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector4) -> dvec2: ... f64mat4x3 = dmat4x3 class dmat4x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x3, glm_typing.DAnyMatrix4x3, glm_typing.DAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[dmvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> dmvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[dvec3, dmvec3]) -> None: ... def __neg__(self) -> dmat4x3: ... def __pos__(self) -> dmat4x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float], Tuple[float, float, float], Tuple[float, float, float], Tuple[float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmat4x3: ... def __add__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... def __radd__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... def __iadd__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... def __sub__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... def __rsub__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... def __isub__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __mul__(self, other: glm_typing.D64Vector4) -> dvec3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __rmul__(self, other: glm_typing.D64Vector4) -> dvec3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __imul__(self, other: glm_typing.D64Vector4) -> dvec3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __matmul__(self, other: glm_typing.D64Vector4) -> dvec3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector4) -> dvec3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector4) -> dvec3: ... dmat4 = dmat4x4 f64mat4 = dmat4x4 f64mat4x4 = dmat4x4 class dmat4x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, _12: glm_typing.Number, _13: glm_typing.Number, _14: glm_typing.Number, _15: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x4, glm_typing.DAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[dmvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> dmvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[dvec4, dmvec4]) -> None: ... def __neg__(self) -> dmat4x4: ... def __pos__(self) -> dmat4x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float, float], Tuple[float, float, float, float], Tuple[float, float, float, float], Tuple[float, float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmat4x4: ... def __add__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... def __radd__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... def __iadd__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... def __sub__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... def __rsub__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... def __isub__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __mul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __mul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __rmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __rmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __imul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __imul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __truediv__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __truediv__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __rtruediv__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __rtruediv__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __itruediv__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __itruediv__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __matmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __matmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... i32mat2 = imat2x2 i32mat2x2 = imat2x2 imat2 = imat2x2 class imat2x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x2, glm_typing.IAnyMatrix2x2, glm_typing.IAnyMatrix2x3, glm_typing.IAnyMatrix2x4, glm_typing.IAnyMatrix3x2, glm_typing.IAnyMatrix3x3, glm_typing.IAnyMatrix3x4, glm_typing.IAnyMatrix4x2, glm_typing.IAnyMatrix4x3, glm_typing.IAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[imvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> imvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[ivec2, imvec2]) -> None: ... def __neg__(self) -> imat2x2: ... def __pos__(self) -> imat2x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int], Tuple[int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imat2x2: ... def __add__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... def __radd__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... def __iadd__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... def __sub__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... def __rsub__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... def __isub__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __mul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __mul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __rmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __rmul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __imul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __imul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __truediv__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __truediv__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __rtruediv__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __rtruediv__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __itruediv__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __itruediv__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __matmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __matmul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __imatmul__(self, other: glm_typing.I32Vector1) -> ivec1: ... i32mat2x3 = imat2x3 class imat2x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x3, glm_typing.IAnyMatrix2x3, glm_typing.IAnyMatrix2x4, glm_typing.IAnyMatrix3x3, glm_typing.IAnyMatrix3x4, glm_typing.IAnyMatrix4x3, glm_typing.IAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[imvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> imvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[ivec3, imvec3]) -> None: ... def __neg__(self) -> imat2x3: ... def __pos__(self) -> imat2x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int], Tuple[int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imat2x3: ... def __add__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... def __radd__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... def __iadd__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... def __sub__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... def __rsub__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... def __isub__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __mul__(self, other: glm_typing.I32Vector2) -> ivec3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __rmul__(self, other: glm_typing.I32Vector2) -> ivec3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __imul__(self, other: glm_typing.I32Vector2) -> ivec3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __matmul__(self, other: glm_typing.I32Vector2) -> ivec3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector2) -> ivec3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector2) -> ivec3: ... i32mat2x4 = imat2x4 class imat2x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x4, glm_typing.IAnyMatrix2x4, glm_typing.IAnyMatrix3x4, glm_typing.IAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[imvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> imvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[ivec4, imvec4]) -> None: ... def __neg__(self) -> imat2x4: ... def __pos__(self) -> imat2x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int, int], Tuple[int, int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imat2x4: ... def __add__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... def __radd__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... def __iadd__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... def __sub__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... def __rsub__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... def __isub__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __mul__(self, other: glm_typing.I32Vector2) -> ivec4: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __rmul__(self, other: glm_typing.I32Vector2) -> ivec4: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __imul__(self, other: glm_typing.I32Vector2) -> ivec4: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __matmul__(self, other: glm_typing.I32Vector2) -> ivec4: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector2) -> ivec4: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector2) -> ivec4: ... i32mat3x2 = imat3x2 class imat3x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x2, glm_typing.IAnyMatrix3x2, glm_typing.IAnyMatrix3x3, glm_typing.IAnyMatrix3x4, glm_typing.IAnyMatrix4x2, glm_typing.IAnyMatrix4x3, glm_typing.IAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[imvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> imvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[ivec2, imvec2]) -> None: ... def __neg__(self) -> imat3x2: ... def __pos__(self) -> imat3x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int], Tuple[int, int], Tuple[int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imat3x2: ... def __add__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... def __radd__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... def __iadd__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... def __sub__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... def __rsub__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... def __isub__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __mul__(self, other: glm_typing.I32Vector3) -> ivec2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __rmul__(self, other: glm_typing.I32Vector3) -> ivec2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __imul__(self, other: glm_typing.I32Vector3) -> ivec2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __matmul__(self, other: glm_typing.I32Vector3) -> ivec2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector3) -> ivec2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector3) -> ivec2: ... i32mat3 = imat3x3 i32mat3x3 = imat3x3 imat3 = imat3x3 class imat3x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x3, glm_typing.IAnyMatrix3x3, glm_typing.IAnyMatrix3x4, glm_typing.IAnyMatrix4x3, glm_typing.IAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[imvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> imvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[ivec3, imvec3]) -> None: ... def __neg__(self) -> imat3x3: ... def __pos__(self) -> imat3x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int], Tuple[int, int, int], Tuple[int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imat3x3: ... def __add__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... def __radd__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... def __iadd__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... def __sub__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... def __rsub__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... def __isub__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __mul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __mul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __rmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __rmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __imul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __imul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __truediv__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __truediv__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __rtruediv__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __rtruediv__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __itruediv__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __itruediv__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __matmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __matmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __imatmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... i32mat3x4 = imat3x4 class imat3x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x4, glm_typing.IAnyMatrix3x4, glm_typing.IAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[imvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> imvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[ivec4, imvec4]) -> None: ... def __neg__(self) -> imat3x4: ... def __pos__(self) -> imat3x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int, int], Tuple[int, int, int, int], Tuple[int, int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imat3x4: ... def __add__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... def __radd__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... def __iadd__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... def __sub__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... def __rsub__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... def __isub__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __mul__(self, other: glm_typing.I32Vector3) -> ivec4: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __rmul__(self, other: glm_typing.I32Vector3) -> ivec4: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __imul__(self, other: glm_typing.I32Vector3) -> ivec4: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __matmul__(self, other: glm_typing.I32Vector3) -> ivec4: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector3) -> ivec4: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector3) -> ivec4: ... i32mat4x2 = imat4x2 class imat4x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x2, glm_typing.IAnyMatrix4x2, glm_typing.IAnyMatrix4x3, glm_typing.IAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[imvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> imvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[ivec2, imvec2]) -> None: ... def __neg__(self) -> imat4x2: ... def __pos__(self) -> imat4x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int], Tuple[int, int], Tuple[int, int], Tuple[int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imat4x2: ... def __add__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... def __radd__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... def __iadd__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... def __sub__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... def __rsub__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... def __isub__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __mul__(self, other: glm_typing.I32Vector4) -> ivec2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __rmul__(self, other: glm_typing.I32Vector4) -> ivec2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __imul__(self, other: glm_typing.I32Vector4) -> ivec2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __matmul__(self, other: glm_typing.I32Vector4) -> ivec2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector4) -> ivec2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector4) -> ivec2: ... i32mat4x3 = imat4x3 class imat4x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x3, glm_typing.IAnyMatrix4x3, glm_typing.IAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[imvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> imvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[ivec3, imvec3]) -> None: ... def __neg__(self) -> imat4x3: ... def __pos__(self) -> imat4x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int], Tuple[int, int, int], Tuple[int, int, int], Tuple[int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imat4x3: ... def __add__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... def __radd__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... def __iadd__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... def __sub__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... def __rsub__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... def __isub__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __mul__(self, other: glm_typing.I32Vector4) -> ivec3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __rmul__(self, other: glm_typing.I32Vector4) -> ivec3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __imul__(self, other: glm_typing.I32Vector4) -> ivec3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __matmul__(self, other: glm_typing.I32Vector4) -> ivec3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector4) -> ivec3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector4) -> ivec3: ... i32mat4 = imat4x4 i32mat4x4 = imat4x4 imat4 = imat4x4 class imat4x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, _12: glm_typing.Number, _13: glm_typing.Number, _14: glm_typing.Number, _15: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x4, glm_typing.IAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[imvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> imvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[ivec4, imvec4]) -> None: ... def __neg__(self) -> imat4x4: ... def __pos__(self) -> imat4x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int, int], Tuple[int, int, int, int], Tuple[int, int, int, int], Tuple[int, int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imat4x4: ... def __add__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... def __radd__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... def __iadd__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... def __sub__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... def __rsub__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... def __isub__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __mul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __mul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __rmul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __rmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __imul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __imul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __truediv__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __truediv__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __rtruediv__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __rtruediv__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __itruediv__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __itruediv__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __matmul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __matmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... f32mat2 = mat2x2 f32mat2x2 = mat2x2 fmat2 = mat2x2 fmat2x2 = mat2x2 mat2 = mat2x2 class mat2x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x2, glm_typing.FAnyMatrix2x2, glm_typing.FAnyMatrix2x3, glm_typing.FAnyMatrix2x4, glm_typing.FAnyMatrix3x2, glm_typing.FAnyMatrix3x3, glm_typing.FAnyMatrix3x4, glm_typing.FAnyMatrix4x2, glm_typing.FAnyMatrix4x3, glm_typing.FAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[mvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> mvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[vec2, mvec2]) -> None: ... def __neg__(self) -> mat2x2: ... def __pos__(self) -> mat2x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float], Tuple[float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mat2x2: ... def __add__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... def __radd__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... def __iadd__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... def __sub__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... def __rsub__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... def __isub__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __mul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __mul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __rmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __imul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __imul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __truediv__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __truediv__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __rtruediv__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __rtruediv__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __itruediv__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __itruediv__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __matmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.F32Vector1) -> vec1: ... f32mat2x3 = mat2x3 fmat2x3 = mat2x3 class mat2x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x3, glm_typing.FAnyMatrix2x3, glm_typing.FAnyMatrix2x4, glm_typing.FAnyMatrix3x3, glm_typing.FAnyMatrix3x4, glm_typing.FAnyMatrix4x3, glm_typing.FAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[mvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> mvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[vec3, mvec3]) -> None: ... def __neg__(self) -> mat2x3: ... def __pos__(self) -> mat2x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float], Tuple[float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mat2x3: ... def __add__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... def __radd__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... def __iadd__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... def __sub__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... def __rsub__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... def __isub__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __mul__(self, other: glm_typing.F32Vector2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __rmul__(self, other: glm_typing.F32Vector2) -> vec3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __imul__(self, other: glm_typing.F32Vector2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __matmul__(self, other: glm_typing.F32Vector2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector2) -> vec3: ... f32mat2x4 = mat2x4 fmat2x4 = mat2x4 class mat2x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x4, glm_typing.FAnyMatrix2x4, glm_typing.FAnyMatrix3x4, glm_typing.FAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[mvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> mvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[vec4, mvec4]) -> None: ... def __neg__(self) -> mat2x4: ... def __pos__(self) -> mat2x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float, float], Tuple[float, float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mat2x4: ... def __add__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... def __radd__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... def __iadd__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... def __sub__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... def __rsub__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... def __isub__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __mul__(self, other: glm_typing.F32Vector2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __rmul__(self, other: glm_typing.F32Vector2) -> vec4: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __imul__(self, other: glm_typing.F32Vector2) -> vec4: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __matmul__(self, other: glm_typing.F32Vector2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector2) -> vec4: ... f32mat3x2 = mat3x2 fmat3x2 = mat3x2 class mat3x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x2, glm_typing.FAnyMatrix3x2, glm_typing.FAnyMatrix3x3, glm_typing.FAnyMatrix3x4, glm_typing.FAnyMatrix4x2, glm_typing.FAnyMatrix4x3, glm_typing.FAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[mvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> mvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[vec2, mvec2]) -> None: ... def __neg__(self) -> mat3x2: ... def __pos__(self) -> mat3x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float], Tuple[float, float], Tuple[float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mat3x2: ... def __add__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... def __radd__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... def __iadd__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... def __sub__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... def __rsub__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... def __isub__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __mul__(self, other: glm_typing.F32Vector3) -> vec2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __rmul__(self, other: glm_typing.F32Vector3) -> vec2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __imul__(self, other: glm_typing.F32Vector3) -> vec2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __matmul__(self, other: glm_typing.F32Vector3) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector3) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector3) -> vec2: ... f32mat3 = mat3x3 f32mat3x3 = mat3x3 fmat3 = mat3x3 fmat3x3 = mat3x3 mat3 = mat3x3 class mat3x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x3, glm_typing.FAnyMatrix3x3, glm_typing.FAnyMatrix3x4, glm_typing.FAnyMatrix4x3, glm_typing.FAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[mvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> mvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[vec3, mvec3]) -> None: ... def __neg__(self) -> mat3x3: ... def __pos__(self) -> mat3x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float], Tuple[float, float, float], Tuple[float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mat3x3: ... def __add__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... def __radd__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... def __iadd__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... def __sub__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... def __rsub__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... def __isub__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __mul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __rmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __imul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __truediv__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __truediv__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __rtruediv__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __rtruediv__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __itruediv__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __itruediv__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __matmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Vector2) -> vec2: ... f32mat3x4 = mat3x4 fmat3x4 = mat3x4 class mat3x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x4, glm_typing.FAnyMatrix3x4, glm_typing.FAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[mvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> mvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[vec4, mvec4]) -> None: ... def __neg__(self) -> mat3x4: ... def __pos__(self) -> mat3x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float, float], Tuple[float, float, float, float], Tuple[float, float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mat3x4: ... def __add__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... def __radd__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... def __iadd__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... def __sub__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... def __rsub__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... def __isub__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __mul__(self, other: glm_typing.F32Vector3) -> vec4: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __rmul__(self, other: glm_typing.F32Vector3) -> vec4: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __imul__(self, other: glm_typing.F32Vector3) -> vec4: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __matmul__(self, other: glm_typing.F32Vector3) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector3) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector3) -> vec4: ... f32mat4x2 = mat4x2 fmat4x2 = mat4x2 class mat4x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x2, glm_typing.FAnyMatrix4x2, glm_typing.FAnyMatrix4x3, glm_typing.FAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[mvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> mvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[vec2, mvec2]) -> None: ... def __neg__(self) -> mat4x2: ... def __pos__(self) -> mat4x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float], Tuple[float, float], Tuple[float, float], Tuple[float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mat4x2: ... def __add__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... def __radd__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... def __iadd__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... def __sub__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... def __rsub__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... def __isub__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __mul__(self, other: glm_typing.F32Vector4) -> vec2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __rmul__(self, other: glm_typing.F32Vector4) -> vec2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __imul__(self, other: glm_typing.F32Vector4) -> vec2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __matmul__(self, other: glm_typing.F32Vector4) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector4) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector4) -> vec2: ... f32mat4x3 = mat4x3 fmat4x3 = mat4x3 class mat4x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x3, glm_typing.FAnyMatrix4x3, glm_typing.FAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[mvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> mvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[vec3, mvec3]) -> None: ... def __neg__(self) -> mat4x3: ... def __pos__(self) -> mat4x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float], Tuple[float, float, float], Tuple[float, float, float], Tuple[float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mat4x3: ... def __add__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... def __radd__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... def __iadd__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... def __sub__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... def __rsub__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... def __isub__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __mul__(self, other: glm_typing.F32Vector4) -> vec3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __rmul__(self, other: glm_typing.F32Vector4) -> vec3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __imul__(self, other: glm_typing.F32Vector4) -> vec3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __matmul__(self, other: glm_typing.F32Vector4) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector4) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector4) -> vec3: ... f32mat4 = mat4x4 f32mat4x4 = mat4x4 fmat4 = mat4x4 fmat4x4 = mat4x4 mat4 = mat4x4 class mat4x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, _12: glm_typing.Number, _13: glm_typing.Number, _14: glm_typing.Number, _15: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x4, glm_typing.FAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[mvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> mvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[vec4, mvec4]) -> None: ... def __neg__(self) -> mat4x4: ... def __pos__(self) -> mat4x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float, float], Tuple[float, float, float, float], Tuple[float, float, float, float], Tuple[float, float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mat4x4: ... def __add__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... def __radd__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... def __iadd__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... def __sub__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... def __rsub__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... def __isub__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __mul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __mul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __rmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __rmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __imul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __imul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __truediv__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __truediv__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __rtruediv__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __rtruediv__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __itruediv__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __itruediv__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __matmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __matmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector3) -> vec3: ... u32mat2 = umat2x2 u32mat2x2 = umat2x2 umat2 = umat2x2 class umat2x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x2, glm_typing.UAnyMatrix2x2, glm_typing.UAnyMatrix2x3, glm_typing.UAnyMatrix2x4, glm_typing.UAnyMatrix3x2, glm_typing.UAnyMatrix3x3, glm_typing.UAnyMatrix3x4, glm_typing.UAnyMatrix4x2, glm_typing.UAnyMatrix4x3, glm_typing.UAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[umvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> umvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[uvec2, umvec2]) -> None: ... def __neg__(self) -> umat2x2: ... def __pos__(self) -> umat2x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int], Tuple[int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umat2x2: ... def __add__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... def __radd__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... def __iadd__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... def __sub__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... def __rsub__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... def __isub__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __mul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __mul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __rmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __rmul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __imul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __imul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __truediv__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __truediv__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __rtruediv__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __rtruediv__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __itruediv__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __itruediv__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __matmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __matmul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __imatmul__(self, other: glm_typing.U32Vector1) -> uvec1: ... u32mat2x3 = umat2x3 class umat2x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x3, glm_typing.UAnyMatrix2x3, glm_typing.UAnyMatrix2x4, glm_typing.UAnyMatrix3x3, glm_typing.UAnyMatrix3x4, glm_typing.UAnyMatrix4x3, glm_typing.UAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[umvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> umvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[uvec3, umvec3]) -> None: ... def __neg__(self) -> umat2x3: ... def __pos__(self) -> umat2x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int], Tuple[int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umat2x3: ... def __add__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... def __radd__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... def __iadd__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... def __sub__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... def __rsub__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... def __isub__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __mul__(self, other: glm_typing.U32Vector2) -> uvec3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __rmul__(self, other: glm_typing.U32Vector2) -> uvec3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __imul__(self, other: glm_typing.U32Vector2) -> uvec3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __matmul__(self, other: glm_typing.U32Vector2) -> uvec3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector2) -> uvec3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector2) -> uvec3: ... u32mat2x4 = umat2x4 class umat2x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x4, glm_typing.UAnyMatrix2x4, glm_typing.UAnyMatrix3x4, glm_typing.UAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[umvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> umvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[uvec4, umvec4]) -> None: ... def __neg__(self) -> umat2x4: ... def __pos__(self) -> umat2x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int, int], Tuple[int, int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umat2x4: ... def __add__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... def __radd__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... def __iadd__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... def __sub__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... def __rsub__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... def __isub__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __mul__(self, other: glm_typing.U32Vector2) -> uvec4: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __rmul__(self, other: glm_typing.U32Vector2) -> uvec4: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __imul__(self, other: glm_typing.U32Vector2) -> uvec4: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __matmul__(self, other: glm_typing.U32Vector2) -> uvec4: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector2) -> uvec4: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector2) -> uvec4: ... u32mat3x2 = umat3x2 class umat3x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x2, glm_typing.UAnyMatrix3x2, glm_typing.UAnyMatrix3x3, glm_typing.UAnyMatrix3x4, glm_typing.UAnyMatrix4x2, glm_typing.UAnyMatrix4x3, glm_typing.UAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[umvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> umvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[uvec2, umvec2]) -> None: ... def __neg__(self) -> umat3x2: ... def __pos__(self) -> umat3x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int], Tuple[int, int], Tuple[int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umat3x2: ... def __add__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... def __radd__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... def __iadd__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... def __sub__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... def __rsub__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... def __isub__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __mul__(self, other: glm_typing.U32Vector3) -> uvec2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __rmul__(self, other: glm_typing.U32Vector3) -> uvec2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __imul__(self, other: glm_typing.U32Vector3) -> uvec2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __matmul__(self, other: glm_typing.U32Vector3) -> uvec2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector3) -> uvec2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector3) -> uvec2: ... u32mat3 = umat3x3 u32mat3x3 = umat3x3 umat3 = umat3x3 class umat3x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x3, glm_typing.UAnyMatrix3x3, glm_typing.UAnyMatrix3x4, glm_typing.UAnyMatrix4x3, glm_typing.UAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[umvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> umvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[uvec3, umvec3]) -> None: ... def __neg__(self) -> umat3x3: ... def __pos__(self) -> umat3x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int], Tuple[int, int, int], Tuple[int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umat3x3: ... def __add__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... def __radd__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... def __iadd__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... def __sub__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... def __rsub__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... def __isub__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __mul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __mul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __rmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __rmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __imul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __imul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __truediv__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __truediv__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __rtruediv__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __rtruediv__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __itruediv__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __itruediv__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __matmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __matmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __imatmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... u32mat3x4 = umat3x4 class umat3x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x4, glm_typing.UAnyMatrix3x4, glm_typing.UAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[umvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> umvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[uvec4, umvec4]) -> None: ... def __neg__(self) -> umat3x4: ... def __pos__(self) -> umat3x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int, int], Tuple[int, int, int, int], Tuple[int, int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umat3x4: ... def __add__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... def __radd__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... def __iadd__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... def __sub__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... def __rsub__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... def __isub__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __mul__(self, other: glm_typing.U32Vector3) -> uvec4: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __rmul__(self, other: glm_typing.U32Vector3) -> uvec4: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __imul__(self, other: glm_typing.U32Vector3) -> uvec4: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __matmul__(self, other: glm_typing.U32Vector3) -> uvec4: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector3) -> uvec4: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector3) -> uvec4: ... u32mat4x2 = umat4x2 class umat4x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x2, glm_typing.UAnyMatrix4x2, glm_typing.UAnyMatrix4x3, glm_typing.UAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[umvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> umvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[uvec2, umvec2]) -> None: ... def __neg__(self) -> umat4x2: ... def __pos__(self) -> umat4x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int], Tuple[int, int], Tuple[int, int], Tuple[int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umat4x2: ... def __add__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... def __radd__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... def __iadd__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... def __sub__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... def __rsub__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... def __isub__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __mul__(self, other: glm_typing.U32Vector4) -> uvec2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __rmul__(self, other: glm_typing.U32Vector4) -> uvec2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __imul__(self, other: glm_typing.U32Vector4) -> uvec2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __matmul__(self, other: glm_typing.U32Vector4) -> uvec2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector4) -> uvec2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector4) -> uvec2: ... u32mat4x3 = umat4x3 class umat4x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x3, glm_typing.UAnyMatrix4x3, glm_typing.UAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[umvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> umvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[uvec3, umvec3]) -> None: ... def __neg__(self) -> umat4x3: ... def __pos__(self) -> umat4x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int], Tuple[int, int, int], Tuple[int, int, int], Tuple[int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umat4x3: ... def __add__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... def __radd__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... def __iadd__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... def __sub__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... def __rsub__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... def __isub__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __mul__(self, other: glm_typing.U32Vector4) -> uvec3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __rmul__(self, other: glm_typing.U32Vector4) -> uvec3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __imul__(self, other: glm_typing.U32Vector4) -> uvec3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __matmul__(self, other: glm_typing.U32Vector4) -> uvec3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector4) -> uvec3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector4) -> uvec3: ... u32mat4 = umat4x4 u32mat4x4 = umat4x4 umat4 = umat4x4 class umat4x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, _12: glm_typing.Number, _13: glm_typing.Number, _14: glm_typing.Number, _15: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x4, glm_typing.UAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[umvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> umvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[uvec4, umvec4]) -> None: ... def __neg__(self) -> umat4x4: ... def __pos__(self) -> umat4x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int, int], Tuple[int, int, int, int], Tuple[int, int, int, int], Tuple[int, int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umat4x4: ... def __add__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... def __radd__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... def __iadd__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... def __sub__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... def __rsub__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... def __isub__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __mul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __mul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __rmul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __rmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __imul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __imul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __truediv__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __truediv__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __rtruediv__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __rtruediv__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __itruediv__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __itruediv__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __matmul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __matmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... f64quat = dquat class dquat: w: float x: float y: float z: float @overload def __init__(self) -> None: ... @overload def __init__(self, w: glm_typing.Number, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, w: Union[glm_typing.AnyAnyQuaternion, glm_typing.D64Matrix3x3, glm_typing.D64Matrix4x4, glm_typing.D64Vector3]) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float, float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dquat: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... @overload def __mul__(self, other: Union[dquat, glm_typing.Number]) -> dquat: ... @overload def __mul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __mul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __rmul__(self, other: Union[dquat, glm_typing.Number]) -> dquat: ... @overload def __rmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __rmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __imul__(self, other: Union[dquat, glm_typing.Number]) -> dquat: ... @overload def __imul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __imul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __matmul__(self, other: Union[dquat, glm_typing.Number]) -> dquat: ... @overload def __matmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __matmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __rmatmul__(self, other: Union[dquat, glm_typing.Number]) -> dquat: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __imatmul__(self, other: Union[dquat, glm_typing.Number]) -> dquat: ... @overload def __imatmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __imatmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... f32quat = quat fquat = quat class quat: w: float x: float y: float z: float @overload def __init__(self) -> None: ... @overload def __init__(self, w: glm_typing.Number, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, w: Union[glm_typing.AnyAnyQuaternion, glm_typing.F32Matrix3x3, glm_typing.F32Matrix4x4, glm_typing.F32Vector3]) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float, float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> quat: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... @overload def __mul__(self, other: Union[quat, glm_typing.Number]) -> quat: ... @overload def __mul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __rmul__(self, other: Union[quat, glm_typing.Number]) -> quat: ... @overload def __rmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __imul__(self, other: Union[quat, glm_typing.Number]) -> quat: ... @overload def __imul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __matmul__(self, other: Union[quat, glm_typing.Number]) -> quat: ... @overload def __matmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __rmatmul__(self, other: Union[quat, glm_typing.Number]) -> quat: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __imatmul__(self, other: Union[quat, glm_typing.Number]) -> quat: ... @overload def __imatmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Vector4) -> vec4: ... _AT = TypeVar('_AT', ctypes.c_bool, ctypes.c_byte, ctypes.c_int8, ctypes.c_ubyte, ctypes.c_uint8, ctypes.c_short, ctypes.c_int16, ctypes.c_ushort, ctypes.c_uint16, ctypes.c_int, ctypes.c_int32, ctypes.c_uint, ctypes.c_uint32, ctypes.c_long, ctypes.c_int64, ctypes.c_ulong, ctypes.c_uint64, ctypes.c_longlong, ctypes.c_ulonglong, ctypes.c_size_t, ctypes.c_ssize_t, ctypes.c_float, ctypes.c_double, ctypes.c_longdouble, dmat2x2, dmat2x3, dmat2x4, dmat3x2, dmat3x3, dmat3x4, dmat4x2, dmat4x3, dmat4x4, imat2x2, imat2x3, imat2x4, imat3x2, imat3x3, imat3x4, imat4x2, imat4x3, imat4x4, mat2x2, mat2x3, mat2x4, mat3x2, mat3x3, mat3x4, mat4x2, mat4x3, mat4x4, umat2x2, umat2x3, umat2x4, umat3x2, umat3x3, umat3x4, umat4x2, umat4x3, umat4x4, dquat, quat, bvec1, bvec2, bvec3, bvec4, dmvec2, dmvec3, dmvec4, dvec1, dvec2, dvec3, dvec4, i16vec1, i16vec2, i16vec3, i16vec4, i64vec1, i64vec2, i64vec3, i64vec4, i8vec1, i8vec2, i8vec3, i8vec4, imvec2, imvec3, imvec4, ivec1, ivec2, ivec3, ivec4, mvec2, mvec3, mvec4, u16vec1, u16vec2, u16vec3, u16vec4, u64vec1, u64vec2, u64vec3, u64vec4, u8vec1, u8vec2, u8vec3, u8vec4, umvec2, umvec3, umvec4, uvec1, uvec2, uvec3, uvec4, vec1, vec2, vec3, vec4) _AT2 = TypeVar('_AT2', ctypes.c_bool, ctypes.c_byte, ctypes.c_int8, ctypes.c_ubyte, ctypes.c_uint8, ctypes.c_short, ctypes.c_int16, ctypes.c_ushort, ctypes.c_uint16, ctypes.c_int, ctypes.c_int32, ctypes.c_uint, ctypes.c_uint32, ctypes.c_long, ctypes.c_int64, ctypes.c_ulong, ctypes.c_uint64, ctypes.c_longlong, ctypes.c_ulonglong, ctypes.c_size_t, ctypes.c_ssize_t, ctypes.c_float, ctypes.c_double, ctypes.c_longdouble, dmat2x2, dmat2x3, dmat2x4, dmat3x2, dmat3x3, dmat3x4, dmat4x2, dmat4x3, dmat4x4, imat2x2, imat2x3, imat2x4, imat3x2, imat3x3, imat3x4, imat4x2, imat4x3, imat4x4, mat2x2, mat2x3, mat2x4, mat3x2, mat3x3, mat3x4, mat4x2, mat4x3, mat4x4, umat2x2, umat2x3, umat2x4, umat3x2, umat3x3, umat3x4, umat4x2, umat4x3, umat4x4, dquat, quat, bvec1, bvec2, bvec3, bvec4, dmvec2, dmvec3, dmvec4, dvec1, dvec2, dvec3, dvec4, i16vec1, i16vec2, i16vec3, i16vec4, i64vec1, i64vec2, i64vec3, i64vec4, i8vec1, i8vec2, i8vec3, i8vec4, imvec2, imvec3, imvec4, ivec1, ivec2, ivec3, ivec4, mvec2, mvec3, mvec4, u16vec1, u16vec2, u16vec3, u16vec4, u64vec1, u64vec2, u64vec3, u64vec4, u8vec1, u8vec2, u8vec3, u8vec4, umvec2, umvec3, umvec4, uvec1, uvec2, uvec3, uvec4, vec1, vec2, vec3, vec4) _GLMT = TypeVar('_GLMT', dmat2x2, dmat2x3, dmat2x4, dmat3x2, dmat3x3, dmat3x4, dmat4x2, dmat4x3, dmat4x4, imat2x2, imat2x3, imat2x4, imat3x2, imat3x3, imat3x4, imat4x2, imat4x3, imat4x4, mat2x2, mat2x3, mat2x4, mat3x2, mat3x3, mat3x4, mat4x2, mat4x3, mat4x4, umat2x2, umat2x3, umat2x4, umat3x2, umat3x3, umat3x4, umat4x2, umat4x3, umat4x4, dquat, quat, bvec1, bvec2, bvec3, bvec4, dmvec2, dmvec3, dmvec4, dvec1, dvec2, dvec3, dvec4, i16vec1, i16vec2, i16vec3, i16vec4, i64vec1, i64vec2, i64vec3, i64vec4, i8vec1, i8vec2, i8vec3, i8vec4, imvec2, imvec3, imvec4, ivec1, ivec2, ivec3, ivec4, mvec2, mvec3, mvec4, u16vec1, u16vec2, u16vec3, u16vec4, u64vec1, u64vec2, u64vec3, u64vec4, u8vec1, u8vec2, u8vec3, u8vec4, umvec2, umvec3, umvec4, uvec1, uvec2, uvec3, uvec4, vec1, vec2, vec3, vec4) _CT = TypeVar('_CT', ctypes.c_bool, ctypes.c_byte, ctypes.c_int8, ctypes.c_ubyte, ctypes.c_uint8, ctypes.c_short, ctypes.c_int16, ctypes.c_ushort, ctypes.c_uint16, ctypes.c_int, ctypes.c_int32, ctypes.c_uint, ctypes.c_uint32, ctypes.c_long, ctypes.c_int64, ctypes.c_ulong, ctypes.c_uint64, ctypes.c_longlong, ctypes.c_ulonglong, ctypes.c_size_t, ctypes.c_ssize_t, ctypes.c_float, ctypes.c_double, ctypes.c_longdouble) _ICT = TypeVar('_ICT', ctypes.c_bool, ctypes.c_byte, ctypes.c_int8, ctypes.c_ubyte, ctypes.c_uint8, ctypes.c_short, ctypes.c_int16, ctypes.c_ushort, ctypes.c_uint16, ctypes.c_int, ctypes.c_int32, ctypes.c_uint, ctypes.c_uint32, ctypes.c_long, ctypes.c_int64, ctypes.c_ulong, ctypes.c_uint64, ctypes.c_longlong, ctypes.c_ulonglong, ctypes.c_size_t, ctypes.c_ssize_t) _FCT = TypeVar('_FCT', ctypes.c_bool, ctypes.c_byte, ctypes.c_int8, ctypes.c_ubyte, ctypes.c_uint8, ctypes.c_short, ctypes.c_int16, ctypes.c_ushort, ctypes.c_uint16, ctypes.c_int, ctypes.c_int32, ctypes.c_uint, ctypes.c_uint32, ctypes.c_long, ctypes.c_int64, ctypes.c_ulong, ctypes.c_uint64, ctypes.c_longlong, ctypes.c_ulonglong, ctypes.c_size_t, ctypes.c_ssize_t) class array(Generic[_AT]): nbytes: int typecode: str element_type: Type[_AT] itemsize: int dt_size: int address: int length: int readonly: bool reference: Any @property def ptr(self) -> ctypes.c_void_p: ... @property def dtype(self) -> str: ... @property def ctype(self) -> Type[Union[ctypes.c_bool, ctypes.c_byte, ctypes.c_int8, ctypes.c_ubyte, ctypes.c_uint8, ctypes.c_short, ctypes.c_int16, ctypes.c_ushort, ctypes.c_uint16, ctypes.c_int, ctypes.c_int32, ctypes.c_uint, ctypes.c_uint32, ctypes.c_long, ctypes.c_int64, ctypes.c_ulong, ctypes.c_uint64, ctypes.c_longlong, ctypes.c_ulonglong, ctypes.c_size_t, ctypes.c_ssize_t, ctypes.c_float, ctypes.c_double, ctypes.c_longdouble]]: ... @overload def __init__(self, _1: _AT, /, *_: _AT) -> None: ... @overload def __init__(self, _: array[_AT], /) -> None: ... @overload def __init__(self, _: Iterable[_AT], /) -> None: ... def __len__(self) -> int: ... def __contains__(self, value: Any) -> bool: ... @overload def __iter__(self: Union[array[ctypes.c_bool], array[ctypes.c_byte], array[ctypes.c_int8], array[ctypes.c_ubyte], array[ctypes.c_uint8], array[ctypes.c_short], array[ctypes.c_int16], array[ctypes.c_ushort], array[ctypes.c_uint16], array[ctypes.c_int], array[ctypes.c_int32], array[ctypes.c_uint], array[ctypes.c_uint32], array[ctypes.c_long], array[ctypes.c_int64], array[ctypes.c_ulong], array[ctypes.c_uint64], array[ctypes.c_longlong], array[ctypes.c_ulonglong], array[ctypes.c_size_t], array[ctypes.c_ssize_t]]) -> Generator[int, None, None]: ... @overload def __iter__(self: Union[array[ctypes.c_float], array[ctypes.c_double], array[ctypes.c_longdouble]]) -> Generator[float, None, None]: ... @overload def __iter__(self: array[_GLMT]) -> Generator[_AT, None, None]: ... @overload def __getitem__(self: Union[array[ctypes.c_bool], array[ctypes.c_byte], array[ctypes.c_int8], array[ctypes.c_ubyte], array[ctypes.c_uint8], array[ctypes.c_short], array[ctypes.c_int16], array[ctypes.c_ushort], array[ctypes.c_uint16], array[ctypes.c_int], array[ctypes.c_int32], array[ctypes.c_uint], array[ctypes.c_uint32], array[ctypes.c_long], array[ctypes.c_int64], array[ctypes.c_ulong], array[ctypes.c_uint64], array[ctypes.c_longlong], array[ctypes.c_ulonglong], array[ctypes.c_size_t], array[ctypes.c_ssize_t]], index: int) -> int: ... @overload def __getitem__(self: Union[array[ctypes.c_float], array[ctypes.c_double], array[ctypes.c_longdouble]], index: int) -> float: ... @overload def __getitem__(self: array[_GLMT], index: int) -> _AT: ... @overload def __getitem__(self, index: slice) -> array[_AT]: ... @overload def __setitem__(self: array[_ICT], index: int, value: _ICT) -> None: ... @overload def __setitem__(self: array[_FCT], index: int, value: _FCT) -> None: ... @overload def __setitem__(self: array[_GLMT], index: int, value: _AT) -> None: ... @overload def __setitem__(self, index: slice, value: array[_AT]) -> None: ... @staticmethod def from_bytes(bytes: bytes, type: Type[_AT], /) -> array[_AT]: ... @staticmethod def from_numbers(type: Type[_CT], /, *numbers: glm_typing.Number) -> array[_CT]: ... @staticmethod def zeros(length: int, type: Type[_AT], /) -> array[_AT]: ... @overload def to_list(self: array[_GLMT]) -> List[_GLMT]: ... @overload def to_list(self: Union[array[ctypes.c_bool], array[ctypes.c_byte], array[ctypes.c_int8], array[ctypes.c_ubyte], array[ctypes.c_uint8], array[ctypes.c_short], array[ctypes.c_int16], array[ctypes.c_ushort], array[ctypes.c_uint16], array[ctypes.c_int], array[ctypes.c_int32], array[ctypes.c_uint], array[ctypes.c_uint32], array[ctypes.c_long], array[ctypes.c_int64], array[ctypes.c_ulong], array[ctypes.c_uint64], array[ctypes.c_longlong], array[ctypes.c_ulonglong], array[ctypes.c_size_t], array[ctypes.c_ssize_t]]) -> List[int]: ... @overload def to_list(self: Union[array[ctypes.c_float], array[ctypes.c_double], array[ctypes.c_longdouble]]) -> List[float]: ... @overload def to_tuple(self: array[_GLMT]) -> Tuple[_GLMT, ...]: ... @overload def to_tuple(self: Union[array[ctypes.c_bool], array[ctypes.c_byte], array[ctypes.c_int8], array[ctypes.c_ubyte], array[ctypes.c_uint8], array[ctypes.c_short], array[ctypes.c_int16], array[ctypes.c_ushort], array[ctypes.c_uint16], array[ctypes.c_int], array[ctypes.c_int32], array[ctypes.c_uint], array[ctypes.c_uint32], array[ctypes.c_long], array[ctypes.c_int64], array[ctypes.c_ulong], array[ctypes.c_uint64], array[ctypes.c_longlong], array[ctypes.c_ulonglong], array[ctypes.c_size_t], array[ctypes.c_ssize_t]]) -> Tuple[int, ...]: ... @overload def to_tuple(self: Union[array[ctypes.c_float], array[ctypes.c_double], array[ctypes.c_longdouble]]) -> Tuple[float, ...]: ... @overload def split_components(self: array[bvec1]) -> Tuple[array[ctypes.c_bool]]: ... @overload def split_components(self: array[bvec2]) -> Tuple[array[ctypes.c_bool], array[ctypes.c_bool]]: ... @overload def split_components(self: array[bvec3]) -> Tuple[array[ctypes.c_bool], array[ctypes.c_bool], array[ctypes.c_bool]]: ... @overload def split_components(self: array[bvec4]) -> Tuple[array[ctypes.c_bool], array[ctypes.c_bool], array[ctypes.c_bool], array[ctypes.c_bool]]: ... @overload def split_components(self: array[dmvec2]) -> Tuple[array[ctypes.c_double], array[ctypes.c_double]]: ... @overload def split_components(self: array[dmvec3]) -> Tuple[array[ctypes.c_double], array[ctypes.c_double], array[ctypes.c_double]]: ... @overload def split_components(self: array[dmvec4]) -> Tuple[array[ctypes.c_double], array[ctypes.c_double], array[ctypes.c_double], array[ctypes.c_double]]: ... @overload def split_components(self: array[dvec1]) -> Tuple[array[ctypes.c_double]]: ... @overload def split_components(self: array[dvec2]) -> Tuple[array[ctypes.c_double], array[ctypes.c_double]]: ... @overload def split_components(self: array[dvec3]) -> Tuple[array[ctypes.c_double], array[ctypes.c_double], array[ctypes.c_double]]: ... @overload def split_components(self: array[dvec4]) -> Tuple[array[ctypes.c_double], array[ctypes.c_double], array[ctypes.c_double], array[ctypes.c_double]]: ... @overload def split_components(self: array[i16vec1]) -> Tuple[array[ctypes.c_short]]: ... @overload def split_components(self: array[i16vec2]) -> Tuple[array[ctypes.c_short], array[ctypes.c_short]]: ... @overload def split_components(self: array[i16vec3]) -> Tuple[array[ctypes.c_short], array[ctypes.c_short], array[ctypes.c_short]]: ... @overload def split_components(self: array[i16vec4]) -> Tuple[array[ctypes.c_short], array[ctypes.c_short], array[ctypes.c_short], array[ctypes.c_short]]: ... @overload def split_components(self: array[i64vec1]) -> Tuple[array[ctypes.c_longlong]]: ... @overload def split_components(self: array[i64vec2]) -> Tuple[array[ctypes.c_longlong], array[ctypes.c_longlong]]: ... @overload def split_components(self: array[i64vec3]) -> Tuple[array[ctypes.c_longlong], array[ctypes.c_longlong], array[ctypes.c_longlong]]: ... @overload def split_components(self: array[i64vec4]) -> Tuple[array[ctypes.c_longlong], array[ctypes.c_longlong], array[ctypes.c_longlong], array[ctypes.c_longlong]]: ... @overload def split_components(self: array[i8vec1]) -> Tuple[array[ctypes.c_byte]]: ... @overload def split_components(self: array[i8vec2]) -> Tuple[array[ctypes.c_byte], array[ctypes.c_byte]]: ... @overload def split_components(self: array[i8vec3]) -> Tuple[array[ctypes.c_byte], array[ctypes.c_byte], array[ctypes.c_byte]]: ... @overload def split_components(self: array[i8vec4]) -> Tuple[array[ctypes.c_byte], array[ctypes.c_byte], array[ctypes.c_byte], array[ctypes.c_byte]]: ... @overload def split_components(self: array[imvec2]) -> Tuple[array[ctypes.c_long], array[ctypes.c_long]]: ... @overload def split_components(self: array[imvec3]) -> Tuple[array[ctypes.c_long], array[ctypes.c_long], array[ctypes.c_long]]: ... @overload def split_components(self: array[imvec4]) -> Tuple[array[ctypes.c_long], array[ctypes.c_long], array[ctypes.c_long], array[ctypes.c_long]]: ... @overload def split_components(self: array[ivec1]) -> Tuple[array[ctypes.c_long]]: ... @overload def split_components(self: array[ivec2]) -> Tuple[array[ctypes.c_long], array[ctypes.c_long]]: ... @overload def split_components(self: array[ivec3]) -> Tuple[array[ctypes.c_long], array[ctypes.c_long], array[ctypes.c_long]]: ... @overload def split_components(self: array[ivec4]) -> Tuple[array[ctypes.c_long], array[ctypes.c_long], array[ctypes.c_long], array[ctypes.c_long]]: ... @overload def split_components(self: array[mvec2]) -> Tuple[array[ctypes.c_float], array[ctypes.c_float]]: ... @overload def split_components(self: array[mvec3]) -> Tuple[array[ctypes.c_float], array[ctypes.c_float], array[ctypes.c_float]]: ... @overload def split_components(self: array[mvec4]) -> Tuple[array[ctypes.c_float], array[ctypes.c_float], array[ctypes.c_float], array[ctypes.c_float]]: ... @overload def split_components(self: array[u16vec1]) -> Tuple[array[ctypes.c_ushort]]: ... @overload def split_components(self: array[u16vec2]) -> Tuple[array[ctypes.c_ushort], array[ctypes.c_ushort]]: ... @overload def split_components(self: array[u16vec3]) -> Tuple[array[ctypes.c_ushort], array[ctypes.c_ushort], array[ctypes.c_ushort]]: ... @overload def split_components(self: array[u16vec4]) -> Tuple[array[ctypes.c_ushort], array[ctypes.c_ushort], array[ctypes.c_ushort], array[ctypes.c_ushort]]: ... @overload def split_components(self: array[u64vec1]) -> Tuple[array[ctypes.c_ulonglong]]: ... @overload def split_components(self: array[u64vec2]) -> Tuple[array[ctypes.c_ulonglong], array[ctypes.c_ulonglong]]: ... @overload def split_components(self: array[u64vec3]) -> Tuple[array[ctypes.c_ulonglong], array[ctypes.c_ulonglong], array[ctypes.c_ulonglong]]: ... @overload def split_components(self: array[u64vec4]) -> Tuple[array[ctypes.c_ulonglong], array[ctypes.c_ulonglong], array[ctypes.c_ulonglong], array[ctypes.c_ulonglong]]: ... @overload def split_components(self: array[u8vec1]) -> Tuple[array[ctypes.c_ubyte]]: ... @overload def split_components(self: array[u8vec2]) -> Tuple[array[ctypes.c_ubyte], array[ctypes.c_ubyte]]: ... @overload def split_components(self: array[u8vec3]) -> Tuple[array[ctypes.c_ubyte], array[ctypes.c_ubyte], array[ctypes.c_ubyte]]: ... @overload def split_components(self: array[u8vec4]) -> Tuple[array[ctypes.c_ubyte], array[ctypes.c_ubyte], array[ctypes.c_ubyte], array[ctypes.c_ubyte]]: ... @overload def split_components(self: array[umvec2]) -> Tuple[array[ctypes.c_ulong], array[ctypes.c_ulong]]: ... @overload def split_components(self: array[umvec3]) -> Tuple[array[ctypes.c_ulong], array[ctypes.c_ulong], array[ctypes.c_ulong]]: ... @overload def split_components(self: array[umvec4]) -> Tuple[array[ctypes.c_ulong], array[ctypes.c_ulong], array[ctypes.c_ulong], array[ctypes.c_ulong]]: ... @overload def split_components(self: array[uvec1]) -> Tuple[array[ctypes.c_ulong]]: ... @overload def split_components(self: array[uvec2]) -> Tuple[array[ctypes.c_ulong], array[ctypes.c_ulong]]: ... @overload def split_components(self: array[uvec3]) -> Tuple[array[ctypes.c_ulong], array[ctypes.c_ulong], array[ctypes.c_ulong]]: ... @overload def split_components(self: array[uvec4]) -> Tuple[array[ctypes.c_ulong], array[ctypes.c_ulong], array[ctypes.c_ulong], array[ctypes.c_ulong]]: ... @overload def split_components(self: array[vec1]) -> Tuple[array[ctypes.c_float]]: ... @overload def split_components(self: array[vec2]) -> Tuple[array[ctypes.c_float], array[ctypes.c_float]]: ... @overload def split_components(self: array[vec3]) -> Tuple[array[ctypes.c_float], array[ctypes.c_float], array[ctypes.c_float]]: ... @overload def split_components(self: array[vec4]) -> Tuple[array[ctypes.c_float], array[ctypes.c_float], array[ctypes.c_float], array[ctypes.c_float]]: ... @overload def split_components(self: array[dquat]) -> Tuple[array[ctypes.c_double], array[ctypes.c_double], array[ctypes.c_double], array[ctypes.c_double]]: ... @overload def split_components(self: array[quat]) -> Tuple[array[ctypes.c_float], array[ctypes.c_float], array[ctypes.c_float], array[ctypes.c_float]]: ... @overload def split_components(self: array[dmat2x2]) -> Tuple[array[dvec2], array[dvec2]]: ... @overload def split_components(self: array[dmat2x3]) -> Tuple[array[dvec3], array[dvec3]]: ... @overload def split_components(self: array[dmat2x4]) -> Tuple[array[dvec4], array[dvec4]]: ... @overload def split_components(self: array[dmat3x2]) -> Tuple[array[dvec2], array[dvec2], array[dvec2]]: ... @overload def split_components(self: array[dmat3x3]) -> Tuple[array[dvec3], array[dvec3], array[dvec3]]: ... @overload def split_components(self: array[dmat3x4]) -> Tuple[array[dvec4], array[dvec4], array[dvec4]]: ... @overload def split_components(self: array[dmat4x2]) -> Tuple[array[dvec2], array[dvec2], array[dvec2], array[dvec2]]: ... @overload def split_components(self: array[dmat4x3]) -> Tuple[array[dvec3], array[dvec3], array[dvec3], array[dvec3]]: ... @overload def split_components(self: array[dmat4x4]) -> Tuple[array[dvec4], array[dvec4], array[dvec4], array[dvec4]]: ... @overload def split_components(self: array[imat2x2]) -> Tuple[array[ivec2], array[ivec2]]: ... @overload def split_components(self: array[imat2x3]) -> Tuple[array[ivec3], array[ivec3]]: ... @overload def split_components(self: array[imat2x4]) -> Tuple[array[ivec4], array[ivec4]]: ... @overload def split_components(self: array[imat3x2]) -> Tuple[array[ivec2], array[ivec2], array[ivec2]]: ... @overload def split_components(self: array[imat3x3]) -> Tuple[array[ivec3], array[ivec3], array[ivec3]]: ... @overload def split_components(self: array[imat3x4]) -> Tuple[array[ivec4], array[ivec4], array[ivec4]]: ... @overload def split_components(self: array[imat4x2]) -> Tuple[array[ivec2], array[ivec2], array[ivec2], array[ivec2]]: ... @overload def split_components(self: array[imat4x3]) -> Tuple[array[ivec3], array[ivec3], array[ivec3], array[ivec3]]: ... @overload def split_components(self: array[imat4x4]) -> Tuple[array[ivec4], array[ivec4], array[ivec4], array[ivec4]]: ... @overload def split_components(self: array[mat2x2]) -> Tuple[array[vec2], array[vec2]]: ... @overload def split_components(self: array[mat2x3]) -> Tuple[array[vec3], array[vec3]]: ... @overload def split_components(self: array[mat2x4]) -> Tuple[array[vec4], array[vec4]]: ... @overload def split_components(self: array[mat3x2]) -> Tuple[array[vec2], array[vec2], array[vec2]]: ... @overload def split_components(self: array[mat3x3]) -> Tuple[array[vec3], array[vec3], array[vec3]]: ... @overload def split_components(self: array[mat3x4]) -> Tuple[array[vec4], array[vec4], array[vec4]]: ... @overload def split_components(self: array[mat4x2]) -> Tuple[array[vec2], array[vec2], array[vec2], array[vec2]]: ... @overload def split_components(self: array[mat4x3]) -> Tuple[array[vec3], array[vec3], array[vec3], array[vec3]]: ... @overload def split_components(self: array[mat4x4]) -> Tuple[array[vec4], array[vec4], array[vec4], array[vec4]]: ... @overload def split_components(self: array[umat2x2]) -> Tuple[array[uvec2], array[uvec2]]: ... @overload def split_components(self: array[umat2x3]) -> Tuple[array[uvec3], array[uvec3]]: ... @overload def split_components(self: array[umat2x4]) -> Tuple[array[uvec4], array[uvec4]]: ... @overload def split_components(self: array[umat3x2]) -> Tuple[array[uvec2], array[uvec2], array[uvec2]]: ... @overload def split_components(self: array[umat3x3]) -> Tuple[array[uvec3], array[uvec3], array[uvec3]]: ... @overload def split_components(self: array[umat3x4]) -> Tuple[array[uvec4], array[uvec4], array[uvec4]]: ... @overload def split_components(self: array[umat4x2]) -> Tuple[array[uvec2], array[uvec2], array[uvec2], array[uvec2]]: ... @overload def split_components(self: array[umat4x3]) -> Tuple[array[uvec3], array[uvec3], array[uvec3], array[uvec3]]: ... @overload def split_components(self: array[umat4x4]) -> Tuple[array[uvec4], array[uvec4], array[uvec4], array[uvec4]]: ... def to_bytes(self) -> bytes: ... def reduce(self, func: Callable[[_AT, _AT], _AT], init: Optional[_AT] = ..., /) -> _AT: ... def filter(self, _: Callable[[_AT], Any], /) -> array[_AT]: ... def map(self, _: Callable[[_AT], _AT2], /) -> array[_AT2]: ... def sort(self, _: Callable[[_AT], SupportsInt], /) -> array[_AT]: ... def concat(self, other: array[_AT], /) -> array[_AT]: ... def iconcat(self, other: array[_AT], /) -> None: ... def repeat(self, count: int, /) -> array[_AT]: ... def irepeat(self, count: int, /) -> None: ... @overload @staticmethod def as_reference(array: array[_AT], /) -> array[_AT]: ... @overload @staticmethod def as_reference(obj: _GLMT, /) -> array[_GLMT]: ... def reinterpret_cast(self, type: Type[_AT], /) -> array[_AT]: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __add__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __radd__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __iadd__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __sub__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __rsub__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __isub__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __mul__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __rmul__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __imul__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __mod__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __rmod__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __imod__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __pow__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __rpow__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __ipow__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __lshift__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __rlshift__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __ilshift__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __rshift__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __rrshift__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __irshift__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __and__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __rand__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __iand__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __xor__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __rxor__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __ixor__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __or__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __ror__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __ior__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __truediv__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __rtruediv__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __itruediv__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __neg__(self) -> array[_AT]: ... def __pos__(self) -> array[_AT]: ... def __abs__(self) -> array[_AT]: ... def __inv__(self) -> array[_AT]: ... @overload def abs(x: glm_typing.Number, /) -> float: ... @overload def abs(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def abs(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def abs(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def abs(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def abs(x: _VT, /) -> _VT: ... @overload def ceil(x: glm_typing.Number, /) -> float: ... @overload def ceil(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def ceil(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def ceil(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def ceil(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def ceil(x: _VT, /) -> _VT: ... @overload def clamp(x: glm_typing.Number, min: glm_typing.Number, max: glm_typing.Number, /) -> glm_typing.Number: ... @overload def clamp(x: glm_typing.F32Vector1, min: glm_typing.Number, max: glm_typing.Number, /) -> vec1: ... @overload def clamp(x: glm_typing.F32Vector1, min: glm_typing.F32Vector1, max: glm_typing.F32Vector1, /) -> vec1: ... @overload def clamp(x: glm_typing.F32Vector2, min: glm_typing.Number, max: glm_typing.Number, /) -> vec2: ... @overload def clamp(x: glm_typing.F32Vector2, min: glm_typing.F32Vector2, max: glm_typing.F32Vector2, /) -> vec2: ... @overload def clamp(x: glm_typing.F32Vector3, min: glm_typing.Number, max: glm_typing.Number, /) -> vec3: ... @overload def clamp(x: glm_typing.F32Vector3, min: glm_typing.F32Vector3, max: glm_typing.F32Vector3, /) -> vec3: ... @overload def clamp(x: glm_typing.F32Vector4, min: glm_typing.Number, max: glm_typing.Number, /) -> vec4: ... @overload def clamp(x: glm_typing.F32Vector4, min: glm_typing.F32Vector4, max: glm_typing.F32Vector4, /) -> vec4: ... @overload def clamp(x: _NF32VT, min: glm_typing.Number, max: glm_typing.Number, /) -> _NF32VT: ... @overload def clamp(x: _NF32VT, min: _NF32VT, max: _NF32VT, /) -> _NF32VT: ... @overload def floatBitsToInt(x: float, /) -> int: ... @overload def floatBitsToInt(x: glm_typing.F32Vector2, /) -> ivec2: ... @overload def floatBitsToInt(x: glm_typing.F32Vector3, /) -> ivec3: ... @overload def floatBitsToInt(x: glm_typing.F32Vector4, /) -> ivec4: ... @overload def floatBitsToInt(x: glm_typing.F32Vector1, /) -> ivec1: ... @overload def floatBitsToUint(x: float, /) -> int: ... @overload def floatBitsToUint(x: glm_typing.F32Vector2, /) -> uvec2: ... @overload def floatBitsToUint(x: glm_typing.F32Vector3, /) -> uvec3: ... @overload def floatBitsToUint(x: glm_typing.F32Vector4, /) -> uvec4: ... @overload def floatBitsToUint(x: glm_typing.F32Vector1, /) -> uvec1: ... @overload def floor(x: glm_typing.Number, /) -> float: ... @overload def floor(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def floor(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def floor(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def floor(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def floor(x: _VT, /) -> _VT: ... def fma(a: glm_typing.Number, b: glm_typing.Number, c: glm_typing.Number, /) -> float: ... @overload def fmax(x: glm_typing.Number, y: glm_typing.Number, /) -> float: ... @overload def fmax(a: glm_typing.Number, b: glm_typing.Number, c: glm_typing.Number, /) -> float: ... @overload def fmax(a: glm_typing.Number, b: glm_typing.Number, c: glm_typing.Number, d: glm_typing.Number, /) -> float: ... @overload def fmax(x: glm_typing.F32Vector1, y: glm_typing.Number, /) -> vec1: ... @overload def fmax(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> vec1: ... @overload def fmax(a: glm_typing.F32Vector1, b: glm_typing.F32Vector1, c: glm_typing.F32Vector1, /) -> vec1: ... @overload def fmax(a: glm_typing.F32Vector1, b: glm_typing.F32Vector1, c: glm_typing.F32Vector1, d: glm_typing.F32Vector1, /) -> vec1: ... @overload def fmax(x: glm_typing.F32Vector2, y: glm_typing.Number, /) -> vec2: ... @overload def fmax(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> vec2: ... @overload def fmax(a: glm_typing.F32Vector2, b: glm_typing.F32Vector2, c: glm_typing.F32Vector2, /) -> vec2: ... @overload def fmax(a: glm_typing.F32Vector2, b: glm_typing.F32Vector2, c: glm_typing.F32Vector2, d: glm_typing.F32Vector2, /) -> vec2: ... @overload def fmax(x: glm_typing.F32Vector3, y: glm_typing.Number, /) -> vec3: ... @overload def fmax(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> vec3: ... @overload def fmax(a: glm_typing.F32Vector3, b: glm_typing.F32Vector3, c: glm_typing.F32Vector3, /) -> vec3: ... @overload def fmax(a: glm_typing.F32Vector3, b: glm_typing.F32Vector3, c: glm_typing.F32Vector3, d: glm_typing.F32Vector3, /) -> vec3: ... @overload def fmax(x: glm_typing.F32Vector4, y: glm_typing.Number, /) -> vec4: ... @overload def fmax(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> vec4: ... @overload def fmax(a: glm_typing.F32Vector4, b: glm_typing.F32Vector4, c: glm_typing.F32Vector4, /) -> vec4: ... @overload def fmax(a: glm_typing.F32Vector4, b: glm_typing.F32Vector4, c: glm_typing.F32Vector4, d: glm_typing.F32Vector4, /) -> vec4: ... @overload def fmax(x: _NF32VT, y: glm_typing.Number, /) -> _NF32VT: ... @overload def fmax(x: _NF32VT, y: _NF32VT, /) -> _NF32VT: ... @overload def fmax(a: _NF32VT, b: _NF32VT, c: _NF32VT, /) -> _NF32VT: ... @overload def fmax(a: _NF32VT, b: _NF32VT, c: _NF32VT, d: _NF32VT, /) -> _NF32VT: ... @overload def fmin(x: glm_typing.Number, y: glm_typing.Number, /) -> float: ... @overload def fmin(a: glm_typing.Number, b: glm_typing.Number, c: glm_typing.Number, /) -> float: ... @overload def fmin(a: glm_typing.Number, b: glm_typing.Number, c: glm_typing.Number, d: glm_typing.Number, /) -> float: ... @overload def fmin(x: glm_typing.F32Vector1, y: glm_typing.Number, /) -> vec1: ... @overload def fmin(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> vec1: ... @overload def fmin(a: glm_typing.F32Vector1, b: glm_typing.F32Vector1, c: glm_typing.F32Vector1, /) -> vec1: ... @overload def fmin(a: glm_typing.F32Vector1, b: glm_typing.F32Vector1, c: glm_typing.F32Vector1, d: glm_typing.F32Vector1, /) -> vec1: ... @overload def fmin(x: glm_typing.F32Vector2, y: glm_typing.Number, /) -> vec2: ... @overload def fmin(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> vec2: ... @overload def fmin(a: glm_typing.F32Vector2, b: glm_typing.F32Vector2, c: glm_typing.F32Vector2, /) -> vec2: ... @overload def fmin(a: glm_typing.F32Vector2, b: glm_typing.F32Vector2, c: glm_typing.F32Vector2, d: glm_typing.F32Vector2, /) -> vec2: ... @overload def fmin(x: glm_typing.F32Vector3, y: glm_typing.Number, /) -> vec3: ... @overload def fmin(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> vec3: ... @overload def fmin(a: glm_typing.F32Vector3, b: glm_typing.F32Vector3, c: glm_typing.F32Vector3, /) -> vec3: ... @overload def fmin(a: glm_typing.F32Vector3, b: glm_typing.F32Vector3, c: glm_typing.F32Vector3, d: glm_typing.F32Vector3, /) -> vec3: ... @overload def fmin(x: glm_typing.F32Vector4, y: glm_typing.Number, /) -> vec4: ... @overload def fmin(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> vec4: ... @overload def fmin(a: glm_typing.F32Vector4, b: glm_typing.F32Vector4, c: glm_typing.F32Vector4, /) -> vec4: ... @overload def fmin(a: glm_typing.F32Vector4, b: glm_typing.F32Vector4, c: glm_typing.F32Vector4, d: glm_typing.F32Vector4, /) -> vec4: ... @overload def fmin(x: _NF32VT, y: glm_typing.Number, /) -> _NF32VT: ... @overload def fmin(x: _NF32VT, y: _NF32VT, /) -> _NF32VT: ... @overload def fmin(a: _NF32VT, b: _NF32VT, c: _NF32VT, /) -> _NF32VT: ... @overload def fmin(a: _NF32VT, b: _NF32VT, c: _NF32VT, d: _NF32VT, /) -> _NF32VT: ... @overload def fract(x: glm_typing.Number, /) -> float: ... @overload def fract(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def fract(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def fract(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def fract(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def fract(x: _VT, /) -> _VT: ... @overload def frexp(x: glm_typing.Number, /) -> Tuple[float, int]: ... @overload def frexp(x: dvec1, exp: ivec1, /) -> dvec1: ... @overload def frexp(x: dvec2, exp: ivec2, /) -> dvec2: ... @overload def frexp(x: dvec3, exp: ivec3, /) -> dvec3: ... @overload def frexp(x: dvec4, exp: ivec4, /) -> dvec4: ... @overload def frexp(x: glm_typing.F32Vector1, exp: ivec1, /) -> vec1: ... @overload def frexp(x: glm_typing.F32Vector2, exp: ivec2, /) -> vec2: ... @overload def frexp(x: glm_typing.F32Vector3, exp: ivec3, /) -> vec3: ... @overload def frexp(x: glm_typing.F32Vector4, exp: ivec4, /) -> vec4: ... @overload def intBitsToFloat(x: int, /) -> float: ... @overload def intBitsToFloat(x: glm_typing.I32Vector2, /) -> vec2: ... @overload def intBitsToFloat(x: glm_typing.I32Vector3, /) -> vec3: ... @overload def intBitsToFloat(x: glm_typing.I32Vector4, /) -> vec4: ... @overload def intBitsToFloat(x: glm_typing.I32Vector1, /) -> vec1: ... @overload def isinf(x: glm_typing.Number, /) -> bool: ... @overload def isinf(x: glm_typing.FDAnyVector1, /) -> bvec1: ... @overload def isinf(x: glm_typing.FDAnyVector2, /) -> bvec2: ... @overload def isinf(x: glm_typing.FDAnyVector3, /) -> bvec3: ... @overload def isinf(x: glm_typing.FDAnyQuaternionVector4, /) -> bvec4: ... @overload def isnan(x: glm_typing.Number, /) -> bool: ... @overload def isnan(x: glm_typing.FDAnyVector1, /) -> bvec1: ... @overload def isnan(x: glm_typing.FDAnyVector2, /) -> bvec2: ... @overload def isnan(x: glm_typing.FDAnyVector3, /) -> bvec3: ... @overload def isnan(x: glm_typing.FDAnyQuaternionVector4, /) -> bvec4: ... @overload def ldexp(x: glm_typing.Number, exp: glm_typing.Number, /) -> float: ... @overload def ldexp(x: dmvec2, exp: ivec2, /) -> dmvec2: ... @overload def ldexp(x: dmvec3, exp: ivec3, /) -> dmvec3: ... @overload def ldexp(x: dmvec4, exp: ivec4, /) -> dmvec4: ... @overload def ldexp(x: dvec1, exp: ivec1, /) -> dvec1: ... @overload def ldexp(x: dvec2, exp: ivec2, /) -> dvec2: ... @overload def ldexp(x: dvec3, exp: ivec3, /) -> dvec3: ... @overload def ldexp(x: dvec4, exp: ivec4, /) -> dvec4: ... @overload def ldexp(x: mvec2, exp: ivec2, /) -> mvec2: ... @overload def ldexp(x: mvec3, exp: ivec3, /) -> mvec3: ... @overload def ldexp(x: mvec4, exp: ivec4, /) -> mvec4: ... @overload def ldexp(x: Union[vec1, Tuple[glm_typing.Number]], exp: ivec1, /) -> vec1: ... @overload def ldexp(x: Union[vec2, Tuple[glm_typing.Number, glm_typing.Number]], exp: ivec2, /) -> vec2: ... @overload def ldexp(x: Union[vec3, Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number]], exp: ivec3, /) -> vec3: ... @overload def ldexp(x: Union[vec4, Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number]], exp: ivec4, /) -> vec4: ... @overload def max(x: glm_typing.Number, y: glm_typing.Number, /) -> float: ... @overload def max(a: glm_typing.Number, b: glm_typing.Number, c: glm_typing.Number, /) -> float: ... @overload def max(a: glm_typing.Number, b: glm_typing.Number, c: glm_typing.Number, d: glm_typing.Number, /) -> float: ... @overload def max(x: glm_typing.F32Vector1, y: glm_typing.Number, /) -> vec1: ... @overload def max(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> vec1: ... @overload def max(a: glm_typing.F32Vector1, b: glm_typing.F32Vector1, c: glm_typing.F32Vector1, /) -> vec1: ... @overload def max(a: glm_typing.F32Vector1, b: glm_typing.F32Vector1, c: glm_typing.F32Vector1, d: glm_typing.F32Vector1, /) -> vec1: ... @overload def max(x: glm_typing.F32Vector2, y: glm_typing.Number, /) -> vec2: ... @overload def max(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> vec2: ... @overload def max(a: glm_typing.F32Vector2, b: glm_typing.F32Vector2, c: glm_typing.F32Vector2, /) -> vec2: ... @overload def max(a: glm_typing.F32Vector2, b: glm_typing.F32Vector2, c: glm_typing.F32Vector2, d: glm_typing.F32Vector2, /) -> vec2: ... @overload def max(x: glm_typing.F32Vector3, y: glm_typing.Number, /) -> vec3: ... @overload def max(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> vec3: ... @overload def max(a: glm_typing.F32Vector3, b: glm_typing.F32Vector3, c: glm_typing.F32Vector3, /) -> vec3: ... @overload def max(a: glm_typing.F32Vector3, b: glm_typing.F32Vector3, c: glm_typing.F32Vector3, d: glm_typing.F32Vector3, /) -> vec3: ... @overload def max(x: glm_typing.F32Vector4, y: glm_typing.Number, /) -> vec4: ... @overload def max(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> vec4: ... @overload def max(a: glm_typing.F32Vector4, b: glm_typing.F32Vector4, c: glm_typing.F32Vector4, /) -> vec4: ... @overload def max(a: glm_typing.F32Vector4, b: glm_typing.F32Vector4, c: glm_typing.F32Vector4, d: glm_typing.F32Vector4, /) -> vec4: ... @overload def max(x: _NF32VT, y: glm_typing.Number, /) -> _NF32VT: ... @overload def max(x: _NF32VT, y: _NF32VT, /) -> _NF32VT: ... @overload def max(a: _NF32VT, b: _NF32VT, c: _NF32VT, /) -> _NF32VT: ... @overload def max(a: _NF32VT, b: _NF32VT, c: _NF32VT, d: _NF32VT, /) -> _NF32VT: ... @overload def max(_: Iterable[_T], /) -> _T: ... @overload def min(x: glm_typing.Number, y: glm_typing.Number, /) -> float: ... @overload def min(a: glm_typing.Number, b: glm_typing.Number, c: glm_typing.Number, /) -> float: ... @overload def min(a: glm_typing.Number, b: glm_typing.Number, c: glm_typing.Number, d: glm_typing.Number, /) -> float: ... @overload def min(x: glm_typing.F32Vector1, y: glm_typing.Number, /) -> vec1: ... @overload def min(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> vec1: ... @overload def min(a: glm_typing.F32Vector1, b: glm_typing.F32Vector1, c: glm_typing.F32Vector1, /) -> vec1: ... @overload def min(a: glm_typing.F32Vector1, b: glm_typing.F32Vector1, c: glm_typing.F32Vector1, d: glm_typing.F32Vector1, /) -> vec1: ... @overload def min(x: glm_typing.F32Vector2, y: glm_typing.Number, /) -> vec2: ... @overload def min(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> vec2: ... @overload def min(a: glm_typing.F32Vector2, b: glm_typing.F32Vector2, c: glm_typing.F32Vector2, /) -> vec2: ... @overload def min(a: glm_typing.F32Vector2, b: glm_typing.F32Vector2, c: glm_typing.F32Vector2, d: glm_typing.F32Vector2, /) -> vec2: ... @overload def min(x: glm_typing.F32Vector3, y: glm_typing.Number, /) -> vec3: ... @overload def min(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> vec3: ... @overload def min(a: glm_typing.F32Vector3, b: glm_typing.F32Vector3, c: glm_typing.F32Vector3, /) -> vec3: ... @overload def min(a: glm_typing.F32Vector3, b: glm_typing.F32Vector3, c: glm_typing.F32Vector3, d: glm_typing.F32Vector3, /) -> vec3: ... @overload def min(x: glm_typing.F32Vector4, y: glm_typing.Number, /) -> vec4: ... @overload def min(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> vec4: ... @overload def min(a: glm_typing.F32Vector4, b: glm_typing.F32Vector4, c: glm_typing.F32Vector4, /) -> vec4: ... @overload def min(a: glm_typing.F32Vector4, b: glm_typing.F32Vector4, c: glm_typing.F32Vector4, d: glm_typing.F32Vector4, /) -> vec4: ... @overload def min(x: _NF32VT, y: glm_typing.Number, /) -> _NF32VT: ... @overload def min(x: _NF32VT, y: _NF32VT, /) -> _NF32VT: ... @overload def min(a: _NF32VT, b: _NF32VT, c: _NF32VT, /) -> _NF32VT: ... @overload def min(a: _NF32VT, b: _NF32VT, c: _NF32VT, d: _NF32VT, /) -> _NF32VT: ... @overload def min(_: Iterable[_T], /) -> _T: ... @overload def mix(x: glm_typing.Number, y: glm_typing.Number, a: glm_typing.Number, /) -> float: ... @overload def mix(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, a: Union[glm_typing.FDAnyVector1, glm_typing.BAnyVector1, glm_typing.Number], /) -> vec1: ... @overload def mix(x: _NF32V1T, y: _NF32V1T, a: Union[glm_typing.FDAnyVector1, glm_typing.BAnyVector1, glm_typing.Number], /) -> _NF32V1T: ... @overload def mix(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, a: Union[glm_typing.FDAnyVector2, glm_typing.BAnyVector2, glm_typing.Number], /) -> vec2: ... @overload def mix(x: _NF32V2T, y: _NF32V2T, a: Union[glm_typing.FDAnyVector2, glm_typing.BAnyVector2, glm_typing.Number], /) -> _NF32V2T: ... @overload def mix(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, a: Union[glm_typing.FDAnyVector3, glm_typing.BAnyVector3, glm_typing.Number], /) -> vec3: ... @overload def mix(x: _NF32V3T, y: _NF32V3T, a: Union[glm_typing.FDAnyVector3, glm_typing.BAnyVector3, glm_typing.Number], /) -> _NF32V3T: ... @overload def mix(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, a: Union[glm_typing.FDAnyVector4, glm_typing.BAnyVector4, glm_typing.Number], /) -> vec4: ... @overload def mix(x: _NF32V4T, y: _NF32V4T, a: Union[glm_typing.FDAnyVector4, glm_typing.BAnyVector4, glm_typing.Number], /) -> _NF32V4T: ... @overload def mix(x: glm_typing.F32Matrix2x2, y: glm_typing.F32Matrix2x2, a: Union[glm_typing.FAnyMatrix2x2, glm_typing.Number], /) -> mat2x2: ... @overload def mix(x: _NF32M2X2T, y: _NF32M2X2T, a: Union[glm_typing.FAnyMatrix2x2, glm_typing.Number], /) -> _NF32M2X2T: ... @overload def mix(x: glm_typing.F32Matrix2x3, y: glm_typing.F32Matrix2x3, a: Union[glm_typing.FAnyMatrix2x3, glm_typing.Number], /) -> mat2x3: ... @overload def mix(x: _NF32M2X3T, y: _NF32M2X3T, a: Union[glm_typing.FAnyMatrix2x3, glm_typing.Number], /) -> _NF32M2X3T: ... @overload def mix(x: glm_typing.F32Matrix2x4, y: glm_typing.F32Matrix2x4, a: Union[glm_typing.FAnyMatrix2x4, glm_typing.Number], /) -> mat2x4: ... @overload def mix(x: _NF32M2X4T, y: _NF32M2X4T, a: Union[glm_typing.FAnyMatrix2x4, glm_typing.Number], /) -> _NF32M2X4T: ... @overload def mix(x: glm_typing.F32Matrix3x2, y: glm_typing.F32Matrix3x2, a: Union[glm_typing.FAnyMatrix3x2, glm_typing.Number], /) -> mat3x2: ... @overload def mix(x: _NF32M3X2T, y: _NF32M3X2T, a: Union[glm_typing.FAnyMatrix3x2, glm_typing.Number], /) -> _NF32M3X2T: ... @overload def mix(x: glm_typing.F32Matrix3x3, y: glm_typing.F32Matrix3x3, a: Union[glm_typing.FAnyMatrix3x3, glm_typing.Number], /) -> mat3x3: ... @overload def mix(x: _NF32M3X3T, y: _NF32M3X3T, a: Union[glm_typing.FAnyMatrix3x3, glm_typing.Number], /) -> _NF32M3X3T: ... @overload def mix(x: glm_typing.F32Matrix3x4, y: glm_typing.F32Matrix3x4, a: Union[glm_typing.FAnyMatrix3x4, glm_typing.Number], /) -> mat3x4: ... @overload def mix(x: _NF32M3X4T, y: _NF32M3X4T, a: Union[glm_typing.FAnyMatrix3x4, glm_typing.Number], /) -> _NF32M3X4T: ... @overload def mix(x: glm_typing.F32Matrix4x2, y: glm_typing.F32Matrix4x2, a: Union[glm_typing.FAnyMatrix4x2, glm_typing.Number], /) -> mat4x2: ... @overload def mix(x: _NF32M4X2T, y: _NF32M4X2T, a: Union[glm_typing.FAnyMatrix4x2, glm_typing.Number], /) -> _NF32M4X2T: ... @overload def mix(x: glm_typing.F32Matrix4x3, y: glm_typing.F32Matrix4x3, a: Union[glm_typing.FAnyMatrix4x3, glm_typing.Number], /) -> mat4x3: ... @overload def mix(x: _NF32M4X3T, y: _NF32M4X3T, a: Union[glm_typing.FAnyMatrix4x3, glm_typing.Number], /) -> _NF32M4X3T: ... @overload def mix(x: glm_typing.F32Matrix4x4, y: glm_typing.F32Matrix4x4, a: Union[glm_typing.FAnyMatrix4x4, glm_typing.Number], /) -> mat4x4: ... @overload def mix(x: _NF32M4X4T, y: _NF32M4X4T, a: Union[glm_typing.FAnyMatrix4x4, glm_typing.Number], /) -> _NF32M4X4T: ... @overload def mix(x: _QT, y: _QT, a: glm_typing.Number, /) -> _QT: ... @overload def modf(x: glm_typing.Number, /) -> Tuple[float, float]: ... @overload def modf(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def modf(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def modf(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def modf(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def modf(x: _FDVT, i: _FDVT, /) -> _FDVT: ... @overload def round(x: glm_typing.Number, /) -> float: ... @overload def round(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def round(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def round(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def round(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def round(x: _FDVT, i: _FDVT, /) -> _FDVT: ... @overload def roundEven(x: glm_typing.Number, /) -> float: ... @overload def roundEven(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def roundEven(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def roundEven(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def roundEven(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def roundEven(x: _FDVT, i: _FDVT, /) -> _FDVT: ... @overload def sign(x: glm_typing.Number, /) -> float: ... @overload def sign(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def sign(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def sign(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def sign(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def sign(x: _FDVT, i: _FDVT, /) -> _FDVT: ... @overload def smoothstep(edge0: glm_typing.Number, edge1: glm_typing.Number, x: glm_typing.Number, /) -> float: ... @overload def smoothstep(edge0: glm_typing.Number, edge1: glm_typing.Number, x: glm_typing.F32Vector1, /) -> vec1: ... @overload def smoothstep(edge0: glm_typing.F32Vector1, edge1: glm_typing.F32Vector1, x: glm_typing.F32Vector1, /) -> vec1: ... @overload def smoothstep(edge0: glm_typing.Number, edge1: glm_typing.Number, x: glm_typing.F32Vector2, /) -> vec2: ... @overload def smoothstep(edge0: glm_typing.F32Vector2, edge1: glm_typing.F32Vector2, x: glm_typing.F32Vector2, /) -> vec2: ... @overload def smoothstep(edge0: glm_typing.Number, edge1: glm_typing.Number, x: glm_typing.F32Vector3, /) -> vec3: ... @overload def smoothstep(edge0: glm_typing.F32Vector3, edge1: glm_typing.F32Vector3, x: glm_typing.F32Vector3, /) -> vec3: ... @overload def smoothstep(edge0: glm_typing.Number, edge1: glm_typing.Number, x: glm_typing.F32Vector4, /) -> vec4: ... @overload def smoothstep(edge0: glm_typing.F32Vector4, edge1: glm_typing.F32Vector4, x: glm_typing.F32Vector4, /) -> vec4: ... @overload def smoothstep(edge0: glm_typing.Number, edge1: glm_typing.Number, x: _NF32VT, /) -> _FDVT: ... @overload def smoothstep(edge0: _NF32VT, edge1: _NF32VT, x: _NF32VT, /) -> _NF32VT: ... @overload def step(edge: glm_typing.Number, x: glm_typing.Number, /) -> float: ... @overload def step(edge: glm_typing.Number, x: glm_typing.F32Vector1, /) -> vec1: ... @overload def step(edge: glm_typing.F32Vector1, x: glm_typing.F32Vector1, /) -> vec1: ... @overload def step(edge: glm_typing.Number, x: glm_typing.F32Vector2, /) -> vec2: ... @overload def step(edge: glm_typing.F32Vector2, x: glm_typing.F32Vector2, /) -> vec2: ... @overload def step(edge: glm_typing.Number, x: glm_typing.F32Vector3, /) -> vec3: ... @overload def step(edge: glm_typing.F32Vector3, x: glm_typing.F32Vector3, /) -> vec3: ... @overload def step(edge: glm_typing.Number, x: glm_typing.F32Vector4, /) -> vec4: ... @overload def step(edge: glm_typing.F32Vector4, x: glm_typing.F32Vector4, /) -> vec4: ... @overload def step(edge: glm_typing.Number, x: _NF32VT, /) -> _NF32VT: ... @overload def step(edge: _NF32VT, x: _NF32VT, /) -> _NF32VT: ... @overload def trunc(x: glm_typing.Number, /) -> float: ... @overload def trunc(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def trunc(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def trunc(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def trunc(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def trunc(x: _FDVT, /) -> _FDVT: ... @overload def uintBitsToFloat(x: int, /) -> float: ... @overload def uintBitsToFloat(x: glm_typing.U32Vector2, /) -> vec2: ... @overload def uintBitsToFloat(x: glm_typing.U32Vector3, /) -> vec3: ... @overload def uintBitsToFloat(x: glm_typing.U32Vector4, /) -> vec4: ... @overload def uintBitsToFloat(x: glm_typing.U32Vector1, /) -> vec1: ... @overload def exp(x: glm_typing.Number, /) -> float: ... @overload def exp(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def exp(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def exp(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def exp(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def exp(x: _FDVT, /) -> _FDVT: ... @overload def exp(x: _QT, /) -> _QT: ... @overload def exp2(x: glm_typing.Number, /) -> float: ... @overload def exp2(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def exp2(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def exp2(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def exp2(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def exp2(x: _FDVT, /) -> _FDVT: ... @overload def inversesqrt(x: glm_typing.Number, /) -> float: ... @overload def inversesqrt(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def inversesqrt(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def inversesqrt(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def inversesqrt(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def inversesqrt(x: _FDVT, /) -> _FDVT: ... @overload def log(x: glm_typing.Number, /) -> float: ... @overload def log(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def log(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def log(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def log(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def log(x: _FDVT, /) -> _FDVT: ... @overload def log(x: _QT, /) -> _QT: ... @overload def log2(x: glm_typing.Number, /) -> float: ... @overload def log2(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def log2(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def log2(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def log2(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def log2(x: _FDVT, /) -> _FDVT: ... @overload def pow(base: glm_typing.Number, exponent: glm_typing.Number, /) -> float: ... @overload def pow(base: glm_typing.F32Vector1, exponent: glm_typing.F32Vector1, /) -> vec1: ... @overload def pow(base: glm_typing.F32Vector2, exponent: glm_typing.F32Vector2, /) -> vec2: ... @overload def pow(base: glm_typing.F32Vector3, exponent: glm_typing.F32Vector3, /) -> vec3: ... @overload def pow(base: glm_typing.F32Vector4, exponent: glm_typing.F32Vector4, /) -> vec4: ... @overload def pow(base: _NF32DFVT, exponent: _NF32DFVT, /) -> _NF32DFVT: ... @overload def pow(base: _QT, exponent: _QT, /) -> _QT: ... @overload def sqrt(x: glm_typing.Number, /) -> float: ... @overload def sqrt(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def sqrt(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def sqrt(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def sqrt(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def sqrt(x: _FDVT, /) -> _FDVT: ... @overload def sqrt(x: _QT, /) -> _QT: ... @overload def cross(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> vec3: ... @overload def cross(x: _NF32DFV3T, y: _NF32DFV3T, /) -> _NF32DFV3T: ... @overload def cross(x: _QT, y: _QT, /) -> _QT: ... @overload def distance(p0: glm_typing.Number, p1: glm_typing.Number, /) -> float: ... @overload def distance(p0: glm_typing.F32Vector1, p1: glm_typing.F32Vector1, /) -> float: ... @overload def distance(p0: glm_typing.F32Vector2, p1: glm_typing.F32Vector2, /) -> float: ... @overload def distance(p0: glm_typing.F32Vector3, p1: glm_typing.F32Vector3, /) -> float: ... @overload def distance(p0: glm_typing.F32Vector4, p1: glm_typing.F32Vector4, /) -> float: ... @overload def distance(p0: _NF32DFVT, p1: _NF32DFVT, /) -> float: ... @overload def dot(x: glm_typing.Number, y: glm_typing.Number, /) -> float: ... @overload def dot(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> float: ... @overload def dot(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> float: ... @overload def dot(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> float: ... @overload def dot(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> float: ... @overload def dot(x: _NF32DFVT, y: _NF32DFVT, /) -> float: ... @overload def dot(x: _QT, y: _QT, /) -> float: ... @overload def faceforward(N: glm_typing.Number, I: glm_typing.Number, Nref: float, /) -> float: ... @overload def faceforward(x: glm_typing.F32Vector1, I: glm_typing.F32Vector1, Nref: glm_typing.F32Vector1, /) -> float: ... @overload def faceforward(x: glm_typing.F32Vector2, I: glm_typing.F32Vector2, Nref: glm_typing.F32Vector2, /) -> float: ... @overload def faceforward(x: glm_typing.F32Vector3, I: glm_typing.F32Vector3, Nref: glm_typing.F32Vector3, /) -> float: ... @overload def faceforward(x: glm_typing.F32Vector4, I: glm_typing.F32Vector4, Nref: glm_typing.F32Vector4, /) -> float: ... @overload def faceforward(N: _NF32DFVT, I: _NF32DFVT, Nref: _NF32DFVT, /) -> _NF32DFVT: ... def length(x: Union[glm_typing.Number, glm_typing.FDAnyVectorAny, glm_typing.FDAnyQuaternion], /) -> float: ... @overload def normalize(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def normalize(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def normalize(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def normalize(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def normalize(x: _FDVT, /) -> _FDVT: ... @overload def normalize(x: _QT, /) -> _QT: ... @overload def reflect(I: glm_typing.Number, N: glm_typing.Number, /) -> float: ... @overload def reflect(I: glm_typing.F32Vector1, N: glm_typing.F32Vector1, /) -> vec1: ... @overload def reflect(I: glm_typing.F32Vector2, N: glm_typing.F32Vector2, /) -> vec2: ... @overload def reflect(I: glm_typing.F32Vector3, N: glm_typing.F32Vector3, /) -> vec3: ... @overload def reflect(I: glm_typing.F32Vector4, N: glm_typing.F32Vector4, /) -> vec4: ... @overload def reflect(I: _NF32DFVT, N: _NF32DFVT, /) -> _NF32DFVT: ... @overload def refract(I: glm_typing.Number, N: glm_typing.Number, eta: float, /) -> float: ... @overload def refract(I: glm_typing.F32Vector1, N: glm_typing.F32Vector1, eta: float, /) -> vec1: ... @overload def refract(I: glm_typing.F32Vector2, N: glm_typing.F32Vector2, eta: float, /) -> vec2: ... @overload def refract(I: glm_typing.F32Vector3, N: glm_typing.F32Vector3, eta: float, /) -> vec3: ... @overload def refract(I: glm_typing.F32Vector4, N: glm_typing.F32Vector4, eta: float, /) -> vec4: ... @overload def refract(I: _NF32DFVT, N: _NF32DFVT, eta: float, /) -> _NF32DFVT: ... @overload def bitCount(v: int, /) -> int: ... @overload def bitCount(v: glm_typing.IUAnyVector1, /) -> ivec1: ... @overload def bitCount(v: glm_typing.IUAnyVector2, /) -> ivec2: ... @overload def bitCount(v: glm_typing.IUAnyVector3, /) -> ivec3: ... @overload def bitCount(v: glm_typing.IUAnyVector4, /) -> ivec4: ... @overload def bitfieldExtract(value: int, offset: int, bits: int, /) -> int: ... @overload def bitfieldExtract(v: glm_typing.I32Vector1, offset: int, bits: int, /) -> ivec1: ... @overload def bitfieldExtract(v: glm_typing.I32Vector2, offset: int, bits: int, /) -> ivec2: ... @overload def bitfieldExtract(v: glm_typing.I32Vector3, offset: int, bits: int, /) -> ivec3: ... @overload def bitfieldExtract(v: glm_typing.I32Vector4, offset: int, bits: int, /) -> ivec4: ... @overload def bitfieldExtract(value: _NI32IUVT, offset: int, bits: int, /) -> _NI32IUVT: ... @overload def bitfieldInsert(base: int, insert: int, offset: int, bits: int, /) -> int: ... @overload def bitfieldInsert(base: glm_typing.I32Vector1, insert: glm_typing.I32Vector1, offset: int, bits: int, /) -> ivec1: ... @overload def bitfieldInsert(base: glm_typing.I32Vector2, insert: glm_typing.I32Vector2, offset: int, bits: int, /) -> ivec2: ... @overload def bitfieldInsert(base: glm_typing.I32Vector3, insert: glm_typing.I32Vector3, offset: int, bits: int, /) -> ivec3: ... @overload def bitfieldInsert(base: glm_typing.I32Vector4, insert: glm_typing.I32Vector4, offset: int, bits: int, /) -> ivec4: ... @overload def bitfieldInsert(base: _NI32IUVT, insert: _NI32IUVT, offset: int, bits: int, /) -> _NI32IUVT: ... @overload def bitfieldReverse(value: int, /) -> int: ... @overload def bitfieldReverse(value: glm_typing.I32Vector1, /) -> ivec1: ... @overload def bitfieldReverse(value: glm_typing.I32Vector2, /) -> ivec2: ... @overload def bitfieldReverse(value: glm_typing.I32Vector3, /) -> ivec3: ... @overload def bitfieldReverse(value: glm_typing.I32Vector4, /) -> ivec4: ... @overload def bitfieldReverse(value: _NI32IUVT, /) -> _NI32IUVT: ... @overload def findLSB(value: int, /) -> int: ... @overload def findLSB(value: glm_typing.I32Vector1, /) -> ivec1: ... @overload def findLSB(value: glm_typing.I32Vector2, /) -> ivec2: ... @overload def findLSB(value: glm_typing.I32Vector3, /) -> ivec3: ... @overload def findLSB(value: glm_typing.I32Vector4, /) -> ivec4: ... @overload def findLSB(value: _NI32IUVT, /) -> _NI32IUVT: ... @overload def findMSB(value: int, /) -> int: ... @overload def findMSB(value: glm_typing.I32Vector1, /) -> ivec1: ... @overload def findMSB(value: glm_typing.I32Vector2, /) -> ivec2: ... @overload def findMSB(value: glm_typing.I32Vector3, /) -> ivec3: ... @overload def findMSB(value: glm_typing.I32Vector4, /) -> ivec4: ... @overload def findMSB(value: _NI32IUVT, /) -> _NI32IUVT: ... def imulExtended(x: _IVT, y: _IVT, msb: _IVT, lsb: _IVT, /) -> None: ... def uaddCarry(x: _UVT, y: _UVT, carry: _UVT, /) -> _UVT: ... def umulExtended(x: _UVT, y: _UVT, msb: _UVT, lsb: _UVT, /) -> None: ... def usubBorrow(x: _UVT, y: _UVT, borrow: _UVT, /) -> _UVT: ... def determinant(m: glm_typing.AnyAnyMatrixSquare, /) -> float: ... @overload def inverse(m: glm_typing.F32Matrix2x2, /) -> mat2x2: ... @overload def inverse(m: glm_typing.F32Matrix3x3, /) -> mat3x3: ... @overload def inverse(m: glm_typing.F32Matrix4x4, /) -> mat4x4: ... @overload def inverse(m: _NF32FDMSQRT, /) -> _NF32FDMSQRT: ... @overload def inverse(q: _QT, /) -> _QT: ... @overload def matrixCompMult(x: glm_typing.F32Matrix2x2, y: glm_typing.F32Matrix2x2, /) -> mat2x2: ... @overload def matrixCompMult(x: glm_typing.F32Matrix3x3, y: glm_typing.F32Matrix3x3, /) -> mat3x3: ... @overload def matrixCompMult(x: glm_typing.F32Matrix4x4, y: glm_typing.F32Matrix4x4, /) -> mat4x4: ... @overload def matrixCompMult(x: _NF32FDMSQRT, y: _NF32FDMSQRT, /) -> _NF32FDMSQRT: ... @overload def outerProduct(c: glm_typing.F32Vector2, r: glm_typing.F32Vector2, /) -> mat2x2: ... @overload def outerProduct(c: dvec2, r: dvec2, /) -> mat2x2: ... @overload def outerProduct(c: glm_typing.F32Vector2, r: glm_typing.F32Vector3, /) -> mat3x2: ... @overload def outerProduct(c: dvec2, r: dvec3, /) -> mat3x2: ... @overload def outerProduct(c: glm_typing.F32Vector2, r: glm_typing.F32Vector4, /) -> mat4x2: ... @overload def outerProduct(c: dvec2, r: dvec4, /) -> mat4x2: ... @overload def outerProduct(c: glm_typing.F32Vector3, r: glm_typing.F32Vector2, /) -> mat2x3: ... @overload def outerProduct(c: dvec3, r: dvec2, /) -> mat2x3: ... @overload def outerProduct(c: glm_typing.F32Vector3, r: glm_typing.F32Vector3, /) -> mat3x3: ... @overload def outerProduct(c: dvec3, r: dvec3, /) -> mat3x3: ... @overload def outerProduct(c: glm_typing.F32Vector3, r: glm_typing.F32Vector4, /) -> mat4x3: ... @overload def outerProduct(c: dvec3, r: dvec4, /) -> mat4x3: ... @overload def outerProduct(c: glm_typing.F32Vector4, r: glm_typing.F32Vector2, /) -> mat2x4: ... @overload def outerProduct(c: dvec4, r: dvec2, /) -> mat2x4: ... @overload def outerProduct(c: glm_typing.F32Vector4, r: glm_typing.F32Vector3, /) -> mat3x4: ... @overload def outerProduct(c: dvec4, r: dvec3, /) -> mat3x4: ... @overload def outerProduct(c: glm_typing.F32Vector4, r: glm_typing.F32Vector4, /) -> mat4x4: ... @overload def outerProduct(c: dvec4, r: dvec4, /) -> mat4x4: ... @overload def transpose(x: glm_typing.F32Matrix2x2, /) -> fmat2x2: ... @overload def transpose(x: glm_typing.F32Matrix2x3, /) -> fmat3x2: ... @overload def transpose(x: glm_typing.F32Matrix2x4, /) -> fmat4x2: ... @overload def transpose(x: glm_typing.F32Matrix3x2, /) -> fmat2x3: ... @overload def transpose(x: glm_typing.F32Matrix3x3, /) -> fmat3x3: ... @overload def transpose(x: glm_typing.F32Matrix3x4, /) -> fmat4x3: ... @overload def transpose(x: glm_typing.F32Matrix4x2, /) -> fmat2x4: ... @overload def transpose(x: glm_typing.F32Matrix4x3, /) -> fmat3x4: ... @overload def transpose(x: glm_typing.F32Matrix4x4, /) -> fmat4x4: ... @overload def transpose(x: dmat2x2, /) -> dmat2x2: ... @overload def transpose(x: dmat2x3, /) -> dmat3x2: ... @overload def transpose(x: dmat2x4, /) -> dmat4x2: ... @overload def transpose(x: dmat3x2, /) -> dmat2x3: ... @overload def transpose(x: dmat3x3, /) -> dmat3x3: ... @overload def transpose(x: dmat3x4, /) -> dmat4x3: ... @overload def transpose(x: dmat4x2, /) -> dmat2x4: ... @overload def transpose(x: dmat4x3, /) -> dmat3x4: ... @overload def transpose(x: dmat4x4, /) -> dmat4x4: ... @overload def transpose(x: imat2x2, /) -> imat2x2: ... @overload def transpose(x: imat2x3, /) -> imat3x2: ... @overload def transpose(x: imat2x4, /) -> imat4x2: ... @overload def transpose(x: imat3x2, /) -> imat2x3: ... @overload def transpose(x: imat3x3, /) -> imat3x3: ... @overload def transpose(x: imat3x4, /) -> imat4x3: ... @overload def transpose(x: imat4x2, /) -> imat2x4: ... @overload def transpose(x: imat4x3, /) -> imat3x4: ... @overload def transpose(x: imat4x4, /) -> imat4x4: ... @overload def transpose(x: umat2x2, /) -> umat2x2: ... @overload def transpose(x: umat2x3, /) -> umat3x2: ... @overload def transpose(x: umat2x4, /) -> umat4x2: ... @overload def transpose(x: umat3x2, /) -> umat2x3: ... @overload def transpose(x: umat3x3, /) -> umat3x3: ... @overload def transpose(x: umat3x4, /) -> umat4x3: ... @overload def transpose(x: umat4x2, /) -> umat2x4: ... @overload def transpose(x: umat4x3, /) -> umat3x4: ... @overload def transpose(x: umat4x4, /) -> umat4x4: ... def packDouble2x32(v: glm_typing.U32Vector2, /) -> float: ... def packHalf2x16(v: glm_typing.F32Vector2, /) -> int: ... def packSnorm2x16(v: glm_typing.F32Vector2, /) -> int: ... def packSnorm4x8(v: glm_typing.F32Vector4, /) -> int: ... def packUnorm2x16(v: glm_typing.F32Vector2, /) -> int: ... def packUnorm4x8(v: glm_typing.F32Vector4, /) -> int: ... def unpackDouble2x32(v: float, /) -> uvec2: ... def unpackHalf2x16(v: int, /) -> vec2: ... def unpackSnorm2x16(p: int, /) -> vec2: ... def unpackSnorm4x8(p: int, /) -> vec4: ... def unpackUnorm2x16(p: int, /) -> vec2: ... def unpackUnorm4x8(p: int, /) -> vec4: ... @overload def acos(x: glm_typing.Number, /) -> float: ... @overload def acos(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def acos(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def acos(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def acos(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def acos(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def acosh(x: glm_typing.Number, /) -> float: ... @overload def acosh(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def acosh(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def acosh(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def acosh(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def acosh(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def asin(x: glm_typing.Number, /) -> float: ... @overload def asin(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def asin(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def asin(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def asin(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def asin(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def asinh(x: glm_typing.Number, /) -> float: ... @overload def asinh(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def asinh(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def asinh(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def asinh(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def asinh(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def atan(y_over_x: glm_typing.Number, /) -> float: ... @overload def atan(y_over_x: glm_typing.F32Vector1, /) -> vec1: ... @overload def atan(y_over_x: glm_typing.F32Vector2, /) -> vec2: ... @overload def atan(y_over_x: glm_typing.F32Vector3, /) -> vec3: ... @overload def atan(y_over_x: glm_typing.F32Vector4, /) -> vec4: ... @overload def atan(y_over_x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def atan(y: glm_typing.Number, x: glm_typing.Number, /) -> float: ... @overload def atan(y: glm_typing.F32Vector1, x: glm_typing.F32Vector1, /) -> vec1: ... @overload def atan(y: glm_typing.F32Vector2, x: glm_typing.F32Vector2, /) -> vec2: ... @overload def atan(y: glm_typing.F32Vector3, x: glm_typing.F32Vector3, /) -> vec3: ... @overload def atan(y: glm_typing.F32Vector4, x: glm_typing.F32Vector4, /) -> vec4: ... @overload def atan(y: _NF32DFVT, x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def atanh(x: glm_typing.Number, /) -> float: ... @overload def atanh(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def atanh(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def atanh(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def atanh(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def atanh(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def cos(x: glm_typing.Number, /) -> float: ... @overload def cos(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def cos(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def cos(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def cos(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def cos(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def cosh(x: glm_typing.Number, /) -> float: ... @overload def cosh(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def cosh(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def cosh(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def cosh(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def cosh(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def degrees(x: glm_typing.Number, /) -> float: ... @overload def degrees(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def degrees(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def degrees(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def degrees(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def degrees(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def radians(x: glm_typing.Number, /) -> float: ... @overload def radians(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def radians(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def radians(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def radians(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def radians(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def sin(x: glm_typing.Number, /) -> float: ... @overload def sin(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def sin(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def sin(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def sin(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def sin(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def sinh(x: glm_typing.Number, /) -> float: ... @overload def sinh(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def sinh(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def sinh(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def sinh(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def sinh(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def tan(x: glm_typing.Number, /) -> float: ... @overload def tan(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def tan(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def tan(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def tan(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def tan(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def tanh(x: glm_typing.Number, /) -> float: ... @overload def tanh(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def tanh(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def tanh(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def tanh(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def tanh(x: _NF32DFVT, /) -> _NF32DFVT: ... def all(v: glm_typing.BAnyVectorAny, /) -> bool: ... def any(v: glm_typing.BAnyVectorAny, /) -> bool: ... @overload def equal(x: glm_typing.Number, y: glm_typing.Number, ULPs: int, /) -> int: ... @overload def equal(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> bvec1: ... @overload def equal(x: _NF32V1T, y: _NF32V1T, /) -> bvec1: ... @overload def equal(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, ULPs_epsilon: Union[glm_typing.Number, ivec1, glm_typing.F32Vector1], /) -> bvec1: ... @overload def equal(x: _NF32V1T, y: _NF32V1T, ULPs_epsilon: Union[glm_typing.Number, ivec1, glm_typing.F32Vector1], /) -> bvec1: ... @overload def equal(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> bvec2: ... @overload def equal(x: _NF32V2T, y: _NF32V2T, /) -> bvec2: ... @overload def equal(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, ULPs_epsilon: Union[glm_typing.Number, ivec2, glm_typing.F32Vector2], /) -> bvec2: ... @overload def equal(x: _NF32V2T, y: _NF32V2T, ULPs_epsilon: Union[glm_typing.Number, ivec2, glm_typing.F32Vector2], /) -> bvec2: ... @overload def equal(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> bvec3: ... @overload def equal(x: _NF32V3T, y: _NF32V3T, /) -> bvec3: ... @overload def equal(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, ULPs_epsilon: Union[glm_typing.Number, ivec3, glm_typing.F32Vector3], /) -> bvec3: ... @overload def equal(x: _NF32V3T, y: _NF32V3T, ULPs_epsilon: Union[glm_typing.Number, ivec3, glm_typing.F32Vector3], /) -> bvec3: ... @overload def equal(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> bvec4: ... @overload def equal(x: _NF32V4T, y: _NF32V4T, /) -> bvec4: ... @overload def equal(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, ULPs_epsilon: Union[glm_typing.Number, ivec4, glm_typing.F32Vector4], /) -> bvec4: ... @overload def equal(x: _NF32V4T, y: _NF32V4T, ULPs_epsilon: Union[glm_typing.Number, ivec4, glm_typing.F32Vector4], /) -> bvec4: ... @overload def equal(x: glm_typing.F32Matrix2xAny, y: glm_typing.F32Matrix2xAny, /) -> bvec2: ... @overload def equal(x: _NF32M2XNT, y: _NF32M2XNT, /) -> bvec2: ... @overload def equal(x: glm_typing.F32Matrix2xAny, y: glm_typing.F32Matrix2xAny, ULPs_epsilon: Union[glm_typing.Number, ivec2, glm_typing.F32Vector2], /) -> bvec2: ... @overload def equal(x: _NF32M2XNT, y: _NF32M2XNT, ULPs_epsilon: Union[glm_typing.Number, ivec2, glm_typing.F32Vector2], /) -> bvec2: ... @overload def equal(x: glm_typing.F32Matrix3xAny, y: glm_typing.F32Matrix3xAny, /) -> bvec3: ... @overload def equal(x: _NF32M3XNT, y: _NF32M3XNT, /) -> bvec3: ... @overload def equal(x: glm_typing.F32Matrix3xAny, y: glm_typing.F32Matrix3xAny, ULPs_epsilon: Union[glm_typing.Number, ivec3, glm_typing.F32Vector3], /) -> bvec3: ... @overload def equal(x: _NF32M3XNT, y: _NF32M3XNT, ULPs_epsilon: Union[glm_typing.Number, ivec3, glm_typing.F32Vector3], /) -> bvec3: ... @overload def equal(x: glm_typing.F32Matrix4xAny, y: glm_typing.F32Matrix4xAny, /) -> bvec4: ... @overload def equal(x: _NF32M4XNT, y: _NF32M4XNT, /) -> bvec4: ... @overload def equal(x: glm_typing.F32Matrix4xAny, y: glm_typing.F32Matrix4xAny, ULPs_epsilon: Union[glm_typing.Number, ivec4, glm_typing.F32Vector4], /) -> bvec4: ... @overload def equal(x: _NF32M4XNT, y: _NF32M4XNT, ULPs_epsilon: Union[glm_typing.Number, ivec4, glm_typing.F32Vector4], /) -> bvec4: ... @overload def equal(x: _QT, y: _QT, /) -> int: ... @overload def greaterThan(x: _QT, y: _QT, /) -> bvec4: ... @overload def greaterThan(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> bvec1: ... @overload def greaterThan(x: _NF32V1T, y: _NF32V1T, /) -> bvec1: ... @overload def greaterThan(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> bvec2: ... @overload def greaterThan(x: _NF32V2T, y: _NF32V2T, /) -> bvec2: ... @overload def greaterThan(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> bvec3: ... @overload def greaterThan(x: _NF32V3T, y: _NF32V3T, /) -> bvec3: ... @overload def greaterThan(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> bvec4: ... @overload def greaterThan(x: _NF32V4T, y: _NF32V4T, /) -> bvec4: ... @overload def greaterThanEqual(x: _QT, y: _QT, /) -> bvec4: ... @overload def greaterThanEqual(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> bvec1: ... @overload def greaterThanEqual(x: _NF32V1T, y: _NF32V1T, /) -> bvec1: ... @overload def greaterThanEqual(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> bvec2: ... @overload def greaterThanEqual(x: _NF32V2T, y: _NF32V2T, /) -> bvec2: ... @overload def greaterThanEqual(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> bvec3: ... @overload def greaterThanEqual(x: _NF32V3T, y: _NF32V3T, /) -> bvec3: ... @overload def greaterThanEqual(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> bvec4: ... @overload def greaterThanEqual(x: _NF32V4T, y: _NF32V4T, /) -> bvec4: ... @overload def lessThan(x: _QT, y: _QT, /) -> bvec4: ... @overload def lessThan(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> bvec1: ... @overload def lessThan(x: _NF32V1T, y: _NF32V1T, /) -> bvec1: ... @overload def lessThan(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> bvec2: ... @overload def lessThan(x: _NF32V2T, y: _NF32V2T, /) -> bvec2: ... @overload def lessThan(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> bvec3: ... @overload def lessThan(x: _NF32V3T, y: _NF32V3T, /) -> bvec3: ... @overload def lessThan(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> bvec4: ... @overload def lessThan(x: _NF32V4T, y: _NF32V4T, /) -> bvec4: ... @overload def lessThanEqual(x: _QT, y: _QT, /) -> bvec4: ... @overload def lessThanEqual(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> bvec1: ... @overload def lessThanEqual(x: _NF32V1T, y: _NF32V1T, /) -> bvec1: ... @overload def lessThanEqual(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> bvec2: ... @overload def lessThanEqual(x: _NF32V2T, y: _NF32V2T, /) -> bvec2: ... @overload def lessThanEqual(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> bvec3: ... @overload def lessThanEqual(x: _NF32V3T, y: _NF32V3T, /) -> bvec3: ... @overload def lessThanEqual(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> bvec4: ... @overload def lessThanEqual(x: _NF32V4T, y: _NF32V4T, /) -> bvec4: ... @overload def notEqual(x: _QT, y: _QT, /) -> bvec4: ... @overload def notEqual(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> bvec1: ... @overload def notEqual(x: _NF32V1T, y: _NF32V1T, /) -> bvec1: ... @overload def notEqual(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> bvec2: ... @overload def notEqual(x: _NF32V2T, y: _NF32V2T, /) -> bvec2: ... @overload def notEqual(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> bvec3: ... @overload def notEqual(x: _NF32V3T, y: _NF32V3T, /) -> bvec3: ... @overload def notEqual(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> bvec4: ... @overload def notEqual(x: _NF32V4T, y: _NF32V4T, /) -> bvec4: ... def not_(v: glm_typing.BAnyVectorAny, /) -> bool: ... def add(a: Any, b: Any, /) -> Any: ... def and_(a: Any, b: Any, /) -> Any: ... def cmp(a: Any, b: Any, /) -> Any: ... def div(a: Any, b: Any, /) -> Any: ... def floordiv(a: Any, b: Any, /) -> Any: ... def if_else(b: Any, x: Any, y: Any, /) -> Any: ... def inv(a: Any, /) -> Any: ... def lshift(a: Any, b: Any, /) -> Any: ... def mul(a: Any, b: Any, /) -> Any: ... def neg(a: Any, /) -> Any: ... def or_(a: Any, b: Any, /) -> Any: ... def pos(a: Any, /) -> Any: ... def rshift(a: Any, b: Any, /) -> Any: ... def sub(a: Any, b: Any, /) -> Any: ... def xor(a: Any, b: Any, /) -> Any: ... @overload def convertLinearToSRGB(ColorLinear: glm_typing.F32Vector1) -> vec1: ... @overload def convertLinearToSRGB(ColorLinear: glm_typing.F32Vector1, Gamma: glm_typing.Number) -> vec1: ... @overload def convertLinearToSRGB(ColorLinear: glm_typing.F32Vector2) -> vec2: ... @overload def convertLinearToSRGB(ColorLinear: glm_typing.F32Vector2, Gamma: glm_typing.Number) -> vec2: ... @overload def convertLinearToSRGB(ColorLinear: glm_typing.F32Vector3) -> vec3: ... @overload def convertLinearToSRGB(ColorLinear: glm_typing.F32Vector3, Gamma: glm_typing.Number) -> vec3: ... @overload def convertLinearToSRGB(ColorLinear: glm_typing.F32Vector4) -> vec4: ... @overload def convertLinearToSRGB(ColorLinear: glm_typing.F32Vector4, Gamma: glm_typing.Number) -> vec4: ... @overload def convertLinearToSRGB(ColorLinear: _NF32DFVT) -> _NF32DFVT: ... @overload def convertLinearToSRGB(ColorLinear: _NF32DFVT, Gamma: glm_typing.Number) -> _NF32DFVT: ... @overload def convertSRGBToLinear(ColorLinear: glm_typing.F32Vector1) -> vec1: ... @overload def convertSRGBToLinear(ColorLinear: glm_typing.F32Vector1, Gamma: glm_typing.Number) -> vec1: ... @overload def convertSRGBToLinear(ColorLinear: glm_typing.F32Vector2) -> vec2: ... @overload def convertSRGBToLinear(ColorLinear: glm_typing.F32Vector2, Gamma: glm_typing.Number) -> vec2: ... @overload def convertSRGBToLinear(ColorLinear: glm_typing.F32Vector3) -> vec3: ... @overload def convertSRGBToLinear(ColorLinear: glm_typing.F32Vector3, Gamma: glm_typing.Number) -> vec3: ... @overload def convertSRGBToLinear(ColorLinear: glm_typing.F32Vector4) -> vec4: ... @overload def convertSRGBToLinear(ColorLinear: glm_typing.F32Vector4, Gamma: glm_typing.Number) -> vec4: ... @overload def convertSRGBToLinear(ColorLinear: _NF32DFVT) -> _NF32DFVT: ... @overload def convertSRGBToLinear(ColorLinear: _NF32DFVT, Gamma: glm_typing.Number) -> _NF32DFVT: ... def e() -> float: ... def epsilon() -> float: ... def euler() -> float: ... def four_over_pi() -> float: ... def golden_ratio() -> float: ... def half_pi() -> float: ... def ln_ln_two() -> float: ... def ln_ten() -> float: ... def ln_two() -> float: ... def one() -> float: ... def one_over_pi() -> float: ... def one_over_root_two() -> float: ... def one_over_two_pi() -> float: ... def pi() -> float: ... def quarter_pi() -> float: ... def root_five() -> float: ... def root_half_pi() -> float: ... def root_ln_four() -> float: ... def root_pi() -> float: ... def root_three() -> float: ... def root_two() -> float: ... def root_two_pi() -> float: ... def third() -> float: ... def three_over_two_pi() -> float: ... def two_over_pi() -> float: ... def two_over_root_pi() -> float: ... def two_pi() -> float: ... def two_thirds() -> float: ... def zero() -> float: ... @overload def epsilonEqual(x: glm_typing.Number, y: glm_typing.Number, epsilon: glm_typing.Number, /) -> bool: ... @overload def epsilonEqual(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, epsilon: glm_typing.Number, /) -> bvec1: ... @overload def epsilonEqual(x: _NF32DFV1T, y: _NF32DFV1T, epsilon: glm_typing.Number, /) -> bvec1: ... @overload def epsilonEqual(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, epsilon: glm_typing.Number, /) -> bvec2: ... @overload def epsilonEqual(x: _NF32DFV2T, y: _NF32DFV2T, epsilon: glm_typing.Number, /) -> bvec2: ... @overload def epsilonEqual(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, epsilon: glm_typing.Number, /) -> bvec3: ... @overload def epsilonEqual(x: _NF32DFV3T, y: _NF32DFV3T, epsilon: glm_typing.Number, /) -> bvec3: ... @overload def epsilonEqual(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, epsilon: glm_typing.Number, /) -> bvec4: ... @overload def epsilonEqual(x: _NF32DFV4T, y: _NF32DFV4T, epsilon: glm_typing.Number, /) -> bvec4: ... @overload def epsilonNotEqual(x: glm_typing.Number, y: glm_typing.Number, epsilon: glm_typing.Number, /) -> bool: ... @overload def epsilonNotEqual(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, epsilon: glm_typing.Number, /) -> bvec1: ... @overload def epsilonNotEqual(x: _NF32DFV1T, y: _NF32DFV1T, epsilon: glm_typing.Number, /) -> bvec1: ... @overload def epsilonNotEqual(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, epsilon: glm_typing.Number, /) -> bvec2: ... @overload def epsilonNotEqual(x: _NF32DFV2T, y: _NF32DFV2T, epsilon: glm_typing.Number, /) -> bvec2: ... @overload def epsilonNotEqual(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, epsilon: glm_typing.Number, /) -> bvec3: ... @overload def epsilonNotEqual(x: _NF32DFV3T, y: _NF32DFV3T, epsilon: glm_typing.Number, /) -> bvec3: ... @overload def epsilonNotEqual(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, epsilon: glm_typing.Number, /) -> bvec4: ... @overload def epsilonNotEqual(x: _NF32DFV4T, y: _NF32DFV4T, epsilon: glm_typing.Number, /) -> bvec4: ... @overload def iround(x: glm_typing.Number, /) -> int: ... @overload def iround(x: glm_typing.F32Vector1, /) -> ivec1: ... @overload def iround(x: _NF32DFV1T, /) -> ivec1: ... @overload def iround(x: glm_typing.F32Vector2, /) -> ivec2: ... @overload def iround(x: _NF32DFV2T, /) -> ivec2: ... @overload def iround(x: glm_typing.F32Vector3, /) -> ivec3: ... @overload def iround(x: _NF32DFV3T, /) -> ivec3: ... @overload def iround(x: glm_typing.F32Vector4, /) -> ivec4: ... @overload def iround(x: _NF32DFV4T, /) -> ivec4: ... @overload def uround(x: glm_typing.Number, /) -> int: ... @overload def uround(x: glm_typing.F32Vector1, /) -> uvec1: ... @overload def uround(x: _NF32DFV1T, /) -> uvec1: ... @overload def uround(x: glm_typing.F32Vector2, /) -> uvec2: ... @overload def uround(x: _NF32DFV2T, /) -> uvec2: ... @overload def uround(x: glm_typing.F32Vector3, /) -> uvec3: ... @overload def uround(x: _NF32DFV3T, /) -> uvec3: ... @overload def uround(x: glm_typing.F32Vector4, /) -> uvec4: ... @overload def uround(x: _NF32DFV4T, /) -> uvec4: ... @overload def column(m: glm_typing.F32Matrix2x2, index: int, /) -> vec2: ... @overload def column(m: glm_typing.F32Matrix2x2, index: int, x: glm_typing.F32Vector2, /) -> mat2x2: ... @overload def column(m: glm_typing.F32Matrix2x3, index: int, /) -> vec3: ... @overload def column(m: glm_typing.F32Matrix2x3, index: int, x: glm_typing.F32Vector3, /) -> mat2x3: ... @overload def column(m: glm_typing.F32Matrix2x4, index: int, /) -> vec4: ... @overload def column(m: glm_typing.F32Matrix2x4, index: int, x: glm_typing.F32Vector4, /) -> mat2x4: ... @overload def column(m: glm_typing.F32Matrix3x2, index: int, /) -> vec2: ... @overload def column(m: glm_typing.F32Matrix3x2, index: int, x: glm_typing.F32Vector2, /) -> mat3x2: ... @overload def column(m: glm_typing.F32Matrix3x3, index: int, /) -> vec3: ... @overload def column(m: glm_typing.F32Matrix3x3, index: int, x: glm_typing.F32Vector3, /) -> mat3x3: ... @overload def column(m: glm_typing.F32Matrix3x4, index: int, /) -> vec4: ... @overload def column(m: glm_typing.F32Matrix3x4, index: int, x: glm_typing.F32Vector4, /) -> mat3x4: ... @overload def column(m: glm_typing.F32Matrix4x2, index: int, /) -> vec2: ... @overload def column(m: glm_typing.F32Matrix4x2, index: int, x: glm_typing.F32Vector2, /) -> mat4x2: ... @overload def column(m: glm_typing.F32Matrix4x3, index: int, /) -> vec3: ... @overload def column(m: glm_typing.F32Matrix4x3, index: int, x: glm_typing.F32Vector3, /) -> mat4x3: ... @overload def column(m: glm_typing.F32Matrix4x4, index: int, /) -> vec4: ... @overload def column(m: glm_typing.F32Matrix4x4, index: int, x: glm_typing.F32Vector4, /) -> mat4x4: ... @overload def column(m: dmat2x2, index: int, /) -> dvec2: ... @overload def column(m: dmat2x2, index: int, x: Union[dvec2, dmvec2], /) -> dmat2x2: ... @overload def column(m: dmat2x3, index: int, /) -> dvec3: ... @overload def column(m: dmat2x3, index: int, x: Union[dvec3, dmvec3], /) -> dmat2x3: ... @overload def column(m: dmat2x4, index: int, /) -> dvec4: ... @overload def column(m: dmat2x4, index: int, x: Union[dvec4, dmvec4], /) -> dmat2x4: ... @overload def column(m: dmat3x2, index: int, /) -> dvec2: ... @overload def column(m: dmat3x2, index: int, x: Union[dvec2, dmvec2], /) -> dmat3x2: ... @overload def column(m: dmat3x3, index: int, /) -> dvec3: ... @overload def column(m: dmat3x3, index: int, x: Union[dvec3, dmvec3], /) -> dmat3x3: ... @overload def column(m: dmat3x4, index: int, /) -> dvec4: ... @overload def column(m: dmat3x4, index: int, x: Union[dvec4, dmvec4], /) -> dmat3x4: ... @overload def column(m: dmat4x2, index: int, /) -> dvec2: ... @overload def column(m: dmat4x2, index: int, x: Union[dvec2, dmvec2], /) -> dmat4x2: ... @overload def column(m: dmat4x3, index: int, /) -> dvec3: ... @overload def column(m: dmat4x3, index: int, x: Union[dvec3, dmvec3], /) -> dmat4x3: ... @overload def column(m: dmat4x4, index: int, /) -> dvec4: ... @overload def column(m: dmat4x4, index: int, x: Union[dvec4, dmvec4], /) -> dmat4x4: ... @overload def column(m: imat2x2, index: int, /) -> ivec2: ... @overload def column(m: imat2x2, index: int, x: Union[ivec2, imvec2], /) -> imat2x2: ... @overload def column(m: imat2x3, index: int, /) -> ivec3: ... @overload def column(m: imat2x3, index: int, x: Union[ivec3, imvec3], /) -> imat2x3: ... @overload def column(m: imat2x4, index: int, /) -> ivec4: ... @overload def column(m: imat2x4, index: int, x: Union[ivec4, imvec4], /) -> imat2x4: ... @overload def column(m: imat3x2, index: int, /) -> ivec2: ... @overload def column(m: imat3x2, index: int, x: Union[ivec2, imvec2], /) -> imat3x2: ... @overload def column(m: imat3x3, index: int, /) -> ivec3: ... @overload def column(m: imat3x3, index: int, x: Union[ivec3, imvec3], /) -> imat3x3: ... @overload def column(m: imat3x4, index: int, /) -> ivec4: ... @overload def column(m: imat3x4, index: int, x: Union[ivec4, imvec4], /) -> imat3x4: ... @overload def column(m: imat4x2, index: int, /) -> ivec2: ... @overload def column(m: imat4x2, index: int, x: Union[ivec2, imvec2], /) -> imat4x2: ... @overload def column(m: imat4x3, index: int, /) -> ivec3: ... @overload def column(m: imat4x3, index: int, x: Union[ivec3, imvec3], /) -> imat4x3: ... @overload def column(m: imat4x4, index: int, /) -> ivec4: ... @overload def column(m: imat4x4, index: int, x: Union[ivec4, imvec4], /) -> imat4x4: ... @overload def column(m: umat2x2, index: int, /) -> uvec2: ... @overload def column(m: umat2x2, index: int, x: Union[uvec2, umvec2], /) -> umat2x2: ... @overload def column(m: umat2x3, index: int, /) -> uvec3: ... @overload def column(m: umat2x3, index: int, x: Union[uvec3, umvec3], /) -> umat2x3: ... @overload def column(m: umat2x4, index: int, /) -> uvec4: ... @overload def column(m: umat2x4, index: int, x: Union[uvec4, umvec4], /) -> umat2x4: ... @overload def column(m: umat3x2, index: int, /) -> uvec2: ... @overload def column(m: umat3x2, index: int, x: Union[uvec2, umvec2], /) -> umat3x2: ... @overload def column(m: umat3x3, index: int, /) -> uvec3: ... @overload def column(m: umat3x3, index: int, x: Union[uvec3, umvec3], /) -> umat3x3: ... @overload def column(m: umat3x4, index: int, /) -> uvec4: ... @overload def column(m: umat3x4, index: int, x: Union[uvec4, umvec4], /) -> umat3x4: ... @overload def column(m: umat4x2, index: int, /) -> uvec2: ... @overload def column(m: umat4x2, index: int, x: Union[uvec2, umvec2], /) -> umat4x2: ... @overload def column(m: umat4x3, index: int, /) -> uvec3: ... @overload def column(m: umat4x3, index: int, x: Union[uvec3, umvec3], /) -> umat4x3: ... @overload def column(m: umat4x4, index: int, /) -> uvec4: ... @overload def column(m: umat4x4, index: int, x: Union[uvec4, umvec4], /) -> umat4x4: ... @overload def row(m: glm_typing.F32Matrix2x2, index: int, /) -> vec2: ... @overload def row(m: glm_typing.F32Matrix2x2, index: int, x: glm_typing.F32Vector2, /) -> mat2x2: ... @overload def row(m: glm_typing.F32Matrix2x3, index: int, /) -> vec2: ... @overload def row(m: glm_typing.F32Matrix2x3, index: int, x: glm_typing.F32Vector2, /) -> mat2x3: ... @overload def row(m: glm_typing.F32Matrix2x4, index: int, /) -> vec2: ... @overload def row(m: glm_typing.F32Matrix2x4, index: int, x: glm_typing.F32Vector2, /) -> mat2x4: ... @overload def row(m: glm_typing.F32Matrix3x2, index: int, /) -> vec3: ... @overload def row(m: glm_typing.F32Matrix3x2, index: int, x: glm_typing.F32Vector3, /) -> mat3x2: ... @overload def row(m: glm_typing.F32Matrix3x3, index: int, /) -> vec3: ... @overload def row(m: glm_typing.F32Matrix3x3, index: int, x: glm_typing.F32Vector3, /) -> mat3x3: ... @overload def row(m: glm_typing.F32Matrix3x4, index: int, /) -> vec3: ... @overload def row(m: glm_typing.F32Matrix3x4, index: int, x: glm_typing.F32Vector3, /) -> mat3x4: ... @overload def row(m: glm_typing.F32Matrix4x2, index: int, /) -> vec4: ... @overload def row(m: glm_typing.F32Matrix4x2, index: int, x: glm_typing.F32Vector4, /) -> mat4x2: ... @overload def row(m: glm_typing.F32Matrix4x3, index: int, /) -> vec4: ... @overload def row(m: glm_typing.F32Matrix4x3, index: int, x: glm_typing.F32Vector4, /) -> mat4x3: ... @overload def row(m: glm_typing.F32Matrix4x4, index: int, /) -> vec4: ... @overload def row(m: glm_typing.F32Matrix4x4, index: int, x: glm_typing.F32Vector4, /) -> mat4x4: ... @overload def row(m: dmat2x2, index: int, /) -> dvec2: ... @overload def row(m: dmat2x2, index: int, x: Union[dvec2, dmvec2], /) -> dmat2x2: ... @overload def row(m: dmat2x3, index: int, /) -> dvec2: ... @overload def row(m: dmat2x3, index: int, x: Union[dvec2, dmvec2], /) -> dmat2x3: ... @overload def row(m: dmat2x4, index: int, /) -> dvec2: ... @overload def row(m: dmat2x4, index: int, x: Union[dvec2, dmvec2], /) -> dmat2x4: ... @overload def row(m: dmat3x2, index: int, /) -> dvec3: ... @overload def row(m: dmat3x2, index: int, x: Union[dvec3, dmvec3], /) -> dmat3x2: ... @overload def row(m: dmat3x3, index: int, /) -> dvec3: ... @overload def row(m: dmat3x3, index: int, x: Union[dvec3, dmvec3], /) -> dmat3x3: ... @overload def row(m: dmat3x4, index: int, /) -> dvec3: ... @overload def row(m: dmat3x4, index: int, x: Union[dvec3, dmvec3], /) -> dmat3x4: ... @overload def row(m: dmat4x2, index: int, /) -> dvec4: ... @overload def row(m: dmat4x2, index: int, x: Union[dvec4, dmvec4], /) -> dmat4x2: ... @overload def row(m: dmat4x3, index: int, /) -> dvec4: ... @overload def row(m: dmat4x3, index: int, x: Union[dvec4, dmvec4], /) -> dmat4x3: ... @overload def row(m: dmat4x4, index: int, /) -> dvec4: ... @overload def row(m: dmat4x4, index: int, x: Union[dvec4, dmvec4], /) -> dmat4x4: ... @overload def row(m: imat2x2, index: int, /) -> ivec2: ... @overload def row(m: imat2x2, index: int, x: Union[ivec2, imvec2], /) -> imat2x2: ... @overload def row(m: imat2x3, index: int, /) -> ivec2: ... @overload def row(m: imat2x3, index: int, x: Union[ivec2, imvec2], /) -> imat2x3: ... @overload def row(m: imat2x4, index: int, /) -> ivec2: ... @overload def row(m: imat2x4, index: int, x: Union[ivec2, imvec2], /) -> imat2x4: ... @overload def row(m: imat3x2, index: int, /) -> ivec3: ... @overload def row(m: imat3x2, index: int, x: Union[ivec3, imvec3], /) -> imat3x2: ... @overload def row(m: imat3x3, index: int, /) -> ivec3: ... @overload def row(m: imat3x3, index: int, x: Union[ivec3, imvec3], /) -> imat3x3: ... @overload def row(m: imat3x4, index: int, /) -> ivec3: ... @overload def row(m: imat3x4, index: int, x: Union[ivec3, imvec3], /) -> imat3x4: ... @overload def row(m: imat4x2, index: int, /) -> ivec4: ... @overload def row(m: imat4x2, index: int, x: Union[ivec4, imvec4], /) -> imat4x2: ... @overload def row(m: imat4x3, index: int, /) -> ivec4: ... @overload def row(m: imat4x3, index: int, x: Union[ivec4, imvec4], /) -> imat4x3: ... @overload def row(m: imat4x4, index: int, /) -> ivec4: ... @overload def row(m: imat4x4, index: int, x: Union[ivec4, imvec4], /) -> imat4x4: ... @overload def row(m: umat2x2, index: int, /) -> uvec2: ... @overload def row(m: umat2x2, index: int, x: Union[uvec2, umvec2], /) -> umat2x2: ... @overload def row(m: umat2x3, index: int, /) -> uvec2: ... @overload def row(m: umat2x3, index: int, x: Union[uvec2, umvec2], /) -> umat2x3: ... @overload def row(m: umat2x4, index: int, /) -> uvec2: ... @overload def row(m: umat2x4, index: int, x: Union[uvec2, umvec2], /) -> umat2x4: ... @overload def row(m: umat3x2, index: int, /) -> uvec3: ... @overload def row(m: umat3x2, index: int, x: Union[uvec3, umvec3], /) -> umat3x2: ... @overload def row(m: umat3x3, index: int, /) -> uvec3: ... @overload def row(m: umat3x3, index: int, x: Union[uvec3, umvec3], /) -> umat3x3: ... @overload def row(m: umat3x4, index: int, /) -> uvec3: ... @overload def row(m: umat3x4, index: int, x: Union[uvec3, umvec3], /) -> umat3x4: ... @overload def row(m: umat4x2, index: int, /) -> uvec4: ... @overload def row(m: umat4x2, index: int, x: Union[uvec4, umvec4], /) -> umat4x2: ... @overload def row(m: umat4x3, index: int, /) -> uvec4: ... @overload def row(m: umat4x3, index: int, x: Union[uvec4, umvec4], /) -> umat4x3: ... @overload def row(m: umat4x4, index: int, /) -> uvec4: ... @overload def row(m: umat4x4, index: int, x: Union[uvec4, umvec4], /) -> umat4x4: ... @overload def affineInverse(m: glm_typing.FAnyMatrix3x3, /) -> mat3x3: ... @overload def affineInverse(m: dmat3x3, /) -> dmat3x3: ... @overload def affineInverse(m: glm_typing.FAnyMatrix4x4, /) -> mat4x4: ... @overload def affineInverse(m: dmat4x4, /) -> dmat4x4: ... @overload def inverseTranspose(m: glm_typing.FAnyMatrix2x2, /) -> mat2x2: ... @overload def inverseTranspose(m: dmat2x2, /) -> dmat2x2: ... @overload def inverseTranspose(m: glm_typing.FAnyMatrix3x3, /) -> mat3x3: ... @overload def inverseTranspose(m: dmat3x3, /) -> dmat3x3: ... @overload def inverseTranspose(m: glm_typing.FAnyMatrix4x4, /) -> mat4x4: ... @overload def inverseTranspose(m: dmat4x4, /) -> dmat4x4: ... @overload def perlin(p: glm_typing.FDAnyVectorAny, /) -> float: ... @overload def perlin(p: glm_typing.F32Vector1, rep: glm_typing.F32Vector1, /) -> float: ... @overload def perlin(p: glm_typing.F32Vector2, rep: glm_typing.F32Vector2, /) -> float: ... @overload def perlin(p: glm_typing.F32Vector3, rep: glm_typing.F32Vector3, /) -> float: ... @overload def perlin(p: glm_typing.F32Vector4, rep: glm_typing.F32Vector4, /) -> float: ... @overload def perlin(p: _NF32DFVT, rep: _NF32DFVT, /) -> float: ... def simplex(p: glm_typing.FDAnyVectorAny, /) -> float: ... def packF2x11_1x10(v: glm_typing.F32Vector3, /) -> int: ... def packF3x9_E1x5(v: glm_typing.F32Vector3, /) -> int: ... @overload def packHalf(v: glm_typing.F32Vector1, /) -> u16vec1: ... @overload def packHalf(v: glm_typing.F32Vector2, /) -> u16vec2: ... @overload def packHalf(v: glm_typing.F32Vector3, /) -> u16vec3: ... @overload def packHalf(v: glm_typing.F32Vector4, /) -> u16vec4: ... def packHalf1x16(v: float, /) -> int: ... def packHalf4x16(v: glm_typing.F32Vector4, /) -> int: ... def packI3x10_1x2(v: glm_typing.I32Vector4, /) -> int: ... def packInt2x16(v: glm_typing.I16Vector2, /) -> int: ... def packInt2x32(v: glm_typing.I32Vector2, /) -> int: ... def packInt2x8(v: glm_typing.I8Vector2, /) -> int: ... def packInt4x16(v: glm_typing.I16Vector4, /) -> int: ... def packInt4x8(v: glm_typing.I8Vector4, /) -> int: ... def packRGBM(v: glm_typing.F32Vector3, /) -> vec4: ... @overload def packSnorm(t: ctypes.c_int8, v: glm_typing.F32Vector1, /) -> i8vec1: ... @overload def packSnorm(t: ctypes.c_int8, v: _NF32DFV1T, /) -> i8vec1: ... @overload def packSnorm(t: ctypes.c_uint8, v: glm_typing.F32Vector1, /) -> u8vec1: ... @overload def packSnorm(t: ctypes.c_uint8, v: _NF32DFV1T, /) -> u8vec1: ... @overload def packSnorm(t: ctypes.c_int16, v: glm_typing.F32Vector1, /) -> i16vec1: ... @overload def packSnorm(t: ctypes.c_int16, v: _NF32DFV1T, /) -> i16vec1: ... @overload def packSnorm(t: ctypes.c_uint16, v: glm_typing.F32Vector1, /) -> u16vec1: ... @overload def packSnorm(t: ctypes.c_uint16, v: _NF32DFV1T, /) -> u16vec1: ... @overload def packSnorm(t: ctypes.c_int32, v: glm_typing.F32Vector1, /) -> i32vec1: ... @overload def packSnorm(t: ctypes.c_int32, v: _NF32DFV1T, /) -> i32vec1: ... @overload def packSnorm(t: ctypes.c_uint32, v: glm_typing.F32Vector1, /) -> u32vec1: ... @overload def packSnorm(t: ctypes.c_uint32, v: _NF32DFV1T, /) -> u32vec1: ... @overload def packSnorm(t: ctypes.c_int64, v: glm_typing.F32Vector1, /) -> i64vec1: ... @overload def packSnorm(t: ctypes.c_int64, v: _NF32DFV1T, /) -> i64vec1: ... @overload def packSnorm(t: ctypes.c_uint64, v: glm_typing.F32Vector1, /) -> u64vec1: ... @overload def packSnorm(t: ctypes.c_uint64, v: _NF32DFV1T, /) -> u64vec1: ... @overload def packSnorm(t: ctypes.c_int8, v: glm_typing.F32Vector2, /) -> i8vec2: ... @overload def packSnorm(t: ctypes.c_int8, v: _NF32DFV2T, /) -> i8vec2: ... @overload def packSnorm(t: ctypes.c_uint8, v: glm_typing.F32Vector2, /) -> u8vec2: ... @overload def packSnorm(t: ctypes.c_uint8, v: _NF32DFV2T, /) -> u8vec2: ... @overload def packSnorm(t: ctypes.c_int16, v: glm_typing.F32Vector2, /) -> i16vec2: ... @overload def packSnorm(t: ctypes.c_int16, v: _NF32DFV2T, /) -> i16vec2: ... @overload def packSnorm(t: ctypes.c_uint16, v: glm_typing.F32Vector2, /) -> u16vec2: ... @overload def packSnorm(t: ctypes.c_uint16, v: _NF32DFV2T, /) -> u16vec2: ... @overload def packSnorm(t: ctypes.c_int32, v: glm_typing.F32Vector2, /) -> i32vec2: ... @overload def packSnorm(t: ctypes.c_int32, v: _NF32DFV2T, /) -> i32vec2: ... @overload def packSnorm(t: ctypes.c_uint32, v: glm_typing.F32Vector2, /) -> u32vec2: ... @overload def packSnorm(t: ctypes.c_uint32, v: _NF32DFV2T, /) -> u32vec2: ... @overload def packSnorm(t: ctypes.c_int64, v: glm_typing.F32Vector2, /) -> i64vec2: ... @overload def packSnorm(t: ctypes.c_int64, v: _NF32DFV2T, /) -> i64vec2: ... @overload def packSnorm(t: ctypes.c_uint64, v: glm_typing.F32Vector2, /) -> u64vec2: ... @overload def packSnorm(t: ctypes.c_uint64, v: _NF32DFV2T, /) -> u64vec2: ... @overload def packSnorm(t: ctypes.c_int8, v: glm_typing.F32Vector3, /) -> i8vec3: ... @overload def packSnorm(t: ctypes.c_int8, v: _NF32DFV3T, /) -> i8vec3: ... @overload def packSnorm(t: ctypes.c_uint8, v: glm_typing.F32Vector3, /) -> u8vec3: ... @overload def packSnorm(t: ctypes.c_uint8, v: _NF32DFV3T, /) -> u8vec3: ... @overload def packSnorm(t: ctypes.c_int16, v: glm_typing.F32Vector3, /) -> i16vec3: ... @overload def packSnorm(t: ctypes.c_int16, v: _NF32DFV3T, /) -> i16vec3: ... @overload def packSnorm(t: ctypes.c_uint16, v: glm_typing.F32Vector3, /) -> u16vec3: ... @overload def packSnorm(t: ctypes.c_uint16, v: _NF32DFV3T, /) -> u16vec3: ... @overload def packSnorm(t: ctypes.c_int32, v: glm_typing.F32Vector3, /) -> i32vec3: ... @overload def packSnorm(t: ctypes.c_int32, v: _NF32DFV3T, /) -> i32vec3: ... @overload def packSnorm(t: ctypes.c_uint32, v: glm_typing.F32Vector3, /) -> u32vec3: ... @overload def packSnorm(t: ctypes.c_uint32, v: _NF32DFV3T, /) -> u32vec3: ... @overload def packSnorm(t: ctypes.c_int64, v: glm_typing.F32Vector3, /) -> i64vec3: ... @overload def packSnorm(t: ctypes.c_int64, v: _NF32DFV3T, /) -> i64vec3: ... @overload def packSnorm(t: ctypes.c_uint64, v: glm_typing.F32Vector3, /) -> u64vec3: ... @overload def packSnorm(t: ctypes.c_uint64, v: _NF32DFV3T, /) -> u64vec3: ... @overload def packSnorm(t: ctypes.c_int8, v: glm_typing.F32Vector4, /) -> i8vec4: ... @overload def packSnorm(t: ctypes.c_int8, v: _NF32DFV4T, /) -> i8vec4: ... @overload def packSnorm(t: ctypes.c_uint8, v: glm_typing.F32Vector4, /) -> u8vec4: ... @overload def packSnorm(t: ctypes.c_uint8, v: _NF32DFV4T, /) -> u8vec4: ... @overload def packSnorm(t: ctypes.c_int16, v: glm_typing.F32Vector4, /) -> i16vec4: ... @overload def packSnorm(t: ctypes.c_int16, v: _NF32DFV4T, /) -> i16vec4: ... @overload def packSnorm(t: ctypes.c_uint16, v: glm_typing.F32Vector4, /) -> u16vec4: ... @overload def packSnorm(t: ctypes.c_uint16, v: _NF32DFV4T, /) -> u16vec4: ... @overload def packSnorm(t: ctypes.c_int32, v: glm_typing.F32Vector4, /) -> i32vec4: ... @overload def packSnorm(t: ctypes.c_int32, v: _NF32DFV4T, /) -> i32vec4: ... @overload def packSnorm(t: ctypes.c_uint32, v: glm_typing.F32Vector4, /) -> u32vec4: ... @overload def packSnorm(t: ctypes.c_uint32, v: _NF32DFV4T, /) -> u32vec4: ... @overload def packSnorm(t: ctypes.c_int64, v: glm_typing.F32Vector4, /) -> i64vec4: ... @overload def packSnorm(t: ctypes.c_int64, v: _NF32DFV4T, /) -> i64vec4: ... @overload def packSnorm(t: ctypes.c_uint64, v: glm_typing.F32Vector4, /) -> u64vec4: ... @overload def packSnorm(t: ctypes.c_uint64, v: _NF32DFV4T, /) -> u64vec4: ... def packSnorm1x16(v: float, /) -> int: ... def packSnorm1x8(v: float, /) -> int: ... def packSnorm2x8(v: glm_typing.F32Vector2, /) -> int: ... def packSnorm3x10_1x2(v: glm_typing.F32Vector4, /) -> int: ... def packSnorm4x16(v: glm_typing.F32Vector4, /) -> int: ... def packU3x10_1x2(v: glm_typing.U32Vector4, /) -> int: ... def packUint2x16(v: glm_typing.U16Vector2, /) -> int: ... def packUint2x32(v: glm_typing.U32Vector2, /) -> int: ... def packUint2x8(v: glm_typing.U8Vector2, /) -> int: ... def packUint4x16(v: glm_typing.U16Vector4, /) -> int: ... def packUint4x8(v: glm_typing.U16Vector4, /) -> int: ... @overload def packUnorm(t: ctypes.c_uint8, v: glm_typing.F32Vector1, /) -> u8vec1: ... @overload def packUnorm(t: ctypes.c_uint8, v: _NF32DFV1T, /) -> u8vec1: ... @overload def packUnorm(t: ctypes.c_uint16, v: glm_typing.F32Vector1, /) -> u16vec1: ... @overload def packUnorm(t: ctypes.c_uint16, v: _NF32DFV1T, /) -> u16vec1: ... @overload def packUnorm(t: ctypes.c_uint32, v: glm_typing.F32Vector1, /) -> u32vec1: ... @overload def packUnorm(t: ctypes.c_uint32, v: _NF32DFV1T, /) -> u32vec1: ... @overload def packUnorm(t: ctypes.c_uint64, v: glm_typing.F32Vector1, /) -> u64vec1: ... @overload def packUnorm(t: ctypes.c_uint64, v: _NF32DFV1T, /) -> u64vec1: ... @overload def packUnorm(t: ctypes.c_uint8, v: glm_typing.F32Vector2, /) -> u8vec2: ... @overload def packUnorm(t: ctypes.c_uint8, v: _NF32DFV2T, /) -> u8vec2: ... @overload def packUnorm(t: ctypes.c_uint16, v: glm_typing.F32Vector2, /) -> u16vec2: ... @overload def packUnorm(t: ctypes.c_uint16, v: _NF32DFV2T, /) -> u16vec2: ... @overload def packUnorm(t: ctypes.c_uint32, v: glm_typing.F32Vector2, /) -> u32vec2: ... @overload def packUnorm(t: ctypes.c_uint32, v: _NF32DFV2T, /) -> u32vec2: ... @overload def packUnorm(t: ctypes.c_uint64, v: glm_typing.F32Vector2, /) -> u64vec2: ... @overload def packUnorm(t: ctypes.c_uint64, v: _NF32DFV2T, /) -> u64vec2: ... @overload def packUnorm(t: ctypes.c_uint8, v: glm_typing.F32Vector3, /) -> u8vec3: ... @overload def packUnorm(t: ctypes.c_uint8, v: _NF32DFV3T, /) -> u8vec3: ... @overload def packUnorm(t: ctypes.c_uint16, v: glm_typing.F32Vector3, /) -> u16vec3: ... @overload def packUnorm(t: ctypes.c_uint16, v: _NF32DFV3T, /) -> u16vec3: ... @overload def packUnorm(t: ctypes.c_uint32, v: glm_typing.F32Vector3, /) -> u32vec3: ... @overload def packUnorm(t: ctypes.c_uint32, v: _NF32DFV3T, /) -> u32vec3: ... @overload def packUnorm(t: ctypes.c_uint64, v: glm_typing.F32Vector3, /) -> u64vec3: ... @overload def packUnorm(t: ctypes.c_uint64, v: _NF32DFV3T, /) -> u64vec3: ... @overload def packUnorm(t: ctypes.c_uint8, v: glm_typing.F32Vector4, /) -> u8vec4: ... @overload def packUnorm(t: ctypes.c_uint8, v: _NF32DFV4T, /) -> u8vec4: ... @overload def packUnorm(t: ctypes.c_uint16, v: glm_typing.F32Vector4, /) -> u16vec4: ... @overload def packUnorm(t: ctypes.c_uint16, v: _NF32DFV4T, /) -> u16vec4: ... @overload def packUnorm(t: ctypes.c_uint32, v: glm_typing.F32Vector4, /) -> u32vec4: ... @overload def packUnorm(t: ctypes.c_uint32, v: _NF32DFV4T, /) -> u32vec4: ... @overload def packUnorm(t: ctypes.c_uint64, v: glm_typing.F32Vector4, /) -> u64vec4: ... @overload def packUnorm(t: ctypes.c_uint64, v: _NF32DFV4T, /) -> u64vec4: ... def packUnorm1x16(v: float, /) -> int: ... def packUnorm1x5_1x6_1x5(v: glm_typing.F32Vector3, /) -> int: ... def packUnorm2x4(v: glm_typing.F32Vector2, /) -> int: ... def packUnorm2x8(v: glm_typing.F32Vector2, /) -> int: ... def packUnorm3x10_1x2(v: glm_typing.F32Vector4, /) -> int: ... def packUnorm4x16(v: glm_typing.F32Vector4, /) -> int: ... def packUnorm4x4(v: glm_typing.F32Vector4, /) -> int: ... def unpackF2x11_1x10(p: int, /) -> vec3: ... def unpackF3x9_E1x5(p: int, /) -> vec3: ... @overload def unpackHalf(v: glm_typing.U16Vector1, /) -> vec1: ... @overload def unpackHalf(v: glm_typing.U16Vector2, /) -> vec2: ... @overload def unpackHalf(v: glm_typing.U16Vector3, /) -> vec3: ... @overload def unpackHalf(v: glm_typing.U16Vector4, /) -> vec4: ... def unpackHalf1x16(p: int, /) -> float: ... def unpackI3x10_1x2(p: int, /) -> ivec4: ... def unpackInt2x16(p: int, /) -> i16vec2: ... def unpackInt2x32(p: int, /) -> i32vec2: ... def unpackInt2x8(p: int, /) -> i8vec2: ... def unpackInt4x16(p: int, /) -> i16vec4: ... def unpackInt4x8(p: int, /) -> i8vec4: ... def unpackRGBM(p: glm_typing.F32Vector4, /) -> vec3: ... @overload def unpackSnorm(t: ctypes.c_float, v: glm_typing.I32Vector1, /) -> vec1: ... @overload def unpackSnorm(t: ctypes.c_float, v: _NI32IUV1T, /) -> vec1: ... @overload def unpackSnorm(t: ctypes.c_double, v: glm_typing.I32Vector1, /) -> dvec1: ... @overload def unpackSnorm(t: ctypes.c_double, v: _NI32IUV1T, /) -> dvec1: ... @overload def unpackSnorm(t: ctypes.c_float, v: glm_typing.I32Vector2, /) -> vec2: ... @overload def unpackSnorm(t: ctypes.c_float, v: _NI32IUV2T, /) -> vec2: ... @overload def unpackSnorm(t: ctypes.c_double, v: glm_typing.I32Vector2, /) -> dvec2: ... @overload def unpackSnorm(t: ctypes.c_double, v: _NI32IUV2T, /) -> dvec2: ... @overload def unpackSnorm(t: ctypes.c_float, v: glm_typing.I32Vector3, /) -> vec3: ... @overload def unpackSnorm(t: ctypes.c_float, v: _NI32IUV3T, /) -> vec3: ... @overload def unpackSnorm(t: ctypes.c_double, v: glm_typing.I32Vector3, /) -> dvec3: ... @overload def unpackSnorm(t: ctypes.c_double, v: _NI32IUV3T, /) -> dvec3: ... @overload def unpackSnorm(t: ctypes.c_float, v: glm_typing.I32Vector4, /) -> vec4: ... @overload def unpackSnorm(t: ctypes.c_float, v: _NI32IUV4T, /) -> vec4: ... @overload def unpackSnorm(t: ctypes.c_double, v: glm_typing.I32Vector4, /) -> dvec4: ... @overload def unpackSnorm(t: ctypes.c_double, v: _NI32IUV4T, /) -> dvec4: ... def unpackSnorm1x16(p: int, /) -> float: ... def unpackSnorm1x8(p: int, /) -> float: ... def unpackSnorm2x8(p: int, /) -> vec2: ... def unpackSnorm3x10_1x2(p: int, /) -> vec4: ... def unpackSnorm4x16(p: int, /) -> vec4: ... def unpackU3x10_1x2(p: int, /) -> uvec4: ... def unpackUint2x16(p: int, /) -> u16vec2: ... def unpackUint2x32(p: int, /) -> u32vec2: ... def unpackUint2x8(p: int, /) -> u8vec2: ... def unpackUint4x16(p: int, /) -> u16vec4: ... def unpackUint4x8(p: int, /) -> u8vec4: ... @overload def unpackUnorm(t: ctypes.c_float, v: glm_typing.I32Vector1, /) -> vec1: ... @overload def unpackUnorm(t: ctypes.c_float, v: _NI32IUV1T, /) -> vec1: ... @overload def unpackUnorm(t: ctypes.c_double, v: glm_typing.I32Vector1, /) -> dvec1: ... @overload def unpackUnorm(t: ctypes.c_double, v: _NI32IUV1T, /) -> dvec1: ... @overload def unpackUnorm(t: ctypes.c_float, v: glm_typing.I32Vector2, /) -> vec2: ... @overload def unpackUnorm(t: ctypes.c_float, v: _NI32IUV2T, /) -> vec2: ... @overload def unpackUnorm(t: ctypes.c_double, v: glm_typing.I32Vector2, /) -> dvec2: ... @overload def unpackUnorm(t: ctypes.c_double, v: _NI32IUV2T, /) -> dvec2: ... @overload def unpackUnorm(t: ctypes.c_float, v: glm_typing.I32Vector3, /) -> vec3: ... @overload def unpackUnorm(t: ctypes.c_float, v: _NI32IUV3T, /) -> vec3: ... @overload def unpackUnorm(t: ctypes.c_double, v: glm_typing.I32Vector3, /) -> dvec3: ... @overload def unpackUnorm(t: ctypes.c_double, v: _NI32IUV3T, /) -> dvec3: ... @overload def unpackUnorm(t: ctypes.c_float, v: glm_typing.I32Vector4, /) -> vec4: ... @overload def unpackUnorm(t: ctypes.c_float, v: _NI32IUV4T, /) -> vec4: ... @overload def unpackUnorm(t: ctypes.c_double, v: glm_typing.I32Vector4, /) -> dvec4: ... @overload def unpackUnorm(t: ctypes.c_double, v: _NI32IUV4T, /) -> dvec4: ... def unpackUnorm1x16(p: int, /) -> float: ... def unpackUnorm1x5_1x6_1x5(p: int, /) -> vec3: ... def unpackUnorm1x8(p: int, /) -> float: ... def unpackUnorm2x3_1x2(p: int, /) -> vec3: ... def unpackUnorm2x4(p: int, /) -> vec2: ... def unpackUnorm2x8(p: int, /) -> vec2: ... def unpackUnorm3x10_1x2(p: int, /) -> vec4: ... def unpackUnorm3x5_1x1(p: int, /) -> vec4: ... def unpackUnorm4x16(p: int, /) -> vec4: ... def unpackUnorm4x4(p: int, /) -> vec4: ... @overload def eulerAngles(x: glm_typing.F32Quaternion, /) -> vec3: ... @overload def eulerAngles(x: dquat, /) -> dvec3: ... @overload def mat3_cast(x: glm_typing.F32Quaternion, /) -> mat3: ... @overload def mat3_cast(x: dquat, /) -> dmat3: ... @overload def mat4_cast(x: glm_typing.F32Quaternion, /) -> mat4: ... @overload def mat4_cast(x: dquat, /) -> dmat4: ... def pitch(x: glm_typing.AnyAnyQuaternion, /) -> float: ... @overload def quatLookAtLH(direction: glm_typing.F32Vector3, up: glm_typing.F32Vector3, /) -> quat: ... @overload def quatLookAtLH(direction: dvec3, up: dvec3, /) -> dquat: ... @overload def quatLookAtRH(direction: glm_typing.F32Vector3, up: glm_typing.F32Vector3, /) -> quat: ... @overload def quatLookAtRH(direction: dvec3, up: dvec3, /) -> dquat: ... @overload def quatLookAt(direction: glm_typing.F32Vector3, up: glm_typing.F32Vector3, /) -> quat: ... @overload def quatLookAt(direction: dvec3, up: dvec3, /) -> dquat: ... @overload def quat_cast(x: Union[glm_typing.F32Matrix3x3, glm_typing.F32Matrix4x4], /) -> quat: ... @overload def quat_cast(x: Union[dmat3, dmat4], /) -> quat: ... def roll(x: glm_typing.AnyAnyQuaternion, /) -> float: ... def yaw(x: glm_typing.AnyAnyQuaternion, /) -> float: ... def ballRand(Radius: glm_typing.Number, /) -> vec3: ... def circularRand(Radius: glm_typing.Number, /) -> vec2: ... def diskRand(Radius: glm_typing.Number, /) -> vec2: ... @overload def gaussRand(Mean: glm_typing.Number, Deviation: glm_typing.Number, /) -> float: ... @overload def gaussRand(Mean: glm_typing.F32Vector1, Deviation: glm_typing.F32Vector1, /) -> vec1: ... @overload def gaussRand(Mean: glm_typing.F32Vector2, Deviation: glm_typing.F32Vector2, /) -> vec2: ... @overload def gaussRand(Mean: glm_typing.F32Vector3, Deviation: glm_typing.F32Vector3, /) -> vec3: ... @overload def gaussRand(Mean: glm_typing.F32Vector4, Deviation: glm_typing.F32Vector4, /) -> vec4: ... @overload def gaussRand(Mean: _NF32VT, Deviation: _NF32VT, /) -> _NF32VT: ... @overload def linearRand(Min: glm_typing.Number, Max: glm_typing.Number, /) -> float: ... @overload def linearRand(Min: glm_typing.F32Vector1, Max: glm_typing.F32Vector1, /) -> vec1: ... @overload def linearRand(Min: glm_typing.F32Vector2, Max: glm_typing.F32Vector2, /) -> vec2: ... @overload def linearRand(Min: glm_typing.F32Vector3, Max: glm_typing.F32Vector3, /) -> vec3: ... @overload def linearRand(Min: glm_typing.F32Vector4, Max: glm_typing.F32Vector4, /) -> vec4: ... @overload def linearRand(Min: _NF32VT, Max: _NF32VT, /) -> _NF32VT: ... def setSeed(seed: SupportsInt, /) -> None: ... def sphericalRand(Radius: glm_typing.Number, /) -> vec3: ... def acot(x: glm_typing.Number, /) -> float: ... def acoth(x: glm_typing.Number, /) -> float: ... def acsc(x: glm_typing.Number, /) -> float: ... def acsch(x: glm_typing.Number, /) -> float: ... def asec(x: glm_typing.Number, /) -> float: ... def asech(x: glm_typing.Number, /) -> float: ... def cot(x: glm_typing.Number, /) -> float: ... def coth(x: glm_typing.Number, /) -> float: ... def csc(x: glm_typing.Number, /) -> float: ... def csch(x: glm_typing.Number, /) -> float: ... def sec(x: glm_typing.Number, /) -> float: ... def sech(x: glm_typing.Number, /) -> float: ... @overload def ceilMultiple(v: glm_typing.Number, Multiple: glm_typing.Number, /) -> int: ... @overload def ceilMultiple(v: glm_typing.I32Vector1, Multiple: glm_typing.I32Vector1, /) -> ivec1: ... @overload def ceilMultiple(v: glm_typing.I32Vector2, Multiple: glm_typing.I32Vector2, /) -> ivec2: ... @overload def ceilMultiple(v: glm_typing.I32Vector3, Multiple: glm_typing.I32Vector3, /) -> ivec3: ... @overload def ceilMultiple(v: glm_typing.I32Vector4, Multiple: glm_typing.I32Vector4, /) -> ivec4: ... @overload def ceilMultiple(v: _NI32IVT, Multiple: _NI32IVT, /) -> _NI32IVT: ... @overload def ceilPowerOfTwo(v: glm_typing.Number, Multiple: glm_typing.Number, /) -> int: ... @overload def ceilPowerOfTwo(v: glm_typing.I32Vector1, Multiple: glm_typing.I32Vector1, /) -> ivec1: ... @overload def ceilPowerOfTwo(v: glm_typing.I32Vector2, Multiple: glm_typing.I32Vector2, /) -> ivec2: ... @overload def ceilPowerOfTwo(v: glm_typing.I32Vector3, Multiple: glm_typing.I32Vector3, /) -> ivec3: ... @overload def ceilPowerOfTwo(v: glm_typing.I32Vector4, Multiple: glm_typing.I32Vector4, /) -> ivec4: ... @overload def ceilPowerOfTwo(v: _NI32IVT, Multiple: _NI32IVT, /) -> _NI32IVT: ... @overload def floorMultiple(v: glm_typing.Number, Multiple: glm_typing.Number, /) -> int: ... @overload def floorMultiple(v: glm_typing.I32Vector1, Multiple: glm_typing.I32Vector1, /) -> ivec1: ... @overload def floorMultiple(v: glm_typing.I32Vector2, Multiple: glm_typing.I32Vector2, /) -> ivec2: ... @overload def floorMultiple(v: glm_typing.I32Vector3, Multiple: glm_typing.I32Vector3, /) -> ivec3: ... @overload def floorMultiple(v: glm_typing.I32Vector4, Multiple: glm_typing.I32Vector4, /) -> ivec4: ... @overload def floorMultiple(v: _NI32IVT, Multiple: _NI32IVT, /) -> _NI32IVT: ... @overload def floorPowerOfTwo(v: glm_typing.Number, Multiple: glm_typing.Number, /) -> int: ... @overload def floorPowerOfTwo(v: glm_typing.I32Vector1, Multiple: glm_typing.I32Vector1, /) -> ivec1: ... @overload def floorPowerOfTwo(v: glm_typing.I32Vector2, Multiple: glm_typing.I32Vector2, /) -> ivec2: ... @overload def floorPowerOfTwo(v: glm_typing.I32Vector3, Multiple: glm_typing.I32Vector3, /) -> ivec3: ... @overload def floorPowerOfTwo(v: glm_typing.I32Vector4, Multiple: glm_typing.I32Vector4, /) -> ivec4: ... @overload def floorPowerOfTwo(v: _NI32IVT, Multiple: _NI32IVT, /) -> _NI32IVT: ... @overload def roundMultiple(v: glm_typing.Number, Multiple: glm_typing.Number, /) -> int: ... @overload def roundMultiple(v: glm_typing.I32Vector1, Multiple: glm_typing.I32Vector1, /) -> ivec1: ... @overload def roundMultiple(v: glm_typing.I32Vector2, Multiple: glm_typing.I32Vector2, /) -> ivec2: ... @overload def roundMultiple(v: glm_typing.I32Vector3, Multiple: glm_typing.I32Vector3, /) -> ivec3: ... @overload def roundMultiple(v: glm_typing.I32Vector4, Multiple: glm_typing.I32Vector4, /) -> ivec4: ... @overload def roundMultiple(v: _NI32IVT, Multiple: _NI32IVT, /) -> _NI32IVT: ... @overload def roundPowerOfTwo(v: glm_typing.Number, Multiple: glm_typing.Number, /) -> int: ... @overload def roundPowerOfTwo(v: glm_typing.I32Vector1, Multiple: glm_typing.I32Vector1, /) -> ivec1: ... @overload def roundPowerOfTwo(v: glm_typing.I32Vector2, Multiple: glm_typing.I32Vector2, /) -> ivec2: ... @overload def roundPowerOfTwo(v: glm_typing.I32Vector3, Multiple: glm_typing.I32Vector3, /) -> ivec3: ... @overload def roundPowerOfTwo(v: glm_typing.I32Vector4, Multiple: glm_typing.I32Vector4, /) -> ivec4: ... @overload def roundPowerOfTwo(v: _NI32IVT, Multiple: _NI32IVT, /) -> _NI32IVT: ... def make_mat2(x: ctypes.pointer[Any], /) -> mat2x2: ... def make_mat3(x: ctypes.pointer[Any], /) -> mat3x3: ... def make_mat4(x: ctypes.pointer[Any], /) -> mat4x4: ... def make_mat2x2(x: ctypes.pointer[Any], /) -> mat2x2: ... def make_mat2x3(x: ctypes.pointer[Any], /) -> mat2x3: ... def make_mat2x4(x: ctypes.pointer[Any], /) -> mat2x4: ... def make_mat3x2(x: ctypes.pointer[Any], /) -> mat3x2: ... def make_mat3x3(x: ctypes.pointer[Any], /) -> mat3x3: ... def make_mat3x4(x: ctypes.pointer[Any], /) -> mat3x4: ... def make_mat4x2(x: ctypes.pointer[Any], /) -> mat4x2: ... def make_mat4x3(x: ctypes.pointer[Any], /) -> mat4x3: ... def make_mat4x4(x: ctypes.pointer[Any], /) -> mat4x4: ... def make_quat(x: ctypes.pointer[Any], /) -> quat: ... def make_vec2(x: ctypes.pointer[Any], /) -> vec2: ... def make_vec3(x: ctypes.pointer[Any], /) -> vec3: ... def make_vec4(x: ctypes.pointer[Any], /) -> vec4: ... @overload def sizeof(x: Type[Union[ctypes.c_bool, ctypes.c_short, ctypes.c_long, ctypes.c_longlong, ctypes.c_byte, ctypes.c_ushort, ctypes.c_ulong, ctypes.c_ulonglong, ctypes.c_ubyte, ctypes.c_double, ctypes.c_float, glm_typing.AnyAnyVecAny, glm_typing.AnyAnyMatAnyxAny, glm_typing.AnyAnyQuat]], /) -> int: ... @overload def sizeof(x: Union[ctypes.c_bool, ctypes.c_short, ctypes.c_long, ctypes.c_longlong, ctypes.c_byte, ctypes.c_ushort, ctypes.c_ulong, ctypes.c_ulonglong, ctypes.c_ubyte, ctypes.c_double, ctypes.c_float, array[Any], glm_typing.AnyAnyVecAny, glm_typing.AnyAnyMatAnyxAny, glm_typing.AnyAnyQuat], /) -> int: ... @overload def value_ptr(x: Union[glm_typing.F32VecAny, glm_typing.F32MatAnyxAny, glm_typing.F32Quat], /) -> ctypes.pointer[ctypes.c_float]: ... @overload def value_ptr(x: Union[glm_typing.D64VecAny, glm_typing.D64MatAnyxAny, glm_typing.D64Quat], /) -> ctypes.pointer[ctypes.c_double]: ... @overload def value_ptr(x: Union[glm_typing.I32VecAny, glm_typing.I32MatAnyxAny], /) -> ctypes.pointer[ctypes.c_int32]: ... @overload def value_ptr(x: Union[glm_typing.U32VecAny, glm_typing.U32MatAnyxAny], /) -> ctypes.pointer[ctypes.c_uint32]: ... @overload def value_ptr(x: glm_typing.I8VecAny, /) -> ctypes.pointer[ctypes.c_int8]: ... @overload def value_ptr(x: glm_typing.U8VecAny, /) -> ctypes.pointer[ctypes.c_uint8]: ... @overload def value_ptr(x: glm_typing.B8VecAny, /) -> ctypes.pointer[ctypes.c_bool]: ... @overload def value_ptr(x: glm_typing.I16VecAny, /) -> ctypes.pointer[ctypes.c_int16]: ... @overload def value_ptr(x: glm_typing.U16VecAny, /) -> ctypes.pointer[ctypes.c_uint16]: ... @overload def value_ptr(x: glm_typing.I64VecAny, /) -> ctypes.pointer[ctypes.c_int64]: ... @overload def value_ptr(x: glm_typing.U64VecAny, /) -> ctypes.pointer[ctypes.c_uint64]: ... @overload def float_distance(x: glm_typing.Number, y: glm_typing.Number) -> float: ... @overload def float_distance(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> ivec1: ... @overload def float_distance(x: dvec1, y: dvec1, /) -> i64vec1: ... @overload def float_distance(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> ivec2: ... @overload def float_distance(x: dvec2, y: dvec2, /) -> i64vec2: ... @overload def float_distance(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> ivec3: ... @overload def float_distance(x: dvec3, y: dvec3, /) -> i64vec3: ... @overload def float_distance(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> ivec4: ... @overload def float_distance(x: dvec4, y: dvec4, /) -> i64vec4: ... @overload def next_float(x: glm_typing.Number, /) -> float: ... @overload def next_float(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def next_float(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def next_float(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def next_float(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def next_float(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def next_float(x: glm_typing.Number, ULPs: glm_typing.Number, /) -> float: ... @overload def next_float(x: glm_typing.F32Vector1, ULPs: glm_typing.Number, /) -> vec1: ... @overload def next_float(x: glm_typing.F32Vector2, ULPs: glm_typing.Number, /) -> vec2: ... @overload def next_float(x: glm_typing.F32Vector3, ULPs: glm_typing.Number, /) -> vec3: ... @overload def next_float(x: glm_typing.F32Vector4, ULPs: glm_typing.Number, /) -> vec4: ... @overload def next_float(x: _NF32DFVT, ULPs: glm_typing.Number, /) -> _NF32DFVT: ... @overload def next_float(x: glm_typing.F32Vector1, ULPs: glm_typing.I32Vector1, /) -> vec1: ... @overload def next_float(x: _NF32DFV1T, ULPs: glm_typing.I32Vector1, /) -> _NF32DFV1T: ... @overload def next_float(x: glm_typing.F32Vector2, ULPs: glm_typing.I32Vector2, /) -> vec2: ... @overload def next_float(x: _NF32DFV2T, ULPs: glm_typing.I32Vector2, /) -> _NF32DFV2T: ... @overload def next_float(x: glm_typing.F32Vector3, ULPs: glm_typing.I32Vector3, /) -> vec3: ... @overload def next_float(x: _NF32DFV3T, ULPs: glm_typing.I32Vector3, /) -> _NF32DFV3T: ... @overload def next_float(x: glm_typing.F32Vector4, ULPs: glm_typing.I32Vector4, /) -> vec4: ... @overload def next_float(x: _NF32DFV4T, ULPs: glm_typing.I32Vector4, /) -> _NF32DFV4T: ... @overload def prev_float(x: glm_typing.Number, /) -> float: ... @overload def prev_float(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def prev_float(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def prev_float(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def prev_float(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def prev_float(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def prev_float(x: glm_typing.Number, ULPs: glm_typing.Number, /) -> float: ... @overload def prev_float(x: glm_typing.F32Vector1, ULPs: glm_typing.Number, /) -> vec1: ... @overload def prev_float(x: glm_typing.F32Vector2, ULPs: glm_typing.Number, /) -> vec2: ... @overload def prev_float(x: glm_typing.F32Vector3, ULPs: glm_typing.Number, /) -> vec3: ... @overload def prev_float(x: glm_typing.F32Vector4, ULPs: glm_typing.Number, /) -> vec4: ... @overload def prev_float(x: _NF32DFVT, ULPs: glm_typing.Number, /) -> _NF32DFVT: ... @overload def prev_float(x: glm_typing.F32Vector1, ULPs: glm_typing.I32Vector1, /) -> vec1: ... @overload def prev_float(x: _NF32DFV1T, ULPs: glm_typing.I32Vector1, /) -> _NF32DFV1T: ... @overload def prev_float(x: glm_typing.F32Vector2, ULPs: glm_typing.I32Vector2, /) -> vec2: ... @overload def prev_float(x: _NF32DFV2T, ULPs: glm_typing.I32Vector2, /) -> _NF32DFV2T: ... @overload def prev_float(x: glm_typing.F32Vector3, ULPs: glm_typing.I32Vector3, /) -> vec3: ... @overload def prev_float(x: _NF32DFV3T, ULPs: glm_typing.I32Vector3, /) -> _NF32DFV3T: ... @overload def prev_float(x: glm_typing.F32Vector4, ULPs: glm_typing.I32Vector4, /) -> vec4: ... @overload def prev_float(x: _NF32DFV4T, ULPs: glm_typing.I32Vector4, /) -> _NF32DFV4T: ... def frustumLH_NO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def frustumLH_ZO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def frustumRH_NO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def frustumRH_ZO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def frustum(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def frustumNO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def frustumRH(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def frustumLH(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def frustumZO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def infinitePerspectiveLH(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, /) -> mat4x4: ... def infinitePerspectiveRH(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, /) -> mat4x4: ... def infinitePerspective(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, /) -> mat4x4: ... def orthoLH_NO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, zNear: glm_typing.Number, zFar: glm_typing.Number, /) -> mat4x4: ... def orthoLH_ZO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, zNear: glm_typing.Number, zFar: glm_typing.Number, /) -> mat4x4: ... def orthoRH_NO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, zNear: glm_typing.Number, zFar: glm_typing.Number, /) -> mat4x4: ... def orthoRH_ZO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, zNear: glm_typing.Number, zFar: glm_typing.Number, /) -> mat4x4: ... def ortho(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, zNear: glm_typing.Number, zFar: glm_typing.Number, /) -> mat4x4: ... def orthoLH(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, zNear: glm_typing.Number, zFar: glm_typing.Number, /) -> mat4x4: ... def orthoNO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, zNear: glm_typing.Number, zFar: glm_typing.Number, /) -> mat4x4: ... def orthoRH(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, zNear: glm_typing.Number, zFar: glm_typing.Number, /) -> mat4x4: ... def orthoZO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, zNear: glm_typing.Number, zFar: glm_typing.Number, /) -> mat4x4: ... def perspectiveLH_NO(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveLH_ZO(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveRH_NO(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveRH_ZO(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspective(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveLH(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveNO(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveRH(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveZO(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveFovLH_NO(fov: glm_typing.Number, width: glm_typing.Number, height: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveFovLH_ZO(fov: glm_typing.Number, width: glm_typing.Number, height: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveFovRH_NO(fov: glm_typing.Number, width: glm_typing.Number, height: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveFovRH_ZO(fov: glm_typing.Number, width: glm_typing.Number, height: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveFov(fov: glm_typing.Number, width: glm_typing.Number, height: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveFovLH(fov: glm_typing.Number, width: glm_typing.Number, height: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveFovNO(fov: glm_typing.Number, width: glm_typing.Number, height: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveFovRH(fov: glm_typing.Number, width: glm_typing.Number, height: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveFovZO(fov: glm_typing.Number, width: glm_typing.Number, height: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... @overload def tweakedInfinitePerspective(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, /) -> mat4x4: ... @overload def tweakedInfinitePerspective(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, epsilon: float, /) -> mat4x4: ... @overload def pickMatrix(center: glm_typing.F32Vector2, delta: glm_typing.F32Vector2, viewport: glm_typing.F32Vector4, /) -> mat4x4: ... @overload def pickMatrix(center: dvec2, delta: dvec2, viewport: dvec4, /) -> dmat4x4: ... @overload def projectNO(obj: glm_typing.F32Vector3, model: glm_typing.F32Matrix4x4, proj: glm_typing.F32Matrix4x4, viewport: glm_typing.F32Vector4, /) -> vec3: ... @overload def projectNO(obj: dvec3, model: dmat4x4, proj: dmat4x4, viewport: dvec4, /) -> dvec3: ... @overload def project(obj: glm_typing.F32Vector3, model: glm_typing.F32Matrix4x4, proj: glm_typing.F32Matrix4x4, viewport: glm_typing.F32Vector4, /) -> vec3: ... @overload def project(obj: dvec3, model: dmat4x4, proj: dmat4x4, viewport: dvec4, /) -> dvec3: ... @overload def projectZO(obj: glm_typing.F32Vector3, model: glm_typing.F32Matrix4x4, proj: glm_typing.F32Matrix4x4, viewport: glm_typing.F32Vector4, /) -> vec3: ... @overload def projectZO(obj: dvec3, model: dmat4x4, proj: dmat4x4, viewport: dvec4, /) -> dvec3: ... @overload def unProjectNO(obj: glm_typing.F32Vector3, model: glm_typing.F32Matrix4x4, proj: glm_typing.F32Matrix4x4, viewport: glm_typing.F32Vector4, /) -> vec3: ... @overload def unProjectNO(obj: dvec3, model: dmat4x4, proj: dmat4x4, viewport: dvec4, /) -> dvec3: ... @overload def unProject(obj: glm_typing.F32Vector3, model: glm_typing.F32Matrix4x4, proj: glm_typing.F32Matrix4x4, viewport: glm_typing.F32Vector4, /) -> vec3: ... @overload def unProject(obj: dvec3, model: dmat4x4, proj: dmat4x4, viewport: dvec4, /) -> dvec3: ... @overload def unProjectZO(obj: glm_typing.F32Vector3, model: glm_typing.F32Matrix4x4, proj: glm_typing.F32Matrix4x4, viewport: glm_typing.F32Vector4, /) -> vec3: ... @overload def unProjectZO(obj: dvec3, model: dmat4x4, proj: dmat4x4, viewport: dvec4, /) -> dvec3: ... def identity(matrix_type: Type[_MT], /) -> _MT: ... @overload def lookAtLH(eye: glm_typing.F32Vector3, center: glm_typing.F32Vector3, up: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def lookAtLH(eye: dvec3, center: dvec3, up: dvec3, /) -> dmat4x4: ... @overload def lookAtRH(eye: glm_typing.F32Vector3, center: glm_typing.F32Vector3, up: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def lookAtRH(eye: dvec3, center: dvec3, up: dvec3, /) -> dmat4x4: ... @overload def lookAt(eye: glm_typing.F32Vector3, center: glm_typing.F32Vector3, up: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def lookAt(eye: dvec3, center: dvec3, up: dvec3, /) -> dmat4x4: ... @overload def rotate(angle: glm_typing.Number, axis: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def rotate(angle: glm_typing.Number, axis: dvec3, /) -> dmat4x4: ... @overload def rotate(angle: glm_typing.Number, /) -> mat3x3: ... @overload def rotate(m: glm_typing.F32Matrix4x4, angle: glm_typing.Number, axis: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def rotate(m: dmat4x4, angle: glm_typing.Number, axis: dvec3, /) -> dmat4x4: ... @overload def rotate(m: glm_typing.F32Matrix3x3, angle: glm_typing.Number, /) -> mat3x3: ... @overload def rotate(m: dmat3x3, angle: glm_typing.Number, /) -> dmat3x3: ... @overload def rotate(v: glm_typing.F32Vector2, angle: glm_typing.Number, /) -> vec2: ... @overload def rotate(v: dvec2, angle: glm_typing.Number, /) -> dvec2: ... @overload def rotate(v: glm_typing.F32Vector3, angle: glm_typing.Number, normal: glm_typing.F32Vector3, /) -> vec3: ... @overload def rotate(v: dvec3, angle: glm_typing.Number, normal: dvec3, /) -> dvec3: ... @overload def rotate(v: glm_typing.F32Vector4, angle: glm_typing.Number, normal: glm_typing.F32Vector3, /) -> vec3: ... @overload def rotate(v: dvec4, angle: glm_typing.Number, normal: dvec3, /) -> dvec4: ... @overload def rotate(v: quat, angle: glm_typing.Number, normal: glm_typing.F32Vector3, /) -> quat: ... @overload def rotate(v: dquat, angle: glm_typing.Number, normal: dvec3, /) -> dquat: ... @overload def rotate_slow(m: glm_typing.F32Matrix4x4, angle: glm_typing.Number, axis: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def rotate_slow(m: dmat4x4, angle: glm_typing.Number, axis: dvec3, /) -> dmat4x4: ... @overload def scale(v: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def scale(v: dvec3, /) -> dmat4x4: ... @overload def scale(v: glm_typing.F32Vector2, /) -> mat3x3: ... @overload def scale(v: dvec2, /) -> mat3x3: ... @overload def scale(m: glm_typing.F32Matrix4x4, v: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def scale(m: dmat4x4, v: dvec3, /) -> dmat4x4: ... @overload def scale(m: glm_typing.F32Matrix3x3, v: glm_typing.F32Vector2, /) -> mat3x3: ... @overload def scale(m: dmat3x3, v: dvec2, /) -> dmat3x3: ... @overload def scale_slow(m: glm_typing.F32Matrix4x4, v: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def scale_slow(m: dmat4x4, v: dvec3, /) -> dmat4x4: ... @overload def translate(v: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def translate(v: dvec3, /) -> dmat4x4: ... @overload def translate(v: glm_typing.F32Vector2, /) -> mat3x3: ... @overload def translate(v: dvec2, /) -> dmat3x3: ... @overload def translate(m: glm_typing.F32Matrix4x4, v: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def translate(m: dmat4x4, v: dvec3, /) -> dmat4x4: ... @overload def translate(m: glm_typing.F32Matrix3x3, v: glm_typing.F32Vector2, /) -> mat3x3: ... @overload def translate(m: dmat3x3, v: dvec2, /) -> dmat3x3: ... @overload def conjugate(q: glm_typing.F32Quaternion, /) -> quat: ... @overload def conjugate(q: _NF32QT, /) -> _NF32QT: ... @overload def lerp(x: glm_typing.F32Quaternion, y: glm_typing.F32Quaternion, a: glm_typing.Number, /) -> quat: ... @overload def lerp(x: _NF32QT, y: _NF32QT, a: glm_typing.Number, /) -> _NF32QT: ... @overload def lerp(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, a: glm_typing.Number, /) -> vec3: ... @overload def lerp(x: _NF32DFV3T, y: _NF32DFV3T, a: glm_typing.Number, /) -> _NF32DFV3T: ... @overload def slerp(x: glm_typing.F32Quaternion, y: glm_typing.F32Quaternion, a: glm_typing.Number, /) -> quat: ... @overload def slerp(x: _NF32QT, y: _NF32QT, a: glm_typing.Number, /) -> _NF32QT: ... @overload def slerp(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, a: glm_typing.Number, /) -> vec3: ... @overload def slerp(x: _NF32DFV3T, y: _NF32DFV3T, a: glm_typing.Number, /) -> _NF32DFV3T: ... def angle(x: _QT, /) -> float: ... @overload def angleAxis(angle: glm_typing.Number, axis: glm_typing.F32Vector3, /) -> quat: ... @overload def angleAxis(angle: glm_typing.Number, axis: dvec3, /) -> dquat: ... @overload def axis(x: glm_typing.F32Quat, /) -> vec3: ... @overload def axis(x: dquat, /) -> dvec3: ... @overload def decompose(modelMatrix: glm_typing.F32Matrix3x3, scale: glm_typing.F32Vector3, orientation: glm_typing.F32Quaternion, translation: glm_typing.F32Vector3, skew: glm_typing.F32Vector3, perspective: glm_typing.F32Vector4, /) -> bool: ... @overload def decompose(modelMatrix: dmat4x4, scale: dvec3, orientation: dquat, translation: dvec3, skew: dvec3, perspective: dvec4, /) -> bool: ... @overload def shearX(m: glm_typing.F32Matrix3x3, y: glm_typing.Number, /) -> mat3x3: ... @overload def shearX(m: _NF32M3X3T, y: glm_typing.Number, /) -> _NF32M3X3T: ... @overload def shearY(m: glm_typing.F32Matrix3x3, y: glm_typing.Number, /) -> mat3x3: ... @overload def shearY(m: _NF32M3X3T, y: glm_typing.Number, /) -> _NF32M3X3T: ... @overload def distance2(p0: glm_typing.F32Vector1, p1: glm_typing.F32Vector1, /) -> float: ... @overload def distance2(p0: glm_typing.F32Vector2, p1: glm_typing.F32Vector2, /) -> float: ... @overload def distance2(p0: glm_typing.F32Vector3, p1: glm_typing.F32Vector3, /) -> float: ... @overload def distance2(p0: glm_typing.F32Vector4, p1: glm_typing.F32Vector4, /) -> float: ... @overload def distance2(p0: _NF32DFVT, p1: _NF32DFVT, /) -> float: ... @overload def l1Norm(v: glm_typing.FDAnyVector3, /) -> float: ... @overload def l1Norm(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> float: ... @overload def l1Norm(x: _NF32DFV3T, y: _NF32DFV3T, /) -> float: ... @overload def l2Norm(v: glm_typing.FDAnyVector3, /) -> float: ... @overload def l2Norm(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> float: ... @overload def l2Norm(x: _NF32DFV3T, y: _NF32DFV3T, /) -> float: ... @overload def lMaxNorm(v: glm_typing.FDAnyVector3, /) -> float: ... @overload def lMaxNorm(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> float: ... @overload def lMaxNorm(x: _NF32DFV3T, y: _NF32DFV3T, /) -> float: ... @overload def length2(p0: glm_typing.F32Vector1, p1: glm_typing.F32Vector1, /) -> float: ... @overload def length2(p0: glm_typing.F32Vector2, p1: glm_typing.F32Vector2, /) -> float: ... @overload def length2(p0: glm_typing.F32Vector3, p1: glm_typing.F32Vector3, /) -> float: ... @overload def length2(p0: glm_typing.F32Vector4, p1: glm_typing.F32Vector4, /) -> float: ... @overload def length2(p0: _NF32DFVT, p1: _NF32DFVT, /) -> float: ... @overload def lxNorm(v: glm_typing.FDAnyVector3, /) -> float: ... @overload def lxNorm(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> float: ... @overload def lxNorm(x: _NF32DFV3T, y: _NF32DFV3T, /) -> float: ... @overload def euclidean(polar: glm_typing.F32Vector2, /) -> vec3: ... @overload def euclidean(polar: dvec2, /) -> dvec3: ... @overload def polar(euclidean: glm_typing.F32Vector3, /) -> vec3: ... @overload def polar(euclidean: _NF32DFV3T, /) -> _NF32DFV3T: ... @overload def orientation(Normal: glm_typing.F32Vector3, Up: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def orientation(Normal: dvec3, Up: dvec3, /) -> dmat4x4: ... @overload def rotateX(v: glm_typing.F32Vector3, angle: glm_typing.Number) -> vec3: ... @overload def rotateX(v: _NF32DFV3T, angle: glm_typing.Number) -> _NF32DFV3T: ... @overload def rotateX(v: glm_typing.F32Vector4, angle: glm_typing.Number) -> vec4: ... @overload def rotateX(v: _NF32DFV4T, angle: glm_typing.Number) -> _NF32DFV4T: ... @overload def rotateY(v: glm_typing.F32Vector3, angle: glm_typing.Number) -> vec3: ... @overload def rotateY(v: _NF32DFV3T, angle: glm_typing.Number) -> _NF32DFV3T: ... @overload def rotateY(v: glm_typing.F32Vector4, angle: glm_typing.Number) -> vec4: ... @overload def rotateY(v: _NF32DFV4T, angle: glm_typing.Number) -> _NF32DFV4T: ... @overload def rotateZ(v: glm_typing.F32Vector3, angle: glm_typing.Number) -> vec3: ... @overload def rotateZ(v: _NF32DFV3T, angle: glm_typing.Number) -> _NF32DFV3T: ... @overload def rotateZ(v: glm_typing.F32Vector4, angle: glm_typing.Number) -> vec4: ... @overload def rotateZ(v: _NF32DFV4T, angle: glm_typing.Number) -> _NF32DFV4T: ... __all__ = ['abs', 'acos', 'acosh', 'acot', 'acoth', 'acsc', 'acsch', 'add', 'affineInverse', 'all', 'and_', 'angle', 'angleAxis', 'any', 'array', 'asec', 'asech', 'asin', 'asinh', 'atan', 'atanh', 'axis', 'ballRand', 'bitCount', 'bitfieldExtract', 'bitfieldInsert', 'bitfieldReverse', 'bool_', 'bvec1', 'bvec2', 'bvec3', 'bvec4', 'c_int16', 'c_int32', 'c_int64', 'c_int8', 'c_uint16', 'c_uint32', 'c_uint64', 'c_uint8', 'ceil', 'ceilMultiple', 'ceilPowerOfTwo', 'circularRand', 'clamp', 'cmp', 'column', 'conjugate', 'convertLinearToSRGB', 'convertSRGBToLinear', 'cos', 'cosh', 'cot', 'coth', 'cross', 'csc', 'csch', 'decompose', 'degrees', 'determinant', 'diskRand', 'distance', 'distance2', 'div', 'dmat2', 'dmat2x2', 'dmat2x3', 'dmat2x4', 'dmat3', 'dmat3x2', 'dmat3x3', 'dmat3x4', 'dmat4', 'dmat4x2', 'dmat4x3', 'dmat4x4', 'dmvec2', 'dmvec3', 'dmvec4', 'dot', 'double', 'dquat', 'dvec1', 'dvec2', 'dvec3', 'dvec4', 'e', 'epsilon', 'epsilonEqual', 'epsilonNotEqual', 'equal', 'euclidean', 'euler', 'eulerAngles', 'exp', 'exp2', 'f32mat2', 'f32mat2x2', 'f32mat2x3', 'f32mat2x4', 'f32mat3', 'f32mat3x2', 'f32mat3x3', 'f32mat3x4', 'f32mat4', 'f32mat4x2', 'f32mat4x3', 'f32mat4x4', 'f32quat', 'f32vec1', 'f32vec2', 'f32vec3', 'f32vec4', 'f64mat2', 'f64mat2x2', 'f64mat2x3', 'f64mat2x4', 'f64mat3', 'f64mat3x2', 'f64mat3x3', 'f64mat3x4', 'f64mat4', 'f64mat4x2', 'f64mat4x3', 'f64mat4x4', 'f64quat', 'f64vec1', 'f64vec2', 'f64vec3', 'f64vec4', 'faceforward', 'findLSB', 'findMSB', 'float32', 'float64', 'floatBitsToInt', 'floatBitsToUint', 'float_', 'float_distance', 'floor', 'floorMultiple', 'floorPowerOfTwo', 'floordiv', 'fma', 'fmat2', 'fmat2x2', 'fmat2x3', 'fmat2x4', 'fmat3', 'fmat3x2', 'fmat3x3', 'fmat3x4', 'fmat4', 'fmat4x2', 'fmat4x3', 'fmat4x4', 'fmax', 'fmin', 'four_over_pi', 'fquat', 'fract', 'frexp', 'frustum', 'frustumLH', 'frustumLH_NO', 'frustumLH_ZO', 'frustumNO', 'frustumRH', 'frustumRH_NO', 'frustumRH_ZO', 'frustumZO', 'fvec1', 'fvec2', 'fvec3', 'fvec4', 'gaussRand', 'golden_ratio', 'greaterThan', 'greaterThanEqual', 'half_pi', 'i16vec1', 'i16vec2', 'i16vec3', 'i16vec4', 'i32mat2', 'i32mat2x2', 'i32mat2x3', 'i32mat2x4', 'i32mat3', 'i32mat3x2', 'i32mat3x3', 'i32mat3x4', 'i32mat4', 'i32mat4x2', 'i32mat4x3', 'i32mat4x4', 'i32vec1', 'i32vec2', 'i32vec3', 'i32vec4', 'i64vec1', 'i64vec2', 'i64vec3', 'i64vec4', 'i8vec1', 'i8vec2', 'i8vec3', 'i8vec4', 'identity', 'if_else', 'imat2', 'imat2x2', 'imat2x3', 'imat2x4', 'imat3', 'imat3x2', 'imat3x3', 'imat3x4', 'imat4', 'imat4x2', 'imat4x3', 'imat4x4', 'imulExtended', 'imvec2', 'imvec3', 'imvec4', 'infinitePerspective', 'infinitePerspectiveLH', 'infinitePerspectiveRH', 'int16', 'int32', 'int64', 'int8', 'intBitsToFloat', 'inv', 'inverse', 'inverseTranspose', 'inversesqrt', 'iround', 'isinf', 'isnan', 'ivec1', 'ivec2', 'ivec3', 'ivec4', 'l1Norm', 'l2Norm', 'lMaxNorm', 'ldexp', 'length2', 'lerp', 'lessThan', 'lessThanEqual', 'linearRand', 'ln_ln_two', 'ln_ten', 'ln_two', 'log', 'log2', 'lookAt', 'lookAtLH', 'lookAtRH', 'lshift', 'lxNorm', 'make_mat2', 'make_mat2x2', 'make_mat2x3', 'make_mat2x4', 'make_mat3', 'make_mat3x2', 'make_mat3x3', 'make_mat3x4', 'make_mat4', 'make_mat4x2', 'make_mat4x3', 'make_mat4x4', 'make_quat', 'make_vec2', 'make_vec3', 'make_vec4', 'mat2', 'mat2x2', 'mat2x3', 'mat2x4', 'mat3', 'mat3_cast', 'mat3x2', 'mat3x3', 'mat3x4', 'mat4', 'mat4_cast', 'mat4x2', 'mat4x3', 'mat4x4', 'matrixCompMult', 'max', 'min', 'mix', 'modf', 'mul', 'mvec2', 'mvec3', 'mvec4', 'neg', 'next_float', 'normalize', 'notEqual', 'not_', 'one', 'one_over_pi', 'one_over_root_two', 'or_', 'orientation', 'ortho', 'orthoLH', 'orthoLH_NO', 'orthoLH_ZO', 'orthoNO', 'orthoRH', 'orthoRH_NO', 'orthoRH_ZO', 'orthoZO', 'outerProduct', 'packDouble2x32', 'packF2x11_1x10', 'packF3x9_E1x5', 'packHalf', 'packHalf1x16', 'packHalf2x16', 'packHalf4x16', 'packI3x10_1x2', 'packInt2x16', 'packInt2x32', 'packInt2x8', 'packInt4x16', 'packInt4x8', 'packRGBM', 'packSnorm', 'packSnorm1x16', 'packSnorm1x8', 'packSnorm2x16', 'packSnorm2x8', 'packSnorm3x10_1x2', 'packSnorm4x16', 'packSnorm4x8', 'packU3x10_1x2', 'packUint2x16', 'packUint2x32', 'packUint2x8', 'packUint4x16', 'packUint4x8', 'packUnorm', 'packUnorm1x16', 'packUnorm1x5_1x6_1x5', 'packUnorm2x16', 'packUnorm2x4', 'packUnorm2x8', 'packUnorm3x10_1x2', 'packUnorm4x16', 'packUnorm4x4', 'packUnorm4x8', 'perlin', 'perspective', 'perspectiveFov', 'perspectiveFovLH', 'perspectiveFovLH_NO', 'perspectiveFovLH_ZO', 'perspectiveFovNO', 'perspectiveFovRH', 'perspectiveFovRH_NO', 'perspectiveFovRH_ZO', 'perspectiveFovZO', 'perspectiveLH', 'perspectiveLH_NO', 'perspectiveLH_ZO', 'perspectiveNO', 'perspectiveRH', 'perspectiveRH_NO', 'perspectiveRH_ZO', 'perspectiveZO', 'pi', 'pickMatrix', 'pitch', 'polar', 'pos', 'pow', 'prev_float', 'project', 'projectNO', 'projectZO', 'quat', 'quatLookAt', 'quatLookAtLH', 'quatLookAtRH', 'quater_pi', 'radians', 'reflect', 'refract', 'roll', 'root_five', 'root_half_pi', 'root_ln_four', 'root_pi', 'root_three', 'root_two', 'root_two_pi', 'round', 'roundEven', 'roundMultiple', 'roundPowerOfTwo', 'row', 'rshift', 'sec', 'sech', 'setSeed', 'shearX', 'shearY', 'sign', 'simplex', 'sin', 'sinh', 'sizeof', 'slerp', 'smoothstep', 'sphericalRand', 'sqrt', 'step', 'sub', 'tan', 'tanh', 'third', 'three_over_two_pi', 'transpose', 'trunc', 'tweakedInfinitePerspective', 'two_over_pi', 'two_over_root_pi', 'two_pi', 'two_thirds', 'u16vec1', 'u16vec2', 'u16vec3', 'u16vec4', 'u32mat2', 'u32mat2x2', 'u32mat2x3', 'u32mat2x4', 'u32mat3', 'u32mat3x2', 'u32mat3x3', 'u32mat3x4', 'u32mat4', 'u32mat4x2', 'u32mat4x3', 'u32mat4x4', 'u32vec1', 'u32vec2', 'u32vec3', 'u32vec4', 'u64vec1', 'u64vec2', 'u64vec3', 'u64vec4', 'u8vec1', 'u8vec2', 'u8vec3', 'u8vec4', 'uaddCarry', 'uint16', 'uint32', 'uint64', 'uint8', 'uintBitsToFloat', 'umat2', 'umat2x2', 'umat2x3', 'umat2x4', 'umat3', 'umat3x2', 'umat3x3', 'umat3x4', 'umat4', 'umat4x2', 'umat4x3', 'umat4x4', 'umulExtended', 'umvec2', 'umvec3', 'umvec4', 'unProject', 'unProjectNO', 'unProjectZO', 'unpackDouble2x32', 'unpackF2x11_1x10', 'unpackF3x9_E1x5', 'unpackHalf', 'unpackHalf1x16', 'unpackHalf2x16', 'unpackI3x10_1x2', 'unpackInt2x16', 'unpackInt2x32', 'unpackInt2x8', 'unpackInt4x16', 'unpackInt4x8', 'unpackRGBM', 'unpackSnorm', 'unpackSnorm1x16', 'unpackSnorm1x8', 'unpackSnorm2x16', 'unpackSnorm2x8', 'unpackSnorm3x10_1x2', 'unpackSnorm4x16', 'unpackSnorm4x8', 'unpackU3x10_1x2', 'unpackUint2x16', 'unpackUint2x32', 'unpackUint2x8', 'unpackUint4x16', 'unpackUint4x8', 'unpackUnorm', 'unpackUnorm1x16', 'unpackUnorm1x5_1x6_1x5', 'unpackUnorm1x8', 'unpackUnorm2x16', 'unpackUnorm2x3_1x2', 'unpackUnorm2x4', 'unpackUnorm2x8', 'unpackUnorm3x10_1x2', 'unpackUnorm3x5_1x1', 'unpackUnorm4x16', 'unpackUnorm4x4', 'unpackUnorm4x8', 'uround', 'usubBorrow', 'uvec1', 'uvec2', 'uvec3', 'uvec4', 'value_ptr', 'vec1', 'vec2', 'vec3', 'vec4', 'xor', 'yaw', 'zero'] Zuzu-Typ-PyGLM-e113a8a/pyglm/000077500000000000000000000000001511156275200157315ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/pyglm/__init__.py000066400000000000000000000001351511156275200200410ustar00rootroot00000000000000from . import glm from . import glm_typing typing = glm_typing __version__ = glm.__version__ Zuzu-Typ-PyGLM-e113a8a/pyglm/__init__.pyi000066400000000000000000026110661511156275200202270ustar00rootroot00000000000000 # generated by tools/generate.py # https://github.com/esoma/pyglm-typing/ import ctypes from typing import (Any, Callable, Generator, Generic, Iterable, List, Literal, Optional, SupportsInt, Tuple, Type, TypeVar, Union, overload) from . import glm_typing _T = TypeVar('_T') _VT = TypeVar('_VT', bvec1, bvec2, bvec3, bvec4, dmvec2, dmvec3, dmvec4, dvec1, dvec2, dvec3, dvec4, i16vec1, i16vec2, i16vec3, i16vec4, i64vec1, i64vec2, i64vec3, i64vec4, i8vec1, i8vec2, i8vec3, i8vec4, imvec2, imvec3, imvec4, ivec1, ivec2, ivec3, ivec4, mvec2, mvec3, mvec4, u16vec1, u16vec2, u16vec3, u16vec4, u64vec1, u64vec2, u64vec3, u64vec4, u8vec1, u8vec2, u8vec3, u8vec4, umvec2, umvec3, umvec4, uvec1, uvec2, uvec3, uvec4, vec1, vec2, vec3, vec4) _NF32VT = TypeVar('_NF32VT', bvec1, bvec2, bvec3, bvec4, dmvec2, dmvec3, dmvec4, dvec1, dvec2, dvec3, dvec4, i16vec1, i16vec2, i16vec3, i16vec4, i64vec1, i64vec2, i64vec3, i64vec4, i8vec1, i8vec2, i8vec3, i8vec4, imvec2, imvec3, imvec4, ivec1, ivec2, ivec3, ivec4, u16vec1, u16vec2, u16vec3, u16vec4, u64vec1, u64vec2, u64vec3, u64vec4, u8vec1, u8vec2, u8vec3, u8vec4, umvec2, umvec3, umvec4, uvec1, uvec2, uvec3, uvec4) _FDVT = TypeVar('_FDVT', dmvec2, dmvec3, dmvec4, dvec1, dvec2, dvec3, dvec4, mvec2, mvec3, mvec4, vec1, vec2, vec3, vec4) _NF32DFVT = TypeVar('_NF32DFVT', dmvec2, dmvec3, dmvec4, dvec1, dvec2, dvec3, dvec4) _NF32DFV1T = TypeVar('_NF32DFV1T', bound=dvec1) _NF32DFV2T = TypeVar('_NF32DFV2T', dmvec2, dvec2) _NF32DFV3T = TypeVar('_NF32DFV3T', dmvec3, dvec3) _NF32DFV4T = TypeVar('_NF32DFV4T', dmvec4, dvec4) _NF32V1T = TypeVar('_NF32V1T', bvec1, dvec1, i16vec1, i64vec1, i8vec1, ivec1, u16vec1, u64vec1, u8vec1, uvec1) _NF32V2T = TypeVar('_NF32V2T', bvec2, dmvec2, dvec2, i16vec2, i64vec2, i8vec2, imvec2, ivec2, u16vec2, u64vec2, u8vec2, umvec2, uvec2) _NF32V3T = TypeVar('_NF32V3T', bvec3, dmvec3, dvec3, i16vec3, i64vec3, i8vec3, imvec3, ivec3, u16vec3, u64vec3, u8vec3, umvec3, uvec3) _NF32V4T = TypeVar('_NF32V4T', bvec4, dmvec4, dvec4, i16vec4, i64vec4, i8vec4, imvec4, ivec4, u16vec4, u64vec4, u8vec4, umvec4, uvec4) _IVT = TypeVar('_IVT', i16vec1, i16vec2, i16vec3, i16vec4, i64vec1, i64vec2, i64vec3, i64vec4, i8vec1, i8vec2, i8vec3, i8vec4, imvec2, imvec3, imvec4, ivec1, ivec2, ivec3, ivec4) _UVT = TypeVar('_UVT', u16vec1, u16vec2, u16vec3, u16vec4, u64vec1, u64vec2, u64vec3, u64vec4, u8vec1, u8vec2, u8vec3, u8vec4, umvec2, umvec3, umvec4, uvec1, uvec2, uvec3, uvec4) _NI32IVT = TypeVar('_NI32IVT', i16vec1, i16vec2, i16vec3, i16vec4, i64vec1, i64vec2, i64vec3, i64vec4, i8vec1, i8vec2, i8vec3, i8vec4) _NI32IUVT = TypeVar('_NI32IUVT', i16vec1, i16vec2, i16vec3, i16vec4, i64vec1, i64vec2, i64vec3, i64vec4, i8vec1, i8vec2, i8vec3, i8vec4, u16vec1, u16vec2, u16vec3, u16vec4, u64vec1, u64vec2, u64vec3, u64vec4, u8vec1, u8vec2, u8vec3, u8vec4, umvec2, umvec3, umvec4, uvec1, uvec2, uvec3, uvec4) _NI32IUV1T = TypeVar('_NI32IUV1T', i16vec1, i64vec1, i8vec1, u16vec1, u64vec1, u8vec1, uvec1) _NI32IUV2T = TypeVar('_NI32IUV2T', i16vec2, i64vec2, i8vec2, u16vec2, u64vec2, u8vec2, umvec2, uvec2) _NI32IUV3T = TypeVar('_NI32IUV3T', i16vec3, i64vec3, i8vec3, u16vec3, u64vec3, u8vec3, umvec3, uvec3) _NI32IUV4T = TypeVar('_NI32IUV4T', i16vec4, i64vec4, i8vec4, u16vec4, u64vec4, u8vec4, umvec4, uvec4) _MT = TypeVar('_MT', dmat2x2, dmat2x3, dmat2x4, dmat3x2, dmat3x3, dmat3x4, dmat4x2, dmat4x3, dmat4x4, imat2x2, imat2x3, imat2x4, imat3x2, imat3x3, imat3x4, imat4x2, imat4x3, imat4x4, mat2x2, mat2x3, mat2x4, mat3x2, mat3x3, mat3x4, mat4x2, mat4x3, mat4x4, umat2x2, umat2x3, umat2x4, umat3x2, umat3x3, umat3x4, umat4x2, umat4x3, umat4x4) _NF32FDMSQRT = TypeVar('_NF32FDMSQRT', dmat2x2, dmat3x3, dmat4x4) _NF32M2XNT = TypeVar('_NF32M2XNT', dmat2x2, dmat2x3, dmat2x4, imat2x2, imat2x3, imat2x4, umat2x2, umat2x3, umat2x4) _NF32M3XNT = TypeVar('_NF32M3XNT', dmat3x2, dmat3x3, dmat3x4, imat3x2, imat3x3, imat3x4, umat3x2, umat3x3, umat3x4) _NF32M4XNT = TypeVar('_NF32M4XNT', dmat4x2, dmat4x3, dmat4x4, imat4x2, imat4x3, imat4x4, umat4x2, umat4x3, umat4x4) _NF32M2X2T = TypeVar('_NF32M2X2T', dmat2x2, imat2x2, umat2x2) _NF32M2X3T = TypeVar('_NF32M2X3T', dmat2x3, imat2x3, umat2x3) _NF32M2X4T = TypeVar('_NF32M2X4T', dmat2x4, imat2x4, umat2x4) _NF32M3X2T = TypeVar('_NF32M3X2T', dmat3x2, imat3x2, umat3x2) _NF32M3X3T = TypeVar('_NF32M3X3T', dmat3x3, imat3x3, umat3x3) _NF32M3X4T = TypeVar('_NF32M3X4T', dmat3x4, imat3x4, umat3x4) _NF32M4X2T = TypeVar('_NF32M4X2T', dmat4x2, imat4x2, umat4x2) _NF32M4X3T = TypeVar('_NF32M4X3T', dmat4x3, imat4x3, umat4x3) _NF32M4X4T = TypeVar('_NF32M4X4T', dmat4x4, imat4x4, umat4x4) _QT = TypeVar('_QT', dquat, quat) _NF32QT = TypeVar('_NF32QT', bound=dquat) bool_ = ctypes.c_bool c_int16 = ctypes.c_short int16 = ctypes.c_short c_int32 = ctypes.c_long int32 = ctypes.c_long c_int64 = ctypes.c_longlong int64 = ctypes.c_longlong c_int8 = ctypes.c_byte int8 = ctypes.c_byte c_uint16 = ctypes.c_ushort uint16 = ctypes.c_ushort c_uint32 = ctypes.c_ulong uint32 = ctypes.c_ulong c_uint64 = ctypes.c_ulonglong uint64 = ctypes.c_ulonglong c_uint8 = ctypes.c_ubyte uint8 = ctypes.c_ubyte double = ctypes.c_double float64 = ctypes.c_double float32 = ctypes.c_float float_ = ctypes.c_float class bvec1: x: bool @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.BAnyVector2, glm_typing.BAnyVector3, glm_typing.BAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> bool: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[bool, None, None]: ... def __neg__(self) -> bvec1: ... def __pos__(self) -> bvec1: ... def __abs__(self) -> bvec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[bool]: ... def to_tuple(self) -> Tuple[bool]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> bvec1: ... def __add__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __radd__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __iadd__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __sub__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __rsub__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __isub__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... @overload def __mul__(self, other: glm_typing.Number) -> bvec1: ... @overload def __mul__(self, other: glm_typing.B8Vector1) -> bvec1: ... @overload def __rmul__(self, other: glm_typing.Number) -> bvec1: ... @overload def __rmul__(self, other: glm_typing.B8Vector1) -> bvec1: ... @overload def __imul__(self, other: glm_typing.Number) -> bvec1: ... @overload def __imul__(self, other: glm_typing.B8Vector1) -> bvec1: ... def __mod__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __rmod__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __imod__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __pow__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __rpow__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __ipow__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __truediv__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __rtruediv__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __itruediv__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __floordiv__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __rfloordiv__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... def __ifloordiv__(self, other: Union[glm_typing.B8Vector1, glm_typing.Number]) -> bvec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> bvec1: ... @overload def __matmul__(self, other: glm_typing.B8Vector1) -> bvec1: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> bvec1: ... @overload def __rmatmul__(self, other: glm_typing.B8Vector1) -> bvec1: ... @overload def __imatmul__(self, other: glm_typing.Number) -> bvec1: ... @overload def __imatmul__(self, other: glm_typing.B8Vector1) -> bvec1: ... def __divmod__(self, other: bvec1) -> Tuple[bvec1, bvec1]: ... class bvec2: x: bool y: bool @property def xy(self) -> b8vec2: ... @xy.setter def xy(self, value: glm_typing.B8Vector2) -> None: ... @property def yx(self) -> b8vec2: ... @yx.setter def yx(self, value: glm_typing.B8Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.BAnyVector3, glm_typing.BAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> bool: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[bool, None, None]: ... def __neg__(self) -> bvec2: ... def __pos__(self) -> bvec2: ... def __abs__(self) -> bvec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[bool]: ... def to_tuple(self) -> Tuple[bool, bool]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> bvec2: ... def __add__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __radd__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __iadd__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __sub__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __rsub__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __isub__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... @overload def __mul__(self, other: glm_typing.Number) -> bvec2: ... @overload def __mul__(self, other: glm_typing.B8Vector2) -> bvec2: ... @overload def __rmul__(self, other: glm_typing.Number) -> bvec2: ... @overload def __rmul__(self, other: glm_typing.B8Vector2) -> bvec2: ... @overload def __imul__(self, other: glm_typing.Number) -> bvec2: ... @overload def __imul__(self, other: glm_typing.B8Vector2) -> bvec2: ... def __mod__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __rmod__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __imod__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __pow__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __rpow__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __ipow__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __truediv__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __rtruediv__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __itruediv__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __floordiv__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __rfloordiv__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... def __ifloordiv__(self, other: Union[glm_typing.B8Vector2, glm_typing.Number]) -> bvec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> bvec2: ... @overload def __matmul__(self, other: glm_typing.B8Vector2) -> bvec2: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> bvec2: ... @overload def __rmatmul__(self, other: glm_typing.B8Vector2) -> bvec2: ... @overload def __imatmul__(self, other: glm_typing.Number) -> bvec2: ... @overload def __imatmul__(self, other: glm_typing.B8Vector2) -> bvec2: ... def __divmod__(self, other: bvec2) -> Tuple[bvec2, bvec2]: ... class bvec3: x: bool y: bool z: bool @property def xy(self) -> b8vec2: ... @xy.setter def xy(self, value: glm_typing.B8Vector2) -> None: ... @property def yx(self) -> b8vec2: ... @yx.setter def yx(self, value: glm_typing.B8Vector2) -> None: ... @property def xz(self) -> b8vec2: ... @xz.setter def xz(self, value: glm_typing.B8Vector2) -> None: ... @property def zx(self) -> b8vec2: ... @zx.setter def zx(self, value: glm_typing.B8Vector2) -> None: ... @property def yz(self) -> b8vec2: ... @yz.setter def yz(self, value: glm_typing.B8Vector2) -> None: ... @property def zy(self) -> b8vec2: ... @zy.setter def zy(self, value: glm_typing.B8Vector2) -> None: ... @property def xyz(self) -> b8vec3: ... @xyz.setter def xyz(self, value: glm_typing.B8Vector3) -> None: ... @property def xzy(self) -> b8vec3: ... @xzy.setter def xzy(self, value: glm_typing.B8Vector3) -> None: ... @property def yxz(self) -> b8vec3: ... @yxz.setter def yxz(self, value: glm_typing.B8Vector3) -> None: ... @property def yzx(self) -> b8vec3: ... @yzx.setter def yzx(self, value: glm_typing.B8Vector3) -> None: ... @property def zxy(self) -> b8vec3: ... @zxy.setter def zxy(self, value: glm_typing.B8Vector3) -> None: ... @property def zyx(self) -> b8vec3: ... @zyx.setter def zyx(self, value: glm_typing.B8Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.BAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> bool: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[bool, None, None]: ... def __neg__(self) -> bvec3: ... def __pos__(self) -> bvec3: ... def __abs__(self) -> bvec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[bool]: ... def to_tuple(self) -> Tuple[bool, bool, bool]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> bvec3: ... def __add__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __radd__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __iadd__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __sub__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __rsub__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __isub__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... @overload def __mul__(self, other: glm_typing.Number) -> bvec3: ... @overload def __mul__(self, other: glm_typing.B8Vector3) -> bvec3: ... @overload def __rmul__(self, other: glm_typing.Number) -> bvec3: ... @overload def __rmul__(self, other: glm_typing.B8Vector3) -> bvec3: ... @overload def __imul__(self, other: glm_typing.Number) -> bvec3: ... @overload def __imul__(self, other: glm_typing.B8Vector3) -> bvec3: ... def __mod__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __rmod__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __imod__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __pow__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __rpow__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __ipow__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __truediv__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __rtruediv__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __itruediv__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __floordiv__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __rfloordiv__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... def __ifloordiv__(self, other: Union[glm_typing.B8Vector3, glm_typing.Number]) -> bvec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> bvec3: ... @overload def __matmul__(self, other: glm_typing.B8Vector3) -> bvec3: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> bvec3: ... @overload def __rmatmul__(self, other: glm_typing.B8Vector3) -> bvec3: ... @overload def __imatmul__(self, other: glm_typing.Number) -> bvec3: ... @overload def __imatmul__(self, other: glm_typing.B8Vector3) -> bvec3: ... def __divmod__(self, other: bvec3) -> Tuple[bvec3, bvec3]: ... class bvec4: x: bool y: bool z: bool w: bool @property def xy(self) -> b8vec2: ... @xy.setter def xy(self, value: glm_typing.B8Vector2) -> None: ... @property def yx(self) -> b8vec2: ... @yx.setter def yx(self, value: glm_typing.B8Vector2) -> None: ... @property def xz(self) -> b8vec2: ... @xz.setter def xz(self, value: glm_typing.B8Vector2) -> None: ... @property def zx(self) -> b8vec2: ... @zx.setter def zx(self, value: glm_typing.B8Vector2) -> None: ... @property def xw(self) -> b8vec2: ... @xw.setter def xw(self, value: glm_typing.B8Vector2) -> None: ... @property def wx(self) -> b8vec2: ... @wx.setter def wx(self, value: glm_typing.B8Vector2) -> None: ... @property def yz(self) -> b8vec2: ... @yz.setter def yz(self, value: glm_typing.B8Vector2) -> None: ... @property def zy(self) -> b8vec2: ... @zy.setter def zy(self, value: glm_typing.B8Vector2) -> None: ... @property def yw(self) -> b8vec2: ... @yw.setter def yw(self, value: glm_typing.B8Vector2) -> None: ... @property def wy(self) -> b8vec2: ... @wy.setter def wy(self, value: glm_typing.B8Vector2) -> None: ... @property def zw(self) -> b8vec2: ... @zw.setter def zw(self, value: glm_typing.B8Vector2) -> None: ... @property def wz(self) -> b8vec2: ... @wz.setter def wz(self, value: glm_typing.B8Vector2) -> None: ... @property def xyz(self) -> b8vec3: ... @xyz.setter def xyz(self, value: glm_typing.B8Vector3) -> None: ... @property def xzy(self) -> b8vec3: ... @xzy.setter def xzy(self, value: glm_typing.B8Vector3) -> None: ... @property def yxz(self) -> b8vec3: ... @yxz.setter def yxz(self, value: glm_typing.B8Vector3) -> None: ... @property def yzx(self) -> b8vec3: ... @yzx.setter def yzx(self, value: glm_typing.B8Vector3) -> None: ... @property def zxy(self) -> b8vec3: ... @zxy.setter def zxy(self, value: glm_typing.B8Vector3) -> None: ... @property def zyx(self) -> b8vec3: ... @zyx.setter def zyx(self, value: glm_typing.B8Vector3) -> None: ... @property def xyw(self) -> b8vec3: ... @xyw.setter def xyw(self, value: glm_typing.B8Vector3) -> None: ... @property def xwy(self) -> b8vec3: ... @xwy.setter def xwy(self, value: glm_typing.B8Vector3) -> None: ... @property def yxw(self) -> b8vec3: ... @yxw.setter def yxw(self, value: glm_typing.B8Vector3) -> None: ... @property def ywx(self) -> b8vec3: ... @ywx.setter def ywx(self, value: glm_typing.B8Vector3) -> None: ... @property def wxy(self) -> b8vec3: ... @wxy.setter def wxy(self, value: glm_typing.B8Vector3) -> None: ... @property def wyx(self) -> b8vec3: ... @wyx.setter def wyx(self, value: glm_typing.B8Vector3) -> None: ... @property def xzw(self) -> b8vec3: ... @xzw.setter def xzw(self, value: glm_typing.B8Vector3) -> None: ... @property def xwz(self) -> b8vec3: ... @xwz.setter def xwz(self, value: glm_typing.B8Vector3) -> None: ... @property def zxw(self) -> b8vec3: ... @zxw.setter def zxw(self, value: glm_typing.B8Vector3) -> None: ... @property def zwx(self) -> b8vec3: ... @zwx.setter def zwx(self, value: glm_typing.B8Vector3) -> None: ... @property def wxz(self) -> b8vec3: ... @wxz.setter def wxz(self, value: glm_typing.B8Vector3) -> None: ... @property def wzx(self) -> b8vec3: ... @wzx.setter def wzx(self, value: glm_typing.B8Vector3) -> None: ... @property def yzw(self) -> b8vec3: ... @yzw.setter def yzw(self, value: glm_typing.B8Vector3) -> None: ... @property def ywz(self) -> b8vec3: ... @ywz.setter def ywz(self, value: glm_typing.B8Vector3) -> None: ... @property def zyw(self) -> b8vec3: ... @zyw.setter def zyw(self, value: glm_typing.B8Vector3) -> None: ... @property def zwy(self) -> b8vec3: ... @zwy.setter def zwy(self, value: glm_typing.B8Vector3) -> None: ... @property def wyz(self) -> b8vec3: ... @wyz.setter def wyz(self, value: glm_typing.B8Vector3) -> None: ... @property def wzy(self) -> b8vec3: ... @wzy.setter def wzy(self, value: glm_typing.B8Vector3) -> None: ... @property def xyzw(self) -> b8vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.B8Vector4) -> None: ... @property def xywz(self) -> b8vec4: ... @xywz.setter def xywz(self, value: glm_typing.B8Vector4) -> None: ... @property def xzyw(self) -> b8vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.B8Vector4) -> None: ... @property def xzwy(self) -> b8vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.B8Vector4) -> None: ... @property def xwyz(self) -> b8vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.B8Vector4) -> None: ... @property def xwzy(self) -> b8vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.B8Vector4) -> None: ... @property def yxzw(self) -> b8vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.B8Vector4) -> None: ... @property def yxwz(self) -> b8vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.B8Vector4) -> None: ... @property def yzxw(self) -> b8vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.B8Vector4) -> None: ... @property def yzwx(self) -> b8vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.B8Vector4) -> None: ... @property def ywxz(self) -> b8vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.B8Vector4) -> None: ... @property def ywzx(self) -> b8vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.B8Vector4) -> None: ... @property def zxyw(self) -> b8vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.B8Vector4) -> None: ... @property def zxwy(self) -> b8vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.B8Vector4) -> None: ... @property def zyxw(self) -> b8vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.B8Vector4) -> None: ... @property def zywx(self) -> b8vec4: ... @zywx.setter def zywx(self, value: glm_typing.B8Vector4) -> None: ... @property def zwxy(self) -> b8vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.B8Vector4) -> None: ... @property def zwyx(self) -> b8vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.B8Vector4) -> None: ... @property def wxyz(self) -> b8vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.B8Vector4) -> None: ... @property def wxzy(self) -> b8vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.B8Vector4) -> None: ... @property def wyxz(self) -> b8vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.B8Vector4) -> None: ... @property def wyzx(self) -> b8vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.B8Vector4) -> None: ... @property def wzxy(self) -> b8vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.B8Vector4) -> None: ... @property def wzyx(self) -> b8vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.B8Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> bool: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[bool, None, None]: ... def __neg__(self) -> bvec4: ... def __pos__(self) -> bvec4: ... def __abs__(self) -> bvec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[bool]: ... def to_tuple(self) -> Tuple[bool, bool, bool, bool]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> bvec4: ... def __add__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __radd__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __iadd__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __sub__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __rsub__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __isub__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... @overload def __mul__(self, other: glm_typing.Number) -> bvec4: ... @overload def __mul__(self, other: glm_typing.B8Vector4) -> bvec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> bvec4: ... @overload def __rmul__(self, other: glm_typing.B8Vector4) -> bvec4: ... @overload def __imul__(self, other: glm_typing.Number) -> bvec4: ... @overload def __imul__(self, other: glm_typing.B8Vector4) -> bvec4: ... def __mod__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __rmod__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __imod__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __pow__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __rpow__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __ipow__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __truediv__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __rtruediv__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __itruediv__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __floordiv__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __rfloordiv__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... def __ifloordiv__(self, other: Union[glm_typing.B8Vector4, glm_typing.Number]) -> bvec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> bvec4: ... @overload def __matmul__(self, other: glm_typing.B8Vector4) -> bvec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> bvec4: ... @overload def __rmatmul__(self, other: glm_typing.B8Vector4) -> bvec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> bvec4: ... @overload def __imatmul__(self, other: glm_typing.B8Vector4) -> bvec4: ... def __divmod__(self, other: bvec4) -> Tuple[bvec4, bvec4]: ... class dmvec2: x: float y: float @property def xy(self) -> d64vec2: ... @xy.setter def xy(self, value: glm_typing.D64Vector2) -> None: ... @property def yx(self) -> d64vec2: ... @yx.setter def yx(self, value: glm_typing.D64Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.DAnyVector3, glm_typing.DAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> dmvec2: ... def __pos__(self) -> dmvec2: ... def __abs__(self) -> dmvec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmvec2: ... def __add__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __radd__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __iadd__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __sub__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __rsub__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __isub__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... @overload def __mul__(self, other: glm_typing.Number) -> dmvec2: ... @overload def __mul__(self, other: glm_typing.D64Vector2) -> dmvec2: ... @overload def __mul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> dmvec2: ... @overload def __rmul__(self, other: glm_typing.D64Vector2) -> dmvec2: ... @overload def __rmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> dmvec2: ... @overload def __imul__(self, other: glm_typing.D64Vector2) -> dmvec2: ... @overload def __imul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __rmod__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __imod__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __pow__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __rpow__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __ipow__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __truediv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __rtruediv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __itruediv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __floordiv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __rfloordiv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... def __ifloordiv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dmvec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> dmvec2: ... @overload def __matmul__(self, other: glm_typing.D64Vector2) -> dmvec2: ... @overload def __matmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> dmvec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector2) -> dmvec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> dmvec2: ... @overload def __imatmul__(self, other: glm_typing.D64Vector2) -> dmvec2: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __divmod__(self, other: dmvec2) -> Tuple[dmvec2, dmvec2]: ... class dmvec3: x: float y: float z: float @property def xy(self) -> d64vec2: ... @xy.setter def xy(self, value: glm_typing.D64Vector2) -> None: ... @property def yx(self) -> d64vec2: ... @yx.setter def yx(self, value: glm_typing.D64Vector2) -> None: ... @property def xz(self) -> d64vec2: ... @xz.setter def xz(self, value: glm_typing.D64Vector2) -> None: ... @property def zx(self) -> d64vec2: ... @zx.setter def zx(self, value: glm_typing.D64Vector2) -> None: ... @property def yz(self) -> d64vec2: ... @yz.setter def yz(self, value: glm_typing.D64Vector2) -> None: ... @property def zy(self) -> d64vec2: ... @zy.setter def zy(self, value: glm_typing.D64Vector2) -> None: ... @property def xyz(self) -> d64vec3: ... @xyz.setter def xyz(self, value: glm_typing.D64Vector3) -> None: ... @property def xzy(self) -> d64vec3: ... @xzy.setter def xzy(self, value: glm_typing.D64Vector3) -> None: ... @property def yxz(self) -> d64vec3: ... @yxz.setter def yxz(self, value: glm_typing.D64Vector3) -> None: ... @property def yzx(self) -> d64vec3: ... @yzx.setter def yzx(self, value: glm_typing.D64Vector3) -> None: ... @property def zxy(self) -> d64vec3: ... @zxy.setter def zxy(self, value: glm_typing.D64Vector3) -> None: ... @property def zyx(self) -> d64vec3: ... @zyx.setter def zyx(self, value: glm_typing.D64Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.DAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> dmvec3: ... def __pos__(self) -> dmvec3: ... def __abs__(self) -> dmvec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmvec3: ... def __add__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __radd__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __iadd__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __sub__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __rsub__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __isub__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... @overload def __mul__(self, other: glm_typing.Number) -> dmvec3: ... @overload def __mul__(self, other: glm_typing.D64Vector3) -> dmvec3: ... @overload def __mul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> dmvec3: ... @overload def __rmul__(self, other: glm_typing.D64Vector3) -> dmvec3: ... @overload def __rmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> dmvec3: ... @overload def __imul__(self, other: glm_typing.D64Vector3) -> dmvec3: ... @overload def __imul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __rmod__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __imod__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __pow__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __rpow__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __ipow__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __truediv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __rtruediv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __itruediv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __floordiv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __rfloordiv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... def __ifloordiv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dmvec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> dmvec3: ... @overload def __matmul__(self, other: glm_typing.D64Vector3) -> dmvec3: ... @overload def __matmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> dmvec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector3) -> dmvec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> dmvec3: ... @overload def __imatmul__(self, other: glm_typing.D64Vector3) -> dmvec3: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __divmod__(self, other: dmvec3) -> Tuple[dmvec3, dmvec3]: ... class dmvec4: x: float y: float z: float w: float @property def xy(self) -> d64vec2: ... @xy.setter def xy(self, value: glm_typing.D64Vector2) -> None: ... @property def yx(self) -> d64vec2: ... @yx.setter def yx(self, value: glm_typing.D64Vector2) -> None: ... @property def xz(self) -> d64vec2: ... @xz.setter def xz(self, value: glm_typing.D64Vector2) -> None: ... @property def zx(self) -> d64vec2: ... @zx.setter def zx(self, value: glm_typing.D64Vector2) -> None: ... @property def xw(self) -> d64vec2: ... @xw.setter def xw(self, value: glm_typing.D64Vector2) -> None: ... @property def wx(self) -> d64vec2: ... @wx.setter def wx(self, value: glm_typing.D64Vector2) -> None: ... @property def yz(self) -> d64vec2: ... @yz.setter def yz(self, value: glm_typing.D64Vector2) -> None: ... @property def zy(self) -> d64vec2: ... @zy.setter def zy(self, value: glm_typing.D64Vector2) -> None: ... @property def yw(self) -> d64vec2: ... @yw.setter def yw(self, value: glm_typing.D64Vector2) -> None: ... @property def wy(self) -> d64vec2: ... @wy.setter def wy(self, value: glm_typing.D64Vector2) -> None: ... @property def zw(self) -> d64vec2: ... @zw.setter def zw(self, value: glm_typing.D64Vector2) -> None: ... @property def wz(self) -> d64vec2: ... @wz.setter def wz(self, value: glm_typing.D64Vector2) -> None: ... @property def xyz(self) -> d64vec3: ... @xyz.setter def xyz(self, value: glm_typing.D64Vector3) -> None: ... @property def xzy(self) -> d64vec3: ... @xzy.setter def xzy(self, value: glm_typing.D64Vector3) -> None: ... @property def yxz(self) -> d64vec3: ... @yxz.setter def yxz(self, value: glm_typing.D64Vector3) -> None: ... @property def yzx(self) -> d64vec3: ... @yzx.setter def yzx(self, value: glm_typing.D64Vector3) -> None: ... @property def zxy(self) -> d64vec3: ... @zxy.setter def zxy(self, value: glm_typing.D64Vector3) -> None: ... @property def zyx(self) -> d64vec3: ... @zyx.setter def zyx(self, value: glm_typing.D64Vector3) -> None: ... @property def xyw(self) -> d64vec3: ... @xyw.setter def xyw(self, value: glm_typing.D64Vector3) -> None: ... @property def xwy(self) -> d64vec3: ... @xwy.setter def xwy(self, value: glm_typing.D64Vector3) -> None: ... @property def yxw(self) -> d64vec3: ... @yxw.setter def yxw(self, value: glm_typing.D64Vector3) -> None: ... @property def ywx(self) -> d64vec3: ... @ywx.setter def ywx(self, value: glm_typing.D64Vector3) -> None: ... @property def wxy(self) -> d64vec3: ... @wxy.setter def wxy(self, value: glm_typing.D64Vector3) -> None: ... @property def wyx(self) -> d64vec3: ... @wyx.setter def wyx(self, value: glm_typing.D64Vector3) -> None: ... @property def xzw(self) -> d64vec3: ... @xzw.setter def xzw(self, value: glm_typing.D64Vector3) -> None: ... @property def xwz(self) -> d64vec3: ... @xwz.setter def xwz(self, value: glm_typing.D64Vector3) -> None: ... @property def zxw(self) -> d64vec3: ... @zxw.setter def zxw(self, value: glm_typing.D64Vector3) -> None: ... @property def zwx(self) -> d64vec3: ... @zwx.setter def zwx(self, value: glm_typing.D64Vector3) -> None: ... @property def wxz(self) -> d64vec3: ... @wxz.setter def wxz(self, value: glm_typing.D64Vector3) -> None: ... @property def wzx(self) -> d64vec3: ... @wzx.setter def wzx(self, value: glm_typing.D64Vector3) -> None: ... @property def yzw(self) -> d64vec3: ... @yzw.setter def yzw(self, value: glm_typing.D64Vector3) -> None: ... @property def ywz(self) -> d64vec3: ... @ywz.setter def ywz(self, value: glm_typing.D64Vector3) -> None: ... @property def zyw(self) -> d64vec3: ... @zyw.setter def zyw(self, value: glm_typing.D64Vector3) -> None: ... @property def zwy(self) -> d64vec3: ... @zwy.setter def zwy(self, value: glm_typing.D64Vector3) -> None: ... @property def wyz(self) -> d64vec3: ... @wyz.setter def wyz(self, value: glm_typing.D64Vector3) -> None: ... @property def wzy(self) -> d64vec3: ... @wzy.setter def wzy(self, value: glm_typing.D64Vector3) -> None: ... @property def xyzw(self) -> d64vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.D64Vector4) -> None: ... @property def xywz(self) -> d64vec4: ... @xywz.setter def xywz(self, value: glm_typing.D64Vector4) -> None: ... @property def xzyw(self) -> d64vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.D64Vector4) -> None: ... @property def xzwy(self) -> d64vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.D64Vector4) -> None: ... @property def xwyz(self) -> d64vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.D64Vector4) -> None: ... @property def xwzy(self) -> d64vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.D64Vector4) -> None: ... @property def yxzw(self) -> d64vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.D64Vector4) -> None: ... @property def yxwz(self) -> d64vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.D64Vector4) -> None: ... @property def yzxw(self) -> d64vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.D64Vector4) -> None: ... @property def yzwx(self) -> d64vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.D64Vector4) -> None: ... @property def ywxz(self) -> d64vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.D64Vector4) -> None: ... @property def ywzx(self) -> d64vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.D64Vector4) -> None: ... @property def zxyw(self) -> d64vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.D64Vector4) -> None: ... @property def zxwy(self) -> d64vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.D64Vector4) -> None: ... @property def zyxw(self) -> d64vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.D64Vector4) -> None: ... @property def zywx(self) -> d64vec4: ... @zywx.setter def zywx(self, value: glm_typing.D64Vector4) -> None: ... @property def zwxy(self) -> d64vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.D64Vector4) -> None: ... @property def zwyx(self) -> d64vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.D64Vector4) -> None: ... @property def wxyz(self) -> d64vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.D64Vector4) -> None: ... @property def wxzy(self) -> d64vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.D64Vector4) -> None: ... @property def wyxz(self) -> d64vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.D64Vector4) -> None: ... @property def wyzx(self) -> d64vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.D64Vector4) -> None: ... @property def wzxy(self) -> d64vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.D64Vector4) -> None: ... @property def wzyx(self) -> d64vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.D64Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> dmvec4: ... def __pos__(self) -> dmvec4: ... def __abs__(self) -> dmvec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float, float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmvec4: ... def __add__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __radd__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __iadd__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __sub__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __rsub__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __isub__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... @overload def __mul__(self, other: glm_typing.Number) -> dmvec4: ... @overload def __mul__(self, other: glm_typing.D64Vector4) -> dmvec4: ... @overload def __mul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> dmvec4: ... @overload def __rmul__(self, other: glm_typing.D64Vector4) -> dmvec4: ... @overload def __rmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> dmvec4: ... @overload def __imul__(self, other: glm_typing.D64Vector4) -> dmvec4: ... @overload def __imul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __rmod__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __imod__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __pow__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __rpow__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __ipow__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __truediv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __rtruediv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __itruediv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __floordiv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __rfloordiv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... def __ifloordiv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dmvec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> dmvec4: ... @overload def __matmul__(self, other: glm_typing.D64Vector4) -> dmvec4: ... @overload def __matmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> dmvec4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector4) -> dmvec4: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> dmvec4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector4) -> dmvec4: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __divmod__(self, other: dmvec4) -> Tuple[dmvec4, dmvec4]: ... f64vec1 = dvec1 class dvec1: x: float @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.DAnyVector2, glm_typing.DAnyVector3, glm_typing.DAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> dvec1: ... def __pos__(self) -> dvec1: ... def __abs__(self) -> dvec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dvec1: ... def __add__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __radd__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __iadd__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __sub__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __rsub__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __isub__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... @overload def __mul__(self, other: glm_typing.Number) -> dvec1: ... @overload def __mul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __mul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> dvec1: ... @overload def __rmul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __rmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> dvec1: ... @overload def __imul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __imul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __rmod__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __imod__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __pow__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __rpow__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __ipow__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __truediv__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __rtruediv__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __itruediv__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __floordiv__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __rfloordiv__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... def __ifloordiv__(self, other: Union[glm_typing.D64Vector1, glm_typing.Number]) -> dvec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> dvec1: ... @overload def __matmul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __matmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> dvec1: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> dvec1: ... @overload def __imatmul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __divmod__(self, other: dvec1) -> Tuple[dvec1, dvec1]: ... f64vec2 = dvec2 class dvec2: x: float y: float @property def xy(self) -> d64vec2: ... @xy.setter def xy(self, value: glm_typing.D64Vector2) -> None: ... @property def yx(self) -> d64vec2: ... @yx.setter def yx(self, value: glm_typing.D64Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.DAnyVector3, glm_typing.DAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> dvec2: ... def __pos__(self) -> dvec2: ... def __abs__(self) -> dvec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dvec2: ... def __add__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __radd__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __iadd__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __sub__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __rsub__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __isub__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... @overload def __mul__(self, other: glm_typing.Number) -> dvec2: ... @overload def __mul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __mul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> dvec2: ... @overload def __rmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __rmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> dvec2: ... @overload def __imul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __imul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __rmod__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __imod__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __pow__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __rpow__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __ipow__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __truediv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __rtruediv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __itruediv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __floordiv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __rfloordiv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... def __ifloordiv__(self, other: Union[glm_typing.D64Vector2, glm_typing.Number]) -> dvec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> dvec2: ... @overload def __matmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __matmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> dvec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> dvec2: ... @overload def __imatmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __divmod__(self, other: dvec2) -> Tuple[dvec2, dvec2]: ... f64vec3 = dvec3 class dvec3: x: float y: float z: float @property def xy(self) -> d64vec2: ... @xy.setter def xy(self, value: glm_typing.D64Vector2) -> None: ... @property def yx(self) -> d64vec2: ... @yx.setter def yx(self, value: glm_typing.D64Vector2) -> None: ... @property def xz(self) -> d64vec2: ... @xz.setter def xz(self, value: glm_typing.D64Vector2) -> None: ... @property def zx(self) -> d64vec2: ... @zx.setter def zx(self, value: glm_typing.D64Vector2) -> None: ... @property def yz(self) -> d64vec2: ... @yz.setter def yz(self, value: glm_typing.D64Vector2) -> None: ... @property def zy(self) -> d64vec2: ... @zy.setter def zy(self, value: glm_typing.D64Vector2) -> None: ... @property def xyz(self) -> d64vec3: ... @xyz.setter def xyz(self, value: glm_typing.D64Vector3) -> None: ... @property def xzy(self) -> d64vec3: ... @xzy.setter def xzy(self, value: glm_typing.D64Vector3) -> None: ... @property def yxz(self) -> d64vec3: ... @yxz.setter def yxz(self, value: glm_typing.D64Vector3) -> None: ... @property def yzx(self) -> d64vec3: ... @yzx.setter def yzx(self, value: glm_typing.D64Vector3) -> None: ... @property def zxy(self) -> d64vec3: ... @zxy.setter def zxy(self, value: glm_typing.D64Vector3) -> None: ... @property def zyx(self) -> d64vec3: ... @zyx.setter def zyx(self, value: glm_typing.D64Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.DAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> dvec3: ... def __pos__(self) -> dvec3: ... def __abs__(self) -> dvec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dvec3: ... def __add__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __radd__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __iadd__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __sub__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __rsub__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __isub__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... @overload def __mul__(self, other: glm_typing.Number) -> dvec3: ... @overload def __mul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __mul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> dvec3: ... @overload def __rmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __rmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> dvec3: ... @overload def __imul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __imul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __rmod__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __imod__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __pow__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __rpow__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __ipow__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __truediv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __rtruediv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __itruediv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __floordiv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __rfloordiv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... def __ifloordiv__(self, other: Union[glm_typing.D64Vector3, glm_typing.Number]) -> dvec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> dvec3: ... @overload def __matmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __matmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> dvec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> dvec3: ... @overload def __imatmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __divmod__(self, other: dvec3) -> Tuple[dvec3, dvec3]: ... f64vec4 = dvec4 class dvec4: x: float y: float z: float w: float @property def xy(self) -> d64vec2: ... @xy.setter def xy(self, value: glm_typing.D64Vector2) -> None: ... @property def yx(self) -> d64vec2: ... @yx.setter def yx(self, value: glm_typing.D64Vector2) -> None: ... @property def xz(self) -> d64vec2: ... @xz.setter def xz(self, value: glm_typing.D64Vector2) -> None: ... @property def zx(self) -> d64vec2: ... @zx.setter def zx(self, value: glm_typing.D64Vector2) -> None: ... @property def xw(self) -> d64vec2: ... @xw.setter def xw(self, value: glm_typing.D64Vector2) -> None: ... @property def wx(self) -> d64vec2: ... @wx.setter def wx(self, value: glm_typing.D64Vector2) -> None: ... @property def yz(self) -> d64vec2: ... @yz.setter def yz(self, value: glm_typing.D64Vector2) -> None: ... @property def zy(self) -> d64vec2: ... @zy.setter def zy(self, value: glm_typing.D64Vector2) -> None: ... @property def yw(self) -> d64vec2: ... @yw.setter def yw(self, value: glm_typing.D64Vector2) -> None: ... @property def wy(self) -> d64vec2: ... @wy.setter def wy(self, value: glm_typing.D64Vector2) -> None: ... @property def zw(self) -> d64vec2: ... @zw.setter def zw(self, value: glm_typing.D64Vector2) -> None: ... @property def wz(self) -> d64vec2: ... @wz.setter def wz(self, value: glm_typing.D64Vector2) -> None: ... @property def xyz(self) -> d64vec3: ... @xyz.setter def xyz(self, value: glm_typing.D64Vector3) -> None: ... @property def xzy(self) -> d64vec3: ... @xzy.setter def xzy(self, value: glm_typing.D64Vector3) -> None: ... @property def yxz(self) -> d64vec3: ... @yxz.setter def yxz(self, value: glm_typing.D64Vector3) -> None: ... @property def yzx(self) -> d64vec3: ... @yzx.setter def yzx(self, value: glm_typing.D64Vector3) -> None: ... @property def zxy(self) -> d64vec3: ... @zxy.setter def zxy(self, value: glm_typing.D64Vector3) -> None: ... @property def zyx(self) -> d64vec3: ... @zyx.setter def zyx(self, value: glm_typing.D64Vector3) -> None: ... @property def xyw(self) -> d64vec3: ... @xyw.setter def xyw(self, value: glm_typing.D64Vector3) -> None: ... @property def xwy(self) -> d64vec3: ... @xwy.setter def xwy(self, value: glm_typing.D64Vector3) -> None: ... @property def yxw(self) -> d64vec3: ... @yxw.setter def yxw(self, value: glm_typing.D64Vector3) -> None: ... @property def ywx(self) -> d64vec3: ... @ywx.setter def ywx(self, value: glm_typing.D64Vector3) -> None: ... @property def wxy(self) -> d64vec3: ... @wxy.setter def wxy(self, value: glm_typing.D64Vector3) -> None: ... @property def wyx(self) -> d64vec3: ... @wyx.setter def wyx(self, value: glm_typing.D64Vector3) -> None: ... @property def xzw(self) -> d64vec3: ... @xzw.setter def xzw(self, value: glm_typing.D64Vector3) -> None: ... @property def xwz(self) -> d64vec3: ... @xwz.setter def xwz(self, value: glm_typing.D64Vector3) -> None: ... @property def zxw(self) -> d64vec3: ... @zxw.setter def zxw(self, value: glm_typing.D64Vector3) -> None: ... @property def zwx(self) -> d64vec3: ... @zwx.setter def zwx(self, value: glm_typing.D64Vector3) -> None: ... @property def wxz(self) -> d64vec3: ... @wxz.setter def wxz(self, value: glm_typing.D64Vector3) -> None: ... @property def wzx(self) -> d64vec3: ... @wzx.setter def wzx(self, value: glm_typing.D64Vector3) -> None: ... @property def yzw(self) -> d64vec3: ... @yzw.setter def yzw(self, value: glm_typing.D64Vector3) -> None: ... @property def ywz(self) -> d64vec3: ... @ywz.setter def ywz(self, value: glm_typing.D64Vector3) -> None: ... @property def zyw(self) -> d64vec3: ... @zyw.setter def zyw(self, value: glm_typing.D64Vector3) -> None: ... @property def zwy(self) -> d64vec3: ... @zwy.setter def zwy(self, value: glm_typing.D64Vector3) -> None: ... @property def wyz(self) -> d64vec3: ... @wyz.setter def wyz(self, value: glm_typing.D64Vector3) -> None: ... @property def wzy(self) -> d64vec3: ... @wzy.setter def wzy(self, value: glm_typing.D64Vector3) -> None: ... @property def xyzw(self) -> d64vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.D64Vector4) -> None: ... @property def xywz(self) -> d64vec4: ... @xywz.setter def xywz(self, value: glm_typing.D64Vector4) -> None: ... @property def xzyw(self) -> d64vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.D64Vector4) -> None: ... @property def xzwy(self) -> d64vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.D64Vector4) -> None: ... @property def xwyz(self) -> d64vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.D64Vector4) -> None: ... @property def xwzy(self) -> d64vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.D64Vector4) -> None: ... @property def yxzw(self) -> d64vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.D64Vector4) -> None: ... @property def yxwz(self) -> d64vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.D64Vector4) -> None: ... @property def yzxw(self) -> d64vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.D64Vector4) -> None: ... @property def yzwx(self) -> d64vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.D64Vector4) -> None: ... @property def ywxz(self) -> d64vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.D64Vector4) -> None: ... @property def ywzx(self) -> d64vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.D64Vector4) -> None: ... @property def zxyw(self) -> d64vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.D64Vector4) -> None: ... @property def zxwy(self) -> d64vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.D64Vector4) -> None: ... @property def zyxw(self) -> d64vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.D64Vector4) -> None: ... @property def zywx(self) -> d64vec4: ... @zywx.setter def zywx(self, value: glm_typing.D64Vector4) -> None: ... @property def zwxy(self) -> d64vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.D64Vector4) -> None: ... @property def zwyx(self) -> d64vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.D64Vector4) -> None: ... @property def wxyz(self) -> d64vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.D64Vector4) -> None: ... @property def wxzy(self) -> d64vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.D64Vector4) -> None: ... @property def wyxz(self) -> d64vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.D64Vector4) -> None: ... @property def wyzx(self) -> d64vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.D64Vector4) -> None: ... @property def wzxy(self) -> d64vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.D64Vector4) -> None: ... @property def wzyx(self) -> d64vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.D64Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> dvec4: ... def __pos__(self) -> dvec4: ... def __abs__(self) -> dvec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float, float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dvec4: ... def __add__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __radd__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __iadd__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __sub__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __rsub__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __isub__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... @overload def __mul__(self, other: glm_typing.Number) -> dvec4: ... @overload def __mul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __mul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> dvec4: ... @overload def __rmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __rmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> dvec4: ... @overload def __imul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __imul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __rmod__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __imod__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __pow__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __rpow__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __ipow__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __truediv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __rtruediv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __itruediv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __floordiv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __rfloordiv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... def __ifloordiv__(self, other: Union[glm_typing.D64Vector4, glm_typing.Number]) -> dvec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> dvec4: ... @overload def __matmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __matmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> dvec4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> dvec4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.D64Matrix4x2) -> vec4: ... def __divmod__(self, other: dvec4) -> Tuple[dvec4, dvec4]: ... class i16vec1: x: int @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.IAnyVector2, glm_typing.IAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i16vec1: ... def __pos__(self) -> i16vec1: ... def __abs__(self) -> i16vec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i16vec1: ... def __add__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __radd__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __iadd__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __sub__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __rsub__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __isub__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... @overload def __mul__(self, other: glm_typing.Number) -> i16vec1: ... @overload def __mul__(self, other: glm_typing.I16Vector1) -> i16vec1: ... @overload def __rmul__(self, other: glm_typing.Number) -> i16vec1: ... @overload def __rmul__(self, other: glm_typing.I16Vector1) -> i16vec1: ... @overload def __imul__(self, other: glm_typing.Number) -> i16vec1: ... @overload def __imul__(self, other: glm_typing.I16Vector1) -> i16vec1: ... def __mod__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __rmod__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __imod__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __pow__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __rpow__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __ipow__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __truediv__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __rtruediv__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __itruediv__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __floordiv__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __rfloordiv__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... def __ifloordiv__(self, other: Union[glm_typing.I16Vector1, glm_typing.Number]) -> i16vec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> i16vec1: ... @overload def __matmul__(self, other: glm_typing.I16Vector1) -> i16vec1: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i16vec1: ... @overload def __rmatmul__(self, other: glm_typing.I16Vector1) -> i16vec1: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i16vec1: ... @overload def __imatmul__(self, other: glm_typing.I16Vector1) -> i16vec1: ... def __divmod__(self, other: i16vec1) -> Tuple[i16vec1, i16vec1]: ... class i16vec2: x: int y: int @property def xy(self) -> i16vec2: ... @xy.setter def xy(self, value: glm_typing.I16Vector2) -> None: ... @property def yx(self) -> i16vec2: ... @yx.setter def yx(self, value: glm_typing.I16Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.IAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i16vec2: ... def __pos__(self) -> i16vec2: ... def __abs__(self) -> i16vec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i16vec2: ... def __add__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __radd__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __iadd__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __sub__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __rsub__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __isub__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... @overload def __mul__(self, other: glm_typing.Number) -> i16vec2: ... @overload def __mul__(self, other: glm_typing.I16Vector2) -> i16vec2: ... @overload def __rmul__(self, other: glm_typing.Number) -> i16vec2: ... @overload def __rmul__(self, other: glm_typing.I16Vector2) -> i16vec2: ... @overload def __imul__(self, other: glm_typing.Number) -> i16vec2: ... @overload def __imul__(self, other: glm_typing.I16Vector2) -> i16vec2: ... def __mod__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __rmod__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __imod__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __pow__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __rpow__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __ipow__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __truediv__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __rtruediv__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __itruediv__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __floordiv__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __rfloordiv__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... def __ifloordiv__(self, other: Union[glm_typing.I16Vector2, glm_typing.Number]) -> i16vec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> i16vec2: ... @overload def __matmul__(self, other: glm_typing.I16Vector2) -> i16vec2: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i16vec2: ... @overload def __rmatmul__(self, other: glm_typing.I16Vector2) -> i16vec2: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i16vec2: ... @overload def __imatmul__(self, other: glm_typing.I16Vector2) -> i16vec2: ... def __divmod__(self, other: i16vec2) -> Tuple[i16vec2, i16vec2]: ... class i16vec3: x: int y: int z: int @property def xy(self) -> i16vec2: ... @xy.setter def xy(self, value: glm_typing.I16Vector2) -> None: ... @property def yx(self) -> i16vec2: ... @yx.setter def yx(self, value: glm_typing.I16Vector2) -> None: ... @property def xz(self) -> i16vec2: ... @xz.setter def xz(self, value: glm_typing.I16Vector2) -> None: ... @property def zx(self) -> i16vec2: ... @zx.setter def zx(self, value: glm_typing.I16Vector2) -> None: ... @property def yz(self) -> i16vec2: ... @yz.setter def yz(self, value: glm_typing.I16Vector2) -> None: ... @property def zy(self) -> i16vec2: ... @zy.setter def zy(self, value: glm_typing.I16Vector2) -> None: ... @property def xyz(self) -> i16vec3: ... @xyz.setter def xyz(self, value: glm_typing.I16Vector3) -> None: ... @property def xzy(self) -> i16vec3: ... @xzy.setter def xzy(self, value: glm_typing.I16Vector3) -> None: ... @property def yxz(self) -> i16vec3: ... @yxz.setter def yxz(self, value: glm_typing.I16Vector3) -> None: ... @property def yzx(self) -> i16vec3: ... @yzx.setter def yzx(self, value: glm_typing.I16Vector3) -> None: ... @property def zxy(self) -> i16vec3: ... @zxy.setter def zxy(self, value: glm_typing.I16Vector3) -> None: ... @property def zyx(self) -> i16vec3: ... @zyx.setter def zyx(self, value: glm_typing.I16Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i16vec3: ... def __pos__(self) -> i16vec3: ... def __abs__(self) -> i16vec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i16vec3: ... def __add__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __radd__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __iadd__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __sub__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __rsub__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __isub__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... @overload def __mul__(self, other: glm_typing.Number) -> i16vec3: ... @overload def __mul__(self, other: glm_typing.I16Vector3) -> i16vec3: ... @overload def __rmul__(self, other: glm_typing.Number) -> i16vec3: ... @overload def __rmul__(self, other: glm_typing.I16Vector3) -> i16vec3: ... @overload def __imul__(self, other: glm_typing.Number) -> i16vec3: ... @overload def __imul__(self, other: glm_typing.I16Vector3) -> i16vec3: ... def __mod__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __rmod__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __imod__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __pow__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __rpow__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __ipow__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __truediv__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __rtruediv__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __itruediv__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __floordiv__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __rfloordiv__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... def __ifloordiv__(self, other: Union[glm_typing.I16Vector3, glm_typing.Number]) -> i16vec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> i16vec3: ... @overload def __matmul__(self, other: glm_typing.I16Vector3) -> i16vec3: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i16vec3: ... @overload def __rmatmul__(self, other: glm_typing.I16Vector3) -> i16vec3: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i16vec3: ... @overload def __imatmul__(self, other: glm_typing.I16Vector3) -> i16vec3: ... def __divmod__(self, other: i16vec3) -> Tuple[i16vec3, i16vec3]: ... class i16vec4: x: int y: int z: int w: int @property def xy(self) -> i16vec2: ... @xy.setter def xy(self, value: glm_typing.I16Vector2) -> None: ... @property def yx(self) -> i16vec2: ... @yx.setter def yx(self, value: glm_typing.I16Vector2) -> None: ... @property def xz(self) -> i16vec2: ... @xz.setter def xz(self, value: glm_typing.I16Vector2) -> None: ... @property def zx(self) -> i16vec2: ... @zx.setter def zx(self, value: glm_typing.I16Vector2) -> None: ... @property def xw(self) -> i16vec2: ... @xw.setter def xw(self, value: glm_typing.I16Vector2) -> None: ... @property def wx(self) -> i16vec2: ... @wx.setter def wx(self, value: glm_typing.I16Vector2) -> None: ... @property def yz(self) -> i16vec2: ... @yz.setter def yz(self, value: glm_typing.I16Vector2) -> None: ... @property def zy(self) -> i16vec2: ... @zy.setter def zy(self, value: glm_typing.I16Vector2) -> None: ... @property def yw(self) -> i16vec2: ... @yw.setter def yw(self, value: glm_typing.I16Vector2) -> None: ... @property def wy(self) -> i16vec2: ... @wy.setter def wy(self, value: glm_typing.I16Vector2) -> None: ... @property def zw(self) -> i16vec2: ... @zw.setter def zw(self, value: glm_typing.I16Vector2) -> None: ... @property def wz(self) -> i16vec2: ... @wz.setter def wz(self, value: glm_typing.I16Vector2) -> None: ... @property def xyz(self) -> i16vec3: ... @xyz.setter def xyz(self, value: glm_typing.I16Vector3) -> None: ... @property def xzy(self) -> i16vec3: ... @xzy.setter def xzy(self, value: glm_typing.I16Vector3) -> None: ... @property def yxz(self) -> i16vec3: ... @yxz.setter def yxz(self, value: glm_typing.I16Vector3) -> None: ... @property def yzx(self) -> i16vec3: ... @yzx.setter def yzx(self, value: glm_typing.I16Vector3) -> None: ... @property def zxy(self) -> i16vec3: ... @zxy.setter def zxy(self, value: glm_typing.I16Vector3) -> None: ... @property def zyx(self) -> i16vec3: ... @zyx.setter def zyx(self, value: glm_typing.I16Vector3) -> None: ... @property def xyw(self) -> i16vec3: ... @xyw.setter def xyw(self, value: glm_typing.I16Vector3) -> None: ... @property def xwy(self) -> i16vec3: ... @xwy.setter def xwy(self, value: glm_typing.I16Vector3) -> None: ... @property def yxw(self) -> i16vec3: ... @yxw.setter def yxw(self, value: glm_typing.I16Vector3) -> None: ... @property def ywx(self) -> i16vec3: ... @ywx.setter def ywx(self, value: glm_typing.I16Vector3) -> None: ... @property def wxy(self) -> i16vec3: ... @wxy.setter def wxy(self, value: glm_typing.I16Vector3) -> None: ... @property def wyx(self) -> i16vec3: ... @wyx.setter def wyx(self, value: glm_typing.I16Vector3) -> None: ... @property def xzw(self) -> i16vec3: ... @xzw.setter def xzw(self, value: glm_typing.I16Vector3) -> None: ... @property def xwz(self) -> i16vec3: ... @xwz.setter def xwz(self, value: glm_typing.I16Vector3) -> None: ... @property def zxw(self) -> i16vec3: ... @zxw.setter def zxw(self, value: glm_typing.I16Vector3) -> None: ... @property def zwx(self) -> i16vec3: ... @zwx.setter def zwx(self, value: glm_typing.I16Vector3) -> None: ... @property def wxz(self) -> i16vec3: ... @wxz.setter def wxz(self, value: glm_typing.I16Vector3) -> None: ... @property def wzx(self) -> i16vec3: ... @wzx.setter def wzx(self, value: glm_typing.I16Vector3) -> None: ... @property def yzw(self) -> i16vec3: ... @yzw.setter def yzw(self, value: glm_typing.I16Vector3) -> None: ... @property def ywz(self) -> i16vec3: ... @ywz.setter def ywz(self, value: glm_typing.I16Vector3) -> None: ... @property def zyw(self) -> i16vec3: ... @zyw.setter def zyw(self, value: glm_typing.I16Vector3) -> None: ... @property def zwy(self) -> i16vec3: ... @zwy.setter def zwy(self, value: glm_typing.I16Vector3) -> None: ... @property def wyz(self) -> i16vec3: ... @wyz.setter def wyz(self, value: glm_typing.I16Vector3) -> None: ... @property def wzy(self) -> i16vec3: ... @wzy.setter def wzy(self, value: glm_typing.I16Vector3) -> None: ... @property def xyzw(self) -> i16vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.I16Vector4) -> None: ... @property def xywz(self) -> i16vec4: ... @xywz.setter def xywz(self, value: glm_typing.I16Vector4) -> None: ... @property def xzyw(self) -> i16vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.I16Vector4) -> None: ... @property def xzwy(self) -> i16vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.I16Vector4) -> None: ... @property def xwyz(self) -> i16vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.I16Vector4) -> None: ... @property def xwzy(self) -> i16vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.I16Vector4) -> None: ... @property def yxzw(self) -> i16vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.I16Vector4) -> None: ... @property def yxwz(self) -> i16vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.I16Vector4) -> None: ... @property def yzxw(self) -> i16vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.I16Vector4) -> None: ... @property def yzwx(self) -> i16vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.I16Vector4) -> None: ... @property def ywxz(self) -> i16vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.I16Vector4) -> None: ... @property def ywzx(self) -> i16vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.I16Vector4) -> None: ... @property def zxyw(self) -> i16vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.I16Vector4) -> None: ... @property def zxwy(self) -> i16vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.I16Vector4) -> None: ... @property def zyxw(self) -> i16vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.I16Vector4) -> None: ... @property def zywx(self) -> i16vec4: ... @zywx.setter def zywx(self, value: glm_typing.I16Vector4) -> None: ... @property def zwxy(self) -> i16vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.I16Vector4) -> None: ... @property def zwyx(self) -> i16vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.I16Vector4) -> None: ... @property def wxyz(self) -> i16vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.I16Vector4) -> None: ... @property def wxzy(self) -> i16vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.I16Vector4) -> None: ... @property def wyxz(self) -> i16vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.I16Vector4) -> None: ... @property def wyzx(self) -> i16vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.I16Vector4) -> None: ... @property def wzxy(self) -> i16vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.I16Vector4) -> None: ... @property def wzyx(self) -> i16vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.I16Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i16vec4: ... def __pos__(self) -> i16vec4: ... def __abs__(self) -> i16vec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i16vec4: ... def __add__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __radd__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __iadd__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __sub__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __rsub__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __isub__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... @overload def __mul__(self, other: glm_typing.Number) -> i16vec4: ... @overload def __mul__(self, other: glm_typing.I16Vector4) -> i16vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> i16vec4: ... @overload def __rmul__(self, other: glm_typing.I16Vector4) -> i16vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> i16vec4: ... @overload def __imul__(self, other: glm_typing.I16Vector4) -> i16vec4: ... def __mod__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __rmod__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __imod__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __pow__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __rpow__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __ipow__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __truediv__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __rtruediv__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __itruediv__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __floordiv__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __rfloordiv__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... def __ifloordiv__(self, other: Union[glm_typing.I16Vector4, glm_typing.Number]) -> i16vec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> i16vec4: ... @overload def __matmul__(self, other: glm_typing.I16Vector4) -> i16vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i16vec4: ... @overload def __rmatmul__(self, other: glm_typing.I16Vector4) -> i16vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i16vec4: ... @overload def __imatmul__(self, other: glm_typing.I16Vector4) -> i16vec4: ... def __divmod__(self, other: i16vec4) -> Tuple[i16vec4, i16vec4]: ... class i64vec1: x: int @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.IAnyVector2, glm_typing.IAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i64vec1: ... def __pos__(self) -> i64vec1: ... def __abs__(self) -> i64vec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i64vec1: ... def __add__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __radd__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __iadd__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __sub__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __rsub__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __isub__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... @overload def __mul__(self, other: glm_typing.Number) -> i64vec1: ... @overload def __mul__(self, other: glm_typing.I64Vector1) -> i64vec1: ... @overload def __rmul__(self, other: glm_typing.Number) -> i64vec1: ... @overload def __rmul__(self, other: glm_typing.I64Vector1) -> i64vec1: ... @overload def __imul__(self, other: glm_typing.Number) -> i64vec1: ... @overload def __imul__(self, other: glm_typing.I64Vector1) -> i64vec1: ... def __mod__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __rmod__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __imod__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __pow__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __rpow__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __ipow__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __truediv__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __rtruediv__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __itruediv__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __floordiv__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __rfloordiv__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... def __ifloordiv__(self, other: Union[glm_typing.I64Vector1, glm_typing.Number]) -> i64vec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> i64vec1: ... @overload def __matmul__(self, other: glm_typing.I64Vector1) -> i64vec1: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i64vec1: ... @overload def __rmatmul__(self, other: glm_typing.I64Vector1) -> i64vec1: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i64vec1: ... @overload def __imatmul__(self, other: glm_typing.I64Vector1) -> i64vec1: ... def __divmod__(self, other: i64vec1) -> Tuple[i64vec1, i64vec1]: ... class i64vec2: x: int y: int @property def xy(self) -> i64vec2: ... @xy.setter def xy(self, value: glm_typing.I64Vector2) -> None: ... @property def yx(self) -> i64vec2: ... @yx.setter def yx(self, value: glm_typing.I64Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.IAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i64vec2: ... def __pos__(self) -> i64vec2: ... def __abs__(self) -> i64vec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i64vec2: ... def __add__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __radd__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __iadd__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __sub__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __rsub__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __isub__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... @overload def __mul__(self, other: glm_typing.Number) -> i64vec2: ... @overload def __mul__(self, other: glm_typing.I64Vector2) -> i64vec2: ... @overload def __rmul__(self, other: glm_typing.Number) -> i64vec2: ... @overload def __rmul__(self, other: glm_typing.I64Vector2) -> i64vec2: ... @overload def __imul__(self, other: glm_typing.Number) -> i64vec2: ... @overload def __imul__(self, other: glm_typing.I64Vector2) -> i64vec2: ... def __mod__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __rmod__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __imod__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __pow__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __rpow__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __ipow__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __truediv__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __rtruediv__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __itruediv__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __floordiv__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __rfloordiv__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... def __ifloordiv__(self, other: Union[glm_typing.I64Vector2, glm_typing.Number]) -> i64vec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> i64vec2: ... @overload def __matmul__(self, other: glm_typing.I64Vector2) -> i64vec2: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i64vec2: ... @overload def __rmatmul__(self, other: glm_typing.I64Vector2) -> i64vec2: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i64vec2: ... @overload def __imatmul__(self, other: glm_typing.I64Vector2) -> i64vec2: ... def __divmod__(self, other: i64vec2) -> Tuple[i64vec2, i64vec2]: ... class i64vec3: x: int y: int z: int @property def xy(self) -> i64vec2: ... @xy.setter def xy(self, value: glm_typing.I64Vector2) -> None: ... @property def yx(self) -> i64vec2: ... @yx.setter def yx(self, value: glm_typing.I64Vector2) -> None: ... @property def xz(self) -> i64vec2: ... @xz.setter def xz(self, value: glm_typing.I64Vector2) -> None: ... @property def zx(self) -> i64vec2: ... @zx.setter def zx(self, value: glm_typing.I64Vector2) -> None: ... @property def yz(self) -> i64vec2: ... @yz.setter def yz(self, value: glm_typing.I64Vector2) -> None: ... @property def zy(self) -> i64vec2: ... @zy.setter def zy(self, value: glm_typing.I64Vector2) -> None: ... @property def xyz(self) -> i64vec3: ... @xyz.setter def xyz(self, value: glm_typing.I64Vector3) -> None: ... @property def xzy(self) -> i64vec3: ... @xzy.setter def xzy(self, value: glm_typing.I64Vector3) -> None: ... @property def yxz(self) -> i64vec3: ... @yxz.setter def yxz(self, value: glm_typing.I64Vector3) -> None: ... @property def yzx(self) -> i64vec3: ... @yzx.setter def yzx(self, value: glm_typing.I64Vector3) -> None: ... @property def zxy(self) -> i64vec3: ... @zxy.setter def zxy(self, value: glm_typing.I64Vector3) -> None: ... @property def zyx(self) -> i64vec3: ... @zyx.setter def zyx(self, value: glm_typing.I64Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i64vec3: ... def __pos__(self) -> i64vec3: ... def __abs__(self) -> i64vec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i64vec3: ... def __add__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __radd__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __iadd__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __sub__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __rsub__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __isub__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... @overload def __mul__(self, other: glm_typing.Number) -> i64vec3: ... @overload def __mul__(self, other: glm_typing.I64Vector3) -> i64vec3: ... @overload def __rmul__(self, other: glm_typing.Number) -> i64vec3: ... @overload def __rmul__(self, other: glm_typing.I64Vector3) -> i64vec3: ... @overload def __imul__(self, other: glm_typing.Number) -> i64vec3: ... @overload def __imul__(self, other: glm_typing.I64Vector3) -> i64vec3: ... def __mod__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __rmod__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __imod__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __pow__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __rpow__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __ipow__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __truediv__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __rtruediv__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __itruediv__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __floordiv__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __rfloordiv__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... def __ifloordiv__(self, other: Union[glm_typing.I64Vector3, glm_typing.Number]) -> i64vec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> i64vec3: ... @overload def __matmul__(self, other: glm_typing.I64Vector3) -> i64vec3: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i64vec3: ... @overload def __rmatmul__(self, other: glm_typing.I64Vector3) -> i64vec3: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i64vec3: ... @overload def __imatmul__(self, other: glm_typing.I64Vector3) -> i64vec3: ... def __divmod__(self, other: i64vec3) -> Tuple[i64vec3, i64vec3]: ... class i64vec4: x: int y: int z: int w: int @property def xy(self) -> i64vec2: ... @xy.setter def xy(self, value: glm_typing.I64Vector2) -> None: ... @property def yx(self) -> i64vec2: ... @yx.setter def yx(self, value: glm_typing.I64Vector2) -> None: ... @property def xz(self) -> i64vec2: ... @xz.setter def xz(self, value: glm_typing.I64Vector2) -> None: ... @property def zx(self) -> i64vec2: ... @zx.setter def zx(self, value: glm_typing.I64Vector2) -> None: ... @property def xw(self) -> i64vec2: ... @xw.setter def xw(self, value: glm_typing.I64Vector2) -> None: ... @property def wx(self) -> i64vec2: ... @wx.setter def wx(self, value: glm_typing.I64Vector2) -> None: ... @property def yz(self) -> i64vec2: ... @yz.setter def yz(self, value: glm_typing.I64Vector2) -> None: ... @property def zy(self) -> i64vec2: ... @zy.setter def zy(self, value: glm_typing.I64Vector2) -> None: ... @property def yw(self) -> i64vec2: ... @yw.setter def yw(self, value: glm_typing.I64Vector2) -> None: ... @property def wy(self) -> i64vec2: ... @wy.setter def wy(self, value: glm_typing.I64Vector2) -> None: ... @property def zw(self) -> i64vec2: ... @zw.setter def zw(self, value: glm_typing.I64Vector2) -> None: ... @property def wz(self) -> i64vec2: ... @wz.setter def wz(self, value: glm_typing.I64Vector2) -> None: ... @property def xyz(self) -> i64vec3: ... @xyz.setter def xyz(self, value: glm_typing.I64Vector3) -> None: ... @property def xzy(self) -> i64vec3: ... @xzy.setter def xzy(self, value: glm_typing.I64Vector3) -> None: ... @property def yxz(self) -> i64vec3: ... @yxz.setter def yxz(self, value: glm_typing.I64Vector3) -> None: ... @property def yzx(self) -> i64vec3: ... @yzx.setter def yzx(self, value: glm_typing.I64Vector3) -> None: ... @property def zxy(self) -> i64vec3: ... @zxy.setter def zxy(self, value: glm_typing.I64Vector3) -> None: ... @property def zyx(self) -> i64vec3: ... @zyx.setter def zyx(self, value: glm_typing.I64Vector3) -> None: ... @property def xyw(self) -> i64vec3: ... @xyw.setter def xyw(self, value: glm_typing.I64Vector3) -> None: ... @property def xwy(self) -> i64vec3: ... @xwy.setter def xwy(self, value: glm_typing.I64Vector3) -> None: ... @property def yxw(self) -> i64vec3: ... @yxw.setter def yxw(self, value: glm_typing.I64Vector3) -> None: ... @property def ywx(self) -> i64vec3: ... @ywx.setter def ywx(self, value: glm_typing.I64Vector3) -> None: ... @property def wxy(self) -> i64vec3: ... @wxy.setter def wxy(self, value: glm_typing.I64Vector3) -> None: ... @property def wyx(self) -> i64vec3: ... @wyx.setter def wyx(self, value: glm_typing.I64Vector3) -> None: ... @property def xzw(self) -> i64vec3: ... @xzw.setter def xzw(self, value: glm_typing.I64Vector3) -> None: ... @property def xwz(self) -> i64vec3: ... @xwz.setter def xwz(self, value: glm_typing.I64Vector3) -> None: ... @property def zxw(self) -> i64vec3: ... @zxw.setter def zxw(self, value: glm_typing.I64Vector3) -> None: ... @property def zwx(self) -> i64vec3: ... @zwx.setter def zwx(self, value: glm_typing.I64Vector3) -> None: ... @property def wxz(self) -> i64vec3: ... @wxz.setter def wxz(self, value: glm_typing.I64Vector3) -> None: ... @property def wzx(self) -> i64vec3: ... @wzx.setter def wzx(self, value: glm_typing.I64Vector3) -> None: ... @property def yzw(self) -> i64vec3: ... @yzw.setter def yzw(self, value: glm_typing.I64Vector3) -> None: ... @property def ywz(self) -> i64vec3: ... @ywz.setter def ywz(self, value: glm_typing.I64Vector3) -> None: ... @property def zyw(self) -> i64vec3: ... @zyw.setter def zyw(self, value: glm_typing.I64Vector3) -> None: ... @property def zwy(self) -> i64vec3: ... @zwy.setter def zwy(self, value: glm_typing.I64Vector3) -> None: ... @property def wyz(self) -> i64vec3: ... @wyz.setter def wyz(self, value: glm_typing.I64Vector3) -> None: ... @property def wzy(self) -> i64vec3: ... @wzy.setter def wzy(self, value: glm_typing.I64Vector3) -> None: ... @property def xyzw(self) -> i64vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.I64Vector4) -> None: ... @property def xywz(self) -> i64vec4: ... @xywz.setter def xywz(self, value: glm_typing.I64Vector4) -> None: ... @property def xzyw(self) -> i64vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.I64Vector4) -> None: ... @property def xzwy(self) -> i64vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.I64Vector4) -> None: ... @property def xwyz(self) -> i64vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.I64Vector4) -> None: ... @property def xwzy(self) -> i64vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.I64Vector4) -> None: ... @property def yxzw(self) -> i64vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.I64Vector4) -> None: ... @property def yxwz(self) -> i64vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.I64Vector4) -> None: ... @property def yzxw(self) -> i64vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.I64Vector4) -> None: ... @property def yzwx(self) -> i64vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.I64Vector4) -> None: ... @property def ywxz(self) -> i64vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.I64Vector4) -> None: ... @property def ywzx(self) -> i64vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.I64Vector4) -> None: ... @property def zxyw(self) -> i64vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.I64Vector4) -> None: ... @property def zxwy(self) -> i64vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.I64Vector4) -> None: ... @property def zyxw(self) -> i64vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.I64Vector4) -> None: ... @property def zywx(self) -> i64vec4: ... @zywx.setter def zywx(self, value: glm_typing.I64Vector4) -> None: ... @property def zwxy(self) -> i64vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.I64Vector4) -> None: ... @property def zwyx(self) -> i64vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.I64Vector4) -> None: ... @property def wxyz(self) -> i64vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.I64Vector4) -> None: ... @property def wxzy(self) -> i64vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.I64Vector4) -> None: ... @property def wyxz(self) -> i64vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.I64Vector4) -> None: ... @property def wyzx(self) -> i64vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.I64Vector4) -> None: ... @property def wzxy(self) -> i64vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.I64Vector4) -> None: ... @property def wzyx(self) -> i64vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.I64Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i64vec4: ... def __pos__(self) -> i64vec4: ... def __abs__(self) -> i64vec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i64vec4: ... def __add__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __radd__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __iadd__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __sub__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __rsub__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __isub__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... @overload def __mul__(self, other: glm_typing.Number) -> i64vec4: ... @overload def __mul__(self, other: glm_typing.I64Vector4) -> i64vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> i64vec4: ... @overload def __rmul__(self, other: glm_typing.I64Vector4) -> i64vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> i64vec4: ... @overload def __imul__(self, other: glm_typing.I64Vector4) -> i64vec4: ... def __mod__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __rmod__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __imod__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __pow__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __rpow__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __ipow__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __truediv__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __rtruediv__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __itruediv__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __floordiv__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __rfloordiv__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... def __ifloordiv__(self, other: Union[glm_typing.I64Vector4, glm_typing.Number]) -> i64vec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> i64vec4: ... @overload def __matmul__(self, other: glm_typing.I64Vector4) -> i64vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i64vec4: ... @overload def __rmatmul__(self, other: glm_typing.I64Vector4) -> i64vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i64vec4: ... @overload def __imatmul__(self, other: glm_typing.I64Vector4) -> i64vec4: ... def __divmod__(self, other: i64vec4) -> Tuple[i64vec4, i64vec4]: ... class i8vec1: x: int @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.IAnyVector2, glm_typing.IAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i8vec1: ... def __pos__(self) -> i8vec1: ... def __abs__(self) -> i8vec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i8vec1: ... def __add__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __radd__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __iadd__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __sub__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __rsub__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __isub__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... @overload def __mul__(self, other: glm_typing.Number) -> i8vec1: ... @overload def __mul__(self, other: glm_typing.I8Vector1) -> i8vec1: ... @overload def __rmul__(self, other: glm_typing.Number) -> i8vec1: ... @overload def __rmul__(self, other: glm_typing.I8Vector1) -> i8vec1: ... @overload def __imul__(self, other: glm_typing.Number) -> i8vec1: ... @overload def __imul__(self, other: glm_typing.I8Vector1) -> i8vec1: ... def __mod__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __rmod__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __imod__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __pow__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __rpow__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __ipow__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __truediv__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __rtruediv__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __itruediv__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __floordiv__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __rfloordiv__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... def __ifloordiv__(self, other: Union[glm_typing.I8Vector1, glm_typing.Number]) -> i8vec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> i8vec1: ... @overload def __matmul__(self, other: glm_typing.I8Vector1) -> i8vec1: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i8vec1: ... @overload def __rmatmul__(self, other: glm_typing.I8Vector1) -> i8vec1: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i8vec1: ... @overload def __imatmul__(self, other: glm_typing.I8Vector1) -> i8vec1: ... def __divmod__(self, other: i8vec1) -> Tuple[i8vec1, i8vec1]: ... class i8vec2: x: int y: int @property def xy(self) -> i8vec2: ... @xy.setter def xy(self, value: glm_typing.I8Vector2) -> None: ... @property def yx(self) -> i8vec2: ... @yx.setter def yx(self, value: glm_typing.I8Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.IAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i8vec2: ... def __pos__(self) -> i8vec2: ... def __abs__(self) -> i8vec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i8vec2: ... def __add__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __radd__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __iadd__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __sub__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __rsub__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __isub__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... @overload def __mul__(self, other: glm_typing.Number) -> i8vec2: ... @overload def __mul__(self, other: glm_typing.I8Vector2) -> i8vec2: ... @overload def __rmul__(self, other: glm_typing.Number) -> i8vec2: ... @overload def __rmul__(self, other: glm_typing.I8Vector2) -> i8vec2: ... @overload def __imul__(self, other: glm_typing.Number) -> i8vec2: ... @overload def __imul__(self, other: glm_typing.I8Vector2) -> i8vec2: ... def __mod__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __rmod__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __imod__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __pow__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __rpow__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __ipow__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __truediv__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __rtruediv__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __itruediv__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __floordiv__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __rfloordiv__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... def __ifloordiv__(self, other: Union[glm_typing.I8Vector2, glm_typing.Number]) -> i8vec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> i8vec2: ... @overload def __matmul__(self, other: glm_typing.I8Vector2) -> i8vec2: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i8vec2: ... @overload def __rmatmul__(self, other: glm_typing.I8Vector2) -> i8vec2: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i8vec2: ... @overload def __imatmul__(self, other: glm_typing.I8Vector2) -> i8vec2: ... def __divmod__(self, other: i8vec2) -> Tuple[i8vec2, i8vec2]: ... class i8vec3: x: int y: int z: int @property def xy(self) -> i8vec2: ... @xy.setter def xy(self, value: glm_typing.I8Vector2) -> None: ... @property def yx(self) -> i8vec2: ... @yx.setter def yx(self, value: glm_typing.I8Vector2) -> None: ... @property def xz(self) -> i8vec2: ... @xz.setter def xz(self, value: glm_typing.I8Vector2) -> None: ... @property def zx(self) -> i8vec2: ... @zx.setter def zx(self, value: glm_typing.I8Vector2) -> None: ... @property def yz(self) -> i8vec2: ... @yz.setter def yz(self, value: glm_typing.I8Vector2) -> None: ... @property def zy(self) -> i8vec2: ... @zy.setter def zy(self, value: glm_typing.I8Vector2) -> None: ... @property def xyz(self) -> i8vec3: ... @xyz.setter def xyz(self, value: glm_typing.I8Vector3) -> None: ... @property def xzy(self) -> i8vec3: ... @xzy.setter def xzy(self, value: glm_typing.I8Vector3) -> None: ... @property def yxz(self) -> i8vec3: ... @yxz.setter def yxz(self, value: glm_typing.I8Vector3) -> None: ... @property def yzx(self) -> i8vec3: ... @yzx.setter def yzx(self, value: glm_typing.I8Vector3) -> None: ... @property def zxy(self) -> i8vec3: ... @zxy.setter def zxy(self, value: glm_typing.I8Vector3) -> None: ... @property def zyx(self) -> i8vec3: ... @zyx.setter def zyx(self, value: glm_typing.I8Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i8vec3: ... def __pos__(self) -> i8vec3: ... def __abs__(self) -> i8vec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i8vec3: ... def __add__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __radd__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __iadd__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __sub__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __rsub__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __isub__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... @overload def __mul__(self, other: glm_typing.Number) -> i8vec3: ... @overload def __mul__(self, other: glm_typing.I8Vector3) -> i8vec3: ... @overload def __rmul__(self, other: glm_typing.Number) -> i8vec3: ... @overload def __rmul__(self, other: glm_typing.I8Vector3) -> i8vec3: ... @overload def __imul__(self, other: glm_typing.Number) -> i8vec3: ... @overload def __imul__(self, other: glm_typing.I8Vector3) -> i8vec3: ... def __mod__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __rmod__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __imod__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __pow__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __rpow__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __ipow__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __truediv__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __rtruediv__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __itruediv__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __floordiv__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __rfloordiv__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... def __ifloordiv__(self, other: Union[glm_typing.I8Vector3, glm_typing.Number]) -> i8vec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> i8vec3: ... @overload def __matmul__(self, other: glm_typing.I8Vector3) -> i8vec3: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i8vec3: ... @overload def __rmatmul__(self, other: glm_typing.I8Vector3) -> i8vec3: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i8vec3: ... @overload def __imatmul__(self, other: glm_typing.I8Vector3) -> i8vec3: ... def __divmod__(self, other: i8vec3) -> Tuple[i8vec3, i8vec3]: ... class i8vec4: x: int y: int z: int w: int @property def xy(self) -> i8vec2: ... @xy.setter def xy(self, value: glm_typing.I8Vector2) -> None: ... @property def yx(self) -> i8vec2: ... @yx.setter def yx(self, value: glm_typing.I8Vector2) -> None: ... @property def xz(self) -> i8vec2: ... @xz.setter def xz(self, value: glm_typing.I8Vector2) -> None: ... @property def zx(self) -> i8vec2: ... @zx.setter def zx(self, value: glm_typing.I8Vector2) -> None: ... @property def xw(self) -> i8vec2: ... @xw.setter def xw(self, value: glm_typing.I8Vector2) -> None: ... @property def wx(self) -> i8vec2: ... @wx.setter def wx(self, value: glm_typing.I8Vector2) -> None: ... @property def yz(self) -> i8vec2: ... @yz.setter def yz(self, value: glm_typing.I8Vector2) -> None: ... @property def zy(self) -> i8vec2: ... @zy.setter def zy(self, value: glm_typing.I8Vector2) -> None: ... @property def yw(self) -> i8vec2: ... @yw.setter def yw(self, value: glm_typing.I8Vector2) -> None: ... @property def wy(self) -> i8vec2: ... @wy.setter def wy(self, value: glm_typing.I8Vector2) -> None: ... @property def zw(self) -> i8vec2: ... @zw.setter def zw(self, value: glm_typing.I8Vector2) -> None: ... @property def wz(self) -> i8vec2: ... @wz.setter def wz(self, value: glm_typing.I8Vector2) -> None: ... @property def xyz(self) -> i8vec3: ... @xyz.setter def xyz(self, value: glm_typing.I8Vector3) -> None: ... @property def xzy(self) -> i8vec3: ... @xzy.setter def xzy(self, value: glm_typing.I8Vector3) -> None: ... @property def yxz(self) -> i8vec3: ... @yxz.setter def yxz(self, value: glm_typing.I8Vector3) -> None: ... @property def yzx(self) -> i8vec3: ... @yzx.setter def yzx(self, value: glm_typing.I8Vector3) -> None: ... @property def zxy(self) -> i8vec3: ... @zxy.setter def zxy(self, value: glm_typing.I8Vector3) -> None: ... @property def zyx(self) -> i8vec3: ... @zyx.setter def zyx(self, value: glm_typing.I8Vector3) -> None: ... @property def xyw(self) -> i8vec3: ... @xyw.setter def xyw(self, value: glm_typing.I8Vector3) -> None: ... @property def xwy(self) -> i8vec3: ... @xwy.setter def xwy(self, value: glm_typing.I8Vector3) -> None: ... @property def yxw(self) -> i8vec3: ... @yxw.setter def yxw(self, value: glm_typing.I8Vector3) -> None: ... @property def ywx(self) -> i8vec3: ... @ywx.setter def ywx(self, value: glm_typing.I8Vector3) -> None: ... @property def wxy(self) -> i8vec3: ... @wxy.setter def wxy(self, value: glm_typing.I8Vector3) -> None: ... @property def wyx(self) -> i8vec3: ... @wyx.setter def wyx(self, value: glm_typing.I8Vector3) -> None: ... @property def xzw(self) -> i8vec3: ... @xzw.setter def xzw(self, value: glm_typing.I8Vector3) -> None: ... @property def xwz(self) -> i8vec3: ... @xwz.setter def xwz(self, value: glm_typing.I8Vector3) -> None: ... @property def zxw(self) -> i8vec3: ... @zxw.setter def zxw(self, value: glm_typing.I8Vector3) -> None: ... @property def zwx(self) -> i8vec3: ... @zwx.setter def zwx(self, value: glm_typing.I8Vector3) -> None: ... @property def wxz(self) -> i8vec3: ... @wxz.setter def wxz(self, value: glm_typing.I8Vector3) -> None: ... @property def wzx(self) -> i8vec3: ... @wzx.setter def wzx(self, value: glm_typing.I8Vector3) -> None: ... @property def yzw(self) -> i8vec3: ... @yzw.setter def yzw(self, value: glm_typing.I8Vector3) -> None: ... @property def ywz(self) -> i8vec3: ... @ywz.setter def ywz(self, value: glm_typing.I8Vector3) -> None: ... @property def zyw(self) -> i8vec3: ... @zyw.setter def zyw(self, value: glm_typing.I8Vector3) -> None: ... @property def zwy(self) -> i8vec3: ... @zwy.setter def zwy(self, value: glm_typing.I8Vector3) -> None: ... @property def wyz(self) -> i8vec3: ... @wyz.setter def wyz(self, value: glm_typing.I8Vector3) -> None: ... @property def wzy(self) -> i8vec3: ... @wzy.setter def wzy(self, value: glm_typing.I8Vector3) -> None: ... @property def xyzw(self) -> i8vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.I8Vector4) -> None: ... @property def xywz(self) -> i8vec4: ... @xywz.setter def xywz(self, value: glm_typing.I8Vector4) -> None: ... @property def xzyw(self) -> i8vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.I8Vector4) -> None: ... @property def xzwy(self) -> i8vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.I8Vector4) -> None: ... @property def xwyz(self) -> i8vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.I8Vector4) -> None: ... @property def xwzy(self) -> i8vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.I8Vector4) -> None: ... @property def yxzw(self) -> i8vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.I8Vector4) -> None: ... @property def yxwz(self) -> i8vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.I8Vector4) -> None: ... @property def yzxw(self) -> i8vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.I8Vector4) -> None: ... @property def yzwx(self) -> i8vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.I8Vector4) -> None: ... @property def ywxz(self) -> i8vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.I8Vector4) -> None: ... @property def ywzx(self) -> i8vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.I8Vector4) -> None: ... @property def zxyw(self) -> i8vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.I8Vector4) -> None: ... @property def zxwy(self) -> i8vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.I8Vector4) -> None: ... @property def zyxw(self) -> i8vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.I8Vector4) -> None: ... @property def zywx(self) -> i8vec4: ... @zywx.setter def zywx(self, value: glm_typing.I8Vector4) -> None: ... @property def zwxy(self) -> i8vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.I8Vector4) -> None: ... @property def zwyx(self) -> i8vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.I8Vector4) -> None: ... @property def wxyz(self) -> i8vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.I8Vector4) -> None: ... @property def wxzy(self) -> i8vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.I8Vector4) -> None: ... @property def wyxz(self) -> i8vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.I8Vector4) -> None: ... @property def wyzx(self) -> i8vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.I8Vector4) -> None: ... @property def wzxy(self) -> i8vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.I8Vector4) -> None: ... @property def wzyx(self) -> i8vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.I8Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> i8vec4: ... def __pos__(self) -> i8vec4: ... def __abs__(self) -> i8vec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> i8vec4: ... def __add__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __radd__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __iadd__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __sub__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __rsub__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __isub__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... @overload def __mul__(self, other: glm_typing.Number) -> i8vec4: ... @overload def __mul__(self, other: glm_typing.I8Vector4) -> i8vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> i8vec4: ... @overload def __rmul__(self, other: glm_typing.I8Vector4) -> i8vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> i8vec4: ... @overload def __imul__(self, other: glm_typing.I8Vector4) -> i8vec4: ... def __mod__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __rmod__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __imod__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __pow__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __rpow__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __ipow__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __truediv__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __rtruediv__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __itruediv__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __floordiv__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __rfloordiv__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... def __ifloordiv__(self, other: Union[glm_typing.I8Vector4, glm_typing.Number]) -> i8vec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> i8vec4: ... @overload def __matmul__(self, other: glm_typing.I8Vector4) -> i8vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> i8vec4: ... @overload def __rmatmul__(self, other: glm_typing.I8Vector4) -> i8vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> i8vec4: ... @overload def __imatmul__(self, other: glm_typing.I8Vector4) -> i8vec4: ... def __divmod__(self, other: i8vec4) -> Tuple[i8vec4, i8vec4]: ... class imvec2: x: int y: int @property def xy(self) -> i32vec2: ... @xy.setter def xy(self, value: glm_typing.I32Vector2) -> None: ... @property def yx(self) -> i32vec2: ... @yx.setter def yx(self, value: glm_typing.I32Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.IAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> imvec2: ... def __pos__(self) -> imvec2: ... def __abs__(self) -> imvec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imvec2: ... def __add__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __radd__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __iadd__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __sub__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __rsub__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __isub__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... @overload def __mul__(self, other: glm_typing.Number) -> imvec2: ... @overload def __mul__(self, other: glm_typing.I32Vector2) -> imvec2: ... @overload def __mul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> imvec2: ... @overload def __rmul__(self, other: glm_typing.I32Vector2) -> imvec2: ... @overload def __rmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> imvec2: ... @overload def __imul__(self, other: glm_typing.I32Vector2) -> imvec2: ... @overload def __imul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __rmod__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __imod__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __pow__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __rpow__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __ipow__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __truediv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __rtruediv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __itruediv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __floordiv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __rfloordiv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... def __ifloordiv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> imvec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> imvec2: ... @overload def __matmul__(self, other: glm_typing.I32Vector2) -> imvec2: ... @overload def __matmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> imvec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector2) -> imvec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> imvec2: ... @overload def __imatmul__(self, other: glm_typing.I32Vector2) -> imvec2: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __divmod__(self, other: imvec2) -> Tuple[imvec2, imvec2]: ... class imvec3: x: int y: int z: int @property def xy(self) -> i32vec2: ... @xy.setter def xy(self, value: glm_typing.I32Vector2) -> None: ... @property def yx(self) -> i32vec2: ... @yx.setter def yx(self, value: glm_typing.I32Vector2) -> None: ... @property def xz(self) -> i32vec2: ... @xz.setter def xz(self, value: glm_typing.I32Vector2) -> None: ... @property def zx(self) -> i32vec2: ... @zx.setter def zx(self, value: glm_typing.I32Vector2) -> None: ... @property def yz(self) -> i32vec2: ... @yz.setter def yz(self, value: glm_typing.I32Vector2) -> None: ... @property def zy(self) -> i32vec2: ... @zy.setter def zy(self, value: glm_typing.I32Vector2) -> None: ... @property def xyz(self) -> i32vec3: ... @xyz.setter def xyz(self, value: glm_typing.I32Vector3) -> None: ... @property def xzy(self) -> i32vec3: ... @xzy.setter def xzy(self, value: glm_typing.I32Vector3) -> None: ... @property def yxz(self) -> i32vec3: ... @yxz.setter def yxz(self, value: glm_typing.I32Vector3) -> None: ... @property def yzx(self) -> i32vec3: ... @yzx.setter def yzx(self, value: glm_typing.I32Vector3) -> None: ... @property def zxy(self) -> i32vec3: ... @zxy.setter def zxy(self, value: glm_typing.I32Vector3) -> None: ... @property def zyx(self) -> i32vec3: ... @zyx.setter def zyx(self, value: glm_typing.I32Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> imvec3: ... def __pos__(self) -> imvec3: ... def __abs__(self) -> imvec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imvec3: ... def __add__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __radd__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __iadd__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __sub__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __rsub__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __isub__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... @overload def __mul__(self, other: glm_typing.Number) -> imvec3: ... @overload def __mul__(self, other: glm_typing.I32Vector3) -> imvec3: ... @overload def __mul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> imvec3: ... @overload def __rmul__(self, other: glm_typing.I32Vector3) -> imvec3: ... @overload def __rmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> imvec3: ... @overload def __imul__(self, other: glm_typing.I32Vector3) -> imvec3: ... @overload def __imul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __rmod__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __imod__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __pow__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __rpow__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __ipow__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __truediv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __rtruediv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __itruediv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __floordiv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __rfloordiv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... def __ifloordiv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> imvec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> imvec3: ... @overload def __matmul__(self, other: glm_typing.I32Vector3) -> imvec3: ... @overload def __matmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> imvec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector3) -> imvec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> imvec3: ... @overload def __imatmul__(self, other: glm_typing.I32Vector3) -> imvec3: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __divmod__(self, other: imvec3) -> Tuple[imvec3, imvec3]: ... class imvec4: x: int y: int z: int w: int @property def xy(self) -> i32vec2: ... @xy.setter def xy(self, value: glm_typing.I32Vector2) -> None: ... @property def yx(self) -> i32vec2: ... @yx.setter def yx(self, value: glm_typing.I32Vector2) -> None: ... @property def xz(self) -> i32vec2: ... @xz.setter def xz(self, value: glm_typing.I32Vector2) -> None: ... @property def zx(self) -> i32vec2: ... @zx.setter def zx(self, value: glm_typing.I32Vector2) -> None: ... @property def xw(self) -> i32vec2: ... @xw.setter def xw(self, value: glm_typing.I32Vector2) -> None: ... @property def wx(self) -> i32vec2: ... @wx.setter def wx(self, value: glm_typing.I32Vector2) -> None: ... @property def yz(self) -> i32vec2: ... @yz.setter def yz(self, value: glm_typing.I32Vector2) -> None: ... @property def zy(self) -> i32vec2: ... @zy.setter def zy(self, value: glm_typing.I32Vector2) -> None: ... @property def yw(self) -> i32vec2: ... @yw.setter def yw(self, value: glm_typing.I32Vector2) -> None: ... @property def wy(self) -> i32vec2: ... @wy.setter def wy(self, value: glm_typing.I32Vector2) -> None: ... @property def zw(self) -> i32vec2: ... @zw.setter def zw(self, value: glm_typing.I32Vector2) -> None: ... @property def wz(self) -> i32vec2: ... @wz.setter def wz(self, value: glm_typing.I32Vector2) -> None: ... @property def xyz(self) -> i32vec3: ... @xyz.setter def xyz(self, value: glm_typing.I32Vector3) -> None: ... @property def xzy(self) -> i32vec3: ... @xzy.setter def xzy(self, value: glm_typing.I32Vector3) -> None: ... @property def yxz(self) -> i32vec3: ... @yxz.setter def yxz(self, value: glm_typing.I32Vector3) -> None: ... @property def yzx(self) -> i32vec3: ... @yzx.setter def yzx(self, value: glm_typing.I32Vector3) -> None: ... @property def zxy(self) -> i32vec3: ... @zxy.setter def zxy(self, value: glm_typing.I32Vector3) -> None: ... @property def zyx(self) -> i32vec3: ... @zyx.setter def zyx(self, value: glm_typing.I32Vector3) -> None: ... @property def xyw(self) -> i32vec3: ... @xyw.setter def xyw(self, value: glm_typing.I32Vector3) -> None: ... @property def xwy(self) -> i32vec3: ... @xwy.setter def xwy(self, value: glm_typing.I32Vector3) -> None: ... @property def yxw(self) -> i32vec3: ... @yxw.setter def yxw(self, value: glm_typing.I32Vector3) -> None: ... @property def ywx(self) -> i32vec3: ... @ywx.setter def ywx(self, value: glm_typing.I32Vector3) -> None: ... @property def wxy(self) -> i32vec3: ... @wxy.setter def wxy(self, value: glm_typing.I32Vector3) -> None: ... @property def wyx(self) -> i32vec3: ... @wyx.setter def wyx(self, value: glm_typing.I32Vector3) -> None: ... @property def xzw(self) -> i32vec3: ... @xzw.setter def xzw(self, value: glm_typing.I32Vector3) -> None: ... @property def xwz(self) -> i32vec3: ... @xwz.setter def xwz(self, value: glm_typing.I32Vector3) -> None: ... @property def zxw(self) -> i32vec3: ... @zxw.setter def zxw(self, value: glm_typing.I32Vector3) -> None: ... @property def zwx(self) -> i32vec3: ... @zwx.setter def zwx(self, value: glm_typing.I32Vector3) -> None: ... @property def wxz(self) -> i32vec3: ... @wxz.setter def wxz(self, value: glm_typing.I32Vector3) -> None: ... @property def wzx(self) -> i32vec3: ... @wzx.setter def wzx(self, value: glm_typing.I32Vector3) -> None: ... @property def yzw(self) -> i32vec3: ... @yzw.setter def yzw(self, value: glm_typing.I32Vector3) -> None: ... @property def ywz(self) -> i32vec3: ... @ywz.setter def ywz(self, value: glm_typing.I32Vector3) -> None: ... @property def zyw(self) -> i32vec3: ... @zyw.setter def zyw(self, value: glm_typing.I32Vector3) -> None: ... @property def zwy(self) -> i32vec3: ... @zwy.setter def zwy(self, value: glm_typing.I32Vector3) -> None: ... @property def wyz(self) -> i32vec3: ... @wyz.setter def wyz(self, value: glm_typing.I32Vector3) -> None: ... @property def wzy(self) -> i32vec3: ... @wzy.setter def wzy(self, value: glm_typing.I32Vector3) -> None: ... @property def xyzw(self) -> i32vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.I32Vector4) -> None: ... @property def xywz(self) -> i32vec4: ... @xywz.setter def xywz(self, value: glm_typing.I32Vector4) -> None: ... @property def xzyw(self) -> i32vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.I32Vector4) -> None: ... @property def xzwy(self) -> i32vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.I32Vector4) -> None: ... @property def xwyz(self) -> i32vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.I32Vector4) -> None: ... @property def xwzy(self) -> i32vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.I32Vector4) -> None: ... @property def yxzw(self) -> i32vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.I32Vector4) -> None: ... @property def yxwz(self) -> i32vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.I32Vector4) -> None: ... @property def yzxw(self) -> i32vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.I32Vector4) -> None: ... @property def yzwx(self) -> i32vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.I32Vector4) -> None: ... @property def ywxz(self) -> i32vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.I32Vector4) -> None: ... @property def ywzx(self) -> i32vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.I32Vector4) -> None: ... @property def zxyw(self) -> i32vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.I32Vector4) -> None: ... @property def zxwy(self) -> i32vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.I32Vector4) -> None: ... @property def zyxw(self) -> i32vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.I32Vector4) -> None: ... @property def zywx(self) -> i32vec4: ... @zywx.setter def zywx(self, value: glm_typing.I32Vector4) -> None: ... @property def zwxy(self) -> i32vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.I32Vector4) -> None: ... @property def zwyx(self) -> i32vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.I32Vector4) -> None: ... @property def wxyz(self) -> i32vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.I32Vector4) -> None: ... @property def wxzy(self) -> i32vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.I32Vector4) -> None: ... @property def wyxz(self) -> i32vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.I32Vector4) -> None: ... @property def wyzx(self) -> i32vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.I32Vector4) -> None: ... @property def wzxy(self) -> i32vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.I32Vector4) -> None: ... @property def wzyx(self) -> i32vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.I32Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> imvec4: ... def __pos__(self) -> imvec4: ... def __abs__(self) -> imvec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imvec4: ... def __add__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __radd__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __iadd__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __sub__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __rsub__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __isub__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... @overload def __mul__(self, other: glm_typing.Number) -> imvec4: ... @overload def __mul__(self, other: glm_typing.I32Vector4) -> imvec4: ... @overload def __mul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> imvec4: ... @overload def __rmul__(self, other: glm_typing.I32Vector4) -> imvec4: ... @overload def __rmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> imvec4: ... @overload def __imul__(self, other: glm_typing.I32Vector4) -> imvec4: ... @overload def __imul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __rmod__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __imod__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __pow__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __rpow__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __ipow__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __truediv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __rtruediv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __itruediv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __floordiv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __rfloordiv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... def __ifloordiv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> imvec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> imvec4: ... @overload def __matmul__(self, other: glm_typing.I32Vector4) -> imvec4: ... @overload def __matmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> imvec4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector4) -> imvec4: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> imvec4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector4) -> imvec4: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __divmod__(self, other: imvec4) -> Tuple[imvec4, imvec4]: ... i32vec1 = ivec1 class ivec1: x: int @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.IAnyVector2, glm_typing.IAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> ivec1: ... def __pos__(self) -> ivec1: ... def __abs__(self) -> ivec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> ivec1: ... def __add__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __radd__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __iadd__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __sub__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __rsub__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __isub__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... @overload def __mul__(self, other: glm_typing.Number) -> ivec1: ... @overload def __mul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __mul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> ivec1: ... @overload def __rmul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __rmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> ivec1: ... @overload def __imul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __imul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __rmod__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __imod__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __pow__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __rpow__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __ipow__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __truediv__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __rtruediv__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __itruediv__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __floordiv__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __rfloordiv__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... def __ifloordiv__(self, other: Union[glm_typing.I32Vector1, glm_typing.Number]) -> ivec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> ivec1: ... @overload def __matmul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __matmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> ivec1: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> ivec1: ... @overload def __imatmul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __divmod__(self, other: ivec1) -> Tuple[ivec1, ivec1]: ... i32vec2 = ivec2 class ivec2: x: int y: int @property def xy(self) -> i32vec2: ... @xy.setter def xy(self, value: glm_typing.I32Vector2) -> None: ... @property def yx(self) -> i32vec2: ... @yx.setter def yx(self, value: glm_typing.I32Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.IAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> ivec2: ... def __pos__(self) -> ivec2: ... def __abs__(self) -> ivec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> ivec2: ... def __add__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __radd__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __iadd__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __sub__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __rsub__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __isub__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... @overload def __mul__(self, other: glm_typing.Number) -> ivec2: ... @overload def __mul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __mul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> ivec2: ... @overload def __rmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __rmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> ivec2: ... @overload def __imul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __imul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __rmod__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __imod__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __pow__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __rpow__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __ipow__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __truediv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __rtruediv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __itruediv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __floordiv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __rfloordiv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... def __ifloordiv__(self, other: Union[glm_typing.I32Vector2, glm_typing.Number]) -> ivec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> ivec2: ... @overload def __matmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __matmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> ivec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> ivec2: ... @overload def __imatmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __divmod__(self, other: ivec2) -> Tuple[ivec2, ivec2]: ... i32vec3 = ivec3 class ivec3: x: int y: int z: int @property def xy(self) -> i32vec2: ... @xy.setter def xy(self, value: glm_typing.I32Vector2) -> None: ... @property def yx(self) -> i32vec2: ... @yx.setter def yx(self, value: glm_typing.I32Vector2) -> None: ... @property def xz(self) -> i32vec2: ... @xz.setter def xz(self, value: glm_typing.I32Vector2) -> None: ... @property def zx(self) -> i32vec2: ... @zx.setter def zx(self, value: glm_typing.I32Vector2) -> None: ... @property def yz(self) -> i32vec2: ... @yz.setter def yz(self, value: glm_typing.I32Vector2) -> None: ... @property def zy(self) -> i32vec2: ... @zy.setter def zy(self, value: glm_typing.I32Vector2) -> None: ... @property def xyz(self) -> i32vec3: ... @xyz.setter def xyz(self, value: glm_typing.I32Vector3) -> None: ... @property def xzy(self) -> i32vec3: ... @xzy.setter def xzy(self, value: glm_typing.I32Vector3) -> None: ... @property def yxz(self) -> i32vec3: ... @yxz.setter def yxz(self, value: glm_typing.I32Vector3) -> None: ... @property def yzx(self) -> i32vec3: ... @yzx.setter def yzx(self, value: glm_typing.I32Vector3) -> None: ... @property def zxy(self) -> i32vec3: ... @zxy.setter def zxy(self, value: glm_typing.I32Vector3) -> None: ... @property def zyx(self) -> i32vec3: ... @zyx.setter def zyx(self, value: glm_typing.I32Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.IAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> ivec3: ... def __pos__(self) -> ivec3: ... def __abs__(self) -> ivec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> ivec3: ... def __add__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __radd__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __iadd__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __sub__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __rsub__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __isub__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... @overload def __mul__(self, other: glm_typing.Number) -> ivec3: ... @overload def __mul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __mul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> ivec3: ... @overload def __rmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __rmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> ivec3: ... @overload def __imul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __imul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __rmod__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __imod__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __pow__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __rpow__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __ipow__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __truediv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __rtruediv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __itruediv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __floordiv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __rfloordiv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... def __ifloordiv__(self, other: Union[glm_typing.I32Vector3, glm_typing.Number]) -> ivec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> ivec3: ... @overload def __matmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __matmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> ivec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> ivec3: ... @overload def __imatmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __divmod__(self, other: ivec3) -> Tuple[ivec3, ivec3]: ... i32vec4 = ivec4 class ivec4: x: int y: int z: int w: int @property def xy(self) -> i32vec2: ... @xy.setter def xy(self, value: glm_typing.I32Vector2) -> None: ... @property def yx(self) -> i32vec2: ... @yx.setter def yx(self, value: glm_typing.I32Vector2) -> None: ... @property def xz(self) -> i32vec2: ... @xz.setter def xz(self, value: glm_typing.I32Vector2) -> None: ... @property def zx(self) -> i32vec2: ... @zx.setter def zx(self, value: glm_typing.I32Vector2) -> None: ... @property def xw(self) -> i32vec2: ... @xw.setter def xw(self, value: glm_typing.I32Vector2) -> None: ... @property def wx(self) -> i32vec2: ... @wx.setter def wx(self, value: glm_typing.I32Vector2) -> None: ... @property def yz(self) -> i32vec2: ... @yz.setter def yz(self, value: glm_typing.I32Vector2) -> None: ... @property def zy(self) -> i32vec2: ... @zy.setter def zy(self, value: glm_typing.I32Vector2) -> None: ... @property def yw(self) -> i32vec2: ... @yw.setter def yw(self, value: glm_typing.I32Vector2) -> None: ... @property def wy(self) -> i32vec2: ... @wy.setter def wy(self, value: glm_typing.I32Vector2) -> None: ... @property def zw(self) -> i32vec2: ... @zw.setter def zw(self, value: glm_typing.I32Vector2) -> None: ... @property def wz(self) -> i32vec2: ... @wz.setter def wz(self, value: glm_typing.I32Vector2) -> None: ... @property def xyz(self) -> i32vec3: ... @xyz.setter def xyz(self, value: glm_typing.I32Vector3) -> None: ... @property def xzy(self) -> i32vec3: ... @xzy.setter def xzy(self, value: glm_typing.I32Vector3) -> None: ... @property def yxz(self) -> i32vec3: ... @yxz.setter def yxz(self, value: glm_typing.I32Vector3) -> None: ... @property def yzx(self) -> i32vec3: ... @yzx.setter def yzx(self, value: glm_typing.I32Vector3) -> None: ... @property def zxy(self) -> i32vec3: ... @zxy.setter def zxy(self, value: glm_typing.I32Vector3) -> None: ... @property def zyx(self) -> i32vec3: ... @zyx.setter def zyx(self, value: glm_typing.I32Vector3) -> None: ... @property def xyw(self) -> i32vec3: ... @xyw.setter def xyw(self, value: glm_typing.I32Vector3) -> None: ... @property def xwy(self) -> i32vec3: ... @xwy.setter def xwy(self, value: glm_typing.I32Vector3) -> None: ... @property def yxw(self) -> i32vec3: ... @yxw.setter def yxw(self, value: glm_typing.I32Vector3) -> None: ... @property def ywx(self) -> i32vec3: ... @ywx.setter def ywx(self, value: glm_typing.I32Vector3) -> None: ... @property def wxy(self) -> i32vec3: ... @wxy.setter def wxy(self, value: glm_typing.I32Vector3) -> None: ... @property def wyx(self) -> i32vec3: ... @wyx.setter def wyx(self, value: glm_typing.I32Vector3) -> None: ... @property def xzw(self) -> i32vec3: ... @xzw.setter def xzw(self, value: glm_typing.I32Vector3) -> None: ... @property def xwz(self) -> i32vec3: ... @xwz.setter def xwz(self, value: glm_typing.I32Vector3) -> None: ... @property def zxw(self) -> i32vec3: ... @zxw.setter def zxw(self, value: glm_typing.I32Vector3) -> None: ... @property def zwx(self) -> i32vec3: ... @zwx.setter def zwx(self, value: glm_typing.I32Vector3) -> None: ... @property def wxz(self) -> i32vec3: ... @wxz.setter def wxz(self, value: glm_typing.I32Vector3) -> None: ... @property def wzx(self) -> i32vec3: ... @wzx.setter def wzx(self, value: glm_typing.I32Vector3) -> None: ... @property def yzw(self) -> i32vec3: ... @yzw.setter def yzw(self, value: glm_typing.I32Vector3) -> None: ... @property def ywz(self) -> i32vec3: ... @ywz.setter def ywz(self, value: glm_typing.I32Vector3) -> None: ... @property def zyw(self) -> i32vec3: ... @zyw.setter def zyw(self, value: glm_typing.I32Vector3) -> None: ... @property def zwy(self) -> i32vec3: ... @zwy.setter def zwy(self, value: glm_typing.I32Vector3) -> None: ... @property def wyz(self) -> i32vec3: ... @wyz.setter def wyz(self, value: glm_typing.I32Vector3) -> None: ... @property def wzy(self) -> i32vec3: ... @wzy.setter def wzy(self, value: glm_typing.I32Vector3) -> None: ... @property def xyzw(self) -> i32vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.I32Vector4) -> None: ... @property def xywz(self) -> i32vec4: ... @xywz.setter def xywz(self, value: glm_typing.I32Vector4) -> None: ... @property def xzyw(self) -> i32vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.I32Vector4) -> None: ... @property def xzwy(self) -> i32vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.I32Vector4) -> None: ... @property def xwyz(self) -> i32vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.I32Vector4) -> None: ... @property def xwzy(self) -> i32vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.I32Vector4) -> None: ... @property def yxzw(self) -> i32vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.I32Vector4) -> None: ... @property def yxwz(self) -> i32vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.I32Vector4) -> None: ... @property def yzxw(self) -> i32vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.I32Vector4) -> None: ... @property def yzwx(self) -> i32vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.I32Vector4) -> None: ... @property def ywxz(self) -> i32vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.I32Vector4) -> None: ... @property def ywzx(self) -> i32vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.I32Vector4) -> None: ... @property def zxyw(self) -> i32vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.I32Vector4) -> None: ... @property def zxwy(self) -> i32vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.I32Vector4) -> None: ... @property def zyxw(self) -> i32vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.I32Vector4) -> None: ... @property def zywx(self) -> i32vec4: ... @zywx.setter def zywx(self, value: glm_typing.I32Vector4) -> None: ... @property def zwxy(self) -> i32vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.I32Vector4) -> None: ... @property def zwyx(self) -> i32vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.I32Vector4) -> None: ... @property def wxyz(self) -> i32vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.I32Vector4) -> None: ... @property def wxzy(self) -> i32vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.I32Vector4) -> None: ... @property def wyxz(self) -> i32vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.I32Vector4) -> None: ... @property def wyzx(self) -> i32vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.I32Vector4) -> None: ... @property def wzxy(self) -> i32vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.I32Vector4) -> None: ... @property def wzyx(self) -> i32vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.I32Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> ivec4: ... def __pos__(self) -> ivec4: ... def __abs__(self) -> ivec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> ivec4: ... def __add__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __radd__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __iadd__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __sub__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __rsub__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __isub__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... @overload def __mul__(self, other: glm_typing.Number) -> ivec4: ... @overload def __mul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __mul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> ivec4: ... @overload def __rmul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __rmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> ivec4: ... @overload def __imul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __imul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __rmod__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __imod__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __pow__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __rpow__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __ipow__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __truediv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __rtruediv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __itruediv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __floordiv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __rfloordiv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... def __ifloordiv__(self, other: Union[glm_typing.I32Vector4, glm_typing.Number]) -> ivec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> ivec4: ... @overload def __matmul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __matmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> ivec4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> ivec4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.I32Matrix4x2) -> vec4: ... def __divmod__(self, other: ivec4) -> Tuple[ivec4, ivec4]: ... class mvec2: x: float y: float @property def xy(self) -> f32vec2: ... @xy.setter def xy(self, value: glm_typing.F32Vector2) -> None: ... @property def yx(self) -> f32vec2: ... @yx.setter def yx(self, value: glm_typing.F32Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.FAnyVector3, glm_typing.FAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> mvec2: ... def __pos__(self) -> mvec2: ... def __abs__(self) -> mvec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mvec2: ... def __add__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __radd__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __iadd__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __sub__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __rsub__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __isub__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... @overload def __mul__(self, other: glm_typing.Number) -> mvec2: ... @overload def __mul__(self, other: glm_typing.F32Vector2) -> mvec2: ... @overload def __mul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> mvec2: ... @overload def __rmul__(self, other: glm_typing.F32Vector2) -> mvec2: ... @overload def __rmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> mvec2: ... @overload def __imul__(self, other: glm_typing.F32Vector2) -> mvec2: ... @overload def __imul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __rmod__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __imod__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __pow__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __rpow__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __ipow__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __truediv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __rtruediv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __itruediv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __floordiv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __rfloordiv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... def __ifloordiv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> mvec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> mvec2: ... @overload def __matmul__(self, other: glm_typing.F32Vector2) -> mvec2: ... @overload def __matmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> mvec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector2) -> mvec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> mvec2: ... @overload def __imatmul__(self, other: glm_typing.F32Vector2) -> mvec2: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __divmod__(self, other: mvec2) -> Tuple[mvec2, mvec2]: ... class mvec3: x: float y: float z: float @property def xy(self) -> f32vec2: ... @xy.setter def xy(self, value: glm_typing.F32Vector2) -> None: ... @property def yx(self) -> f32vec2: ... @yx.setter def yx(self, value: glm_typing.F32Vector2) -> None: ... @property def xz(self) -> f32vec2: ... @xz.setter def xz(self, value: glm_typing.F32Vector2) -> None: ... @property def zx(self) -> f32vec2: ... @zx.setter def zx(self, value: glm_typing.F32Vector2) -> None: ... @property def yz(self) -> f32vec2: ... @yz.setter def yz(self, value: glm_typing.F32Vector2) -> None: ... @property def zy(self) -> f32vec2: ... @zy.setter def zy(self, value: glm_typing.F32Vector2) -> None: ... @property def xyz(self) -> f32vec3: ... @xyz.setter def xyz(self, value: glm_typing.F32Vector3) -> None: ... @property def xzy(self) -> f32vec3: ... @xzy.setter def xzy(self, value: glm_typing.F32Vector3) -> None: ... @property def yxz(self) -> f32vec3: ... @yxz.setter def yxz(self, value: glm_typing.F32Vector3) -> None: ... @property def yzx(self) -> f32vec3: ... @yzx.setter def yzx(self, value: glm_typing.F32Vector3) -> None: ... @property def zxy(self) -> f32vec3: ... @zxy.setter def zxy(self, value: glm_typing.F32Vector3) -> None: ... @property def zyx(self) -> f32vec3: ... @zyx.setter def zyx(self, value: glm_typing.F32Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.FAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> mvec3: ... def __pos__(self) -> mvec3: ... def __abs__(self) -> mvec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mvec3: ... def __add__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __radd__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __iadd__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __sub__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __rsub__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __isub__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... @overload def __mul__(self, other: glm_typing.Number) -> mvec3: ... @overload def __mul__(self, other: glm_typing.F32Vector3) -> mvec3: ... @overload def __mul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> mvec3: ... @overload def __rmul__(self, other: glm_typing.F32Vector3) -> mvec3: ... @overload def __rmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> mvec3: ... @overload def __imul__(self, other: glm_typing.F32Vector3) -> mvec3: ... @overload def __imul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __rmod__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __imod__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __pow__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __rpow__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __ipow__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __truediv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __rtruediv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __itruediv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __floordiv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __rfloordiv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... def __ifloordiv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> mvec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> mvec3: ... @overload def __matmul__(self, other: glm_typing.F32Vector3) -> mvec3: ... @overload def __matmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> mvec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector3) -> mvec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> mvec3: ... @overload def __imatmul__(self, other: glm_typing.F32Vector3) -> mvec3: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __divmod__(self, other: mvec3) -> Tuple[mvec3, mvec3]: ... class mvec4: x: float y: float z: float w: float @property def xy(self) -> f32vec2: ... @xy.setter def xy(self, value: glm_typing.F32Vector2) -> None: ... @property def yx(self) -> f32vec2: ... @yx.setter def yx(self, value: glm_typing.F32Vector2) -> None: ... @property def xz(self) -> f32vec2: ... @xz.setter def xz(self, value: glm_typing.F32Vector2) -> None: ... @property def zx(self) -> f32vec2: ... @zx.setter def zx(self, value: glm_typing.F32Vector2) -> None: ... @property def xw(self) -> f32vec2: ... @xw.setter def xw(self, value: glm_typing.F32Vector2) -> None: ... @property def wx(self) -> f32vec2: ... @wx.setter def wx(self, value: glm_typing.F32Vector2) -> None: ... @property def yz(self) -> f32vec2: ... @yz.setter def yz(self, value: glm_typing.F32Vector2) -> None: ... @property def zy(self) -> f32vec2: ... @zy.setter def zy(self, value: glm_typing.F32Vector2) -> None: ... @property def yw(self) -> f32vec2: ... @yw.setter def yw(self, value: glm_typing.F32Vector2) -> None: ... @property def wy(self) -> f32vec2: ... @wy.setter def wy(self, value: glm_typing.F32Vector2) -> None: ... @property def zw(self) -> f32vec2: ... @zw.setter def zw(self, value: glm_typing.F32Vector2) -> None: ... @property def wz(self) -> f32vec2: ... @wz.setter def wz(self, value: glm_typing.F32Vector2) -> None: ... @property def xyz(self) -> f32vec3: ... @xyz.setter def xyz(self, value: glm_typing.F32Vector3) -> None: ... @property def xzy(self) -> f32vec3: ... @xzy.setter def xzy(self, value: glm_typing.F32Vector3) -> None: ... @property def yxz(self) -> f32vec3: ... @yxz.setter def yxz(self, value: glm_typing.F32Vector3) -> None: ... @property def yzx(self) -> f32vec3: ... @yzx.setter def yzx(self, value: glm_typing.F32Vector3) -> None: ... @property def zxy(self) -> f32vec3: ... @zxy.setter def zxy(self, value: glm_typing.F32Vector3) -> None: ... @property def zyx(self) -> f32vec3: ... @zyx.setter def zyx(self, value: glm_typing.F32Vector3) -> None: ... @property def xyw(self) -> f32vec3: ... @xyw.setter def xyw(self, value: glm_typing.F32Vector3) -> None: ... @property def xwy(self) -> f32vec3: ... @xwy.setter def xwy(self, value: glm_typing.F32Vector3) -> None: ... @property def yxw(self) -> f32vec3: ... @yxw.setter def yxw(self, value: glm_typing.F32Vector3) -> None: ... @property def ywx(self) -> f32vec3: ... @ywx.setter def ywx(self, value: glm_typing.F32Vector3) -> None: ... @property def wxy(self) -> f32vec3: ... @wxy.setter def wxy(self, value: glm_typing.F32Vector3) -> None: ... @property def wyx(self) -> f32vec3: ... @wyx.setter def wyx(self, value: glm_typing.F32Vector3) -> None: ... @property def xzw(self) -> f32vec3: ... @xzw.setter def xzw(self, value: glm_typing.F32Vector3) -> None: ... @property def xwz(self) -> f32vec3: ... @xwz.setter def xwz(self, value: glm_typing.F32Vector3) -> None: ... @property def zxw(self) -> f32vec3: ... @zxw.setter def zxw(self, value: glm_typing.F32Vector3) -> None: ... @property def zwx(self) -> f32vec3: ... @zwx.setter def zwx(self, value: glm_typing.F32Vector3) -> None: ... @property def wxz(self) -> f32vec3: ... @wxz.setter def wxz(self, value: glm_typing.F32Vector3) -> None: ... @property def wzx(self) -> f32vec3: ... @wzx.setter def wzx(self, value: glm_typing.F32Vector3) -> None: ... @property def yzw(self) -> f32vec3: ... @yzw.setter def yzw(self, value: glm_typing.F32Vector3) -> None: ... @property def ywz(self) -> f32vec3: ... @ywz.setter def ywz(self, value: glm_typing.F32Vector3) -> None: ... @property def zyw(self) -> f32vec3: ... @zyw.setter def zyw(self, value: glm_typing.F32Vector3) -> None: ... @property def zwy(self) -> f32vec3: ... @zwy.setter def zwy(self, value: glm_typing.F32Vector3) -> None: ... @property def wyz(self) -> f32vec3: ... @wyz.setter def wyz(self, value: glm_typing.F32Vector3) -> None: ... @property def wzy(self) -> f32vec3: ... @wzy.setter def wzy(self, value: glm_typing.F32Vector3) -> None: ... @property def xyzw(self) -> f32vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.F32Vector4) -> None: ... @property def xywz(self) -> f32vec4: ... @xywz.setter def xywz(self, value: glm_typing.F32Vector4) -> None: ... @property def xzyw(self) -> f32vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.F32Vector4) -> None: ... @property def xzwy(self) -> f32vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.F32Vector4) -> None: ... @property def xwyz(self) -> f32vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.F32Vector4) -> None: ... @property def xwzy(self) -> f32vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.F32Vector4) -> None: ... @property def yxzw(self) -> f32vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.F32Vector4) -> None: ... @property def yxwz(self) -> f32vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.F32Vector4) -> None: ... @property def yzxw(self) -> f32vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.F32Vector4) -> None: ... @property def yzwx(self) -> f32vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.F32Vector4) -> None: ... @property def ywxz(self) -> f32vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.F32Vector4) -> None: ... @property def ywzx(self) -> f32vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.F32Vector4) -> None: ... @property def zxyw(self) -> f32vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.F32Vector4) -> None: ... @property def zxwy(self) -> f32vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.F32Vector4) -> None: ... @property def zyxw(self) -> f32vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.F32Vector4) -> None: ... @property def zywx(self) -> f32vec4: ... @zywx.setter def zywx(self, value: glm_typing.F32Vector4) -> None: ... @property def zwxy(self) -> f32vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.F32Vector4) -> None: ... @property def zwyx(self) -> f32vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.F32Vector4) -> None: ... @property def wxyz(self) -> f32vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.F32Vector4) -> None: ... @property def wxzy(self) -> f32vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.F32Vector4) -> None: ... @property def wyxz(self) -> f32vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.F32Vector4) -> None: ... @property def wyzx(self) -> f32vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.F32Vector4) -> None: ... @property def wzxy(self) -> f32vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.F32Vector4) -> None: ... @property def wzyx(self) -> f32vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.F32Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> mvec4: ... def __pos__(self) -> mvec4: ... def __abs__(self) -> mvec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float, float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mvec4: ... def __add__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __radd__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __iadd__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __sub__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __rsub__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __isub__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... @overload def __mul__(self, other: glm_typing.Number) -> mvec4: ... @overload def __mul__(self, other: glm_typing.F32Vector4) -> mvec4: ... @overload def __mul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> mvec4: ... @overload def __rmul__(self, other: glm_typing.F32Vector4) -> mvec4: ... @overload def __rmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> mvec4: ... @overload def __imul__(self, other: glm_typing.F32Vector4) -> mvec4: ... @overload def __imul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __rmod__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __imod__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __pow__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __rpow__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __ipow__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __truediv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __rtruediv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __itruediv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __floordiv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __rfloordiv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... def __ifloordiv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> mvec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> mvec4: ... @overload def __matmul__(self, other: glm_typing.F32Vector4) -> mvec4: ... @overload def __matmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> mvec4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector4) -> mvec4: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> mvec4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector4) -> mvec4: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __divmod__(self, other: mvec4) -> Tuple[mvec4, mvec4]: ... class u16vec1: x: int @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.UAnyVector2, glm_typing.UAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u16vec1: ... def __pos__(self) -> u16vec1: ... def __abs__(self) -> u16vec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u16vec1: ... def __add__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __radd__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __iadd__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __sub__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __rsub__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __isub__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... @overload def __mul__(self, other: glm_typing.Number) -> u16vec1: ... @overload def __mul__(self, other: glm_typing.U16Vector1) -> u16vec1: ... @overload def __rmul__(self, other: glm_typing.Number) -> u16vec1: ... @overload def __rmul__(self, other: glm_typing.U16Vector1) -> u16vec1: ... @overload def __imul__(self, other: glm_typing.Number) -> u16vec1: ... @overload def __imul__(self, other: glm_typing.U16Vector1) -> u16vec1: ... def __mod__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __rmod__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __imod__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __pow__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __rpow__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __ipow__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __truediv__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __rtruediv__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __itruediv__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __floordiv__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __rfloordiv__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... def __ifloordiv__(self, other: Union[glm_typing.U16Vector1, glm_typing.Number]) -> u16vec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> u16vec1: ... @overload def __matmul__(self, other: glm_typing.U16Vector1) -> u16vec1: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u16vec1: ... @overload def __rmatmul__(self, other: glm_typing.U16Vector1) -> u16vec1: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u16vec1: ... @overload def __imatmul__(self, other: glm_typing.U16Vector1) -> u16vec1: ... def __divmod__(self, other: u16vec1) -> Tuple[u16vec1, u16vec1]: ... class u16vec2: x: int y: int @property def xy(self) -> u16vec2: ... @xy.setter def xy(self, value: glm_typing.U16Vector2) -> None: ... @property def yx(self) -> u16vec2: ... @yx.setter def yx(self, value: glm_typing.U16Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.UAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u16vec2: ... def __pos__(self) -> u16vec2: ... def __abs__(self) -> u16vec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u16vec2: ... def __add__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __radd__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __iadd__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __sub__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __rsub__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __isub__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... @overload def __mul__(self, other: glm_typing.Number) -> u16vec2: ... @overload def __mul__(self, other: glm_typing.U16Vector2) -> u16vec2: ... @overload def __rmul__(self, other: glm_typing.Number) -> u16vec2: ... @overload def __rmul__(self, other: glm_typing.U16Vector2) -> u16vec2: ... @overload def __imul__(self, other: glm_typing.Number) -> u16vec2: ... @overload def __imul__(self, other: glm_typing.U16Vector2) -> u16vec2: ... def __mod__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __rmod__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __imod__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __pow__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __rpow__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __ipow__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __truediv__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __rtruediv__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __itruediv__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __floordiv__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __rfloordiv__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... def __ifloordiv__(self, other: Union[glm_typing.U16Vector2, glm_typing.Number]) -> u16vec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> u16vec2: ... @overload def __matmul__(self, other: glm_typing.U16Vector2) -> u16vec2: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u16vec2: ... @overload def __rmatmul__(self, other: glm_typing.U16Vector2) -> u16vec2: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u16vec2: ... @overload def __imatmul__(self, other: glm_typing.U16Vector2) -> u16vec2: ... def __divmod__(self, other: u16vec2) -> Tuple[u16vec2, u16vec2]: ... class u16vec3: x: int y: int z: int @property def xy(self) -> u16vec2: ... @xy.setter def xy(self, value: glm_typing.U16Vector2) -> None: ... @property def yx(self) -> u16vec2: ... @yx.setter def yx(self, value: glm_typing.U16Vector2) -> None: ... @property def xz(self) -> u16vec2: ... @xz.setter def xz(self, value: glm_typing.U16Vector2) -> None: ... @property def zx(self) -> u16vec2: ... @zx.setter def zx(self, value: glm_typing.U16Vector2) -> None: ... @property def yz(self) -> u16vec2: ... @yz.setter def yz(self, value: glm_typing.U16Vector2) -> None: ... @property def zy(self) -> u16vec2: ... @zy.setter def zy(self, value: glm_typing.U16Vector2) -> None: ... @property def xyz(self) -> u16vec3: ... @xyz.setter def xyz(self, value: glm_typing.U16Vector3) -> None: ... @property def xzy(self) -> u16vec3: ... @xzy.setter def xzy(self, value: glm_typing.U16Vector3) -> None: ... @property def yxz(self) -> u16vec3: ... @yxz.setter def yxz(self, value: glm_typing.U16Vector3) -> None: ... @property def yzx(self) -> u16vec3: ... @yzx.setter def yzx(self, value: glm_typing.U16Vector3) -> None: ... @property def zxy(self) -> u16vec3: ... @zxy.setter def zxy(self, value: glm_typing.U16Vector3) -> None: ... @property def zyx(self) -> u16vec3: ... @zyx.setter def zyx(self, value: glm_typing.U16Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u16vec3: ... def __pos__(self) -> u16vec3: ... def __abs__(self) -> u16vec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u16vec3: ... def __add__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __radd__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __iadd__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __sub__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __rsub__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __isub__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... @overload def __mul__(self, other: glm_typing.Number) -> u16vec3: ... @overload def __mul__(self, other: glm_typing.U16Vector3) -> u16vec3: ... @overload def __rmul__(self, other: glm_typing.Number) -> u16vec3: ... @overload def __rmul__(self, other: glm_typing.U16Vector3) -> u16vec3: ... @overload def __imul__(self, other: glm_typing.Number) -> u16vec3: ... @overload def __imul__(self, other: glm_typing.U16Vector3) -> u16vec3: ... def __mod__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __rmod__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __imod__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __pow__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __rpow__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __ipow__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __truediv__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __rtruediv__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __itruediv__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __floordiv__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __rfloordiv__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... def __ifloordiv__(self, other: Union[glm_typing.U16Vector3, glm_typing.Number]) -> u16vec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> u16vec3: ... @overload def __matmul__(self, other: glm_typing.U16Vector3) -> u16vec3: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u16vec3: ... @overload def __rmatmul__(self, other: glm_typing.U16Vector3) -> u16vec3: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u16vec3: ... @overload def __imatmul__(self, other: glm_typing.U16Vector3) -> u16vec3: ... def __divmod__(self, other: u16vec3) -> Tuple[u16vec3, u16vec3]: ... class u16vec4: x: int y: int z: int w: int @property def xy(self) -> u16vec2: ... @xy.setter def xy(self, value: glm_typing.U16Vector2) -> None: ... @property def yx(self) -> u16vec2: ... @yx.setter def yx(self, value: glm_typing.U16Vector2) -> None: ... @property def xz(self) -> u16vec2: ... @xz.setter def xz(self, value: glm_typing.U16Vector2) -> None: ... @property def zx(self) -> u16vec2: ... @zx.setter def zx(self, value: glm_typing.U16Vector2) -> None: ... @property def xw(self) -> u16vec2: ... @xw.setter def xw(self, value: glm_typing.U16Vector2) -> None: ... @property def wx(self) -> u16vec2: ... @wx.setter def wx(self, value: glm_typing.U16Vector2) -> None: ... @property def yz(self) -> u16vec2: ... @yz.setter def yz(self, value: glm_typing.U16Vector2) -> None: ... @property def zy(self) -> u16vec2: ... @zy.setter def zy(self, value: glm_typing.U16Vector2) -> None: ... @property def yw(self) -> u16vec2: ... @yw.setter def yw(self, value: glm_typing.U16Vector2) -> None: ... @property def wy(self) -> u16vec2: ... @wy.setter def wy(self, value: glm_typing.U16Vector2) -> None: ... @property def zw(self) -> u16vec2: ... @zw.setter def zw(self, value: glm_typing.U16Vector2) -> None: ... @property def wz(self) -> u16vec2: ... @wz.setter def wz(self, value: glm_typing.U16Vector2) -> None: ... @property def xyz(self) -> u16vec3: ... @xyz.setter def xyz(self, value: glm_typing.U16Vector3) -> None: ... @property def xzy(self) -> u16vec3: ... @xzy.setter def xzy(self, value: glm_typing.U16Vector3) -> None: ... @property def yxz(self) -> u16vec3: ... @yxz.setter def yxz(self, value: glm_typing.U16Vector3) -> None: ... @property def yzx(self) -> u16vec3: ... @yzx.setter def yzx(self, value: glm_typing.U16Vector3) -> None: ... @property def zxy(self) -> u16vec3: ... @zxy.setter def zxy(self, value: glm_typing.U16Vector3) -> None: ... @property def zyx(self) -> u16vec3: ... @zyx.setter def zyx(self, value: glm_typing.U16Vector3) -> None: ... @property def xyw(self) -> u16vec3: ... @xyw.setter def xyw(self, value: glm_typing.U16Vector3) -> None: ... @property def xwy(self) -> u16vec3: ... @xwy.setter def xwy(self, value: glm_typing.U16Vector3) -> None: ... @property def yxw(self) -> u16vec3: ... @yxw.setter def yxw(self, value: glm_typing.U16Vector3) -> None: ... @property def ywx(self) -> u16vec3: ... @ywx.setter def ywx(self, value: glm_typing.U16Vector3) -> None: ... @property def wxy(self) -> u16vec3: ... @wxy.setter def wxy(self, value: glm_typing.U16Vector3) -> None: ... @property def wyx(self) -> u16vec3: ... @wyx.setter def wyx(self, value: glm_typing.U16Vector3) -> None: ... @property def xzw(self) -> u16vec3: ... @xzw.setter def xzw(self, value: glm_typing.U16Vector3) -> None: ... @property def xwz(self) -> u16vec3: ... @xwz.setter def xwz(self, value: glm_typing.U16Vector3) -> None: ... @property def zxw(self) -> u16vec3: ... @zxw.setter def zxw(self, value: glm_typing.U16Vector3) -> None: ... @property def zwx(self) -> u16vec3: ... @zwx.setter def zwx(self, value: glm_typing.U16Vector3) -> None: ... @property def wxz(self) -> u16vec3: ... @wxz.setter def wxz(self, value: glm_typing.U16Vector3) -> None: ... @property def wzx(self) -> u16vec3: ... @wzx.setter def wzx(self, value: glm_typing.U16Vector3) -> None: ... @property def yzw(self) -> u16vec3: ... @yzw.setter def yzw(self, value: glm_typing.U16Vector3) -> None: ... @property def ywz(self) -> u16vec3: ... @ywz.setter def ywz(self, value: glm_typing.U16Vector3) -> None: ... @property def zyw(self) -> u16vec3: ... @zyw.setter def zyw(self, value: glm_typing.U16Vector3) -> None: ... @property def zwy(self) -> u16vec3: ... @zwy.setter def zwy(self, value: glm_typing.U16Vector3) -> None: ... @property def wyz(self) -> u16vec3: ... @wyz.setter def wyz(self, value: glm_typing.U16Vector3) -> None: ... @property def wzy(self) -> u16vec3: ... @wzy.setter def wzy(self, value: glm_typing.U16Vector3) -> None: ... @property def xyzw(self) -> u16vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.U16Vector4) -> None: ... @property def xywz(self) -> u16vec4: ... @xywz.setter def xywz(self, value: glm_typing.U16Vector4) -> None: ... @property def xzyw(self) -> u16vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.U16Vector4) -> None: ... @property def xzwy(self) -> u16vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.U16Vector4) -> None: ... @property def xwyz(self) -> u16vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.U16Vector4) -> None: ... @property def xwzy(self) -> u16vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.U16Vector4) -> None: ... @property def yxzw(self) -> u16vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.U16Vector4) -> None: ... @property def yxwz(self) -> u16vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.U16Vector4) -> None: ... @property def yzxw(self) -> u16vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.U16Vector4) -> None: ... @property def yzwx(self) -> u16vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.U16Vector4) -> None: ... @property def ywxz(self) -> u16vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.U16Vector4) -> None: ... @property def ywzx(self) -> u16vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.U16Vector4) -> None: ... @property def zxyw(self) -> u16vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.U16Vector4) -> None: ... @property def zxwy(self) -> u16vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.U16Vector4) -> None: ... @property def zyxw(self) -> u16vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.U16Vector4) -> None: ... @property def zywx(self) -> u16vec4: ... @zywx.setter def zywx(self, value: glm_typing.U16Vector4) -> None: ... @property def zwxy(self) -> u16vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.U16Vector4) -> None: ... @property def zwyx(self) -> u16vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.U16Vector4) -> None: ... @property def wxyz(self) -> u16vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.U16Vector4) -> None: ... @property def wxzy(self) -> u16vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.U16Vector4) -> None: ... @property def wyxz(self) -> u16vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.U16Vector4) -> None: ... @property def wyzx(self) -> u16vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.U16Vector4) -> None: ... @property def wzxy(self) -> u16vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.U16Vector4) -> None: ... @property def wzyx(self) -> u16vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.U16Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u16vec4: ... def __pos__(self) -> u16vec4: ... def __abs__(self) -> u16vec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u16vec4: ... def __add__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __radd__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __iadd__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __sub__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __rsub__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __isub__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... @overload def __mul__(self, other: glm_typing.Number) -> u16vec4: ... @overload def __mul__(self, other: glm_typing.U16Vector4) -> u16vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> u16vec4: ... @overload def __rmul__(self, other: glm_typing.U16Vector4) -> u16vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> u16vec4: ... @overload def __imul__(self, other: glm_typing.U16Vector4) -> u16vec4: ... def __mod__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __rmod__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __imod__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __pow__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __rpow__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __ipow__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __truediv__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __rtruediv__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __itruediv__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __floordiv__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __rfloordiv__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... def __ifloordiv__(self, other: Union[glm_typing.U16Vector4, glm_typing.Number]) -> u16vec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> u16vec4: ... @overload def __matmul__(self, other: glm_typing.U16Vector4) -> u16vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u16vec4: ... @overload def __rmatmul__(self, other: glm_typing.U16Vector4) -> u16vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u16vec4: ... @overload def __imatmul__(self, other: glm_typing.U16Vector4) -> u16vec4: ... def __divmod__(self, other: u16vec4) -> Tuple[u16vec4, u16vec4]: ... class u64vec1: x: int @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.UAnyVector2, glm_typing.UAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u64vec1: ... def __pos__(self) -> u64vec1: ... def __abs__(self) -> u64vec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u64vec1: ... def __add__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __radd__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __iadd__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __sub__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __rsub__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __isub__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... @overload def __mul__(self, other: glm_typing.Number) -> u64vec1: ... @overload def __mul__(self, other: glm_typing.U64Vector1) -> u64vec1: ... @overload def __rmul__(self, other: glm_typing.Number) -> u64vec1: ... @overload def __rmul__(self, other: glm_typing.U64Vector1) -> u64vec1: ... @overload def __imul__(self, other: glm_typing.Number) -> u64vec1: ... @overload def __imul__(self, other: glm_typing.U64Vector1) -> u64vec1: ... def __mod__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __rmod__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __imod__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __pow__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __rpow__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __ipow__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __truediv__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __rtruediv__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __itruediv__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __floordiv__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __rfloordiv__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... def __ifloordiv__(self, other: Union[glm_typing.U64Vector1, glm_typing.Number]) -> u64vec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> u64vec1: ... @overload def __matmul__(self, other: glm_typing.U64Vector1) -> u64vec1: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u64vec1: ... @overload def __rmatmul__(self, other: glm_typing.U64Vector1) -> u64vec1: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u64vec1: ... @overload def __imatmul__(self, other: glm_typing.U64Vector1) -> u64vec1: ... def __divmod__(self, other: u64vec1) -> Tuple[u64vec1, u64vec1]: ... class u64vec2: x: int y: int @property def xy(self) -> u64vec2: ... @xy.setter def xy(self, value: glm_typing.U64Vector2) -> None: ... @property def yx(self) -> u64vec2: ... @yx.setter def yx(self, value: glm_typing.U64Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.UAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u64vec2: ... def __pos__(self) -> u64vec2: ... def __abs__(self) -> u64vec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u64vec2: ... def __add__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __radd__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __iadd__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __sub__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __rsub__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __isub__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... @overload def __mul__(self, other: glm_typing.Number) -> u64vec2: ... @overload def __mul__(self, other: glm_typing.U64Vector2) -> u64vec2: ... @overload def __rmul__(self, other: glm_typing.Number) -> u64vec2: ... @overload def __rmul__(self, other: glm_typing.U64Vector2) -> u64vec2: ... @overload def __imul__(self, other: glm_typing.Number) -> u64vec2: ... @overload def __imul__(self, other: glm_typing.U64Vector2) -> u64vec2: ... def __mod__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __rmod__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __imod__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __pow__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __rpow__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __ipow__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __truediv__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __rtruediv__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __itruediv__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __floordiv__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __rfloordiv__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... def __ifloordiv__(self, other: Union[glm_typing.U64Vector2, glm_typing.Number]) -> u64vec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> u64vec2: ... @overload def __matmul__(self, other: glm_typing.U64Vector2) -> u64vec2: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u64vec2: ... @overload def __rmatmul__(self, other: glm_typing.U64Vector2) -> u64vec2: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u64vec2: ... @overload def __imatmul__(self, other: glm_typing.U64Vector2) -> u64vec2: ... def __divmod__(self, other: u64vec2) -> Tuple[u64vec2, u64vec2]: ... class u64vec3: x: int y: int z: int @property def xy(self) -> u64vec2: ... @xy.setter def xy(self, value: glm_typing.U64Vector2) -> None: ... @property def yx(self) -> u64vec2: ... @yx.setter def yx(self, value: glm_typing.U64Vector2) -> None: ... @property def xz(self) -> u64vec2: ... @xz.setter def xz(self, value: glm_typing.U64Vector2) -> None: ... @property def zx(self) -> u64vec2: ... @zx.setter def zx(self, value: glm_typing.U64Vector2) -> None: ... @property def yz(self) -> u64vec2: ... @yz.setter def yz(self, value: glm_typing.U64Vector2) -> None: ... @property def zy(self) -> u64vec2: ... @zy.setter def zy(self, value: glm_typing.U64Vector2) -> None: ... @property def xyz(self) -> u64vec3: ... @xyz.setter def xyz(self, value: glm_typing.U64Vector3) -> None: ... @property def xzy(self) -> u64vec3: ... @xzy.setter def xzy(self, value: glm_typing.U64Vector3) -> None: ... @property def yxz(self) -> u64vec3: ... @yxz.setter def yxz(self, value: glm_typing.U64Vector3) -> None: ... @property def yzx(self) -> u64vec3: ... @yzx.setter def yzx(self, value: glm_typing.U64Vector3) -> None: ... @property def zxy(self) -> u64vec3: ... @zxy.setter def zxy(self, value: glm_typing.U64Vector3) -> None: ... @property def zyx(self) -> u64vec3: ... @zyx.setter def zyx(self, value: glm_typing.U64Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u64vec3: ... def __pos__(self) -> u64vec3: ... def __abs__(self) -> u64vec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u64vec3: ... def __add__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __radd__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __iadd__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __sub__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __rsub__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __isub__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... @overload def __mul__(self, other: glm_typing.Number) -> u64vec3: ... @overload def __mul__(self, other: glm_typing.U64Vector3) -> u64vec3: ... @overload def __rmul__(self, other: glm_typing.Number) -> u64vec3: ... @overload def __rmul__(self, other: glm_typing.U64Vector3) -> u64vec3: ... @overload def __imul__(self, other: glm_typing.Number) -> u64vec3: ... @overload def __imul__(self, other: glm_typing.U64Vector3) -> u64vec3: ... def __mod__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __rmod__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __imod__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __pow__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __rpow__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __ipow__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __truediv__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __rtruediv__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __itruediv__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __floordiv__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __rfloordiv__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... def __ifloordiv__(self, other: Union[glm_typing.U64Vector3, glm_typing.Number]) -> u64vec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> u64vec3: ... @overload def __matmul__(self, other: glm_typing.U64Vector3) -> u64vec3: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u64vec3: ... @overload def __rmatmul__(self, other: glm_typing.U64Vector3) -> u64vec3: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u64vec3: ... @overload def __imatmul__(self, other: glm_typing.U64Vector3) -> u64vec3: ... def __divmod__(self, other: u64vec3) -> Tuple[u64vec3, u64vec3]: ... class u64vec4: x: int y: int z: int w: int @property def xy(self) -> u64vec2: ... @xy.setter def xy(self, value: glm_typing.U64Vector2) -> None: ... @property def yx(self) -> u64vec2: ... @yx.setter def yx(self, value: glm_typing.U64Vector2) -> None: ... @property def xz(self) -> u64vec2: ... @xz.setter def xz(self, value: glm_typing.U64Vector2) -> None: ... @property def zx(self) -> u64vec2: ... @zx.setter def zx(self, value: glm_typing.U64Vector2) -> None: ... @property def xw(self) -> u64vec2: ... @xw.setter def xw(self, value: glm_typing.U64Vector2) -> None: ... @property def wx(self) -> u64vec2: ... @wx.setter def wx(self, value: glm_typing.U64Vector2) -> None: ... @property def yz(self) -> u64vec2: ... @yz.setter def yz(self, value: glm_typing.U64Vector2) -> None: ... @property def zy(self) -> u64vec2: ... @zy.setter def zy(self, value: glm_typing.U64Vector2) -> None: ... @property def yw(self) -> u64vec2: ... @yw.setter def yw(self, value: glm_typing.U64Vector2) -> None: ... @property def wy(self) -> u64vec2: ... @wy.setter def wy(self, value: glm_typing.U64Vector2) -> None: ... @property def zw(self) -> u64vec2: ... @zw.setter def zw(self, value: glm_typing.U64Vector2) -> None: ... @property def wz(self) -> u64vec2: ... @wz.setter def wz(self, value: glm_typing.U64Vector2) -> None: ... @property def xyz(self) -> u64vec3: ... @xyz.setter def xyz(self, value: glm_typing.U64Vector3) -> None: ... @property def xzy(self) -> u64vec3: ... @xzy.setter def xzy(self, value: glm_typing.U64Vector3) -> None: ... @property def yxz(self) -> u64vec3: ... @yxz.setter def yxz(self, value: glm_typing.U64Vector3) -> None: ... @property def yzx(self) -> u64vec3: ... @yzx.setter def yzx(self, value: glm_typing.U64Vector3) -> None: ... @property def zxy(self) -> u64vec3: ... @zxy.setter def zxy(self, value: glm_typing.U64Vector3) -> None: ... @property def zyx(self) -> u64vec3: ... @zyx.setter def zyx(self, value: glm_typing.U64Vector3) -> None: ... @property def xyw(self) -> u64vec3: ... @xyw.setter def xyw(self, value: glm_typing.U64Vector3) -> None: ... @property def xwy(self) -> u64vec3: ... @xwy.setter def xwy(self, value: glm_typing.U64Vector3) -> None: ... @property def yxw(self) -> u64vec3: ... @yxw.setter def yxw(self, value: glm_typing.U64Vector3) -> None: ... @property def ywx(self) -> u64vec3: ... @ywx.setter def ywx(self, value: glm_typing.U64Vector3) -> None: ... @property def wxy(self) -> u64vec3: ... @wxy.setter def wxy(self, value: glm_typing.U64Vector3) -> None: ... @property def wyx(self) -> u64vec3: ... @wyx.setter def wyx(self, value: glm_typing.U64Vector3) -> None: ... @property def xzw(self) -> u64vec3: ... @xzw.setter def xzw(self, value: glm_typing.U64Vector3) -> None: ... @property def xwz(self) -> u64vec3: ... @xwz.setter def xwz(self, value: glm_typing.U64Vector3) -> None: ... @property def zxw(self) -> u64vec3: ... @zxw.setter def zxw(self, value: glm_typing.U64Vector3) -> None: ... @property def zwx(self) -> u64vec3: ... @zwx.setter def zwx(self, value: glm_typing.U64Vector3) -> None: ... @property def wxz(self) -> u64vec3: ... @wxz.setter def wxz(self, value: glm_typing.U64Vector3) -> None: ... @property def wzx(self) -> u64vec3: ... @wzx.setter def wzx(self, value: glm_typing.U64Vector3) -> None: ... @property def yzw(self) -> u64vec3: ... @yzw.setter def yzw(self, value: glm_typing.U64Vector3) -> None: ... @property def ywz(self) -> u64vec3: ... @ywz.setter def ywz(self, value: glm_typing.U64Vector3) -> None: ... @property def zyw(self) -> u64vec3: ... @zyw.setter def zyw(self, value: glm_typing.U64Vector3) -> None: ... @property def zwy(self) -> u64vec3: ... @zwy.setter def zwy(self, value: glm_typing.U64Vector3) -> None: ... @property def wyz(self) -> u64vec3: ... @wyz.setter def wyz(self, value: glm_typing.U64Vector3) -> None: ... @property def wzy(self) -> u64vec3: ... @wzy.setter def wzy(self, value: glm_typing.U64Vector3) -> None: ... @property def xyzw(self) -> u64vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.U64Vector4) -> None: ... @property def xywz(self) -> u64vec4: ... @xywz.setter def xywz(self, value: glm_typing.U64Vector4) -> None: ... @property def xzyw(self) -> u64vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.U64Vector4) -> None: ... @property def xzwy(self) -> u64vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.U64Vector4) -> None: ... @property def xwyz(self) -> u64vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.U64Vector4) -> None: ... @property def xwzy(self) -> u64vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.U64Vector4) -> None: ... @property def yxzw(self) -> u64vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.U64Vector4) -> None: ... @property def yxwz(self) -> u64vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.U64Vector4) -> None: ... @property def yzxw(self) -> u64vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.U64Vector4) -> None: ... @property def yzwx(self) -> u64vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.U64Vector4) -> None: ... @property def ywxz(self) -> u64vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.U64Vector4) -> None: ... @property def ywzx(self) -> u64vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.U64Vector4) -> None: ... @property def zxyw(self) -> u64vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.U64Vector4) -> None: ... @property def zxwy(self) -> u64vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.U64Vector4) -> None: ... @property def zyxw(self) -> u64vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.U64Vector4) -> None: ... @property def zywx(self) -> u64vec4: ... @zywx.setter def zywx(self, value: glm_typing.U64Vector4) -> None: ... @property def zwxy(self) -> u64vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.U64Vector4) -> None: ... @property def zwyx(self) -> u64vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.U64Vector4) -> None: ... @property def wxyz(self) -> u64vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.U64Vector4) -> None: ... @property def wxzy(self) -> u64vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.U64Vector4) -> None: ... @property def wyxz(self) -> u64vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.U64Vector4) -> None: ... @property def wyzx(self) -> u64vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.U64Vector4) -> None: ... @property def wzxy(self) -> u64vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.U64Vector4) -> None: ... @property def wzyx(self) -> u64vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.U64Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u64vec4: ... def __pos__(self) -> u64vec4: ... def __abs__(self) -> u64vec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u64vec4: ... def __add__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __radd__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __iadd__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __sub__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __rsub__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __isub__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... @overload def __mul__(self, other: glm_typing.Number) -> u64vec4: ... @overload def __mul__(self, other: glm_typing.U64Vector4) -> u64vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> u64vec4: ... @overload def __rmul__(self, other: glm_typing.U64Vector4) -> u64vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> u64vec4: ... @overload def __imul__(self, other: glm_typing.U64Vector4) -> u64vec4: ... def __mod__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __rmod__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __imod__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __pow__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __rpow__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __ipow__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __truediv__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __rtruediv__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __itruediv__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __floordiv__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __rfloordiv__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... def __ifloordiv__(self, other: Union[glm_typing.U64Vector4, glm_typing.Number]) -> u64vec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> u64vec4: ... @overload def __matmul__(self, other: glm_typing.U64Vector4) -> u64vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u64vec4: ... @overload def __rmatmul__(self, other: glm_typing.U64Vector4) -> u64vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u64vec4: ... @overload def __imatmul__(self, other: glm_typing.U64Vector4) -> u64vec4: ... def __divmod__(self, other: u64vec4) -> Tuple[u64vec4, u64vec4]: ... class u8vec1: x: int @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.UAnyVector2, glm_typing.UAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u8vec1: ... def __pos__(self) -> u8vec1: ... def __abs__(self) -> u8vec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u8vec1: ... def __add__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __radd__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __iadd__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __sub__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __rsub__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __isub__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... @overload def __mul__(self, other: glm_typing.Number) -> u8vec1: ... @overload def __mul__(self, other: glm_typing.U8Vector1) -> u8vec1: ... @overload def __rmul__(self, other: glm_typing.Number) -> u8vec1: ... @overload def __rmul__(self, other: glm_typing.U8Vector1) -> u8vec1: ... @overload def __imul__(self, other: glm_typing.Number) -> u8vec1: ... @overload def __imul__(self, other: glm_typing.U8Vector1) -> u8vec1: ... def __mod__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __rmod__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __imod__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __pow__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __rpow__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __ipow__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __truediv__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __rtruediv__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __itruediv__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __floordiv__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __rfloordiv__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... def __ifloordiv__(self, other: Union[glm_typing.U8Vector1, glm_typing.Number]) -> u8vec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> u8vec1: ... @overload def __matmul__(self, other: glm_typing.U8Vector1) -> u8vec1: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u8vec1: ... @overload def __rmatmul__(self, other: glm_typing.U8Vector1) -> u8vec1: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u8vec1: ... @overload def __imatmul__(self, other: glm_typing.U8Vector1) -> u8vec1: ... def __divmod__(self, other: u8vec1) -> Tuple[u8vec1, u8vec1]: ... class u8vec2: x: int y: int @property def xy(self) -> u8vec2: ... @xy.setter def xy(self, value: glm_typing.U8Vector2) -> None: ... @property def yx(self) -> u8vec2: ... @yx.setter def yx(self, value: glm_typing.U8Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.UAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u8vec2: ... def __pos__(self) -> u8vec2: ... def __abs__(self) -> u8vec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u8vec2: ... def __add__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __radd__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __iadd__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __sub__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __rsub__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __isub__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... @overload def __mul__(self, other: glm_typing.Number) -> u8vec2: ... @overload def __mul__(self, other: glm_typing.U8Vector2) -> u8vec2: ... @overload def __rmul__(self, other: glm_typing.Number) -> u8vec2: ... @overload def __rmul__(self, other: glm_typing.U8Vector2) -> u8vec2: ... @overload def __imul__(self, other: glm_typing.Number) -> u8vec2: ... @overload def __imul__(self, other: glm_typing.U8Vector2) -> u8vec2: ... def __mod__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __rmod__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __imod__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __pow__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __rpow__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __ipow__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __truediv__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __rtruediv__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __itruediv__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __floordiv__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __rfloordiv__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... def __ifloordiv__(self, other: Union[glm_typing.U8Vector2, glm_typing.Number]) -> u8vec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> u8vec2: ... @overload def __matmul__(self, other: glm_typing.U8Vector2) -> u8vec2: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u8vec2: ... @overload def __rmatmul__(self, other: glm_typing.U8Vector2) -> u8vec2: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u8vec2: ... @overload def __imatmul__(self, other: glm_typing.U8Vector2) -> u8vec2: ... def __divmod__(self, other: u8vec2) -> Tuple[u8vec2, u8vec2]: ... class u8vec3: x: int y: int z: int @property def xy(self) -> u8vec2: ... @xy.setter def xy(self, value: glm_typing.U8Vector2) -> None: ... @property def yx(self) -> u8vec2: ... @yx.setter def yx(self, value: glm_typing.U8Vector2) -> None: ... @property def xz(self) -> u8vec2: ... @xz.setter def xz(self, value: glm_typing.U8Vector2) -> None: ... @property def zx(self) -> u8vec2: ... @zx.setter def zx(self, value: glm_typing.U8Vector2) -> None: ... @property def yz(self) -> u8vec2: ... @yz.setter def yz(self, value: glm_typing.U8Vector2) -> None: ... @property def zy(self) -> u8vec2: ... @zy.setter def zy(self, value: glm_typing.U8Vector2) -> None: ... @property def xyz(self) -> u8vec3: ... @xyz.setter def xyz(self, value: glm_typing.U8Vector3) -> None: ... @property def xzy(self) -> u8vec3: ... @xzy.setter def xzy(self, value: glm_typing.U8Vector3) -> None: ... @property def yxz(self) -> u8vec3: ... @yxz.setter def yxz(self, value: glm_typing.U8Vector3) -> None: ... @property def yzx(self) -> u8vec3: ... @yzx.setter def yzx(self, value: glm_typing.U8Vector3) -> None: ... @property def zxy(self) -> u8vec3: ... @zxy.setter def zxy(self, value: glm_typing.U8Vector3) -> None: ... @property def zyx(self) -> u8vec3: ... @zyx.setter def zyx(self, value: glm_typing.U8Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u8vec3: ... def __pos__(self) -> u8vec3: ... def __abs__(self) -> u8vec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u8vec3: ... def __add__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __radd__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __iadd__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __sub__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __rsub__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __isub__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... @overload def __mul__(self, other: glm_typing.Number) -> u8vec3: ... @overload def __mul__(self, other: glm_typing.U8Vector3) -> u8vec3: ... @overload def __rmul__(self, other: glm_typing.Number) -> u8vec3: ... @overload def __rmul__(self, other: glm_typing.U8Vector3) -> u8vec3: ... @overload def __imul__(self, other: glm_typing.Number) -> u8vec3: ... @overload def __imul__(self, other: glm_typing.U8Vector3) -> u8vec3: ... def __mod__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __rmod__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __imod__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __pow__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __rpow__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __ipow__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __truediv__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __rtruediv__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __itruediv__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __floordiv__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __rfloordiv__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... def __ifloordiv__(self, other: Union[glm_typing.U8Vector3, glm_typing.Number]) -> u8vec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> u8vec3: ... @overload def __matmul__(self, other: glm_typing.U8Vector3) -> u8vec3: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u8vec3: ... @overload def __rmatmul__(self, other: glm_typing.U8Vector3) -> u8vec3: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u8vec3: ... @overload def __imatmul__(self, other: glm_typing.U8Vector3) -> u8vec3: ... def __divmod__(self, other: u8vec3) -> Tuple[u8vec3, u8vec3]: ... class u8vec4: x: int y: int z: int w: int @property def xy(self) -> u8vec2: ... @xy.setter def xy(self, value: glm_typing.U8Vector2) -> None: ... @property def yx(self) -> u8vec2: ... @yx.setter def yx(self, value: glm_typing.U8Vector2) -> None: ... @property def xz(self) -> u8vec2: ... @xz.setter def xz(self, value: glm_typing.U8Vector2) -> None: ... @property def zx(self) -> u8vec2: ... @zx.setter def zx(self, value: glm_typing.U8Vector2) -> None: ... @property def xw(self) -> u8vec2: ... @xw.setter def xw(self, value: glm_typing.U8Vector2) -> None: ... @property def wx(self) -> u8vec2: ... @wx.setter def wx(self, value: glm_typing.U8Vector2) -> None: ... @property def yz(self) -> u8vec2: ... @yz.setter def yz(self, value: glm_typing.U8Vector2) -> None: ... @property def zy(self) -> u8vec2: ... @zy.setter def zy(self, value: glm_typing.U8Vector2) -> None: ... @property def yw(self) -> u8vec2: ... @yw.setter def yw(self, value: glm_typing.U8Vector2) -> None: ... @property def wy(self) -> u8vec2: ... @wy.setter def wy(self, value: glm_typing.U8Vector2) -> None: ... @property def zw(self) -> u8vec2: ... @zw.setter def zw(self, value: glm_typing.U8Vector2) -> None: ... @property def wz(self) -> u8vec2: ... @wz.setter def wz(self, value: glm_typing.U8Vector2) -> None: ... @property def xyz(self) -> u8vec3: ... @xyz.setter def xyz(self, value: glm_typing.U8Vector3) -> None: ... @property def xzy(self) -> u8vec3: ... @xzy.setter def xzy(self, value: glm_typing.U8Vector3) -> None: ... @property def yxz(self) -> u8vec3: ... @yxz.setter def yxz(self, value: glm_typing.U8Vector3) -> None: ... @property def yzx(self) -> u8vec3: ... @yzx.setter def yzx(self, value: glm_typing.U8Vector3) -> None: ... @property def zxy(self) -> u8vec3: ... @zxy.setter def zxy(self, value: glm_typing.U8Vector3) -> None: ... @property def zyx(self) -> u8vec3: ... @zyx.setter def zyx(self, value: glm_typing.U8Vector3) -> None: ... @property def xyw(self) -> u8vec3: ... @xyw.setter def xyw(self, value: glm_typing.U8Vector3) -> None: ... @property def xwy(self) -> u8vec3: ... @xwy.setter def xwy(self, value: glm_typing.U8Vector3) -> None: ... @property def yxw(self) -> u8vec3: ... @yxw.setter def yxw(self, value: glm_typing.U8Vector3) -> None: ... @property def ywx(self) -> u8vec3: ... @ywx.setter def ywx(self, value: glm_typing.U8Vector3) -> None: ... @property def wxy(self) -> u8vec3: ... @wxy.setter def wxy(self, value: glm_typing.U8Vector3) -> None: ... @property def wyx(self) -> u8vec3: ... @wyx.setter def wyx(self, value: glm_typing.U8Vector3) -> None: ... @property def xzw(self) -> u8vec3: ... @xzw.setter def xzw(self, value: glm_typing.U8Vector3) -> None: ... @property def xwz(self) -> u8vec3: ... @xwz.setter def xwz(self, value: glm_typing.U8Vector3) -> None: ... @property def zxw(self) -> u8vec3: ... @zxw.setter def zxw(self, value: glm_typing.U8Vector3) -> None: ... @property def zwx(self) -> u8vec3: ... @zwx.setter def zwx(self, value: glm_typing.U8Vector3) -> None: ... @property def wxz(self) -> u8vec3: ... @wxz.setter def wxz(self, value: glm_typing.U8Vector3) -> None: ... @property def wzx(self) -> u8vec3: ... @wzx.setter def wzx(self, value: glm_typing.U8Vector3) -> None: ... @property def yzw(self) -> u8vec3: ... @yzw.setter def yzw(self, value: glm_typing.U8Vector3) -> None: ... @property def ywz(self) -> u8vec3: ... @ywz.setter def ywz(self, value: glm_typing.U8Vector3) -> None: ... @property def zyw(self) -> u8vec3: ... @zyw.setter def zyw(self, value: glm_typing.U8Vector3) -> None: ... @property def zwy(self) -> u8vec3: ... @zwy.setter def zwy(self, value: glm_typing.U8Vector3) -> None: ... @property def wyz(self) -> u8vec3: ... @wyz.setter def wyz(self, value: glm_typing.U8Vector3) -> None: ... @property def wzy(self) -> u8vec3: ... @wzy.setter def wzy(self, value: glm_typing.U8Vector3) -> None: ... @property def xyzw(self) -> u8vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.U8Vector4) -> None: ... @property def xywz(self) -> u8vec4: ... @xywz.setter def xywz(self, value: glm_typing.U8Vector4) -> None: ... @property def xzyw(self) -> u8vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.U8Vector4) -> None: ... @property def xzwy(self) -> u8vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.U8Vector4) -> None: ... @property def xwyz(self) -> u8vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.U8Vector4) -> None: ... @property def xwzy(self) -> u8vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.U8Vector4) -> None: ... @property def yxzw(self) -> u8vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.U8Vector4) -> None: ... @property def yxwz(self) -> u8vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.U8Vector4) -> None: ... @property def yzxw(self) -> u8vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.U8Vector4) -> None: ... @property def yzwx(self) -> u8vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.U8Vector4) -> None: ... @property def ywxz(self) -> u8vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.U8Vector4) -> None: ... @property def ywzx(self) -> u8vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.U8Vector4) -> None: ... @property def zxyw(self) -> u8vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.U8Vector4) -> None: ... @property def zxwy(self) -> u8vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.U8Vector4) -> None: ... @property def zyxw(self) -> u8vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.U8Vector4) -> None: ... @property def zywx(self) -> u8vec4: ... @zywx.setter def zywx(self, value: glm_typing.U8Vector4) -> None: ... @property def zwxy(self) -> u8vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.U8Vector4) -> None: ... @property def zwyx(self) -> u8vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.U8Vector4) -> None: ... @property def wxyz(self) -> u8vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.U8Vector4) -> None: ... @property def wxzy(self) -> u8vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.U8Vector4) -> None: ... @property def wyxz(self) -> u8vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.U8Vector4) -> None: ... @property def wyzx(self) -> u8vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.U8Vector4) -> None: ... @property def wzxy(self) -> u8vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.U8Vector4) -> None: ... @property def wzyx(self) -> u8vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.U8Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> u8vec4: ... def __pos__(self) -> u8vec4: ... def __abs__(self) -> u8vec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> u8vec4: ... def __add__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __radd__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __iadd__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __sub__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __rsub__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __isub__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... @overload def __mul__(self, other: glm_typing.Number) -> u8vec4: ... @overload def __mul__(self, other: glm_typing.U8Vector4) -> u8vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> u8vec4: ... @overload def __rmul__(self, other: glm_typing.U8Vector4) -> u8vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> u8vec4: ... @overload def __imul__(self, other: glm_typing.U8Vector4) -> u8vec4: ... def __mod__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __rmod__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __imod__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __pow__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __rpow__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __ipow__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __truediv__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __rtruediv__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __itruediv__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __floordiv__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __rfloordiv__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... def __ifloordiv__(self, other: Union[glm_typing.U8Vector4, glm_typing.Number]) -> u8vec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> u8vec4: ... @overload def __matmul__(self, other: glm_typing.U8Vector4) -> u8vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> u8vec4: ... @overload def __rmatmul__(self, other: glm_typing.U8Vector4) -> u8vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> u8vec4: ... @overload def __imatmul__(self, other: glm_typing.U8Vector4) -> u8vec4: ... def __divmod__(self, other: u8vec4) -> Tuple[u8vec4, u8vec4]: ... class umvec2: x: int y: int @property def xy(self) -> u32vec2: ... @xy.setter def xy(self, value: glm_typing.U32Vector2) -> None: ... @property def yx(self) -> u32vec2: ... @yx.setter def yx(self, value: glm_typing.U32Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.UAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> umvec2: ... def __pos__(self) -> umvec2: ... def __abs__(self) -> umvec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umvec2: ... def __add__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __radd__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __iadd__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __sub__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __rsub__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __isub__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... @overload def __mul__(self, other: glm_typing.Number) -> umvec2: ... @overload def __mul__(self, other: glm_typing.U32Vector2) -> umvec2: ... @overload def __mul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> umvec2: ... @overload def __rmul__(self, other: glm_typing.U32Vector2) -> umvec2: ... @overload def __rmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> umvec2: ... @overload def __imul__(self, other: glm_typing.U32Vector2) -> umvec2: ... @overload def __imul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __rmod__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __imod__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __pow__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __rpow__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __ipow__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __truediv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __rtruediv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __itruediv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __floordiv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __rfloordiv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... def __ifloordiv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> umvec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> umvec2: ... @overload def __matmul__(self, other: glm_typing.U32Vector2) -> umvec2: ... @overload def __matmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> umvec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector2) -> umvec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> umvec2: ... @overload def __imatmul__(self, other: glm_typing.U32Vector2) -> umvec2: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __divmod__(self, other: umvec2) -> Tuple[umvec2, umvec2]: ... class umvec3: x: int y: int z: int @property def xy(self) -> u32vec2: ... @xy.setter def xy(self, value: glm_typing.U32Vector2) -> None: ... @property def yx(self) -> u32vec2: ... @yx.setter def yx(self, value: glm_typing.U32Vector2) -> None: ... @property def xz(self) -> u32vec2: ... @xz.setter def xz(self, value: glm_typing.U32Vector2) -> None: ... @property def zx(self) -> u32vec2: ... @zx.setter def zx(self, value: glm_typing.U32Vector2) -> None: ... @property def yz(self) -> u32vec2: ... @yz.setter def yz(self, value: glm_typing.U32Vector2) -> None: ... @property def zy(self) -> u32vec2: ... @zy.setter def zy(self, value: glm_typing.U32Vector2) -> None: ... @property def xyz(self) -> u32vec3: ... @xyz.setter def xyz(self, value: glm_typing.U32Vector3) -> None: ... @property def xzy(self) -> u32vec3: ... @xzy.setter def xzy(self, value: glm_typing.U32Vector3) -> None: ... @property def yxz(self) -> u32vec3: ... @yxz.setter def yxz(self, value: glm_typing.U32Vector3) -> None: ... @property def yzx(self) -> u32vec3: ... @yzx.setter def yzx(self, value: glm_typing.U32Vector3) -> None: ... @property def zxy(self) -> u32vec3: ... @zxy.setter def zxy(self, value: glm_typing.U32Vector3) -> None: ... @property def zyx(self) -> u32vec3: ... @zyx.setter def zyx(self, value: glm_typing.U32Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> umvec3: ... def __pos__(self) -> umvec3: ... def __abs__(self) -> umvec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umvec3: ... def __add__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __radd__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __iadd__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __sub__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __rsub__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __isub__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... @overload def __mul__(self, other: glm_typing.Number) -> umvec3: ... @overload def __mul__(self, other: glm_typing.U32Vector3) -> umvec3: ... @overload def __mul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> umvec3: ... @overload def __rmul__(self, other: glm_typing.U32Vector3) -> umvec3: ... @overload def __rmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> umvec3: ... @overload def __imul__(self, other: glm_typing.U32Vector3) -> umvec3: ... @overload def __imul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __rmod__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __imod__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __pow__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __rpow__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __ipow__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __truediv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __rtruediv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __itruediv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __floordiv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __rfloordiv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... def __ifloordiv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> umvec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> umvec3: ... @overload def __matmul__(self, other: glm_typing.U32Vector3) -> umvec3: ... @overload def __matmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> umvec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector3) -> umvec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> umvec3: ... @overload def __imatmul__(self, other: glm_typing.U32Vector3) -> umvec3: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __divmod__(self, other: umvec3) -> Tuple[umvec3, umvec3]: ... class umvec4: x: int y: int z: int w: int @property def xy(self) -> u32vec2: ... @xy.setter def xy(self, value: glm_typing.U32Vector2) -> None: ... @property def yx(self) -> u32vec2: ... @yx.setter def yx(self, value: glm_typing.U32Vector2) -> None: ... @property def xz(self) -> u32vec2: ... @xz.setter def xz(self, value: glm_typing.U32Vector2) -> None: ... @property def zx(self) -> u32vec2: ... @zx.setter def zx(self, value: glm_typing.U32Vector2) -> None: ... @property def xw(self) -> u32vec2: ... @xw.setter def xw(self, value: glm_typing.U32Vector2) -> None: ... @property def wx(self) -> u32vec2: ... @wx.setter def wx(self, value: glm_typing.U32Vector2) -> None: ... @property def yz(self) -> u32vec2: ... @yz.setter def yz(self, value: glm_typing.U32Vector2) -> None: ... @property def zy(self) -> u32vec2: ... @zy.setter def zy(self, value: glm_typing.U32Vector2) -> None: ... @property def yw(self) -> u32vec2: ... @yw.setter def yw(self, value: glm_typing.U32Vector2) -> None: ... @property def wy(self) -> u32vec2: ... @wy.setter def wy(self, value: glm_typing.U32Vector2) -> None: ... @property def zw(self) -> u32vec2: ... @zw.setter def zw(self, value: glm_typing.U32Vector2) -> None: ... @property def wz(self) -> u32vec2: ... @wz.setter def wz(self, value: glm_typing.U32Vector2) -> None: ... @property def xyz(self) -> u32vec3: ... @xyz.setter def xyz(self, value: glm_typing.U32Vector3) -> None: ... @property def xzy(self) -> u32vec3: ... @xzy.setter def xzy(self, value: glm_typing.U32Vector3) -> None: ... @property def yxz(self) -> u32vec3: ... @yxz.setter def yxz(self, value: glm_typing.U32Vector3) -> None: ... @property def yzx(self) -> u32vec3: ... @yzx.setter def yzx(self, value: glm_typing.U32Vector3) -> None: ... @property def zxy(self) -> u32vec3: ... @zxy.setter def zxy(self, value: glm_typing.U32Vector3) -> None: ... @property def zyx(self) -> u32vec3: ... @zyx.setter def zyx(self, value: glm_typing.U32Vector3) -> None: ... @property def xyw(self) -> u32vec3: ... @xyw.setter def xyw(self, value: glm_typing.U32Vector3) -> None: ... @property def xwy(self) -> u32vec3: ... @xwy.setter def xwy(self, value: glm_typing.U32Vector3) -> None: ... @property def yxw(self) -> u32vec3: ... @yxw.setter def yxw(self, value: glm_typing.U32Vector3) -> None: ... @property def ywx(self) -> u32vec3: ... @ywx.setter def ywx(self, value: glm_typing.U32Vector3) -> None: ... @property def wxy(self) -> u32vec3: ... @wxy.setter def wxy(self, value: glm_typing.U32Vector3) -> None: ... @property def wyx(self) -> u32vec3: ... @wyx.setter def wyx(self, value: glm_typing.U32Vector3) -> None: ... @property def xzw(self) -> u32vec3: ... @xzw.setter def xzw(self, value: glm_typing.U32Vector3) -> None: ... @property def xwz(self) -> u32vec3: ... @xwz.setter def xwz(self, value: glm_typing.U32Vector3) -> None: ... @property def zxw(self) -> u32vec3: ... @zxw.setter def zxw(self, value: glm_typing.U32Vector3) -> None: ... @property def zwx(self) -> u32vec3: ... @zwx.setter def zwx(self, value: glm_typing.U32Vector3) -> None: ... @property def wxz(self) -> u32vec3: ... @wxz.setter def wxz(self, value: glm_typing.U32Vector3) -> None: ... @property def wzx(self) -> u32vec3: ... @wzx.setter def wzx(self, value: glm_typing.U32Vector3) -> None: ... @property def yzw(self) -> u32vec3: ... @yzw.setter def yzw(self, value: glm_typing.U32Vector3) -> None: ... @property def ywz(self) -> u32vec3: ... @ywz.setter def ywz(self, value: glm_typing.U32Vector3) -> None: ... @property def zyw(self) -> u32vec3: ... @zyw.setter def zyw(self, value: glm_typing.U32Vector3) -> None: ... @property def zwy(self) -> u32vec3: ... @zwy.setter def zwy(self, value: glm_typing.U32Vector3) -> None: ... @property def wyz(self) -> u32vec3: ... @wyz.setter def wyz(self, value: glm_typing.U32Vector3) -> None: ... @property def wzy(self) -> u32vec3: ... @wzy.setter def wzy(self, value: glm_typing.U32Vector3) -> None: ... @property def xyzw(self) -> u32vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.U32Vector4) -> None: ... @property def xywz(self) -> u32vec4: ... @xywz.setter def xywz(self, value: glm_typing.U32Vector4) -> None: ... @property def xzyw(self) -> u32vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.U32Vector4) -> None: ... @property def xzwy(self) -> u32vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.U32Vector4) -> None: ... @property def xwyz(self) -> u32vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.U32Vector4) -> None: ... @property def xwzy(self) -> u32vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.U32Vector4) -> None: ... @property def yxzw(self) -> u32vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.U32Vector4) -> None: ... @property def yxwz(self) -> u32vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.U32Vector4) -> None: ... @property def yzxw(self) -> u32vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.U32Vector4) -> None: ... @property def yzwx(self) -> u32vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.U32Vector4) -> None: ... @property def ywxz(self) -> u32vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.U32Vector4) -> None: ... @property def ywzx(self) -> u32vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.U32Vector4) -> None: ... @property def zxyw(self) -> u32vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.U32Vector4) -> None: ... @property def zxwy(self) -> u32vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.U32Vector4) -> None: ... @property def zyxw(self) -> u32vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.U32Vector4) -> None: ... @property def zywx(self) -> u32vec4: ... @zywx.setter def zywx(self, value: glm_typing.U32Vector4) -> None: ... @property def zwxy(self) -> u32vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.U32Vector4) -> None: ... @property def zwyx(self) -> u32vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.U32Vector4) -> None: ... @property def wxyz(self) -> u32vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.U32Vector4) -> None: ... @property def wxzy(self) -> u32vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.U32Vector4) -> None: ... @property def wyxz(self) -> u32vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.U32Vector4) -> None: ... @property def wyzx(self) -> u32vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.U32Vector4) -> None: ... @property def wzxy(self) -> u32vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.U32Vector4) -> None: ... @property def wzyx(self) -> u32vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.U32Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> umvec4: ... def __pos__(self) -> umvec4: ... def __abs__(self) -> umvec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umvec4: ... def __add__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __radd__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __iadd__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __sub__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __rsub__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __isub__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... @overload def __mul__(self, other: glm_typing.Number) -> umvec4: ... @overload def __mul__(self, other: glm_typing.U32Vector4) -> umvec4: ... @overload def __mul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> umvec4: ... @overload def __rmul__(self, other: glm_typing.U32Vector4) -> umvec4: ... @overload def __rmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> umvec4: ... @overload def __imul__(self, other: glm_typing.U32Vector4) -> umvec4: ... @overload def __imul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __rmod__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __imod__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __pow__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __rpow__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __ipow__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __truediv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __rtruediv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __itruediv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __floordiv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __rfloordiv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... def __ifloordiv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> umvec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> umvec4: ... @overload def __matmul__(self, other: glm_typing.U32Vector4) -> umvec4: ... @overload def __matmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> umvec4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector4) -> umvec4: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> umvec4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector4) -> umvec4: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __divmod__(self, other: umvec4) -> Tuple[umvec4, umvec4]: ... u32vec1 = uvec1 class uvec1: x: int @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.UAnyVector2, glm_typing.UAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> uvec1: ... def __pos__(self) -> uvec1: ... def __abs__(self) -> uvec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> uvec1: ... def __add__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __radd__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __iadd__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __sub__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __rsub__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __isub__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... @overload def __mul__(self, other: glm_typing.Number) -> uvec1: ... @overload def __mul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __mul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> uvec1: ... @overload def __rmul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __rmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> uvec1: ... @overload def __imul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __imul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __rmod__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __imod__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __pow__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __rpow__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __ipow__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __truediv__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __rtruediv__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __itruediv__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __floordiv__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __rfloordiv__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... def __ifloordiv__(self, other: Union[glm_typing.U32Vector1, glm_typing.Number]) -> uvec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> uvec1: ... @overload def __matmul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __matmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> uvec1: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> uvec1: ... @overload def __imatmul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __divmod__(self, other: uvec1) -> Tuple[uvec1, uvec1]: ... u32vec2 = uvec2 class uvec2: x: int y: int @property def xy(self) -> u32vec2: ... @xy.setter def xy(self, value: glm_typing.U32Vector2) -> None: ... @property def yx(self) -> u32vec2: ... @yx.setter def yx(self, value: glm_typing.U32Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.UAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> uvec2: ... def __pos__(self) -> uvec2: ... def __abs__(self) -> uvec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> uvec2: ... def __add__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __radd__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __iadd__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __sub__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __rsub__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __isub__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... @overload def __mul__(self, other: glm_typing.Number) -> uvec2: ... @overload def __mul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __mul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> uvec2: ... @overload def __rmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __rmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> uvec2: ... @overload def __imul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __imul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __rmod__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __imod__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __pow__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __rpow__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __ipow__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __truediv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __rtruediv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __itruediv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __floordiv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __rfloordiv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... def __ifloordiv__(self, other: Union[glm_typing.U32Vector2, glm_typing.Number]) -> uvec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> uvec2: ... @overload def __matmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __matmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> uvec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> uvec2: ... @overload def __imatmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __divmod__(self, other: uvec2) -> Tuple[uvec2, uvec2]: ... u32vec3 = uvec3 class uvec3: x: int y: int z: int @property def xy(self) -> u32vec2: ... @xy.setter def xy(self, value: glm_typing.U32Vector2) -> None: ... @property def yx(self) -> u32vec2: ... @yx.setter def yx(self, value: glm_typing.U32Vector2) -> None: ... @property def xz(self) -> u32vec2: ... @xz.setter def xz(self, value: glm_typing.U32Vector2) -> None: ... @property def zx(self) -> u32vec2: ... @zx.setter def zx(self, value: glm_typing.U32Vector2) -> None: ... @property def yz(self) -> u32vec2: ... @yz.setter def yz(self, value: glm_typing.U32Vector2) -> None: ... @property def zy(self) -> u32vec2: ... @zy.setter def zy(self, value: glm_typing.U32Vector2) -> None: ... @property def xyz(self) -> u32vec3: ... @xyz.setter def xyz(self, value: glm_typing.U32Vector3) -> None: ... @property def xzy(self) -> u32vec3: ... @xzy.setter def xzy(self, value: glm_typing.U32Vector3) -> None: ... @property def yxz(self) -> u32vec3: ... @yxz.setter def yxz(self, value: glm_typing.U32Vector3) -> None: ... @property def yzx(self) -> u32vec3: ... @yzx.setter def yzx(self, value: glm_typing.U32Vector3) -> None: ... @property def zxy(self) -> u32vec3: ... @zxy.setter def zxy(self, value: glm_typing.U32Vector3) -> None: ... @property def zyx(self) -> u32vec3: ... @zyx.setter def zyx(self, value: glm_typing.U32Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.UAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> uvec3: ... def __pos__(self) -> uvec3: ... def __abs__(self) -> uvec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> uvec3: ... def __add__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __radd__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __iadd__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __sub__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __rsub__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __isub__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... @overload def __mul__(self, other: glm_typing.Number) -> uvec3: ... @overload def __mul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __mul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> uvec3: ... @overload def __rmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __rmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> uvec3: ... @overload def __imul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __imul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __rmod__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __imod__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __pow__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __rpow__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __ipow__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __truediv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __rtruediv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __itruediv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __floordiv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __rfloordiv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... def __ifloordiv__(self, other: Union[glm_typing.U32Vector3, glm_typing.Number]) -> uvec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> uvec3: ... @overload def __matmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __matmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> uvec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> uvec3: ... @overload def __imatmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __divmod__(self, other: uvec3) -> Tuple[uvec3, uvec3]: ... u32vec4 = uvec4 class uvec4: x: int y: int z: int w: int @property def xy(self) -> u32vec2: ... @xy.setter def xy(self, value: glm_typing.U32Vector2) -> None: ... @property def yx(self) -> u32vec2: ... @yx.setter def yx(self, value: glm_typing.U32Vector2) -> None: ... @property def xz(self) -> u32vec2: ... @xz.setter def xz(self, value: glm_typing.U32Vector2) -> None: ... @property def zx(self) -> u32vec2: ... @zx.setter def zx(self, value: glm_typing.U32Vector2) -> None: ... @property def xw(self) -> u32vec2: ... @xw.setter def xw(self, value: glm_typing.U32Vector2) -> None: ... @property def wx(self) -> u32vec2: ... @wx.setter def wx(self, value: glm_typing.U32Vector2) -> None: ... @property def yz(self) -> u32vec2: ... @yz.setter def yz(self, value: glm_typing.U32Vector2) -> None: ... @property def zy(self) -> u32vec2: ... @zy.setter def zy(self, value: glm_typing.U32Vector2) -> None: ... @property def yw(self) -> u32vec2: ... @yw.setter def yw(self, value: glm_typing.U32Vector2) -> None: ... @property def wy(self) -> u32vec2: ... @wy.setter def wy(self, value: glm_typing.U32Vector2) -> None: ... @property def zw(self) -> u32vec2: ... @zw.setter def zw(self, value: glm_typing.U32Vector2) -> None: ... @property def wz(self) -> u32vec2: ... @wz.setter def wz(self, value: glm_typing.U32Vector2) -> None: ... @property def xyz(self) -> u32vec3: ... @xyz.setter def xyz(self, value: glm_typing.U32Vector3) -> None: ... @property def xzy(self) -> u32vec3: ... @xzy.setter def xzy(self, value: glm_typing.U32Vector3) -> None: ... @property def yxz(self) -> u32vec3: ... @yxz.setter def yxz(self, value: glm_typing.U32Vector3) -> None: ... @property def yzx(self) -> u32vec3: ... @yzx.setter def yzx(self, value: glm_typing.U32Vector3) -> None: ... @property def zxy(self) -> u32vec3: ... @zxy.setter def zxy(self, value: glm_typing.U32Vector3) -> None: ... @property def zyx(self) -> u32vec3: ... @zyx.setter def zyx(self, value: glm_typing.U32Vector3) -> None: ... @property def xyw(self) -> u32vec3: ... @xyw.setter def xyw(self, value: glm_typing.U32Vector3) -> None: ... @property def xwy(self) -> u32vec3: ... @xwy.setter def xwy(self, value: glm_typing.U32Vector3) -> None: ... @property def yxw(self) -> u32vec3: ... @yxw.setter def yxw(self, value: glm_typing.U32Vector3) -> None: ... @property def ywx(self) -> u32vec3: ... @ywx.setter def ywx(self, value: glm_typing.U32Vector3) -> None: ... @property def wxy(self) -> u32vec3: ... @wxy.setter def wxy(self, value: glm_typing.U32Vector3) -> None: ... @property def wyx(self) -> u32vec3: ... @wyx.setter def wyx(self, value: glm_typing.U32Vector3) -> None: ... @property def xzw(self) -> u32vec3: ... @xzw.setter def xzw(self, value: glm_typing.U32Vector3) -> None: ... @property def xwz(self) -> u32vec3: ... @xwz.setter def xwz(self, value: glm_typing.U32Vector3) -> None: ... @property def zxw(self) -> u32vec3: ... @zxw.setter def zxw(self, value: glm_typing.U32Vector3) -> None: ... @property def zwx(self) -> u32vec3: ... @zwx.setter def zwx(self, value: glm_typing.U32Vector3) -> None: ... @property def wxz(self) -> u32vec3: ... @wxz.setter def wxz(self, value: glm_typing.U32Vector3) -> None: ... @property def wzx(self) -> u32vec3: ... @wzx.setter def wzx(self, value: glm_typing.U32Vector3) -> None: ... @property def yzw(self) -> u32vec3: ... @yzw.setter def yzw(self, value: glm_typing.U32Vector3) -> None: ... @property def ywz(self) -> u32vec3: ... @ywz.setter def ywz(self, value: glm_typing.U32Vector3) -> None: ... @property def zyw(self) -> u32vec3: ... @zyw.setter def zyw(self, value: glm_typing.U32Vector3) -> None: ... @property def zwy(self) -> u32vec3: ... @zwy.setter def zwy(self, value: glm_typing.U32Vector3) -> None: ... @property def wyz(self) -> u32vec3: ... @wyz.setter def wyz(self, value: glm_typing.U32Vector3) -> None: ... @property def wzy(self) -> u32vec3: ... @wzy.setter def wzy(self, value: glm_typing.U32Vector3) -> None: ... @property def xyzw(self) -> u32vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.U32Vector4) -> None: ... @property def xywz(self) -> u32vec4: ... @xywz.setter def xywz(self, value: glm_typing.U32Vector4) -> None: ... @property def xzyw(self) -> u32vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.U32Vector4) -> None: ... @property def xzwy(self) -> u32vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.U32Vector4) -> None: ... @property def xwyz(self) -> u32vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.U32Vector4) -> None: ... @property def xwzy(self) -> u32vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.U32Vector4) -> None: ... @property def yxzw(self) -> u32vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.U32Vector4) -> None: ... @property def yxwz(self) -> u32vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.U32Vector4) -> None: ... @property def yzxw(self) -> u32vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.U32Vector4) -> None: ... @property def yzwx(self) -> u32vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.U32Vector4) -> None: ... @property def ywxz(self) -> u32vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.U32Vector4) -> None: ... @property def ywzx(self) -> u32vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.U32Vector4) -> None: ... @property def zxyw(self) -> u32vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.U32Vector4) -> None: ... @property def zxwy(self) -> u32vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.U32Vector4) -> None: ... @property def zyxw(self) -> u32vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.U32Vector4) -> None: ... @property def zywx(self) -> u32vec4: ... @zywx.setter def zywx(self, value: glm_typing.U32Vector4) -> None: ... @property def zwxy(self) -> u32vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.U32Vector4) -> None: ... @property def zwyx(self) -> u32vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.U32Vector4) -> None: ... @property def wxyz(self) -> u32vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.U32Vector4) -> None: ... @property def wxzy(self) -> u32vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.U32Vector4) -> None: ... @property def wyxz(self) -> u32vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.U32Vector4) -> None: ... @property def wyzx(self) -> u32vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.U32Vector4) -> None: ... @property def wzxy(self) -> u32vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.U32Vector4) -> None: ... @property def wzyx(self) -> u32vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.U32Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> int: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[int, None, None]: ... def __neg__(self) -> uvec4: ... def __pos__(self) -> uvec4: ... def __abs__(self) -> uvec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[int]: ... def to_tuple(self) -> Tuple[int, int, int, int]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> uvec4: ... def __add__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __radd__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __iadd__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __sub__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __rsub__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __isub__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... @overload def __mul__(self, other: glm_typing.Number) -> uvec4: ... @overload def __mul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __mul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> uvec4: ... @overload def __rmul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __rmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> uvec4: ... @overload def __imul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __imul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __rmod__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __imod__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __pow__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __rpow__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __ipow__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __truediv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __rtruediv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __itruediv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __floordiv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __rfloordiv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... def __ifloordiv__(self, other: Union[glm_typing.U32Vector4, glm_typing.Number]) -> uvec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> uvec4: ... @overload def __matmul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __matmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> uvec4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> uvec4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.U32Matrix4x2) -> vec4: ... def __divmod__(self, other: uvec4) -> Tuple[uvec4, uvec4]: ... f32vec1 = vec1 fvec1 = vec1 class vec1: x: float @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector1, glm_typing.FAnyVector2, glm_typing.FAnyVector3, glm_typing.FAnyVector4]) -> None: ... def __len__(self) -> Literal[1]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> vec1: ... def __pos__(self) -> vec1: ... def __abs__(self) -> vec1: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> vec1: ... def __add__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __radd__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __iadd__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __sub__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __rsub__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __isub__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... @overload def __mul__(self, other: glm_typing.Number) -> vec1: ... @overload def __mul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __mul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> vec1: ... @overload def __rmul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __rmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> vec1: ... @overload def __imul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __imul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __rmod__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __imod__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __pow__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __rpow__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __ipow__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __truediv__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __rtruediv__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __itruediv__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __floordiv__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __rfloordiv__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... def __ifloordiv__(self, other: Union[glm_typing.F32Vector1, glm_typing.Number]) -> vec1: ... @overload def __matmul__(self, other: glm_typing.Number) -> vec1: ... @overload def __matmul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __matmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> vec1: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> vec1: ... @overload def __imatmul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __divmod__(self, other: vec1) -> Tuple[vec1, vec1]: ... f32vec2 = vec2 fvec2 = vec2 class vec2: x: float y: float @property def xy(self) -> f32vec2: ... @xy.setter def xy(self, value: glm_typing.F32Vector2) -> None: ... @property def yx(self) -> f32vec2: ... @yx.setter def yx(self, value: glm_typing.F32Vector2) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector2, glm_typing.FAnyVector3, glm_typing.FAnyVector4]) -> None: ... def __len__(self) -> Literal[2]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> vec2: ... def __pos__(self) -> vec2: ... def __abs__(self) -> vec2: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> vec2: ... def __add__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __radd__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __iadd__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __sub__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __rsub__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __isub__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... @overload def __mul__(self, other: glm_typing.Number) -> vec2: ... @overload def __mul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __mul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> vec2: ... @overload def __rmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> vec2: ... @overload def __imul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __imul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __rmod__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __imod__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __pow__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __rpow__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __ipow__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __truediv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __rtruediv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __itruediv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __floordiv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __rfloordiv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... def __ifloordiv__(self, other: Union[glm_typing.F32Vector2, glm_typing.Number]) -> vec2: ... @overload def __matmul__(self, other: glm_typing.Number) -> vec2: ... @overload def __matmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __divmod__(self, other: vec2) -> Tuple[vec2, vec2]: ... f32vec3 = vec3 fvec3 = vec3 class vec3: x: float y: float z: float @property def xy(self) -> f32vec2: ... @xy.setter def xy(self, value: glm_typing.F32Vector2) -> None: ... @property def yx(self) -> f32vec2: ... @yx.setter def yx(self, value: glm_typing.F32Vector2) -> None: ... @property def xz(self) -> f32vec2: ... @xz.setter def xz(self, value: glm_typing.F32Vector2) -> None: ... @property def zx(self) -> f32vec2: ... @zx.setter def zx(self, value: glm_typing.F32Vector2) -> None: ... @property def yz(self) -> f32vec2: ... @yz.setter def yz(self, value: glm_typing.F32Vector2) -> None: ... @property def zy(self) -> f32vec2: ... @zy.setter def zy(self, value: glm_typing.F32Vector2) -> None: ... @property def xyz(self) -> f32vec3: ... @xyz.setter def xyz(self, value: glm_typing.F32Vector3) -> None: ... @property def xzy(self) -> f32vec3: ... @xzy.setter def xzy(self, value: glm_typing.F32Vector3) -> None: ... @property def yxz(self) -> f32vec3: ... @yxz.setter def yxz(self, value: glm_typing.F32Vector3) -> None: ... @property def yzx(self) -> f32vec3: ... @yzx.setter def yzx(self, value: glm_typing.F32Vector3) -> None: ... @property def zxy(self) -> f32vec3: ... @zxy.setter def zxy(self, value: glm_typing.F32Vector3) -> None: ... @property def zyx(self) -> f32vec3: ... @zyx.setter def zyx(self, value: glm_typing.F32Vector3) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyVector3, glm_typing.FAnyVector4]) -> None: ... def __len__(self) -> Literal[3]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> vec3: ... def __pos__(self) -> vec3: ... def __abs__(self) -> vec3: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> vec3: ... def __add__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __radd__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __iadd__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __sub__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __rsub__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __isub__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... @overload def __mul__(self, other: glm_typing.Number) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __rmod__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __imod__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __pow__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __rpow__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __ipow__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __truediv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __rtruediv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __itruediv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __floordiv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __rfloordiv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... def __ifloordiv__(self, other: Union[glm_typing.F32Vector3, glm_typing.Number]) -> vec3: ... @overload def __matmul__(self, other: glm_typing.Number) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __divmod__(self, other: vec3) -> Tuple[vec3, vec3]: ... f32vec4 = vec4 fvec4 = vec4 class vec4: x: float y: float z: float w: float @property def xy(self) -> f32vec2: ... @xy.setter def xy(self, value: glm_typing.F32Vector2) -> None: ... @property def yx(self) -> f32vec2: ... @yx.setter def yx(self, value: glm_typing.F32Vector2) -> None: ... @property def xz(self) -> f32vec2: ... @xz.setter def xz(self, value: glm_typing.F32Vector2) -> None: ... @property def zx(self) -> f32vec2: ... @zx.setter def zx(self, value: glm_typing.F32Vector2) -> None: ... @property def xw(self) -> f32vec2: ... @xw.setter def xw(self, value: glm_typing.F32Vector2) -> None: ... @property def wx(self) -> f32vec2: ... @wx.setter def wx(self, value: glm_typing.F32Vector2) -> None: ... @property def yz(self) -> f32vec2: ... @yz.setter def yz(self, value: glm_typing.F32Vector2) -> None: ... @property def zy(self) -> f32vec2: ... @zy.setter def zy(self, value: glm_typing.F32Vector2) -> None: ... @property def yw(self) -> f32vec2: ... @yw.setter def yw(self, value: glm_typing.F32Vector2) -> None: ... @property def wy(self) -> f32vec2: ... @wy.setter def wy(self, value: glm_typing.F32Vector2) -> None: ... @property def zw(self) -> f32vec2: ... @zw.setter def zw(self, value: glm_typing.F32Vector2) -> None: ... @property def wz(self) -> f32vec2: ... @wz.setter def wz(self, value: glm_typing.F32Vector2) -> None: ... @property def xyz(self) -> f32vec3: ... @xyz.setter def xyz(self, value: glm_typing.F32Vector3) -> None: ... @property def xzy(self) -> f32vec3: ... @xzy.setter def xzy(self, value: glm_typing.F32Vector3) -> None: ... @property def yxz(self) -> f32vec3: ... @yxz.setter def yxz(self, value: glm_typing.F32Vector3) -> None: ... @property def yzx(self) -> f32vec3: ... @yzx.setter def yzx(self, value: glm_typing.F32Vector3) -> None: ... @property def zxy(self) -> f32vec3: ... @zxy.setter def zxy(self, value: glm_typing.F32Vector3) -> None: ... @property def zyx(self) -> f32vec3: ... @zyx.setter def zyx(self, value: glm_typing.F32Vector3) -> None: ... @property def xyw(self) -> f32vec3: ... @xyw.setter def xyw(self, value: glm_typing.F32Vector3) -> None: ... @property def xwy(self) -> f32vec3: ... @xwy.setter def xwy(self, value: glm_typing.F32Vector3) -> None: ... @property def yxw(self) -> f32vec3: ... @yxw.setter def yxw(self, value: glm_typing.F32Vector3) -> None: ... @property def ywx(self) -> f32vec3: ... @ywx.setter def ywx(self, value: glm_typing.F32Vector3) -> None: ... @property def wxy(self) -> f32vec3: ... @wxy.setter def wxy(self, value: glm_typing.F32Vector3) -> None: ... @property def wyx(self) -> f32vec3: ... @wyx.setter def wyx(self, value: glm_typing.F32Vector3) -> None: ... @property def xzw(self) -> f32vec3: ... @xzw.setter def xzw(self, value: glm_typing.F32Vector3) -> None: ... @property def xwz(self) -> f32vec3: ... @xwz.setter def xwz(self, value: glm_typing.F32Vector3) -> None: ... @property def zxw(self) -> f32vec3: ... @zxw.setter def zxw(self, value: glm_typing.F32Vector3) -> None: ... @property def zwx(self) -> f32vec3: ... @zwx.setter def zwx(self, value: glm_typing.F32Vector3) -> None: ... @property def wxz(self) -> f32vec3: ... @wxz.setter def wxz(self, value: glm_typing.F32Vector3) -> None: ... @property def wzx(self) -> f32vec3: ... @wzx.setter def wzx(self, value: glm_typing.F32Vector3) -> None: ... @property def yzw(self) -> f32vec3: ... @yzw.setter def yzw(self, value: glm_typing.F32Vector3) -> None: ... @property def ywz(self) -> f32vec3: ... @ywz.setter def ywz(self, value: glm_typing.F32Vector3) -> None: ... @property def zyw(self) -> f32vec3: ... @zyw.setter def zyw(self, value: glm_typing.F32Vector3) -> None: ... @property def zwy(self) -> f32vec3: ... @zwy.setter def zwy(self, value: glm_typing.F32Vector3) -> None: ... @property def wyz(self) -> f32vec3: ... @wyz.setter def wyz(self, value: glm_typing.F32Vector3) -> None: ... @property def wzy(self) -> f32vec3: ... @wzy.setter def wzy(self, value: glm_typing.F32Vector3) -> None: ... @property def xyzw(self) -> f32vec4: ... @xyzw.setter def xyzw(self, value: glm_typing.F32Vector4) -> None: ... @property def xywz(self) -> f32vec4: ... @xywz.setter def xywz(self, value: glm_typing.F32Vector4) -> None: ... @property def xzyw(self) -> f32vec4: ... @xzyw.setter def xzyw(self, value: glm_typing.F32Vector4) -> None: ... @property def xzwy(self) -> f32vec4: ... @xzwy.setter def xzwy(self, value: glm_typing.F32Vector4) -> None: ... @property def xwyz(self) -> f32vec4: ... @xwyz.setter def xwyz(self, value: glm_typing.F32Vector4) -> None: ... @property def xwzy(self) -> f32vec4: ... @xwzy.setter def xwzy(self, value: glm_typing.F32Vector4) -> None: ... @property def yxzw(self) -> f32vec4: ... @yxzw.setter def yxzw(self, value: glm_typing.F32Vector4) -> None: ... @property def yxwz(self) -> f32vec4: ... @yxwz.setter def yxwz(self, value: glm_typing.F32Vector4) -> None: ... @property def yzxw(self) -> f32vec4: ... @yzxw.setter def yzxw(self, value: glm_typing.F32Vector4) -> None: ... @property def yzwx(self) -> f32vec4: ... @yzwx.setter def yzwx(self, value: glm_typing.F32Vector4) -> None: ... @property def ywxz(self) -> f32vec4: ... @ywxz.setter def ywxz(self, value: glm_typing.F32Vector4) -> None: ... @property def ywzx(self) -> f32vec4: ... @ywzx.setter def ywzx(self, value: glm_typing.F32Vector4) -> None: ... @property def zxyw(self) -> f32vec4: ... @zxyw.setter def zxyw(self, value: glm_typing.F32Vector4) -> None: ... @property def zxwy(self) -> f32vec4: ... @zxwy.setter def zxwy(self, value: glm_typing.F32Vector4) -> None: ... @property def zyxw(self) -> f32vec4: ... @zyxw.setter def zyxw(self, value: glm_typing.F32Vector4) -> None: ... @property def zywx(self) -> f32vec4: ... @zywx.setter def zywx(self, value: glm_typing.F32Vector4) -> None: ... @property def zwxy(self) -> f32vec4: ... @zwxy.setter def zwxy(self, value: glm_typing.F32Vector4) -> None: ... @property def zwyx(self) -> f32vec4: ... @zwyx.setter def zwyx(self, value: glm_typing.F32Vector4) -> None: ... @property def wxyz(self) -> f32vec4: ... @wxyz.setter def wxyz(self, value: glm_typing.F32Vector4) -> None: ... @property def wxzy(self) -> f32vec4: ... @wxzy.setter def wxzy(self, value: glm_typing.F32Vector4) -> None: ... @property def wyxz(self) -> f32vec4: ... @wyxz.setter def wyxz(self, value: glm_typing.F32Vector4) -> None: ... @property def wyzx(self) -> f32vec4: ... @wyzx.setter def wyzx(self, value: glm_typing.F32Vector4) -> None: ... @property def wzxy(self) -> f32vec4: ... @wzxy.setter def wzxy(self, value: glm_typing.F32Vector4) -> None: ... @property def wzyx(self) -> f32vec4: ... @wzyx.setter def wzyx(self, value: glm_typing.F32Vector4) -> None: ... @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number, w: glm_typing.Number) -> None: ... @overload def __init__(self, x: glm_typing.AnyAnyVector4) -> None: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def __neg__(self) -> vec4: ... def __pos__(self) -> vec4: ... def __abs__(self) -> vec4: ... def __lt__(self, other: Any) -> bool: ... def __le__(self, other: Any) -> bool: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __gt__(self, other: Any) -> bool: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float, float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> vec4: ... def __add__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __radd__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __iadd__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __sub__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __rsub__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __isub__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... @overload def __mul__(self, other: glm_typing.Number) -> vec4: ... @overload def __mul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __mul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __mul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.Number) -> vec4: ... @overload def __rmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __rmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imul__(self, other: glm_typing.Number) -> vec4: ... @overload def __imul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __imul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __mod__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __rmod__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __imod__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __pow__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __rpow__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __ipow__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __truediv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __rtruediv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __itruediv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __floordiv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __rfloordiv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... def __ifloordiv__(self, other: Union[glm_typing.F32Vector4, glm_typing.Number]) -> vec4: ... @overload def __matmul__(self, other: glm_typing.Number) -> vec4: ... @overload def __matmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __matmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.Number) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.Number) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix2x2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix3x2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Matrix4x2) -> vec4: ... def __divmod__(self, other: vec4) -> Tuple[vec4, vec4]: ... dmat2 = dmat2x2 f64mat2 = dmat2x2 f64mat2x2 = dmat2x2 class dmat2x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x2, glm_typing.DAnyMatrix2x2, glm_typing.DAnyMatrix2x3, glm_typing.DAnyMatrix2x4, glm_typing.DAnyMatrix3x2, glm_typing.DAnyMatrix3x3, glm_typing.DAnyMatrix3x4, glm_typing.DAnyMatrix4x2, glm_typing.DAnyMatrix4x3, glm_typing.DAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[dmvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> dmvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[dvec2, dmvec2]) -> None: ... def __neg__(self) -> dmat2x2: ... def __pos__(self) -> dmat2x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float], Tuple[float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmat2x2: ... def __add__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... def __radd__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... def __iadd__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... def __sub__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... def __rsub__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... def __isub__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __mul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __mul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __rmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __rmul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __imul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __imul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __truediv__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __truediv__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __rtruediv__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __rtruediv__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __itruediv__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __itruediv__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __matmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __matmul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector1) -> dvec1: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __imatmul__(self, other: glm_typing.D64Vector1) -> dvec1: ... f64mat2x3 = dmat2x3 class dmat2x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x3, glm_typing.DAnyMatrix2x3, glm_typing.DAnyMatrix2x4, glm_typing.DAnyMatrix3x3, glm_typing.DAnyMatrix3x4, glm_typing.DAnyMatrix4x3, glm_typing.DAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[dmvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> dmvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[dvec3, dmvec3]) -> None: ... def __neg__(self) -> dmat2x3: ... def __pos__(self) -> dmat2x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float], Tuple[float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmat2x3: ... def __add__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... def __radd__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... def __iadd__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... def __sub__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... def __rsub__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... def __isub__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __mul__(self, other: glm_typing.D64Vector2) -> dvec3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __rmul__(self, other: glm_typing.D64Vector2) -> dvec3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __imul__(self, other: glm_typing.D64Vector2) -> dvec3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __matmul__(self, other: glm_typing.D64Vector2) -> dvec3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector2) -> dvec3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector2) -> dvec3: ... f64mat2x4 = dmat2x4 class dmat2x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x4, glm_typing.DAnyMatrix2x4, glm_typing.DAnyMatrix3x4, glm_typing.DAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[dmvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> dmvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[dvec4, dmvec4]) -> None: ... def __neg__(self) -> dmat2x4: ... def __pos__(self) -> dmat2x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float, float], Tuple[float, float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmat2x4: ... def __add__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... def __radd__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... def __iadd__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... def __sub__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... def __rsub__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... def __isub__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __mul__(self, other: glm_typing.D64Vector2) -> dvec4: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __rmul__(self, other: glm_typing.D64Vector2) -> dvec4: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __imul__(self, other: glm_typing.D64Vector2) -> dvec4: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __matmul__(self, other: glm_typing.D64Vector2) -> dvec4: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector2) -> dvec4: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix2x2) -> dmat2x2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix2x3) -> dmat2x3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix2x4) -> dmat2x4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector2) -> dvec4: ... f64mat3x2 = dmat3x2 class dmat3x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x2, glm_typing.DAnyMatrix3x2, glm_typing.DAnyMatrix3x3, glm_typing.DAnyMatrix3x4, glm_typing.DAnyMatrix4x2, glm_typing.DAnyMatrix4x3, glm_typing.DAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[dmvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> dmvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[dvec2, dmvec2]) -> None: ... def __neg__(self) -> dmat3x2: ... def __pos__(self) -> dmat3x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float], Tuple[float, float], Tuple[float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmat3x2: ... def __add__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... def __radd__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... def __iadd__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... def __sub__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... def __rsub__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... def __isub__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __mul__(self, other: glm_typing.D64Vector3) -> dvec2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __rmul__(self, other: glm_typing.D64Vector3) -> dvec2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __imul__(self, other: glm_typing.D64Vector3) -> dvec2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __matmul__(self, other: glm_typing.D64Vector3) -> dvec2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector3) -> dvec2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector3) -> dvec2: ... dmat3 = dmat3x3 f64mat3 = dmat3x3 f64mat3x3 = dmat3x3 class dmat3x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x3, glm_typing.DAnyMatrix3x3, glm_typing.DAnyMatrix3x4, glm_typing.DAnyMatrix4x3, glm_typing.DAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[dmvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> dmvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[dvec3, dmvec3]) -> None: ... def __neg__(self) -> dmat3x3: ... def __pos__(self) -> dmat3x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float], Tuple[float, float, float], Tuple[float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmat3x3: ... def __add__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... def __radd__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... def __iadd__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... def __sub__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... def __rsub__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... def __isub__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __mul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __mul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __rmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __rmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __imul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __imul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __truediv__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __truediv__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __rtruediv__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __rtruediv__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __itruediv__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __itruediv__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __matmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __matmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __imatmul__(self, other: glm_typing.D64Vector2) -> dvec2: ... f64mat3x4 = dmat3x4 class dmat3x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x4, glm_typing.DAnyMatrix3x4, glm_typing.DAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[dmvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> dmvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[dvec4, dmvec4]) -> None: ... def __neg__(self) -> dmat3x4: ... def __pos__(self) -> dmat3x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float, float], Tuple[float, float, float, float], Tuple[float, float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmat3x4: ... def __add__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... def __radd__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... def __iadd__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... def __sub__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... def __rsub__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... def __isub__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __mul__(self, other: glm_typing.D64Vector3) -> dvec4: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __rmul__(self, other: glm_typing.D64Vector3) -> dvec4: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __imul__(self, other: glm_typing.D64Vector3) -> dvec4: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __matmul__(self, other: glm_typing.D64Vector3) -> dvec4: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector3) -> dvec4: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix3x2) -> dmat3x2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix3x3) -> dmat3x3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix3x4) -> dmat3x4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector3) -> dvec4: ... f64mat4x2 = dmat4x2 class dmat4x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x2, glm_typing.DAnyMatrix4x2, glm_typing.DAnyMatrix4x3, glm_typing.DAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[dmvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> dmvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[dvec2, dmvec2]) -> None: ... def __neg__(self) -> dmat4x2: ... def __pos__(self) -> dmat4x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float], Tuple[float, float], Tuple[float, float], Tuple[float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmat4x2: ... def __add__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... def __radd__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... def __iadd__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... def __sub__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... def __rsub__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... def __isub__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __mul__(self, other: glm_typing.D64Vector4) -> dvec2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __rmul__(self, other: glm_typing.D64Vector4) -> dvec2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __imul__(self, other: glm_typing.D64Vector4) -> dvec2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __matmul__(self, other: glm_typing.D64Vector4) -> dvec2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector4) -> dvec2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector4) -> dvec2: ... f64mat4x3 = dmat4x3 class dmat4x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x3, glm_typing.DAnyMatrix4x3, glm_typing.DAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[dmvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> dmvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[dvec3, dmvec3]) -> None: ... def __neg__(self) -> dmat4x3: ... def __pos__(self) -> dmat4x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float], Tuple[float, float, float], Tuple[float, float, float], Tuple[float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmat4x3: ... def __add__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... def __radd__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... def __iadd__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... def __sub__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... def __rsub__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... def __isub__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __mul__(self, other: glm_typing.D64Vector4) -> dvec3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __rmul__(self, other: glm_typing.D64Vector4) -> dvec3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __imul__(self, other: glm_typing.D64Vector4) -> dvec3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __matmul__(self, other: glm_typing.D64Vector4) -> dvec3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector4) -> dvec3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector4) -> dvec3: ... dmat4 = dmat4x4 f64mat4 = dmat4x4 f64mat4x4 = dmat4x4 class dmat4x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, _12: glm_typing.Number, _13: glm_typing.Number, _14: glm_typing.Number, _15: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x4, glm_typing.DAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[dmvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> dmvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[dvec4, dmvec4]) -> None: ... def __neg__(self) -> dmat4x4: ... def __pos__(self) -> dmat4x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float, float], Tuple[float, float, float, float], Tuple[float, float, float, float], Tuple[float, float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dmat4x4: ... def __add__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... def __radd__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... def __iadd__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... def __sub__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... def __rsub__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... def __isub__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __mul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __mul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __mul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __rmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __rmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __rmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __imul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __imul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __imul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __truediv__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __truediv__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __rtruediv__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __rtruediv__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __itruediv__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __itruediv__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __matmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __matmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __matmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __rmatmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix4x2) -> dmat4x2: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix4x3) -> dmat4x3: ... @overload def __imatmul__(self, other: glm_typing.DAnyMatrix4x4) -> dmat4x4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __imatmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... i32mat2 = imat2x2 i32mat2x2 = imat2x2 imat2 = imat2x2 class imat2x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x2, glm_typing.IAnyMatrix2x2, glm_typing.IAnyMatrix2x3, glm_typing.IAnyMatrix2x4, glm_typing.IAnyMatrix3x2, glm_typing.IAnyMatrix3x3, glm_typing.IAnyMatrix3x4, glm_typing.IAnyMatrix4x2, glm_typing.IAnyMatrix4x3, glm_typing.IAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[imvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> imvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[ivec2, imvec2]) -> None: ... def __neg__(self) -> imat2x2: ... def __pos__(self) -> imat2x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int], Tuple[int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imat2x2: ... def __add__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... def __radd__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... def __iadd__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... def __sub__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... def __rsub__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... def __isub__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __mul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __mul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __rmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __rmul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __imul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __imul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __truediv__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __truediv__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __rtruediv__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __rtruediv__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __itruediv__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __itruediv__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __matmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __matmul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector1) -> ivec1: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __imatmul__(self, other: glm_typing.I32Vector1) -> ivec1: ... i32mat2x3 = imat2x3 class imat2x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x3, glm_typing.IAnyMatrix2x3, glm_typing.IAnyMatrix2x4, glm_typing.IAnyMatrix3x3, glm_typing.IAnyMatrix3x4, glm_typing.IAnyMatrix4x3, glm_typing.IAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[imvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> imvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[ivec3, imvec3]) -> None: ... def __neg__(self) -> imat2x3: ... def __pos__(self) -> imat2x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int], Tuple[int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imat2x3: ... def __add__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... def __radd__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... def __iadd__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... def __sub__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... def __rsub__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... def __isub__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __mul__(self, other: glm_typing.I32Vector2) -> ivec3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __rmul__(self, other: glm_typing.I32Vector2) -> ivec3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __imul__(self, other: glm_typing.I32Vector2) -> ivec3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __matmul__(self, other: glm_typing.I32Vector2) -> ivec3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector2) -> ivec3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector2) -> ivec3: ... i32mat2x4 = imat2x4 class imat2x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x4, glm_typing.IAnyMatrix2x4, glm_typing.IAnyMatrix3x4, glm_typing.IAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[imvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> imvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[ivec4, imvec4]) -> None: ... def __neg__(self) -> imat2x4: ... def __pos__(self) -> imat2x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int, int], Tuple[int, int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imat2x4: ... def __add__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... def __radd__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... def __iadd__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... def __sub__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... def __rsub__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... def __isub__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __mul__(self, other: glm_typing.I32Vector2) -> ivec4: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __rmul__(self, other: glm_typing.I32Vector2) -> ivec4: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __imul__(self, other: glm_typing.I32Vector2) -> ivec4: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __matmul__(self, other: glm_typing.I32Vector2) -> ivec4: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector2) -> ivec4: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix2x2) -> imat2x2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix2x3) -> imat2x3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix2x4) -> imat2x4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector2) -> ivec4: ... i32mat3x2 = imat3x2 class imat3x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x2, glm_typing.IAnyMatrix3x2, glm_typing.IAnyMatrix3x3, glm_typing.IAnyMatrix3x4, glm_typing.IAnyMatrix4x2, glm_typing.IAnyMatrix4x3, glm_typing.IAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[imvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> imvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[ivec2, imvec2]) -> None: ... def __neg__(self) -> imat3x2: ... def __pos__(self) -> imat3x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int], Tuple[int, int], Tuple[int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imat3x2: ... def __add__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... def __radd__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... def __iadd__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... def __sub__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... def __rsub__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... def __isub__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __mul__(self, other: glm_typing.I32Vector3) -> ivec2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __rmul__(self, other: glm_typing.I32Vector3) -> ivec2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __imul__(self, other: glm_typing.I32Vector3) -> ivec2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __matmul__(self, other: glm_typing.I32Vector3) -> ivec2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector3) -> ivec2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector3) -> ivec2: ... i32mat3 = imat3x3 i32mat3x3 = imat3x3 imat3 = imat3x3 class imat3x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x3, glm_typing.IAnyMatrix3x3, glm_typing.IAnyMatrix3x4, glm_typing.IAnyMatrix4x3, glm_typing.IAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[imvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> imvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[ivec3, imvec3]) -> None: ... def __neg__(self) -> imat3x3: ... def __pos__(self) -> imat3x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int], Tuple[int, int, int], Tuple[int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imat3x3: ... def __add__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... def __radd__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... def __iadd__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... def __sub__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... def __rsub__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... def __isub__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __mul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __mul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __rmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __rmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __imul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __imul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __truediv__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __truediv__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __rtruediv__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __rtruediv__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __itruediv__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __itruediv__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __matmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __matmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __imatmul__(self, other: glm_typing.I32Vector2) -> ivec2: ... i32mat3x4 = imat3x4 class imat3x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x4, glm_typing.IAnyMatrix3x4, glm_typing.IAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[imvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> imvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[ivec4, imvec4]) -> None: ... def __neg__(self) -> imat3x4: ... def __pos__(self) -> imat3x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int, int], Tuple[int, int, int, int], Tuple[int, int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imat3x4: ... def __add__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... def __radd__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... def __iadd__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... def __sub__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... def __rsub__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... def __isub__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __mul__(self, other: glm_typing.I32Vector3) -> ivec4: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __rmul__(self, other: glm_typing.I32Vector3) -> ivec4: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __imul__(self, other: glm_typing.I32Vector3) -> ivec4: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __matmul__(self, other: glm_typing.I32Vector3) -> ivec4: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector3) -> ivec4: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix3x2) -> imat3x2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix3x3) -> imat3x3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix3x4) -> imat3x4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector3) -> ivec4: ... i32mat4x2 = imat4x2 class imat4x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x2, glm_typing.IAnyMatrix4x2, glm_typing.IAnyMatrix4x3, glm_typing.IAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[imvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> imvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[ivec2, imvec2]) -> None: ... def __neg__(self) -> imat4x2: ... def __pos__(self) -> imat4x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int], Tuple[int, int], Tuple[int, int], Tuple[int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imat4x2: ... def __add__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... def __radd__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... def __iadd__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... def __sub__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... def __rsub__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... def __isub__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __mul__(self, other: glm_typing.I32Vector4) -> ivec2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __rmul__(self, other: glm_typing.I32Vector4) -> ivec2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __imul__(self, other: glm_typing.I32Vector4) -> ivec2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __matmul__(self, other: glm_typing.I32Vector4) -> ivec2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector4) -> ivec2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector4) -> ivec2: ... i32mat4x3 = imat4x3 class imat4x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x3, glm_typing.IAnyMatrix4x3, glm_typing.IAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[imvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> imvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[ivec3, imvec3]) -> None: ... def __neg__(self) -> imat4x3: ... def __pos__(self) -> imat4x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int], Tuple[int, int, int], Tuple[int, int, int], Tuple[int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imat4x3: ... def __add__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... def __radd__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... def __iadd__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... def __sub__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... def __rsub__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... def __isub__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __mul__(self, other: glm_typing.I32Vector4) -> ivec3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __rmul__(self, other: glm_typing.I32Vector4) -> ivec3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __imul__(self, other: glm_typing.I32Vector4) -> ivec3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __matmul__(self, other: glm_typing.I32Vector4) -> ivec3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector4) -> ivec3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector4) -> ivec3: ... i32mat4 = imat4x4 i32mat4x4 = imat4x4 imat4 = imat4x4 class imat4x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, _12: glm_typing.Number, _13: glm_typing.Number, _14: glm_typing.Number, _15: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x4, glm_typing.IAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[imvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> imvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[ivec4, imvec4]) -> None: ... def __neg__(self) -> imat4x4: ... def __pos__(self) -> imat4x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int, int], Tuple[int, int, int, int], Tuple[int, int, int, int], Tuple[int, int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> imat4x4: ... def __add__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... def __radd__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... def __iadd__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... def __sub__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... def __rsub__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... def __isub__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __mul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __mul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __mul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __rmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __rmul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __rmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __imul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __imul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __imul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __truediv__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __truediv__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __rtruediv__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __rtruediv__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __itruediv__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __itruediv__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __matmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __matmul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __matmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __rmatmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __rmatmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix4x2) -> imat4x2: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix4x3) -> imat4x3: ... @overload def __imatmul__(self, other: glm_typing.IAnyMatrix4x4) -> imat4x4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector4) -> ivec4: ... @overload def __imatmul__(self, other: glm_typing.I32Vector3) -> ivec3: ... f32mat2 = mat2x2 f32mat2x2 = mat2x2 fmat2 = mat2x2 fmat2x2 = mat2x2 mat2 = mat2x2 class mat2x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x2, glm_typing.FAnyMatrix2x2, glm_typing.FAnyMatrix2x3, glm_typing.FAnyMatrix2x4, glm_typing.FAnyMatrix3x2, glm_typing.FAnyMatrix3x3, glm_typing.FAnyMatrix3x4, glm_typing.FAnyMatrix4x2, glm_typing.FAnyMatrix4x3, glm_typing.FAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[mvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> mvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[vec2, mvec2]) -> None: ... def __neg__(self) -> mat2x2: ... def __pos__(self) -> mat2x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float], Tuple[float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mat2x2: ... def __add__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... def __radd__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... def __iadd__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... def __sub__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... def __rsub__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... def __isub__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __mul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __mul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __rmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __imul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __imul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __truediv__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __truediv__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __rtruediv__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __rtruediv__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __itruediv__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __itruediv__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __matmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __matmul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector1) -> vec1: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.F32Vector1) -> vec1: ... f32mat2x3 = mat2x3 fmat2x3 = mat2x3 class mat2x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x3, glm_typing.FAnyMatrix2x3, glm_typing.FAnyMatrix2x4, glm_typing.FAnyMatrix3x3, glm_typing.FAnyMatrix3x4, glm_typing.FAnyMatrix4x3, glm_typing.FAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[mvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> mvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[vec3, mvec3]) -> None: ... def __neg__(self) -> mat2x3: ... def __pos__(self) -> mat2x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float], Tuple[float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mat2x3: ... def __add__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... def __radd__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... def __iadd__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... def __sub__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... def __rsub__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... def __isub__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __mul__(self, other: glm_typing.F32Vector2) -> vec3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __rmul__(self, other: glm_typing.F32Vector2) -> vec3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __imul__(self, other: glm_typing.F32Vector2) -> vec3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __matmul__(self, other: glm_typing.F32Vector2) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector2) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector2) -> vec3: ... f32mat2x4 = mat2x4 fmat2x4 = mat2x4 class mat2x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x4, glm_typing.FAnyMatrix2x4, glm_typing.FAnyMatrix3x4, glm_typing.FAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[mvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> mvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[vec4, mvec4]) -> None: ... def __neg__(self) -> mat2x4: ... def __pos__(self) -> mat2x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float, float], Tuple[float, float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mat2x4: ... def __add__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... def __radd__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... def __iadd__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... def __sub__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... def __rsub__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... def __isub__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __mul__(self, other: glm_typing.F32Vector2) -> vec4: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __rmul__(self, other: glm_typing.F32Vector2) -> vec4: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __imul__(self, other: glm_typing.F32Vector2) -> vec4: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __matmul__(self, other: glm_typing.F32Vector2) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector2) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix2x2) -> mat2x2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix2x3) -> mat2x3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix2x4) -> mat2x4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector2) -> vec4: ... f32mat3x2 = mat3x2 fmat3x2 = mat3x2 class mat3x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x2, glm_typing.FAnyMatrix3x2, glm_typing.FAnyMatrix3x3, glm_typing.FAnyMatrix3x4, glm_typing.FAnyMatrix4x2, glm_typing.FAnyMatrix4x3, glm_typing.FAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[mvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> mvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[vec2, mvec2]) -> None: ... def __neg__(self) -> mat3x2: ... def __pos__(self) -> mat3x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float], Tuple[float, float], Tuple[float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mat3x2: ... def __add__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... def __radd__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... def __iadd__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... def __sub__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... def __rsub__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... def __isub__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __mul__(self, other: glm_typing.F32Vector3) -> vec2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __rmul__(self, other: glm_typing.F32Vector3) -> vec2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __imul__(self, other: glm_typing.F32Vector3) -> vec2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __matmul__(self, other: glm_typing.F32Vector3) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector3) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector3) -> vec2: ... f32mat3 = mat3x3 f32mat3x3 = mat3x3 fmat3 = mat3x3 fmat3x3 = mat3x3 mat3 = mat3x3 class mat3x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x3, glm_typing.FAnyMatrix3x3, glm_typing.FAnyMatrix3x4, glm_typing.FAnyMatrix4x3, glm_typing.FAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[mvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> mvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[vec3, mvec3]) -> None: ... def __neg__(self) -> mat3x3: ... def __pos__(self) -> mat3x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float], Tuple[float, float, float], Tuple[float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mat3x3: ... def __add__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... def __radd__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... def __iadd__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... def __sub__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... def __rsub__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... def __isub__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __mul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __rmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __imul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __truediv__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __truediv__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __rtruediv__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __rtruediv__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __itruediv__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __itruediv__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __matmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector2) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Vector2) -> vec2: ... f32mat3x4 = mat3x4 fmat3x4 = mat3x4 class mat3x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x4, glm_typing.FAnyMatrix3x4, glm_typing.FAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[mvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> mvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[vec4, mvec4]) -> None: ... def __neg__(self) -> mat3x4: ... def __pos__(self) -> mat3x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float, float], Tuple[float, float, float, float], Tuple[float, float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mat3x4: ... def __add__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... def __radd__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... def __iadd__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... def __sub__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... def __rsub__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... def __isub__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __mul__(self, other: glm_typing.F32Vector3) -> vec4: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __rmul__(self, other: glm_typing.F32Vector3) -> vec4: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __imul__(self, other: glm_typing.F32Vector3) -> vec4: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __matmul__(self, other: glm_typing.F32Vector3) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector3) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix3x2) -> mat3x2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix3x3) -> mat3x3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix3x4) -> mat3x4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector3) -> vec4: ... f32mat4x2 = mat4x2 fmat4x2 = mat4x2 class mat4x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x2, glm_typing.FAnyMatrix4x2, glm_typing.FAnyMatrix4x3, glm_typing.FAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[mvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> mvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[vec2, mvec2]) -> None: ... def __neg__(self) -> mat4x2: ... def __pos__(self) -> mat4x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float], Tuple[float, float], Tuple[float, float], Tuple[float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mat4x2: ... def __add__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... def __radd__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... def __iadd__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... def __sub__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... def __rsub__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... def __isub__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __mul__(self, other: glm_typing.F32Vector4) -> vec2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __rmul__(self, other: glm_typing.F32Vector4) -> vec2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __imul__(self, other: glm_typing.F32Vector4) -> vec2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __matmul__(self, other: glm_typing.F32Vector4) -> vec2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector4) -> vec2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector4) -> vec2: ... f32mat4x3 = mat4x3 fmat4x3 = mat4x3 class mat4x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x3, glm_typing.FAnyMatrix4x3, glm_typing.FAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[mvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> mvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[vec3, mvec3]) -> None: ... def __neg__(self) -> mat4x3: ... def __pos__(self) -> mat4x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float], Tuple[float, float, float], Tuple[float, float, float], Tuple[float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mat4x3: ... def __add__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... def __radd__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... def __iadd__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... def __sub__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... def __rsub__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... def __isub__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __mul__(self, other: glm_typing.F32Vector4) -> vec3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __rmul__(self, other: glm_typing.F32Vector4) -> vec3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __imul__(self, other: glm_typing.F32Vector4) -> vec3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __matmul__(self, other: glm_typing.F32Vector4) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector4) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector4) -> vec3: ... f32mat4 = mat4x4 f32mat4x4 = mat4x4 fmat4 = mat4x4 fmat4x4 = mat4x4 mat4 = mat4x4 class mat4x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, _12: glm_typing.Number, _13: glm_typing.Number, _14: glm_typing.Number, _15: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x4, glm_typing.FAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[mvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> float: ... @overload def __getitem__(self, index: int) -> mvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[vec4, mvec4]) -> None: ... def __neg__(self) -> mat4x4: ... def __pos__(self) -> mat4x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[float]]: ... def to_tuple(self) -> Tuple[Tuple[float, float, float, float], Tuple[float, float, float, float], Tuple[float, float, float, float], Tuple[float, float, float, float]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> mat4x4: ... def __add__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... def __radd__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... def __iadd__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... def __sub__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... def __rsub__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... def __isub__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __mul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __mul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __mul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __rmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __rmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __rmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __imul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __imul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __imul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __truediv__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __truediv__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __rtruediv__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __rtruediv__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __itruediv__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __itruediv__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __matmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __matmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __matmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __rmatmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix4x2) -> mat4x2: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix4x3) -> mat4x3: ... @overload def __imatmul__(self, other: glm_typing.FAnyMatrix4x4) -> mat4x4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __imatmul__(self, other: glm_typing.F32Vector3) -> vec3: ... u32mat2 = umat2x2 u32mat2x2 = umat2x2 umat2 = umat2x2 class umat2x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x2, glm_typing.UAnyMatrix2x2, glm_typing.UAnyMatrix2x3, glm_typing.UAnyMatrix2x4, glm_typing.UAnyMatrix3x2, glm_typing.UAnyMatrix3x3, glm_typing.UAnyMatrix3x4, glm_typing.UAnyMatrix4x2, glm_typing.UAnyMatrix4x3, glm_typing.UAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[umvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> umvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[uvec2, umvec2]) -> None: ... def __neg__(self) -> umat2x2: ... def __pos__(self) -> umat2x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int], Tuple[int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umat2x2: ... def __add__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... def __radd__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... def __iadd__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... def __sub__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... def __rsub__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... def __isub__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __mul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __mul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __rmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __rmul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __imul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __imul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __truediv__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __truediv__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __rtruediv__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __rtruediv__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __itruediv__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __itruediv__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __matmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __matmul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector1) -> uvec1: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __imatmul__(self, other: glm_typing.U32Vector1) -> uvec1: ... u32mat2x3 = umat2x3 class umat2x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x3, glm_typing.UAnyMatrix2x3, glm_typing.UAnyMatrix2x4, glm_typing.UAnyMatrix3x3, glm_typing.UAnyMatrix3x4, glm_typing.UAnyMatrix4x3, glm_typing.UAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[umvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> umvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[uvec3, umvec3]) -> None: ... def __neg__(self) -> umat2x3: ... def __pos__(self) -> umat2x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int], Tuple[int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umat2x3: ... def __add__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... def __radd__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... def __iadd__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... def __sub__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... def __rsub__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... def __isub__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __mul__(self, other: glm_typing.U32Vector2) -> uvec3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __rmul__(self, other: glm_typing.U32Vector2) -> uvec3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __imul__(self, other: glm_typing.U32Vector2) -> uvec3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __matmul__(self, other: glm_typing.U32Vector2) -> uvec3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector2) -> uvec3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector2) -> uvec3: ... u32mat2x4 = umat2x4 class umat2x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix2x4, glm_typing.UAnyMatrix2x4, glm_typing.UAnyMatrix3x4, glm_typing.UAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[2]: ... def __len__(self) -> Literal[2]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[umvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> umvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[uvec4, umvec4]) -> None: ... def __neg__(self) -> umat2x4: ... def __pos__(self) -> umat2x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int, int], Tuple[int, int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umat2x4: ... def __add__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... def __radd__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... def __iadd__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... def __sub__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... def __rsub__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... def __isub__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __mul__(self, other: glm_typing.U32Vector2) -> uvec4: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __rmul__(self, other: glm_typing.U32Vector2) -> uvec4: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __imul__(self, other: glm_typing.U32Vector2) -> uvec4: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __matmul__(self, other: glm_typing.U32Vector2) -> uvec4: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector2) -> uvec4: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix2x2) -> umat2x2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix2x3) -> umat2x3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix2x4) -> umat2x4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector2) -> uvec4: ... u32mat3x2 = umat3x2 class umat3x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x2, glm_typing.UAnyMatrix3x2, glm_typing.UAnyMatrix3x3, glm_typing.UAnyMatrix3x4, glm_typing.UAnyMatrix4x2, glm_typing.UAnyMatrix4x3, glm_typing.UAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[umvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> umvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[uvec2, umvec2]) -> None: ... def __neg__(self) -> umat3x2: ... def __pos__(self) -> umat3x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int], Tuple[int, int], Tuple[int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umat3x2: ... def __add__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... def __radd__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... def __iadd__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... def __sub__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... def __rsub__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... def __isub__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __mul__(self, other: glm_typing.U32Vector3) -> uvec2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __rmul__(self, other: glm_typing.U32Vector3) -> uvec2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __imul__(self, other: glm_typing.U32Vector3) -> uvec2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __matmul__(self, other: glm_typing.U32Vector3) -> uvec2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector3) -> uvec2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector3) -> uvec2: ... u32mat3 = umat3x3 u32mat3x3 = umat3x3 umat3 = umat3x3 class umat3x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x3, glm_typing.UAnyMatrix3x3, glm_typing.UAnyMatrix3x4, glm_typing.UAnyMatrix4x3, glm_typing.UAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[umvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> umvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[uvec3, umvec3]) -> None: ... def __neg__(self) -> umat3x3: ... def __pos__(self) -> umat3x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int], Tuple[int, int, int], Tuple[int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umat3x3: ... def __add__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... def __radd__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... def __iadd__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... def __sub__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... def __rsub__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... def __isub__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __mul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __mul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __rmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __rmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __imul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __imul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __truediv__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __truediv__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __rtruediv__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __rtruediv__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __itruediv__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __itruediv__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __matmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __matmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __imatmul__(self, other: glm_typing.U32Vector2) -> uvec2: ... u32mat3x4 = umat3x4 class umat3x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix3x4, glm_typing.UAnyMatrix3x4, glm_typing.UAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[3]: ... def __len__(self) -> Literal[3]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[umvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> umvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[uvec4, umvec4]) -> None: ... def __neg__(self) -> umat3x4: ... def __pos__(self) -> umat3x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int, int], Tuple[int, int, int, int], Tuple[int, int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umat3x4: ... def __add__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... def __radd__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... def __iadd__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... def __sub__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... def __rsub__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... def __isub__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __mul__(self, other: glm_typing.U32Vector3) -> uvec4: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __rmul__(self, other: glm_typing.U32Vector3) -> uvec4: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __imul__(self, other: glm_typing.U32Vector3) -> uvec4: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __matmul__(self, other: glm_typing.U32Vector3) -> uvec4: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector3) -> uvec4: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix3x2) -> umat3x2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix3x3) -> umat3x3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix3x4) -> umat3x4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector3) -> uvec4: ... u32mat4x2 = umat4x2 class umat4x2: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x2, glm_typing.UAnyMatrix4x2, glm_typing.UAnyMatrix4x3, glm_typing.UAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[umvec2, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> umvec2: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[uvec2, umvec2]) -> None: ... def __neg__(self) -> umat4x2: ... def __pos__(self) -> umat4x2: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int], Tuple[int, int], Tuple[int, int], Tuple[int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umat4x2: ... def __add__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... def __radd__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... def __iadd__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... def __sub__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... def __rsub__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... def __isub__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __mul__(self, other: glm_typing.U32Vector4) -> uvec2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __rmul__(self, other: glm_typing.U32Vector4) -> uvec2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __imul__(self, other: glm_typing.U32Vector4) -> uvec2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __matmul__(self, other: glm_typing.U32Vector4) -> uvec2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector4) -> uvec2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector4) -> uvec2: ... u32mat4x3 = umat4x3 class umat4x3: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x3, glm_typing.UAnyMatrix4x3, glm_typing.UAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[umvec3, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> umvec3: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[uvec3, umvec3]) -> None: ... def __neg__(self) -> umat4x3: ... def __pos__(self) -> umat4x3: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int], Tuple[int, int, int], Tuple[int, int, int], Tuple[int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umat4x3: ... def __add__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... def __radd__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... def __iadd__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... def __sub__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... def __rsub__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... def __isub__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __mul__(self, other: glm_typing.U32Vector4) -> uvec3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __rmul__(self, other: glm_typing.U32Vector4) -> uvec3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __imul__(self, other: glm_typing.U32Vector4) -> uvec3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __matmul__(self, other: glm_typing.U32Vector4) -> uvec3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector4) -> uvec3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector4) -> uvec3: ... u32mat4 = umat4x4 u32mat4x4 = umat4x4 umat4 = umat4x4 class umat4x4: @overload def __init__(self) -> None: ... @overload def __init__(self, x: glm_typing.Number, /) -> None: ... @overload def __init__(self, _0: glm_typing.Number, _1: glm_typing.Number, _2: glm_typing.Number, _3: glm_typing.Number, _4: glm_typing.Number, _5: glm_typing.Number, _6: glm_typing.Number, _7: glm_typing.Number, _8: glm_typing.Number, _9: glm_typing.Number, _10: glm_typing.Number, _11: glm_typing.Number, _12: glm_typing.Number, _13: glm_typing.Number, _14: glm_typing.Number, _15: glm_typing.Number, /) -> None: ... @overload def __init__(self, x: Union[glm_typing.AnyAnyMatrix4x4, glm_typing.UAnyMatrix4x4], /) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[umvec4, None, None]: ... @overload def __getitem__(self, index: Tuple[int, int]) -> int: ... @overload def __getitem__(self, index: int) -> umvec4: ... @overload def __setitem__(self, index: Tuple[int, int], value: glm_typing.Number) -> None: ... @overload def __setitem__(self, index: int, value: Union[uvec4, umvec4]) -> None: ... def __neg__(self) -> umat4x4: ... def __pos__(self) -> umat4x4: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def to_list(self) -> List[List[int]]: ... def to_tuple(self) -> Tuple[Tuple[int, int, int, int], Tuple[int, int, int, int], Tuple[int, int, int, int], Tuple[int, int, int, int]]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> umat4x4: ... def __add__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... def __radd__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... def __iadd__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... def __sub__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... def __rsub__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... def __isub__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __mul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __mul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __mul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __rmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __rmul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __rmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __imul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __imul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __imul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __truediv__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __truediv__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __rtruediv__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __rtruediv__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __itruediv__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __itruediv__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __matmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __matmul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __matmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __rmatmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __rmatmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix4x2) -> umat4x2: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix4x3) -> umat4x3: ... @overload def __imatmul__(self, other: glm_typing.UAnyMatrix4x4) -> umat4x4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector4) -> uvec4: ... @overload def __imatmul__(self, other: glm_typing.U32Vector3) -> uvec3: ... f64quat = dquat class dquat: w: float x: float y: float z: float @overload def __init__(self) -> None: ... @overload def __init__(self, w: glm_typing.Number, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, w: Union[glm_typing.AnyAnyQuaternion, glm_typing.D64Matrix3x3, glm_typing.D64Matrix4x4, glm_typing.D64Vector3]) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float, float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> dquat: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... @overload def __mul__(self, other: Union[dquat, glm_typing.Number]) -> dquat: ... @overload def __mul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __mul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __rmul__(self, other: Union[dquat, glm_typing.Number]) -> dquat: ... @overload def __rmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __rmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __imul__(self, other: Union[dquat, glm_typing.Number]) -> dquat: ... @overload def __imul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __imul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __matmul__(self, other: Union[dquat, glm_typing.Number]) -> dquat: ... @overload def __matmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __matmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __rmatmul__(self, other: Union[dquat, glm_typing.Number]) -> dquat: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __rmatmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... @overload def __imatmul__(self, other: Union[dquat, glm_typing.Number]) -> dquat: ... @overload def __imatmul__(self, other: glm_typing.D64Vector3) -> dvec3: ... @overload def __imatmul__(self, other: glm_typing.D64Vector4) -> dvec4: ... f32quat = quat fquat = quat class quat: w: float x: float y: float z: float @overload def __init__(self) -> None: ... @overload def __init__(self, w: glm_typing.Number, x: glm_typing.Number, y: glm_typing.Number, z: glm_typing.Number) -> None: ... @overload def __init__(self, w: Union[glm_typing.AnyAnyQuaternion, glm_typing.F32Matrix3x3, glm_typing.F32Matrix4x4, glm_typing.F32Vector3]) -> None: ... def length(self) -> Literal[4]: ... def __len__(self) -> Literal[4]: ... def __getitem__(self, index: int) -> float: ... def __setitem__(self, index: int, value: glm_typing.Number) -> None: ... def __contains__(self, value: Any) -> bool: ... def __iter__(self) -> Generator[float, None, None]: ... def to_list(self) -> List[float]: ... def to_tuple(self) -> Tuple[float, float, float, float]: ... def to_bytes(self) -> bytes: ... @staticmethod def from_bytes(bytes: bytes, /) -> quat: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... @overload def __mul__(self, other: Union[quat, glm_typing.Number]) -> quat: ... @overload def __mul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __mul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __rmul__(self, other: Union[quat, glm_typing.Number]) -> quat: ... @overload def __rmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __rmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __imul__(self, other: Union[quat, glm_typing.Number]) -> quat: ... @overload def __imul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __imul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __matmul__(self, other: Union[quat, glm_typing.Number]) -> quat: ... @overload def __matmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __matmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __rmatmul__(self, other: Union[quat, glm_typing.Number]) -> quat: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __rmatmul__(self, other: glm_typing.F32Vector4) -> vec4: ... @overload def __imatmul__(self, other: Union[quat, glm_typing.Number]) -> quat: ... @overload def __imatmul__(self, other: glm_typing.F32Vector3) -> vec3: ... @overload def __imatmul__(self, other: glm_typing.F32Vector4) -> vec4: ... _AT = TypeVar('_AT', ctypes.c_bool, ctypes.c_byte, ctypes.c_int8, ctypes.c_ubyte, ctypes.c_uint8, ctypes.c_short, ctypes.c_int16, ctypes.c_ushort, ctypes.c_uint16, ctypes.c_int, ctypes.c_int32, ctypes.c_uint, ctypes.c_uint32, ctypes.c_long, ctypes.c_int64, ctypes.c_ulong, ctypes.c_uint64, ctypes.c_longlong, ctypes.c_ulonglong, ctypes.c_size_t, ctypes.c_ssize_t, ctypes.c_float, ctypes.c_double, ctypes.c_longdouble, dmat2x2, dmat2x3, dmat2x4, dmat3x2, dmat3x3, dmat3x4, dmat4x2, dmat4x3, dmat4x4, imat2x2, imat2x3, imat2x4, imat3x2, imat3x3, imat3x4, imat4x2, imat4x3, imat4x4, mat2x2, mat2x3, mat2x4, mat3x2, mat3x3, mat3x4, mat4x2, mat4x3, mat4x4, umat2x2, umat2x3, umat2x4, umat3x2, umat3x3, umat3x4, umat4x2, umat4x3, umat4x4, dquat, quat, bvec1, bvec2, bvec3, bvec4, dmvec2, dmvec3, dmvec4, dvec1, dvec2, dvec3, dvec4, i16vec1, i16vec2, i16vec3, i16vec4, i64vec1, i64vec2, i64vec3, i64vec4, i8vec1, i8vec2, i8vec3, i8vec4, imvec2, imvec3, imvec4, ivec1, ivec2, ivec3, ivec4, mvec2, mvec3, mvec4, u16vec1, u16vec2, u16vec3, u16vec4, u64vec1, u64vec2, u64vec3, u64vec4, u8vec1, u8vec2, u8vec3, u8vec4, umvec2, umvec3, umvec4, uvec1, uvec2, uvec3, uvec4, vec1, vec2, vec3, vec4) _AT2 = TypeVar('_AT2', ctypes.c_bool, ctypes.c_byte, ctypes.c_int8, ctypes.c_ubyte, ctypes.c_uint8, ctypes.c_short, ctypes.c_int16, ctypes.c_ushort, ctypes.c_uint16, ctypes.c_int, ctypes.c_int32, ctypes.c_uint, ctypes.c_uint32, ctypes.c_long, ctypes.c_int64, ctypes.c_ulong, ctypes.c_uint64, ctypes.c_longlong, ctypes.c_ulonglong, ctypes.c_size_t, ctypes.c_ssize_t, ctypes.c_float, ctypes.c_double, ctypes.c_longdouble, dmat2x2, dmat2x3, dmat2x4, dmat3x2, dmat3x3, dmat3x4, dmat4x2, dmat4x3, dmat4x4, imat2x2, imat2x3, imat2x4, imat3x2, imat3x3, imat3x4, imat4x2, imat4x3, imat4x4, mat2x2, mat2x3, mat2x4, mat3x2, mat3x3, mat3x4, mat4x2, mat4x3, mat4x4, umat2x2, umat2x3, umat2x4, umat3x2, umat3x3, umat3x4, umat4x2, umat4x3, umat4x4, dquat, quat, bvec1, bvec2, bvec3, bvec4, dmvec2, dmvec3, dmvec4, dvec1, dvec2, dvec3, dvec4, i16vec1, i16vec2, i16vec3, i16vec4, i64vec1, i64vec2, i64vec3, i64vec4, i8vec1, i8vec2, i8vec3, i8vec4, imvec2, imvec3, imvec4, ivec1, ivec2, ivec3, ivec4, mvec2, mvec3, mvec4, u16vec1, u16vec2, u16vec3, u16vec4, u64vec1, u64vec2, u64vec3, u64vec4, u8vec1, u8vec2, u8vec3, u8vec4, umvec2, umvec3, umvec4, uvec1, uvec2, uvec3, uvec4, vec1, vec2, vec3, vec4) _GLMT = TypeVar('_GLMT', dmat2x2, dmat2x3, dmat2x4, dmat3x2, dmat3x3, dmat3x4, dmat4x2, dmat4x3, dmat4x4, imat2x2, imat2x3, imat2x4, imat3x2, imat3x3, imat3x4, imat4x2, imat4x3, imat4x4, mat2x2, mat2x3, mat2x4, mat3x2, mat3x3, mat3x4, mat4x2, mat4x3, mat4x4, umat2x2, umat2x3, umat2x4, umat3x2, umat3x3, umat3x4, umat4x2, umat4x3, umat4x4, dquat, quat, bvec1, bvec2, bvec3, bvec4, dmvec2, dmvec3, dmvec4, dvec1, dvec2, dvec3, dvec4, i16vec1, i16vec2, i16vec3, i16vec4, i64vec1, i64vec2, i64vec3, i64vec4, i8vec1, i8vec2, i8vec3, i8vec4, imvec2, imvec3, imvec4, ivec1, ivec2, ivec3, ivec4, mvec2, mvec3, mvec4, u16vec1, u16vec2, u16vec3, u16vec4, u64vec1, u64vec2, u64vec3, u64vec4, u8vec1, u8vec2, u8vec3, u8vec4, umvec2, umvec3, umvec4, uvec1, uvec2, uvec3, uvec4, vec1, vec2, vec3, vec4) _CT = TypeVar('_CT', ctypes.c_bool, ctypes.c_byte, ctypes.c_int8, ctypes.c_ubyte, ctypes.c_uint8, ctypes.c_short, ctypes.c_int16, ctypes.c_ushort, ctypes.c_uint16, ctypes.c_int, ctypes.c_int32, ctypes.c_uint, ctypes.c_uint32, ctypes.c_long, ctypes.c_int64, ctypes.c_ulong, ctypes.c_uint64, ctypes.c_longlong, ctypes.c_ulonglong, ctypes.c_size_t, ctypes.c_ssize_t, ctypes.c_float, ctypes.c_double, ctypes.c_longdouble) _ICT = TypeVar('_ICT', ctypes.c_bool, ctypes.c_byte, ctypes.c_int8, ctypes.c_ubyte, ctypes.c_uint8, ctypes.c_short, ctypes.c_int16, ctypes.c_ushort, ctypes.c_uint16, ctypes.c_int, ctypes.c_int32, ctypes.c_uint, ctypes.c_uint32, ctypes.c_long, ctypes.c_int64, ctypes.c_ulong, ctypes.c_uint64, ctypes.c_longlong, ctypes.c_ulonglong, ctypes.c_size_t, ctypes.c_ssize_t) _FCT = TypeVar('_FCT', ctypes.c_bool, ctypes.c_byte, ctypes.c_int8, ctypes.c_ubyte, ctypes.c_uint8, ctypes.c_short, ctypes.c_int16, ctypes.c_ushort, ctypes.c_uint16, ctypes.c_int, ctypes.c_int32, ctypes.c_uint, ctypes.c_uint32, ctypes.c_long, ctypes.c_int64, ctypes.c_ulong, ctypes.c_uint64, ctypes.c_longlong, ctypes.c_ulonglong, ctypes.c_size_t, ctypes.c_ssize_t) class array(Generic[_AT]): nbytes: int typecode: str element_type: Type[_AT] itemsize: int dt_size: int address: int length: int readonly: bool reference: Any @property def ptr(self) -> ctypes.c_void_p: ... @property def dtype(self) -> str: ... @property def ctype(self) -> Type[Union[ctypes.c_bool, ctypes.c_byte, ctypes.c_int8, ctypes.c_ubyte, ctypes.c_uint8, ctypes.c_short, ctypes.c_int16, ctypes.c_ushort, ctypes.c_uint16, ctypes.c_int, ctypes.c_int32, ctypes.c_uint, ctypes.c_uint32, ctypes.c_long, ctypes.c_int64, ctypes.c_ulong, ctypes.c_uint64, ctypes.c_longlong, ctypes.c_ulonglong, ctypes.c_size_t, ctypes.c_ssize_t, ctypes.c_float, ctypes.c_double, ctypes.c_longdouble]]: ... @overload def __init__(self, _1: _AT, /, *_: _AT) -> None: ... @overload def __init__(self, _: array[_AT], /) -> None: ... @overload def __init__(self, _: Iterable[_AT], /) -> None: ... def __len__(self) -> int: ... def __contains__(self, value: Any) -> bool: ... @overload def __iter__(self: Union[array[ctypes.c_bool], array[ctypes.c_byte], array[ctypes.c_int8], array[ctypes.c_ubyte], array[ctypes.c_uint8], array[ctypes.c_short], array[ctypes.c_int16], array[ctypes.c_ushort], array[ctypes.c_uint16], array[ctypes.c_int], array[ctypes.c_int32], array[ctypes.c_uint], array[ctypes.c_uint32], array[ctypes.c_long], array[ctypes.c_int64], array[ctypes.c_ulong], array[ctypes.c_uint64], array[ctypes.c_longlong], array[ctypes.c_ulonglong], array[ctypes.c_size_t], array[ctypes.c_ssize_t]]) -> Generator[int, None, None]: ... @overload def __iter__(self: Union[array[ctypes.c_float], array[ctypes.c_double], array[ctypes.c_longdouble]]) -> Generator[float, None, None]: ... @overload def __iter__(self: array[_GLMT]) -> Generator[_AT, None, None]: ... @overload def __getitem__(self: Union[array[ctypes.c_bool], array[ctypes.c_byte], array[ctypes.c_int8], array[ctypes.c_ubyte], array[ctypes.c_uint8], array[ctypes.c_short], array[ctypes.c_int16], array[ctypes.c_ushort], array[ctypes.c_uint16], array[ctypes.c_int], array[ctypes.c_int32], array[ctypes.c_uint], array[ctypes.c_uint32], array[ctypes.c_long], array[ctypes.c_int64], array[ctypes.c_ulong], array[ctypes.c_uint64], array[ctypes.c_longlong], array[ctypes.c_ulonglong], array[ctypes.c_size_t], array[ctypes.c_ssize_t]], index: int) -> int: ... @overload def __getitem__(self: Union[array[ctypes.c_float], array[ctypes.c_double], array[ctypes.c_longdouble]], index: int) -> float: ... @overload def __getitem__(self: array[_GLMT], index: int) -> _AT: ... @overload def __getitem__(self, index: slice) -> array[_AT]: ... @overload def __setitem__(self: array[_ICT], index: int, value: _ICT) -> None: ... @overload def __setitem__(self: array[_FCT], index: int, value: _FCT) -> None: ... @overload def __setitem__(self: array[_GLMT], index: int, value: _AT) -> None: ... @overload def __setitem__(self, index: slice, value: array[_AT]) -> None: ... @staticmethod def from_bytes(bytes: bytes, type: Type[_AT], /) -> array[_AT]: ... @staticmethod def from_numbers(type: Type[_CT], /, *numbers: glm_typing.Number) -> array[_CT]: ... @staticmethod def zeros(length: int, type: Type[_AT], /) -> array[_AT]: ... @overload def to_list(self: array[_GLMT]) -> List[_GLMT]: ... @overload def to_list(self: Union[array[ctypes.c_bool], array[ctypes.c_byte], array[ctypes.c_int8], array[ctypes.c_ubyte], array[ctypes.c_uint8], array[ctypes.c_short], array[ctypes.c_int16], array[ctypes.c_ushort], array[ctypes.c_uint16], array[ctypes.c_int], array[ctypes.c_int32], array[ctypes.c_uint], array[ctypes.c_uint32], array[ctypes.c_long], array[ctypes.c_int64], array[ctypes.c_ulong], array[ctypes.c_uint64], array[ctypes.c_longlong], array[ctypes.c_ulonglong], array[ctypes.c_size_t], array[ctypes.c_ssize_t]]) -> List[int]: ... @overload def to_list(self: Union[array[ctypes.c_float], array[ctypes.c_double], array[ctypes.c_longdouble]]) -> List[float]: ... @overload def to_tuple(self: array[_GLMT]) -> Tuple[_GLMT, ...]: ... @overload def to_tuple(self: Union[array[ctypes.c_bool], array[ctypes.c_byte], array[ctypes.c_int8], array[ctypes.c_ubyte], array[ctypes.c_uint8], array[ctypes.c_short], array[ctypes.c_int16], array[ctypes.c_ushort], array[ctypes.c_uint16], array[ctypes.c_int], array[ctypes.c_int32], array[ctypes.c_uint], array[ctypes.c_uint32], array[ctypes.c_long], array[ctypes.c_int64], array[ctypes.c_ulong], array[ctypes.c_uint64], array[ctypes.c_longlong], array[ctypes.c_ulonglong], array[ctypes.c_size_t], array[ctypes.c_ssize_t]]) -> Tuple[int, ...]: ... @overload def to_tuple(self: Union[array[ctypes.c_float], array[ctypes.c_double], array[ctypes.c_longdouble]]) -> Tuple[float, ...]: ... @overload def split_components(self: array[bvec1]) -> Tuple[array[ctypes.c_bool]]: ... @overload def split_components(self: array[bvec2]) -> Tuple[array[ctypes.c_bool], array[ctypes.c_bool]]: ... @overload def split_components(self: array[bvec3]) -> Tuple[array[ctypes.c_bool], array[ctypes.c_bool], array[ctypes.c_bool]]: ... @overload def split_components(self: array[bvec4]) -> Tuple[array[ctypes.c_bool], array[ctypes.c_bool], array[ctypes.c_bool], array[ctypes.c_bool]]: ... @overload def split_components(self: array[dmvec2]) -> Tuple[array[ctypes.c_double], array[ctypes.c_double]]: ... @overload def split_components(self: array[dmvec3]) -> Tuple[array[ctypes.c_double], array[ctypes.c_double], array[ctypes.c_double]]: ... @overload def split_components(self: array[dmvec4]) -> Tuple[array[ctypes.c_double], array[ctypes.c_double], array[ctypes.c_double], array[ctypes.c_double]]: ... @overload def split_components(self: array[dvec1]) -> Tuple[array[ctypes.c_double]]: ... @overload def split_components(self: array[dvec2]) -> Tuple[array[ctypes.c_double], array[ctypes.c_double]]: ... @overload def split_components(self: array[dvec3]) -> Tuple[array[ctypes.c_double], array[ctypes.c_double], array[ctypes.c_double]]: ... @overload def split_components(self: array[dvec4]) -> Tuple[array[ctypes.c_double], array[ctypes.c_double], array[ctypes.c_double], array[ctypes.c_double]]: ... @overload def split_components(self: array[i16vec1]) -> Tuple[array[ctypes.c_short]]: ... @overload def split_components(self: array[i16vec2]) -> Tuple[array[ctypes.c_short], array[ctypes.c_short]]: ... @overload def split_components(self: array[i16vec3]) -> Tuple[array[ctypes.c_short], array[ctypes.c_short], array[ctypes.c_short]]: ... @overload def split_components(self: array[i16vec4]) -> Tuple[array[ctypes.c_short], array[ctypes.c_short], array[ctypes.c_short], array[ctypes.c_short]]: ... @overload def split_components(self: array[i64vec1]) -> Tuple[array[ctypes.c_longlong]]: ... @overload def split_components(self: array[i64vec2]) -> Tuple[array[ctypes.c_longlong], array[ctypes.c_longlong]]: ... @overload def split_components(self: array[i64vec3]) -> Tuple[array[ctypes.c_longlong], array[ctypes.c_longlong], array[ctypes.c_longlong]]: ... @overload def split_components(self: array[i64vec4]) -> Tuple[array[ctypes.c_longlong], array[ctypes.c_longlong], array[ctypes.c_longlong], array[ctypes.c_longlong]]: ... @overload def split_components(self: array[i8vec1]) -> Tuple[array[ctypes.c_byte]]: ... @overload def split_components(self: array[i8vec2]) -> Tuple[array[ctypes.c_byte], array[ctypes.c_byte]]: ... @overload def split_components(self: array[i8vec3]) -> Tuple[array[ctypes.c_byte], array[ctypes.c_byte], array[ctypes.c_byte]]: ... @overload def split_components(self: array[i8vec4]) -> Tuple[array[ctypes.c_byte], array[ctypes.c_byte], array[ctypes.c_byte], array[ctypes.c_byte]]: ... @overload def split_components(self: array[imvec2]) -> Tuple[array[ctypes.c_long], array[ctypes.c_long]]: ... @overload def split_components(self: array[imvec3]) -> Tuple[array[ctypes.c_long], array[ctypes.c_long], array[ctypes.c_long]]: ... @overload def split_components(self: array[imvec4]) -> Tuple[array[ctypes.c_long], array[ctypes.c_long], array[ctypes.c_long], array[ctypes.c_long]]: ... @overload def split_components(self: array[ivec1]) -> Tuple[array[ctypes.c_long]]: ... @overload def split_components(self: array[ivec2]) -> Tuple[array[ctypes.c_long], array[ctypes.c_long]]: ... @overload def split_components(self: array[ivec3]) -> Tuple[array[ctypes.c_long], array[ctypes.c_long], array[ctypes.c_long]]: ... @overload def split_components(self: array[ivec4]) -> Tuple[array[ctypes.c_long], array[ctypes.c_long], array[ctypes.c_long], array[ctypes.c_long]]: ... @overload def split_components(self: array[mvec2]) -> Tuple[array[ctypes.c_float], array[ctypes.c_float]]: ... @overload def split_components(self: array[mvec3]) -> Tuple[array[ctypes.c_float], array[ctypes.c_float], array[ctypes.c_float]]: ... @overload def split_components(self: array[mvec4]) -> Tuple[array[ctypes.c_float], array[ctypes.c_float], array[ctypes.c_float], array[ctypes.c_float]]: ... @overload def split_components(self: array[u16vec1]) -> Tuple[array[ctypes.c_ushort]]: ... @overload def split_components(self: array[u16vec2]) -> Tuple[array[ctypes.c_ushort], array[ctypes.c_ushort]]: ... @overload def split_components(self: array[u16vec3]) -> Tuple[array[ctypes.c_ushort], array[ctypes.c_ushort], array[ctypes.c_ushort]]: ... @overload def split_components(self: array[u16vec4]) -> Tuple[array[ctypes.c_ushort], array[ctypes.c_ushort], array[ctypes.c_ushort], array[ctypes.c_ushort]]: ... @overload def split_components(self: array[u64vec1]) -> Tuple[array[ctypes.c_ulonglong]]: ... @overload def split_components(self: array[u64vec2]) -> Tuple[array[ctypes.c_ulonglong], array[ctypes.c_ulonglong]]: ... @overload def split_components(self: array[u64vec3]) -> Tuple[array[ctypes.c_ulonglong], array[ctypes.c_ulonglong], array[ctypes.c_ulonglong]]: ... @overload def split_components(self: array[u64vec4]) -> Tuple[array[ctypes.c_ulonglong], array[ctypes.c_ulonglong], array[ctypes.c_ulonglong], array[ctypes.c_ulonglong]]: ... @overload def split_components(self: array[u8vec1]) -> Tuple[array[ctypes.c_ubyte]]: ... @overload def split_components(self: array[u8vec2]) -> Tuple[array[ctypes.c_ubyte], array[ctypes.c_ubyte]]: ... @overload def split_components(self: array[u8vec3]) -> Tuple[array[ctypes.c_ubyte], array[ctypes.c_ubyte], array[ctypes.c_ubyte]]: ... @overload def split_components(self: array[u8vec4]) -> Tuple[array[ctypes.c_ubyte], array[ctypes.c_ubyte], array[ctypes.c_ubyte], array[ctypes.c_ubyte]]: ... @overload def split_components(self: array[umvec2]) -> Tuple[array[ctypes.c_ulong], array[ctypes.c_ulong]]: ... @overload def split_components(self: array[umvec3]) -> Tuple[array[ctypes.c_ulong], array[ctypes.c_ulong], array[ctypes.c_ulong]]: ... @overload def split_components(self: array[umvec4]) -> Tuple[array[ctypes.c_ulong], array[ctypes.c_ulong], array[ctypes.c_ulong], array[ctypes.c_ulong]]: ... @overload def split_components(self: array[uvec1]) -> Tuple[array[ctypes.c_ulong]]: ... @overload def split_components(self: array[uvec2]) -> Tuple[array[ctypes.c_ulong], array[ctypes.c_ulong]]: ... @overload def split_components(self: array[uvec3]) -> Tuple[array[ctypes.c_ulong], array[ctypes.c_ulong], array[ctypes.c_ulong]]: ... @overload def split_components(self: array[uvec4]) -> Tuple[array[ctypes.c_ulong], array[ctypes.c_ulong], array[ctypes.c_ulong], array[ctypes.c_ulong]]: ... @overload def split_components(self: array[vec1]) -> Tuple[array[ctypes.c_float]]: ... @overload def split_components(self: array[vec2]) -> Tuple[array[ctypes.c_float], array[ctypes.c_float]]: ... @overload def split_components(self: array[vec3]) -> Tuple[array[ctypes.c_float], array[ctypes.c_float], array[ctypes.c_float]]: ... @overload def split_components(self: array[vec4]) -> Tuple[array[ctypes.c_float], array[ctypes.c_float], array[ctypes.c_float], array[ctypes.c_float]]: ... @overload def split_components(self: array[dquat]) -> Tuple[array[ctypes.c_double], array[ctypes.c_double], array[ctypes.c_double], array[ctypes.c_double]]: ... @overload def split_components(self: array[quat]) -> Tuple[array[ctypes.c_float], array[ctypes.c_float], array[ctypes.c_float], array[ctypes.c_float]]: ... @overload def split_components(self: array[dmat2x2]) -> Tuple[array[dvec2], array[dvec2]]: ... @overload def split_components(self: array[dmat2x3]) -> Tuple[array[dvec3], array[dvec3]]: ... @overload def split_components(self: array[dmat2x4]) -> Tuple[array[dvec4], array[dvec4]]: ... @overload def split_components(self: array[dmat3x2]) -> Tuple[array[dvec2], array[dvec2], array[dvec2]]: ... @overload def split_components(self: array[dmat3x3]) -> Tuple[array[dvec3], array[dvec3], array[dvec3]]: ... @overload def split_components(self: array[dmat3x4]) -> Tuple[array[dvec4], array[dvec4], array[dvec4]]: ... @overload def split_components(self: array[dmat4x2]) -> Tuple[array[dvec2], array[dvec2], array[dvec2], array[dvec2]]: ... @overload def split_components(self: array[dmat4x3]) -> Tuple[array[dvec3], array[dvec3], array[dvec3], array[dvec3]]: ... @overload def split_components(self: array[dmat4x4]) -> Tuple[array[dvec4], array[dvec4], array[dvec4], array[dvec4]]: ... @overload def split_components(self: array[imat2x2]) -> Tuple[array[ivec2], array[ivec2]]: ... @overload def split_components(self: array[imat2x3]) -> Tuple[array[ivec3], array[ivec3]]: ... @overload def split_components(self: array[imat2x4]) -> Tuple[array[ivec4], array[ivec4]]: ... @overload def split_components(self: array[imat3x2]) -> Tuple[array[ivec2], array[ivec2], array[ivec2]]: ... @overload def split_components(self: array[imat3x3]) -> Tuple[array[ivec3], array[ivec3], array[ivec3]]: ... @overload def split_components(self: array[imat3x4]) -> Tuple[array[ivec4], array[ivec4], array[ivec4]]: ... @overload def split_components(self: array[imat4x2]) -> Tuple[array[ivec2], array[ivec2], array[ivec2], array[ivec2]]: ... @overload def split_components(self: array[imat4x3]) -> Tuple[array[ivec3], array[ivec3], array[ivec3], array[ivec3]]: ... @overload def split_components(self: array[imat4x4]) -> Tuple[array[ivec4], array[ivec4], array[ivec4], array[ivec4]]: ... @overload def split_components(self: array[mat2x2]) -> Tuple[array[vec2], array[vec2]]: ... @overload def split_components(self: array[mat2x3]) -> Tuple[array[vec3], array[vec3]]: ... @overload def split_components(self: array[mat2x4]) -> Tuple[array[vec4], array[vec4]]: ... @overload def split_components(self: array[mat3x2]) -> Tuple[array[vec2], array[vec2], array[vec2]]: ... @overload def split_components(self: array[mat3x3]) -> Tuple[array[vec3], array[vec3], array[vec3]]: ... @overload def split_components(self: array[mat3x4]) -> Tuple[array[vec4], array[vec4], array[vec4]]: ... @overload def split_components(self: array[mat4x2]) -> Tuple[array[vec2], array[vec2], array[vec2], array[vec2]]: ... @overload def split_components(self: array[mat4x3]) -> Tuple[array[vec3], array[vec3], array[vec3], array[vec3]]: ... @overload def split_components(self: array[mat4x4]) -> Tuple[array[vec4], array[vec4], array[vec4], array[vec4]]: ... @overload def split_components(self: array[umat2x2]) -> Tuple[array[uvec2], array[uvec2]]: ... @overload def split_components(self: array[umat2x3]) -> Tuple[array[uvec3], array[uvec3]]: ... @overload def split_components(self: array[umat2x4]) -> Tuple[array[uvec4], array[uvec4]]: ... @overload def split_components(self: array[umat3x2]) -> Tuple[array[uvec2], array[uvec2], array[uvec2]]: ... @overload def split_components(self: array[umat3x3]) -> Tuple[array[uvec3], array[uvec3], array[uvec3]]: ... @overload def split_components(self: array[umat3x4]) -> Tuple[array[uvec4], array[uvec4], array[uvec4]]: ... @overload def split_components(self: array[umat4x2]) -> Tuple[array[uvec2], array[uvec2], array[uvec2], array[uvec2]]: ... @overload def split_components(self: array[umat4x3]) -> Tuple[array[uvec3], array[uvec3], array[uvec3], array[uvec3]]: ... @overload def split_components(self: array[umat4x4]) -> Tuple[array[uvec4], array[uvec4], array[uvec4], array[uvec4]]: ... def to_bytes(self) -> bytes: ... def reduce(self, func: Callable[[_AT, _AT], _AT], init: Optional[_AT] = ..., /) -> _AT: ... def filter(self, _: Callable[[_AT], Any], /) -> array[_AT]: ... def map(self, _: Callable[[_AT], _AT2], /) -> array[_AT2]: ... def sort(self, _: Callable[[_AT], SupportsInt], /) -> array[_AT]: ... def concat(self, other: array[_AT], /) -> array[_AT]: ... def iconcat(self, other: array[_AT], /) -> None: ... def repeat(self, count: int, /) -> array[_AT]: ... def irepeat(self, count: int, /) -> None: ... @overload @staticmethod def as_reference(array: array[_AT], /) -> array[_AT]: ... @overload @staticmethod def as_reference(obj: _GLMT, /) -> array[_GLMT]: ... def reinterpret_cast(self, type: Type[_AT], /) -> array[_AT]: ... def __eq__(self, other: Any) -> bool: ... def __ne__(self, other: Any) -> bool: ... def __add__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __radd__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __iadd__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __sub__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __rsub__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __isub__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __mul__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __rmul__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __imul__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __mod__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __rmod__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __imod__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __pow__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __rpow__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __ipow__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __lshift__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __rlshift__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __ilshift__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __rshift__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __rrshift__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __irshift__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __and__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __rand__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __iand__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __xor__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __rxor__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __ixor__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __or__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __ror__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __ior__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __truediv__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __rtruediv__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __itruediv__(self, other: Union[glm_typing.Number, _AT, array[_AT]]) -> array[_AT]: ... def __neg__(self) -> array[_AT]: ... def __pos__(self) -> array[_AT]: ... def __abs__(self) -> array[_AT]: ... def __inv__(self) -> array[_AT]: ... @overload def abs(x: glm_typing.Number, /) -> float: ... @overload def abs(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def abs(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def abs(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def abs(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def abs(x: _VT, /) -> _VT: ... @overload def ceil(x: glm_typing.Number, /) -> float: ... @overload def ceil(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def ceil(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def ceil(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def ceil(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def ceil(x: _VT, /) -> _VT: ... @overload def clamp(x: glm_typing.Number, min: glm_typing.Number, max: glm_typing.Number, /) -> glm_typing.Number: ... @overload def clamp(x: glm_typing.F32Vector1, min: glm_typing.Number, max: glm_typing.Number, /) -> vec1: ... @overload def clamp(x: glm_typing.F32Vector1, min: glm_typing.F32Vector1, max: glm_typing.F32Vector1, /) -> vec1: ... @overload def clamp(x: glm_typing.F32Vector2, min: glm_typing.Number, max: glm_typing.Number, /) -> vec2: ... @overload def clamp(x: glm_typing.F32Vector2, min: glm_typing.F32Vector2, max: glm_typing.F32Vector2, /) -> vec2: ... @overload def clamp(x: glm_typing.F32Vector3, min: glm_typing.Number, max: glm_typing.Number, /) -> vec3: ... @overload def clamp(x: glm_typing.F32Vector3, min: glm_typing.F32Vector3, max: glm_typing.F32Vector3, /) -> vec3: ... @overload def clamp(x: glm_typing.F32Vector4, min: glm_typing.Number, max: glm_typing.Number, /) -> vec4: ... @overload def clamp(x: glm_typing.F32Vector4, min: glm_typing.F32Vector4, max: glm_typing.F32Vector4, /) -> vec4: ... @overload def clamp(x: _NF32VT, min: glm_typing.Number, max: glm_typing.Number, /) -> _NF32VT: ... @overload def clamp(x: _NF32VT, min: _NF32VT, max: _NF32VT, /) -> _NF32VT: ... @overload def floatBitsToInt(x: float, /) -> int: ... @overload def floatBitsToInt(x: glm_typing.F32Vector2, /) -> ivec2: ... @overload def floatBitsToInt(x: glm_typing.F32Vector3, /) -> ivec3: ... @overload def floatBitsToInt(x: glm_typing.F32Vector4, /) -> ivec4: ... @overload def floatBitsToInt(x: glm_typing.F32Vector1, /) -> ivec1: ... @overload def floatBitsToUint(x: float, /) -> int: ... @overload def floatBitsToUint(x: glm_typing.F32Vector2, /) -> uvec2: ... @overload def floatBitsToUint(x: glm_typing.F32Vector3, /) -> uvec3: ... @overload def floatBitsToUint(x: glm_typing.F32Vector4, /) -> uvec4: ... @overload def floatBitsToUint(x: glm_typing.F32Vector1, /) -> uvec1: ... @overload def floor(x: glm_typing.Number, /) -> float: ... @overload def floor(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def floor(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def floor(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def floor(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def floor(x: _VT, /) -> _VT: ... def fma(a: glm_typing.Number, b: glm_typing.Number, c: glm_typing.Number, /) -> float: ... @overload def fmax(x: glm_typing.Number, y: glm_typing.Number, /) -> float: ... @overload def fmax(a: glm_typing.Number, b: glm_typing.Number, c: glm_typing.Number, /) -> float: ... @overload def fmax(a: glm_typing.Number, b: glm_typing.Number, c: glm_typing.Number, d: glm_typing.Number, /) -> float: ... @overload def fmax(x: glm_typing.F32Vector1, y: glm_typing.Number, /) -> vec1: ... @overload def fmax(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> vec1: ... @overload def fmax(a: glm_typing.F32Vector1, b: glm_typing.F32Vector1, c: glm_typing.F32Vector1, /) -> vec1: ... @overload def fmax(a: glm_typing.F32Vector1, b: glm_typing.F32Vector1, c: glm_typing.F32Vector1, d: glm_typing.F32Vector1, /) -> vec1: ... @overload def fmax(x: glm_typing.F32Vector2, y: glm_typing.Number, /) -> vec2: ... @overload def fmax(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> vec2: ... @overload def fmax(a: glm_typing.F32Vector2, b: glm_typing.F32Vector2, c: glm_typing.F32Vector2, /) -> vec2: ... @overload def fmax(a: glm_typing.F32Vector2, b: glm_typing.F32Vector2, c: glm_typing.F32Vector2, d: glm_typing.F32Vector2, /) -> vec2: ... @overload def fmax(x: glm_typing.F32Vector3, y: glm_typing.Number, /) -> vec3: ... @overload def fmax(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> vec3: ... @overload def fmax(a: glm_typing.F32Vector3, b: glm_typing.F32Vector3, c: glm_typing.F32Vector3, /) -> vec3: ... @overload def fmax(a: glm_typing.F32Vector3, b: glm_typing.F32Vector3, c: glm_typing.F32Vector3, d: glm_typing.F32Vector3, /) -> vec3: ... @overload def fmax(x: glm_typing.F32Vector4, y: glm_typing.Number, /) -> vec4: ... @overload def fmax(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> vec4: ... @overload def fmax(a: glm_typing.F32Vector4, b: glm_typing.F32Vector4, c: glm_typing.F32Vector4, /) -> vec4: ... @overload def fmax(a: glm_typing.F32Vector4, b: glm_typing.F32Vector4, c: glm_typing.F32Vector4, d: glm_typing.F32Vector4, /) -> vec4: ... @overload def fmax(x: _NF32VT, y: glm_typing.Number, /) -> _NF32VT: ... @overload def fmax(x: _NF32VT, y: _NF32VT, /) -> _NF32VT: ... @overload def fmax(a: _NF32VT, b: _NF32VT, c: _NF32VT, /) -> _NF32VT: ... @overload def fmax(a: _NF32VT, b: _NF32VT, c: _NF32VT, d: _NF32VT, /) -> _NF32VT: ... @overload def fmin(x: glm_typing.Number, y: glm_typing.Number, /) -> float: ... @overload def fmin(a: glm_typing.Number, b: glm_typing.Number, c: glm_typing.Number, /) -> float: ... @overload def fmin(a: glm_typing.Number, b: glm_typing.Number, c: glm_typing.Number, d: glm_typing.Number, /) -> float: ... @overload def fmin(x: glm_typing.F32Vector1, y: glm_typing.Number, /) -> vec1: ... @overload def fmin(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> vec1: ... @overload def fmin(a: glm_typing.F32Vector1, b: glm_typing.F32Vector1, c: glm_typing.F32Vector1, /) -> vec1: ... @overload def fmin(a: glm_typing.F32Vector1, b: glm_typing.F32Vector1, c: glm_typing.F32Vector1, d: glm_typing.F32Vector1, /) -> vec1: ... @overload def fmin(x: glm_typing.F32Vector2, y: glm_typing.Number, /) -> vec2: ... @overload def fmin(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> vec2: ... @overload def fmin(a: glm_typing.F32Vector2, b: glm_typing.F32Vector2, c: glm_typing.F32Vector2, /) -> vec2: ... @overload def fmin(a: glm_typing.F32Vector2, b: glm_typing.F32Vector2, c: glm_typing.F32Vector2, d: glm_typing.F32Vector2, /) -> vec2: ... @overload def fmin(x: glm_typing.F32Vector3, y: glm_typing.Number, /) -> vec3: ... @overload def fmin(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> vec3: ... @overload def fmin(a: glm_typing.F32Vector3, b: glm_typing.F32Vector3, c: glm_typing.F32Vector3, /) -> vec3: ... @overload def fmin(a: glm_typing.F32Vector3, b: glm_typing.F32Vector3, c: glm_typing.F32Vector3, d: glm_typing.F32Vector3, /) -> vec3: ... @overload def fmin(x: glm_typing.F32Vector4, y: glm_typing.Number, /) -> vec4: ... @overload def fmin(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> vec4: ... @overload def fmin(a: glm_typing.F32Vector4, b: glm_typing.F32Vector4, c: glm_typing.F32Vector4, /) -> vec4: ... @overload def fmin(a: glm_typing.F32Vector4, b: glm_typing.F32Vector4, c: glm_typing.F32Vector4, d: glm_typing.F32Vector4, /) -> vec4: ... @overload def fmin(x: _NF32VT, y: glm_typing.Number, /) -> _NF32VT: ... @overload def fmin(x: _NF32VT, y: _NF32VT, /) -> _NF32VT: ... @overload def fmin(a: _NF32VT, b: _NF32VT, c: _NF32VT, /) -> _NF32VT: ... @overload def fmin(a: _NF32VT, b: _NF32VT, c: _NF32VT, d: _NF32VT, /) -> _NF32VT: ... @overload def fract(x: glm_typing.Number, /) -> float: ... @overload def fract(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def fract(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def fract(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def fract(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def fract(x: _VT, /) -> _VT: ... @overload def frexp(x: glm_typing.Number, /) -> Tuple[float, int]: ... @overload def frexp(x: dvec1, exp: ivec1, /) -> dvec1: ... @overload def frexp(x: dvec2, exp: ivec2, /) -> dvec2: ... @overload def frexp(x: dvec3, exp: ivec3, /) -> dvec3: ... @overload def frexp(x: dvec4, exp: ivec4, /) -> dvec4: ... @overload def frexp(x: glm_typing.F32Vector1, exp: ivec1, /) -> vec1: ... @overload def frexp(x: glm_typing.F32Vector2, exp: ivec2, /) -> vec2: ... @overload def frexp(x: glm_typing.F32Vector3, exp: ivec3, /) -> vec3: ... @overload def frexp(x: glm_typing.F32Vector4, exp: ivec4, /) -> vec4: ... @overload def intBitsToFloat(x: int, /) -> float: ... @overload def intBitsToFloat(x: glm_typing.I32Vector2, /) -> vec2: ... @overload def intBitsToFloat(x: glm_typing.I32Vector3, /) -> vec3: ... @overload def intBitsToFloat(x: glm_typing.I32Vector4, /) -> vec4: ... @overload def intBitsToFloat(x: glm_typing.I32Vector1, /) -> vec1: ... @overload def isinf(x: glm_typing.Number, /) -> bool: ... @overload def isinf(x: glm_typing.FDAnyVector1, /) -> bvec1: ... @overload def isinf(x: glm_typing.FDAnyVector2, /) -> bvec2: ... @overload def isinf(x: glm_typing.FDAnyVector3, /) -> bvec3: ... @overload def isinf(x: glm_typing.FDAnyQuaternionVector4, /) -> bvec4: ... @overload def isnan(x: glm_typing.Number, /) -> bool: ... @overload def isnan(x: glm_typing.FDAnyVector1, /) -> bvec1: ... @overload def isnan(x: glm_typing.FDAnyVector2, /) -> bvec2: ... @overload def isnan(x: glm_typing.FDAnyVector3, /) -> bvec3: ... @overload def isnan(x: glm_typing.FDAnyQuaternionVector4, /) -> bvec4: ... @overload def ldexp(x: glm_typing.Number, exp: glm_typing.Number, /) -> float: ... @overload def ldexp(x: dmvec2, exp: ivec2, /) -> dmvec2: ... @overload def ldexp(x: dmvec3, exp: ivec3, /) -> dmvec3: ... @overload def ldexp(x: dmvec4, exp: ivec4, /) -> dmvec4: ... @overload def ldexp(x: dvec1, exp: ivec1, /) -> dvec1: ... @overload def ldexp(x: dvec2, exp: ivec2, /) -> dvec2: ... @overload def ldexp(x: dvec3, exp: ivec3, /) -> dvec3: ... @overload def ldexp(x: dvec4, exp: ivec4, /) -> dvec4: ... @overload def ldexp(x: mvec2, exp: ivec2, /) -> mvec2: ... @overload def ldexp(x: mvec3, exp: ivec3, /) -> mvec3: ... @overload def ldexp(x: mvec4, exp: ivec4, /) -> mvec4: ... @overload def ldexp(x: Union[vec1, Tuple[glm_typing.Number]], exp: ivec1, /) -> vec1: ... @overload def ldexp(x: Union[vec2, Tuple[glm_typing.Number, glm_typing.Number]], exp: ivec2, /) -> vec2: ... @overload def ldexp(x: Union[vec3, Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number]], exp: ivec3, /) -> vec3: ... @overload def ldexp(x: Union[vec4, Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number]], exp: ivec4, /) -> vec4: ... @overload def max(x: glm_typing.Number, y: glm_typing.Number, /) -> float: ... @overload def max(a: glm_typing.Number, b: glm_typing.Number, c: glm_typing.Number, /) -> float: ... @overload def max(a: glm_typing.Number, b: glm_typing.Number, c: glm_typing.Number, d: glm_typing.Number, /) -> float: ... @overload def max(x: glm_typing.F32Vector1, y: glm_typing.Number, /) -> vec1: ... @overload def max(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> vec1: ... @overload def max(a: glm_typing.F32Vector1, b: glm_typing.F32Vector1, c: glm_typing.F32Vector1, /) -> vec1: ... @overload def max(a: glm_typing.F32Vector1, b: glm_typing.F32Vector1, c: glm_typing.F32Vector1, d: glm_typing.F32Vector1, /) -> vec1: ... @overload def max(x: glm_typing.F32Vector2, y: glm_typing.Number, /) -> vec2: ... @overload def max(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> vec2: ... @overload def max(a: glm_typing.F32Vector2, b: glm_typing.F32Vector2, c: glm_typing.F32Vector2, /) -> vec2: ... @overload def max(a: glm_typing.F32Vector2, b: glm_typing.F32Vector2, c: glm_typing.F32Vector2, d: glm_typing.F32Vector2, /) -> vec2: ... @overload def max(x: glm_typing.F32Vector3, y: glm_typing.Number, /) -> vec3: ... @overload def max(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> vec3: ... @overload def max(a: glm_typing.F32Vector3, b: glm_typing.F32Vector3, c: glm_typing.F32Vector3, /) -> vec3: ... @overload def max(a: glm_typing.F32Vector3, b: glm_typing.F32Vector3, c: glm_typing.F32Vector3, d: glm_typing.F32Vector3, /) -> vec3: ... @overload def max(x: glm_typing.F32Vector4, y: glm_typing.Number, /) -> vec4: ... @overload def max(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> vec4: ... @overload def max(a: glm_typing.F32Vector4, b: glm_typing.F32Vector4, c: glm_typing.F32Vector4, /) -> vec4: ... @overload def max(a: glm_typing.F32Vector4, b: glm_typing.F32Vector4, c: glm_typing.F32Vector4, d: glm_typing.F32Vector4, /) -> vec4: ... @overload def max(x: _NF32VT, y: glm_typing.Number, /) -> _NF32VT: ... @overload def max(x: _NF32VT, y: _NF32VT, /) -> _NF32VT: ... @overload def max(a: _NF32VT, b: _NF32VT, c: _NF32VT, /) -> _NF32VT: ... @overload def max(a: _NF32VT, b: _NF32VT, c: _NF32VT, d: _NF32VT, /) -> _NF32VT: ... @overload def max(_: Iterable[_T], /) -> _T: ... @overload def min(x: glm_typing.Number, y: glm_typing.Number, /) -> float: ... @overload def min(a: glm_typing.Number, b: glm_typing.Number, c: glm_typing.Number, /) -> float: ... @overload def min(a: glm_typing.Number, b: glm_typing.Number, c: glm_typing.Number, d: glm_typing.Number, /) -> float: ... @overload def min(x: glm_typing.F32Vector1, y: glm_typing.Number, /) -> vec1: ... @overload def min(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> vec1: ... @overload def min(a: glm_typing.F32Vector1, b: glm_typing.F32Vector1, c: glm_typing.F32Vector1, /) -> vec1: ... @overload def min(a: glm_typing.F32Vector1, b: glm_typing.F32Vector1, c: glm_typing.F32Vector1, d: glm_typing.F32Vector1, /) -> vec1: ... @overload def min(x: glm_typing.F32Vector2, y: glm_typing.Number, /) -> vec2: ... @overload def min(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> vec2: ... @overload def min(a: glm_typing.F32Vector2, b: glm_typing.F32Vector2, c: glm_typing.F32Vector2, /) -> vec2: ... @overload def min(a: glm_typing.F32Vector2, b: glm_typing.F32Vector2, c: glm_typing.F32Vector2, d: glm_typing.F32Vector2, /) -> vec2: ... @overload def min(x: glm_typing.F32Vector3, y: glm_typing.Number, /) -> vec3: ... @overload def min(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> vec3: ... @overload def min(a: glm_typing.F32Vector3, b: glm_typing.F32Vector3, c: glm_typing.F32Vector3, /) -> vec3: ... @overload def min(a: glm_typing.F32Vector3, b: glm_typing.F32Vector3, c: glm_typing.F32Vector3, d: glm_typing.F32Vector3, /) -> vec3: ... @overload def min(x: glm_typing.F32Vector4, y: glm_typing.Number, /) -> vec4: ... @overload def min(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> vec4: ... @overload def min(a: glm_typing.F32Vector4, b: glm_typing.F32Vector4, c: glm_typing.F32Vector4, /) -> vec4: ... @overload def min(a: glm_typing.F32Vector4, b: glm_typing.F32Vector4, c: glm_typing.F32Vector4, d: glm_typing.F32Vector4, /) -> vec4: ... @overload def min(x: _NF32VT, y: glm_typing.Number, /) -> _NF32VT: ... @overload def min(x: _NF32VT, y: _NF32VT, /) -> _NF32VT: ... @overload def min(a: _NF32VT, b: _NF32VT, c: _NF32VT, /) -> _NF32VT: ... @overload def min(a: _NF32VT, b: _NF32VT, c: _NF32VT, d: _NF32VT, /) -> _NF32VT: ... @overload def min(_: Iterable[_T], /) -> _T: ... @overload def mix(x: glm_typing.Number, y: glm_typing.Number, a: glm_typing.Number, /) -> float: ... @overload def mix(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, a: Union[glm_typing.FDAnyVector1, glm_typing.BAnyVector1, glm_typing.Number], /) -> vec1: ... @overload def mix(x: _NF32V1T, y: _NF32V1T, a: Union[glm_typing.FDAnyVector1, glm_typing.BAnyVector1, glm_typing.Number], /) -> _NF32V1T: ... @overload def mix(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, a: Union[glm_typing.FDAnyVector2, glm_typing.BAnyVector2, glm_typing.Number], /) -> vec2: ... @overload def mix(x: _NF32V2T, y: _NF32V2T, a: Union[glm_typing.FDAnyVector2, glm_typing.BAnyVector2, glm_typing.Number], /) -> _NF32V2T: ... @overload def mix(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, a: Union[glm_typing.FDAnyVector3, glm_typing.BAnyVector3, glm_typing.Number], /) -> vec3: ... @overload def mix(x: _NF32V3T, y: _NF32V3T, a: Union[glm_typing.FDAnyVector3, glm_typing.BAnyVector3, glm_typing.Number], /) -> _NF32V3T: ... @overload def mix(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, a: Union[glm_typing.FDAnyVector4, glm_typing.BAnyVector4, glm_typing.Number], /) -> vec4: ... @overload def mix(x: _NF32V4T, y: _NF32V4T, a: Union[glm_typing.FDAnyVector4, glm_typing.BAnyVector4, glm_typing.Number], /) -> _NF32V4T: ... @overload def mix(x: glm_typing.F32Matrix2x2, y: glm_typing.F32Matrix2x2, a: Union[glm_typing.FAnyMatrix2x2, glm_typing.Number], /) -> mat2x2: ... @overload def mix(x: _NF32M2X2T, y: _NF32M2X2T, a: Union[glm_typing.FAnyMatrix2x2, glm_typing.Number], /) -> _NF32M2X2T: ... @overload def mix(x: glm_typing.F32Matrix2x3, y: glm_typing.F32Matrix2x3, a: Union[glm_typing.FAnyMatrix2x3, glm_typing.Number], /) -> mat2x3: ... @overload def mix(x: _NF32M2X3T, y: _NF32M2X3T, a: Union[glm_typing.FAnyMatrix2x3, glm_typing.Number], /) -> _NF32M2X3T: ... @overload def mix(x: glm_typing.F32Matrix2x4, y: glm_typing.F32Matrix2x4, a: Union[glm_typing.FAnyMatrix2x4, glm_typing.Number], /) -> mat2x4: ... @overload def mix(x: _NF32M2X4T, y: _NF32M2X4T, a: Union[glm_typing.FAnyMatrix2x4, glm_typing.Number], /) -> _NF32M2X4T: ... @overload def mix(x: glm_typing.F32Matrix3x2, y: glm_typing.F32Matrix3x2, a: Union[glm_typing.FAnyMatrix3x2, glm_typing.Number], /) -> mat3x2: ... @overload def mix(x: _NF32M3X2T, y: _NF32M3X2T, a: Union[glm_typing.FAnyMatrix3x2, glm_typing.Number], /) -> _NF32M3X2T: ... @overload def mix(x: glm_typing.F32Matrix3x3, y: glm_typing.F32Matrix3x3, a: Union[glm_typing.FAnyMatrix3x3, glm_typing.Number], /) -> mat3x3: ... @overload def mix(x: _NF32M3X3T, y: _NF32M3X3T, a: Union[glm_typing.FAnyMatrix3x3, glm_typing.Number], /) -> _NF32M3X3T: ... @overload def mix(x: glm_typing.F32Matrix3x4, y: glm_typing.F32Matrix3x4, a: Union[glm_typing.FAnyMatrix3x4, glm_typing.Number], /) -> mat3x4: ... @overload def mix(x: _NF32M3X4T, y: _NF32M3X4T, a: Union[glm_typing.FAnyMatrix3x4, glm_typing.Number], /) -> _NF32M3X4T: ... @overload def mix(x: glm_typing.F32Matrix4x2, y: glm_typing.F32Matrix4x2, a: Union[glm_typing.FAnyMatrix4x2, glm_typing.Number], /) -> mat4x2: ... @overload def mix(x: _NF32M4X2T, y: _NF32M4X2T, a: Union[glm_typing.FAnyMatrix4x2, glm_typing.Number], /) -> _NF32M4X2T: ... @overload def mix(x: glm_typing.F32Matrix4x3, y: glm_typing.F32Matrix4x3, a: Union[glm_typing.FAnyMatrix4x3, glm_typing.Number], /) -> mat4x3: ... @overload def mix(x: _NF32M4X3T, y: _NF32M4X3T, a: Union[glm_typing.FAnyMatrix4x3, glm_typing.Number], /) -> _NF32M4X3T: ... @overload def mix(x: glm_typing.F32Matrix4x4, y: glm_typing.F32Matrix4x4, a: Union[glm_typing.FAnyMatrix4x4, glm_typing.Number], /) -> mat4x4: ... @overload def mix(x: _NF32M4X4T, y: _NF32M4X4T, a: Union[glm_typing.FAnyMatrix4x4, glm_typing.Number], /) -> _NF32M4X4T: ... @overload def mix(x: _QT, y: _QT, a: glm_typing.Number, /) -> _QT: ... @overload def modf(x: glm_typing.Number, /) -> Tuple[float, float]: ... @overload def modf(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def modf(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def modf(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def modf(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def modf(x: _FDVT, i: _FDVT, /) -> _FDVT: ... @overload def round(x: glm_typing.Number, /) -> float: ... @overload def round(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def round(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def round(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def round(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def round(x: _FDVT, i: _FDVT, /) -> _FDVT: ... @overload def roundEven(x: glm_typing.Number, /) -> float: ... @overload def roundEven(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def roundEven(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def roundEven(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def roundEven(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def roundEven(x: _FDVT, i: _FDVT, /) -> _FDVT: ... @overload def sign(x: glm_typing.Number, /) -> float: ... @overload def sign(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def sign(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def sign(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def sign(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def sign(x: _FDVT, i: _FDVT, /) -> _FDVT: ... @overload def smoothstep(edge0: glm_typing.Number, edge1: glm_typing.Number, x: glm_typing.Number, /) -> float: ... @overload def smoothstep(edge0: glm_typing.Number, edge1: glm_typing.Number, x: glm_typing.F32Vector1, /) -> vec1: ... @overload def smoothstep(edge0: glm_typing.F32Vector1, edge1: glm_typing.F32Vector1, x: glm_typing.F32Vector1, /) -> vec1: ... @overload def smoothstep(edge0: glm_typing.Number, edge1: glm_typing.Number, x: glm_typing.F32Vector2, /) -> vec2: ... @overload def smoothstep(edge0: glm_typing.F32Vector2, edge1: glm_typing.F32Vector2, x: glm_typing.F32Vector2, /) -> vec2: ... @overload def smoothstep(edge0: glm_typing.Number, edge1: glm_typing.Number, x: glm_typing.F32Vector3, /) -> vec3: ... @overload def smoothstep(edge0: glm_typing.F32Vector3, edge1: glm_typing.F32Vector3, x: glm_typing.F32Vector3, /) -> vec3: ... @overload def smoothstep(edge0: glm_typing.Number, edge1: glm_typing.Number, x: glm_typing.F32Vector4, /) -> vec4: ... @overload def smoothstep(edge0: glm_typing.F32Vector4, edge1: glm_typing.F32Vector4, x: glm_typing.F32Vector4, /) -> vec4: ... @overload def smoothstep(edge0: glm_typing.Number, edge1: glm_typing.Number, x: _NF32VT, /) -> _FDVT: ... @overload def smoothstep(edge0: _NF32VT, edge1: _NF32VT, x: _NF32VT, /) -> _NF32VT: ... @overload def step(edge: glm_typing.Number, x: glm_typing.Number, /) -> float: ... @overload def step(edge: glm_typing.Number, x: glm_typing.F32Vector1, /) -> vec1: ... @overload def step(edge: glm_typing.F32Vector1, x: glm_typing.F32Vector1, /) -> vec1: ... @overload def step(edge: glm_typing.Number, x: glm_typing.F32Vector2, /) -> vec2: ... @overload def step(edge: glm_typing.F32Vector2, x: glm_typing.F32Vector2, /) -> vec2: ... @overload def step(edge: glm_typing.Number, x: glm_typing.F32Vector3, /) -> vec3: ... @overload def step(edge: glm_typing.F32Vector3, x: glm_typing.F32Vector3, /) -> vec3: ... @overload def step(edge: glm_typing.Number, x: glm_typing.F32Vector4, /) -> vec4: ... @overload def step(edge: glm_typing.F32Vector4, x: glm_typing.F32Vector4, /) -> vec4: ... @overload def step(edge: glm_typing.Number, x: _NF32VT, /) -> _NF32VT: ... @overload def step(edge: _NF32VT, x: _NF32VT, /) -> _NF32VT: ... @overload def trunc(x: glm_typing.Number, /) -> float: ... @overload def trunc(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def trunc(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def trunc(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def trunc(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def trunc(x: _FDVT, /) -> _FDVT: ... @overload def uintBitsToFloat(x: int, /) -> float: ... @overload def uintBitsToFloat(x: glm_typing.U32Vector2, /) -> vec2: ... @overload def uintBitsToFloat(x: glm_typing.U32Vector3, /) -> vec3: ... @overload def uintBitsToFloat(x: glm_typing.U32Vector4, /) -> vec4: ... @overload def uintBitsToFloat(x: glm_typing.U32Vector1, /) -> vec1: ... @overload def exp(x: glm_typing.Number, /) -> float: ... @overload def exp(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def exp(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def exp(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def exp(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def exp(x: _FDVT, /) -> _FDVT: ... @overload def exp(x: _QT, /) -> _QT: ... @overload def exp2(x: glm_typing.Number, /) -> float: ... @overload def exp2(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def exp2(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def exp2(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def exp2(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def exp2(x: _FDVT, /) -> _FDVT: ... @overload def inversesqrt(x: glm_typing.Number, /) -> float: ... @overload def inversesqrt(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def inversesqrt(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def inversesqrt(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def inversesqrt(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def inversesqrt(x: _FDVT, /) -> _FDVT: ... @overload def log(x: glm_typing.Number, /) -> float: ... @overload def log(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def log(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def log(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def log(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def log(x: _FDVT, /) -> _FDVT: ... @overload def log(x: _QT, /) -> _QT: ... @overload def log2(x: glm_typing.Number, /) -> float: ... @overload def log2(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def log2(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def log2(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def log2(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def log2(x: _FDVT, /) -> _FDVT: ... @overload def pow(base: glm_typing.Number, exponent: glm_typing.Number, /) -> float: ... @overload def pow(base: glm_typing.F32Vector1, exponent: glm_typing.F32Vector1, /) -> vec1: ... @overload def pow(base: glm_typing.F32Vector2, exponent: glm_typing.F32Vector2, /) -> vec2: ... @overload def pow(base: glm_typing.F32Vector3, exponent: glm_typing.F32Vector3, /) -> vec3: ... @overload def pow(base: glm_typing.F32Vector4, exponent: glm_typing.F32Vector4, /) -> vec4: ... @overload def pow(base: _NF32DFVT, exponent: _NF32DFVT, /) -> _NF32DFVT: ... @overload def pow(base: _QT, exponent: _QT, /) -> _QT: ... @overload def sqrt(x: glm_typing.Number, /) -> float: ... @overload def sqrt(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def sqrt(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def sqrt(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def sqrt(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def sqrt(x: _FDVT, /) -> _FDVT: ... @overload def sqrt(x: _QT, /) -> _QT: ... @overload def cross(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> vec3: ... @overload def cross(x: _NF32DFV3T, y: _NF32DFV3T, /) -> _NF32DFV3T: ... @overload def cross(x: _QT, y: _QT, /) -> _QT: ... @overload def distance(p0: glm_typing.Number, p1: glm_typing.Number, /) -> float: ... @overload def distance(p0: glm_typing.F32Vector1, p1: glm_typing.F32Vector1, /) -> float: ... @overload def distance(p0: glm_typing.F32Vector2, p1: glm_typing.F32Vector2, /) -> float: ... @overload def distance(p0: glm_typing.F32Vector3, p1: glm_typing.F32Vector3, /) -> float: ... @overload def distance(p0: glm_typing.F32Vector4, p1: glm_typing.F32Vector4, /) -> float: ... @overload def distance(p0: _NF32DFVT, p1: _NF32DFVT, /) -> float: ... @overload def dot(x: glm_typing.Number, y: glm_typing.Number, /) -> float: ... @overload def dot(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> float: ... @overload def dot(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> float: ... @overload def dot(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> float: ... @overload def dot(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> float: ... @overload def dot(x: _NF32DFVT, y: _NF32DFVT, /) -> float: ... @overload def dot(x: _QT, y: _QT, /) -> float: ... @overload def faceforward(N: glm_typing.Number, I: glm_typing.Number, Nref: float, /) -> float: ... @overload def faceforward(x: glm_typing.F32Vector1, I: glm_typing.F32Vector1, Nref: glm_typing.F32Vector1, /) -> float: ... @overload def faceforward(x: glm_typing.F32Vector2, I: glm_typing.F32Vector2, Nref: glm_typing.F32Vector2, /) -> float: ... @overload def faceforward(x: glm_typing.F32Vector3, I: glm_typing.F32Vector3, Nref: glm_typing.F32Vector3, /) -> float: ... @overload def faceforward(x: glm_typing.F32Vector4, I: glm_typing.F32Vector4, Nref: glm_typing.F32Vector4, /) -> float: ... @overload def faceforward(N: _NF32DFVT, I: _NF32DFVT, Nref: _NF32DFVT, /) -> _NF32DFVT: ... def length(x: Union[glm_typing.Number, glm_typing.FDAnyVectorAny, glm_typing.FDAnyQuaternion], /) -> float: ... @overload def normalize(x: Tuple[glm_typing.Number], /) -> vec1: ... @overload def normalize(x: Tuple[glm_typing.Number, glm_typing.Number], /) -> vec2: ... @overload def normalize(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec3: ... @overload def normalize(x: Tuple[glm_typing.Number, glm_typing.Number, glm_typing.Number, glm_typing.Number], /) -> vec4: ... @overload def normalize(x: _FDVT, /) -> _FDVT: ... @overload def normalize(x: _QT, /) -> _QT: ... @overload def reflect(I: glm_typing.Number, N: glm_typing.Number, /) -> float: ... @overload def reflect(I: glm_typing.F32Vector1, N: glm_typing.F32Vector1, /) -> vec1: ... @overload def reflect(I: glm_typing.F32Vector2, N: glm_typing.F32Vector2, /) -> vec2: ... @overload def reflect(I: glm_typing.F32Vector3, N: glm_typing.F32Vector3, /) -> vec3: ... @overload def reflect(I: glm_typing.F32Vector4, N: glm_typing.F32Vector4, /) -> vec4: ... @overload def reflect(I: _NF32DFVT, N: _NF32DFVT, /) -> _NF32DFVT: ... @overload def refract(I: glm_typing.Number, N: glm_typing.Number, eta: float, /) -> float: ... @overload def refract(I: glm_typing.F32Vector1, N: glm_typing.F32Vector1, eta: float, /) -> vec1: ... @overload def refract(I: glm_typing.F32Vector2, N: glm_typing.F32Vector2, eta: float, /) -> vec2: ... @overload def refract(I: glm_typing.F32Vector3, N: glm_typing.F32Vector3, eta: float, /) -> vec3: ... @overload def refract(I: glm_typing.F32Vector4, N: glm_typing.F32Vector4, eta: float, /) -> vec4: ... @overload def refract(I: _NF32DFVT, N: _NF32DFVT, eta: float, /) -> _NF32DFVT: ... @overload def bitCount(v: int, /) -> int: ... @overload def bitCount(v: glm_typing.IUAnyVector1, /) -> ivec1: ... @overload def bitCount(v: glm_typing.IUAnyVector2, /) -> ivec2: ... @overload def bitCount(v: glm_typing.IUAnyVector3, /) -> ivec3: ... @overload def bitCount(v: glm_typing.IUAnyVector4, /) -> ivec4: ... @overload def bitfieldExtract(value: int, offset: int, bits: int, /) -> int: ... @overload def bitfieldExtract(v: glm_typing.I32Vector1, offset: int, bits: int, /) -> ivec1: ... @overload def bitfieldExtract(v: glm_typing.I32Vector2, offset: int, bits: int, /) -> ivec2: ... @overload def bitfieldExtract(v: glm_typing.I32Vector3, offset: int, bits: int, /) -> ivec3: ... @overload def bitfieldExtract(v: glm_typing.I32Vector4, offset: int, bits: int, /) -> ivec4: ... @overload def bitfieldExtract(value: _NI32IUVT, offset: int, bits: int, /) -> _NI32IUVT: ... @overload def bitfieldInsert(base: int, insert: int, offset: int, bits: int, /) -> int: ... @overload def bitfieldInsert(base: glm_typing.I32Vector1, insert: glm_typing.I32Vector1, offset: int, bits: int, /) -> ivec1: ... @overload def bitfieldInsert(base: glm_typing.I32Vector2, insert: glm_typing.I32Vector2, offset: int, bits: int, /) -> ivec2: ... @overload def bitfieldInsert(base: glm_typing.I32Vector3, insert: glm_typing.I32Vector3, offset: int, bits: int, /) -> ivec3: ... @overload def bitfieldInsert(base: glm_typing.I32Vector4, insert: glm_typing.I32Vector4, offset: int, bits: int, /) -> ivec4: ... @overload def bitfieldInsert(base: _NI32IUVT, insert: _NI32IUVT, offset: int, bits: int, /) -> _NI32IUVT: ... @overload def bitfieldReverse(value: int, /) -> int: ... @overload def bitfieldReverse(value: glm_typing.I32Vector1, /) -> ivec1: ... @overload def bitfieldReverse(value: glm_typing.I32Vector2, /) -> ivec2: ... @overload def bitfieldReverse(value: glm_typing.I32Vector3, /) -> ivec3: ... @overload def bitfieldReverse(value: glm_typing.I32Vector4, /) -> ivec4: ... @overload def bitfieldReverse(value: _NI32IUVT, /) -> _NI32IUVT: ... @overload def findLSB(value: int, /) -> int: ... @overload def findLSB(value: glm_typing.I32Vector1, /) -> ivec1: ... @overload def findLSB(value: glm_typing.I32Vector2, /) -> ivec2: ... @overload def findLSB(value: glm_typing.I32Vector3, /) -> ivec3: ... @overload def findLSB(value: glm_typing.I32Vector4, /) -> ivec4: ... @overload def findLSB(value: _NI32IUVT, /) -> _NI32IUVT: ... @overload def findMSB(value: int, /) -> int: ... @overload def findMSB(value: glm_typing.I32Vector1, /) -> ivec1: ... @overload def findMSB(value: glm_typing.I32Vector2, /) -> ivec2: ... @overload def findMSB(value: glm_typing.I32Vector3, /) -> ivec3: ... @overload def findMSB(value: glm_typing.I32Vector4, /) -> ivec4: ... @overload def findMSB(value: _NI32IUVT, /) -> _NI32IUVT: ... def imulExtended(x: _IVT, y: _IVT, msb: _IVT, lsb: _IVT, /) -> None: ... def uaddCarry(x: _UVT, y: _UVT, carry: _UVT, /) -> _UVT: ... def umulExtended(x: _UVT, y: _UVT, msb: _UVT, lsb: _UVT, /) -> None: ... def usubBorrow(x: _UVT, y: _UVT, borrow: _UVT, /) -> _UVT: ... def determinant(m: glm_typing.AnyAnyMatrixSquare, /) -> float: ... @overload def inverse(m: glm_typing.F32Matrix2x2, /) -> mat2x2: ... @overload def inverse(m: glm_typing.F32Matrix3x3, /) -> mat3x3: ... @overload def inverse(m: glm_typing.F32Matrix4x4, /) -> mat4x4: ... @overload def inverse(m: _NF32FDMSQRT, /) -> _NF32FDMSQRT: ... @overload def inverse(q: _QT, /) -> _QT: ... @overload def matrixCompMult(x: glm_typing.F32Matrix2x2, y: glm_typing.F32Matrix2x2, /) -> mat2x2: ... @overload def matrixCompMult(x: glm_typing.F32Matrix3x3, y: glm_typing.F32Matrix3x3, /) -> mat3x3: ... @overload def matrixCompMult(x: glm_typing.F32Matrix4x4, y: glm_typing.F32Matrix4x4, /) -> mat4x4: ... @overload def matrixCompMult(x: _NF32FDMSQRT, y: _NF32FDMSQRT, /) -> _NF32FDMSQRT: ... @overload def outerProduct(c: glm_typing.F32Vector2, r: glm_typing.F32Vector2, /) -> mat2x2: ... @overload def outerProduct(c: dvec2, r: dvec2, /) -> mat2x2: ... @overload def outerProduct(c: glm_typing.F32Vector2, r: glm_typing.F32Vector3, /) -> mat3x2: ... @overload def outerProduct(c: dvec2, r: dvec3, /) -> mat3x2: ... @overload def outerProduct(c: glm_typing.F32Vector2, r: glm_typing.F32Vector4, /) -> mat4x2: ... @overload def outerProduct(c: dvec2, r: dvec4, /) -> mat4x2: ... @overload def outerProduct(c: glm_typing.F32Vector3, r: glm_typing.F32Vector2, /) -> mat2x3: ... @overload def outerProduct(c: dvec3, r: dvec2, /) -> mat2x3: ... @overload def outerProduct(c: glm_typing.F32Vector3, r: glm_typing.F32Vector3, /) -> mat3x3: ... @overload def outerProduct(c: dvec3, r: dvec3, /) -> mat3x3: ... @overload def outerProduct(c: glm_typing.F32Vector3, r: glm_typing.F32Vector4, /) -> mat4x3: ... @overload def outerProduct(c: dvec3, r: dvec4, /) -> mat4x3: ... @overload def outerProduct(c: glm_typing.F32Vector4, r: glm_typing.F32Vector2, /) -> mat2x4: ... @overload def outerProduct(c: dvec4, r: dvec2, /) -> mat2x4: ... @overload def outerProduct(c: glm_typing.F32Vector4, r: glm_typing.F32Vector3, /) -> mat3x4: ... @overload def outerProduct(c: dvec4, r: dvec3, /) -> mat3x4: ... @overload def outerProduct(c: glm_typing.F32Vector4, r: glm_typing.F32Vector4, /) -> mat4x4: ... @overload def outerProduct(c: dvec4, r: dvec4, /) -> mat4x4: ... @overload def transpose(x: glm_typing.F32Matrix2x2, /) -> fmat2x2: ... @overload def transpose(x: glm_typing.F32Matrix2x3, /) -> fmat3x2: ... @overload def transpose(x: glm_typing.F32Matrix2x4, /) -> fmat4x2: ... @overload def transpose(x: glm_typing.F32Matrix3x2, /) -> fmat2x3: ... @overload def transpose(x: glm_typing.F32Matrix3x3, /) -> fmat3x3: ... @overload def transpose(x: glm_typing.F32Matrix3x4, /) -> fmat4x3: ... @overload def transpose(x: glm_typing.F32Matrix4x2, /) -> fmat2x4: ... @overload def transpose(x: glm_typing.F32Matrix4x3, /) -> fmat3x4: ... @overload def transpose(x: glm_typing.F32Matrix4x4, /) -> fmat4x4: ... @overload def transpose(x: dmat2x2, /) -> dmat2x2: ... @overload def transpose(x: dmat2x3, /) -> dmat3x2: ... @overload def transpose(x: dmat2x4, /) -> dmat4x2: ... @overload def transpose(x: dmat3x2, /) -> dmat2x3: ... @overload def transpose(x: dmat3x3, /) -> dmat3x3: ... @overload def transpose(x: dmat3x4, /) -> dmat4x3: ... @overload def transpose(x: dmat4x2, /) -> dmat2x4: ... @overload def transpose(x: dmat4x3, /) -> dmat3x4: ... @overload def transpose(x: dmat4x4, /) -> dmat4x4: ... @overload def transpose(x: imat2x2, /) -> imat2x2: ... @overload def transpose(x: imat2x3, /) -> imat3x2: ... @overload def transpose(x: imat2x4, /) -> imat4x2: ... @overload def transpose(x: imat3x2, /) -> imat2x3: ... @overload def transpose(x: imat3x3, /) -> imat3x3: ... @overload def transpose(x: imat3x4, /) -> imat4x3: ... @overload def transpose(x: imat4x2, /) -> imat2x4: ... @overload def transpose(x: imat4x3, /) -> imat3x4: ... @overload def transpose(x: imat4x4, /) -> imat4x4: ... @overload def transpose(x: umat2x2, /) -> umat2x2: ... @overload def transpose(x: umat2x3, /) -> umat3x2: ... @overload def transpose(x: umat2x4, /) -> umat4x2: ... @overload def transpose(x: umat3x2, /) -> umat2x3: ... @overload def transpose(x: umat3x3, /) -> umat3x3: ... @overload def transpose(x: umat3x4, /) -> umat4x3: ... @overload def transpose(x: umat4x2, /) -> umat2x4: ... @overload def transpose(x: umat4x3, /) -> umat3x4: ... @overload def transpose(x: umat4x4, /) -> umat4x4: ... def packDouble2x32(v: glm_typing.U32Vector2, /) -> float: ... def packHalf2x16(v: glm_typing.F32Vector2, /) -> int: ... def packSnorm2x16(v: glm_typing.F32Vector2, /) -> int: ... def packSnorm4x8(v: glm_typing.F32Vector4, /) -> int: ... def packUnorm2x16(v: glm_typing.F32Vector2, /) -> int: ... def packUnorm4x8(v: glm_typing.F32Vector4, /) -> int: ... def unpackDouble2x32(v: float, /) -> uvec2: ... def unpackHalf2x16(v: int, /) -> vec2: ... def unpackSnorm2x16(p: int, /) -> vec2: ... def unpackSnorm4x8(p: int, /) -> vec4: ... def unpackUnorm2x16(p: int, /) -> vec2: ... def unpackUnorm4x8(p: int, /) -> vec4: ... @overload def acos(x: glm_typing.Number, /) -> float: ... @overload def acos(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def acos(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def acos(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def acos(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def acos(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def acosh(x: glm_typing.Number, /) -> float: ... @overload def acosh(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def acosh(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def acosh(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def acosh(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def acosh(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def asin(x: glm_typing.Number, /) -> float: ... @overload def asin(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def asin(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def asin(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def asin(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def asin(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def asinh(x: glm_typing.Number, /) -> float: ... @overload def asinh(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def asinh(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def asinh(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def asinh(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def asinh(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def atan(y_over_x: glm_typing.Number, /) -> float: ... @overload def atan(y_over_x: glm_typing.F32Vector1, /) -> vec1: ... @overload def atan(y_over_x: glm_typing.F32Vector2, /) -> vec2: ... @overload def atan(y_over_x: glm_typing.F32Vector3, /) -> vec3: ... @overload def atan(y_over_x: glm_typing.F32Vector4, /) -> vec4: ... @overload def atan(y_over_x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def atan(y: glm_typing.Number, x: glm_typing.Number, /) -> float: ... @overload def atan(y: glm_typing.F32Vector1, x: glm_typing.F32Vector1, /) -> vec1: ... @overload def atan(y: glm_typing.F32Vector2, x: glm_typing.F32Vector2, /) -> vec2: ... @overload def atan(y: glm_typing.F32Vector3, x: glm_typing.F32Vector3, /) -> vec3: ... @overload def atan(y: glm_typing.F32Vector4, x: glm_typing.F32Vector4, /) -> vec4: ... @overload def atan(y: _NF32DFVT, x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def atanh(x: glm_typing.Number, /) -> float: ... @overload def atanh(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def atanh(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def atanh(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def atanh(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def atanh(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def cos(x: glm_typing.Number, /) -> float: ... @overload def cos(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def cos(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def cos(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def cos(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def cos(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def cosh(x: glm_typing.Number, /) -> float: ... @overload def cosh(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def cosh(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def cosh(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def cosh(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def cosh(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def degrees(x: glm_typing.Number, /) -> float: ... @overload def degrees(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def degrees(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def degrees(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def degrees(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def degrees(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def radians(x: glm_typing.Number, /) -> float: ... @overload def radians(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def radians(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def radians(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def radians(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def radians(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def sin(x: glm_typing.Number, /) -> float: ... @overload def sin(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def sin(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def sin(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def sin(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def sin(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def sinh(x: glm_typing.Number, /) -> float: ... @overload def sinh(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def sinh(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def sinh(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def sinh(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def sinh(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def tan(x: glm_typing.Number, /) -> float: ... @overload def tan(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def tan(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def tan(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def tan(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def tan(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def tanh(x: glm_typing.Number, /) -> float: ... @overload def tanh(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def tanh(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def tanh(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def tanh(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def tanh(x: _NF32DFVT, /) -> _NF32DFVT: ... def all(v: glm_typing.BAnyVectorAny, /) -> bool: ... def any(v: glm_typing.BAnyVectorAny, /) -> bool: ... @overload def equal(x: glm_typing.Number, y: glm_typing.Number, ULPs: int, /) -> int: ... @overload def equal(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> bvec1: ... @overload def equal(x: _NF32V1T, y: _NF32V1T, /) -> bvec1: ... @overload def equal(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, ULPs_epsilon: Union[glm_typing.Number, ivec1, glm_typing.F32Vector1], /) -> bvec1: ... @overload def equal(x: _NF32V1T, y: _NF32V1T, ULPs_epsilon: Union[glm_typing.Number, ivec1, glm_typing.F32Vector1], /) -> bvec1: ... @overload def equal(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> bvec2: ... @overload def equal(x: _NF32V2T, y: _NF32V2T, /) -> bvec2: ... @overload def equal(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, ULPs_epsilon: Union[glm_typing.Number, ivec2, glm_typing.F32Vector2], /) -> bvec2: ... @overload def equal(x: _NF32V2T, y: _NF32V2T, ULPs_epsilon: Union[glm_typing.Number, ivec2, glm_typing.F32Vector2], /) -> bvec2: ... @overload def equal(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> bvec3: ... @overload def equal(x: _NF32V3T, y: _NF32V3T, /) -> bvec3: ... @overload def equal(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, ULPs_epsilon: Union[glm_typing.Number, ivec3, glm_typing.F32Vector3], /) -> bvec3: ... @overload def equal(x: _NF32V3T, y: _NF32V3T, ULPs_epsilon: Union[glm_typing.Number, ivec3, glm_typing.F32Vector3], /) -> bvec3: ... @overload def equal(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> bvec4: ... @overload def equal(x: _NF32V4T, y: _NF32V4T, /) -> bvec4: ... @overload def equal(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, ULPs_epsilon: Union[glm_typing.Number, ivec4, glm_typing.F32Vector4], /) -> bvec4: ... @overload def equal(x: _NF32V4T, y: _NF32V4T, ULPs_epsilon: Union[glm_typing.Number, ivec4, glm_typing.F32Vector4], /) -> bvec4: ... @overload def equal(x: glm_typing.F32Matrix2xAny, y: glm_typing.F32Matrix2xAny, /) -> bvec2: ... @overload def equal(x: _NF32M2XNT, y: _NF32M2XNT, /) -> bvec2: ... @overload def equal(x: glm_typing.F32Matrix2xAny, y: glm_typing.F32Matrix2xAny, ULPs_epsilon: Union[glm_typing.Number, ivec2, glm_typing.F32Vector2], /) -> bvec2: ... @overload def equal(x: _NF32M2XNT, y: _NF32M2XNT, ULPs_epsilon: Union[glm_typing.Number, ivec2, glm_typing.F32Vector2], /) -> bvec2: ... @overload def equal(x: glm_typing.F32Matrix3xAny, y: glm_typing.F32Matrix3xAny, /) -> bvec3: ... @overload def equal(x: _NF32M3XNT, y: _NF32M3XNT, /) -> bvec3: ... @overload def equal(x: glm_typing.F32Matrix3xAny, y: glm_typing.F32Matrix3xAny, ULPs_epsilon: Union[glm_typing.Number, ivec3, glm_typing.F32Vector3], /) -> bvec3: ... @overload def equal(x: _NF32M3XNT, y: _NF32M3XNT, ULPs_epsilon: Union[glm_typing.Number, ivec3, glm_typing.F32Vector3], /) -> bvec3: ... @overload def equal(x: glm_typing.F32Matrix4xAny, y: glm_typing.F32Matrix4xAny, /) -> bvec4: ... @overload def equal(x: _NF32M4XNT, y: _NF32M4XNT, /) -> bvec4: ... @overload def equal(x: glm_typing.F32Matrix4xAny, y: glm_typing.F32Matrix4xAny, ULPs_epsilon: Union[glm_typing.Number, ivec4, glm_typing.F32Vector4], /) -> bvec4: ... @overload def equal(x: _NF32M4XNT, y: _NF32M4XNT, ULPs_epsilon: Union[glm_typing.Number, ivec4, glm_typing.F32Vector4], /) -> bvec4: ... @overload def equal(x: _QT, y: _QT, /) -> int: ... @overload def greaterThan(x: _QT, y: _QT, /) -> bvec4: ... @overload def greaterThan(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> bvec1: ... @overload def greaterThan(x: _NF32V1T, y: _NF32V1T, /) -> bvec1: ... @overload def greaterThan(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> bvec2: ... @overload def greaterThan(x: _NF32V2T, y: _NF32V2T, /) -> bvec2: ... @overload def greaterThan(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> bvec3: ... @overload def greaterThan(x: _NF32V3T, y: _NF32V3T, /) -> bvec3: ... @overload def greaterThan(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> bvec4: ... @overload def greaterThan(x: _NF32V4T, y: _NF32V4T, /) -> bvec4: ... @overload def greaterThanEqual(x: _QT, y: _QT, /) -> bvec4: ... @overload def greaterThanEqual(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> bvec1: ... @overload def greaterThanEqual(x: _NF32V1T, y: _NF32V1T, /) -> bvec1: ... @overload def greaterThanEqual(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> bvec2: ... @overload def greaterThanEqual(x: _NF32V2T, y: _NF32V2T, /) -> bvec2: ... @overload def greaterThanEqual(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> bvec3: ... @overload def greaterThanEqual(x: _NF32V3T, y: _NF32V3T, /) -> bvec3: ... @overload def greaterThanEqual(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> bvec4: ... @overload def greaterThanEqual(x: _NF32V4T, y: _NF32V4T, /) -> bvec4: ... @overload def lessThan(x: _QT, y: _QT, /) -> bvec4: ... @overload def lessThan(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> bvec1: ... @overload def lessThan(x: _NF32V1T, y: _NF32V1T, /) -> bvec1: ... @overload def lessThan(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> bvec2: ... @overload def lessThan(x: _NF32V2T, y: _NF32V2T, /) -> bvec2: ... @overload def lessThan(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> bvec3: ... @overload def lessThan(x: _NF32V3T, y: _NF32V3T, /) -> bvec3: ... @overload def lessThan(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> bvec4: ... @overload def lessThan(x: _NF32V4T, y: _NF32V4T, /) -> bvec4: ... @overload def lessThanEqual(x: _QT, y: _QT, /) -> bvec4: ... @overload def lessThanEqual(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> bvec1: ... @overload def lessThanEqual(x: _NF32V1T, y: _NF32V1T, /) -> bvec1: ... @overload def lessThanEqual(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> bvec2: ... @overload def lessThanEqual(x: _NF32V2T, y: _NF32V2T, /) -> bvec2: ... @overload def lessThanEqual(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> bvec3: ... @overload def lessThanEqual(x: _NF32V3T, y: _NF32V3T, /) -> bvec3: ... @overload def lessThanEqual(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> bvec4: ... @overload def lessThanEqual(x: _NF32V4T, y: _NF32V4T, /) -> bvec4: ... @overload def notEqual(x: _QT, y: _QT, /) -> bvec4: ... @overload def notEqual(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> bvec1: ... @overload def notEqual(x: _NF32V1T, y: _NF32V1T, /) -> bvec1: ... @overload def notEqual(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> bvec2: ... @overload def notEqual(x: _NF32V2T, y: _NF32V2T, /) -> bvec2: ... @overload def notEqual(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> bvec3: ... @overload def notEqual(x: _NF32V3T, y: _NF32V3T, /) -> bvec3: ... @overload def notEqual(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> bvec4: ... @overload def notEqual(x: _NF32V4T, y: _NF32V4T, /) -> bvec4: ... def not_(v: glm_typing.BAnyVectorAny, /) -> bool: ... def add(a: Any, b: Any, /) -> Any: ... def and_(a: Any, b: Any, /) -> Any: ... def cmp(a: Any, b: Any, /) -> Any: ... def div(a: Any, b: Any, /) -> Any: ... def floordiv(a: Any, b: Any, /) -> Any: ... def if_else(b: Any, x: Any, y: Any, /) -> Any: ... def inv(a: Any, /) -> Any: ... def lshift(a: Any, b: Any, /) -> Any: ... def mul(a: Any, b: Any, /) -> Any: ... def neg(a: Any, /) -> Any: ... def or_(a: Any, b: Any, /) -> Any: ... def pos(a: Any, /) -> Any: ... def rshift(a: Any, b: Any, /) -> Any: ... def sub(a: Any, b: Any, /) -> Any: ... def xor(a: Any, b: Any, /) -> Any: ... @overload def convertLinearToSRGB(ColorLinear: glm_typing.F32Vector1) -> vec1: ... @overload def convertLinearToSRGB(ColorLinear: glm_typing.F32Vector1, Gamma: glm_typing.Number) -> vec1: ... @overload def convertLinearToSRGB(ColorLinear: glm_typing.F32Vector2) -> vec2: ... @overload def convertLinearToSRGB(ColorLinear: glm_typing.F32Vector2, Gamma: glm_typing.Number) -> vec2: ... @overload def convertLinearToSRGB(ColorLinear: glm_typing.F32Vector3) -> vec3: ... @overload def convertLinearToSRGB(ColorLinear: glm_typing.F32Vector3, Gamma: glm_typing.Number) -> vec3: ... @overload def convertLinearToSRGB(ColorLinear: glm_typing.F32Vector4) -> vec4: ... @overload def convertLinearToSRGB(ColorLinear: glm_typing.F32Vector4, Gamma: glm_typing.Number) -> vec4: ... @overload def convertLinearToSRGB(ColorLinear: _NF32DFVT) -> _NF32DFVT: ... @overload def convertLinearToSRGB(ColorLinear: _NF32DFVT, Gamma: glm_typing.Number) -> _NF32DFVT: ... @overload def convertSRGBToLinear(ColorLinear: glm_typing.F32Vector1) -> vec1: ... @overload def convertSRGBToLinear(ColorLinear: glm_typing.F32Vector1, Gamma: glm_typing.Number) -> vec1: ... @overload def convertSRGBToLinear(ColorLinear: glm_typing.F32Vector2) -> vec2: ... @overload def convertSRGBToLinear(ColorLinear: glm_typing.F32Vector2, Gamma: glm_typing.Number) -> vec2: ... @overload def convertSRGBToLinear(ColorLinear: glm_typing.F32Vector3) -> vec3: ... @overload def convertSRGBToLinear(ColorLinear: glm_typing.F32Vector3, Gamma: glm_typing.Number) -> vec3: ... @overload def convertSRGBToLinear(ColorLinear: glm_typing.F32Vector4) -> vec4: ... @overload def convertSRGBToLinear(ColorLinear: glm_typing.F32Vector4, Gamma: glm_typing.Number) -> vec4: ... @overload def convertSRGBToLinear(ColorLinear: _NF32DFVT) -> _NF32DFVT: ... @overload def convertSRGBToLinear(ColorLinear: _NF32DFVT, Gamma: glm_typing.Number) -> _NF32DFVT: ... def e() -> float: ... def epsilon() -> float: ... def euler() -> float: ... def four_over_pi() -> float: ... def golden_ratio() -> float: ... def half_pi() -> float: ... def ln_ln_two() -> float: ... def ln_ten() -> float: ... def ln_two() -> float: ... def one() -> float: ... def one_over_pi() -> float: ... def one_over_root_two() -> float: ... def one_over_two_pi() -> float: ... def pi() -> float: ... def quarter_pi() -> float: ... def root_five() -> float: ... def root_half_pi() -> float: ... def root_ln_four() -> float: ... def root_pi() -> float: ... def root_three() -> float: ... def root_two() -> float: ... def root_two_pi() -> float: ... def third() -> float: ... def three_over_two_pi() -> float: ... def two_over_pi() -> float: ... def two_over_root_pi() -> float: ... def two_pi() -> float: ... def two_thirds() -> float: ... def zero() -> float: ... @overload def epsilonEqual(x: glm_typing.Number, y: glm_typing.Number, epsilon: glm_typing.Number, /) -> bool: ... @overload def epsilonEqual(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, epsilon: glm_typing.Number, /) -> bvec1: ... @overload def epsilonEqual(x: _NF32DFV1T, y: _NF32DFV1T, epsilon: glm_typing.Number, /) -> bvec1: ... @overload def epsilonEqual(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, epsilon: glm_typing.Number, /) -> bvec2: ... @overload def epsilonEqual(x: _NF32DFV2T, y: _NF32DFV2T, epsilon: glm_typing.Number, /) -> bvec2: ... @overload def epsilonEqual(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, epsilon: glm_typing.Number, /) -> bvec3: ... @overload def epsilonEqual(x: _NF32DFV3T, y: _NF32DFV3T, epsilon: glm_typing.Number, /) -> bvec3: ... @overload def epsilonEqual(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, epsilon: glm_typing.Number, /) -> bvec4: ... @overload def epsilonEqual(x: _NF32DFV4T, y: _NF32DFV4T, epsilon: glm_typing.Number, /) -> bvec4: ... @overload def epsilonNotEqual(x: glm_typing.Number, y: glm_typing.Number, epsilon: glm_typing.Number, /) -> bool: ... @overload def epsilonNotEqual(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, epsilon: glm_typing.Number, /) -> bvec1: ... @overload def epsilonNotEqual(x: _NF32DFV1T, y: _NF32DFV1T, epsilon: glm_typing.Number, /) -> bvec1: ... @overload def epsilonNotEqual(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, epsilon: glm_typing.Number, /) -> bvec2: ... @overload def epsilonNotEqual(x: _NF32DFV2T, y: _NF32DFV2T, epsilon: glm_typing.Number, /) -> bvec2: ... @overload def epsilonNotEqual(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, epsilon: glm_typing.Number, /) -> bvec3: ... @overload def epsilonNotEqual(x: _NF32DFV3T, y: _NF32DFV3T, epsilon: glm_typing.Number, /) -> bvec3: ... @overload def epsilonNotEqual(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, epsilon: glm_typing.Number, /) -> bvec4: ... @overload def epsilonNotEqual(x: _NF32DFV4T, y: _NF32DFV4T, epsilon: glm_typing.Number, /) -> bvec4: ... @overload def iround(x: glm_typing.Number, /) -> int: ... @overload def iround(x: glm_typing.F32Vector1, /) -> ivec1: ... @overload def iround(x: _NF32DFV1T, /) -> ivec1: ... @overload def iround(x: glm_typing.F32Vector2, /) -> ivec2: ... @overload def iround(x: _NF32DFV2T, /) -> ivec2: ... @overload def iround(x: glm_typing.F32Vector3, /) -> ivec3: ... @overload def iround(x: _NF32DFV3T, /) -> ivec3: ... @overload def iround(x: glm_typing.F32Vector4, /) -> ivec4: ... @overload def iround(x: _NF32DFV4T, /) -> ivec4: ... @overload def uround(x: glm_typing.Number, /) -> int: ... @overload def uround(x: glm_typing.F32Vector1, /) -> uvec1: ... @overload def uround(x: _NF32DFV1T, /) -> uvec1: ... @overload def uround(x: glm_typing.F32Vector2, /) -> uvec2: ... @overload def uround(x: _NF32DFV2T, /) -> uvec2: ... @overload def uround(x: glm_typing.F32Vector3, /) -> uvec3: ... @overload def uround(x: _NF32DFV3T, /) -> uvec3: ... @overload def uround(x: glm_typing.F32Vector4, /) -> uvec4: ... @overload def uround(x: _NF32DFV4T, /) -> uvec4: ... @overload def column(m: glm_typing.F32Matrix2x2, index: int, /) -> vec2: ... @overload def column(m: glm_typing.F32Matrix2x2, index: int, x: glm_typing.F32Vector2, /) -> mat2x2: ... @overload def column(m: glm_typing.F32Matrix2x3, index: int, /) -> vec3: ... @overload def column(m: glm_typing.F32Matrix2x3, index: int, x: glm_typing.F32Vector3, /) -> mat2x3: ... @overload def column(m: glm_typing.F32Matrix2x4, index: int, /) -> vec4: ... @overload def column(m: glm_typing.F32Matrix2x4, index: int, x: glm_typing.F32Vector4, /) -> mat2x4: ... @overload def column(m: glm_typing.F32Matrix3x2, index: int, /) -> vec2: ... @overload def column(m: glm_typing.F32Matrix3x2, index: int, x: glm_typing.F32Vector2, /) -> mat3x2: ... @overload def column(m: glm_typing.F32Matrix3x3, index: int, /) -> vec3: ... @overload def column(m: glm_typing.F32Matrix3x3, index: int, x: glm_typing.F32Vector3, /) -> mat3x3: ... @overload def column(m: glm_typing.F32Matrix3x4, index: int, /) -> vec4: ... @overload def column(m: glm_typing.F32Matrix3x4, index: int, x: glm_typing.F32Vector4, /) -> mat3x4: ... @overload def column(m: glm_typing.F32Matrix4x2, index: int, /) -> vec2: ... @overload def column(m: glm_typing.F32Matrix4x2, index: int, x: glm_typing.F32Vector2, /) -> mat4x2: ... @overload def column(m: glm_typing.F32Matrix4x3, index: int, /) -> vec3: ... @overload def column(m: glm_typing.F32Matrix4x3, index: int, x: glm_typing.F32Vector3, /) -> mat4x3: ... @overload def column(m: glm_typing.F32Matrix4x4, index: int, /) -> vec4: ... @overload def column(m: glm_typing.F32Matrix4x4, index: int, x: glm_typing.F32Vector4, /) -> mat4x4: ... @overload def column(m: dmat2x2, index: int, /) -> dvec2: ... @overload def column(m: dmat2x2, index: int, x: Union[dvec2, dmvec2], /) -> dmat2x2: ... @overload def column(m: dmat2x3, index: int, /) -> dvec3: ... @overload def column(m: dmat2x3, index: int, x: Union[dvec3, dmvec3], /) -> dmat2x3: ... @overload def column(m: dmat2x4, index: int, /) -> dvec4: ... @overload def column(m: dmat2x4, index: int, x: Union[dvec4, dmvec4], /) -> dmat2x4: ... @overload def column(m: dmat3x2, index: int, /) -> dvec2: ... @overload def column(m: dmat3x2, index: int, x: Union[dvec2, dmvec2], /) -> dmat3x2: ... @overload def column(m: dmat3x3, index: int, /) -> dvec3: ... @overload def column(m: dmat3x3, index: int, x: Union[dvec3, dmvec3], /) -> dmat3x3: ... @overload def column(m: dmat3x4, index: int, /) -> dvec4: ... @overload def column(m: dmat3x4, index: int, x: Union[dvec4, dmvec4], /) -> dmat3x4: ... @overload def column(m: dmat4x2, index: int, /) -> dvec2: ... @overload def column(m: dmat4x2, index: int, x: Union[dvec2, dmvec2], /) -> dmat4x2: ... @overload def column(m: dmat4x3, index: int, /) -> dvec3: ... @overload def column(m: dmat4x3, index: int, x: Union[dvec3, dmvec3], /) -> dmat4x3: ... @overload def column(m: dmat4x4, index: int, /) -> dvec4: ... @overload def column(m: dmat4x4, index: int, x: Union[dvec4, dmvec4], /) -> dmat4x4: ... @overload def column(m: imat2x2, index: int, /) -> ivec2: ... @overload def column(m: imat2x2, index: int, x: Union[ivec2, imvec2], /) -> imat2x2: ... @overload def column(m: imat2x3, index: int, /) -> ivec3: ... @overload def column(m: imat2x3, index: int, x: Union[ivec3, imvec3], /) -> imat2x3: ... @overload def column(m: imat2x4, index: int, /) -> ivec4: ... @overload def column(m: imat2x4, index: int, x: Union[ivec4, imvec4], /) -> imat2x4: ... @overload def column(m: imat3x2, index: int, /) -> ivec2: ... @overload def column(m: imat3x2, index: int, x: Union[ivec2, imvec2], /) -> imat3x2: ... @overload def column(m: imat3x3, index: int, /) -> ivec3: ... @overload def column(m: imat3x3, index: int, x: Union[ivec3, imvec3], /) -> imat3x3: ... @overload def column(m: imat3x4, index: int, /) -> ivec4: ... @overload def column(m: imat3x4, index: int, x: Union[ivec4, imvec4], /) -> imat3x4: ... @overload def column(m: imat4x2, index: int, /) -> ivec2: ... @overload def column(m: imat4x2, index: int, x: Union[ivec2, imvec2], /) -> imat4x2: ... @overload def column(m: imat4x3, index: int, /) -> ivec3: ... @overload def column(m: imat4x3, index: int, x: Union[ivec3, imvec3], /) -> imat4x3: ... @overload def column(m: imat4x4, index: int, /) -> ivec4: ... @overload def column(m: imat4x4, index: int, x: Union[ivec4, imvec4], /) -> imat4x4: ... @overload def column(m: umat2x2, index: int, /) -> uvec2: ... @overload def column(m: umat2x2, index: int, x: Union[uvec2, umvec2], /) -> umat2x2: ... @overload def column(m: umat2x3, index: int, /) -> uvec3: ... @overload def column(m: umat2x3, index: int, x: Union[uvec3, umvec3], /) -> umat2x3: ... @overload def column(m: umat2x4, index: int, /) -> uvec4: ... @overload def column(m: umat2x4, index: int, x: Union[uvec4, umvec4], /) -> umat2x4: ... @overload def column(m: umat3x2, index: int, /) -> uvec2: ... @overload def column(m: umat3x2, index: int, x: Union[uvec2, umvec2], /) -> umat3x2: ... @overload def column(m: umat3x3, index: int, /) -> uvec3: ... @overload def column(m: umat3x3, index: int, x: Union[uvec3, umvec3], /) -> umat3x3: ... @overload def column(m: umat3x4, index: int, /) -> uvec4: ... @overload def column(m: umat3x4, index: int, x: Union[uvec4, umvec4], /) -> umat3x4: ... @overload def column(m: umat4x2, index: int, /) -> uvec2: ... @overload def column(m: umat4x2, index: int, x: Union[uvec2, umvec2], /) -> umat4x2: ... @overload def column(m: umat4x3, index: int, /) -> uvec3: ... @overload def column(m: umat4x3, index: int, x: Union[uvec3, umvec3], /) -> umat4x3: ... @overload def column(m: umat4x4, index: int, /) -> uvec4: ... @overload def column(m: umat4x4, index: int, x: Union[uvec4, umvec4], /) -> umat4x4: ... @overload def row(m: glm_typing.F32Matrix2x2, index: int, /) -> vec2: ... @overload def row(m: glm_typing.F32Matrix2x2, index: int, x: glm_typing.F32Vector2, /) -> mat2x2: ... @overload def row(m: glm_typing.F32Matrix2x3, index: int, /) -> vec2: ... @overload def row(m: glm_typing.F32Matrix2x3, index: int, x: glm_typing.F32Vector2, /) -> mat2x3: ... @overload def row(m: glm_typing.F32Matrix2x4, index: int, /) -> vec2: ... @overload def row(m: glm_typing.F32Matrix2x4, index: int, x: glm_typing.F32Vector2, /) -> mat2x4: ... @overload def row(m: glm_typing.F32Matrix3x2, index: int, /) -> vec3: ... @overload def row(m: glm_typing.F32Matrix3x2, index: int, x: glm_typing.F32Vector3, /) -> mat3x2: ... @overload def row(m: glm_typing.F32Matrix3x3, index: int, /) -> vec3: ... @overload def row(m: glm_typing.F32Matrix3x3, index: int, x: glm_typing.F32Vector3, /) -> mat3x3: ... @overload def row(m: glm_typing.F32Matrix3x4, index: int, /) -> vec3: ... @overload def row(m: glm_typing.F32Matrix3x4, index: int, x: glm_typing.F32Vector3, /) -> mat3x4: ... @overload def row(m: glm_typing.F32Matrix4x2, index: int, /) -> vec4: ... @overload def row(m: glm_typing.F32Matrix4x2, index: int, x: glm_typing.F32Vector4, /) -> mat4x2: ... @overload def row(m: glm_typing.F32Matrix4x3, index: int, /) -> vec4: ... @overload def row(m: glm_typing.F32Matrix4x3, index: int, x: glm_typing.F32Vector4, /) -> mat4x3: ... @overload def row(m: glm_typing.F32Matrix4x4, index: int, /) -> vec4: ... @overload def row(m: glm_typing.F32Matrix4x4, index: int, x: glm_typing.F32Vector4, /) -> mat4x4: ... @overload def row(m: dmat2x2, index: int, /) -> dvec2: ... @overload def row(m: dmat2x2, index: int, x: Union[dvec2, dmvec2], /) -> dmat2x2: ... @overload def row(m: dmat2x3, index: int, /) -> dvec2: ... @overload def row(m: dmat2x3, index: int, x: Union[dvec2, dmvec2], /) -> dmat2x3: ... @overload def row(m: dmat2x4, index: int, /) -> dvec2: ... @overload def row(m: dmat2x4, index: int, x: Union[dvec2, dmvec2], /) -> dmat2x4: ... @overload def row(m: dmat3x2, index: int, /) -> dvec3: ... @overload def row(m: dmat3x2, index: int, x: Union[dvec3, dmvec3], /) -> dmat3x2: ... @overload def row(m: dmat3x3, index: int, /) -> dvec3: ... @overload def row(m: dmat3x3, index: int, x: Union[dvec3, dmvec3], /) -> dmat3x3: ... @overload def row(m: dmat3x4, index: int, /) -> dvec3: ... @overload def row(m: dmat3x4, index: int, x: Union[dvec3, dmvec3], /) -> dmat3x4: ... @overload def row(m: dmat4x2, index: int, /) -> dvec4: ... @overload def row(m: dmat4x2, index: int, x: Union[dvec4, dmvec4], /) -> dmat4x2: ... @overload def row(m: dmat4x3, index: int, /) -> dvec4: ... @overload def row(m: dmat4x3, index: int, x: Union[dvec4, dmvec4], /) -> dmat4x3: ... @overload def row(m: dmat4x4, index: int, /) -> dvec4: ... @overload def row(m: dmat4x4, index: int, x: Union[dvec4, dmvec4], /) -> dmat4x4: ... @overload def row(m: imat2x2, index: int, /) -> ivec2: ... @overload def row(m: imat2x2, index: int, x: Union[ivec2, imvec2], /) -> imat2x2: ... @overload def row(m: imat2x3, index: int, /) -> ivec2: ... @overload def row(m: imat2x3, index: int, x: Union[ivec2, imvec2], /) -> imat2x3: ... @overload def row(m: imat2x4, index: int, /) -> ivec2: ... @overload def row(m: imat2x4, index: int, x: Union[ivec2, imvec2], /) -> imat2x4: ... @overload def row(m: imat3x2, index: int, /) -> ivec3: ... @overload def row(m: imat3x2, index: int, x: Union[ivec3, imvec3], /) -> imat3x2: ... @overload def row(m: imat3x3, index: int, /) -> ivec3: ... @overload def row(m: imat3x3, index: int, x: Union[ivec3, imvec3], /) -> imat3x3: ... @overload def row(m: imat3x4, index: int, /) -> ivec3: ... @overload def row(m: imat3x4, index: int, x: Union[ivec3, imvec3], /) -> imat3x4: ... @overload def row(m: imat4x2, index: int, /) -> ivec4: ... @overload def row(m: imat4x2, index: int, x: Union[ivec4, imvec4], /) -> imat4x2: ... @overload def row(m: imat4x3, index: int, /) -> ivec4: ... @overload def row(m: imat4x3, index: int, x: Union[ivec4, imvec4], /) -> imat4x3: ... @overload def row(m: imat4x4, index: int, /) -> ivec4: ... @overload def row(m: imat4x4, index: int, x: Union[ivec4, imvec4], /) -> imat4x4: ... @overload def row(m: umat2x2, index: int, /) -> uvec2: ... @overload def row(m: umat2x2, index: int, x: Union[uvec2, umvec2], /) -> umat2x2: ... @overload def row(m: umat2x3, index: int, /) -> uvec2: ... @overload def row(m: umat2x3, index: int, x: Union[uvec2, umvec2], /) -> umat2x3: ... @overload def row(m: umat2x4, index: int, /) -> uvec2: ... @overload def row(m: umat2x4, index: int, x: Union[uvec2, umvec2], /) -> umat2x4: ... @overload def row(m: umat3x2, index: int, /) -> uvec3: ... @overload def row(m: umat3x2, index: int, x: Union[uvec3, umvec3], /) -> umat3x2: ... @overload def row(m: umat3x3, index: int, /) -> uvec3: ... @overload def row(m: umat3x3, index: int, x: Union[uvec3, umvec3], /) -> umat3x3: ... @overload def row(m: umat3x4, index: int, /) -> uvec3: ... @overload def row(m: umat3x4, index: int, x: Union[uvec3, umvec3], /) -> umat3x4: ... @overload def row(m: umat4x2, index: int, /) -> uvec4: ... @overload def row(m: umat4x2, index: int, x: Union[uvec4, umvec4], /) -> umat4x2: ... @overload def row(m: umat4x3, index: int, /) -> uvec4: ... @overload def row(m: umat4x3, index: int, x: Union[uvec4, umvec4], /) -> umat4x3: ... @overload def row(m: umat4x4, index: int, /) -> uvec4: ... @overload def row(m: umat4x4, index: int, x: Union[uvec4, umvec4], /) -> umat4x4: ... @overload def affineInverse(m: glm_typing.FAnyMatrix3x3, /) -> mat3x3: ... @overload def affineInverse(m: dmat3x3, /) -> dmat3x3: ... @overload def affineInverse(m: glm_typing.FAnyMatrix4x4, /) -> mat4x4: ... @overload def affineInverse(m: dmat4x4, /) -> dmat4x4: ... @overload def inverseTranspose(m: glm_typing.FAnyMatrix2x2, /) -> mat2x2: ... @overload def inverseTranspose(m: dmat2x2, /) -> dmat2x2: ... @overload def inverseTranspose(m: glm_typing.FAnyMatrix3x3, /) -> mat3x3: ... @overload def inverseTranspose(m: dmat3x3, /) -> dmat3x3: ... @overload def inverseTranspose(m: glm_typing.FAnyMatrix4x4, /) -> mat4x4: ... @overload def inverseTranspose(m: dmat4x4, /) -> dmat4x4: ... @overload def perlin(p: glm_typing.FDAnyVectorAny, /) -> float: ... @overload def perlin(p: glm_typing.F32Vector1, rep: glm_typing.F32Vector1, /) -> float: ... @overload def perlin(p: glm_typing.F32Vector2, rep: glm_typing.F32Vector2, /) -> float: ... @overload def perlin(p: glm_typing.F32Vector3, rep: glm_typing.F32Vector3, /) -> float: ... @overload def perlin(p: glm_typing.F32Vector4, rep: glm_typing.F32Vector4, /) -> float: ... @overload def perlin(p: _NF32DFVT, rep: _NF32DFVT, /) -> float: ... def simplex(p: glm_typing.FDAnyVectorAny, /) -> float: ... def packF2x11_1x10(v: glm_typing.F32Vector3, /) -> int: ... def packF3x9_E1x5(v: glm_typing.F32Vector3, /) -> int: ... @overload def packHalf(v: glm_typing.F32Vector1, /) -> u16vec1: ... @overload def packHalf(v: glm_typing.F32Vector2, /) -> u16vec2: ... @overload def packHalf(v: glm_typing.F32Vector3, /) -> u16vec3: ... @overload def packHalf(v: glm_typing.F32Vector4, /) -> u16vec4: ... def packHalf1x16(v: float, /) -> int: ... def packHalf4x16(v: glm_typing.F32Vector4, /) -> int: ... def packI3x10_1x2(v: glm_typing.I32Vector4, /) -> int: ... def packInt2x16(v: glm_typing.I16Vector2, /) -> int: ... def packInt2x32(v: glm_typing.I32Vector2, /) -> int: ... def packInt2x8(v: glm_typing.I8Vector2, /) -> int: ... def packInt4x16(v: glm_typing.I16Vector4, /) -> int: ... def packInt4x8(v: glm_typing.I8Vector4, /) -> int: ... def packRGBM(v: glm_typing.F32Vector3, /) -> vec4: ... @overload def packSnorm(t: ctypes.c_int8, v: glm_typing.F32Vector1, /) -> i8vec1: ... @overload def packSnorm(t: ctypes.c_int8, v: _NF32DFV1T, /) -> i8vec1: ... @overload def packSnorm(t: ctypes.c_uint8, v: glm_typing.F32Vector1, /) -> u8vec1: ... @overload def packSnorm(t: ctypes.c_uint8, v: _NF32DFV1T, /) -> u8vec1: ... @overload def packSnorm(t: ctypes.c_int16, v: glm_typing.F32Vector1, /) -> i16vec1: ... @overload def packSnorm(t: ctypes.c_int16, v: _NF32DFV1T, /) -> i16vec1: ... @overload def packSnorm(t: ctypes.c_uint16, v: glm_typing.F32Vector1, /) -> u16vec1: ... @overload def packSnorm(t: ctypes.c_uint16, v: _NF32DFV1T, /) -> u16vec1: ... @overload def packSnorm(t: ctypes.c_int32, v: glm_typing.F32Vector1, /) -> i32vec1: ... @overload def packSnorm(t: ctypes.c_int32, v: _NF32DFV1T, /) -> i32vec1: ... @overload def packSnorm(t: ctypes.c_uint32, v: glm_typing.F32Vector1, /) -> u32vec1: ... @overload def packSnorm(t: ctypes.c_uint32, v: _NF32DFV1T, /) -> u32vec1: ... @overload def packSnorm(t: ctypes.c_int64, v: glm_typing.F32Vector1, /) -> i64vec1: ... @overload def packSnorm(t: ctypes.c_int64, v: _NF32DFV1T, /) -> i64vec1: ... @overload def packSnorm(t: ctypes.c_uint64, v: glm_typing.F32Vector1, /) -> u64vec1: ... @overload def packSnorm(t: ctypes.c_uint64, v: _NF32DFV1T, /) -> u64vec1: ... @overload def packSnorm(t: ctypes.c_int8, v: glm_typing.F32Vector2, /) -> i8vec2: ... @overload def packSnorm(t: ctypes.c_int8, v: _NF32DFV2T, /) -> i8vec2: ... @overload def packSnorm(t: ctypes.c_uint8, v: glm_typing.F32Vector2, /) -> u8vec2: ... @overload def packSnorm(t: ctypes.c_uint8, v: _NF32DFV2T, /) -> u8vec2: ... @overload def packSnorm(t: ctypes.c_int16, v: glm_typing.F32Vector2, /) -> i16vec2: ... @overload def packSnorm(t: ctypes.c_int16, v: _NF32DFV2T, /) -> i16vec2: ... @overload def packSnorm(t: ctypes.c_uint16, v: glm_typing.F32Vector2, /) -> u16vec2: ... @overload def packSnorm(t: ctypes.c_uint16, v: _NF32DFV2T, /) -> u16vec2: ... @overload def packSnorm(t: ctypes.c_int32, v: glm_typing.F32Vector2, /) -> i32vec2: ... @overload def packSnorm(t: ctypes.c_int32, v: _NF32DFV2T, /) -> i32vec2: ... @overload def packSnorm(t: ctypes.c_uint32, v: glm_typing.F32Vector2, /) -> u32vec2: ... @overload def packSnorm(t: ctypes.c_uint32, v: _NF32DFV2T, /) -> u32vec2: ... @overload def packSnorm(t: ctypes.c_int64, v: glm_typing.F32Vector2, /) -> i64vec2: ... @overload def packSnorm(t: ctypes.c_int64, v: _NF32DFV2T, /) -> i64vec2: ... @overload def packSnorm(t: ctypes.c_uint64, v: glm_typing.F32Vector2, /) -> u64vec2: ... @overload def packSnorm(t: ctypes.c_uint64, v: _NF32DFV2T, /) -> u64vec2: ... @overload def packSnorm(t: ctypes.c_int8, v: glm_typing.F32Vector3, /) -> i8vec3: ... @overload def packSnorm(t: ctypes.c_int8, v: _NF32DFV3T, /) -> i8vec3: ... @overload def packSnorm(t: ctypes.c_uint8, v: glm_typing.F32Vector3, /) -> u8vec3: ... @overload def packSnorm(t: ctypes.c_uint8, v: _NF32DFV3T, /) -> u8vec3: ... @overload def packSnorm(t: ctypes.c_int16, v: glm_typing.F32Vector3, /) -> i16vec3: ... @overload def packSnorm(t: ctypes.c_int16, v: _NF32DFV3T, /) -> i16vec3: ... @overload def packSnorm(t: ctypes.c_uint16, v: glm_typing.F32Vector3, /) -> u16vec3: ... @overload def packSnorm(t: ctypes.c_uint16, v: _NF32DFV3T, /) -> u16vec3: ... @overload def packSnorm(t: ctypes.c_int32, v: glm_typing.F32Vector3, /) -> i32vec3: ... @overload def packSnorm(t: ctypes.c_int32, v: _NF32DFV3T, /) -> i32vec3: ... @overload def packSnorm(t: ctypes.c_uint32, v: glm_typing.F32Vector3, /) -> u32vec3: ... @overload def packSnorm(t: ctypes.c_uint32, v: _NF32DFV3T, /) -> u32vec3: ... @overload def packSnorm(t: ctypes.c_int64, v: glm_typing.F32Vector3, /) -> i64vec3: ... @overload def packSnorm(t: ctypes.c_int64, v: _NF32DFV3T, /) -> i64vec3: ... @overload def packSnorm(t: ctypes.c_uint64, v: glm_typing.F32Vector3, /) -> u64vec3: ... @overload def packSnorm(t: ctypes.c_uint64, v: _NF32DFV3T, /) -> u64vec3: ... @overload def packSnorm(t: ctypes.c_int8, v: glm_typing.F32Vector4, /) -> i8vec4: ... @overload def packSnorm(t: ctypes.c_int8, v: _NF32DFV4T, /) -> i8vec4: ... @overload def packSnorm(t: ctypes.c_uint8, v: glm_typing.F32Vector4, /) -> u8vec4: ... @overload def packSnorm(t: ctypes.c_uint8, v: _NF32DFV4T, /) -> u8vec4: ... @overload def packSnorm(t: ctypes.c_int16, v: glm_typing.F32Vector4, /) -> i16vec4: ... @overload def packSnorm(t: ctypes.c_int16, v: _NF32DFV4T, /) -> i16vec4: ... @overload def packSnorm(t: ctypes.c_uint16, v: glm_typing.F32Vector4, /) -> u16vec4: ... @overload def packSnorm(t: ctypes.c_uint16, v: _NF32DFV4T, /) -> u16vec4: ... @overload def packSnorm(t: ctypes.c_int32, v: glm_typing.F32Vector4, /) -> i32vec4: ... @overload def packSnorm(t: ctypes.c_int32, v: _NF32DFV4T, /) -> i32vec4: ... @overload def packSnorm(t: ctypes.c_uint32, v: glm_typing.F32Vector4, /) -> u32vec4: ... @overload def packSnorm(t: ctypes.c_uint32, v: _NF32DFV4T, /) -> u32vec4: ... @overload def packSnorm(t: ctypes.c_int64, v: glm_typing.F32Vector4, /) -> i64vec4: ... @overload def packSnorm(t: ctypes.c_int64, v: _NF32DFV4T, /) -> i64vec4: ... @overload def packSnorm(t: ctypes.c_uint64, v: glm_typing.F32Vector4, /) -> u64vec4: ... @overload def packSnorm(t: ctypes.c_uint64, v: _NF32DFV4T, /) -> u64vec4: ... def packSnorm1x16(v: float, /) -> int: ... def packSnorm1x8(v: float, /) -> int: ... def packSnorm2x8(v: glm_typing.F32Vector2, /) -> int: ... def packSnorm3x10_1x2(v: glm_typing.F32Vector4, /) -> int: ... def packSnorm4x16(v: glm_typing.F32Vector4, /) -> int: ... def packU3x10_1x2(v: glm_typing.U32Vector4, /) -> int: ... def packUint2x16(v: glm_typing.U16Vector2, /) -> int: ... def packUint2x32(v: glm_typing.U32Vector2, /) -> int: ... def packUint2x8(v: glm_typing.U8Vector2, /) -> int: ... def packUint4x16(v: glm_typing.U16Vector4, /) -> int: ... def packUint4x8(v: glm_typing.U16Vector4, /) -> int: ... @overload def packUnorm(t: ctypes.c_uint8, v: glm_typing.F32Vector1, /) -> u8vec1: ... @overload def packUnorm(t: ctypes.c_uint8, v: _NF32DFV1T, /) -> u8vec1: ... @overload def packUnorm(t: ctypes.c_uint16, v: glm_typing.F32Vector1, /) -> u16vec1: ... @overload def packUnorm(t: ctypes.c_uint16, v: _NF32DFV1T, /) -> u16vec1: ... @overload def packUnorm(t: ctypes.c_uint32, v: glm_typing.F32Vector1, /) -> u32vec1: ... @overload def packUnorm(t: ctypes.c_uint32, v: _NF32DFV1T, /) -> u32vec1: ... @overload def packUnorm(t: ctypes.c_uint64, v: glm_typing.F32Vector1, /) -> u64vec1: ... @overload def packUnorm(t: ctypes.c_uint64, v: _NF32DFV1T, /) -> u64vec1: ... @overload def packUnorm(t: ctypes.c_uint8, v: glm_typing.F32Vector2, /) -> u8vec2: ... @overload def packUnorm(t: ctypes.c_uint8, v: _NF32DFV2T, /) -> u8vec2: ... @overload def packUnorm(t: ctypes.c_uint16, v: glm_typing.F32Vector2, /) -> u16vec2: ... @overload def packUnorm(t: ctypes.c_uint16, v: _NF32DFV2T, /) -> u16vec2: ... @overload def packUnorm(t: ctypes.c_uint32, v: glm_typing.F32Vector2, /) -> u32vec2: ... @overload def packUnorm(t: ctypes.c_uint32, v: _NF32DFV2T, /) -> u32vec2: ... @overload def packUnorm(t: ctypes.c_uint64, v: glm_typing.F32Vector2, /) -> u64vec2: ... @overload def packUnorm(t: ctypes.c_uint64, v: _NF32DFV2T, /) -> u64vec2: ... @overload def packUnorm(t: ctypes.c_uint8, v: glm_typing.F32Vector3, /) -> u8vec3: ... @overload def packUnorm(t: ctypes.c_uint8, v: _NF32DFV3T, /) -> u8vec3: ... @overload def packUnorm(t: ctypes.c_uint16, v: glm_typing.F32Vector3, /) -> u16vec3: ... @overload def packUnorm(t: ctypes.c_uint16, v: _NF32DFV3T, /) -> u16vec3: ... @overload def packUnorm(t: ctypes.c_uint32, v: glm_typing.F32Vector3, /) -> u32vec3: ... @overload def packUnorm(t: ctypes.c_uint32, v: _NF32DFV3T, /) -> u32vec3: ... @overload def packUnorm(t: ctypes.c_uint64, v: glm_typing.F32Vector3, /) -> u64vec3: ... @overload def packUnorm(t: ctypes.c_uint64, v: _NF32DFV3T, /) -> u64vec3: ... @overload def packUnorm(t: ctypes.c_uint8, v: glm_typing.F32Vector4, /) -> u8vec4: ... @overload def packUnorm(t: ctypes.c_uint8, v: _NF32DFV4T, /) -> u8vec4: ... @overload def packUnorm(t: ctypes.c_uint16, v: glm_typing.F32Vector4, /) -> u16vec4: ... @overload def packUnorm(t: ctypes.c_uint16, v: _NF32DFV4T, /) -> u16vec4: ... @overload def packUnorm(t: ctypes.c_uint32, v: glm_typing.F32Vector4, /) -> u32vec4: ... @overload def packUnorm(t: ctypes.c_uint32, v: _NF32DFV4T, /) -> u32vec4: ... @overload def packUnorm(t: ctypes.c_uint64, v: glm_typing.F32Vector4, /) -> u64vec4: ... @overload def packUnorm(t: ctypes.c_uint64, v: _NF32DFV4T, /) -> u64vec4: ... def packUnorm1x16(v: float, /) -> int: ... def packUnorm1x5_1x6_1x5(v: glm_typing.F32Vector3, /) -> int: ... def packUnorm2x4(v: glm_typing.F32Vector2, /) -> int: ... def packUnorm2x8(v: glm_typing.F32Vector2, /) -> int: ... def packUnorm3x10_1x2(v: glm_typing.F32Vector4, /) -> int: ... def packUnorm4x16(v: glm_typing.F32Vector4, /) -> int: ... def packUnorm4x4(v: glm_typing.F32Vector4, /) -> int: ... def unpackF2x11_1x10(p: int, /) -> vec3: ... def unpackF3x9_E1x5(p: int, /) -> vec3: ... @overload def unpackHalf(v: glm_typing.U16Vector1, /) -> vec1: ... @overload def unpackHalf(v: glm_typing.U16Vector2, /) -> vec2: ... @overload def unpackHalf(v: glm_typing.U16Vector3, /) -> vec3: ... @overload def unpackHalf(v: glm_typing.U16Vector4, /) -> vec4: ... def unpackHalf1x16(p: int, /) -> float: ... def unpackI3x10_1x2(p: int, /) -> ivec4: ... def unpackInt2x16(p: int, /) -> i16vec2: ... def unpackInt2x32(p: int, /) -> i32vec2: ... def unpackInt2x8(p: int, /) -> i8vec2: ... def unpackInt4x16(p: int, /) -> i16vec4: ... def unpackInt4x8(p: int, /) -> i8vec4: ... def unpackRGBM(p: glm_typing.F32Vector4, /) -> vec3: ... @overload def unpackSnorm(t: ctypes.c_float, v: glm_typing.I32Vector1, /) -> vec1: ... @overload def unpackSnorm(t: ctypes.c_float, v: _NI32IUV1T, /) -> vec1: ... @overload def unpackSnorm(t: ctypes.c_double, v: glm_typing.I32Vector1, /) -> dvec1: ... @overload def unpackSnorm(t: ctypes.c_double, v: _NI32IUV1T, /) -> dvec1: ... @overload def unpackSnorm(t: ctypes.c_float, v: glm_typing.I32Vector2, /) -> vec2: ... @overload def unpackSnorm(t: ctypes.c_float, v: _NI32IUV2T, /) -> vec2: ... @overload def unpackSnorm(t: ctypes.c_double, v: glm_typing.I32Vector2, /) -> dvec2: ... @overload def unpackSnorm(t: ctypes.c_double, v: _NI32IUV2T, /) -> dvec2: ... @overload def unpackSnorm(t: ctypes.c_float, v: glm_typing.I32Vector3, /) -> vec3: ... @overload def unpackSnorm(t: ctypes.c_float, v: _NI32IUV3T, /) -> vec3: ... @overload def unpackSnorm(t: ctypes.c_double, v: glm_typing.I32Vector3, /) -> dvec3: ... @overload def unpackSnorm(t: ctypes.c_double, v: _NI32IUV3T, /) -> dvec3: ... @overload def unpackSnorm(t: ctypes.c_float, v: glm_typing.I32Vector4, /) -> vec4: ... @overload def unpackSnorm(t: ctypes.c_float, v: _NI32IUV4T, /) -> vec4: ... @overload def unpackSnorm(t: ctypes.c_double, v: glm_typing.I32Vector4, /) -> dvec4: ... @overload def unpackSnorm(t: ctypes.c_double, v: _NI32IUV4T, /) -> dvec4: ... def unpackSnorm1x16(p: int, /) -> float: ... def unpackSnorm1x8(p: int, /) -> float: ... def unpackSnorm2x8(p: int, /) -> vec2: ... def unpackSnorm3x10_1x2(p: int, /) -> vec4: ... def unpackSnorm4x16(p: int, /) -> vec4: ... def unpackU3x10_1x2(p: int, /) -> uvec4: ... def unpackUint2x16(p: int, /) -> u16vec2: ... def unpackUint2x32(p: int, /) -> u32vec2: ... def unpackUint2x8(p: int, /) -> u8vec2: ... def unpackUint4x16(p: int, /) -> u16vec4: ... def unpackUint4x8(p: int, /) -> u8vec4: ... @overload def unpackUnorm(t: ctypes.c_float, v: glm_typing.I32Vector1, /) -> vec1: ... @overload def unpackUnorm(t: ctypes.c_float, v: _NI32IUV1T, /) -> vec1: ... @overload def unpackUnorm(t: ctypes.c_double, v: glm_typing.I32Vector1, /) -> dvec1: ... @overload def unpackUnorm(t: ctypes.c_double, v: _NI32IUV1T, /) -> dvec1: ... @overload def unpackUnorm(t: ctypes.c_float, v: glm_typing.I32Vector2, /) -> vec2: ... @overload def unpackUnorm(t: ctypes.c_float, v: _NI32IUV2T, /) -> vec2: ... @overload def unpackUnorm(t: ctypes.c_double, v: glm_typing.I32Vector2, /) -> dvec2: ... @overload def unpackUnorm(t: ctypes.c_double, v: _NI32IUV2T, /) -> dvec2: ... @overload def unpackUnorm(t: ctypes.c_float, v: glm_typing.I32Vector3, /) -> vec3: ... @overload def unpackUnorm(t: ctypes.c_float, v: _NI32IUV3T, /) -> vec3: ... @overload def unpackUnorm(t: ctypes.c_double, v: glm_typing.I32Vector3, /) -> dvec3: ... @overload def unpackUnorm(t: ctypes.c_double, v: _NI32IUV3T, /) -> dvec3: ... @overload def unpackUnorm(t: ctypes.c_float, v: glm_typing.I32Vector4, /) -> vec4: ... @overload def unpackUnorm(t: ctypes.c_float, v: _NI32IUV4T, /) -> vec4: ... @overload def unpackUnorm(t: ctypes.c_double, v: glm_typing.I32Vector4, /) -> dvec4: ... @overload def unpackUnorm(t: ctypes.c_double, v: _NI32IUV4T, /) -> dvec4: ... def unpackUnorm1x16(p: int, /) -> float: ... def unpackUnorm1x5_1x6_1x5(p: int, /) -> vec3: ... def unpackUnorm1x8(p: int, /) -> float: ... def unpackUnorm2x3_1x2(p: int, /) -> vec3: ... def unpackUnorm2x4(p: int, /) -> vec2: ... def unpackUnorm2x8(p: int, /) -> vec2: ... def unpackUnorm3x10_1x2(p: int, /) -> vec4: ... def unpackUnorm3x5_1x1(p: int, /) -> vec4: ... def unpackUnorm4x16(p: int, /) -> vec4: ... def unpackUnorm4x4(p: int, /) -> vec4: ... @overload def eulerAngles(x: glm_typing.F32Quaternion, /) -> vec3: ... @overload def eulerAngles(x: dquat, /) -> dvec3: ... @overload def mat3_cast(x: glm_typing.F32Quaternion, /) -> mat3: ... @overload def mat3_cast(x: dquat, /) -> dmat3: ... @overload def mat4_cast(x: glm_typing.F32Quaternion, /) -> mat4: ... @overload def mat4_cast(x: dquat, /) -> dmat4: ... def pitch(x: glm_typing.AnyAnyQuaternion, /) -> float: ... @overload def quatLookAtLH(direction: glm_typing.F32Vector3, up: glm_typing.F32Vector3, /) -> quat: ... @overload def quatLookAtLH(direction: dvec3, up: dvec3, /) -> dquat: ... @overload def quatLookAtRH(direction: glm_typing.F32Vector3, up: glm_typing.F32Vector3, /) -> quat: ... @overload def quatLookAtRH(direction: dvec3, up: dvec3, /) -> dquat: ... @overload def quatLookAt(direction: glm_typing.F32Vector3, up: glm_typing.F32Vector3, /) -> quat: ... @overload def quatLookAt(direction: dvec3, up: dvec3, /) -> dquat: ... @overload def quat_cast(x: Union[glm_typing.F32Matrix3x3, glm_typing.F32Matrix4x4], /) -> quat: ... @overload def quat_cast(x: Union[dmat3, dmat4], /) -> quat: ... def roll(x: glm_typing.AnyAnyQuaternion, /) -> float: ... def yaw(x: glm_typing.AnyAnyQuaternion, /) -> float: ... def ballRand(Radius: glm_typing.Number, /) -> vec3: ... def circularRand(Radius: glm_typing.Number, /) -> vec2: ... def diskRand(Radius: glm_typing.Number, /) -> vec2: ... @overload def gaussRand(Mean: glm_typing.Number, Deviation: glm_typing.Number, /) -> float: ... @overload def gaussRand(Mean: glm_typing.F32Vector1, Deviation: glm_typing.F32Vector1, /) -> vec1: ... @overload def gaussRand(Mean: glm_typing.F32Vector2, Deviation: glm_typing.F32Vector2, /) -> vec2: ... @overload def gaussRand(Mean: glm_typing.F32Vector3, Deviation: glm_typing.F32Vector3, /) -> vec3: ... @overload def gaussRand(Mean: glm_typing.F32Vector4, Deviation: glm_typing.F32Vector4, /) -> vec4: ... @overload def gaussRand(Mean: _NF32VT, Deviation: _NF32VT, /) -> _NF32VT: ... @overload def linearRand(Min: glm_typing.Number, Max: glm_typing.Number, /) -> float: ... @overload def linearRand(Min: glm_typing.F32Vector1, Max: glm_typing.F32Vector1, /) -> vec1: ... @overload def linearRand(Min: glm_typing.F32Vector2, Max: glm_typing.F32Vector2, /) -> vec2: ... @overload def linearRand(Min: glm_typing.F32Vector3, Max: glm_typing.F32Vector3, /) -> vec3: ... @overload def linearRand(Min: glm_typing.F32Vector4, Max: glm_typing.F32Vector4, /) -> vec4: ... @overload def linearRand(Min: _NF32VT, Max: _NF32VT, /) -> _NF32VT: ... def setSeed(seed: SupportsInt, /) -> None: ... def sphericalRand(Radius: glm_typing.Number, /) -> vec3: ... def acot(x: glm_typing.Number, /) -> float: ... def acoth(x: glm_typing.Number, /) -> float: ... def acsc(x: glm_typing.Number, /) -> float: ... def acsch(x: glm_typing.Number, /) -> float: ... def asec(x: glm_typing.Number, /) -> float: ... def asech(x: glm_typing.Number, /) -> float: ... def cot(x: glm_typing.Number, /) -> float: ... def coth(x: glm_typing.Number, /) -> float: ... def csc(x: glm_typing.Number, /) -> float: ... def csch(x: glm_typing.Number, /) -> float: ... def sec(x: glm_typing.Number, /) -> float: ... def sech(x: glm_typing.Number, /) -> float: ... @overload def ceilMultiple(v: glm_typing.Number, Multiple: glm_typing.Number, /) -> int: ... @overload def ceilMultiple(v: glm_typing.I32Vector1, Multiple: glm_typing.I32Vector1, /) -> ivec1: ... @overload def ceilMultiple(v: glm_typing.I32Vector2, Multiple: glm_typing.I32Vector2, /) -> ivec2: ... @overload def ceilMultiple(v: glm_typing.I32Vector3, Multiple: glm_typing.I32Vector3, /) -> ivec3: ... @overload def ceilMultiple(v: glm_typing.I32Vector4, Multiple: glm_typing.I32Vector4, /) -> ivec4: ... @overload def ceilMultiple(v: _NI32IVT, Multiple: _NI32IVT, /) -> _NI32IVT: ... @overload def ceilPowerOfTwo(v: glm_typing.Number, Multiple: glm_typing.Number, /) -> int: ... @overload def ceilPowerOfTwo(v: glm_typing.I32Vector1, Multiple: glm_typing.I32Vector1, /) -> ivec1: ... @overload def ceilPowerOfTwo(v: glm_typing.I32Vector2, Multiple: glm_typing.I32Vector2, /) -> ivec2: ... @overload def ceilPowerOfTwo(v: glm_typing.I32Vector3, Multiple: glm_typing.I32Vector3, /) -> ivec3: ... @overload def ceilPowerOfTwo(v: glm_typing.I32Vector4, Multiple: glm_typing.I32Vector4, /) -> ivec4: ... @overload def ceilPowerOfTwo(v: _NI32IVT, Multiple: _NI32IVT, /) -> _NI32IVT: ... @overload def floorMultiple(v: glm_typing.Number, Multiple: glm_typing.Number, /) -> int: ... @overload def floorMultiple(v: glm_typing.I32Vector1, Multiple: glm_typing.I32Vector1, /) -> ivec1: ... @overload def floorMultiple(v: glm_typing.I32Vector2, Multiple: glm_typing.I32Vector2, /) -> ivec2: ... @overload def floorMultiple(v: glm_typing.I32Vector3, Multiple: glm_typing.I32Vector3, /) -> ivec3: ... @overload def floorMultiple(v: glm_typing.I32Vector4, Multiple: glm_typing.I32Vector4, /) -> ivec4: ... @overload def floorMultiple(v: _NI32IVT, Multiple: _NI32IVT, /) -> _NI32IVT: ... @overload def floorPowerOfTwo(v: glm_typing.Number, Multiple: glm_typing.Number, /) -> int: ... @overload def floorPowerOfTwo(v: glm_typing.I32Vector1, Multiple: glm_typing.I32Vector1, /) -> ivec1: ... @overload def floorPowerOfTwo(v: glm_typing.I32Vector2, Multiple: glm_typing.I32Vector2, /) -> ivec2: ... @overload def floorPowerOfTwo(v: glm_typing.I32Vector3, Multiple: glm_typing.I32Vector3, /) -> ivec3: ... @overload def floorPowerOfTwo(v: glm_typing.I32Vector4, Multiple: glm_typing.I32Vector4, /) -> ivec4: ... @overload def floorPowerOfTwo(v: _NI32IVT, Multiple: _NI32IVT, /) -> _NI32IVT: ... @overload def roundMultiple(v: glm_typing.Number, Multiple: glm_typing.Number, /) -> int: ... @overload def roundMultiple(v: glm_typing.I32Vector1, Multiple: glm_typing.I32Vector1, /) -> ivec1: ... @overload def roundMultiple(v: glm_typing.I32Vector2, Multiple: glm_typing.I32Vector2, /) -> ivec2: ... @overload def roundMultiple(v: glm_typing.I32Vector3, Multiple: glm_typing.I32Vector3, /) -> ivec3: ... @overload def roundMultiple(v: glm_typing.I32Vector4, Multiple: glm_typing.I32Vector4, /) -> ivec4: ... @overload def roundMultiple(v: _NI32IVT, Multiple: _NI32IVT, /) -> _NI32IVT: ... @overload def roundPowerOfTwo(v: glm_typing.Number, Multiple: glm_typing.Number, /) -> int: ... @overload def roundPowerOfTwo(v: glm_typing.I32Vector1, Multiple: glm_typing.I32Vector1, /) -> ivec1: ... @overload def roundPowerOfTwo(v: glm_typing.I32Vector2, Multiple: glm_typing.I32Vector2, /) -> ivec2: ... @overload def roundPowerOfTwo(v: glm_typing.I32Vector3, Multiple: glm_typing.I32Vector3, /) -> ivec3: ... @overload def roundPowerOfTwo(v: glm_typing.I32Vector4, Multiple: glm_typing.I32Vector4, /) -> ivec4: ... @overload def roundPowerOfTwo(v: _NI32IVT, Multiple: _NI32IVT, /) -> _NI32IVT: ... def make_mat2(x: ctypes.pointer[Any], /) -> mat2x2: ... def make_mat3(x: ctypes.pointer[Any], /) -> mat3x3: ... def make_mat4(x: ctypes.pointer[Any], /) -> mat4x4: ... def make_mat2x2(x: ctypes.pointer[Any], /) -> mat2x2: ... def make_mat2x3(x: ctypes.pointer[Any], /) -> mat2x3: ... def make_mat2x4(x: ctypes.pointer[Any], /) -> mat2x4: ... def make_mat3x2(x: ctypes.pointer[Any], /) -> mat3x2: ... def make_mat3x3(x: ctypes.pointer[Any], /) -> mat3x3: ... def make_mat3x4(x: ctypes.pointer[Any], /) -> mat3x4: ... def make_mat4x2(x: ctypes.pointer[Any], /) -> mat4x2: ... def make_mat4x3(x: ctypes.pointer[Any], /) -> mat4x3: ... def make_mat4x4(x: ctypes.pointer[Any], /) -> mat4x4: ... def make_quat(x: ctypes.pointer[Any], /) -> quat: ... def make_vec2(x: ctypes.pointer[Any], /) -> vec2: ... def make_vec3(x: ctypes.pointer[Any], /) -> vec3: ... def make_vec4(x: ctypes.pointer[Any], /) -> vec4: ... @overload def sizeof(x: Type[Union[ctypes.c_bool, ctypes.c_short, ctypes.c_long, ctypes.c_longlong, ctypes.c_byte, ctypes.c_ushort, ctypes.c_ulong, ctypes.c_ulonglong, ctypes.c_ubyte, ctypes.c_double, ctypes.c_float, glm_typing.AnyAnyVecAny, glm_typing.AnyAnyMatAnyxAny, glm_typing.AnyAnyQuat]], /) -> int: ... @overload def sizeof(x: Union[ctypes.c_bool, ctypes.c_short, ctypes.c_long, ctypes.c_longlong, ctypes.c_byte, ctypes.c_ushort, ctypes.c_ulong, ctypes.c_ulonglong, ctypes.c_ubyte, ctypes.c_double, ctypes.c_float, array[Any], glm_typing.AnyAnyVecAny, glm_typing.AnyAnyMatAnyxAny, glm_typing.AnyAnyQuat], /) -> int: ... @overload def value_ptr(x: Union[glm_typing.F32VecAny, glm_typing.F32MatAnyxAny, glm_typing.F32Quat], /) -> ctypes.pointer[ctypes.c_float]: ... @overload def value_ptr(x: Union[glm_typing.D64VecAny, glm_typing.D64MatAnyxAny, glm_typing.D64Quat], /) -> ctypes.pointer[ctypes.c_double]: ... @overload def value_ptr(x: Union[glm_typing.I32VecAny, glm_typing.I32MatAnyxAny], /) -> ctypes.pointer[ctypes.c_int32]: ... @overload def value_ptr(x: Union[glm_typing.U32VecAny, glm_typing.U32MatAnyxAny], /) -> ctypes.pointer[ctypes.c_uint32]: ... @overload def value_ptr(x: glm_typing.I8VecAny, /) -> ctypes.pointer[ctypes.c_int8]: ... @overload def value_ptr(x: glm_typing.U8VecAny, /) -> ctypes.pointer[ctypes.c_uint8]: ... @overload def value_ptr(x: glm_typing.B8VecAny, /) -> ctypes.pointer[ctypes.c_bool]: ... @overload def value_ptr(x: glm_typing.I16VecAny, /) -> ctypes.pointer[ctypes.c_int16]: ... @overload def value_ptr(x: glm_typing.U16VecAny, /) -> ctypes.pointer[ctypes.c_uint16]: ... @overload def value_ptr(x: glm_typing.I64VecAny, /) -> ctypes.pointer[ctypes.c_int64]: ... @overload def value_ptr(x: glm_typing.U64VecAny, /) -> ctypes.pointer[ctypes.c_uint64]: ... @overload def float_distance(x: glm_typing.Number, y: glm_typing.Number) -> float: ... @overload def float_distance(x: glm_typing.F32Vector1, y: glm_typing.F32Vector1, /) -> ivec1: ... @overload def float_distance(x: dvec1, y: dvec1, /) -> i64vec1: ... @overload def float_distance(x: glm_typing.F32Vector2, y: glm_typing.F32Vector2, /) -> ivec2: ... @overload def float_distance(x: dvec2, y: dvec2, /) -> i64vec2: ... @overload def float_distance(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> ivec3: ... @overload def float_distance(x: dvec3, y: dvec3, /) -> i64vec3: ... @overload def float_distance(x: glm_typing.F32Vector4, y: glm_typing.F32Vector4, /) -> ivec4: ... @overload def float_distance(x: dvec4, y: dvec4, /) -> i64vec4: ... @overload def next_float(x: glm_typing.Number, /) -> float: ... @overload def next_float(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def next_float(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def next_float(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def next_float(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def next_float(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def next_float(x: glm_typing.Number, ULPs: glm_typing.Number, /) -> float: ... @overload def next_float(x: glm_typing.F32Vector1, ULPs: glm_typing.Number, /) -> vec1: ... @overload def next_float(x: glm_typing.F32Vector2, ULPs: glm_typing.Number, /) -> vec2: ... @overload def next_float(x: glm_typing.F32Vector3, ULPs: glm_typing.Number, /) -> vec3: ... @overload def next_float(x: glm_typing.F32Vector4, ULPs: glm_typing.Number, /) -> vec4: ... @overload def next_float(x: _NF32DFVT, ULPs: glm_typing.Number, /) -> _NF32DFVT: ... @overload def next_float(x: glm_typing.F32Vector1, ULPs: glm_typing.I32Vector1, /) -> vec1: ... @overload def next_float(x: _NF32DFV1T, ULPs: glm_typing.I32Vector1, /) -> _NF32DFV1T: ... @overload def next_float(x: glm_typing.F32Vector2, ULPs: glm_typing.I32Vector2, /) -> vec2: ... @overload def next_float(x: _NF32DFV2T, ULPs: glm_typing.I32Vector2, /) -> _NF32DFV2T: ... @overload def next_float(x: glm_typing.F32Vector3, ULPs: glm_typing.I32Vector3, /) -> vec3: ... @overload def next_float(x: _NF32DFV3T, ULPs: glm_typing.I32Vector3, /) -> _NF32DFV3T: ... @overload def next_float(x: glm_typing.F32Vector4, ULPs: glm_typing.I32Vector4, /) -> vec4: ... @overload def next_float(x: _NF32DFV4T, ULPs: glm_typing.I32Vector4, /) -> _NF32DFV4T: ... @overload def prev_float(x: glm_typing.Number, /) -> float: ... @overload def prev_float(x: glm_typing.F32Vector1, /) -> vec1: ... @overload def prev_float(x: glm_typing.F32Vector2, /) -> vec2: ... @overload def prev_float(x: glm_typing.F32Vector3, /) -> vec3: ... @overload def prev_float(x: glm_typing.F32Vector4, /) -> vec4: ... @overload def prev_float(x: _NF32DFVT, /) -> _NF32DFVT: ... @overload def prev_float(x: glm_typing.Number, ULPs: glm_typing.Number, /) -> float: ... @overload def prev_float(x: glm_typing.F32Vector1, ULPs: glm_typing.Number, /) -> vec1: ... @overload def prev_float(x: glm_typing.F32Vector2, ULPs: glm_typing.Number, /) -> vec2: ... @overload def prev_float(x: glm_typing.F32Vector3, ULPs: glm_typing.Number, /) -> vec3: ... @overload def prev_float(x: glm_typing.F32Vector4, ULPs: glm_typing.Number, /) -> vec4: ... @overload def prev_float(x: _NF32DFVT, ULPs: glm_typing.Number, /) -> _NF32DFVT: ... @overload def prev_float(x: glm_typing.F32Vector1, ULPs: glm_typing.I32Vector1, /) -> vec1: ... @overload def prev_float(x: _NF32DFV1T, ULPs: glm_typing.I32Vector1, /) -> _NF32DFV1T: ... @overload def prev_float(x: glm_typing.F32Vector2, ULPs: glm_typing.I32Vector2, /) -> vec2: ... @overload def prev_float(x: _NF32DFV2T, ULPs: glm_typing.I32Vector2, /) -> _NF32DFV2T: ... @overload def prev_float(x: glm_typing.F32Vector3, ULPs: glm_typing.I32Vector3, /) -> vec3: ... @overload def prev_float(x: _NF32DFV3T, ULPs: glm_typing.I32Vector3, /) -> _NF32DFV3T: ... @overload def prev_float(x: glm_typing.F32Vector4, ULPs: glm_typing.I32Vector4, /) -> vec4: ... @overload def prev_float(x: _NF32DFV4T, ULPs: glm_typing.I32Vector4, /) -> _NF32DFV4T: ... def frustumLH_NO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def frustumLH_ZO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def frustumRH_NO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def frustumRH_ZO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def frustum(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def frustumNO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def frustumRH(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def frustumLH(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def frustumZO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def infinitePerspectiveLH(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, /) -> mat4x4: ... def infinitePerspectiveRH(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, /) -> mat4x4: ... def infinitePerspective(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, /) -> mat4x4: ... def orthoLH_NO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, zNear: glm_typing.Number, zFar: glm_typing.Number, /) -> mat4x4: ... def orthoLH_ZO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, zNear: glm_typing.Number, zFar: glm_typing.Number, /) -> mat4x4: ... def orthoRH_NO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, zNear: glm_typing.Number, zFar: glm_typing.Number, /) -> mat4x4: ... def orthoRH_ZO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, zNear: glm_typing.Number, zFar: glm_typing.Number, /) -> mat4x4: ... def ortho(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, zNear: glm_typing.Number, zFar: glm_typing.Number, /) -> mat4x4: ... def orthoLH(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, zNear: glm_typing.Number, zFar: glm_typing.Number, /) -> mat4x4: ... def orthoNO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, zNear: glm_typing.Number, zFar: glm_typing.Number, /) -> mat4x4: ... def orthoRH(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, zNear: glm_typing.Number, zFar: glm_typing.Number, /) -> mat4x4: ... def orthoZO(left: glm_typing.Number, right: glm_typing.Number, bottom: glm_typing.Number, top: glm_typing.Number, zNear: glm_typing.Number, zFar: glm_typing.Number, /) -> mat4x4: ... def perspectiveLH_NO(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveLH_ZO(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveRH_NO(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveRH_ZO(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspective(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveLH(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveNO(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveRH(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveZO(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveFovLH_NO(fov: glm_typing.Number, width: glm_typing.Number, height: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveFovLH_ZO(fov: glm_typing.Number, width: glm_typing.Number, height: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveFovRH_NO(fov: glm_typing.Number, width: glm_typing.Number, height: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveFovRH_ZO(fov: glm_typing.Number, width: glm_typing.Number, height: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveFov(fov: glm_typing.Number, width: glm_typing.Number, height: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveFovLH(fov: glm_typing.Number, width: glm_typing.Number, height: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveFovNO(fov: glm_typing.Number, width: glm_typing.Number, height: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveFovRH(fov: glm_typing.Number, width: glm_typing.Number, height: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... def perspectiveFovZO(fov: glm_typing.Number, width: glm_typing.Number, height: glm_typing.Number, near: glm_typing.Number, far: glm_typing.Number, /) -> mat4x4: ... @overload def tweakedInfinitePerspective(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, /) -> mat4x4: ... @overload def tweakedInfinitePerspective(fovy: glm_typing.Number, aspect: glm_typing.Number, near: glm_typing.Number, epsilon: float, /) -> mat4x4: ... @overload def pickMatrix(center: glm_typing.F32Vector2, delta: glm_typing.F32Vector2, viewport: glm_typing.F32Vector4, /) -> mat4x4: ... @overload def pickMatrix(center: dvec2, delta: dvec2, viewport: dvec4, /) -> dmat4x4: ... @overload def projectNO(obj: glm_typing.F32Vector3, model: glm_typing.F32Matrix4x4, proj: glm_typing.F32Matrix4x4, viewport: glm_typing.F32Vector4, /) -> vec3: ... @overload def projectNO(obj: dvec3, model: dmat4x4, proj: dmat4x4, viewport: dvec4, /) -> dvec3: ... @overload def project(obj: glm_typing.F32Vector3, model: glm_typing.F32Matrix4x4, proj: glm_typing.F32Matrix4x4, viewport: glm_typing.F32Vector4, /) -> vec3: ... @overload def project(obj: dvec3, model: dmat4x4, proj: dmat4x4, viewport: dvec4, /) -> dvec3: ... @overload def projectZO(obj: glm_typing.F32Vector3, model: glm_typing.F32Matrix4x4, proj: glm_typing.F32Matrix4x4, viewport: glm_typing.F32Vector4, /) -> vec3: ... @overload def projectZO(obj: dvec3, model: dmat4x4, proj: dmat4x4, viewport: dvec4, /) -> dvec3: ... @overload def unProjectNO(obj: glm_typing.F32Vector3, model: glm_typing.F32Matrix4x4, proj: glm_typing.F32Matrix4x4, viewport: glm_typing.F32Vector4, /) -> vec3: ... @overload def unProjectNO(obj: dvec3, model: dmat4x4, proj: dmat4x4, viewport: dvec4, /) -> dvec3: ... @overload def unProject(obj: glm_typing.F32Vector3, model: glm_typing.F32Matrix4x4, proj: glm_typing.F32Matrix4x4, viewport: glm_typing.F32Vector4, /) -> vec3: ... @overload def unProject(obj: dvec3, model: dmat4x4, proj: dmat4x4, viewport: dvec4, /) -> dvec3: ... @overload def unProjectZO(obj: glm_typing.F32Vector3, model: glm_typing.F32Matrix4x4, proj: glm_typing.F32Matrix4x4, viewport: glm_typing.F32Vector4, /) -> vec3: ... @overload def unProjectZO(obj: dvec3, model: dmat4x4, proj: dmat4x4, viewport: dvec4, /) -> dvec3: ... def identity(matrix_type: Type[_MT], /) -> _MT: ... @overload def lookAtLH(eye: glm_typing.F32Vector3, center: glm_typing.F32Vector3, up: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def lookAtLH(eye: dvec3, center: dvec3, up: dvec3, /) -> dmat4x4: ... @overload def lookAtRH(eye: glm_typing.F32Vector3, center: glm_typing.F32Vector3, up: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def lookAtRH(eye: dvec3, center: dvec3, up: dvec3, /) -> dmat4x4: ... @overload def lookAt(eye: glm_typing.F32Vector3, center: glm_typing.F32Vector3, up: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def lookAt(eye: dvec3, center: dvec3, up: dvec3, /) -> dmat4x4: ... @overload def rotate(angle: glm_typing.Number, axis: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def rotate(angle: glm_typing.Number, axis: dvec3, /) -> dmat4x4: ... @overload def rotate(angle: glm_typing.Number, /) -> mat3x3: ... @overload def rotate(m: glm_typing.F32Matrix4x4, angle: glm_typing.Number, axis: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def rotate(m: dmat4x4, angle: glm_typing.Number, axis: dvec3, /) -> dmat4x4: ... @overload def rotate(m: glm_typing.F32Matrix3x3, angle: glm_typing.Number, /) -> mat3x3: ... @overload def rotate(m: dmat3x3, angle: glm_typing.Number, /) -> dmat3x3: ... @overload def rotate(v: glm_typing.F32Vector2, angle: glm_typing.Number, /) -> vec2: ... @overload def rotate(v: dvec2, angle: glm_typing.Number, /) -> dvec2: ... @overload def rotate(v: glm_typing.F32Vector3, angle: glm_typing.Number, normal: glm_typing.F32Vector3, /) -> vec3: ... @overload def rotate(v: dvec3, angle: glm_typing.Number, normal: dvec3, /) -> dvec3: ... @overload def rotate(v: glm_typing.F32Vector4, angle: glm_typing.Number, normal: glm_typing.F32Vector3, /) -> vec3: ... @overload def rotate(v: dvec4, angle: glm_typing.Number, normal: dvec3, /) -> dvec4: ... @overload def rotate(v: quat, angle: glm_typing.Number, normal: glm_typing.F32Vector3, /) -> quat: ... @overload def rotate(v: dquat, angle: glm_typing.Number, normal: dvec3, /) -> dquat: ... @overload def rotate_slow(m: glm_typing.F32Matrix4x4, angle: glm_typing.Number, axis: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def rotate_slow(m: dmat4x4, angle: glm_typing.Number, axis: dvec3, /) -> dmat4x4: ... @overload def scale(v: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def scale(v: dvec3, /) -> dmat4x4: ... @overload def scale(v: glm_typing.F32Vector2, /) -> mat3x3: ... @overload def scale(v: dvec2, /) -> mat3x3: ... @overload def scale(m: glm_typing.F32Matrix4x4, v: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def scale(m: dmat4x4, v: dvec3, /) -> dmat4x4: ... @overload def scale(m: glm_typing.F32Matrix3x3, v: glm_typing.F32Vector2, /) -> mat3x3: ... @overload def scale(m: dmat3x3, v: dvec2, /) -> dmat3x3: ... @overload def scale_slow(m: glm_typing.F32Matrix4x4, v: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def scale_slow(m: dmat4x4, v: dvec3, /) -> dmat4x4: ... @overload def translate(v: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def translate(v: dvec3, /) -> dmat4x4: ... @overload def translate(v: glm_typing.F32Vector2, /) -> mat3x3: ... @overload def translate(v: dvec2, /) -> dmat3x3: ... @overload def translate(m: glm_typing.F32Matrix4x4, v: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def translate(m: dmat4x4, v: dvec3, /) -> dmat4x4: ... @overload def translate(m: glm_typing.F32Matrix3x3, v: glm_typing.F32Vector2, /) -> mat3x3: ... @overload def translate(m: dmat3x3, v: dvec2, /) -> dmat3x3: ... @overload def conjugate(q: glm_typing.F32Quaternion, /) -> quat: ... @overload def conjugate(q: _NF32QT, /) -> _NF32QT: ... @overload def lerp(x: glm_typing.F32Quaternion, y: glm_typing.F32Quaternion, a: glm_typing.Number, /) -> quat: ... @overload def lerp(x: _NF32QT, y: _NF32QT, a: glm_typing.Number, /) -> _NF32QT: ... @overload def lerp(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, a: glm_typing.Number, /) -> vec3: ... @overload def lerp(x: _NF32DFV3T, y: _NF32DFV3T, a: glm_typing.Number, /) -> _NF32DFV3T: ... @overload def slerp(x: glm_typing.F32Quaternion, y: glm_typing.F32Quaternion, a: glm_typing.Number, /) -> quat: ... @overload def slerp(x: _NF32QT, y: _NF32QT, a: glm_typing.Number, /) -> _NF32QT: ... @overload def slerp(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, a: glm_typing.Number, /) -> vec3: ... @overload def slerp(x: _NF32DFV3T, y: _NF32DFV3T, a: glm_typing.Number, /) -> _NF32DFV3T: ... def angle(x: _QT, /) -> float: ... @overload def angleAxis(angle: glm_typing.Number, axis: glm_typing.F32Vector3, /) -> quat: ... @overload def angleAxis(angle: glm_typing.Number, axis: dvec3, /) -> dquat: ... @overload def axis(x: glm_typing.F32Quat, /) -> vec3: ... @overload def axis(x: dquat, /) -> dvec3: ... @overload def decompose(modelMatrix: glm_typing.F32Matrix3x3, scale: glm_typing.F32Vector3, orientation: glm_typing.F32Quaternion, translation: glm_typing.F32Vector3, skew: glm_typing.F32Vector3, perspective: glm_typing.F32Vector4, /) -> bool: ... @overload def decompose(modelMatrix: dmat4x4, scale: dvec3, orientation: dquat, translation: dvec3, skew: dvec3, perspective: dvec4, /) -> bool: ... @overload def shearX(m: glm_typing.F32Matrix3x3, y: glm_typing.Number, /) -> mat3x3: ... @overload def shearX(m: _NF32M3X3T, y: glm_typing.Number, /) -> _NF32M3X3T: ... @overload def shearY(m: glm_typing.F32Matrix3x3, y: glm_typing.Number, /) -> mat3x3: ... @overload def shearY(m: _NF32M3X3T, y: glm_typing.Number, /) -> _NF32M3X3T: ... @overload def distance2(p0: glm_typing.F32Vector1, p1: glm_typing.F32Vector1, /) -> float: ... @overload def distance2(p0: glm_typing.F32Vector2, p1: glm_typing.F32Vector2, /) -> float: ... @overload def distance2(p0: glm_typing.F32Vector3, p1: glm_typing.F32Vector3, /) -> float: ... @overload def distance2(p0: glm_typing.F32Vector4, p1: glm_typing.F32Vector4, /) -> float: ... @overload def distance2(p0: _NF32DFVT, p1: _NF32DFVT, /) -> float: ... @overload def l1Norm(v: glm_typing.FDAnyVector3, /) -> float: ... @overload def l1Norm(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> float: ... @overload def l1Norm(x: _NF32DFV3T, y: _NF32DFV3T, /) -> float: ... @overload def l2Norm(v: glm_typing.FDAnyVector3, /) -> float: ... @overload def l2Norm(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> float: ... @overload def l2Norm(x: _NF32DFV3T, y: _NF32DFV3T, /) -> float: ... @overload def lMaxNorm(v: glm_typing.FDAnyVector3, /) -> float: ... @overload def lMaxNorm(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> float: ... @overload def lMaxNorm(x: _NF32DFV3T, y: _NF32DFV3T, /) -> float: ... @overload def length2(p0: glm_typing.F32Vector1, p1: glm_typing.F32Vector1, /) -> float: ... @overload def length2(p0: glm_typing.F32Vector2, p1: glm_typing.F32Vector2, /) -> float: ... @overload def length2(p0: glm_typing.F32Vector3, p1: glm_typing.F32Vector3, /) -> float: ... @overload def length2(p0: glm_typing.F32Vector4, p1: glm_typing.F32Vector4, /) -> float: ... @overload def length2(p0: _NF32DFVT, p1: _NF32DFVT, /) -> float: ... @overload def lxNorm(v: glm_typing.FDAnyVector3, /) -> float: ... @overload def lxNorm(x: glm_typing.F32Vector3, y: glm_typing.F32Vector3, /) -> float: ... @overload def lxNorm(x: _NF32DFV3T, y: _NF32DFV3T, /) -> float: ... @overload def euclidean(polar: glm_typing.F32Vector2, /) -> vec3: ... @overload def euclidean(polar: dvec2, /) -> dvec3: ... @overload def polar(euclidean: glm_typing.F32Vector3, /) -> vec3: ... @overload def polar(euclidean: _NF32DFV3T, /) -> _NF32DFV3T: ... @overload def orientation(Normal: glm_typing.F32Vector3, Up: glm_typing.F32Vector3, /) -> mat4x4: ... @overload def orientation(Normal: dvec3, Up: dvec3, /) -> dmat4x4: ... @overload def rotateX(v: glm_typing.F32Vector3, angle: glm_typing.Number) -> vec3: ... @overload def rotateX(v: _NF32DFV3T, angle: glm_typing.Number) -> _NF32DFV3T: ... @overload def rotateX(v: glm_typing.F32Vector4, angle: glm_typing.Number) -> vec4: ... @overload def rotateX(v: _NF32DFV4T, angle: glm_typing.Number) -> _NF32DFV4T: ... @overload def rotateY(v: glm_typing.F32Vector3, angle: glm_typing.Number) -> vec3: ... @overload def rotateY(v: _NF32DFV3T, angle: glm_typing.Number) -> _NF32DFV3T: ... @overload def rotateY(v: glm_typing.F32Vector4, angle: glm_typing.Number) -> vec4: ... @overload def rotateY(v: _NF32DFV4T, angle: glm_typing.Number) -> _NF32DFV4T: ... @overload def rotateZ(v: glm_typing.F32Vector3, angle: glm_typing.Number) -> vec3: ... @overload def rotateZ(v: _NF32DFV3T, angle: glm_typing.Number) -> _NF32DFV3T: ... @overload def rotateZ(v: glm_typing.F32Vector4, angle: glm_typing.Number) -> vec4: ... @overload def rotateZ(v: _NF32DFV4T, angle: glm_typing.Number) -> _NF32DFV4T: ... __all__ = ['abs', 'acos', 'acosh', 'acot', 'acoth', 'acsc', 'acsch', 'add', 'affineInverse', 'all', 'and_', 'angle', 'angleAxis', 'any', 'array', 'asec', 'asech', 'asin', 'asinh', 'atan', 'atanh', 'axis', 'ballRand', 'bitCount', 'bitfieldExtract', 'bitfieldInsert', 'bitfieldReverse', 'bool_', 'bvec1', 'bvec2', 'bvec3', 'bvec4', 'c_int16', 'c_int32', 'c_int64', 'c_int8', 'c_uint16', 'c_uint32', 'c_uint64', 'c_uint8', 'ceil', 'ceilMultiple', 'ceilPowerOfTwo', 'circularRand', 'clamp', 'cmp', 'column', 'conjugate', 'convertLinearToSRGB', 'convertSRGBToLinear', 'cos', 'cosh', 'cot', 'coth', 'cross', 'csc', 'csch', 'decompose', 'degrees', 'determinant', 'diskRand', 'distance', 'distance2', 'div', 'dmat2', 'dmat2x2', 'dmat2x3', 'dmat2x4', 'dmat3', 'dmat3x2', 'dmat3x3', 'dmat3x4', 'dmat4', 'dmat4x2', 'dmat4x3', 'dmat4x4', 'dmvec2', 'dmvec3', 'dmvec4', 'dot', 'double', 'dquat', 'dvec1', 'dvec2', 'dvec3', 'dvec4', 'e', 'epsilon', 'epsilonEqual', 'epsilonNotEqual', 'equal', 'euclidean', 'euler', 'eulerAngles', 'exp', 'exp2', 'f32mat2', 'f32mat2x2', 'f32mat2x3', 'f32mat2x4', 'f32mat3', 'f32mat3x2', 'f32mat3x3', 'f32mat3x4', 'f32mat4', 'f32mat4x2', 'f32mat4x3', 'f32mat4x4', 'f32quat', 'f32vec1', 'f32vec2', 'f32vec3', 'f32vec4', 'f64mat2', 'f64mat2x2', 'f64mat2x3', 'f64mat2x4', 'f64mat3', 'f64mat3x2', 'f64mat3x3', 'f64mat3x4', 'f64mat4', 'f64mat4x2', 'f64mat4x3', 'f64mat4x4', 'f64quat', 'f64vec1', 'f64vec2', 'f64vec3', 'f64vec4', 'faceforward', 'findLSB', 'findMSB', 'float32', 'float64', 'floatBitsToInt', 'floatBitsToUint', 'float_', 'float_distance', 'floor', 'floorMultiple', 'floorPowerOfTwo', 'floordiv', 'fma', 'fmat2', 'fmat2x2', 'fmat2x3', 'fmat2x4', 'fmat3', 'fmat3x2', 'fmat3x3', 'fmat3x4', 'fmat4', 'fmat4x2', 'fmat4x3', 'fmat4x4', 'fmax', 'fmin', 'four_over_pi', 'fquat', 'fract', 'frexp', 'frustum', 'frustumLH', 'frustumLH_NO', 'frustumLH_ZO', 'frustumNO', 'frustumRH', 'frustumRH_NO', 'frustumRH_ZO', 'frustumZO', 'fvec1', 'fvec2', 'fvec3', 'fvec4', 'gaussRand', 'golden_ratio', 'greaterThan', 'greaterThanEqual', 'half_pi', 'i16vec1', 'i16vec2', 'i16vec3', 'i16vec4', 'i32mat2', 'i32mat2x2', 'i32mat2x3', 'i32mat2x4', 'i32mat3', 'i32mat3x2', 'i32mat3x3', 'i32mat3x4', 'i32mat4', 'i32mat4x2', 'i32mat4x3', 'i32mat4x4', 'i32vec1', 'i32vec2', 'i32vec3', 'i32vec4', 'i64vec1', 'i64vec2', 'i64vec3', 'i64vec4', 'i8vec1', 'i8vec2', 'i8vec3', 'i8vec4', 'identity', 'if_else', 'imat2', 'imat2x2', 'imat2x3', 'imat2x4', 'imat3', 'imat3x2', 'imat3x3', 'imat3x4', 'imat4', 'imat4x2', 'imat4x3', 'imat4x4', 'imulExtended', 'imvec2', 'imvec3', 'imvec4', 'infinitePerspective', 'infinitePerspectiveLH', 'infinitePerspectiveRH', 'int16', 'int32', 'int64', 'int8', 'intBitsToFloat', 'inv', 'inverse', 'inverseTranspose', 'inversesqrt', 'iround', 'isinf', 'isnan', 'ivec1', 'ivec2', 'ivec3', 'ivec4', 'l1Norm', 'l2Norm', 'lMaxNorm', 'ldexp', 'length2', 'lerp', 'lessThan', 'lessThanEqual', 'linearRand', 'ln_ln_two', 'ln_ten', 'ln_two', 'log', 'log2', 'lookAt', 'lookAtLH', 'lookAtRH', 'lshift', 'lxNorm', 'make_mat2', 'make_mat2x2', 'make_mat2x3', 'make_mat2x4', 'make_mat3', 'make_mat3x2', 'make_mat3x3', 'make_mat3x4', 'make_mat4', 'make_mat4x2', 'make_mat4x3', 'make_mat4x4', 'make_quat', 'make_vec2', 'make_vec3', 'make_vec4', 'mat2', 'mat2x2', 'mat2x3', 'mat2x4', 'mat3', 'mat3_cast', 'mat3x2', 'mat3x3', 'mat3x4', 'mat4', 'mat4_cast', 'mat4x2', 'mat4x3', 'mat4x4', 'matrixCompMult', 'max', 'min', 'mix', 'modf', 'mul', 'mvec2', 'mvec3', 'mvec4', 'neg', 'next_float', 'normalize', 'notEqual', 'not_', 'one', 'one_over_pi', 'one_over_root_two', 'or_', 'orientation', 'ortho', 'orthoLH', 'orthoLH_NO', 'orthoLH_ZO', 'orthoNO', 'orthoRH', 'orthoRH_NO', 'orthoRH_ZO', 'orthoZO', 'outerProduct', 'packDouble2x32', 'packF2x11_1x10', 'packF3x9_E1x5', 'packHalf', 'packHalf1x16', 'packHalf2x16', 'packHalf4x16', 'packI3x10_1x2', 'packInt2x16', 'packInt2x32', 'packInt2x8', 'packInt4x16', 'packInt4x8', 'packRGBM', 'packSnorm', 'packSnorm1x16', 'packSnorm1x8', 'packSnorm2x16', 'packSnorm2x8', 'packSnorm3x10_1x2', 'packSnorm4x16', 'packSnorm4x8', 'packU3x10_1x2', 'packUint2x16', 'packUint2x32', 'packUint2x8', 'packUint4x16', 'packUint4x8', 'packUnorm', 'packUnorm1x16', 'packUnorm1x5_1x6_1x5', 'packUnorm2x16', 'packUnorm2x4', 'packUnorm2x8', 'packUnorm3x10_1x2', 'packUnorm4x16', 'packUnorm4x4', 'packUnorm4x8', 'perlin', 'perspective', 'perspectiveFov', 'perspectiveFovLH', 'perspectiveFovLH_NO', 'perspectiveFovLH_ZO', 'perspectiveFovNO', 'perspectiveFovRH', 'perspectiveFovRH_NO', 'perspectiveFovRH_ZO', 'perspectiveFovZO', 'perspectiveLH', 'perspectiveLH_NO', 'perspectiveLH_ZO', 'perspectiveNO', 'perspectiveRH', 'perspectiveRH_NO', 'perspectiveRH_ZO', 'perspectiveZO', 'pi', 'pickMatrix', 'pitch', 'polar', 'pos', 'pow', 'prev_float', 'project', 'projectNO', 'projectZO', 'quat', 'quatLookAt', 'quatLookAtLH', 'quatLookAtRH', 'quater_pi', 'radians', 'reflect', 'refract', 'roll', 'root_five', 'root_half_pi', 'root_ln_four', 'root_pi', 'root_three', 'root_two', 'root_two_pi', 'round', 'roundEven', 'roundMultiple', 'roundPowerOfTwo', 'row', 'rshift', 'sec', 'sech', 'setSeed', 'shearX', 'shearY', 'sign', 'simplex', 'sin', 'sinh', 'sizeof', 'slerp', 'smoothstep', 'sphericalRand', 'sqrt', 'step', 'sub', 'tan', 'tanh', 'third', 'three_over_two_pi', 'transpose', 'trunc', 'tweakedInfinitePerspective', 'two_over_pi', 'two_over_root_pi', 'two_pi', 'two_thirds', 'u16vec1', 'u16vec2', 'u16vec3', 'u16vec4', 'u32mat2', 'u32mat2x2', 'u32mat2x3', 'u32mat2x4', 'u32mat3', 'u32mat3x2', 'u32mat3x3', 'u32mat3x4', 'u32mat4', 'u32mat4x2', 'u32mat4x3', 'u32mat4x4', 'u32vec1', 'u32vec2', 'u32vec3', 'u32vec4', 'u64vec1', 'u64vec2', 'u64vec3', 'u64vec4', 'u8vec1', 'u8vec2', 'u8vec3', 'u8vec4', 'uaddCarry', 'uint16', 'uint32', 'uint64', 'uint8', 'uintBitsToFloat', 'umat2', 'umat2x2', 'umat2x3', 'umat2x4', 'umat3', 'umat3x2', 'umat3x3', 'umat3x4', 'umat4', 'umat4x2', 'umat4x3', 'umat4x4', 'umulExtended', 'umvec2', 'umvec3', 'umvec4', 'unProject', 'unProjectNO', 'unProjectZO', 'unpackDouble2x32', 'unpackF2x11_1x10', 'unpackF3x9_E1x5', 'unpackHalf', 'unpackHalf1x16', 'unpackHalf2x16', 'unpackI3x10_1x2', 'unpackInt2x16', 'unpackInt2x32', 'unpackInt2x8', 'unpackInt4x16', 'unpackInt4x8', 'unpackRGBM', 'unpackSnorm', 'unpackSnorm1x16', 'unpackSnorm1x8', 'unpackSnorm2x16', 'unpackSnorm2x8', 'unpackSnorm3x10_1x2', 'unpackSnorm4x16', 'unpackSnorm4x8', 'unpackU3x10_1x2', 'unpackUint2x16', 'unpackUint2x32', 'unpackUint2x8', 'unpackUint4x16', 'unpackUint4x8', 'unpackUnorm', 'unpackUnorm1x16', 'unpackUnorm1x5_1x6_1x5', 'unpackUnorm1x8', 'unpackUnorm2x16', 'unpackUnorm2x3_1x2', 'unpackUnorm2x4', 'unpackUnorm2x8', 'unpackUnorm3x10_1x2', 'unpackUnorm3x5_1x1', 'unpackUnorm4x16', 'unpackUnorm4x4', 'unpackUnorm4x8', 'uround', 'usubBorrow', 'uvec1', 'uvec2', 'uvec3', 'uvec4', 'value_ptr', 'vec1', 'vec2', 'vec3', 'vec4', 'xor', 'yaw', 'zero'] Zuzu-Typ-PyGLM-e113a8a/pyglm/glm_typing.py000066400000000000000000002262551511156275200204700ustar00rootroot00000000000000 # generated by tools/generate.py # https://github.com/esoma/pyglm-typing/ from typing import SupportsFloat, SupportsInt, Tuple, Union from . import glm Number = Union[SupportsFloat, SupportsInt] B8Vector1 = Union[glm.bvec1, Tuple[Number]] B8Vec1 = glm.bvec1 B8Vector2 = Union[glm.bvec2, Tuple[Number, Number]] B8Vec2 = glm.bvec2 B8Vector3 = Union[glm.bvec3, Tuple[Number, Number, Number]] B8Vec3 = glm.bvec3 B8Vector4 = Union[glm.bvec4, Tuple[Number, Number, Number, Number]] B8Vec4 = glm.bvec4 B8VectorAny = Union[glm.bvec1, glm.bvec2, glm.bvec3, glm.bvec4, Tuple[Number], Tuple[Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number, Number]] B8VecAny = Union[glm.bvec1, glm.bvec2, glm.bvec3, glm.bvec4] BAnyVector1 = Union[glm.bvec1, Tuple[Number]] BAnyVec1 = glm.bvec1 BAnyVector2 = Union[glm.bvec2, Tuple[Number, Number]] BAnyVec2 = glm.bvec2 BAnyVector3 = Union[glm.bvec3, Tuple[Number, Number, Number]] BAnyVec3 = glm.bvec3 BAnyVector4 = Union[glm.bvec4, Tuple[Number, Number, Number, Number]] BAnyVec4 = glm.bvec4 BAnyVectorAny = Union[glm.bvec1, glm.bvec2, glm.bvec3, glm.bvec4, Tuple[Number], Tuple[Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number, Number]] BAnyVecAny = Union[glm.bvec1, glm.bvec2, glm.bvec3, glm.bvec4] D64Vector1 = Union[glm.dvec1, Tuple[Number]] D64Vec1 = glm.dvec1 D64Vector2 = Union[glm.dmvec2, glm.dvec2, Tuple[Number, Number]] D64Vec2 = Union[glm.dmvec2, glm.dvec2] D64Vector3 = Union[glm.dmvec3, glm.dvec3, Tuple[Number, Number, Number]] D64Vec3 = Union[glm.dmvec3, glm.dvec3] D64Vector4 = Union[glm.dmvec4, glm.dvec4, Tuple[Number, Number, Number, Number]] D64Vec4 = Union[glm.dmvec4, glm.dvec4] D64VectorAny = Union[glm.dmvec2, glm.dmvec3, glm.dmvec4, glm.dvec1, glm.dvec2, glm.dvec3, glm.dvec4, Tuple[Number], Tuple[Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number, Number]] D64VecAny = Union[glm.dmvec2, glm.dmvec3, glm.dmvec4, glm.dvec1, glm.dvec2, glm.dvec3, glm.dvec4] DAnyVector1 = Union[glm.dvec1, Tuple[Number]] DAnyVec1 = glm.dvec1 DAnyVector2 = Union[glm.dmvec2, glm.dvec2, Tuple[Number, Number]] DAnyVec2 = Union[glm.dmvec2, glm.dvec2] DAnyVector3 = Union[glm.dmvec3, glm.dvec3, Tuple[Number, Number, Number]] DAnyVec3 = Union[glm.dmvec3, glm.dvec3] DAnyVector4 = Union[glm.dmvec4, glm.dvec4, Tuple[Number, Number, Number, Number]] DAnyVec4 = Union[glm.dmvec4, glm.dvec4] DAnyVectorAny = Union[glm.dmvec2, glm.dmvec3, glm.dmvec4, glm.dvec1, glm.dvec2, glm.dvec3, glm.dvec4, Tuple[Number], Tuple[Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number, Number]] DAnyVecAny = Union[glm.dmvec2, glm.dmvec3, glm.dmvec4, glm.dvec1, glm.dvec2, glm.dvec3, glm.dvec4] F32Vector1 = Union[glm.vec1, Tuple[Number]] F32Vec1 = glm.vec1 F32Vector2 = Union[glm.mvec2, glm.vec2, Tuple[Number, Number]] F32Vec2 = Union[glm.mvec2, glm.vec2] F32Vector3 = Union[glm.mvec3, glm.vec3, Tuple[Number, Number, Number]] F32Vec3 = Union[glm.mvec3, glm.vec3] F32Vector4 = Union[glm.mvec4, glm.vec4, Tuple[Number, Number, Number, Number]] F32Vec4 = Union[glm.mvec4, glm.vec4] F32VectorAny = Union[glm.mvec2, glm.mvec3, glm.mvec4, glm.vec1, glm.vec2, glm.vec3, glm.vec4, Tuple[Number], Tuple[Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number, Number]] F32VecAny = Union[glm.mvec2, glm.mvec3, glm.mvec4, glm.vec1, glm.vec2, glm.vec3, glm.vec4] FAnyVector1 = Union[glm.vec1, Tuple[Number]] FAnyVec1 = glm.vec1 FAnyVector2 = Union[glm.mvec2, glm.vec2, Tuple[Number, Number]] FAnyVec2 = Union[glm.mvec2, glm.vec2] FAnyVector3 = Union[glm.mvec3, glm.vec3, Tuple[Number, Number, Number]] FAnyVec3 = Union[glm.mvec3, glm.vec3] FAnyVector4 = Union[glm.mvec4, glm.vec4, Tuple[Number, Number, Number, Number]] FAnyVec4 = Union[glm.mvec4, glm.vec4] FAnyVectorAny = Union[glm.mvec2, glm.mvec3, glm.mvec4, glm.vec1, glm.vec2, glm.vec3, glm.vec4, Tuple[Number], Tuple[Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number, Number]] FAnyVecAny = Union[glm.mvec2, glm.mvec3, glm.mvec4, glm.vec1, glm.vec2, glm.vec3, glm.vec4] I8Vector1 = Union[glm.i8vec1, Tuple[Number]] I8Vec1 = glm.i8vec1 I8Vector2 = Union[glm.i8vec2, Tuple[Number, Number]] I8Vec2 = glm.i8vec2 I8Vector3 = Union[glm.i8vec3, Tuple[Number, Number, Number]] I8Vec3 = glm.i8vec3 I8Vector4 = Union[glm.i8vec4, Tuple[Number, Number, Number, Number]] I8Vec4 = glm.i8vec4 I8VectorAny = Union[glm.i8vec1, glm.i8vec2, glm.i8vec3, glm.i8vec4, Tuple[Number], Tuple[Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number, Number]] I8VecAny = Union[glm.i8vec1, glm.i8vec2, glm.i8vec3, glm.i8vec4] I16Vector1 = Union[glm.i16vec1, Tuple[Number]] I16Vec1 = glm.i16vec1 I16Vector2 = Union[glm.i16vec2, Tuple[Number, Number]] I16Vec2 = glm.i16vec2 I16Vector3 = Union[glm.i16vec3, Tuple[Number, Number, Number]] I16Vec3 = glm.i16vec3 I16Vector4 = Union[glm.i16vec4, Tuple[Number, Number, Number, Number]] I16Vec4 = glm.i16vec4 I16VectorAny = Union[glm.i16vec1, glm.i16vec2, glm.i16vec3, glm.i16vec4, Tuple[Number], Tuple[Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number, Number]] I16VecAny = Union[glm.i16vec1, glm.i16vec2, glm.i16vec3, glm.i16vec4] I32Vector1 = Union[glm.ivec1, Tuple[Number]] I32Vec1 = glm.ivec1 I32Vector2 = Union[glm.imvec2, glm.ivec2, Tuple[Number, Number]] I32Vec2 = Union[glm.imvec2, glm.ivec2] I32Vector3 = Union[glm.imvec3, glm.ivec3, Tuple[Number, Number, Number]] I32Vec3 = Union[glm.imvec3, glm.ivec3] I32Vector4 = Union[glm.imvec4, glm.ivec4, Tuple[Number, Number, Number, Number]] I32Vec4 = Union[glm.imvec4, glm.ivec4] I32VectorAny = Union[glm.imvec2, glm.imvec3, glm.imvec4, glm.ivec1, glm.ivec2, glm.ivec3, glm.ivec4, Tuple[Number], Tuple[Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number, Number]] I32VecAny = Union[glm.imvec2, glm.imvec3, glm.imvec4, glm.ivec1, glm.ivec2, glm.ivec3, glm.ivec4] I64Vector1 = Union[glm.i64vec1, Tuple[Number]] I64Vec1 = glm.i64vec1 I64Vector2 = Union[glm.i64vec2, Tuple[Number, Number]] I64Vec2 = glm.i64vec2 I64Vector3 = Union[glm.i64vec3, Tuple[Number, Number, Number]] I64Vec3 = glm.i64vec3 I64Vector4 = Union[glm.i64vec4, Tuple[Number, Number, Number, Number]] I64Vec4 = glm.i64vec4 I64VectorAny = Union[glm.i64vec1, glm.i64vec2, glm.i64vec3, glm.i64vec4, Tuple[Number], Tuple[Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number, Number]] I64VecAny = Union[glm.i64vec1, glm.i64vec2, glm.i64vec3, glm.i64vec4] IAnyVector1 = Union[glm.i16vec1, glm.i64vec1, glm.i8vec1, glm.ivec1, Tuple[Number]] IAnyVec1 = Union[glm.i16vec1, glm.i64vec1, glm.i8vec1, glm.ivec1] IAnyVector2 = Union[glm.i16vec2, glm.i64vec2, glm.i8vec2, glm.imvec2, glm.ivec2, Tuple[Number, Number]] IAnyVec2 = Union[glm.i16vec2, glm.i64vec2, glm.i8vec2, glm.imvec2, glm.ivec2] IAnyVector3 = Union[glm.i16vec3, glm.i64vec3, glm.i8vec3, glm.imvec3, glm.ivec3, Tuple[Number, Number, Number]] IAnyVec3 = Union[glm.i16vec3, glm.i64vec3, glm.i8vec3, glm.imvec3, glm.ivec3] IAnyVector4 = Union[glm.i16vec4, glm.i64vec4, glm.i8vec4, glm.imvec4, glm.ivec4, Tuple[Number, Number, Number, Number]] IAnyVec4 = Union[glm.i16vec4, glm.i64vec4, glm.i8vec4, glm.imvec4, glm.ivec4] IAnyVectorAny = Union[glm.i16vec1, glm.i16vec2, glm.i16vec3, glm.i16vec4, glm.i64vec1, glm.i64vec2, glm.i64vec3, glm.i64vec4, glm.i8vec1, glm.i8vec2, glm.i8vec3, glm.i8vec4, glm.imvec2, glm.imvec3, glm.imvec4, glm.ivec1, glm.ivec2, glm.ivec3, glm.ivec4, Tuple[Number], Tuple[Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number, Number]] IAnyVecAny = Union[glm.i16vec1, glm.i16vec2, glm.i16vec3, glm.i16vec4, glm.i64vec1, glm.i64vec2, glm.i64vec3, glm.i64vec4, glm.i8vec1, glm.i8vec2, glm.i8vec3, glm.i8vec4, glm.imvec2, glm.imvec3, glm.imvec4, glm.ivec1, glm.ivec2, glm.ivec3, glm.ivec4] U8Vector1 = Union[glm.u8vec1, Tuple[Number]] U8Vec1 = glm.u8vec1 U8Vector2 = Union[glm.u8vec2, Tuple[Number, Number]] U8Vec2 = glm.u8vec2 U8Vector3 = Union[glm.u8vec3, Tuple[Number, Number, Number]] U8Vec3 = glm.u8vec3 U8Vector4 = Union[glm.u8vec4, Tuple[Number, Number, Number, Number]] U8Vec4 = glm.u8vec4 U8VectorAny = Union[glm.u8vec1, glm.u8vec2, glm.u8vec3, glm.u8vec4, Tuple[Number], Tuple[Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number, Number]] U8VecAny = Union[glm.u8vec1, glm.u8vec2, glm.u8vec3, glm.u8vec4] U16Vector1 = Union[glm.u16vec1, Tuple[Number]] U16Vec1 = glm.u16vec1 U16Vector2 = Union[glm.u16vec2, Tuple[Number, Number]] U16Vec2 = glm.u16vec2 U16Vector3 = Union[glm.u16vec3, Tuple[Number, Number, Number]] U16Vec3 = glm.u16vec3 U16Vector4 = Union[glm.u16vec4, Tuple[Number, Number, Number, Number]] U16Vec4 = glm.u16vec4 U16VectorAny = Union[glm.u16vec1, glm.u16vec2, glm.u16vec3, glm.u16vec4, Tuple[Number], Tuple[Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number, Number]] U16VecAny = Union[glm.u16vec1, glm.u16vec2, glm.u16vec3, glm.u16vec4] U32Vector1 = Union[glm.uvec1, Tuple[Number]] U32Vec1 = glm.uvec1 U32Vector2 = Union[glm.umvec2, glm.uvec2, Tuple[Number, Number]] U32Vec2 = Union[glm.umvec2, glm.uvec2] U32Vector3 = Union[glm.umvec3, glm.uvec3, Tuple[Number, Number, Number]] U32Vec3 = Union[glm.umvec3, glm.uvec3] U32Vector4 = Union[glm.umvec4, glm.uvec4, Tuple[Number, Number, Number, Number]] U32Vec4 = Union[glm.umvec4, glm.uvec4] U32VectorAny = Union[glm.umvec2, glm.umvec3, glm.umvec4, glm.uvec1, glm.uvec2, glm.uvec3, glm.uvec4, Tuple[Number], Tuple[Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number, Number]] U32VecAny = Union[glm.umvec2, glm.umvec3, glm.umvec4, glm.uvec1, glm.uvec2, glm.uvec3, glm.uvec4] U64Vector1 = Union[glm.u64vec1, Tuple[Number]] U64Vec1 = glm.u64vec1 U64Vector2 = Union[glm.u64vec2, Tuple[Number, Number]] U64Vec2 = glm.u64vec2 U64Vector3 = Union[glm.u64vec3, Tuple[Number, Number, Number]] U64Vec3 = glm.u64vec3 U64Vector4 = Union[glm.u64vec4, Tuple[Number, Number, Number, Number]] U64Vec4 = glm.u64vec4 U64VectorAny = Union[glm.u64vec1, glm.u64vec2, glm.u64vec3, glm.u64vec4, Tuple[Number], Tuple[Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number, Number]] U64VecAny = Union[glm.u64vec1, glm.u64vec2, glm.u64vec3, glm.u64vec4] UAnyVector1 = Union[glm.u16vec1, glm.u64vec1, glm.u8vec1, glm.uvec1, Tuple[Number]] UAnyVec1 = Union[glm.u16vec1, glm.u64vec1, glm.u8vec1, glm.uvec1] UAnyVector2 = Union[glm.u16vec2, glm.u64vec2, glm.u8vec2, glm.umvec2, glm.uvec2, Tuple[Number, Number]] UAnyVec2 = Union[glm.u16vec2, glm.u64vec2, glm.u8vec2, glm.umvec2, glm.uvec2] UAnyVector3 = Union[glm.u16vec3, glm.u64vec3, glm.u8vec3, glm.umvec3, glm.uvec3, Tuple[Number, Number, Number]] UAnyVec3 = Union[glm.u16vec3, glm.u64vec3, glm.u8vec3, glm.umvec3, glm.uvec3] UAnyVector4 = Union[glm.u16vec4, glm.u64vec4, glm.u8vec4, glm.umvec4, glm.uvec4, Tuple[Number, Number, Number, Number]] UAnyVec4 = Union[glm.u16vec4, glm.u64vec4, glm.u8vec4, glm.umvec4, glm.uvec4] UAnyVectorAny = Union[glm.u16vec1, glm.u16vec2, glm.u16vec3, glm.u16vec4, glm.u64vec1, glm.u64vec2, glm.u64vec3, glm.u64vec4, glm.u8vec1, glm.u8vec2, glm.u8vec3, glm.u8vec4, glm.umvec2, glm.umvec3, glm.umvec4, glm.uvec1, glm.uvec2, glm.uvec3, glm.uvec4, Tuple[Number], Tuple[Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number, Number]] UAnyVecAny = Union[glm.u16vec1, glm.u16vec2, glm.u16vec3, glm.u16vec4, glm.u64vec1, glm.u64vec2, glm.u64vec3, glm.u64vec4, glm.u8vec1, glm.u8vec2, glm.u8vec3, glm.u8vec4, glm.umvec2, glm.umvec3, glm.umvec4, glm.uvec1, glm.uvec2, glm.uvec3, glm.uvec4] Any8Vector1 = Union[glm.bvec1, glm.i8vec1, glm.u8vec1, Tuple[Number]] Any8Vec1 = Union[glm.bvec1, glm.i8vec1, glm.u8vec1] Any8Vector2 = Union[glm.bvec2, glm.i8vec2, glm.u8vec2, Tuple[Number, Number]] Any8Vec2 = Union[glm.bvec2, glm.i8vec2, glm.u8vec2] Any8Vector3 = Union[glm.bvec3, glm.i8vec3, glm.u8vec3, Tuple[Number, Number, Number]] Any8Vec3 = Union[glm.bvec3, glm.i8vec3, glm.u8vec3] Any8Vector4 = Union[glm.bvec4, glm.i8vec4, glm.u8vec4, Tuple[Number, Number, Number, Number]] Any8Vec4 = Union[glm.bvec4, glm.i8vec4, glm.u8vec4] Any8VectorAny = Union[glm.bvec1, glm.bvec2, glm.bvec3, glm.bvec4, glm.i8vec1, glm.i8vec2, glm.i8vec3, glm.i8vec4, glm.u8vec1, glm.u8vec2, glm.u8vec3, glm.u8vec4, Tuple[Number], Tuple[Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number, Number]] Any8VecAny = Union[glm.bvec1, glm.bvec2, glm.bvec3, glm.bvec4, glm.i8vec1, glm.i8vec2, glm.i8vec3, glm.i8vec4, glm.u8vec1, glm.u8vec2, glm.u8vec3, glm.u8vec4] Any16Vector1 = Union[glm.i16vec1, glm.u16vec1, Tuple[Number]] Any16Vec1 = Union[glm.i16vec1, glm.u16vec1] Any16Vector2 = Union[glm.i16vec2, glm.u16vec2, Tuple[Number, Number]] Any16Vec2 = Union[glm.i16vec2, glm.u16vec2] Any16Vector3 = Union[glm.i16vec3, glm.u16vec3, Tuple[Number, Number, Number]] Any16Vec3 = Union[glm.i16vec3, glm.u16vec3] Any16Vector4 = Union[glm.i16vec4, glm.u16vec4, Tuple[Number, Number, Number, Number]] Any16Vec4 = Union[glm.i16vec4, glm.u16vec4] Any16VectorAny = Union[glm.i16vec1, glm.i16vec2, glm.i16vec3, glm.i16vec4, glm.u16vec1, glm.u16vec2, glm.u16vec3, glm.u16vec4, Tuple[Number], Tuple[Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number, Number]] Any16VecAny = Union[glm.i16vec1, glm.i16vec2, glm.i16vec3, glm.i16vec4, glm.u16vec1, glm.u16vec2, glm.u16vec3, glm.u16vec4] Any32Vector1 = Union[glm.ivec1, glm.uvec1, glm.vec1, Tuple[Number]] Any32Vec1 = Union[glm.ivec1, glm.uvec1, glm.vec1] Any32Vector2 = Union[glm.imvec2, glm.ivec2, glm.mvec2, glm.umvec2, glm.uvec2, glm.vec2, Tuple[Number, Number]] Any32Vec2 = Union[glm.imvec2, glm.ivec2, glm.mvec2, glm.umvec2, glm.uvec2, glm.vec2] Any32Vector3 = Union[glm.imvec3, glm.ivec3, glm.mvec3, glm.umvec3, glm.uvec3, glm.vec3, Tuple[Number, Number, Number]] Any32Vec3 = Union[glm.imvec3, glm.ivec3, glm.mvec3, glm.umvec3, glm.uvec3, glm.vec3] Any32Vector4 = Union[glm.imvec4, glm.ivec4, glm.mvec4, glm.umvec4, glm.uvec4, glm.vec4, Tuple[Number, Number, Number, Number]] Any32Vec4 = Union[glm.imvec4, glm.ivec4, glm.mvec4, glm.umvec4, glm.uvec4, glm.vec4] Any32VectorAny = Union[glm.imvec2, glm.imvec3, glm.imvec4, glm.ivec1, glm.ivec2, glm.ivec3, glm.ivec4, glm.mvec2, glm.mvec3, glm.mvec4, glm.umvec2, glm.umvec3, glm.umvec4, glm.uvec1, glm.uvec2, glm.uvec3, glm.uvec4, glm.vec1, glm.vec2, glm.vec3, glm.vec4, Tuple[Number], Tuple[Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number, Number]] Any32VecAny = Union[glm.imvec2, glm.imvec3, glm.imvec4, glm.ivec1, glm.ivec2, glm.ivec3, glm.ivec4, glm.mvec2, glm.mvec3, glm.mvec4, glm.umvec2, glm.umvec3, glm.umvec4, glm.uvec1, glm.uvec2, glm.uvec3, glm.uvec4, glm.vec1, glm.vec2, glm.vec3, glm.vec4] Any64Vector1 = Union[glm.dvec1, glm.i64vec1, glm.u64vec1, Tuple[Number]] Any64Vec1 = Union[glm.dvec1, glm.i64vec1, glm.u64vec1] Any64Vector2 = Union[glm.dmvec2, glm.dvec2, glm.i64vec2, glm.u64vec2, Tuple[Number, Number]] Any64Vec2 = Union[glm.dmvec2, glm.dvec2, glm.i64vec2, glm.u64vec2] Any64Vector3 = Union[glm.dmvec3, glm.dvec3, glm.i64vec3, glm.u64vec3, Tuple[Number, Number, Number]] Any64Vec3 = Union[glm.dmvec3, glm.dvec3, glm.i64vec3, glm.u64vec3] Any64Vector4 = Union[glm.dmvec4, glm.dvec4, glm.i64vec4, glm.u64vec4, Tuple[Number, Number, Number, Number]] Any64Vec4 = Union[glm.dmvec4, glm.dvec4, glm.i64vec4, glm.u64vec4] Any64VectorAny = Union[glm.dmvec2, glm.dmvec3, glm.dmvec4, glm.dvec1, glm.dvec2, glm.dvec3, glm.dvec4, glm.i64vec1, glm.i64vec2, glm.i64vec3, glm.i64vec4, glm.u64vec1, glm.u64vec2, glm.u64vec3, glm.u64vec4, Tuple[Number], Tuple[Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number, Number]] Any64VecAny = Union[glm.dmvec2, glm.dmvec3, glm.dmvec4, glm.dvec1, glm.dvec2, glm.dvec3, glm.dvec4, glm.i64vec1, glm.i64vec2, glm.i64vec3, glm.i64vec4, glm.u64vec1, glm.u64vec2, glm.u64vec3, glm.u64vec4] AnyAnyVector1 = Union[glm.bvec1, glm.dvec1, glm.i16vec1, glm.i64vec1, glm.i8vec1, glm.ivec1, glm.u16vec1, glm.u64vec1, glm.u8vec1, glm.uvec1, glm.vec1, Tuple[Number]] AnyAnyVec1 = Union[glm.bvec1, glm.dvec1, glm.i16vec1, glm.i64vec1, glm.i8vec1, glm.ivec1, glm.u16vec1, glm.u64vec1, glm.u8vec1, glm.uvec1, glm.vec1] AnyAnyVector2 = Union[glm.bvec2, glm.dmvec2, glm.dvec2, glm.i16vec2, glm.i64vec2, glm.i8vec2, glm.imvec2, glm.ivec2, glm.mvec2, glm.u16vec2, glm.u64vec2, glm.u8vec2, glm.umvec2, glm.uvec2, glm.vec2, Tuple[Number, Number]] AnyAnyVec2 = Union[glm.bvec2, glm.dmvec2, glm.dvec2, glm.i16vec2, glm.i64vec2, glm.i8vec2, glm.imvec2, glm.ivec2, glm.mvec2, glm.u16vec2, glm.u64vec2, glm.u8vec2, glm.umvec2, glm.uvec2, glm.vec2] AnyAnyVector3 = Union[glm.bvec3, glm.dmvec3, glm.dvec3, glm.i16vec3, glm.i64vec3, glm.i8vec3, glm.imvec3, glm.ivec3, glm.mvec3, glm.u16vec3, glm.u64vec3, glm.u8vec3, glm.umvec3, glm.uvec3, glm.vec3, Tuple[Number, Number, Number]] AnyAnyVec3 = Union[glm.bvec3, glm.dmvec3, glm.dvec3, glm.i16vec3, glm.i64vec3, glm.i8vec3, glm.imvec3, glm.ivec3, glm.mvec3, glm.u16vec3, glm.u64vec3, glm.u8vec3, glm.umvec3, glm.uvec3, glm.vec3] AnyAnyVector4 = Union[glm.bvec4, glm.dmvec4, glm.dvec4, glm.i16vec4, glm.i64vec4, glm.i8vec4, glm.imvec4, glm.ivec4, glm.mvec4, glm.u16vec4, glm.u64vec4, glm.u8vec4, glm.umvec4, glm.uvec4, glm.vec4, Tuple[Number, Number, Number, Number]] AnyAnyVec4 = Union[glm.bvec4, glm.dmvec4, glm.dvec4, glm.i16vec4, glm.i64vec4, glm.i8vec4, glm.imvec4, glm.ivec4, glm.mvec4, glm.u16vec4, glm.u64vec4, glm.u8vec4, glm.umvec4, glm.uvec4, glm.vec4] AnyAnyVectorAny = Union[glm.bvec1, glm.bvec2, glm.bvec3, glm.bvec4, glm.dmvec2, glm.dmvec3, glm.dmvec4, glm.dvec1, glm.dvec2, glm.dvec3, glm.dvec4, glm.i16vec1, glm.i16vec2, glm.i16vec3, glm.i16vec4, glm.i64vec1, glm.i64vec2, glm.i64vec3, glm.i64vec4, glm.i8vec1, glm.i8vec2, glm.i8vec3, glm.i8vec4, glm.imvec2, glm.imvec3, glm.imvec4, glm.ivec1, glm.ivec2, glm.ivec3, glm.ivec4, glm.mvec2, glm.mvec3, glm.mvec4, glm.u16vec1, glm.u16vec2, glm.u16vec3, glm.u16vec4, glm.u64vec1, glm.u64vec2, glm.u64vec3, glm.u64vec4, glm.u8vec1, glm.u8vec2, glm.u8vec3, glm.u8vec4, glm.umvec2, glm.umvec3, glm.umvec4, glm.uvec1, glm.uvec2, glm.uvec3, glm.uvec4, glm.vec1, glm.vec2, glm.vec3, glm.vec4, Tuple[Number], Tuple[Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number, Number]] AnyAnyVecAny = Union[glm.bvec1, glm.bvec2, glm.bvec3, glm.bvec4, glm.dmvec2, glm.dmvec3, glm.dmvec4, glm.dvec1, glm.dvec2, glm.dvec3, glm.dvec4, glm.i16vec1, glm.i16vec2, glm.i16vec3, glm.i16vec4, glm.i64vec1, glm.i64vec2, glm.i64vec3, glm.i64vec4, glm.i8vec1, glm.i8vec2, glm.i8vec3, glm.i8vec4, glm.imvec2, glm.imvec3, glm.imvec4, glm.ivec1, glm.ivec2, glm.ivec3, glm.ivec4, glm.mvec2, glm.mvec3, glm.mvec4, glm.u16vec1, glm.u16vec2, glm.u16vec3, glm.u16vec4, glm.u64vec1, glm.u64vec2, glm.u64vec3, glm.u64vec4, glm.u8vec1, glm.u8vec2, glm.u8vec3, glm.u8vec4, glm.umvec2, glm.umvec3, glm.umvec4, glm.uvec1, glm.uvec2, glm.uvec3, glm.uvec4, glm.vec1, glm.vec2, glm.vec3, glm.vec4] FDAnyVectorAny = Union[FAnyVectorAny, DAnyVectorAny] FDAnyVector1 = Union[FAnyVector1, DAnyVector1] FDAnyVector2 = Union[FAnyVector2, DAnyVector2] FDAnyVector3 = Union[FAnyVector3, DAnyVector3] FDAnyVector4 = Union[FAnyVector4, DAnyVector4] IUAnyVector1 = Union[IAnyVector1, UAnyVector1] IUAnyVector2 = Union[IAnyVector2, UAnyVector2] IUAnyVector3 = Union[IAnyVector3, UAnyVector3] IUAnyVector4 = Union[IAnyVector4, UAnyVector4] D64Matrix2x2 = Union[glm.dmat2x2, Tuple[Tuple[Number, Number], Tuple[Number, Number]]] D64Mat2x2 = glm.dmat2x2 D64Matrix2x3 = Union[glm.dmat2x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] D64Mat2x3 = glm.dmat2x3 D64Matrix2x4 = Union[glm.dmat2x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] D64Mat2x4 = glm.dmat2x4 D64Matrix2xAny = Union[glm.dmat2x2, glm.dmat2x3, glm.dmat2x4, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] D64Mat2xAny = Union[glm.dmat2x2, glm.dmat2x3, glm.dmat2x4] D64Matrix3x2 = Union[glm.dmat3x2, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] D64Mat3x2 = glm.dmat3x2 D64Matrix3x3 = Union[glm.dmat3x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] D64Mat3x3 = glm.dmat3x3 D64Matrix3x4 = Union[glm.dmat3x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] D64Mat3x4 = glm.dmat3x4 D64Matrix3xAny = Union[glm.dmat3x2, glm.dmat3x3, glm.dmat3x4, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] D64Mat3xAny = Union[glm.dmat3x2, glm.dmat3x3, glm.dmat3x4] D64Matrix4x2 = Union[glm.dmat4x2, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] D64Mat4x2 = glm.dmat4x2 D64Matrix4x3 = Union[glm.dmat4x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] D64Mat4x3 = glm.dmat4x3 D64Matrix4x4 = Union[glm.dmat4x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] D64Mat4x4 = glm.dmat4x4 D64Matrix4xAny = Union[glm.dmat4x2, glm.dmat4x3, glm.dmat4x4, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] D64Mat4xAny = Union[glm.dmat4x2, glm.dmat4x3, glm.dmat4x4] D64MatrixAnyx2 = Union[glm.dmat2x2, glm.dmat3x2, glm.dmat4x2, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] D64MatAnyx2 = Union[glm.dmat2x2, glm.dmat3x2, glm.dmat4x2] D64MatrixAnyx3 = Union[glm.dmat2x3, glm.dmat3x3, glm.dmat4x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] D64MatAnyx3 = Union[glm.dmat2x3, glm.dmat3x3, glm.dmat4x3] D64MatrixAnyx4 = Union[glm.dmat2x4, glm.dmat3x4, glm.dmat4x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] D64MatAnyx4 = Union[glm.dmat2x4, glm.dmat3x4, glm.dmat4x4] D64MatrixAnyxAny = Union[glm.dmat2x2, glm.dmat2x3, glm.dmat2x4, glm.dmat3x2, glm.dmat3x3, glm.dmat3x4, glm.dmat4x2, glm.dmat4x3, glm.dmat4x4, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] D64MatAnyxAny = Union[glm.dmat2x2, glm.dmat2x3, glm.dmat2x4, glm.dmat3x2, glm.dmat3x3, glm.dmat3x4, glm.dmat4x2, glm.dmat4x3, glm.dmat4x4] DAnyMatrix2x2 = Union[glm.dmat2x2, Tuple[Tuple[Number, Number], Tuple[Number, Number]]] DAnyMat2x2 = glm.dmat2x2 DAnyMatrix2x3 = Union[glm.dmat2x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] DAnyMat2x3 = glm.dmat2x3 DAnyMatrix2x4 = Union[glm.dmat2x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] DAnyMat2x4 = glm.dmat2x4 DAnyMatrix2xAny = Union[glm.dmat2x2, glm.dmat2x3, glm.dmat2x4, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] DAnyMat2xAny = Union[glm.dmat2x2, glm.dmat2x3, glm.dmat2x4] DAnyMatrix3x2 = Union[glm.dmat3x2, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] DAnyMat3x2 = glm.dmat3x2 DAnyMatrix3x3 = Union[glm.dmat3x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] DAnyMat3x3 = glm.dmat3x3 DAnyMatrix3x4 = Union[glm.dmat3x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] DAnyMat3x4 = glm.dmat3x4 DAnyMatrix3xAny = Union[glm.dmat3x2, glm.dmat3x3, glm.dmat3x4, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] DAnyMat3xAny = Union[glm.dmat3x2, glm.dmat3x3, glm.dmat3x4] DAnyMatrix4x2 = Union[glm.dmat4x2, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] DAnyMat4x2 = glm.dmat4x2 DAnyMatrix4x3 = Union[glm.dmat4x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] DAnyMat4x3 = glm.dmat4x3 DAnyMatrix4x4 = Union[glm.dmat4x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] DAnyMat4x4 = glm.dmat4x4 DAnyMatrix4xAny = Union[glm.dmat4x2, glm.dmat4x3, glm.dmat4x4, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] DAnyMat4xAny = Union[glm.dmat4x2, glm.dmat4x3, glm.dmat4x4] DAnyMatrixAnyx2 = Union[glm.dmat2x2, glm.dmat3x2, glm.dmat4x2, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] DAnyMatAnyx2 = Union[glm.dmat2x2, glm.dmat3x2, glm.dmat4x2] DAnyMatrixAnyx3 = Union[glm.dmat2x3, glm.dmat3x3, glm.dmat4x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] DAnyMatAnyx3 = Union[glm.dmat2x3, glm.dmat3x3, glm.dmat4x3] DAnyMatrixAnyx4 = Union[glm.dmat2x4, glm.dmat3x4, glm.dmat4x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] DAnyMatAnyx4 = Union[glm.dmat2x4, glm.dmat3x4, glm.dmat4x4] DAnyMatrixAnyxAny = Union[glm.dmat2x2, glm.dmat2x3, glm.dmat2x4, glm.dmat3x2, glm.dmat3x3, glm.dmat3x4, glm.dmat4x2, glm.dmat4x3, glm.dmat4x4, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] DAnyMatAnyxAny = Union[glm.dmat2x2, glm.dmat2x3, glm.dmat2x4, glm.dmat3x2, glm.dmat3x3, glm.dmat3x4, glm.dmat4x2, glm.dmat4x3, glm.dmat4x4] F32Matrix2x2 = Union[glm.mat2x2, Tuple[Tuple[Number, Number], Tuple[Number, Number]]] F32Mat2x2 = glm.mat2x2 F32Matrix2x3 = Union[glm.mat2x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] F32Mat2x3 = glm.mat2x3 F32Matrix2x4 = Union[glm.mat2x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] F32Mat2x4 = glm.mat2x4 F32Matrix2xAny = Union[glm.mat2x2, glm.mat2x3, glm.mat2x4, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] F32Mat2xAny = Union[glm.mat2x2, glm.mat2x3, glm.mat2x4] F32Matrix3x2 = Union[glm.mat3x2, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] F32Mat3x2 = glm.mat3x2 F32Matrix3x3 = Union[glm.mat3x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] F32Mat3x3 = glm.mat3x3 F32Matrix3x4 = Union[glm.mat3x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] F32Mat3x4 = glm.mat3x4 F32Matrix3xAny = Union[glm.mat3x2, glm.mat3x3, glm.mat3x4, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] F32Mat3xAny = Union[glm.mat3x2, glm.mat3x3, glm.mat3x4] F32Matrix4x2 = Union[glm.mat4x2, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] F32Mat4x2 = glm.mat4x2 F32Matrix4x3 = Union[glm.mat4x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] F32Mat4x3 = glm.mat4x3 F32Matrix4x4 = Union[glm.mat4x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] F32Mat4x4 = glm.mat4x4 F32Matrix4xAny = Union[glm.mat4x2, glm.mat4x3, glm.mat4x4, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] F32Mat4xAny = Union[glm.mat4x2, glm.mat4x3, glm.mat4x4] F32MatrixAnyx2 = Union[glm.mat2x2, glm.mat3x2, glm.mat4x2, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] F32MatAnyx2 = Union[glm.mat2x2, glm.mat3x2, glm.mat4x2] F32MatrixAnyx3 = Union[glm.mat2x3, glm.mat3x3, glm.mat4x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] F32MatAnyx3 = Union[glm.mat2x3, glm.mat3x3, glm.mat4x3] F32MatrixAnyx4 = Union[glm.mat2x4, glm.mat3x4, glm.mat4x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] F32MatAnyx4 = Union[glm.mat2x4, glm.mat3x4, glm.mat4x4] F32MatrixAnyxAny = Union[glm.mat2x2, glm.mat2x3, glm.mat2x4, glm.mat3x2, glm.mat3x3, glm.mat3x4, glm.mat4x2, glm.mat4x3, glm.mat4x4, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] F32MatAnyxAny = Union[glm.mat2x2, glm.mat2x3, glm.mat2x4, glm.mat3x2, glm.mat3x3, glm.mat3x4, glm.mat4x2, glm.mat4x3, glm.mat4x4] FAnyMatrix2x2 = Union[glm.mat2x2, Tuple[Tuple[Number, Number], Tuple[Number, Number]]] FAnyMat2x2 = glm.mat2x2 FAnyMatrix2x3 = Union[glm.mat2x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] FAnyMat2x3 = glm.mat2x3 FAnyMatrix2x4 = Union[glm.mat2x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] FAnyMat2x4 = glm.mat2x4 FAnyMatrix2xAny = Union[glm.mat2x2, glm.mat2x3, glm.mat2x4, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] FAnyMat2xAny = Union[glm.mat2x2, glm.mat2x3, glm.mat2x4] FAnyMatrix3x2 = Union[glm.mat3x2, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] FAnyMat3x2 = glm.mat3x2 FAnyMatrix3x3 = Union[glm.mat3x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] FAnyMat3x3 = glm.mat3x3 FAnyMatrix3x4 = Union[glm.mat3x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] FAnyMat3x4 = glm.mat3x4 FAnyMatrix3xAny = Union[glm.mat3x2, glm.mat3x3, glm.mat3x4, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] FAnyMat3xAny = Union[glm.mat3x2, glm.mat3x3, glm.mat3x4] FAnyMatrix4x2 = Union[glm.mat4x2, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] FAnyMat4x2 = glm.mat4x2 FAnyMatrix4x3 = Union[glm.mat4x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] FAnyMat4x3 = glm.mat4x3 FAnyMatrix4x4 = Union[glm.mat4x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] FAnyMat4x4 = glm.mat4x4 FAnyMatrix4xAny = Union[glm.mat4x2, glm.mat4x3, glm.mat4x4, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] FAnyMat4xAny = Union[glm.mat4x2, glm.mat4x3, glm.mat4x4] FAnyMatrixAnyx2 = Union[glm.mat2x2, glm.mat3x2, glm.mat4x2, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] FAnyMatAnyx2 = Union[glm.mat2x2, glm.mat3x2, glm.mat4x2] FAnyMatrixAnyx3 = Union[glm.mat2x3, glm.mat3x3, glm.mat4x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] FAnyMatAnyx3 = Union[glm.mat2x3, glm.mat3x3, glm.mat4x3] FAnyMatrixAnyx4 = Union[glm.mat2x4, glm.mat3x4, glm.mat4x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] FAnyMatAnyx4 = Union[glm.mat2x4, glm.mat3x4, glm.mat4x4] FAnyMatrixAnyxAny = Union[glm.mat2x2, glm.mat2x3, glm.mat2x4, glm.mat3x2, glm.mat3x3, glm.mat3x4, glm.mat4x2, glm.mat4x3, glm.mat4x4, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] FAnyMatAnyxAny = Union[glm.mat2x2, glm.mat2x3, glm.mat2x4, glm.mat3x2, glm.mat3x3, glm.mat3x4, glm.mat4x2, glm.mat4x3, glm.mat4x4] I32Matrix2x2 = Union[glm.imat2x2, Tuple[Tuple[Number, Number], Tuple[Number, Number]]] I32Mat2x2 = glm.imat2x2 I32Matrix2x3 = Union[glm.imat2x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] I32Mat2x3 = glm.imat2x3 I32Matrix2x4 = Union[glm.imat2x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] I32Mat2x4 = glm.imat2x4 I32Matrix2xAny = Union[glm.imat2x2, glm.imat2x3, glm.imat2x4, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] I32Mat2xAny = Union[glm.imat2x2, glm.imat2x3, glm.imat2x4] I32Matrix3x2 = Union[glm.imat3x2, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] I32Mat3x2 = glm.imat3x2 I32Matrix3x3 = Union[glm.imat3x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] I32Mat3x3 = glm.imat3x3 I32Matrix3x4 = Union[glm.imat3x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] I32Mat3x4 = glm.imat3x4 I32Matrix3xAny = Union[glm.imat3x2, glm.imat3x3, glm.imat3x4, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] I32Mat3xAny = Union[glm.imat3x2, glm.imat3x3, glm.imat3x4] I32Matrix4x2 = Union[glm.imat4x2, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] I32Mat4x2 = glm.imat4x2 I32Matrix4x3 = Union[glm.imat4x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] I32Mat4x3 = glm.imat4x3 I32Matrix4x4 = Union[glm.imat4x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] I32Mat4x4 = glm.imat4x4 I32Matrix4xAny = Union[glm.imat4x2, glm.imat4x3, glm.imat4x4, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] I32Mat4xAny = Union[glm.imat4x2, glm.imat4x3, glm.imat4x4] I32MatrixAnyx2 = Union[glm.imat2x2, glm.imat3x2, glm.imat4x2, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] I32MatAnyx2 = Union[glm.imat2x2, glm.imat3x2, glm.imat4x2] I32MatrixAnyx3 = Union[glm.imat2x3, glm.imat3x3, glm.imat4x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] I32MatAnyx3 = Union[glm.imat2x3, glm.imat3x3, glm.imat4x3] I32MatrixAnyx4 = Union[glm.imat2x4, glm.imat3x4, glm.imat4x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] I32MatAnyx4 = Union[glm.imat2x4, glm.imat3x4, glm.imat4x4] I32MatrixAnyxAny = Union[glm.imat2x2, glm.imat2x3, glm.imat2x4, glm.imat3x2, glm.imat3x3, glm.imat3x4, glm.imat4x2, glm.imat4x3, glm.imat4x4, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] I32MatAnyxAny = Union[glm.imat2x2, glm.imat2x3, glm.imat2x4, glm.imat3x2, glm.imat3x3, glm.imat3x4, glm.imat4x2, glm.imat4x3, glm.imat4x4] IAnyMatrix2x2 = Union[glm.imat2x2, Tuple[Tuple[Number, Number], Tuple[Number, Number]]] IAnyMat2x2 = glm.imat2x2 IAnyMatrix2x3 = Union[glm.imat2x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] IAnyMat2x3 = glm.imat2x3 IAnyMatrix2x4 = Union[glm.imat2x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] IAnyMat2x4 = glm.imat2x4 IAnyMatrix2xAny = Union[glm.imat2x2, glm.imat2x3, glm.imat2x4, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] IAnyMat2xAny = Union[glm.imat2x2, glm.imat2x3, glm.imat2x4] IAnyMatrix3x2 = Union[glm.imat3x2, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] IAnyMat3x2 = glm.imat3x2 IAnyMatrix3x3 = Union[glm.imat3x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] IAnyMat3x3 = glm.imat3x3 IAnyMatrix3x4 = Union[glm.imat3x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] IAnyMat3x4 = glm.imat3x4 IAnyMatrix3xAny = Union[glm.imat3x2, glm.imat3x3, glm.imat3x4, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] IAnyMat3xAny = Union[glm.imat3x2, glm.imat3x3, glm.imat3x4] IAnyMatrix4x2 = Union[glm.imat4x2, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] IAnyMat4x2 = glm.imat4x2 IAnyMatrix4x3 = Union[glm.imat4x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] IAnyMat4x3 = glm.imat4x3 IAnyMatrix4x4 = Union[glm.imat4x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] IAnyMat4x4 = glm.imat4x4 IAnyMatrix4xAny = Union[glm.imat4x2, glm.imat4x3, glm.imat4x4, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] IAnyMat4xAny = Union[glm.imat4x2, glm.imat4x3, glm.imat4x4] IAnyMatrixAnyx2 = Union[glm.imat2x2, glm.imat3x2, glm.imat4x2, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] IAnyMatAnyx2 = Union[glm.imat2x2, glm.imat3x2, glm.imat4x2] IAnyMatrixAnyx3 = Union[glm.imat2x3, glm.imat3x3, glm.imat4x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] IAnyMatAnyx3 = Union[glm.imat2x3, glm.imat3x3, glm.imat4x3] IAnyMatrixAnyx4 = Union[glm.imat2x4, glm.imat3x4, glm.imat4x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] IAnyMatAnyx4 = Union[glm.imat2x4, glm.imat3x4, glm.imat4x4] IAnyMatrixAnyxAny = Union[glm.imat2x2, glm.imat2x3, glm.imat2x4, glm.imat3x2, glm.imat3x3, glm.imat3x4, glm.imat4x2, glm.imat4x3, glm.imat4x4, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] IAnyMatAnyxAny = Union[glm.imat2x2, glm.imat2x3, glm.imat2x4, glm.imat3x2, glm.imat3x3, glm.imat3x4, glm.imat4x2, glm.imat4x3, glm.imat4x4] U32Matrix2x2 = Union[glm.umat2x2, Tuple[Tuple[Number, Number], Tuple[Number, Number]]] U32Mat2x2 = glm.umat2x2 U32Matrix2x3 = Union[glm.umat2x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] U32Mat2x3 = glm.umat2x3 U32Matrix2x4 = Union[glm.umat2x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] U32Mat2x4 = glm.umat2x4 U32Matrix2xAny = Union[glm.umat2x2, glm.umat2x3, glm.umat2x4, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] U32Mat2xAny = Union[glm.umat2x2, glm.umat2x3, glm.umat2x4] U32Matrix3x2 = Union[glm.umat3x2, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] U32Mat3x2 = glm.umat3x2 U32Matrix3x3 = Union[glm.umat3x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] U32Mat3x3 = glm.umat3x3 U32Matrix3x4 = Union[glm.umat3x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] U32Mat3x4 = glm.umat3x4 U32Matrix3xAny = Union[glm.umat3x2, glm.umat3x3, glm.umat3x4, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] U32Mat3xAny = Union[glm.umat3x2, glm.umat3x3, glm.umat3x4] U32Matrix4x2 = Union[glm.umat4x2, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] U32Mat4x2 = glm.umat4x2 U32Matrix4x3 = Union[glm.umat4x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] U32Mat4x3 = glm.umat4x3 U32Matrix4x4 = Union[glm.umat4x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] U32Mat4x4 = glm.umat4x4 U32Matrix4xAny = Union[glm.umat4x2, glm.umat4x3, glm.umat4x4, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] U32Mat4xAny = Union[glm.umat4x2, glm.umat4x3, glm.umat4x4] U32MatrixAnyx2 = Union[glm.umat2x2, glm.umat3x2, glm.umat4x2, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] U32MatAnyx2 = Union[glm.umat2x2, glm.umat3x2, glm.umat4x2] U32MatrixAnyx3 = Union[glm.umat2x3, glm.umat3x3, glm.umat4x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] U32MatAnyx3 = Union[glm.umat2x3, glm.umat3x3, glm.umat4x3] U32MatrixAnyx4 = Union[glm.umat2x4, glm.umat3x4, glm.umat4x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] U32MatAnyx4 = Union[glm.umat2x4, glm.umat3x4, glm.umat4x4] U32MatrixAnyxAny = Union[glm.umat2x2, glm.umat2x3, glm.umat2x4, glm.umat3x2, glm.umat3x3, glm.umat3x4, glm.umat4x2, glm.umat4x3, glm.umat4x4, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] U32MatAnyxAny = Union[glm.umat2x2, glm.umat2x3, glm.umat2x4, glm.umat3x2, glm.umat3x3, glm.umat3x4, glm.umat4x2, glm.umat4x3, glm.umat4x4] UAnyMatrix2x2 = Union[glm.umat2x2, Tuple[Tuple[Number, Number], Tuple[Number, Number]]] UAnyMat2x2 = glm.umat2x2 UAnyMatrix2x3 = Union[glm.umat2x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] UAnyMat2x3 = glm.umat2x3 UAnyMatrix2x4 = Union[glm.umat2x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] UAnyMat2x4 = glm.umat2x4 UAnyMatrix2xAny = Union[glm.umat2x2, glm.umat2x3, glm.umat2x4, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] UAnyMat2xAny = Union[glm.umat2x2, glm.umat2x3, glm.umat2x4] UAnyMatrix3x2 = Union[glm.umat3x2, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] UAnyMat3x2 = glm.umat3x2 UAnyMatrix3x3 = Union[glm.umat3x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] UAnyMat3x3 = glm.umat3x3 UAnyMatrix3x4 = Union[glm.umat3x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] UAnyMat3x4 = glm.umat3x4 UAnyMatrix3xAny = Union[glm.umat3x2, glm.umat3x3, glm.umat3x4, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] UAnyMat3xAny = Union[glm.umat3x2, glm.umat3x3, glm.umat3x4] UAnyMatrix4x2 = Union[glm.umat4x2, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] UAnyMat4x2 = glm.umat4x2 UAnyMatrix4x3 = Union[glm.umat4x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] UAnyMat4x3 = glm.umat4x3 UAnyMatrix4x4 = Union[glm.umat4x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] UAnyMat4x4 = glm.umat4x4 UAnyMatrix4xAny = Union[glm.umat4x2, glm.umat4x3, glm.umat4x4, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] UAnyMat4xAny = Union[glm.umat4x2, glm.umat4x3, glm.umat4x4] UAnyMatrixAnyx2 = Union[glm.umat2x2, glm.umat3x2, glm.umat4x2, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] UAnyMatAnyx2 = Union[glm.umat2x2, glm.umat3x2, glm.umat4x2] UAnyMatrixAnyx3 = Union[glm.umat2x3, glm.umat3x3, glm.umat4x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] UAnyMatAnyx3 = Union[glm.umat2x3, glm.umat3x3, glm.umat4x3] UAnyMatrixAnyx4 = Union[glm.umat2x4, glm.umat3x4, glm.umat4x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] UAnyMatAnyx4 = Union[glm.umat2x4, glm.umat3x4, glm.umat4x4] UAnyMatrixAnyxAny = Union[glm.umat2x2, glm.umat2x3, glm.umat2x4, glm.umat3x2, glm.umat3x3, glm.umat3x4, glm.umat4x2, glm.umat4x3, glm.umat4x4, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] UAnyMatAnyxAny = Union[glm.umat2x2, glm.umat2x3, glm.umat2x4, glm.umat3x2, glm.umat3x3, glm.umat3x4, glm.umat4x2, glm.umat4x3, glm.umat4x4] AnyAnyMatrix2x2 = Union[glm.dmat2x2, glm.imat2x2, glm.mat2x2, glm.umat2x2, Tuple[Tuple[Number, Number], Tuple[Number, Number]]] AnyAnyMat2x2 = Union[glm.dmat2x2, glm.imat2x2, glm.mat2x2, glm.umat2x2] AnyAnyMatrix2x3 = Union[glm.dmat2x3, glm.imat2x3, glm.mat2x3, glm.umat2x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] AnyAnyMat2x3 = Union[glm.dmat2x3, glm.imat2x3, glm.mat2x3, glm.umat2x3] AnyAnyMatrix2x4 = Union[glm.dmat2x4, glm.imat2x4, glm.mat2x4, glm.umat2x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] AnyAnyMat2x4 = Union[glm.dmat2x4, glm.imat2x4, glm.mat2x4, glm.umat2x4] AnyAnyMatrix2xAny = Union[glm.dmat2x2, glm.dmat2x3, glm.dmat2x4, glm.imat2x2, glm.imat2x3, glm.imat2x4, glm.mat2x2, glm.mat2x3, glm.mat2x4, glm.umat2x2, glm.umat2x3, glm.umat2x4, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] AnyAnyMat2xAny = Union[glm.dmat2x2, glm.dmat2x3, glm.dmat2x4, glm.imat2x2, glm.imat2x3, glm.imat2x4, glm.mat2x2, glm.mat2x3, glm.mat2x4, glm.umat2x2, glm.umat2x3, glm.umat2x4] AnyAnyMatrix3x2 = Union[glm.dmat3x2, glm.imat3x2, glm.mat3x2, glm.umat3x2, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] AnyAnyMat3x2 = Union[glm.dmat3x2, glm.imat3x2, glm.mat3x2, glm.umat3x2] AnyAnyMatrix3x3 = Union[glm.dmat3x3, glm.imat3x3, glm.mat3x3, glm.umat3x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] AnyAnyMat3x3 = Union[glm.dmat3x3, glm.imat3x3, glm.mat3x3, glm.umat3x3] AnyAnyMatrix3x4 = Union[glm.dmat3x4, glm.imat3x4, glm.mat3x4, glm.umat3x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] AnyAnyMat3x4 = Union[glm.dmat3x4, glm.imat3x4, glm.mat3x4, glm.umat3x4] AnyAnyMatrix3xAny = Union[glm.dmat3x2, glm.dmat3x3, glm.dmat3x4, glm.imat3x2, glm.imat3x3, glm.imat3x4, glm.mat3x2, glm.mat3x3, glm.mat3x4, glm.umat3x2, glm.umat3x3, glm.umat3x4, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] AnyAnyMat3xAny = Union[glm.dmat3x2, glm.dmat3x3, glm.dmat3x4, glm.imat3x2, glm.imat3x3, glm.imat3x4, glm.mat3x2, glm.mat3x3, glm.mat3x4, glm.umat3x2, glm.umat3x3, glm.umat3x4] AnyAnyMatrix4x2 = Union[glm.dmat4x2, glm.imat4x2, glm.mat4x2, glm.umat4x2, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] AnyAnyMat4x2 = Union[glm.dmat4x2, glm.imat4x2, glm.mat4x2, glm.umat4x2] AnyAnyMatrix4x3 = Union[glm.dmat4x3, glm.imat4x3, glm.mat4x3, glm.umat4x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] AnyAnyMat4x3 = Union[glm.dmat4x3, glm.imat4x3, glm.mat4x3, glm.umat4x3] AnyAnyMatrix4x4 = Union[glm.dmat4x4, glm.imat4x4, glm.mat4x4, glm.umat4x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] AnyAnyMat4x4 = Union[glm.dmat4x4, glm.imat4x4, glm.mat4x4, glm.umat4x4] AnyAnyMatrix4xAny = Union[glm.dmat4x2, glm.dmat4x3, glm.dmat4x4, glm.imat4x2, glm.imat4x3, glm.imat4x4, glm.mat4x2, glm.mat4x3, glm.mat4x4, glm.umat4x2, glm.umat4x3, glm.umat4x4, Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] AnyAnyMat4xAny = Union[glm.dmat4x2, glm.dmat4x3, glm.dmat4x4, glm.imat4x2, glm.imat4x3, glm.imat4x4, glm.mat4x2, glm.mat4x3, glm.mat4x4, glm.umat4x2, glm.umat4x3, glm.umat4x4] AnyAnyMatrixAnyx2 = Union[glm.dmat2x2, glm.dmat3x2, glm.dmat4x2, glm.imat2x2, glm.imat3x2, glm.imat4x2, glm.mat2x2, glm.mat3x2, glm.mat4x2, glm.umat2x2, glm.umat3x2, glm.umat4x2, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]]] AnyAnyMatAnyx2 = Union[glm.dmat2x2, glm.dmat3x2, glm.dmat4x2, glm.imat2x2, glm.imat3x2, glm.imat4x2, glm.mat2x2, glm.mat3x2, glm.mat4x2, glm.umat2x2, glm.umat3x2, glm.umat4x2] AnyAnyMatrixAnyx3 = Union[glm.dmat2x3, glm.dmat3x3, glm.dmat4x3, glm.imat2x3, glm.imat3x3, glm.imat4x3, glm.mat2x3, glm.mat3x3, glm.mat4x3, glm.umat2x3, glm.umat3x3, glm.umat4x3, Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]]] AnyAnyMatAnyx3 = Union[glm.dmat2x3, glm.dmat3x3, glm.dmat4x3, glm.imat2x3, glm.imat3x3, glm.imat4x3, glm.mat2x3, glm.mat3x3, glm.mat4x3, glm.umat2x3, glm.umat3x3, glm.umat4x3] AnyAnyMatrixAnyx4 = Union[glm.dmat2x4, glm.dmat3x4, glm.dmat4x4, glm.imat2x4, glm.imat3x4, glm.imat4x4, glm.mat2x4, glm.mat3x4, glm.mat4x4, glm.umat2x4, glm.umat3x4, glm.umat4x4, Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] AnyAnyMatAnyx4 = Union[glm.dmat2x4, glm.dmat3x4, glm.dmat4x4, glm.imat2x4, glm.imat3x4, glm.imat4x4, glm.mat2x4, glm.mat3x4, glm.mat4x4, glm.umat2x4, glm.umat3x4, glm.umat4x4] AnyAnyMatrixAnyxAny = Union[glm.dmat2x2, glm.dmat2x3, glm.dmat2x4, glm.dmat3x2, glm.dmat3x3, glm.dmat3x4, glm.dmat4x2, glm.dmat4x3, glm.dmat4x4, glm.imat2x2, glm.imat2x3, glm.imat2x4, glm.imat3x2, glm.imat3x3, glm.imat3x4, glm.imat4x2, glm.imat4x3, glm.imat4x4, glm.mat2x2, glm.mat2x3, glm.mat2x4, glm.mat3x2, glm.mat3x3, glm.mat3x4, glm.mat4x2, glm.mat4x3, glm.mat4x4, glm.umat2x2, glm.umat2x3, glm.umat2x4, glm.umat3x2, glm.umat3x3, glm.umat3x4, glm.umat4x2, glm.umat4x3, glm.umat4x4, Tuple[Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]], Tuple[Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number], Tuple[Number, Number]], Tuple[Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number], Tuple[Number, Number, Number]], Tuple[Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number], Tuple[Number, Number, Number, Number]]] AnyAnyMatAnyxAny = Union[glm.dmat2x2, glm.dmat2x3, glm.dmat2x4, glm.dmat3x2, glm.dmat3x3, glm.dmat3x4, glm.dmat4x2, glm.dmat4x3, glm.dmat4x4, glm.imat2x2, glm.imat2x3, glm.imat2x4, glm.imat3x2, glm.imat3x3, glm.imat3x4, glm.imat4x2, glm.imat4x3, glm.imat4x4, glm.mat2x2, glm.mat2x3, glm.mat2x4, glm.mat3x2, glm.mat3x3, glm.mat3x4, glm.mat4x2, glm.mat4x3, glm.mat4x4, glm.umat2x2, glm.umat2x3, glm.umat2x4, glm.umat3x2, glm.umat3x3, glm.umat3x4, glm.umat4x2, glm.umat4x3, glm.umat4x4] AnyAnyMatrixSquare = Union[AnyAnyMatrix2x2, AnyAnyMatrix3x3, AnyAnyMatrix4x4] D64Quaternion = Union[glm.dquat, Tuple[Number, Number, Number, Number]] D64Quat = glm.dquat DAnyQuaternion = Union[glm.dquat, Tuple[Number, Number, Number, Number]] DAnyQuat = glm.dquat F32Quaternion = Union[glm.quat, Tuple[Number, Number, Number, Number]] F32Quat = glm.quat FAnyQuaternion = Union[glm.quat, Tuple[Number, Number, Number, Number]] FAnyQuat = glm.quat AnyAnyQuaternion = Union[glm.dquat, glm.quat, Tuple[Number, Number, Number, Number]] AnyAnyQuat = Union[glm.dquat, glm.quat] FDAnyQuaternion = Union[FAnyQuaternion, DAnyQuaternion] FDAnyQuaternionVector4 = Union[FDAnyVector4, FDAnyQuaternion] __all__ = ['B8Vector1', 'B8Vec1', 'B8Vector2', 'B8Vec2', 'B8Vector3', 'B8Vec3', 'B8Vector4', 'B8Vec4', 'B8VectorAny', 'B8VecAny', 'BAnyVector1', 'BAnyVec1', 'BAnyVector2', 'BAnyVec2', 'BAnyVector3', 'BAnyVec3', 'BAnyVector4', 'BAnyVec4', 'BAnyVectorAny', 'BAnyVecAny', 'D64Vector1', 'D64Vec1', 'D64Vector2', 'D64Vec2', 'D64Vector3', 'D64Vec3', 'D64Vector4', 'D64Vec4', 'D64VectorAny', 'D64VecAny', 'DAnyVector1', 'DAnyVec1', 'DAnyVector2', 'DAnyVec2', 'DAnyVector3', 'DAnyVec3', 'DAnyVector4', 'DAnyVec4', 'DAnyVectorAny', 'DAnyVecAny', 'F32Vector1', 'F32Vec1', 'F32Vector2', 'F32Vec2', 'F32Vector3', 'F32Vec3', 'F32Vector4', 'F32Vec4', 'F32VectorAny', 'F32VecAny', 'FAnyVector1', 'FAnyVec1', 'FAnyVector2', 'FAnyVec2', 'FAnyVector3', 'FAnyVec3', 'FAnyVector4', 'FAnyVec4', 'FAnyVectorAny', 'FAnyVecAny', 'I8Vector1', 'I8Vec1', 'I8Vector2', 'I8Vec2', 'I8Vector3', 'I8Vec3', 'I8Vector4', 'I8Vec4', 'I8VectorAny', 'I8VecAny', 'I16Vector1', 'I16Vec1', 'I16Vector2', 'I16Vec2', 'I16Vector3', 'I16Vec3', 'I16Vector4', 'I16Vec4', 'I16VectorAny', 'I16VecAny', 'I32Vector1', 'I32Vec1', 'I32Vector2', 'I32Vec2', 'I32Vector3', 'I32Vec3', 'I32Vector4', 'I32Vec4', 'I32VectorAny', 'I32VecAny', 'I64Vector1', 'I64Vec1', 'I64Vector2', 'I64Vec2', 'I64Vector3', 'I64Vec3', 'I64Vector4', 'I64Vec4', 'I64VectorAny', 'I64VecAny', 'IAnyVector1', 'IAnyVec1', 'IAnyVector2', 'IAnyVec2', 'IAnyVector3', 'IAnyVec3', 'IAnyVector4', 'IAnyVec4', 'IAnyVectorAny', 'IAnyVecAny', 'U8Vector1', 'U8Vec1', 'U8Vector2', 'U8Vec2', 'U8Vector3', 'U8Vec3', 'U8Vector4', 'U8Vec4', 'U8VectorAny', 'U8VecAny', 'U16Vector1', 'U16Vec1', 'U16Vector2', 'U16Vec2', 'U16Vector3', 'U16Vec3', 'U16Vector4', 'U16Vec4', 'U16VectorAny', 'U16VecAny', 'U32Vector1', 'U32Vec1', 'U32Vector2', 'U32Vec2', 'U32Vector3', 'U32Vec3', 'U32Vector4', 'U32Vec4', 'U32VectorAny', 'U32VecAny', 'U64Vector1', 'U64Vec1', 'U64Vector2', 'U64Vec2', 'U64Vector3', 'U64Vec3', 'U64Vector4', 'U64Vec4', 'U64VectorAny', 'U64VecAny', 'UAnyVector1', 'UAnyVec1', 'UAnyVector2', 'UAnyVec2', 'UAnyVector3', 'UAnyVec3', 'UAnyVector4', 'UAnyVec4', 'UAnyVectorAny', 'UAnyVecAny', 'Any8Vector1', 'Any8Vec1', 'Any8Vector2', 'Any8Vec2', 'Any8Vector3', 'Any8Vec3', 'Any8Vector4', 'Any8Vec4', 'Any8VectorAny', 'Any8VecAny', 'Any16Vector1', 'Any16Vec1', 'Any16Vector2', 'Any16Vec2', 'Any16Vector3', 'Any16Vec3', 'Any16Vector4', 'Any16Vec4', 'Any16VectorAny', 'Any16VecAny', 'Any32Vector1', 'Any32Vec1', 'Any32Vector2', 'Any32Vec2', 'Any32Vector3', 'Any32Vec3', 'Any32Vector4', 'Any32Vec4', 'Any32VectorAny', 'Any32VecAny', 'Any64Vector1', 'Any64Vec1', 'Any64Vector2', 'Any64Vec2', 'Any64Vector3', 'Any64Vec3', 'Any64Vector4', 'Any64Vec4', 'Any64VectorAny', 'Any64VecAny', 'AnyAnyVector1', 'AnyAnyVec1', 'AnyAnyVector2', 'AnyAnyVec2', 'AnyAnyVector3', 'AnyAnyVec3', 'AnyAnyVector4', 'AnyAnyVec4', 'AnyAnyVectorAny', 'AnyAnyVecAny', 'FDAnyVectorAny', 'FDAnyVector1', 'FDAnyVector2', 'FDAnyVector3', 'FDAnyVector4', 'IUAnyVector1', 'IUAnyVector2', 'IUAnyVector3', 'IUAnyVector4', 'D64Matrix2x2', 'D64Mat2x2', 'D64Matrix2x3', 'D64Mat2x3', 'D64Matrix2x4', 'D64Mat2x4', 'D64Matrix2xAny', 'D64Mat2xAny', 'D64Matrix3x2', 'D64Mat3x2', 'D64Matrix3x3', 'D64Mat3x3', 'D64Matrix3x4', 'D64Mat3x4', 'D64Matrix3xAny', 'D64Mat3xAny', 'D64Matrix4x2', 'D64Mat4x2', 'D64Matrix4x3', 'D64Mat4x3', 'D64Matrix4x4', 'D64Mat4x4', 'D64Matrix4xAny', 'D64Mat4xAny', 'D64MatrixAnyx2', 'D64MatAnyx2', 'D64MatrixAnyx3', 'D64MatAnyx3', 'D64MatrixAnyx4', 'D64MatAnyx4', 'D64MatrixAnyxAny', 'D64MatAnyxAny', 'DAnyMatrix2x2', 'DAnyMat2x2', 'DAnyMatrix2x3', 'DAnyMat2x3', 'DAnyMatrix2x4', 'DAnyMat2x4', 'DAnyMatrix2xAny', 'DAnyMat2xAny', 'DAnyMatrix3x2', 'DAnyMat3x2', 'DAnyMatrix3x3', 'DAnyMat3x3', 'DAnyMatrix3x4', 'DAnyMat3x4', 'DAnyMatrix3xAny', 'DAnyMat3xAny', 'DAnyMatrix4x2', 'DAnyMat4x2', 'DAnyMatrix4x3', 'DAnyMat4x3', 'DAnyMatrix4x4', 'DAnyMat4x4', 'DAnyMatrix4xAny', 'DAnyMat4xAny', 'DAnyMatrixAnyx2', 'DAnyMatAnyx2', 'DAnyMatrixAnyx3', 'DAnyMatAnyx3', 'DAnyMatrixAnyx4', 'DAnyMatAnyx4', 'DAnyMatrixAnyxAny', 'DAnyMatAnyxAny', 'F32Matrix2x2', 'F32Mat2x2', 'F32Matrix2x3', 'F32Mat2x3', 'F32Matrix2x4', 'F32Mat2x4', 'F32Matrix2xAny', 'F32Mat2xAny', 'F32Matrix3x2', 'F32Mat3x2', 'F32Matrix3x3', 'F32Mat3x3', 'F32Matrix3x4', 'F32Mat3x4', 'F32Matrix3xAny', 'F32Mat3xAny', 'F32Matrix4x2', 'F32Mat4x2', 'F32Matrix4x3', 'F32Mat4x3', 'F32Matrix4x4', 'F32Mat4x4', 'F32Matrix4xAny', 'F32Mat4xAny', 'F32MatrixAnyx2', 'F32MatAnyx2', 'F32MatrixAnyx3', 'F32MatAnyx3', 'F32MatrixAnyx4', 'F32MatAnyx4', 'F32MatrixAnyxAny', 'F32MatAnyxAny', 'FAnyMatrix2x2', 'FAnyMat2x2', 'FAnyMatrix2x3', 'FAnyMat2x3', 'FAnyMatrix2x4', 'FAnyMat2x4', 'FAnyMatrix2xAny', 'FAnyMat2xAny', 'FAnyMatrix3x2', 'FAnyMat3x2', 'FAnyMatrix3x3', 'FAnyMat3x3', 'FAnyMatrix3x4', 'FAnyMat3x4', 'FAnyMatrix3xAny', 'FAnyMat3xAny', 'FAnyMatrix4x2', 'FAnyMat4x2', 'FAnyMatrix4x3', 'FAnyMat4x3', 'FAnyMatrix4x4', 'FAnyMat4x4', 'FAnyMatrix4xAny', 'FAnyMat4xAny', 'FAnyMatrixAnyx2', 'FAnyMatAnyx2', 'FAnyMatrixAnyx3', 'FAnyMatAnyx3', 'FAnyMatrixAnyx4', 'FAnyMatAnyx4', 'FAnyMatrixAnyxAny', 'FAnyMatAnyxAny', 'I32Matrix2x2', 'I32Mat2x2', 'I32Matrix2x3', 'I32Mat2x3', 'I32Matrix2x4', 'I32Mat2x4', 'I32Matrix2xAny', 'I32Mat2xAny', 'I32Matrix3x2', 'I32Mat3x2', 'I32Matrix3x3', 'I32Mat3x3', 'I32Matrix3x4', 'I32Mat3x4', 'I32Matrix3xAny', 'I32Mat3xAny', 'I32Matrix4x2', 'I32Mat4x2', 'I32Matrix4x3', 'I32Mat4x3', 'I32Matrix4x4', 'I32Mat4x4', 'I32Matrix4xAny', 'I32Mat4xAny', 'I32MatrixAnyx2', 'I32MatAnyx2', 'I32MatrixAnyx3', 'I32MatAnyx3', 'I32MatrixAnyx4', 'I32MatAnyx4', 'I32MatrixAnyxAny', 'I32MatAnyxAny', 'IAnyMatrix2x2', 'IAnyMat2x2', 'IAnyMatrix2x3', 'IAnyMat2x3', 'IAnyMatrix2x4', 'IAnyMat2x4', 'IAnyMatrix2xAny', 'IAnyMat2xAny', 'IAnyMatrix3x2', 'IAnyMat3x2', 'IAnyMatrix3x3', 'IAnyMat3x3', 'IAnyMatrix3x4', 'IAnyMat3x4', 'IAnyMatrix3xAny', 'IAnyMat3xAny', 'IAnyMatrix4x2', 'IAnyMat4x2', 'IAnyMatrix4x3', 'IAnyMat4x3', 'IAnyMatrix4x4', 'IAnyMat4x4', 'IAnyMatrix4xAny', 'IAnyMat4xAny', 'IAnyMatrixAnyx2', 'IAnyMatAnyx2', 'IAnyMatrixAnyx3', 'IAnyMatAnyx3', 'IAnyMatrixAnyx4', 'IAnyMatAnyx4', 'IAnyMatrixAnyxAny', 'IAnyMatAnyxAny', 'U32Matrix2x2', 'U32Mat2x2', 'U32Matrix2x3', 'U32Mat2x3', 'U32Matrix2x4', 'U32Mat2x4', 'U32Matrix2xAny', 'U32Mat2xAny', 'U32Matrix3x2', 'U32Mat3x2', 'U32Matrix3x3', 'U32Mat3x3', 'U32Matrix3x4', 'U32Mat3x4', 'U32Matrix3xAny', 'U32Mat3xAny', 'U32Matrix4x2', 'U32Mat4x2', 'U32Matrix4x3', 'U32Mat4x3', 'U32Matrix4x4', 'U32Mat4x4', 'U32Matrix4xAny', 'U32Mat4xAny', 'U32MatrixAnyx2', 'U32MatAnyx2', 'U32MatrixAnyx3', 'U32MatAnyx3', 'U32MatrixAnyx4', 'U32MatAnyx4', 'U32MatrixAnyxAny', 'U32MatAnyxAny', 'UAnyMatrix2x2', 'UAnyMat2x2', 'UAnyMatrix2x3', 'UAnyMat2x3', 'UAnyMatrix2x4', 'UAnyMat2x4', 'UAnyMatrix2xAny', 'UAnyMat2xAny', 'UAnyMatrix3x2', 'UAnyMat3x2', 'UAnyMatrix3x3', 'UAnyMat3x3', 'UAnyMatrix3x4', 'UAnyMat3x4', 'UAnyMatrix3xAny', 'UAnyMat3xAny', 'UAnyMatrix4x2', 'UAnyMat4x2', 'UAnyMatrix4x3', 'UAnyMat4x3', 'UAnyMatrix4x4', 'UAnyMat4x4', 'UAnyMatrix4xAny', 'UAnyMat4xAny', 'UAnyMatrixAnyx2', 'UAnyMatAnyx2', 'UAnyMatrixAnyx3', 'UAnyMatAnyx3', 'UAnyMatrixAnyx4', 'UAnyMatAnyx4', 'UAnyMatrixAnyxAny', 'UAnyMatAnyxAny', 'AnyAnyMatrix2x2', 'AnyAnyMat2x2', 'AnyAnyMatrix2x3', 'AnyAnyMat2x3', 'AnyAnyMatrix2x4', 'AnyAnyMat2x4', 'AnyAnyMatrix2xAny', 'AnyAnyMat2xAny', 'AnyAnyMatrix3x2', 'AnyAnyMat3x2', 'AnyAnyMatrix3x3', 'AnyAnyMat3x3', 'AnyAnyMatrix3x4', 'AnyAnyMat3x4', 'AnyAnyMatrix3xAny', 'AnyAnyMat3xAny', 'AnyAnyMatrix4x2', 'AnyAnyMat4x2', 'AnyAnyMatrix4x3', 'AnyAnyMat4x3', 'AnyAnyMatrix4x4', 'AnyAnyMat4x4', 'AnyAnyMatrix4xAny', 'AnyAnyMat4xAny', 'AnyAnyMatrixAnyx2', 'AnyAnyMatAnyx2', 'AnyAnyMatrixAnyx3', 'AnyAnyMatAnyx3', 'AnyAnyMatrixAnyx4', 'AnyAnyMatAnyx4', 'AnyAnyMatrixAnyxAny', 'AnyAnyMatAnyxAny', 'AnyAnyMatrixSquare', 'D64Quaternion', 'D64Quat', 'DAnyQuaternion', 'DAnyQuat', 'F32Quaternion', 'F32Quat', 'FAnyQuaternion', 'FAnyQuat', 'AnyAnyQuaternion', 'AnyAnyQuat', 'FDAnyQuaternion', 'FDAnyQuaternionVector4'] Zuzu-Typ-PyGLM-e113a8a/pyproject.toml000066400000000000000000000001311511156275200175100ustar00rootroot00000000000000[build-system] requires = ["setuptools", "wheel"] build-backend = "setuptools.build_meta"Zuzu-Typ-PyGLM-e113a8a/setup.cfg000066400000000000000000000026641511156275200164320ustar00rootroot00000000000000[metadata] name = pyglm version = file: VERSION author = Zuzu_Typ author_email = zuzu.typ@gmail.com description = OpenGL Mathematics library for Python long_description = file: README.md long_description_content_type = text/markdown keywords = GLM, OpenGL, matrix, vector, vec, mat, Mathematics, 3D, python, python3, 3, library, python-c-api, c-api, math-library, numpy, pyrr, pip, pypi, matrix-manipulation, matrix-multiplication, matrix-functions, quaternion, c, glsl python_requires = >=3.7 license = Zlib dynamic = classifiers = Development Status :: 5 - Production/Stable Intended Audience :: Developers License :: OSI Approved :: zlib/libpng License Programming Language :: Python :: 3 :: Only Programming Language :: Python :: 3 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 Programming Language :: Python :: 3.12 Programming Language :: Python :: 3.13 Programming Language :: Python :: 3.14 Operating System :: Microsoft :: Windows Operating System :: POSIX :: Linux Operating System :: MacOS Topic :: Multimedia :: Graphics Topic :: Software Development :: Libraries Topic :: Scientific/Engineering :: Physics Typing :: Typed project_urls = Source Code = https://github.com/Zuzu-Typ/PyGLM/ Documentation = https://github.com/Zuzu-Typ/PyGLM/wiki [options] include_package_data = True packages = find: Zuzu-Typ-PyGLM-e113a8a/setup.py000066400000000000000000000007261511156275200163200ustar00rootroot00000000000000from setuptools import Extension, setup from codecs import open from os import path here = path.abspath(path.dirname(__file__)) with open(path.join(here, "VERSION")) as file_: VERSION = file_.read().strip() setup( ext_modules=[ Extension( name="pyglm.glm", sources=["PyGLM_lib/PyGLM.cpp"], include_dirs=["PyGLM_lib/glm/"], extra_compile_args=['-std=c++11', f'-DVERSION={VERSION}'] ), ] ) Zuzu-Typ-PyGLM-e113a8a/test/000077500000000000000000000000001511156275200155605ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/test/PyGLM_test.py000066400000000000000000004056701511156275200201350ustar00rootroot00000000000000import glm, sys, random, time, copy, re, math, ctypes from collections import OrderedDict glm.silence(0) ## type checking definitions ## PyGLM_DT_UNKNOWN = 0x0000000 PyGLM_DT_FLOAT = 0x0000001 PyGLM_DT_DOUBLE = 0x0000002 PyGLM_DT_INT = 0x0000004 PyGLM_DT_UINT = 0x0000008 PyGLM_DT_INT8 = 0x0000010 PyGLM_DT_UINT8 = 0x0000020 PyGLM_DT_INT16 = 0x0000040 PyGLM_DT_UINT16 = 0x0000080 PyGLM_DT_INT64 = 0x0000100 PyGLM_DT_UINT64 = 0x0000200 PyGLM_DT_BOOL = 0x0000400 PyGLM_SHAPE_2x2 = 0x0000800 PyGLM_SHAPE_2x3 = 0x0001000 PyGLM_SHAPE_2x4 = 0x0002000 PyGLM_SHAPE_3x2 = 0x0004000 PyGLM_SHAPE_3x3 = 0x0008000 PyGLM_SHAPE_3x4 = 0x0010000 PyGLM_SHAPE_4x2 = 0x0020000 PyGLM_SHAPE_4x3 = 0x0040000 PyGLM_SHAPE_4x4 = 0x0080000 PyGLM_SHAPE_1 = 0x0100000 PyGLM_SHAPE_2 = 0x0200000 PyGLM_SHAPE_3 = 0x0400000 PyGLM_SHAPE_4 = 0x0800000 PyGLM_T_VEC = 0x1000000 PyGLM_T_MVEC = 0x2000000 PyGLM_T_MAT = 0x4000000 PyGLM_T_QUA = 0x8000000 PyGLM_T_NUMBER = 0x10000000 PyGLM_T_ANY_VEC = (PyGLM_T_VEC | PyGLM_T_MVEC) PyGLM_T_ANY_ARR = (PyGLM_T_ANY_VEC | PyGLM_T_QUA) PyGLM_SHAPE_SQUARE = (PyGLM_SHAPE_2x2 | PyGLM_SHAPE_3x3 | PyGLM_SHAPE_4x4) PyGLM_SHAPE_2xM = (PyGLM_SHAPE_2x2 | PyGLM_SHAPE_2x3 | PyGLM_SHAPE_2x4) PyGLM_SHAPE_3xM = (PyGLM_SHAPE_3x2 | PyGLM_SHAPE_3x3 | PyGLM_SHAPE_3x4) PyGLM_SHAPE_4xM = (PyGLM_SHAPE_4x2 | PyGLM_SHAPE_4x3 | PyGLM_SHAPE_4x4) PyGLM_DT_ALL = ((1 << 11) - 1) PyGLM_SHAPE_ALL = (((1 << 13) - 1) << 11) PyGLM_T_ALL = (((1 << 5) - 1) << 24) PyGLM_ALL = (PyGLM_DT_ALL | PyGLM_SHAPE_ALL | PyGLM_T_ALL) ##/type checking definitions ## #def get_info(num): # glob = globals() # vars_ = [x for x in glob if x.startswith("PyGLM_") and not "ANY" in x and not "xM" in x and not "ALL" in x and not "SQUARE" in x] # out = [] # for var in vars_: # if (glob[var] & num): # out.append(var) # return ", ".join(out) #def get_info_of(obj): # return get_info(glm._get_type_info(PyGLM_ALL, obj)) #gio = get_info_of datatypes = ("float", "double", "int", "glm::uint", "glm::i64", "glm::u64", "glm::i16", "glm::u16", "glm::i8", "glm::u8", "bool") prefixes = ("f", "d", "i", "u", "i64", "u64", "i16", "u16", "i8", "u8", "b") suffixes = "fFiIqQsSuUB" vector_type_ids = tuple(range(len(datatypes))) matrix_type_ids = tuple(range(4)) quat_type_ids = tuple(range(2)) vector_type_dict = {} vector_length_dict = {} vector_types = [] matrix_type_dict = {} matrix_length_dict = {} matrix_types = [] quat_type_dict = {} quat_types = [] ctypes_types = [glm.c_float, glm.c_double, glm.c_int64, glm.c_int32, glm.c_int16, glm.c_int8, glm.c_uint64, glm.c_uint32, glm.c_uint16, glm.c_uint8, glm.c_bool] for type_id in vector_type_ids: vector_type_dict[type_id] = [] this_list = vector_type_dict[type_id] for L in range(1, 5): tp = getattr(glm, "{T}vec{L}".format(T=prefixes[type_id], L=L)) vll = vector_length_dict.get(L, []) vll.append(tp) vector_length_dict[L] = vll this_list.append(tp) vector_types += this_list for type_id in matrix_type_ids: matrix_type_dict[type_id] = [] this_list = matrix_type_dict[type_id] for C in range(2, 5): for R in range(2, 5): tp = getattr(glm, "{T}mat{C}x{R}".format(T=prefixes[type_id], C=C, R=R)) mll = matrix_length_dict.get((C,R), []) mll.append(tp) matrix_length_dict[(C,R)] = mll this_list.append(tp) matrix_types += this_list for type_id in quat_type_ids: quat_type_dict[type_id] = [] this_list = quat_type_dict[type_id] this_list.append(getattr(glm, "{T}quat".format(T=prefixes[type_id]))) quat_types += this_list obj_gen = lambda types: (T() for T in types) def list_replace(list_, x, y): list_copy = list(list_) for i in range(len(list_copy)): list_copy[i] = list_copy[i].replace(x, y) return list_copy randf = lambda: random.random()*100 randfs = lambda: randf()-50 mvec_mats = { "f2" : glm.fmat2x2(0), "f3" : glm.fmat2x3(0), "f4" : glm.fmat2x4(0), "d2" : glm.dmat2x2(0), "d3" : glm.dmat2x3(0), "d4" : glm.dmat2x4(0), "i2" : glm.imat2x2(0), "i3" : glm.imat2x3(0), "i4" : glm.imat2x4(0), "u2" : glm.umat2x2(0), "u3" : glm.umat2x3(0), "u4" : glm.umat2x4(0), } def get_args(arg_string, type_, rand_func=None): if not rand_func: if type_ in "IQSU": rand_func = randf else: rand_func = randfs args = [] for arg in arg_string: if arg == "N": if type_ in "fF": args.append(float(rand_func())) if type_ in "iqsu": args.append(int(rand_func())) if type_ in "IQSU": args.append(int(randf())) if type_ == "B": args.append(random.choice((True, False))) elif arg == "Ni": args.append(int(rand_func())) elif arg == "NB": args.append(random.choice((True, False))) elif "V" in arg: if len(arg) == 3 and arg[2] in "fFiB": T = prefixes[suffixes.index(arg[2])] else: T = prefixes[suffixes.index(type_)] L = int(arg[1]) rf = rand_func if T == "b": rf = lambda: random.choice((True, False)) args.append(getattr(glm, "{T}vec{L}".format(T=T, L=L))(*(rf() for x in range(L)))) elif "P" in arg: if len(arg) == 3 and arg[2] in "fFi": T = prefixes[suffixes.index(arg[2])] else: T = prefixes[suffixes.index(type_)] L = int(arg[1]) if not type_ in "fFiI" or L < 2: continue args.append(mvec_mats["{T}{L}".format(T=T, L=L)][0]) elif arg == "Q": if not type_ in "fF": continue args.append(getattr(glm, "{T}quat".format(T=prefixes[suffixes.index(type_)]))(rand_func(), rand_func(), rand_func(), rand_func())) elif "M" in arg: if len(arg) == 4 and arg[3] in "fFiI": T = prefixes[suffixes.index(arg[3])] else: T = prefixes[suffixes.index(type_)] if not type_ in "fFiI": continue n = int(arg[1]) m = int(arg[2]) args.append(getattr(glm, "{T}mat{n}x{m}".format(T=prefixes[suffixes.index(type_)], n=n, m=m))(*[rand_func() for i in range(n*m)])) return args def gen_args(args_string): if "#M" in args_string: supports_mvec = True args_string = args_string.replace("#M", "") else: supports_mvec = False if "#u" in args_string: rand_func = randf args_string = args_string.replace("#u", "") elif "#p" in args_string: rand_func = lambda: randf() + 1 args_string = args_string.replace("#p", "") elif "#d" in args_string: rand_func = random.random args_string = args_string.replace("#d", "") elif "#x" in args_string: res = randf() rand_func = lambda: res args_string = args_string.replace("#x", "") else: rand_func = None if "__" in args_string: arg_part, type_part = args_string.split("__") parts = arg_part.split("_") types = type_part else: parts = args_string.split("_") types = suffixes mvec_types = ("f" if "f" in types else "") + ("F" if "F" in types else "") + ("i" if "i" in types else "") + ("I" if "I" in types else "") for part in parts: arg_strings = [] current_text = "" for char in part: if not char in "1234" + "fFiB": if current_text != "": arg_strings.append(current_text) current_text = "" current_text += char if current_text: arg_strings.append(current_text) if "N" in arg_strings and not ("V" in arg_strings or "M" in arg_strings): yield get_args(arg_strings, "F" if "F" in types else "f" if "f" in types else "i" if "i" in types else "I" if "I" in types else types[0], rand_func) elif "V" in arg_strings: for T in types: for L in range(1, 5): yield get_args(list_replace(arg_strings, "V", "V{L}".format(L=L)), T, rand_func) if supports_mvec: for T in mvec_types: for L in range(2, 5): yield get_args(list_replace(arg_strings, "V", "P{L}".format(L=L)), T, rand_func) elif "P" in arg_strings: for T in mvec_types: for L in range(2, 5): yield get_args(list_replace(arg_strings, "P", "P{L}".format(L=L)), T, rand_func) elif "Vf" in arg_strings: for L in range(1, 5): yield get_args(list_replace(arg_strings, "Vf", "V{L}".format(L=L)), "f", rand_func) if supports_mvec: for L in range(2, 5): yield get_args(list_replace(arg_strings, "Vf", "P{L}".format(L=L)), "f", rand_func) elif "VF" in arg_strings: for L in range(1, 5): yield get_args(list_replace(arg_strings, "VF", "V{L}".format(L=L)), "F", rand_func) if supports_mvec: for L in range(2, 5): yield get_args(list_replace(arg_strings, "VF", "P{L}".format(L=L)), "F", rand_func) elif "Vi" in arg_strings: for L in range(1, 5): yield get_args(list_replace(arg_strings, "Vi", "V{L}".format(L=L)), "i", rand_func) if supports_mvec: for L in range(2, 5): yield get_args(list_replace(arg_strings, "Vi", "P{L}".format(L=L)), "i", rand_func) elif "VB" in arg_strings: for L in range(1, 5): yield get_args(list_replace(arg_strings, "VB", "V{L}".format(L=L)), "B", lambda: random.choice((True, False))) elif "V1" in arg_strings or "V2" in arg_strings or "V3" in arg_strings or "V4" in arg_strings or "M22" in arg_strings or "M23" in arg_strings or "M24" in arg_strings or "M32" in arg_strings or "M33" in arg_strings or "M34" in arg_strings or "M42" in arg_strings or "M43" in arg_strings or "M44" in arg_strings: for T in types: yield get_args(arg_strings, T, rand_func) if supports_mvec: for T in mvec_types: yield get_args(list_replace(arg_strings, "V", "P"), T, rand_func) elif "Q" in arg_strings: for T in types: if not T in "fF": continue yield get_args(arg_strings, T, rand_func) elif "M" in arg_strings: for T in types: if not T in "fFiI": continue for C in range(2,5): for R in range(2,5): yield get_args(list_replace(arg_strings, "M", "M{C}{R}".format(C=C,R=R)), T, rand_func) elif "Mf" in arg_strings: for C in range(2,5): for R in range(2,5): yield get_args(list_replace(arg_strings, "Mf", "M{C}{R}".format(C=C,R=R)), "f", rand_func) elif "MF" in arg_strings: for C in range(2,5): for R in range(2,5): yield get_args(list_replace(arg_strings, "MF", "M{C}{R}".format(C=C,R=R)), "F", rand_func) elif "-" in arg_strings: yield () def gen_obj(args_string): for args in gen_args(args_string): yield args[0] def gen_type(args_string): for obj in gen_obj(args_string): yield type(obj) def get_len_of_type(type_): return len(type_()) def optional_any(x): if hasattr(x, "__len__"): return glm.any(x) return bool(x) def optional_all(x): if hasattr(x, "__len__"): return glm.all(x) return bool(x) possible_arg_combinations = ['-', 'M', 'M22', 'M22M22', 'M22M23', 'M22M24', 'M22M32', 'M22M33', 'M22M34', 'M22M42', 'M22M43', 'M22M44', 'M22V2V2', 'M23', 'M23M22', 'M23M23', 'M23M24', 'M23M32', 'M23M33', 'M23M34', 'M23M42', 'M23M43', 'M23M44', 'M23V3V3', 'M24', 'M24M22', 'M24M23', 'M24M24', 'M24M32', 'M24M33', 'M24M34', 'M24M42', 'M24M43', 'M24M44', 'M24V4V4', 'M32', 'M32M22', 'M32M23', 'M32M24', 'M32M32', 'M32M33', 'M32M34', 'M32M42', 'M32M43', 'M32M44', 'M32V2V2V2', 'M33', 'M33M22', 'M33M23', 'M33M24', 'M33M32', 'M33M33', 'M33M34', 'M33M42', 'M33M43', 'M33M44', 'M33N', 'M33V2', 'M33V3V3V3', 'M34', 'M34M22', 'M34M23', 'M34M24', 'M34M32', 'M34M33', 'M34M34', 'M34M42', 'M34M43', 'M34M44', 'M34V4V4V4', 'M42', 'M42M22', 'M42M23', 'M42M24', 'M42M32', 'M42M33', 'M42M34', 'M42M42', 'M42M43', 'M42M44', 'M42V2V2V2V2', 'M43', 'M43M22', 'M43M23', 'M43M24', 'M43M32', 'M43M33', 'M43M34', 'M43M42', 'M43M43', 'M43M44', 'M43V3V3V3V3', 'M44', 'M44M22', 'M44M23', 'M44M24', 'M44M32', 'M44M33', 'M44M34', 'M44M42', 'M44M43', 'M44M44', 'M44NV3', 'M44V3', 'M44V3QV3V3V4', 'M44V4V4V4V4', 'MFMFNi', 'MM', 'MMM', 'MfMfNi', 'N', 'NN', 'NNN', 'NNNB', 'NNNN', 'NNNNN', 'NNNNNN', 'NNNNNNNN', 'NNNNNNNNN', 'NNNNNNNNNNNN', 'NNNNNNNNNNNNNNNN', 'NNNi', 'NNV', 'NNi', 'NV', 'NV3', 'P', 'Q', 'QN', 'QNV3', 'QQ', 'QQN', 'QQQ', 'V', 'V1', 'V2', 'V2N', 'V2V2', 'V2V2V4', 'V2V3', 'V2V4', 'V3', 'V3M44M44V4', 'V3N', 'V3NV2', 'V3NV3', 'V3Ni', 'V3V2', 'V3V2N', 'V3V3', 'V3V3N', 'V3V3Ni', 'V3V3V3', 'V3V4', 'V4', 'V4N', 'V4NNV2', 'V4NV2N', 'V4NV3', 'V4V2', 'V4V2NN', 'V4V3', 'V4V3N', 'V4V4', 'VFVFNi', 'VN', 'VNN', 'VNi', 'VV', 'VVN', 'VVNN', 'VVV', 'VVVB', 'VVVF', 'VVVV', 'VVVVVVVVVVVV', 'VVVf', 'VVi', 'VfVfNi'] def gen_anti_args(args_string): yield None, yield None, None yield None, None, None yield None, None, None, None yield None, None, None, None, None yield None, None, None, None, None, None yield object, yield object, object yield object, object, object yield object, object, object, object yield object, object, object, object, object yield object, object, object, object, object, object yield (), yield (), () yield (), (), () yield (), (), (), () yield (), (), (), (), () yield (), (), (), (), (), () yield [], yield [], [] yield [], [], [] yield [], [], [], [] yield [], [], [], [], [] yield [], [], [], [], [], [] yield {}, yield {}, {} yield {}, {}, {} yield {}, {}, {}, {} yield {}, {}, {}, {}, {} yield {}, {}, {}, {}, {}, {} arg_combis = possible_arg_combinations #random.sample(possible_arg_combinations, 20) all_types = "fFiqsuIQSUB" args_string = re.sub("#.", "", args_string) args_string, types = args_string.split("__") if "__" in args_string else (args_string, None) args = args_string.split("_") anti_args_string = "#M" + "_".join(filter(lambda possible_arg_combi: possible_arg_combi not in args, arg_combis)) + "__" + all_types for arg in gen_args(anti_args_string): yield arg #v1 = glm.vec1() #v2 = glm.vec2() #v3 = glm.vec3() #v4 = glm.vec4() #vectors = [v1, v2, v3, v4] #vector_types = [glm.vec1, glm.vec2, glm.vec3, glm.vec4] #m22 = glm.mat2x2() #m23 = glm.mat2x3() #m24 = glm.mat2x4() #m32 = glm.mat3x2() #m33 = glm.mat3x3() #m34 = glm.mat3x4() #m42 = glm.mat4x2() #m43 = glm.mat4x3() #m44 = glm.mat4x4() #matrices = [m22, m23, m24, m32, m33, m34, m42, m43, m44] #matrix_types = [glm.mat2x2, glm.mat2x3, glm.mat2x4, glm.mat3x2, glm.mat3x3, glm.mat3x4, glm.mat4x2, glm.mat4x3, glm.mat4x4] #q = glm.quat() #all_types = vector_types + matrix_types + [glm.quat] #all_type_objects = vectors + matrices + [q] #get_obj_generator = lambda types: (x() for x in types) class FAssertionError(Exception): pass def fassert(func, args): try: return func(*args) except: raise FAssertionError("{} raised {} with {}".format(func, sys.exc_info()[1], repr(args))) def fnassert(func, args): try: func(*args) raise FAssertionError("{} raised nothing with {}".format(func, repr(args))) except: pass def fail(*args): raise FAssertionError("Failed with " + str(args)) # Specific # def test_specific(): assert isinstance(glm.version, str) assert isinstance(glm.license, str) #/Specific # # Custom # def test_custom(): for vec_type in (glm.vec4, glm.dvec4): v = vec_type(1, 2, 3, 4) q = glm.vec4_to_quat(v) assert v.x == q.x assert v.y == q.y assert v.z == q.z assert v.w == q.w v = glm.quat_to_vec4(q) assert v.x == q.x assert v.y == q.y assert v.z == q.z assert v.w == q.w #/Custom # # Initialization # ## vec1 def test_vec1_types(): for args in gen_args("#u-_N_V1"): # need to add support for _V1_V2_V3_V4 for T in vector_length_dict[1]: fassert(T, args) for args in gen_anti_args("#u-_N_V1"): for T in vector_length_dict[1]: fnassert(T, args) ## vec2 def test_vec2_types(): for args in gen_args("#u-_N_NN_V2"): for T in vector_length_dict[2]: fassert(T, args) for args in gen_args("#uV2V3_V2V4"): fassert(type(args[0]), args[1:]) for args in gen_anti_args("#u-_N_NN_V2"): for T in vector_length_dict[2]: fnassert(T, args) ## vec3 def test_vec3_types(): for args in gen_args("#u-_N_NNN_V3"): for T in vector_length_dict[3]: fassert(T, args) for args in gen_args("#uV3V4_V3NV2_V3V2N"): fassert(type(args[0]), args[1:]) ## vec4 def test_vec4_types(): for args in gen_args("#u-_N_NNNN_V4"): for T in vector_length_dict[4]: fassert(T, args) for args in gen_args("#uV4V2NN_V4NV2N_V4NNV2_V4NV3_V4V3N"): fassert(type(args[0]), args[1:]) ## mat def test_mat_types(): for C in range(2, 5): for R in range(2, 5): for args in gen_args("#u-_N_" + "N"*(C*R) + "_" + "N"*(int(math.sqrt(C*R))) + "_M{C}{R}__fFiI".format(C=C, R=R)): # need support for _M for T in matrix_length_dict[(C,R)]: fassert(T, args) for args in gen_args("#uM{C}{R}".format(C=C, R=R) + "V{R}".format(R=R)*C + "_" + "_".join(["M{C}{R}M{c}{r}".format(C=C, R=R, c=c, r=r) for c in range(2, 5) for r in range(2,5)]) + "__fFiI"): fassert(type(args[0]), args[1:]) for args in gen_args("Q__f"): fassert(glm.mat3, args) fassert(glm.mat4, args) for args in gen_args("Q__F"): fassert(glm.dmat3, args) fassert(glm.dmat4, args) ## quat def test_quat_types(): for args in gen_args("#u-_V3_M33_M44_NV3_V3V3_NNNN_Q__f"): # need support for conversion constructors fassert(glm.quat, args) ## dquat def test_dquat_types(): for args in gen_args("#u-_V3_M33_M44_NV3_V3V3_NNNN_Q__F"): # need support for conversion constructors fassert(glm.dquat, args) ## array def test_array_types(): for args in gen_args("V_M_Q_VV_MM_QQ_VVV_MMM_QQQ"): fassert(glm.array, args) assert glm.array([glm.vec4() for x in range(10)]) assert glm.array(tuple([glm.vec4() for x in range(10)])) assert glm.array({x : glm.vec4() for x in range(10)}.values()) assert glm.array(memoryview(glm.array([glm.vec4() for x in range(10)]))) assert glm.array([glm.quat() for x in range(10)]) assert glm.array(tuple([glm.quat() for x in range(10)])) assert glm.array({x : glm.quat() for x in range(10)}.values()) assert glm.array(memoryview(glm.array([glm.quat() for x in range(10)]))) assert glm.array([glm.mat4() for x in range(10)]) assert glm.array(tuple([glm.mat4() for x in range(10)])) assert glm.array({x : glm.mat4() for x in range(10)}.values()) assert glm.array(memoryview(glm.array([glm.mat4() for x in range(10)]))) assert glm.array([glm.float32(x) for x in range(10)]) assert glm.array(tuple([glm.float32(x) for x in range(10)])) assert glm.array({x : glm.float32(x) for x in range(10)}.values()) assert glm.array(memoryview(glm.array([glm.float32(x) for x in range(10)]))) assert glm.array(glm.float32, *range(10)) assert glm.array.from_numbers(glm.float32, *range(10)) assert glm.array([glm.float32, 1, 2, 3]) == glm.array((glm.float32, 1, 2, 3)) assert glm.array(OrderedDict([(glm.float32, 1), (1, 2), (2, 3), (3, 4)])) assert glm.array(memoryview(glm.array.from_numbers(glm.float32, *range(10)))) assert glm.array.zeros(1000, glm.uint8) == glm.array.zeros(1000, glm.u8vec1) == glm.array(glm.int8, 0).repeat(1000) assert glm.array.zeros(1000, glm.quat) assert glm.array.zeros(1000, glm.vec4) assert glm.array.zeros(1000, glm.mat4) arr = glm.array(glm.mat4(), glm.mat4(2)) mv = memoryview(arr) assert glm.array.as_reference(mv) == arr assert glm.array.as_reference(mv).reference == mv assert glm.array.as_reference(arr).address == arr.address assert len(arr) == 2, arr assert arr.typecode == "f", arr assert arr.dtype == "float32", arr assert arr.ctype == glm.float32, arr assert arr.dt_size == 4, arr assert arr.itemsize == arr.dt_size * 4 * 4, arr assert arr.ptr, arr assert arr.nbytes == arr.itemsize * len(arr), arr assert arr.element_type == glm.mat4, arr assert arr.readonly == False assert arr.reference is None arr = glm.array.from_numbers(glm.int32, 5, 4, 3, 2, 1) assert arr.filter(lambda x: True) == arr assert arr.filter(lambda x: False) == arr.repeat(0) assert arr.filter(lambda x: x <= 3) == glm.array.from_numbers(glm.int32, 3, 2, 1) assert arr.map(lambda x: x) == arr assert arr.map(lambda x: glm.vec3(x)) == glm.array(glm.vec3(5), glm.vec3(4), glm.vec3(3), glm.vec3(2), glm.vec3(1)) assert arr.map(lambda x: (x, x) if x == 1 else None) == glm.array(glm.int32, 1, 1) assert arr.map(glm.add, glm.array([glm.vec2(x) for x in range(5)])) == glm.array([glm.vec2(5) for x in range(5)]) assert glm.array(glm.int32, 0, 1, 1, 0, 0).map(glm.if_else, arr, glm.array(glm.int32, 1, 2, 3, 4, 5)) == glm.array(glm.int32, 1, 4, 3, 4, 5) assert glm.array(glm.int32, *(x * 4 for x in range(-5,5))).map(lambda *args: args if sum(args) == 0 else None, glm.array(glm.int32, *(x * 3 for x in range(-5,5))), glm.array(glm.int32, *(x * 2 for x in range(-5,5))), glm.array(glm.int32, *(x * 1 for x in range(-5,5))), glm.array(glm.int32, *(x * -9.4 for x in range(-5,5)))) == glm.array(glm.int32, 0, 0, 0, 0, 0) assert arr.map(lambda x: None) == arr.repeat(0) arr.sort(glm.cmp) assert arr == glm.array.from_numbers(glm.int32, 1, 2, 3, 4, 5) arr = glm.array(glm.vec3(5), glm.vec3(4), glm.vec3(3), glm.vec3(2), glm.vec3(1)) assert arr.filter(lambda x: True) == arr assert arr.filter(lambda x: False) == arr.repeat(0) assert arr.filter(lambda x: x.x <= 3) == glm.array(glm.vec3(3), glm.vec3(2), glm.vec3(1)) assert arr.map(lambda x: x) == arr assert arr.map(lambda x: x.xxxx) == glm.array(glm.vec4(5), glm.vec4(4), glm.vec4(3), glm.vec4(2), glm.vec4(1)) assert arr.map(lambda x: (x, x) if x.x == 1 else None) == glm.array(glm.vec3(1), glm.vec3(1)) assert arr.map(lambda x: None) == arr.repeat(0) assert arr.map(lambda x: (x.x), ctype = glm.int32) == glm.array.from_numbers(glm.int32, 5, 4, 3, 2, 1) arr.sort(lambda x, y: glm.cmp(x.x, y.x)) assert arr == glm.array(glm.vec3(1), glm.vec3(2), glm.vec3(3), glm.vec3(4), glm.vec3(5)) # repr # def test_repr_eval(): glm_locals = {a : getattr(glm, a) for a in dir(glm)} for T in vector_types + matrix_types + quat_types: fassert(lambda o: eval(repr(o), glm_locals), (T(),)) arr = glm.array(glm.vec4(*[-1.23457e+06]*4), glm.vec4(*[-7.65432e+06]*4)) arr2 = glm.array(glm.quat(*[-1.23457e+06]*4), glm.quat(*[-7.65432e+06]*4)) arr3 = glm.array(glm.mat4(*[-1.23457e+06]*16), glm.mat4(*[-7.65432e+06]*16)) assert repr(arr), arr assert repr(arr2), arr2 assert repr(arr3), arr3 assert str(arr), arr assert str(arr2), arr2 assert str(arr3), arr3 arr = glm.array(glm.vec4(*[1]*4), glm.vec4(*[2]*4)) arr2 = glm.array(glm.quat(*[1]*4), glm.quat(*[2]*4)) arr3 = glm.array(glm.mat4(*[1]*16), glm.mat4(*[2]*16)) arr4 = glm.array(glm.int8, *range(10)) assert eval(repr(arr), glm_locals) == arr, (arr, repr(arr), eval(repr(arr), glm_locals)) assert eval(repr(arr2), glm_locals) == arr2, (arr2, repr(arr2), eval(repr(arr2), glm_locals)) assert eval(repr(arr3), glm_locals) == arr3, (arr3, repr(arr3), eval(repr(arr3), glm_locals)) assert eval(repr(arr4), glm_locals) == arr4, (arr4, repr(arr4), eval(repr(arr4), glm_locals)) #/repr # # neg # def test_neg(): for obj in gen_obj("#MV_M_Q__fFiqsuB"): fassert(obj.__neg__, ()) assert (-glm.array(obj))[0] == -obj, obj #/neg # # pos # def test_pos(): for obj in gen_obj("#MV_M_Q__fFiqsuIQSU"): fassert(obj.__pos__, ()) assert (+glm.array(obj))[0] == +obj, obj #/pos # # abs # def test_abs(): for obj in gen_obj("#MV__fFiqsuIQSU"): fassert(obj.__abs__, ()) assert (abs(glm.array(obj)))[0] == abs(obj), obj #/abs # # invert # def test_invert(): for obj in gen_obj("#MV__iqsuIQSU"): fassert(obj.__invert__, ()) assert (abs(glm.array(obj)))[0] == abs(obj), obj #/invert # # add # def test_add(): for obj in gen_obj("#MV_M_Q__fFiqsuIQSUB"): fassert(obj.__add__, (obj,)) assert (glm.array(obj) + glm.array(obj))[0] == obj + obj, obj assert (glm.array(obj) + obj)[0] == obj + obj, obj assert (obj + glm.array(obj))[0] == obj + obj, obj arr = glm.array(glm.mat4()) fassert(arr.concat, (arr,)) fassert((arr.concat(arr)).concat, (arr,)) #/add # # sub # def test_sub(): for obj in gen_obj("#MV_M_Q__fFiqsuIQSU"): fassert(obj.__sub__, (obj,)) assert (glm.array(obj) - glm.array(obj))[0] == obj - obj, obj assert (glm.array(obj) - obj)[0] == obj - obj, obj assert (obj - glm.array(obj))[0] == obj - obj, obj #/sub # # mul # def test_mul(): for obj in gen_obj("#MV_M_Q__fFiqsuIQSUB"): fassert(obj.__mul__, (1,)) assert (glm.array(obj) * glm.array(glm.array(obj).ctype, 1))[0] == obj * 1, obj assert (glm.array(obj) * 1)[0] == obj * 1, obj assert (obj * glm.array(glm.array(obj).ctype, 1))[0] == obj * 1, obj arr = glm.array(glm.mat4()) fassert(arr.repeat, (3,)) fassert((arr.repeat(4)).repeat, (2,)) #/mul # # div # def test_div(): for obj in gen_obj("#MV_M_Q__fFiqsuIQSU"): fassert(obj.__truediv__, (1,)) for obj in gen_obj("#MV_Q__fFiqsuIQSU"): fassert(obj.__truediv__, (1,)) assert (glm.array(obj) / glm.array(glm.array(obj).ctype, 1))[0] == obj / 1, obj assert (glm.array(obj) / 1)[0] == obj / 1, obj assert (obj / glm.array(glm.array(obj).ctype, 1))[0] == obj / 1, obj for obj in gen_obj("V__iqsuIQSU"): try: obj.__truediv__(type(obj)(0)) fail(obj) except ZeroDivisionError: pass for obj in gen_obj("P__iI"): try: obj.__truediv__(obj) fail(obj) except ZeroDivisionError: pass for obj in gen_obj("#MV_M_Q__iqsuIQSU"): try: obj.__truediv__(0) fail(obj) except ZeroDivisionError: pass #/div # # floordiv # def test_int_floordiv(): for obj in gen_obj("#MV__iqsuIQSU"): fassert(obj.__floordiv__, (1,)) fassert(obj.__floordiv__, (obj * 0 + 1,)) for obj in gen_obj("V__iqsuIQSU"): fassert(obj.__floordiv__, (type(obj)(1),)) for obj in gen_obj("V__iqsuIQSU"): try: obj.__floordiv__(type(obj)(0)) fail(obj) except ZeroDivisionError: pass for obj in gen_obj("P__iI"): try: obj.__floordiv__(obj) fail(obj) except ZeroDivisionError: pass for obj in gen_obj("#MV__iqsuIQSU"): try: obj.__floordiv__(0) fail(obj) except ZeroDivisionError: pass #/floordiv # # mod # def test_mod(): for obj in gen_obj("#MV__fF"): fassert(obj.__mod__, (1,)) for obj in gen_obj("#MV__fF"): assert (glm.array(obj) % glm.array(glm.array(obj).ctype, 1))[0] == obj % 1, obj assert (glm.array(obj) % 1)[0] == obj % 1, obj assert (obj % glm.array(glm.array(obj).ctype, 1))[0] == obj % 1, obj #/mod # # floordiv # def test_floordiv(): for obj in gen_obj("#MV__fF"): fassert(obj.__floordiv__, (1,)) #/floordiv # # divmod # def test_divmod(): for obj in gen_obj("#MV__fF"): fassert(obj.__divmod__, (1,)) #/divmod # # lshift # def test_lshift(): for obj in gen_obj("#MV__iqsuIQSU"): fassert(obj.__lshift__, (1,)) fassert(obj.__lshift__, (obj,)) #/lshift # # rshift # def test_rshift(): for obj in gen_obj("#MV__iqsuIQSU"): fassert(obj.__rshift__, (1,)) fassert(obj.__rshift__, (obj,)) #/rshift # # and # def test_and(): for obj in gen_obj("#MV__iqsuIQSUB"): fassert(obj.__and__, (1,)) fassert(obj.__and__, (obj,)) #/and # # or # def test_or(): for obj in gen_obj("#MV__iqsuIQSUB"): fassert(obj.__or__, (1,)) fassert(obj.__or__, (obj,)) #/or # # xor # def test_xor(): for obj in gen_obj("#MV__iqsuIQSUB"): fassert(obj.__xor__, (1,)) fassert(obj.__xor__, (obj,)) #/xor # # pow # def test_pow(): for obj in gen_obj("#p#MV__fF"): fassert(obj.__pow__, (obj,)) fassert(obj.__pow__, (obj, obj)) assert (glm.array(obj) ** glm.array(obj))[0] == obj ** obj, obj assert (glm.array(obj) ** obj)[0] == obj ** obj, obj assert (obj ** glm.array(obj))[0] == obj ** obj, obj #/pow # # matmul # def test_matmul(): for obj in gen_obj("#MV_M_Q__fFiqsuIQSU"): try: obj @ obj except TypeError: pass #/matmul # # iadd # def test_iadd(): for obj in gen_obj("#MV_M_Q__fFiqsuIQSUB"): fassert(obj.__iadd__, (obj,)) arr = glm.array(glm.mat4()) fassert(arr.iconcat, (arr,)) fassert(arr.iconcat, (arr,)) #/iadd # # isub # def test_isub(): for obj in gen_obj("#MV_M_Q__fFiqsuIQSU"): fassert(obj.__isub__, (obj,)) #/isub # # imul # def test_imul(): for obj in gen_obj("#MV_M_Q__fFiqsuIQSUB"): fassert(obj.__imul__, (1,)) arr = glm.array(glm.mat4()) fassert(arr.irepeat, (3,)) fassert(arr.irepeat, (3,)) #/imul # # idiv # def test_idiv(): for obj in gen_obj("#MV_M_Q__fFiqsuIQSU"): fassert(obj.__itruediv__, (1,)) #/idiv # # imod # def test_imod(): for obj in gen_obj("#MV__fF"): fassert(obj.__imod__, (1,)) #/imod # # ifloordiv # def test_ifloordiv(): for obj in gen_obj("#MV__fFiqsuIQSU"): fassert(obj.__ifloordiv__, (1,)) #/ifloordiv # # ipow # def test_ipow(): for obj in gen_obj("#MV__fF"): fassert(obj.__ipow__, (obj,)) #/ipow # # imatmul # def test_imatmul(): for obj in gen_obj("#MV_M_Q__fFiqsuIQSU"): try: obj @= obj except TypeError: pass #/imatmul # # str # def test_str(): for obj in gen_obj("#MV_M_Q"): assert str(obj), obj #/str # # repr # def test_repr(): for obj in gen_obj("#MV_M_Q"): assert repr(obj), obj #/repr # # len # def test_len(): for obj in gen_obj("#MV_M_Q"): assert len(obj), obj arr = glm.array(glm.mat4()) arr2 = arr.concat(arr) assert len(arr) == 1, arr assert len(arr2) == 2, arr2 #/len # # getitem # def test_getitem(): for obj in gen_obj("#MV_M_Q"): for i in range(len(obj)): assert obj[i] != None, obj arr = glm.array(glm.mat4(), glm.mat4(2)) assert arr[0] == glm.mat4(), arr assert arr[1] == glm.mat4(2) == arr[-1], arr arr = glm.array(*glm.mat4()) assert arr[:] == arr, arr assert arr[1:] == glm.array(glm.vec4(0,1,0,0),glm.vec4(0,0,1,0),glm.vec4(0,0,0,1)), arr assert arr[::2] == glm.array(glm.vec4(1,0,0,0),glm.vec4(0,0,1,0)), arr assert arr[1::2] == glm.array(glm.vec4(0,1,0,0),glm.vec4(0,0,0,1)), arr #/getitem # # setitem # def test_setitem(): for obj in gen_obj("#MV_M_Q"): for i in range(len(obj)): fassert(obj.__setitem__,(i, obj[i])) arr = glm.array(glm.mat4(), glm.mat4(2)) arr[0] = glm.mat4(3) assert arr[0] == glm.mat4(3), arr del arr[0] assert arr == glm.array(glm.mat4(2)), arr arr = glm.array(*glm.mat4()) del arr[::2] assert arr == glm.array(glm.vec4(0,1,0,0),glm.vec4(0,0,0,1)), arr arr[:] = glm.array(glm.vec4(), glm.vec4(2)) assert arr == glm.array(glm.vec4(), glm.vec4(2)), arr #/setitem # # contains # def test_contains(): for obj in gen_obj("#MV_M_Q"): assert obj[0] in obj, obj arr = glm.array(glm.mat4(), glm.mat4(2)) assert glm.mat4(2) in arr and not glm.mat4(3) in arr, arr #/contains # # Richcompare # ## EQ def test_EQ(): for obj in gen_obj("V_M_Q"): assert obj == type(obj)(obj), obj arr = glm.array(glm.mat4(), glm.mat4(2)) arr2 = glm.array(glm.mat4(), glm.mat4(2)) arr3 = glm.array(glm.mat4(), glm.mat4(2), glm.mat4(0)) assert arr == arr2 and not arr == arr3, (arr, arr2, arr3) ## NE def test_NE(): for obj in gen_obj("#uV_M__fFiqsuIQSU"): assert obj != (obj + 1), obj for obj in gen_obj("V_M__B"): assert obj != (not obj), obj for obj in gen_obj("Q"): assert obj != (1,0,0,0) arr = glm.array(glm.mat4(), glm.mat4(2)) arr2 = glm.array(glm.mat4(), glm.mat4(2)) arr3 = glm.array(glm.mat4(), glm.mat4(2), glm.mat4(0)) assert not arr != arr2 and arr != arr3, (arr, arr2, arr3) ## LT def test_LT(): for obj in gen_obj("#uV__fFiqsuIQSU"): assert all(obj < (obj + 1)) and not any(obj < obj), obj ## LE def test_LE(): for obj in gen_obj("#uV__fFiqsuIQSU"): assert all(obj <= obj) and all(obj <= (obj + 1)) and not any((obj + 1) <= obj), obj ## GT def test_GT(): for obj in gen_obj("#uV__fFiqsuIQSU"): assert all((obj + 1) > obj) and not any(obj > obj), obj ## GE def test_GE(): for obj in gen_obj("#uV__fFiqsuIQSU"): assert all(obj >= obj) and all((obj + 1) >= obj) and not any(obj >= (obj + 1)), obj #/Richcompare # # iter # def test_iter(): for obj in gen_obj("V_M_Q"): fassert(iter, (obj,)) arr = glm.array(glm.mat4(), glm.mat4(2)) assert list(arr) == arr.to_list(), arr #/iter # # hash # def test_hash(): for obj in gen_obj("V_M_Q"): fassert(hash, (obj,)) arr = glm.array(glm.mat4(), glm.mat4(2)) assert hash(arr), arr #/hash # # buffer protocol # def check_buffer_protocol(type_, shape, format): obj = type_() memview = memoryview(obj) assert shape == memview.shape assert format == memview.format def test_buffer_protocol(): for t, s, f in ( (glm.vec1, (1,), "f"), (glm.vec2, (2,), "f"), (glm.vec3, (3,), "f"), (glm.vec4, (4,), "f"), (glm.dvec1, (1,), "d"), (glm.dvec2, (2,), "d"), (glm.dvec3, (3,), "d"), (glm.dvec4, (4,), "d"), (glm.ivec1, (1,), "i"), (glm.ivec2, (2,), "i"), (glm.ivec3, (3,), "i"), (glm.ivec4, (4,), "i"), (glm.uvec1, (1,), "I"), (glm.uvec2, (2,), "I"), (glm.uvec3, (3,), "I"), (glm.uvec4, (4,), "I"), (glm.i8vec1, (1,), "b"), (glm.i8vec2, (2,), "b"), (glm.i8vec3, (3,), "b"), (glm.i8vec4, (4,), "b"), (glm.u8vec1, (1,), "B"), (glm.u8vec2, (2,), "B"), (glm.u8vec3, (3,), "B"), (glm.u8vec4, (4,), "B"), (glm.i16vec1, (1,), "h"), (glm.i16vec2, (2,), "h"), (glm.i16vec3, (3,), "h"), (glm.i16vec4, (4,), "h"), (glm.u16vec1, (1,), "H"), (glm.u16vec2, (2,), "H"), (glm.u16vec3, (3,), "H"), (glm.u16vec4, (4,), "H"), (glm.i64vec1, (1,), "q"), (glm.i64vec2, (2,), "q"), (glm.i64vec3, (3,), "q"), (glm.i64vec4, (4,), "q"), (glm.u64vec1, (1,), "Q"), (glm.u64vec2, (2,), "Q"), (glm.u64vec3, (3,), "Q"), (glm.u64vec4, (4,), "Q"), (glm.bvec1, (1,), "?"), (glm.bvec2, (2,), "?"), (glm.bvec3, (3,), "?"), (glm.bvec4, (4,), "?"), (glm.mat2x2, (2, 2), "f"), (glm.mat2x3, (3, 2), "f"), (glm.mat2x4, (4, 2), "f"), (glm.mat3x2, (2, 3), "f"), (glm.mat3x3, (3, 3), "f"), (glm.mat3x4, (4, 3), "f"), (glm.mat4x2, (2, 4), "f"), (glm.mat4x3, (3, 4), "f"), (glm.mat4x4, (4, 4), "f"), (glm.dmat2x2, (2, 2), "d"), (glm.dmat2x3, (3, 2), "d"), (glm.dmat2x4, (4, 2), "d"), (glm.dmat3x2, (2, 3), "d"), (glm.dmat3x3, (3, 3), "d"), (glm.dmat3x4, (4, 3), "d"), (glm.dmat4x2, (2, 4), "d"), (glm.dmat4x3, (3, 4), "d"), (glm.dmat4x4, (4, 4), "d"), (glm.imat2x2, (2, 2), "i"), (glm.imat2x3, (3, 2), "i"), (glm.imat2x4, (4, 2), "i"), (glm.imat3x2, (2, 3), "i"), (glm.imat3x3, (3, 3), "i"), (glm.imat3x4, (4, 3), "i"), (glm.imat4x2, (2, 4), "i"), (glm.imat4x3, (3, 4), "i"), (glm.imat4x4, (4, 4), "i"), (glm.umat2x2, (2, 2), "I"), (glm.umat2x3, (3, 2), "I"), (glm.umat2x4, (4, 2), "I"), (glm.umat3x2, (2, 3), "I"), (glm.umat3x3, (3, 3), "I"), (glm.umat3x4, (4, 3), "I"), (glm.umat4x2, (2, 4), "I"), (glm.umat4x3, (3, 4), "I"), (glm.umat4x4, (4, 4), "I"), (glm.quat, (4,), "f"), (glm.dquat, (4,), "d"), ): check_buffer_protocol(t,s,f) arr = glm.array(glm.mat4(), glm.mat4(2)) mv = memoryview(arr) assert glm.array(mv) == arr, arr for T in (ctypes.c_float, ctypes.c_double, ctypes.c_char, ctypes.c_byte, ctypes.c_ubyte, ctypes.c_short, ctypes.c_ushort, ctypes.c_int, ctypes.c_uint, ctypes.c_long, ctypes.c_ulong, ctypes.c_longlong, ctypes.c_ulonglong, ctypes.c_size_t, ctypes.c_ssize_t, ctypes.c_void_p): assert glm.vec1((T*1)()) == glm.vec1() #/buffer protocol # # lists and tuples # def test_lists_and_tuples(): for tp, arg in ( (glm.vec1, (1,)), (glm.vec2, (1, 2,)), (glm.vec3, (1, 2, 3,)), (glm.vec4, (1, 2, 3, 4)), (glm.vec1, [1]), (glm.vec2, [1, 2]), (glm.vec3, [1, 2, 3]), (glm.vec4, [1, 2, 3, 4]), (glm.mat2x2, ((1, 2), (3, 4))), (glm.mat2x3, ((1, 2, 3), (4, 5, 6))), (glm.mat2x4, ((1, 2, 3, 4), (5, 6, 7, 8))), (glm.mat3x2, ((1, 2), (3, 4), (5, 6))), (glm.mat3x3, ((1, 2, 3), (4, 5, 6), (7, 8, 9))), (glm.mat3x4, ((1, 2, 3, 4), (5, 6, 7, 8), (9, 10, 11, 12))), (glm.mat4x2, ((1, 2), (3, 4), (5, 6), (7, 8))), (glm.mat4x3, ((1, 2, 3), (4, 5, 6), (7, 8, 9), (10, 11, 12))), (glm.mat4x4, ((1, 2, 3, 4), (5, 6, 7, 8), (9, 10, 11, 12), (13, 14, 15, 16))), (glm.quat, (1, 2, 3, 4)), ): fassert(tp, [arg]); #/lists and tuples # # copy module # def test_copy(): for args in gen_args("V_M_Q"): fassert(copy.copy, args) fassert(copy.deepcopy, args) arr = glm.array(glm.mat4(), glm.mat4(2)) assert copy.copy(arr) == arr, arr assert copy.deepcopy(arr) == arr, arr #/copy module # # to_list # def test_to_list(): for args in gen_args("V_Q"): for arg in args: assert arg.to_list() == [x for x in arg] for args in gen_args("M"): for arg in args: assert arg.to_list() == [[y for y in x] for x in arg] arr = glm.array(glm.mat4(), glm.mat4(2)) assert arr.to_list() == [glm.mat4(), glm.mat4(2)] #/to_list # # to_tuple # def test_to_tuple(): for args in gen_args("V_Q"): for arg in args: assert arg.to_tuple() == tuple([x for x in arg]) for args in gen_args("M"): for arg in args: assert arg.to_tuple() == tuple([tuple([y for y in x]) for x in arg]) arr = glm.array(glm.mat4(), glm.mat4(2)) assert arr.to_tuple() == (glm.mat4(), glm.mat4(2)) #/to_tuple # # to/from_bytes # def test_to_from_bytes(): for obj in gen_obj("V_M_Q"): assert type(obj).from_bytes(obj.to_bytes()) == obj, repr(obj) for obj in gen_obj("#MV"): assert obj.to_bytes() == bytes(obj), repr(obj) for args in gen_args("VVV_MMM_QQQ"): arr = glm.array(args) assert arr.from_bytes(arr.to_bytes(), arr.element_type) == arr #/to/from_bytes # # reinterpret_cast # def test_reinterpret_cast(): arr = glm.array.zeros(8*3*3*4*4, glm.uint8) for type_ in (vector_types + matrix_types + quat_types + ctypes_types): assert arr.reinterpret_cast(type_).element_type == type_ #/reinterpret_cast # # pickling # import os if (eval(os.environ.get("TEST_PICKLING", "True"))): from pickle import dumps, loads def test_pickling(): for obj in gen_obj("V_Q"): assert loads(dumps(obj)) == obj, obj for obj in gen_obj("M"): assert loads(dumps(obj)) == obj, obj assert loads(dumps(obj[0])) == obj[0], obj arr = glm.array(glm.mat4(), glm.mat4(2)) assert loads(dumps(arr)) == arr #/pickling # # other # def test_other(): test_values = [-1, 0, 2, 3] assert all([(+a) == glm.pos(a) for a in test_values]) assert all([(-a) == glm.neg(a) for a in test_values]) assert all([(~a) == glm.inv(a) for a in test_values]) test_values = [(1, 2), (3, 4), (-1, 1), (0, 2)] assert all([(a + b) == glm.add(a,b) for a, b in test_values]) assert all([(a - b) == glm.sub(a,b) for a, b in test_values]) assert all([(a * b) == glm.mul(a,b) for a, b in test_values]) assert all([(a / b) == glm.div(a,b) for a, b in test_values]) assert all([(a // b) == glm.floordiv(a,b) for a, b in test_values]) assert all([(a % b) == glm.mod(a,b) for a, b in test_values]) assert all([(a << b) == glm.lshift(a,b) for a, b in test_values]) assert all([(a >> b) == glm.rshift(a,b) for a, b in test_values]) assert all([(a & b) == glm.and_(a,b) for a, b in test_values]) assert all([(a ^ b) == glm.xor(a,b) for a, b in test_values]) assert all([(a | b) == glm.or_(a,b) for a, b in test_values]) assert all([(-1 if a < b else 1 if a > b else 0) == glm.cmp(a,b) for a, b in test_values]) test_values = [(1, 2, 3), (3, 4, 5), (-1, 1, 0), (0, 2, 3)] assert all([(x if b else y) == glm.if_else(b, x, y) for b, x, y in test_values]) #/other # ## DETAIL ## # func_packing # def test_func_packing(): fassert(glm.packDouble2x32, (glm.uvec2(randf()),)) fassert(glm.packUnorm2x16, (glm.vec2(randfs()),)) fassert(glm.packSnorm2x16, (glm.vec2(randfs()),)) fassert(glm.packSnorm4x8, (glm.vec4(randfs()),)) fassert(glm.packUnorm4x8, (glm.vec4(randfs()),)) fassert(glm.packHalf2x16, (glm.vec2(randfs()),)) fassert(glm.unpackDouble2x32, (randfs(),)) fassert(glm.unpackUnorm2x16, (int(randf()),)) fassert(glm.unpackSnorm2x16, (int(randf()),)) fassert(glm.unpackUnorm4x8, (int(randf()),)) fassert(glm.unpackSnorm4x8, (int(randf()),)) fassert(glm.unpackHalf2x16, (int(randf()),)) #/func_packing # # func_integer # def test_func_integer(): for args in gen_args("#uVVV__I"): fassert(glm.uaddCarry, args) for args in gen_args("#uVVV__I"): fassert(glm.usubBorrow, args) for args in gen_args("#uVVVV__I"): fassert(glm.umulExtended, args) for args in gen_args("#uVVVV__i"): fassert(glm.imulExtended, args) for args in gen_args("#uNNN_VNN__iqsuIQSU"): fassert(glm.bitfieldExtract, args) for args in gen_args("#uNNNN_VVNN__iqIQ"): fassert(glm.bitfieldInsert, args) for args in gen_args("#uV_N__iqIQ"): fassert(glm.bitfieldReverse, args) for args in gen_args("#uV_N__iqsuIQSU"): fassert(glm.bitCount, args) fassert(glm.findLSB, args) fassert(glm.findMSB, args) #/func_integer # # func_vector_relational # def test_func_vector_relational(): for args in gen_args("#uVV_QQ_NNNi_VfVfNi_VFVFNi_MfMfNi_MFMFNi"): # need to add support for _MM fassert(glm.equal, args) fassert(glm.notEqual, args) for args in gen_args("#uVV_QQ"): fassert(glm.lessThan, args) fassert(glm.lessThanEqual, args) fassert(glm.greaterThan, args) fassert(glm.greaterThanEqual, args) for args in gen_args("#uV__B"): fassert(glm.any, args) fassert(glm.all, args) fassert(glm.not_, args) #/func_vector_relational # # func_exponential # def test_func_exponential(): for args in gen_args("VV_QN_NN__fF"): fassert(glm.pow, args) for args in gen_args("N_V_Q__fF"): fassert(glm.exp, args) fassert(glm.log, args) fassert(glm.sqrt, args) for args in gen_args("N_V__fF"): fassert(glm.exp2, args) fassert(glm.log2, args) fassert(glm.inversesqrt, args) #/func_exponential # # func_common # def test_func_common(): for args in gen_args("N_V__fF"): fassert(glm.abs, args) fassert(glm.floor, args) fassert(glm.trunc, args) fassert(glm.round, args) fassert(glm.roundEven, args) fassert(glm.ceil, args) fassert(glm.fract, args) for args in gen_args("N_V__fFiqsu"): fassert(glm.sign, args) for args in gen_args("NN_VV_VN__fF"): fassert(glm.mod, args) for args in gen_args("NN_VV_VN_NNN_VVV_NNNN_VVVV__fFiqsuIQSU"): fassert(glm.min, args) fassert(glm.max, args) for args in gen_args("NN_VV_NNN_VVV_NNNN_VVVV_NNNNNNNNNNNN_VVVVVVVVVVVV__fFiqsuIQSU"): fassert(glm.min, (args,)) fassert(glm.max, (args,)) for args in gen_args("NN_VV_VN_NNN_VVV_NNNN_VVVV__fF"): fassert(glm.fmin, args) fassert(glm.fmax, args) for args in gen_args("NNN_VVV_VNN__fF"): fassert(glm.clamp, args) for args in list(gen_args("NNNB_NNN_QQN__fF")) + list(gen_args("VVN_VVVf_VVVF_VVVB")): # need to add support for _MMN_MMMf_MMMF fassert(glm.mix, args) for args in gen_args("NN_NV_VV"): fassert(glm.step, args) for args in gen_args("NNN_NNV_VVV__fF"): fassert(glm.smoothstep, args) for args in gen_args("N_V_Q__fF"): fassert(glm.isnan, args) fassert(glm.isinf, args) fassert(glm.fma, ((randfs(), randfs(), randfs()))) for args in gen_args("N_VVi__fF"): fassert(glm.frexp, args) for args in gen_args("VVi__fF"): fassert(glm.ldexp, args) for args in gen_args("N_V__f"): fassert(lambda x: glm.intBitsToFloat(glm.floatBitsToInt(x)), args) fassert(lambda x: glm.uintBitsToFloat(glm.floatBitsToUint(x)), args) for args in gen_args("N_VV__fF"): fassert(glm.modf, args) #/func_common # # func_geometric # def test_func_geometric(): for args in gen_args("N_V_Q__fF"): fassert(glm.length, args) for args in gen_args("NN_VV__fF"): fassert(glm.distance, args) for args in gen_args("NN_VV_QQ__fF"): fassert(glm.dot, args) for args in gen_args("V3V3_QQ__fF"): fassert(glm.cross, args) for args in gen_args("V_Q__fF"): fassert(glm.normalize, args) for args in gen_args("NNN_VVV__fF"): fassert(glm.faceforward, args) for args in gen_args("NN_VV__fF"): fassert(glm.reflect, args) for args in gen_args("NNN_VVN__fF"): fassert(glm.refract, args) #/func_geometric # # func_matrix # def test_func_matrix(): for args in gen_args("MM__fF"): fassert(glm.matrixCompMult, args) for args in gen_args("V2V2_V2V3_V2V4_V3V2_V3V3_V3V4_V4V2_V4V3_V4V4__fF"): fassert(glm.outerProduct, args) for args in gen_args("M__fF"): fassert(glm.transpose, args) for args in gen_args("M22_M33_M44__fF"): fassert(glm.determinant, args) for args in gen_args("M22_M33_M44_Q__fF"): fassert(glm.inverse, args) #/func_matrix # # func_trigonometric # def test_func_trigonometric(): for args in gen_args("N_V__fF"): fassert(glm.radians, args) fassert(glm.degrees, args) fassert(glm.sin, args) fassert(glm.cos, args) fassert(glm.tan, args) fassert(glm.asin, args) fassert(glm.acos, args) fassert(glm.sinh, args) fassert(glm.cosh, args) fassert(glm.tanh, args) fassert(glm.asinh, args) fassert(glm.acosh, args) fassert(glm.atanh, args) for args in gen_args("NN_VV_N_V__fF"): fassert(glm.atan, args) #/func_trigonometric # ##/DETAIL ## ## EXTENSIONS ## # color_space # def test_color_space(): for args in gen_args("V_VN__fF"): fassert(glm.convertLinearToSRGB, args) fassert(glm.convertSRGBToLinear, args) #/color_space # # constants # def test_constants(): fassert(glm.epsilon, (())) fassert(glm.zero, (())) fassert(glm.one, (())) fassert(glm.pi, (())) fassert(glm.two_pi, (())) fassert(glm.root_pi, (())) fassert(glm.half_pi, (())) fassert(glm.three_over_two_pi, (())) fassert(glm.quarter_pi, (())) fassert(glm.one_over_pi, (())) fassert(glm.one_over_two_pi, (())) fassert(glm.two_over_pi, (())) fassert(glm.four_over_pi, (())) fassert(glm.two_over_root_pi, (())) fassert(glm.one_over_root_two, (())) fassert(glm.root_half_pi, (())) fassert(glm.root_two_pi, (())) fassert(glm.root_ln_four, (())) fassert(glm.e, (())) fassert(glm.euler, (())) fassert(glm.root_two, (())) fassert(glm.root_three, (())) fassert(glm.root_five, (())) fassert(glm.ln_two, (())) fassert(glm.ln_ten, (())) fassert(glm.ln_ln_two, (())) fassert(glm.third, (())) fassert(glm.two_thirds, (())) fassert(glm.golden_ratio, (())) #/constants # # epsilon # def test_epsilon(): for args in gen_args("NNN_VVN_QQN_VVV__fF"): fassert(glm.epsilonEqual, args) fassert(glm.epsilonNotEqual, args) #/epsilon # # integer # def test_integer(): for args in gen_args("#uN_V__fF"): fassert(glm.iround, args) fassert(glm.uround, args) #/integer # # matrix_inverse # def test_matrix_inverse(): for args in gen_args("M33_M44__fF"): fassert(glm.affineInverse, args) for args in gen_args("M22_M33_M44__fF"): fassert(glm.inverseTranspose, args) #/matrix_inverse # # matrix_transform # def test_matrix_transform(): for type_ in matrix_types: fassert(glm.identity, (type_,)) for args in gen_args("M44V3__fF"): fassert(glm.translate, args) fassert(glm.scale, args) fassert(glm.scale_slow, args) for args in gen_args("M44NV3_QNV3__fF"): fassert(glm.rotate, args) for args in gen_args("M44NV3__fF"): fassert(glm.rotate_slow, args) for args in gen_args("NNNN_NNNNNN"): fassert(glm.ortho, args) for args in gen_args("NNNNNN"): fassert(glm.orthoLH_ZO, args) fassert(glm.orthoLH_NO, args) fassert(glm.orthoRH_ZO, args) fassert(glm.orthoRH_NO, args) fassert(glm.orthoZO, args) fassert(glm.orthoNO, args) fassert(glm.orthoLH, args) fassert(glm.orthoRH, args) fassert(glm.frustum, args) fassert(glm.frustumLH_ZO, args) fassert(glm.frustumLH_NO, args) fassert(glm.frustumRH_ZO, args) fassert(glm.frustumRH_NO, args) fassert(glm.frustumZO, args) fassert(glm.frustumNO, args) fassert(glm.frustumLH, args) fassert(glm.frustumRH, args) for args in gen_args("NNNN"): fassert(glm.perspective, args) fassert(glm.perspectiveLH_ZO, args) fassert(glm.perspectiveLH_NO, args) fassert(glm.perspectiveRH_ZO, args) fassert(glm.perspectiveRH_NO, args) fassert(glm.perspectiveZO, args) fassert(glm.perspectiveNO, args) fassert(glm.perspectiveLH, args) fassert(glm.perspectiveRH, args) for args in gen_args("#uNNNNN"): fassert(glm.perspectiveFov, args) fassert(glm.perspectiveFovLH_ZO, args) fassert(glm.perspectiveFovLH_NO, args) fassert(glm.perspectiveFovRH_ZO, args) fassert(glm.perspectiveFovRH_NO, args) fassert(glm.perspectiveFovZO, args) fassert(glm.perspectiveFovNO, args) fassert(glm.perspectiveFovLH, args) fassert(glm.perspectiveFovRH, args) for args in gen_args("NNN"): fassert(glm.infinitePerspective, args) fassert(glm.infinitePerspectiveRH, args) fassert(glm.infinitePerspectiveLH, args) for args in gen_args("NNN_NNNN"): fassert(glm.tweakedInfinitePerspective, args) for args in gen_args("V3M44M44V4__fF"): fassert(glm.project, args) fassert(glm.projectNO, args) fassert(glm.projectZO, args) fassert(glm.unProject, args) fassert(glm.unProjectNO, args) fassert(glm.unProjectZO, args) for args in gen_args("#pV2V2V4__fF"): fassert(glm.pickMatrix, args) for args in gen_args("V3V3V3__fF"): fassert(glm.lookAt, args) fassert(glm.lookAtRH, args) fassert(glm.lookAtLH, args) #/matrix_transform # # quaternion # def test_quaternion(): for args in gen_args("V3V3__fF"): fassert(glm.quatLookAt, args) fassert(glm.quatLookAtLH, args) fassert(glm.quatLookAtRH, args) for args in gen_args("#dQQN__fF"): fassert(glm.lerp, args) for args in gen_args("QQN__fF"): fassert(glm.slerp, args) for args in gen_args("Q"): fassert(glm.conjugate, args) fassert(glm.eulerAngles, args) fassert(glm.roll, args) fassert(glm.pitch, args) fassert(glm.yaw, args) fassert(glm.mat3_cast, args) fassert(glm.mat4_cast, args) fassert(glm.angle, args) fassert(glm.axis, args) for args in gen_args("M33_M44__fF"): fassert(glm.quat_cast, args) for args in gen_args("NV3__fF"): fassert(glm.angleAxis, args) #/quaternion # # matrix_access # def test_matrix_access(): for T_id in matrix_type_ids: T = prefixes[T_id] for C in range(2, 5): for R in range(2, 5): m = getattr(glm, "{T}mat{C}x{R}".format(T=T,C=C,R=R))() row_i = random.randrange(R) row_v = getattr(glm, "{T}vec{C}".format(T=T, C=C))() column_i = random.randrange(C) column_v = getattr(glm, "{T}vec{R}".format(T=T, R=R))() fassert(glm.row, (m, row_i)) fassert(glm.row, (m, row_i, row_v)) fassert(glm.column, (m, column_i)) fassert(glm.column, (m, column_i, column_v)) #/matrix_access # # noise # def test_noise(): for args in gen_args("V2_V3_V4_V2V2_V3V3_V4V4__fF"): fassert(glm.perlin, args) for args in gen_args("V2_V3_V4__fF"): fassert(glm.simplex, args) #/noise # # packing # def test_packing(): fassert(glm.packInt2x8, (glm.i8vec2(),)) fassert(glm.unpackInt2x8, (0,)) fassert(glm.packInt4x8, (glm.i8vec4(),)) fassert(glm.unpackInt4x8, (0,)) fassert(glm.packInt2x16, (glm.i16vec2(),)) fassert(glm.unpackInt2x16, (0,)) fassert(glm.packInt4x16, (glm.i16vec4(),)) fassert(glm.unpackInt4x16, (0,)) fassert(glm.packInt2x32, (glm.i32vec2(),)) fassert(glm.unpackInt2x32, (0,)) fassert(glm.packUint2x8, (glm.u8vec2(),)) fassert(glm.unpackUint2x8, (0,)) fassert(glm.packUint4x8, (glm.u8vec4(),)) fassert(glm.unpackUint4x8, (0,)) fassert(glm.packUint2x16, (glm.u16vec2(),)) fassert(glm.unpackUint2x16, (0,)) fassert(glm.packUint4x16, (glm.u16vec4(),)) fassert(glm.unpackUint4x16, (0,)) fassert(glm.packUint2x32, (glm.u32vec2(),)) fassert(glm.unpackUint2x32, (0,)) fassert(glm.packHalf1x16, (0.,)) fassert(glm.unpackHalf1x16, (0,)) fassert(glm.packHalf4x16, (glm.vec4(),)) fassert(glm.unpackHalf4x16, (0,)) fassert(glm.packUnorm1x8, (0.,)) fassert(glm.unpackUnorm1x8, (0,)) fassert(glm.packUnorm2x8, (glm.vec2(),)) fassert(glm.unpackUnorm2x8, (0,)) fassert(glm.packUnorm1x16, (0.,)) fassert(glm.unpackUnorm1x16, (0,)) fassert(glm.packUnorm4x16, (glm.vec4(),)) fassert(glm.unpackUnorm4x16, (0,)) fassert(glm.packUnorm3x10_1x2, (glm.vec4(),)) fassert(glm.unpackUnorm3x10_1x2, (0,)) fassert(glm.packUnorm2x4, (glm.vec2(),)) fassert(glm.unpackUnorm2x4, (0,)) fassert(glm.packUnorm4x4, (glm.vec4(),)) fassert(glm.unpackUnorm4x4, (0,)) fassert(glm.packUnorm1x5_1x6_1x5, (glm.vec3(),)) fassert(glm.unpackUnorm1x5_1x6_1x5, (0,)) fassert(glm.packUnorm3x5_1x1, (glm.vec4(),)) fassert(glm.unpackUnorm3x5_1x1, (0,)) fassert(glm.packUnorm2x3_1x2, (glm.vec3(),)) fassert(glm.unpackUnorm2x3_1x2, (0,)) fassert(glm.packSnorm1x8, (0.,)) fassert(glm.unpackSnorm1x8, (0,)) fassert(glm.packSnorm2x8, (glm.vec2(),)) fassert(glm.unpackSnorm2x8, (0,)) fassert(glm.packSnorm1x16, (0.,)) fassert(glm.unpackSnorm1x16, (0,)) fassert(glm.packSnorm4x16, (glm.vec4(),)) fassert(glm.unpackSnorm4x16, (0,)) fassert(glm.packSnorm3x10_1x2, (glm.vec4(),)) fassert(glm.unpackSnorm3x10_1x2, (0,)) fassert(glm.packI3x10_1x2, (glm.ivec4(),)) fassert(glm.unpackI3x10_1x2, (0,)) fassert(glm.packU3x10_1x2, (glm.uvec4(),)) fassert(glm.unpackU3x10_1x2, (0,)) fassert(glm.packF2x11_1x10, (glm.vec3(),)) fassert(glm.unpackF2x11_1x10, (0,)) fassert(glm.packF3x9_E1x5, (glm.vec3(),)) fassert(glm.unpackF3x9_E1x5, (0,)) for args in gen_args("V3__fF"): fassert(glm.packRGBM, args) for args in gen_args("V4__fF"): fassert(glm.unpackRGBM, args) for args in gen_args("V__f"): fassert(glm.packHalf, args) for args in gen_args("V__S"): fassert(glm.unpackHalf, args) for args in gen_args("V__fF"): for dt in (glm.int8, glm.int16, glm.int32, glm.int64, glm.uint8, glm.uint16, glm.uint32, glm.uint64): fassert(glm.packSnorm, (dt, args[0])) for args in gen_args("V__iqsuIQSU"): for dt in (glm.float32, glm.float64): fassert(glm.unpackSnorm, (dt, args[0])) for args in gen_args("V__fF"): for dt in (glm.uint8, glm.uint16, glm.uint32, glm.uint64): fassert(glm.packUnorm, (dt, args[0])) for args in gen_args("V__IQSU"): for dt in (glm.float32, glm.float64): fassert(glm.unpackUnorm, (dt, args[0])) #/packing # # random # def test_random(): for args in gen_args("#xNN_VV__fFiqsuIQSU"): comp = args[0] > args[1] if type(comp) != bool: comp = any(comp) if len(args) == 2 and comp: args = (args[1], args[0]) fassert(glm.linearRand, args) fassert(glm.gaussRand, args) for args in gen_args("#pN"): fassert(glm.circularRand, args) fassert(glm.sphericalRand, args) fassert(glm.diskRand, args) fassert(glm.ballRand, args) fassert(glm.setSeed, (0,)) #/random # # round # def test_round(): for args in gen_args("N_V__iqsu"): # need to add support for isPowerOfTwo #fassert(glm.isPowerOfTwo, args) fassert(glm.ceilPowerOfTwo, args) fassert(glm.floorPowerOfTwo, args) fassert(glm.roundPowerOfTwo, args) for args in gen_args("#pNN_VV__iqsu"): # need to add support for isMultiple fassert(glm.ceilMultiple, args) fassert(glm.floorMultiple, args) fassert(glm.roundMultiple, args) #/round # # reciprocal # def test_reciprocal(): for args in gen_args("N_V__fF"): fassert(glm.sec, args) fassert(glm.csc, args) fassert(glm.cot, args) fassert(glm.asec, args) fassert(glm.acsc, args) fassert(glm.acot, args) fassert(glm.sech, args) fassert(glm.csch, args) fassert(glm.coth, args) fassert(glm.asech, args) fassert(glm.acsch, args) fassert(glm.acoth, args) #/reciprocal # # type_ptr # def test_type_ptr(): for args in gen_args("V2_V3_V4_M_Q"): fassert(glm.value_ptr, args) for args in list(gen_args("V_M_Q")) + [(x,) for x in (list(vector_types) + list(matrix_types) + list(quat_types))]: fassert(glm.sizeof, args) for L in range(2, 5): for T in prefixes: vec = getattr(glm, "{T}vec{L}".format(T=T,L=L))() ptr = glm.value_ptr(vec) fassert(getattr(glm, "make_vec{L}".format(L=L)), (ptr,)) for C in range(2, 5): for R in range(2, 5): for T_id in matrix_type_ids: T = prefixes[T_id] mat = getattr(glm, "{T}mat{C}x{R}".format(T=T,C=C,R=R))() ptr = glm.value_ptr(mat) fassert(getattr(glm, "make_mat{C}x{R}".format(C=C,R=R)), (ptr,)) for T_id in quat_type_ids: T = prefixes[T_id] quat = getattr(glm, "{T}quat".format(T=T))() ptr = glm.value_ptr(quat) fassert(glm.make_quat, (ptr,)) #/type_ptr # # ulp # def test_ulp(): for args in gen_args("#uN_V_NNi_VNi_VVi__fF"): fassert(glm.next_float, args) fassert(glm.prev_float, args) for args in gen_args("NN_VV__fF"): fassert(glm.float_distance, args) #/ulp # ##/EXTENSIONS ## ## UNSTABLE EXTENSIONS ## # polar_coordinates # def test_polar_coordinated(): for args in gen_args("V3__fF"): fassert(glm.polar, args) for args in gen_args("V2__fF"): fassert(glm.euclidean, args) #/polar_coordinates # # norm # def test_norm(): for args in gen_args("VV__fF"): fassert(glm.distance2, args) for args in gen_args("V_N__fF"): fassert(glm.length2, args) for args in gen_args("V3V3_V3__fF"): fassert(glm.l1Norm, args) for args in gen_args("V3V3_V3__fF"): fassert(glm.l2Norm, args) for args in gen_args("V3V3_V3__fF"): fassert(glm.lMaxNorm, args) for args in gen_args("#uV3V3Ni_V3Ni__fF"): fassert(glm.lxNorm, args) #/norm # # matrix_decompose # def test_matrix_decompose(): for args in gen_args("M44V3QV3V3V4__fF"): fassert(glm.decompose, args) #/matrix_decompose # # matrix_transform_2d # def test_matrix_transform_2d(): for args in gen_args("M33N__fF"): fassert(glm.rotate, args) fassert(glm.shearX, args) fassert(glm.shearY, args) for args in gen_args("M33V2__fF"): fassert(glm.scale, args) fassert(glm.translate, args) #/matrix_transform_2d # # rotate_vector # def test_rotate_vector(): for args in gen_args("V3V3__fF"): fassert(glm.orientation, args) for args in gen_args("V2N_V3NV3_V4NV3__fF"): fassert(glm.rotate, args) for args in gen_args("V3N_V4N__fF"): fassert(glm.rotateX, args) fassert(glm.rotateY, args) fassert(glm.rotateZ, args) for args in gen_args("V3V3N__fF"): fassert(glm.slerp, args) #/rotate_vector # # compatibility # def test_compatibility(): for args in gen_args("NNN_V2V2N_V3V3N_V4V4N_V2V2V2_V3V3V3_V4V4V4__fF"): fassert(glm.lerp, args) for args in gen_args("N_V__fF"): fassert(glm.isfinite, args) for args in gen_args("N_V2_V3_V4__fF"): fassert(glm.saturate, args) for args in gen_args("NN_VV_N_V__fF"): fassert(glm.atan2, args) #/compatibility # ##/UNSTABLE EXTENSIONS ## ### SPECIFIC TESTS ### def test_spec_init(): ## vectors ## # vec1 for vecT in vector_length_dict[1]: assert vecT() == vecT(0) and vecT(1) == vecT(1) and vecT(1).x and not vecT(0).x, vecT assert vecT(vecT(5)) == vecT(5) and vecT(vecT(4).xx) == vecT(4) and vecT(vecT(3).xxx) == vecT(3) and vecT(vecT(2).xxxx) == vecT(2), vecT assert vecT((8,)) == vecT(8) for vecB in vector_length_dict[1]: assert vecT(vecB(1)) == vecT(1), (vecT, vecB) assert vecT(x = 5) == vecT(5), vecT # vec2 for vecT in vector_length_dict[2]: assert vecT() == vecT(0) and vecT(1) == vecT(1) and vecT(1).x and not vecT(0).x and vecT(1).y and not vecT(0).y, vecT assert vecT(vecT(5)) == vecT(5) and vecT(vecT(3).xxx) == vecT(3) and vecT(vecT(2).xxxx) == vecT(2), vecT assert vecT(1, 2) == vecT(vecT(1).x, vecT(2).y) assert vecT(1, 2).yx == vecT(2, 1) assert vecT((8, 7)) == vecT(8, 7) for vecB in vector_length_dict[2]: assert vecT(vecB(1)) == vecT(1), (vecT, vecB) assert vecT(y = 8, x = 5) == vecT(5, 8), vecT # vec3 for vecT in vector_length_dict[3]: assert vecT() == vecT(0) and vecT(1) == vecT(1) and vecT(1).x and not vecT(0).x and vecT(1).y and not vecT(0).y and vecT(1).z and not vecT(0).z, vecT assert vecT(vecT(5)) == vecT(5) and vecT(vecT(2).xxxx) == vecT(2), vecT assert vecT(1, 2, 3) == vecT(vecT(1).x, vecT(2).y, vecT(3).z) assert vecT(1, vecT(1, 2, 3).yz) == vecT(1, 2, 3) and vecT(vecT(1, 2, 3).xy, 3) == vecT(1, 2, 3) assert vecT(1, 2, 3).zyx == vecT(3, 2, 1) assert vecT((8, 7, 6)) == vecT(8, 7, 6) for vecB in vector_length_dict[3]: assert vecT(vecB(1)) == vecT(1), (vecT, vecB) assert vecT(z = 3, y = 8, x = 5) == vecT(5, 8, 3), vecT # vec4 for vecT in vector_length_dict[4]: assert vecT() == vecT(0) and vecT(1) == vecT(1) and vecT(1).x and not vecT(0).x and vecT(1).y and not vecT(0).y and vecT(1).z and not vecT(0).z and vecT(1).w and not vecT(0).w, vecT assert vecT(vecT(5)) == vecT(5), vecT assert vecT(1, 2, 3, 4) == vecT(vecT(1).x, vecT(2).y, vecT(3).z, vecT(4).w) assert vecT(1, 2, 3, 4) == vecT(1, vecT(1, 2, 3, 4).yzw) == vecT(vecT(1, 2, 3, 4).xyz, 4) == vecT(vecT(1, 2, 3, 4).xy, vecT(1, 2, 3, 4).zw) == vecT(1, vecT(1, 2, 3, 4).yz, 4) assert vecT(1, 2, 3, 4).wzyx == vecT(4, 3, 2, 1) assert vecT((8, 7, 6, 5)) == vecT(8, 7, 6, 5) for vecB in vector_length_dict[4]: assert vecT(vecB(1)) == vecT(1), (vecT, vecB) assert vecT(w = 4, z = 3, y = 8, x = 5) == vecT(5, 8, 3, 4), vecT ##/vectors ## ## matrices ## # mat2x2 for matT in matrix_length_dict[(2, 2)]: assert matT() == matT(1) == matT(1, 0, 0, 1) assert matT(0) == matT(0, 0, 0, 0) and matT(2) == matT(2, 0, 0, 2) assert matT(1, 2, 3, 4) == matT(matT(1, 2, 3, 4)[0], matT(1, 2, 3, 4)[1]) assert matT(matT(1, 2, 3, 4)) == matT(1, 2, 3, 4) for matB in matrix_length_dict[(2, 2)]: assert matT(matB()) == matT(), (matT, matB) # mat2x3 for matT in matrix_length_dict[(2, 3)]: assert matT() == matT(1) == matT(1, 0, 0, 0, 1, 0) assert matT(0) == matT(0, 0, 0, 0, 0, 0) and matT(2) == matT(2, 0, 0, 0, 2, 0) assert matT(1, 2, 3, 4, 5, 6) == matT(matT(1, 2, 3, 4, 5, 6)[0], matT(1, 2, 3, 4, 5, 6)[1]) assert matT(matT(1, 2, 3, 4, 5, 6)) == matT(1, 2, 3, 4, 5, 6) for matB in matrix_length_dict[(2, 3)]: assert matT(matB()) == matT(), (matT, matB) # mat2x4 for matT in matrix_length_dict[(2, 4)]: assert matT() == matT(1) == matT(1, 0, 0, 0, 0, 1, 0, 0) assert matT(0) == matT(0, 0, 0, 0, 0, 0, 0, 0) and matT(2) == matT(2, 0, 0, 0, 0, 2, 0, 0) assert matT(1, 2, 3, 4, 5, 6, 7, 8) == matT(matT(1, 2, 3, 4, 5, 6, 7, 8)[0], matT(1, 2, 3, 4, 5, 6, 7, 8)[1]) assert matT(matT(1, 2, 3, 4, 5, 6, 7, 8)) == matT(1, 2, 3, 4, 5, 6, 7, 8) for matB in matrix_length_dict[(2, 4)]: assert matT(matB()) == matT(), (matT, matB) # mat3x2 for matT in matrix_length_dict[(3, 2)]: assert matT() == matT(1) == matT(1, 0, 0, 1, 0, 0) assert matT(0) == matT(0, 0, 0, 0, 0, 0) and matT(2) == matT(2, 0, 0, 2, 0, 0) assert matT(1, 2, 3, 4, 5, 6) == matT(matT(1, 2, 3, 4, 5, 6)[0], matT(1, 2, 3, 4, 5, 6)[1], matT(1, 2, 3, 4, 5, 6)[2]) assert matT(matT(1, 2, 3, 4, 5, 6)) == matT(1, 2, 3, 4, 5, 6) for matB in matrix_length_dict[(3, 2)]: assert matT(matB()) == matT(), (matT, matB) # mat3x3 for matT in matrix_length_dict[(3, 3)]: assert matT() == matT(1) == matT(1, 0, 0, 0, 1, 0, 0, 0, 1) assert matT(0) == matT(0, 0, 0, 0, 0, 0, 0, 0, 0) and matT(2) == matT(2, 0, 0, 0, 2, 0, 0, 0, 2) assert matT(1, 2, 3, 4, 5, 6, 7, 8, 9) == matT(matT(1, 2, 3, 4, 5, 6, 7, 8, 9)[0], matT(1, 2, 3, 4, 5, 6, 7, 8, 9)[1], matT(1, 2, 3, 4, 5, 6, 7, 8, 9)[2]) assert matT(matT(1, 2, 3, 4, 5, 6, 7, 8, 9)) == matT(1, 2, 3, 4, 5, 6, 7, 8, 9) for matB in matrix_length_dict[(3, 3)]: assert matT(matB()) == matT(), (matT, matB) # mat3x4 for matT in matrix_length_dict[(3, 4)]: assert matT() == matT(1) == matT(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0) assert matT(0) == matT(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) and matT(2) == matT(2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0) assert matT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) == matT(matT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)[0], matT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)[1], matT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)[2]) assert matT(matT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)) == matT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) for matB in matrix_length_dict[(3, 4)]: assert matT(matB()) == matT(), (matT, matB) # mat4x2 for matT in matrix_length_dict[(4, 2)]: assert matT() == matT(1) == matT(1, 0, 0, 1, 0, 0, 0, 0) assert matT(0) == matT(0, 0, 0, 0, 0, 0, 0, 0) and matT(2) == matT(2, 0, 0, 2, 0, 0, 0, 0) assert matT(1, 2, 3, 4, 5, 6, 7, 8) == matT(matT(1, 2, 3, 4, 5, 6, 7, 8)[0], matT(1, 2, 3, 4, 5, 6, 7, 8)[1], matT(1, 2, 3, 4, 5, 6, 7, 8)[2], matT(1, 2, 3, 4, 5, 6, 7, 8)[3]) assert matT(matT(1, 2, 3, 4, 5, 6, 7, 8)) == matT(1, 2, 3, 4, 5, 6, 7, 8) for matB in matrix_length_dict[(4, 2)]: assert matT(matB()) == matT(), (matT, matB) # mat4x3 for matT in matrix_length_dict[(4, 3)]: assert matT() == matT(1) == matT(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0) assert matT(0) == matT(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) and matT(2) == matT(2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0) assert matT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) == matT(matT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)[0], matT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)[1], matT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)[2], matT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)[3]) assert matT(matT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)) == matT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) for matB in matrix_length_dict[(4, 3)]: assert matT(matB()) == matT(), (matT, matB) # mat4x4 for matT in matrix_length_dict[(4, 4)]: assert matT() == matT(1) == matT(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1) assert matT(0) == matT(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) and matT(2) == matT(2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2) assert matT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) == matT(matT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)[0], matT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)[1], matT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)[2], matT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)[3]) assert matT(matT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)) == matT(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) for matB in matrix_length_dict[(4, 4)]: assert matT(matB()) == matT(), (matT, matB) ##/matrices ## ## quats ## for quaT in quat_types: assert quaT() == quaT(1, 0, 0, 0) assert quaT(1, 2, 3, 4).w == 1 and quaT(1, 2, 3, 4).x == 2 and quaT(1, 2, 3, 4).y == 3 and quaT(1, 2, 3, 4).z == 4 assert quaT(1, 2, 3, 4) == quaT(quaT(1, 2, 3, 4)) for quaB in quat_types: assert quaT(quaB(1, 2, 3, 4)) == quaT(1, 2, 3, 4) assert quaT(1, 2, 3, 4) == quaT(1, (2, 3, 4)) assert all(glm.epsilonEqual(glm.vec3(1, 0, 0), glm.vec3(0, 1, 0) * glm.quat(glm.vec3(1, 0, 0), glm.vec3(0, 1, 0)), 0.00001)) assert all(glm.epsilonEqual(glm.dvec3(1, 0, 0), glm.dvec3(0, 1, 0) * glm.dquat(glm.dvec3(1, 0, 0), glm.dvec3(0, 1, 0)), 0.00001)) eulerAngles = glm.radians(glm.vec3(10, 20, 30)) q = glm.quat(eulerAngles) assert glm.epsilonEqual(glm.pitch(q), glm.radians(10), 0.00001) assert glm.epsilonEqual(glm.yaw(q), glm.radians(20), 0.00001) assert glm.epsilonEqual(glm.roll(q), glm.radians(30), 0.00001) eulerAngles = glm.radians(glm.dvec3(10, 20, 30)) q = glm.dquat(eulerAngles) assert glm.epsilonEqual(glm.pitch(q), glm.radians(10), 0.00001) assert glm.epsilonEqual(glm.yaw(q), glm.radians(20), 0.00001) assert glm.epsilonEqual(glm.roll(q), glm.radians(30), 0.00001) ##/quats ## ## arrays ## for obj in gen_obj("#MV_M_Q"): assert glm.array(obj).repeat(2) == glm.array(obj, obj) == glm.array(glm.array(obj, obj)) == glm.array.as_reference(glm.array(obj, obj)) and glm.array(obj).repeat(4) == glm.array(obj, obj, obj, obj) == glm.array([obj, obj, obj, obj]) == glm.array(obj, obj).repeat(3)[:4] assert glm.array.zeros(5, type(obj)) for T in matrix_types + vector_types: assert glm.array.zeros(5, T) == glm.array([T(0)] * 5) for obj in gen_obj("V_M_Q"): assert glm.array(obj).element_type == type(obj) for cT in ctypes_types: assert glm.array(cT(2), cT(3)) == glm.array(cT, 2, 3) == glm.array.from_numbers(cT, 2, 3) assert glm.array(cT).ctype == cT ##/arrays ## def test_spec_add(): for vecT in vector_length_dict[1]: if (vecT == glm.bvec1): continue assert vecT(1) + vecT(1) == vecT(1 + 1) == (glm.array(vecT(1)) + glm.array(vecT(1)))[0] == (glm.array(vecT(1)) + vecT(1))[0] == (vecT(1) + glm.array(vecT(1)))[0] assert vecT(2) + vecT(3) == vecT(3) + vecT(2) == (glm.array(vecT(2)) + glm.array(vecT(3)))[0] == (glm.array(vecT(3)) + glm.array(vecT(2)))[0] assert vecT(1) + 2 == vecT(1 + 2) == 2 + vecT(1) == (glm.array(vecT(1)) + 2)[0] == (2 + glm.array(vecT(1)))[0] assert vecT(0) + vecT(0) == vecT(0) == (glm.array(vecT(0)) + glm.array(vecT(0)))[0] for vecT in vector_length_dict[2]: if (vecT == glm.bvec2): continue assert vecT(1, 2) + vecT(1, 2) == vecT(1 + 1, 2 + 2) == (glm.array(vecT(1, 2)) + glm.array(vecT(1, 2)))[0] assert vecT(2) + vecT(3) == vecT(3) + vecT(2) == (glm.array(vecT(2)) + glm.array(vecT(3)))[0] == (glm.array(vecT(3)) + glm.array(vecT(2)))[0] assert vecT(1) + 2 == vecT(1 + 2) == (glm.array(vecT(1)) + 2)[0] == (2 + glm.array(vecT(1)))[0] assert vecT(0) + vecT(0) == vecT(0) == (glm.array(vecT(0)) + glm.array(vecT(0)))[0] for vecT in vector_length_dict[3]: if (vecT == glm.bvec3): continue assert vecT(1, 2, 3) + vecT(1, 2, 3) == vecT(1 + 1, 2 + 2, 3 + 3) == (glm.array(vecT(1, 2, 3)) + glm.array(vecT(1, 2, 3)))[0] assert vecT(2) + vecT(3) == vecT(3) + vecT(2) == (glm.array(vecT(2)) + glm.array(vecT(3)))[0] == (glm.array(vecT(3)) + glm.array(vecT(2)))[0] assert vecT(1) + 2 == vecT(1 + 2) == (glm.array(vecT(1)) + 2)[0] == (2 + glm.array(vecT(1)))[0] assert vecT(0) + vecT(0) == vecT(0) == (glm.array(vecT(0)) + glm.array(vecT(0)))[0] for vecT in vector_length_dict[4]: if (vecT == glm.bvec4): continue assert vecT(1, 2, 3, 4) + vecT(1, 2, 3, 4) == vecT(1 + 1, 2 + 2, 3 + 3, 4 + 4) == (glm.array(vecT(1, 2, 3, 4)) + glm.array(vecT(1, 2, 3, 4)))[0] assert vecT(2) + vecT(3) == vecT(3) + vecT(2) == (glm.array(vecT(2)) + glm.array(vecT(3)))[0] == (glm.array(vecT(3)) + glm.array(vecT(2)))[0] assert vecT(1) + 2 == vecT(1 + 2) == (glm.array(vecT(1)) + 2)[0] == (2 + glm.array(vecT(1)))[0] assert vecT(0) + vecT(0) == vecT(0) == (glm.array(vecT(0)) + glm.array(vecT(0)))[0] for c in range(2, 5): for r in range(2, 5): for matT in matrix_length_dict[(c, r)]: assert matT(*range(c*r)) + matT(*range(c*r)) == matT(*map(lambda x: x + x, range(c*r))) == (glm.array(matT(*range(c*r))) + glm.array(matT(*range(c*r))))[0] assert matT(2) + matT(3) == matT(3) + matT(2) == (glm.array(matT(2)) + glm.array(matT(3)))[0] == (glm.array(matT(3)) + glm.array(matT(2)))[0] assert matT(1) + 2 == matT(*[(1 + 2) if C==R else 2 for C in range(c) for R in range(r)]) == (glm.array(matT(1)) + 2)[0] == (2 + glm.array(matT(1)))[0] assert matT(0) + matT(0) == matT(0) == (glm.array(matT(0)) + glm.array(matT(0)))[0] for quaT in quat_types: assert quaT(1, 2, 3, 4) + quaT(1, 2, 3, 4) == quaT(1 + 1, 2 + 2, 3 + 3, 4 + 4) == (glm.array(quaT(1, 2, 3, 4)) + glm.array(quaT(1, 2, 3, 4)))[0] assert quaT() + quaT() == quaT(1 + 1, 0, 0, 0) == (glm.array(quaT()) + glm.array(quaT()))[0] for cT in ctypes_types: assert glm.array(cT, 1, 2, 3) + glm.array(cT, 1, 2, 3) == glm.array(cT, 1 + 1, 2 + 2, 3 + 3) assert glm.array(cT, 1, 2, 3) + 2 == glm.array(cT, 1 + 2, 2 + 2, 3 + 2) == 2 + glm.array(cT, 1, 2, 3) def test_spec_sub(): for vecT in vector_length_dict[1]: if (vecT == glm.bvec1): continue assert vecT(1) - vecT(1) == vecT(1 - 1) == (glm.array(vecT(1)) - glm.array(vecT(1)))[0] == (glm.array(vecT(1)) - vecT(1))[0] == (vecT(1) - glm.array(vecT(1)))[0] assert vecT(2) - vecT(3) != vecT(3) - vecT(2) and (glm.array(vecT(2)) - glm.array(vecT(3)))[0] != (glm.array(vecT(3)) - glm.array(vecT(2)))[0] assert vecT(1) - 2 == vecT(1 - 2) == 1 - vecT(2) == (glm.array(vecT(1)) - 2)[0] == (1 - glm.array(vecT(2)))[0] assert vecT(0) - vecT(0) == vecT(0) == (glm.array(vecT(0)) - glm.array(vecT(0)))[0] for vecT in vector_length_dict[2]: if (vecT == glm.bvec2): continue assert vecT(1, 2) - vecT(1, 2) == vecT(1 - 1, 2 - 2) == (glm.array(vecT(1, 2)) - glm.array(vecT(1, 2)))[0] assert vecT(2) - vecT(3) != vecT(3) - vecT(2) and (glm.array(vecT(2)) - glm.array(vecT(3)))[0] != (glm.array(vecT(3)) - glm.array(vecT(2)))[0] assert vecT(1) - 2 == vecT(1 - 2) == (glm.array(vecT(1)) - 2)[0] == (1 - glm.array(vecT(2)))[0] assert vecT(0) - vecT(0) == vecT(0) == (glm.array(vecT(0)) - glm.array(vecT(0)))[0] for vecT in vector_length_dict[3]: if (vecT == glm.bvec3): continue assert vecT(1, 2, 3) - vecT(1, 2, 3) == vecT(1 - 1, 2 - 2, 3 - 3) == (glm.array(vecT(1, 2, 3)) - glm.array(vecT(1, 2, 3)))[0] assert vecT(2) - vecT(3) != vecT(3) - vecT(2) and (glm.array(vecT(2)) - glm.array(vecT(3)))[0] != (glm.array(vecT(3)) - glm.array(vecT(2)))[0] assert vecT(1) - 2 == vecT(1 - 2) == (glm.array(vecT(1)) - 2)[0] == (1 - glm.array(vecT(2)))[0] assert vecT(0) - vecT(0) == vecT(0) == (glm.array(vecT(0)) - glm.array(vecT(0)))[0] for vecT in vector_length_dict[4]: if (vecT == glm.bvec4): continue assert vecT(1, 2, 3, 4) - vecT(1, 2, 3, 4) == vecT(1 - 1, 2 - 2, 3 - 3, 4 - 4) == (glm.array(vecT(1, 2, 3, 4)) - glm.array(vecT(1, 2, 3, 4)))[0] assert vecT(2) - vecT(3) != vecT(3) - vecT(2) and (glm.array(vecT(2)) - glm.array(vecT(3)))[0] != (glm.array(vecT(3)) - glm.array(vecT(2)))[0] assert vecT(1) - 2 == vecT(1 - 2) == (glm.array(vecT(1)) - 2)[0] == (1 - glm.array(vecT(2)))[0] assert vecT(0) - vecT(0) == vecT(0) == (glm.array(vecT(0)) - glm.array(vecT(0)))[0] for c in range(2, 5): for r in range(2, 5): for matT in matrix_length_dict[(c, r)]: assert matT(*range(c*r)) - matT(*range(c*r)) == matT(*map(lambda x: x - x, range(c*r))) == (glm.array(matT(*range(c*r))) - glm.array(matT(*range(c*r))))[0] assert matT(2) - matT(3) != matT(3) - matT(2) and (glm.array(matT(2)) - glm.array(matT(3)))[0] != (glm.array(matT(3)) - glm.array(matT(2)))[0] assert matT(1) - 2 == matT(*[(1 - 2) if C==R else -2 for C in range(c) for R in range(r)]) == (glm.array(matT(1)) - 2)[0] if (c==r): assert 2 - matT(1) == (2 - glm.array(matT(1)))[0] assert matT(0) - matT(0) == matT(0) == (glm.array(matT(0)) - glm.array(matT(0)))[0] for quaT in quat_types: assert quaT(1, 2, 3, 4) - quaT(1, 2, 3, 4) == quaT(1 - 1, 2 - 2, 3 - 3, 4 - 4) == (glm.array(quaT(1, 2, 3, 4)) - glm.array(quaT(1, 2, 3, 4)))[0] assert quaT() - quaT() == quaT(1 - 1, 0, 0, 0) == (glm.array(quaT()) - glm.array(quaT()))[0] for cT in ctypes_types: if (cT == glm.c_bool): continue assert glm.array(cT, 1, 2, 3) - glm.array(cT, 1, 2, 3) == glm.array(cT, 1 - 1, 2 - 2, 3 - 3) assert glm.array(cT, 1, 2, 3) - 2 == glm.array(cT, 1 - 2, 2 - 2, 3 - 2) assert 2 - glm.array(cT, 1, 2, 3) == glm.array(cT, 2 - 1, 2 - 2, 2 - 3) def test_spec_mul(): for vecT in vector_length_dict[1]: if (vecT == glm.bvec1): continue assert vecT(1) * vecT(1) == vecT(1 * 1) == (glm.array(vecT(1)) * glm.array(vecT(1)))[0] == (glm.array(vecT(1)) * vecT(1))[0] == (vecT(1) * glm.array(vecT(1)))[0] assert vecT(2) * vecT(3) == vecT(3) * vecT(2) == (glm.array(vecT(2)) * glm.array(vecT(3)))[0] == (glm.array(vecT(3)) * glm.array(vecT(2)))[0] assert vecT(1) * 2 == vecT(1 * 2) == 2 * vecT(1) == (glm.array(vecT(1)) * 2)[0] == (2 * glm.array(vecT(1)))[0] assert vecT(0) * vecT(0) == vecT(0) == (glm.array(vecT(0)) * glm.array(vecT(0)))[0] for vecT in vector_length_dict[2]: if (vecT == glm.bvec2): continue assert vecT(1, 2) * vecT(1, 2) == vecT(1 * 1, 2 * 2) == (glm.array(vecT(1, 2)) * glm.array(vecT(1, 2)))[0] assert vecT(2) * vecT(3) == vecT(3) * vecT(2) == (glm.array(vecT(2)) * glm.array(vecT(3)))[0] == (glm.array(vecT(3)) * glm.array(vecT(2)))[0] assert vecT(1) * 2 == vecT(1 * 2) == (glm.array(vecT(1)) * 2)[0] == (2 * glm.array(vecT(1)))[0] assert vecT(0) * vecT(0) == vecT(0) == (glm.array(vecT(0)) * glm.array(vecT(0)))[0] for vecT in vector_length_dict[3]: if (vecT == glm.bvec3): continue assert vecT(1, 2, 3) * vecT(1, 2, 3) == vecT(1 * 1, 2 * 2, 3 * 3) == (glm.array(vecT(1, 2, 3)) * glm.array(vecT(1, 2, 3)))[0] assert vecT(2) * vecT(3) == vecT(3) * vecT(2) == (glm.array(vecT(2)) * glm.array(vecT(3)))[0] == (glm.array(vecT(3)) * glm.array(vecT(2)))[0] assert vecT(1) * 2 == vecT(1 * 2) == (glm.array(vecT(1)) * 2)[0] == (2 * glm.array(vecT(1)))[0] assert vecT(0) * vecT(0) == vecT(0) == (glm.array(vecT(0)) * glm.array(vecT(0)))[0] for vecT in vector_length_dict[4]: if (vecT == glm.bvec4): continue assert vecT(1, 2, 3, 4) * vecT(1, 2, 3, 4) == vecT(1 * 1, 2 * 2, 3 * 3, 4 * 4) == (glm.array(vecT(1, 2, 3, 4)) * glm.array(vecT(1, 2, 3, 4)))[0] assert vecT(2) * vecT(3) == vecT(3) * vecT(2) == (glm.array(vecT(2)) * glm.array(vecT(3)))[0] == (glm.array(vecT(3)) * glm.array(vecT(2)))[0] assert vecT(1) * 2 == vecT(1 * 2) == (glm.array(vecT(1)) * 2)[0] == (2 * glm.array(vecT(1)))[0] assert vecT(0) * vecT(0) == vecT(0) == (glm.array(vecT(0)) * glm.array(vecT(0)))[0] for c in range(2, 5): for r in range(2, 5): for matT in matrix_length_dict[(c, r)]: assert matT(*range(c*r)) * glm.transpose(matT(*range(c*r))) == (glm.array(matT(*range(c*r))) * glm.array(glm.transpose(matT(*range(c*r)))))[0] assert matT(*range(c*r)) * glm.transpose(matT(*range(c*r))) != glm.transpose(matT(*range(c*r))) * matT(*range(c*r)) and (glm.array(matT(*range(c*r))) * glm.array(glm.transpose(matT(*range(c*r)))))[0] != (glm.array(glm.transpose(matT(*range(c*r)))) * glm.array(matT(*range(c*r))))[0] assert matT(1) * 2 == matT(*[(1 * 2) if C==R else 0 for C in range(c) for R in range(r)]) == (glm.array(matT(1)) * 2)[0] == (2 * glm.array(matT(1)))[0] for quaT in quat_types: assert quaT(1, 2, 3, 4) * quaT(1, 2, 3, 4) == (glm.array(quaT(1, 2, 3, 4)) * glm.array(quaT(1, 2, 3, 4)))[0] assert quaT() * quaT() == quaT(1 * 1, 0, 0, 0) == (glm.array(quaT()) * glm.array(quaT()))[0] for cT in ctypes_types: assert glm.array(cT, 1, 2, 3) * glm.array(cT, 1, 2, 3) == glm.array(cT, 1 * 1, 2 * 2, 3 * 3) assert glm.array(cT, 1, 2, 3) * 2 == glm.array(cT, 1 * 2, 2 * 2, 3 * 2) == 2 * glm.array(cT, 1, 2, 3) def test_spec_div(): for vecT in vector_length_dict[1]: if (vecT == glm.bvec1): continue assert vecT(1) / vecT(1) == vecT(1 / 1) == (glm.array(vecT(1)) / glm.array(vecT(1)))[0] == (glm.array(vecT(1)) / vecT(1))[0] == (vecT(1) / glm.array(vecT(1)))[0] assert vecT(2) / vecT(3) != vecT(3) / vecT(2) and (glm.array(vecT(2)) / glm.array(vecT(3)))[0] != (glm.array(vecT(3)) / glm.array(vecT(2)))[0] assert vecT(1) / 2 == vecT(1 / 2) == 1 / vecT(2) == (glm.array(vecT(1)) / 2)[0] == (1 / glm.array(vecT(2)))[0] assert vecT(0) / vecT(1) == vecT(0) == (glm.array(vecT(0)) / glm.array(vecT(1)))[0] for vecT in vector_length_dict[2]: if (vecT == glm.bvec2): continue assert vecT(1, 2) / vecT(1, 2) == vecT(1 / 1, 2 / 2) == (glm.array(vecT(1, 2)) / glm.array(vecT(1, 2)))[0] assert vecT(2) / vecT(3) != vecT(3) / vecT(2) and (glm.array(vecT(2)) / glm.array(vecT(3)))[0] != (glm.array(vecT(3)) / glm.array(vecT(2)))[0] assert vecT(1) / 2 == vecT(1 / 2) == (glm.array(vecT(1)) / 2)[0] == (1 / glm.array(vecT(2)))[0] assert vecT(0) / vecT(1) == vecT(0) == (glm.array(vecT(0)) / glm.array(vecT(1)))[0] for vecT in vector_length_dict[3]: if (vecT == glm.bvec3): continue assert vecT(1, 2, 3) / vecT(1, 2, 3) == vecT(1 / 1, 2 / 2, 3 / 3) == (glm.array(vecT(1, 2, 3)) / glm.array(vecT(1, 2, 3)))[0] assert vecT(2) / vecT(3) != vecT(3) / vecT(2) and (glm.array(vecT(2)) / glm.array(vecT(3)))[0] != (glm.array(vecT(3)) / glm.array(vecT(2)))[0] assert vecT(1) / 2 == vecT(1 / 2) == (glm.array(vecT(1)) / 2)[0] == (1 / glm.array(vecT(2)))[0] assert vecT(0) / vecT(1) == vecT(0) == (glm.array(vecT(0)) / glm.array(vecT(1)))[0] for vecT in vector_length_dict[4]: if (vecT == glm.bvec4): continue assert vecT(1, 2, 3, 4) / vecT(1, 2, 3, 4) == vecT(1 / 1, 2 / 2, 3 / 3, 4 / 4) == (glm.array(vecT(1, 2, 3, 4)) / glm.array(vecT(1, 2, 3, 4)))[0] assert vecT(2) / vecT(3) != vecT(3) / vecT(2) and (glm.array(vecT(2)) / glm.array(vecT(3)))[0] != (glm.array(vecT(3)) / glm.array(vecT(2)))[0] assert vecT(1) / 2 == vecT(1 / 2) == (glm.array(vecT(1)) / 2)[0] == (1 / glm.array(vecT(2)))[0] assert vecT(0) / vecT(1) == vecT(0) == (glm.array(vecT(0)) / glm.array(vecT(1)))[0] for c in range(2, 5): for r in range(2, 5): for matT in matrix_length_dict[(c, r)]: assert matT(*range(c*r)) / 2 == matT(*map(lambda x: x / 2, range(c*r))) for cT in ctypes_types: if (cT == glm.c_bool): continue assert glm.array(cT, 1, 2, 3) / glm.array(cT, 1, 2, 3) == glm.array(cT, 1 / 1, 2 / 2, 3 / 3) assert glm.array(cT, 1, 2, 3) / 2 == glm.array(cT, 1 / 2, 2 / 2, 3 / 2) assert 2 / glm.array(cT, 1, 2, 3) == glm.array(cT, 2 / 1, 2 / 2, 2 / 3) def test_spec_mod(): for vecT in vector_length_dict[1]: if (vecT == glm.bvec1): continue assert vecT(1) % vecT(1) == vecT(1 % 1) == (glm.array(vecT(1)) % glm.array(vecT(1)))[0] == (glm.array(vecT(1)) % vecT(1))[0] == (vecT(1) % glm.array(vecT(1)))[0] assert vecT(2) % vecT(3) != vecT(3) % vecT(2) and (glm.array(vecT(2)) % glm.array(vecT(3)))[0] != (glm.array(vecT(3)) % glm.array(vecT(2)))[0] assert vecT(1) % 2 == vecT(1 % 2) == 1 % vecT(2) == (glm.array(vecT(1)) % 2)[0] == (1 % glm.array(vecT(2)))[0] assert vecT(0) % vecT(1) == vecT(0) == (glm.array(vecT(0)) % glm.array(vecT(1)))[0] for vecT in vector_length_dict[2]: if (vecT == glm.bvec2): continue assert vecT(1, 2) % vecT(1, 2) == vecT(1 % 1, 2 % 2) == (glm.array(vecT(1, 2)) % glm.array(vecT(1, 2)))[0] assert vecT(2) % vecT(3) != vecT(3) % vecT(2) and (glm.array(vecT(2)) % glm.array(vecT(3)))[0] != (glm.array(vecT(3)) % glm.array(vecT(2)))[0] assert vecT(1) % 2 == vecT(1 % 2) == (glm.array(vecT(1)) % 2)[0] == (1 % glm.array(vecT(2)))[0] assert vecT(0) % vecT(1) == vecT(0) == (glm.array(vecT(0)) % glm.array(vecT(1)))[0] for vecT in vector_length_dict[3]: if (vecT == glm.bvec3): continue assert vecT(1, 2, 3) % vecT(1, 2, 3) == vecT(1 % 1, 2 % 2, 3 % 3) == (glm.array(vecT(1, 2, 3)) % glm.array(vecT(1, 2, 3)))[0] assert vecT(2) % vecT(3) != vecT(3) % vecT(2) and (glm.array(vecT(2)) % glm.array(vecT(3)))[0] != (glm.array(vecT(3)) % glm.array(vecT(2)))[0] assert vecT(1) % 2 == vecT(1 % 2) == (glm.array(vecT(1)) % 2)[0] == (1 % glm.array(vecT(2)))[0] assert vecT(0) % vecT(1) == vecT(0) == (glm.array(vecT(0)) % glm.array(vecT(1)))[0] for vecT in vector_length_dict[4]: if (vecT == glm.bvec4): continue assert vecT(1, 2, 3, 4) % vecT(1, 2, 3, 4) == vecT(1 % 1, 2 % 2, 3 % 3, 4 % 4) == (glm.array(vecT(1, 2, 3, 4)) % glm.array(vecT(1, 2, 3, 4)))[0] assert vecT(2) % vecT(3) != vecT(3) % vecT(2) and (glm.array(vecT(2)) % glm.array(vecT(3)))[0] != (glm.array(vecT(3)) % glm.array(vecT(2)))[0] assert vecT(1) % 2 == vecT(1 % 2) == (glm.array(vecT(1)) % 2)[0] == (1 % glm.array(vecT(2)))[0] assert vecT(0) % vecT(1) == vecT(0) == (glm.array(vecT(0)) % glm.array(vecT(1)))[0] for cT in ctypes_types: if (cT == glm.c_bool): continue assert glm.array(cT, 1, 2, 3) % glm.array(cT, 1, 2, 3) == glm.array(cT, 1 % 1, 2 % 2, 3 % 3) assert glm.array(cT, 1, 2, 3) % 2 == glm.array(cT, 1 % 2, 2 % 2, 3 % 2) assert 2 % glm.array(cT, 1, 2, 3) == glm.array(cT, 2 % 1, 2 % 2, 2 % 3) def test_spec_pow(): for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: assert vecT(2) ** vecT(3) == vecT(2 ** 3) == (glm.array(vecT(2)) ** glm.array(vecT(3)))[0] == (glm.array(vecT(2)) ** 3)[0] == (glm.array(vecT(2)) ** vecT(3))[0] == (vecT(2) ** glm.array(vecT(3)))[0] == (2 ** glm.array(vecT(3)))[0] for cT in [glm.c_float, glm.c_double]: assert glm.array(cT, 1, 2, 3) ** glm.array(cT, 1, 2, 3) == glm.array(cT, 1 ** 1, 2 ** 2, 3 ** 3) assert glm.array(cT, 1, 2, 3) ** 2 == glm.array(cT, 1 ** 2, 2 ** 2, 3 ** 2) assert 2 ** glm.array(cT, 1, 2, 3) == glm.array(cT, 2 ** 1, 2 ** 2, 2 ** 3) def test_spec_neg(): for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")] + vector_type_dict[datatypes.index("int")] + vector_type_dict[datatypes.index("glm::i64")] + vector_type_dict[datatypes.index("glm::i16")] + vector_type_dict[datatypes.index("glm::i8")]: assert -vecT(5) == vecT(0) - vecT(5) == (-glm.array(vecT(5)))[0] for matT in matrix_type_dict[datatypes.index("float")] + matrix_type_dict[datatypes.index("double")] + matrix_type_dict[datatypes.index("int")]: assert -matT(5) == matT(0) - matT(5) == (-glm.array(matT(5)))[0] for quaT in quat_types: assert -quaT(1, 2, 3, 4) == quaT(0, 0, 0, 0) - quaT(1, 2, 3, 4) == (-glm.array(quaT(1, 2, 3, 4)))[0] for cT in [glm.c_float, glm.c_double, glm.c_int64, glm.c_int32, glm.c_int16, glm.c_int8]: assert -glm.array(cT, 1, 2, 3) == glm.array.zeros(3, cT) - glm.array(cT, 1, 2, 3) def test_spec_abs(): for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")] + vector_type_dict[datatypes.index("int")] + vector_type_dict[datatypes.index("glm::i64")] + vector_type_dict[datatypes.index("glm::i16")] + vector_type_dict[datatypes.index("glm::i8")]: assert abs(vecT(-5)) == vecT(5) == (abs(glm.array(vecT(-5))))[0] for matT in matrix_type_dict[datatypes.index("float")] + matrix_type_dict[datatypes.index("double")] + matrix_type_dict[datatypes.index("int")]: assert matT(5) == (abs(glm.array(matT(-5))))[0] for quaT in quat_types: assert quaT(1, 2, 3, 4) == (abs(glm.array(quaT(1, -2, 3, -4))))[0] for cT in [glm.c_float, glm.c_double, glm.c_int64, glm.c_int32, glm.c_int16, glm.c_int8]: assert abs(glm.array(cT, 1, -2, -3)) == glm.array(cT, 1, 2, 3) def test_spec_array_methods(): assert glm.array(glm.vec3(1, 2, 3)).concat(glm.array(glm.vec3(1, 2, 3))) == glm.array(glm.vec3(1, 2, 3)).repeat(2) == glm.array(glm.vec3(1, 2, 3)).map(lambda x: (x,x)) == glm.array(glm.vec3(1, 2, 3), glm.vec3(1, 2, 3)) assert glm.array(glm.vec3(1, 2, 3)).map(lambda x: x * 2) == glm.array(glm.vec3(1, 2, 3)) * 2 assert glm.array(glm.vec3(1, 2, 3)).filter(lambda x: True) == glm.array(glm.vec3(1, 2, 3)).map(lambda x: x) == glm.array(glm.vec3(1, 2, 3)) assert glm.array(glm.vec3(1, 2, 3)).map(lambda x: None) == glm.array(glm.vec3(1, 2, 3)).filter(lambda x: False) == glm.array(glm.vec3(1, 2, 3)).repeat(0) arr = glm.array(glm.c_float, 5, 3, 4, 2, 1) arr.sort(glm.cmp) assert arr == glm.array(glm.c_float, 1, 2, 3, 4, 5) assert glm.array(glm.vec3(1, 2, 3)).split_components() == (glm.array(glm.float32, 1), glm.array(glm.float32, 2), glm.array(glm.float32, 3)) assert glm.array(glm.vec4(1, 2, 3, 4), glm.vec4(6, 7, 8, 9)).split_components() == (glm.array(glm.float32, 1, 6), glm.array(glm.float32, 2, 7), glm.array(glm.float32, 3, 8), glm.array(glm.float32, 4, 9)) assert glm.array(glm.mat2(1, 2, 3, 4)).split_components() == (glm.array(glm.vec2(1, 2)), glm.array(glm.vec2(3, 4))) assert glm.array(glm.vec4(1, 2, 3, 4), glm.vec4(6, 7, 8, 9)).reduce(glm.add) == glm.vec4(7, 9, 11, 13) assert glm.array(glm.c_float, 5, 3, 4, 2, 1).reduce(glm.add) == 15 assert glm.array(glm.c_float, 5, 3, 4, 2, 1).reduce(glm.add, 20) == 35 def test_spec_common_abs(): for i in range(-10, 10): assert glm.abs(i) == abs(i) for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: assert all([x == abs(i) for x in glm.abs(vecT(i))]) def test_spec_common_ceil(): for i in range(-10, 10): x = i / 10 assert glm.ceil(x) == math.ceil(x) for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: assert all([a == math.ceil(x) for a in glm.ceil(vecT(x))]) def test_spec_common_clamp(): assert glm.clamp(0, 1, 2) == 1 assert glm.clamp(1, 1, 2) == 1 assert glm.clamp(2, 1, 2) == 2 assert glm.clamp(3, 1, 2) == 2 for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: assert glm.clamp(vecT(0), 1, 2) == vecT(1) assert glm.clamp(vecT(1), 1, 2) == vecT(1) assert glm.clamp(vecT(2), 1, 2) == vecT(2) assert glm.clamp(vecT(3), 1, 2) == vecT(2) assert glm.clamp(vecT(0), vecT(1), vecT(2)) == vecT(1) assert glm.clamp(vecT(1), vecT(1), vecT(2)) == vecT(1) assert glm.clamp(vecT(2), vecT(1), vecT(2)) == vecT(2) assert glm.clamp(vecT(3), vecT(1), vecT(2)) == vecT(2) def test_spec_common_floor(): for i in range(-10, 10): x = i / 10 assert glm.floor(x) == math.floor(x) for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: assert all([a == math.floor(x) for a in glm.floor(vecT(x))]) def test_spec_common_fma(): assert glm.fma(1, 2, 3) == 1 * 2 + 3 assert glm.fma(4, 5, 6) == 4 * 5 + 6 def test_spec_common_fmax(): for a in range(-2, 2): for b in range(-2, 2): assert glm.fmax(a, b) == max([a, b]) for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: assert glm.fmax(vecT(a), b) == vecT(max([a,b])) == glm.fmax(vecT(a), vecT(b)) for a in range(-2, 2): for b in range(-2, 2): for c in range(-2, 2): for d in range(-2, 2): assert glm.fmax(a, b, c, d) == max([a,b,c,d]) assert glm.fmax(a, b, c) == max([a,b,c]) def test_spec_common_fmin(): for a in range(-2, 2): for b in range(-2, 2): assert glm.fmin(a, b) == min([a, b]) for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: assert glm.fmin(vecT(a), b) == vecT(min([a,b])) == glm.fmin(vecT(a), vecT(b)) for a in range(-2, 2): for b in range(-2, 2): for c in range(-2, 2): for d in range(-2, 2): assert glm.fmin(a, b, c, d) == min([a,b,c,d]) assert glm.fmin(a, b, c) == min([a,b,c]) def test_spec_common_fract(): for i in range(-10, 10): x = i / 10 assert glm.fract(x) == x - glm.floor(x) for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: assert glm.fract(vecT(x)) == vecT(x) - glm.floor(vecT(x)) def test_spec_common_max(): for a in range(-2, 2): for b in range(-2, 2): assert glm.max(a, b) == max([a, b]) for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: assert glm.max(vecT(a), b) == vecT(max([a,b])) == glm.max(vecT(a), vecT(b)) for a in range(-2, 2): for b in range(-2, 2): for c in range(-2, 2): for d in range(-2, 2): assert glm.max(a, b, c, d) == max([a,b,c,d]) for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: assert glm.max(vecT(a), vecT(b), vecT(c), vecT(d)) == vecT(max([a, b, c, d])) assert glm.max(a, b, c) == max([a,b,c]) for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: assert glm.max(vecT(a), vecT(b), vecT(c)) == vecT(max([a, b, c])) def test_spec_common_min(): for a in range(-2, 2): for b in range(-2, 2): assert glm.min(a, b) == min([a, b]) for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: assert glm.min(vecT(a), b) == vecT(min([a,b])) == glm.min(vecT(a), vecT(b)) for a in range(-2, 2): for b in range(-2, 2): for c in range(-2, 2): for d in range(-2, 2): assert glm.min(a, b, c, d) == min([a,b,c,d]) for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: assert glm.min(vecT(a), vecT(b), vecT(c), vecT(d)) == vecT(min([a, b, c, d])) assert glm.min(a, b, c) == min([a,b,c]) for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: assert glm.min(vecT(a), vecT(b), vecT(c)) == vecT(min([a, b, c])) def test_spec_common_mix(): for a in range(-2, 2): for b in range(-2, 2): assert glm.mix(a, b, 0.) == a assert glm.mix(a, b, 1.) == b assert glm.mix(a, b, 0.5) == (a + b) / 2 assert glm.mix(a, b, True) == b assert glm.mix(a, b, False) == a for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: assert glm.mix(vecT(a), vecT(b), [0.] * len(vecT(a))) == vecT(a) assert glm.mix(vecT(a), vecT(b), [1.] * len(vecT(a))) == vecT(b) assert glm.mix(vecT(a), vecT(b), [0.5] * len(vecT(a))) == vecT((a + b) / 2) assert glm.mix(vecT(a), vecT(b), [True] * len(vecT(a))) == vecT(b) assert glm.mix(vecT(a), vecT(b), [False] * len(vecT(a))) == vecT(a) def test_spec_common_round(): for i in range(-10, 10): x = i / 10 if abs(x) == 0.5: x += .05 assert glm.round(x) == round(x, 0), x for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: assert all([a == round(x, 0) for a in glm.round(vecT(x))]) def test_spec_common_frexp(): for i in range(-10, 10): x = i / 10 assert glm.frexp(x) == math.frexp(x) #for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: # assert all([(a, b) == math.frexp(x) for a, b in glm.frexp(vecT(x))]) def test_spec_exponential_exp(): for i in range(5): assert round(glm.exp(i), 5) == round(math.exp(i), 5) for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: assert all([round(a, 5) == round(math.exp(i), 5) for a in glm.exp(vecT(i))]) def test_spec_exponential_exp2(): for i in range(5): assert round(glm.exp2(i), 5) == round(2 ** i, 5) for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: assert all([round(a, 5) == round(2 ** i, 5) for a in glm.exp2(vecT(i))]) def test_spec_exponential_sqrt(): for i in range(1,6): assert round(glm.sqrt(i), 5) == round(math.sqrt(i), 5) assert round(glm.inversesqrt(i), 5) == round(1 / math.sqrt(i), 5) for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: assert all([round(a, 5) == round(math.sqrt(i), 5) for a in glm.sqrt(vecT(i))]) assert all([round(a, 5) == round(1 / math.sqrt(i), 5) for a in glm.inversesqrt(vecT(i))]) def test_spec_exponential_log(): for i in range(1,6): assert round(glm.log(i), 5) == round(math.log(i), 5) for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: assert all([round(a, 5) == round(math.log(i), 5) for a in glm.log(vecT(i))]) def test_spec_exponential_log2(): for i in range(1,6): assert round(glm.log2(i), 5) == round(math.log2(i), 5) for vecT in vector_type_dict[datatypes.index("float")] + vector_type_dict[datatypes.index("double")]: assert all([round(a, 5) == round(math.log2(i), 5) for a in glm.log2(vecT(i))]) ###/SPECIFIC TESTS ### ### GLM TESTS ### ## core_func_common ## def test_floor(): A = 1.1 B = glm.floor(A) assert glm.equal(B, 1., 0.0001) for T in gen_type("V__fF"): A = T(1.1) B = glm.floor(A) assert glm.all(glm.equal(B, T(1), 0.0001)) def test_modf(): X = 1.5 A, I = glm.modf(X) assert glm.equal(I, 1.0, 0.0001) assert glm.equal(A, 0.5, 0.0001) for T in gen_type("V4__fF"): X = T(1.1, 1.2, 1.5, 1.7) I = T() A = glm.modf(X, I) assert glm.ivec4(I) == glm.ivec4(1) assert glm.all(glm.equal(A, T(0.1, 0.2, 0.5, 0.7), 0.00001)) def test_mod(): A = 1.5 B = 1.0 C = glm.mod(A, B) assert glm.equal(C, 0.5, 0.00001) A = -0.2 B = 1.0 C = glm.mod(A, B) assert glm.equal(C, 0.8, 0.00001) A = 3.0 B = 2.0 C = glm.mod(A, B) assert glm.equal(C, 1.0, 0.00001) for T in gen_type("V__fF"): A = T(3.0) B = 2.0 C = glm.mod(A, B) assert glm.all(glm.equal(C, T(1.0), 0.00001)) A = T(3.0) B = T(2.0) C = glm.mod(A, B) assert glm.all(glm.equal(C, T(1.0), 0.00001)) def test_floatBitsToInt(): A = 1.0 B = glm.floatBitsToInt(A) C = glm.intBitsToFloat(B) assert A == C values = [1, 2, 3, 4] for T in gen_type("V2_V3_V4__f"): A = T(values) B = glm.floatBitsToInt(A) C = glm.intBitsToFloat(B) assert A == C def test_floatBitsToUint(): A = 1.0 B = glm.floatBitsToUint(A) C = glm.uintBitsToFloat(B) assert A == C values = [1, 2, 3, 4] for T in gen_type("V2_V3_V4__f"): A = T(values) B = glm.floatBitsToUint(A) C = glm.uintBitsToFloat(B) assert A == C def test_min(): # improved these a little for T in gen_type("V__fF"): A0 = glm.min(T(1), T(2)) A1 = glm.min(T(1), 2) A2 = glm.min(T(2), 1) A3 = T(glm.min(1, 2)) assert A0 == A1 == A2 == A3 == T(1) def test_max(): # improved these a little for T in gen_type("V__fF"): A0 = glm.max(T(1), T(2)) A1 = glm.max(T(1), 2) A2 = glm.max(T(2), 1) A3 = T(glm.max(1, 2)) assert A0 == A1 == A2 == A3 == T(2) def test_clamp(): # filled this one assert glm.clamp( -1, 0, 1) == 0 assert glm.clamp( 2, 0, 1) == 1 assert glm.clamp(0.5, 0, 1) == 0.5 for T in gen_type("V__fF"): assert glm.clamp(T( -1), 0, 1) == T(0) assert glm.clamp(T( 2), 0, 1) == T(1) assert glm.clamp(T(0.5), 0, 1) == T(0.5) assert glm.clamp(T( -1), T(0), T(1)) == T(0) assert glm.clamp(T( 2), T(0), T(1)) == T(1) assert glm.clamp(T(0.5), T(0), T(1)) == T(0.5) def test_mix(): cases = [ # bool ( 0, 1, False, 0), ( 0, 1, True, 1), (-1, 1, False, -1), (-1, 1, True, 1), # float ( 0, 1, 0, 0), ( 0, 1, 1, 1), (-1, 1, 0, -1), (-1, 1, 1, 1), ] + [ # vec bool (T(x), T(y), z, T(w)) for x,y,z,w in (( 0, 1, False, 0), ( 0, 1, True, 1), (-1, 1, False, -1), (-1, 1, True, 1)) for T in gen_type("V2_V3_V4__fF") ] + [ # vec bvec (T(x), T(y), (getattr(glm, "bvec{L}".format(L=get_len_of_type(T))))(z), T(w)) for x,y,z,w in (( 0, 1, False, 0), ( 0, 1, True, 1), (-1, 1, False, -1), (-1, 1, True, 1)) for T in gen_type("V2_V3_V4__fF") ] for x, y, a, expected in cases: result = glm.mix(x, y, a) assert result == expected, (x, y, a, expected, result) def test_step(): cases = [ # scalar (2, 1, 0), (2, 3, 1), (2, 2, 1), ] + [ # vec scalar (edge, T(x), T(result)) for edge, x, result in ((1, ( 1, 2, 3, 4), 1), (0, ( 1, 2, 3, 4), 1), (0, (-1, -2, -3, -4), 0)) for T in gen_type("V2_V3_V4__fF") ] + [ # vec vec (T(edge), T(x), T(result)) for edge, x, result in ((1, ( 1, 2, 3, 4), 1), (0, ( 1, 2, 3, 4), 1), (0, (-1, -2, -3, -4), 0)) for T in gen_type("V2_V3_V4__fF") ] for edge, x, expected in cases: result = glm.step(edge, x) assert result == expected def test_round(): cases = [ (T(x), T(result)) for x, result in (( 0, 0), ( 0.5, 1), ( 1, 1), ( 0.1, 0), ( 0.9, 1), ( 1.5, 2), ( 1.9, 2), (- 0, 0), (-0.5, -1), (- 1, -1), (-0.1, 0), (-0.9, -1), (-1.5, -2), (-1.9, -2)) for T in gen_type("N_V__fF") ] for x, expected in cases: result = glm.round(x) assert result == expected def test_roundEven(): cases = [ (T(x), T(result)) for x, result in (( 0, 0), ( 0.5, 0), ( 1.5, 2), ( 2.5, 2), ( 3.5, 4), ( 4.5, 4), ( 5.4, 5), (- 0, -0), (-0.5, -0), (-1.5, -2), (-2.5, -2), (-3.5, -4), (-4.5, -4), (-5.4, -5)) for T in gen_type("N_V__fF") ] for x, expected in cases: result = glm.roundEven(x) assert result == expected def test_isnan(): for T in gen_type("N_V2_V3_V4__fF"): assert optional_all(glm.isnan(T(float("NaN")))) assert not optional_any(glm.isnan(T(1))) def test_isinf(): for T in gen_type("N_V2_V3_V4__fF"): assert optional_all(glm.isinf(T(float("infinity")))) assert optional_all(glm.isinf(T(float("-infinity")))) assert not optional_any(glm.isinf(T(1))) def test_sign(): cases = [ (T(x), T(result)) for x, result in (( 0, 0), ( 1, 1), ( 2.5, 1), ( 3.5, 1), (- 1, -1), (-2.5, -1), (-3.5, -1)) for T in gen_type("N_V__fFiqsu") ] for x, expected in cases: result = glm.sign(x) assert result == expected, (x, expected, result) def test_frexp(): sig, exp = glm.frexp(1024) assert glm.equal(sig, 0.5, 0.00001) assert exp == 11 x = glm.vec1(1024) exp = glm.ivec1() sig = glm.frexp(x, exp) assert glm.all(glm.equal(sig, glm.vec1(0.5), 0.00001)) assert exp == glm.ivec1(11) x = glm.vec2(1024, 0.24) exp = glm.ivec2() sig = glm.frexp(x, exp) assert glm.all(glm.equal(sig, glm.vec2(0.5, 0.96), 0.00001)) assert exp == glm.ivec2(11, -2) x = glm.vec3(1024, 0.24, 0) exp = glm.ivec3() sig = glm.frexp(x, exp) assert glm.all(glm.equal(sig, glm.vec3(0.5, 0.96, 0.0), 0.00001)) assert exp == glm.ivec3(11, -2, 0) x = glm.vec4(1024, 0.24, 0, -1.33) exp = glm.ivec4() sig = glm.frexp(x, exp) assert glm.all(glm.equal(sig, glm.vec4(0.5, 0.96, 0.0, -0.665), 0.00001)) assert exp == glm.ivec4(11, -2, 0, 1) def test_ldexp(): assert glm.equal(glm.ldexp(0.5, 11), 1024, 0.00001) sig = glm.vec1(0.5) exp = glm.ivec1(11) x = glm.ldexp(sig, exp) assert glm.all(glm.equal(x, glm.vec1(1024), 0.00001)) sig = glm.vec2(0.5, 0.96) exp = glm.ivec2(11, -2) x = glm.ldexp(sig, exp) assert glm.all(glm.equal(x, glm.vec2(1024, 0.24), 0.00001)) sig = glm.vec3(0.5, 0.96, 0) exp = glm.ivec3(11, -2, 0) x = glm.ldexp(sig, exp) assert glm.all(glm.equal(x, glm.vec3(1024, 0.24, 0), 0.00001)) sig = glm.vec4(0.5, 0.96, 0.0, -0.665) exp = glm.ivec4(11, -2, 0, 1) x = glm.ldexp(sig, exp) assert glm.all(glm.equal(x, glm.vec4(1024, 0.24, 0, -1.33), 0.00001)) ##/core_func_common ## ## core_func_exponential ## def test_pow(): for T in gen_type("N_V__fF"): assert optional_all(glm.equal(glm.pow(T(2), T(2)), T(4), 0.00001)) def test_sqrt(): for T in gen_type("N_V__fF"): assert optional_all(glm.equal(glm.sqrt(T(4)), T(2), 0.00001)) def test_log(): for T in gen_type("N_V__fF"): assert optional_all(glm.equal(glm.log(T(glm.e())), T(1), 0.01)) def test_exp2(): for T in gen_type("N_V__fF"): assert optional_all(glm.equal(glm.exp2(T(4)), T(16), 0.00001)) def test_log2(): for T in gen_type("N_V__fF"): assert optional_all(glm.equal(glm.log2(T(16)), T(4), 0.01)) def test_inversesqrt(): for T in gen_type("N_V__fF"): assert optional_all(glm.equal(glm.inversesqrt(T(16)) * glm.sqrt(T(16)), T(1), 0.001)) ##/core_func_exponential ## ## core_func_geometric ## def test_length(): assert 1 == glm.length(glm.vec1(1)) == glm.length(glm.vec2(1, 0)) == glm.length(glm.vec3(1, 0, 0)) == glm.length(glm.vec4(1, 0, 0, 0)) def test_distance(): assert 0 == glm.distance(glm.vec1(1), glm.vec1(1)) == \ glm.distance(glm.vec2(1, 0), glm.vec2(1, 0)) == \ glm.distance(glm.vec3(1, 0, 0), glm.vec3(1, 0, 0)) == \ glm.distance(glm.vec4(1, 0, 0, 0), glm.vec4(1, 0, 0, 0)) def test_dot(): assert glm.dot(glm.vec1(1), glm.vec1(1)) == 1 assert glm.dot(glm.vec2(1), glm.vec2(1)) == 2 assert glm.dot(glm.vec3(1), glm.vec3(1)) == 3 assert glm.dot(glm.vec4(1), glm.vec4(1)) == 4 def test_cross(): Cross1 = glm.cross(glm.vec3(1, 0, 0), glm.vec3(0, 1, 0)) Cross2 = glm.cross(glm.vec3(0, 1, 0), glm.vec3(1, 0, 0)) glm.all(glm.lessThan(glm.abs(Cross1 - glm.vec3(0, 0, 1)), glm.vec3(0.0001))) glm.all(glm.lessThan(glm.abs(Cross2 - glm.vec3(0, 0,-1)), glm.vec3(0.0001))) def test_normalize(): Normalize1 = glm.normalize(glm.vec3(1, 0, 0)) Normalize2 = glm.normalize(glm.vec3(2, 0, 0)) Normalize3 = glm.normalize(glm.vec3(-0.6, 0.7, -0.5)) glm.all(glm.lessThan(glm.abs(Normalize1 - glm.vec3(1, 0, 0)), glm.vec3(0.0001))) glm.all(glm.lessThan(glm.abs(Normalize2 - glm.vec3(1, 0, 0)), glm.vec3(0.0001))) glm.all(glm.lessThan(glm.abs(Normalize3 - glm.normalize((-1.2,1.4,-1))), glm.vec3(0.0001))) def test_faceforward(): N = glm.vec3(0.0, 0.0, 1.0) I = glm.vec3(1.0, 0.0, 1.0) Nref = glm.vec3(0.0, 0.0, 1.0) F = glm.faceforward(N, I, Nref) assert glm.equal(F, (0,0,-1), 0.0001) def test_reflect(): A = glm.vec2(1.0,-1.0) B = glm.vec2(0.0, 1.0) C = glm.reflect(A, B) assert glm.all(glm.equal(C, glm.vec2(1.0, 1.0), 0.0001)) def test_refract(): A = glm.vec2(0.0,-1.0) B = glm.vec2(0.0, 1.0) C = glm.refract(A, B, 0.5) assert glm.all(glm.equal(C, glm.vec2(0.0, -1.0), 0.0001)) ##/core_func_geometric ## ## core_func_integer ## def test_bitfieldInsert(): cases = [ (T(base), T(insert), offset, bits, T(expected)) for base, insert, offset, bits, expected in ((0x00000000, 0xffffffff, 0, 32, 0xffffffff), (0x00000000, 0xffffffff, 0, 31, 0x7fffffff), (0x00000000, 0xffffffff, 0, 0, 0x00000000), (0xff000000, 0x000000ff, 8, 8, 0xff00ff00), (0xffff0000, 0xffff0000, 16, 16, 0x00000000), (0x0000ffff, 0x0000ffff, 16, 16, 0xffffffff)) for T in gen_type("V__iI") ] + [ (T(base), T(insert), offset, bits, T(expected).value) for base, insert, offset, bits, expected in ((0x00000000, 0xffffffff, 0, 32, 0xffffffff), (0x00000000, 0xffffffff, 0, 31, 0x7fffffff), (0x00000000, 0xffffffff, 0, 0, 0x00000000), (0xff000000, 0x000000ff, 8, 8, 0xff00ff00), (0xffff0000, 0xffff0000, 16, 16, 0x00000000), (0x0000ffff, 0x0000ffff, 16, 16, 0xffffffff)) for T in [glm.int32, glm.uint32] ] for base, insert, offset, bits, expected in cases: result = glm.bitfieldInsert(base, insert, offset, bits) assert result == expected, (result, expected) def test_bitfieldExtract(): cases = [ (T(value), offset, bits, T(expected)) for value, offset, bits, expected in ((0xffffffff, 0,32, 0xffffffff), (0xffffffff, 8, 0, 0x00000000), (0x00000000, 0,32, 0x00000000), (0x0f0f0f0f, 0,32, 0x0f0f0f0f), (0x00000000, 8, 0, 0x00000000), (0x80000000,31, 1, 0x00000001), (0x7fffffff,31, 1, 0x00000000), (0x00000300, 8, 8, 0x00000003), (0x0000ff00, 8, 8, 0x000000ff), (0xfffffff0, 0, 5, 0x00000010), (0x000000ff, 1, 3, 0x00000007), (0x000000ff, 0, 3, 0x00000007), (0x00000000, 0, 2, 0x00000000), (0xffffffff, 0, 8, 0x000000ff), (0xffff0000,16,16, 0x0000ffff)) for T in gen_type("V__iI") ] + [ (T(value), offset, bits, T(expected).value) for value, offset, bits, expected in ((0xffffffff, 0,32, 0xffffffff), (0xffffffff, 8, 0, 0x00000000), (0x00000000, 0,32, 0x00000000), (0x0f0f0f0f, 0,32, 0x0f0f0f0f), (0x00000000, 8, 0, 0x00000000), (0x80000000,31, 1, 0x00000001), (0x7fffffff,31, 1, 0x00000000), (0x00000300, 8, 8, 0x00000003), (0x0000ff00, 8, 8, 0x000000ff), (0xfffffff0, 0, 5, 0x00000010), (0x000000ff, 1, 3, 0x00000007), (0x000000ff, 0, 3, 0x00000007), (0x00000000, 0, 2, 0x00000000), (0xffffffff, 0, 8, 0x000000ff), (0xffff0000,16,16, 0x0000ffff)) for T in [glm.int32, glm.uint32] ] for value, offset, bits, expected in cases: result = glm.bitfieldExtract(value, offset, bits) assert result == expected, (result, expected, (value, offset, bits)) def test_bitfieldReverse(): cases = [ (T(value), T(expected)) for value, expected in ((0x00000001, 0x80000000), (0x0000000f, 0xf0000000), (0x000000ff, 0xff000000), (0xf0000000, 0x0000000f), (0xff000000, 0x000000ff), (0xffffffff, 0xffffffff), (0x00000000, 0x00000000)) for T in gen_type("V__I") ] + [ (T(value), T(expected)) for value, expected in ((0x00000000000000ff, 0xff00000000000000), (0x000000000000000f, 0xf000000000000000), (0xf000000000000000, 0x000000000000000f), (0xffffffffffffffff, 0xffffffffffffffff), (0x0000000000000000, 0x0000000000000000)) for T in gen_type("V__Q") ] + [ (T(value), T(expected).value) for value, expected in ((0x00000001, 0x80000000), (0x0000000f, 0xf0000000), (0x000000ff, 0xff000000), (0xf0000000, 0x0000000f), (0xff000000, 0x000000ff), (0xffffffff, 0xffffffff), (0x00000000, 0x00000000)) for T in [glm.uint32] ] + [ (T(value), T(expected).value) for value, expected in ((0x00000000000000ff, 0xff00000000000000), (0x000000000000000f, 0xf000000000000000), (0xf000000000000000, 0x000000000000000f), (0xffffffffffffffff, 0xffffffffffffffff), (0x0000000000000000, 0x0000000000000000)) for T in [glm.uint64] ] for value, expected in cases: result = glm.bitfieldReverse(value) assert result == expected, (result, expected, value) def test_findMSB(): cases = [ (T(value), getattr(glm, f"ivec{get_len_of_type(T)}")(expected)) for value, expected in ((0x00000000, -1), (0x00000001, 0), (0x00000002, 1), (0x00000003, 1), (0x00000004, 2), (0x00000005, 2), (0x00000007, 2), (0x00000008, 3), (0x00000010, 4), (0x00000020, 5), (0x00000040, 6), (0x00000080, 7), (0x00000100, 8), (0x00000200, 9), (0x00000400, 10), (0x00000800, 11), (0x00001000, 12), (0x00002000, 13), (0x00004000, 14), (0x00008000, 15), (0x00010000, 16), (0x00020000, 17), (0x00040000, 18), (0x00080000, 19), (0x00100000, 20), (0x00200000, 21), (0x00400000, 22), (0x00800000, 23), (0x01000000, 24), (0x02000000, 25), (0x04000000, 26), (0x08000000, 27), (0x10000000, 28), (0x20000000, 29), (0x40000000, 30)) for T in gen_type("V__iIqQ") ] + [ (0x00000000, -1), (0x00000001, 0), (0x00000002, 1), (0x00000003, 1), (0x00000004, 2), (0x00000005, 2), (0x00000007, 2), (0x00000008, 3), (0x00000010, 4), (0x00000020, 5), (0x00000040, 6), (0x00000080, 7), (0x00000100, 8), (0x00000200, 9), (0x00000400, 10), (0x00000800, 11), (0x00001000, 12), (0x00002000, 13), (0x00004000, 14), (0x00008000, 15), (0x00010000, 16), (0x00020000, 17), (0x00040000, 18), (0x00080000, 19), (0x00100000, 20), (0x00200000, 21), (0x00400000, 22), (0x00800000, 23), (0x01000000, 24), (0x02000000, 25), (0x04000000, 26), (0x08000000, 27), (0x10000000, 28), (0x20000000, 29), (0x40000000, 30) ] for value, expected in cases: result = glm.findMSB(value) assert result == expected, (result, expected, value) def test_findLSB(): cases = [ (T(value), getattr(glm, f"ivec{get_len_of_type(T)}")(expected)) for value, expected in ((0x00000001, 0), (0x00000003, 0), (0x00000002, 1), (0x00010000, 16), (0x7FFF0000, 16), (0x7F000000, 24), (0x7F00FF00, 8), (0x00000000, -1)) for T in gen_type("V__iIqQ") ] + [ (0x00000001, 0), (0x00000003, 0), (0x00000002, 1), (0x00010000, 16), (0x7FFF0000, 16), (0x7F000000, 24), (0x7F00FF00, 8), (0x00000000, -1) ] for value, expected in cases: result = glm.findLSB(value) assert result == expected, (result, expected, value) def test_uaddCarry(): cases = [ (glm.uint32(x).value, glm.uint32(y).value, glm.uint32(expected_result).value, glm.uint32(expected_carry).value) for x, y, expected_result, expected_carry in ((-1, 0, -1, 0), (-1, 1, 0, 1)) ] for x, y, expected_result, expected_carry in cases: result, carry = glm.uaddCarry(x, y) assert result == expected_result, (result, expected_result, (x,y)) assert carry == expected_carry, (carry, expected_carry, (x,y)) for T in [getattr(glm, f"uvec{l}") for l in range(1,5)]: carry = T(0) result = glm.uaddCarry(T(x), T(y), carry) assert result == T(expected_result), (result, expected_result, (x,y)) assert carry == T(expected_carry), (carry, expected_carry, (x,y)) def test_usubBorrow(): cases = [ (glm.uint32(x).value, glm.uint32(y).value, glm.uint32(expected_result).value, glm.uint32(expected_borrow).value) for x, y, expected_result, expected_borrow in ((16, 17, 1, 1),) ] for x, y, expected_result, expected_borrow in cases: result, borrow = glm.usubBorrow(x, y) assert result == expected_result, (result, expected_result, (x,y)) assert borrow == expected_borrow, (borrow, expected_borrow, (x,y)) for T in [getattr(glm, f"uvec{l}") for l in range(1,5)]: borrow = T(0) result = glm.usubBorrow(T(x), T(y), borrow) assert result == T(expected_result), (result, expected_result, (x,y)) assert borrow == T(expected_borrow), (carry, expected_borrow, (x,y)) def test_umulExtended(): cases = [ (2, 3, 0, 6) ] for x, y, expected_msb, expected_lsb in cases: msb, lsb = glm.umulExtended(x, y) assert msb == expected_msb, (msb, expected_msb, (x,y)) assert lsb == expected_lsb, (lsb, expected_lsb, (x,y)) for T in [getattr(glm, f"uvec{l}") for l in range(1,5)]: msb = T(0) lsb = T(0) result = glm.umulExtended(T(x), T(y), msb, lsb) assert msb == T(expected_msb), (msb, expected_msb, (x,y)) assert lsb == T(expected_lsb), (lsb, expected_lsb, (x,y)) def test_imulExtended(): cases = [ (2, 3, 0, 6) ] for x, y, expected_msb, expected_lsb in cases: msb, lsb = glm.imulExtended(x, y) assert msb == expected_msb, (msb, expected_msb, (x,y)) assert lsb == expected_lsb, (lsb, expected_lsb, (x,y)) for T in [getattr(glm, f"ivec{l}") for l in range(1,5)]: msb = T(0) lsb = T(0) result = glm.imulExtended(T(x), T(y), msb, lsb) assert msb == T(expected_msb), (msb, expected_msb, (x,y)) assert lsb == T(expected_lsb), (lsb, expected_lsb, (x,y)) def test_bitCount(): cases = [ (T(value), getattr(glm, f"ivec{get_len_of_type(T)}")(expected)) for value, expected in ((0x00000001, 1), (0x00000003, 2), (0x00000002, 1), (0x000000ff, 8), (0x00000000, 0)) for T in gen_type("V__sSuU") ] + [ (T(value), getattr(glm, f"ivec{get_len_of_type(T)}")(expected)) for value, expected in ((0x00000001, 1), (0x00000003, 2), (0x00000002, 1), (0x7fffffff, 31), (0x00000000, 0)) for T in gen_type("V__iIqQ") ] + [ (0x00000001, 1), (0x00000003, 2), (0x00000002, 1), (0x7fffffff, 31), (0x00000000, 0) ] for value, expected in cases: result = glm.bitCount(value) assert result == expected, (result, expected, value) ##/core_func_integer ## ## core_func_matrix ## def test_matrixCompMult(): for T in gen_type("M__fF"): m = T(((0, 1, 2, 3), (4, 5, 6, 7), (8, 9, 10, 11), (12, 13, 14, 15))) n = glm.matrixCompMult(m, m) assert n == T(((0, 1, 4, 9), (16, 25, 36, 49), (64, 81, 100, 121), (144, 169, 196, 225))) def test_outerProduct(): for c in (range(2), range(3), range(4)): for r in (range(4,6), range(4,7), range(4,8)): result = glm.outerProduct(tuple(c), tuple(r)) l = [e for l in result for e in l] for i in range(len(l)): assert l[i] == (c[i % len(c)]) * (r[i // len(c)]), (l, c, r, i) def test_determinant(): for T in gen_type("M22_M33_M44__fF"): L = get_len_of_type(T) args = list(range(1, L + 1)) prod = 1 for arg in args: prod *= arg assert glm.determinant(T(*args)) == prod, T(*args) def test_inverse(): for T in gen_type("M22_M33_M44__fF"): m = T(((0, 1, 2, 3), (4, 5, 6, 7), (8, 9, 10, 11), (12, 13, 14, 15))) i = glm.inverse(m) p = m * i assert glm.equal(m, i, 0.00001) ##/core_func_matrix ## ## core_func_packing ## def test_packUnorm2x16(): cases = [ glm.vec2(1.0, 0.0), glm.vec2(0.5, 0.7), glm.vec2(0.1, 0.2) ] for case in cases: packed = glm.packUnorm2x16(case) unpacked = glm.unpackUnorm2x16(packed) assert glm.equal(case, unpacked, 1 / 65535) def test_packSnorm2x16(): cases = [ glm.vec2( 1.0, 0.0), glm.vec2(-0.5,-0.7), glm.vec2(-0.1, 0.1) ] for case in cases: packed = glm.packSnorm2x16(case) unpacked = glm.unpackSnorm2x16(packed) assert glm.equal(case, unpacked, 1 / 32767) def test_packUnorm4x8(): cases = [ glm.vec4(1.0, 0.7, 0.3, 0.0), glm.vec4(0.5, 0.1, 0.2, 0.3) ] for case in cases: packed = glm.packUnorm4x8(case) unpacked = glm.unpackUnorm4x8(packed) assert glm.equal(case, unpacked, 1 / 255) def test_packSnorm4x8(): cases = [ glm.vec4( 1.0, 0.0,-0.5,-1.0), glm.vec4(-0.7,-0.1, 0.1, 0.7) ] for case in cases: packed = glm.packSnorm4x8(case) unpacked = glm.unpackSnorm4x8(packed) assert glm.equal(case, unpacked, 1 / 127) def test_packHalf2x16(): cases = [ glm.vec2( 1.0, 2.0), glm.vec2(-1.0,-2.0), glm.vec2(-1.1, 1.1) ] for case in cases: packed = glm.packHalf2x16(case) unpacked = glm.unpackHalf2x16(packed) assert glm.equal(case, unpacked, 1 / 127) def test_packDouble2x32(): cases = [ glm.uvec2( 1, 2), glm.uvec2(-1,-2), glm.uvec2(-1000, 1100) ] for case in cases: packed = glm.packDouble2x32(case) unpacked = glm.unpackDouble2x32(packed) assert case == unpacked, (case, unpacked) ##/core_func_packing ## ## core_func_trigonometric ## def test_sin(): for T in gen_type("V_N__fF"): v = glm.radians(glm.degrees(random.random())) assert glm.equal(glm.asin(glm.sin(T(v))), T(v), 0.0001), v assert glm.equal(glm.sin(T(v)), T(math.sin(v)), 0.0001), v def test_cos(): for T in gen_type("V_N__fF"): v = glm.radians(glm.degrees(random.random())) assert glm.equal(glm.acos(glm.cos(T(v))), T(v), 0.0001), v assert glm.equal(glm.cos(T(v)), T(math.cos(v)), 0.0001), v def test_tan(): for T in gen_type("V_N__fF"): v = glm.radians(glm.degrees(random.random())) assert glm.equal(glm.atan(glm.tan(T(v))), T(v), 0.0001), v assert glm.equal(glm.tan(T(v)), T(math.tan(v)), 0.0001), v def test_sinh(): for T in gen_type("V_N__fF"): v = glm.radians(glm.degrees(random.random())) assert glm.equal(glm.asinh(glm.sinh(T(v))), T(v), 0.0001), v assert glm.equal(glm.sinh(T(v)), T(math.sinh(v)), 0.0001), v def test_cosh(): for T in gen_type("V_N__fF"): v = glm.radians(glm.degrees(random.random())) assert glm.equal(glm.acosh(glm.cosh(T(v))), T(v), 0.0001), v assert glm.equal(glm.cosh(T(v)), T(math.cosh(v)), 0.0001), v def test_tanh(): for T in gen_type("V_N__fF"): v = glm.radians(glm.degrees(random.random())) assert glm.equal(glm.atanh(glm.tanh(T(v))), T(v), 0.0001), v assert glm.equal(glm.tanh(T(v)), T(math.tanh(v)), 0.0001), v ##/core_func_trigonometric ## ## core_func_vector_relational ## def test_not(): for T in gen_type("V__B"): b = T(False) assert glm.all(glm.not_(b)) def test_less(): for T in gen_type("V"): v = T(0) vp1 = v + 1 assert glm.all(glm.lessThan(v, vp1)) assert glm.all(glm.lessThanEqual(v, vp1)) assert glm.all(glm.lessThanEqual(v, v)) assert not glm.any(glm.lessThan(vp1, v)) assert not glm.any(glm.lessThanEqual(vp1, v)) def test_greater(): for T in gen_type("V"): v = T(0) vp1 = v + 1 assert glm.all(glm.greaterThan(vp1, v)) assert glm.all(glm.greaterThanEqual(vp1, v)) assert glm.all(glm.greaterThanEqual(v, v)) assert not glm.any(glm.greaterThan(v, vp1)) assert not glm.any(glm.greaterThanEqual(v, vp1)) def test_equal(): for T in gen_type("V"): assert glm.all(glm.equal(T(0), T(0))) assert not glm.any(glm.notEqual(T(0), T(0))) ##/core_func_vector_relational ## ## core_type_mat2x2 ## def test_mat2x2(): l = glm.mat2x2(1) m = glm.mat2x2(1) u = glm.vec2(1) v = glm.vec2(1) x = 1 a = m * u b = v * m n = x / m o = m / x p = x * m q = m * x assert not glm.any(glm.notEqual(m, q, 0.00001)) assert glm.all(glm.equal(m, l, 0.00001)); ##/core_type_mat2x2 ## ###/GLM TESTS ### def test_array_matmul(): hitbox = glm.array( glm.vec2(0., 1.), glm.vec2(1., 1.), glm.vec2(1., 0.), glm.vec2(0., 0.), ) rotation = glm.radians(90) scale_x = 1. scale_y = 2. cos_rotation = glm.cos(rotation) sin_rotation = glm.sin(rotation) rotation_scale_matrix = glm.mat2x2( scale_x * cos_rotation, -scale_y * sin_rotation, scale_x * sin_rotation, scale_y * cos_rotation ) hitbox_rotated = hitbox * rotation_scale_matrix # I expect to see the points rotated 90 degrees, approximately: # array(vec2(-2, 0), vec2(-2, 1), vec2(0, 1), vec2(0, 0)) assert glm.equal(hitbox_rotated[0].x, -2, 0.00001) assert glm.equal(hitbox_rotated[0].y, 0, 0.00001) assert glm.equal(hitbox_rotated[1].x, -2, 0.00001) assert glm.equal(hitbox_rotated[1].y, 1, 0.00001) assert glm.equal(hitbox_rotated[2].x, 0, 0.00001) assert glm.equal(hitbox_rotated[2].y, 1, 0.00001) assert glm.equal(hitbox_rotated[3].x, 0, 0.00001) assert glm.equal(hitbox_rotated[3].y, 0, 0.00001) ### TEST TEST ### def test_everything_tested(): f = open(__file__, "r") content = f.read() f.close() excluded = ["make_mat.+", "make_vec.+"] builtin_function_or_method = type(glm.silence) for raw in dir(glm): func = getattr(glm, raw) if (raw.startswith("__") and raw.endswith("__") or not isinstance(func, builtin_function_or_method)): continue if not raw in content and not any((re.fullmatch(ex, raw) for ex in excluded)): print("{} has no test.".format(raw))Zuzu-Typ-PyGLM-e113a8a/test/PyGLM_vs_NumPy.py000066400000000000000000000156101511156275200207250ustar00rootroot00000000000000import timeit, sys, random import glm, numpy ON_WINDOWS = sys.platform == 'win32' print_horizontal_rule = lambda: print("+----------------------------------------+------------+------------+-----------+") pad_with_spaces = lambda text, length, align="left": text + " " * (length - len(text)) if align == "left" else " " * (length - len(text)) + text seconds_to_milliseconds = lambda seconds: int(round(seconds * 1000, 0)) pyglm_total_time = 0 numpy_total_time = 0 def word_wrap(text, max_length): out = [] current_word = [] current_length = 0 for c in text: if current_length >= max_length: out.append("\n") current_length = len(current_word) if c == " ": out.append("".join(current_word)) if (current_length < max_length): out.append(" ") current_word = [] elif c == "\n": out.append("".join(current_word)) out.append("\n") current_word = [] current_length = 0 else: current_word.append(c) current_length += 1 if current_word: out.append("".join(current_word)) return "".join(out).rstrip() def print_row(descr, pyglm, numpy, ratio, print_header=True, end="\n"): descr = word_wrap(descr, 38) descr_lines = descr.split("\n") if print_header: for line in descr_lines[:-1]: print(f"| {pad_with_spaces(line, 38)} | {' ' * 10} | {' ' * 10} | {' ' * 9} |") descr_last_line = descr_lines[-1] print(f"| {pad_with_spaces(descr_last_line, 38)} | {pad_with_spaces(pyglm, 10, align='right')} | {pad_with_spaces(numpy, 10, align='right')} | {pad_with_spaces(ratio, 9, align='right')} |", end=end) def run_test(descr, pyglm_setup_code, pyglm_code, numpy_setup_code, numpy_code, number): global pyglm_total_time, numpy_total_time descr += f"\n({number:,} times)" if ON_WINDOWS: print_row(descr, "", "", "", end="\r") pyglm_result = 2**31 numpy_result = 2**31 for i in range(10): run_pyglm_first = random.choice((True,False)) if run_pyglm_first: pyglm_result = min(pyglm_result, timeit.timeit(pyglm_code, pyglm_setup_code, number=number)) numpy_result = min(numpy_result, timeit.timeit(numpy_code, numpy_setup_code, number=number)) else: numpy_result = min(numpy_result, timeit.timeit(numpy_code, numpy_setup_code, number=number)) pyglm_result = min(pyglm_result, timeit.timeit(pyglm_code, pyglm_setup_code, number=number)) if ON_WINDOWS: print_row(descr, "{}ms".format(seconds_to_milliseconds(pyglm_result)), "{}ms".format(seconds_to_milliseconds(numpy_result)), "{:.02f}x".format(numpy_result / pyglm_result), end="\r", print_header=False) pyglm_total_time += pyglm_result numpy_total_time += numpy_result print_row(descr, "{}ms".format(seconds_to_milliseconds(pyglm_result)), "{}ms".format(seconds_to_milliseconds(numpy_result)), "{:.02f}x".format(numpy_result / pyglm_result), print_header=not ON_WINDOWS) print_horizontal_rule() print(f"""Evaluating performance of PyGLM compared to NumPy. Running on platform '{sys.platform}'. Python version: {sys.version} Comparing the following module versions: {glm.version} vs NumPy version {numpy.__version__} ________________________________________________________________________________ The following table shows information about a task to be achieved and the time it took when using the given module. Lower time is better. Each task is repeated ten times per module, only showing the best (i.e. lowest) value. """) print_horizontal_rule() print_row("Description", "PyGLM time", "NumPy time", "ratio") print_horizontal_rule() ############################ # Actual tests start here: # ############################ run_test("3 component vector creation", "import glm", "glm.vec3()", "import numpy", "numpy.zeros((3,), numpy.float32)", 100000 ) run_test("3 component vector creation with custom components", "import glm", "glm.vec3(1,2,3)", "import numpy", "numpy.array((1,2,3), numpy.float32)", 50000 ) run_test("dot product", "import glm; v1 = glm.vec3(); v2 = glm.vec3()", "glm.dot(v1, v2)", "import numpy; v1 = numpy.zeros((3,), numpy.float32); v2 = numpy.zeros((3,), numpy.float32)", "numpy.dot(v1, v2)", 50000 ) run_test("cross product", "import glm; v1 = glm.vec3(1); v2 = glm.vec3(1,2,3)", "glm.cross(v1, v2)", "import numpy; v1 = numpy.array((1,1,1), numpy.float32); v2 = numpy.array((1,2,3), numpy.float32)", "numpy.cross(v1, v2)", 25000 ) run_test("L2-Norm of 3 component vector", "import glm; v = glm.vec3(1,2,3)", "glm.l2Norm(v)", "import numpy; v = numpy.array((1,1,1), numpy.float32)", "numpy.linalg.norm(v)", 100000 ) run_test("4x4 matrix creation", "import glm", "glm.mat4(0)", "import numpy", "numpy.zeros((4,4), numpy.float32)", 50000 ) run_test("4x4 identity matrix creation", "import glm", "glm.mat4()", "import numpy", "numpy.identity(4, numpy.float32)", 100000 ) run_test("4x4 matrix transposition", "import glm; m = glm.mat4()", "glm.transpose(m)", "import numpy; m = numpy.identity(4, numpy.float32)", "numpy.transpose(m)", 50000 ) run_test("4x4 multiplicative inverse", "import glm; m = glm.mat4()", "glm.inverse(m)", "import numpy; m = numpy.identity(4, numpy.float32)", "numpy.linalg.inv(m)", 50000 ) run_test("3 component vector addition", "import glm; v1 = glm.vec3(1); v2 = glm.vec3(1,2,3)", "v1 + v2", "import numpy; v1 = numpy.array((1,1,1), numpy.float32); v2 = numpy.array((1,2,3), numpy.float32)", "v1 + v2", 100000 ) run_test("4x4 matrix multiplication", "import glm; m1 = glm.mat4(); m2 = glm.mat4(2)", "m1 * m2", "import numpy; m1 = numpy.identity(4, numpy.float32); m2 = numpy.identity(4, numpy.float32) * 2", "m1 * m2", 100000 ) run_test("4x4 matrix x vector multiplication", "import glm; m = glm.mat4(); v = glm.vec4()", "m * v", "import numpy; m = numpy.identity(4, numpy.float32); v = numpy.zeros((4,), numpy.float32)", "m * v", 100000 ) print_row("TOTAL", "{:.02f}s".format(pyglm_total_time), "{:.02f}s".format(numpy_total_time), "{:.02f}x".format(numpy_total_time / pyglm_total_time)) print_horizontal_rule() Zuzu-Typ-PyGLM-e113a8a/vs-project/000077500000000000000000000000001511156275200166755ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/vs-project/.gitignore000066400000000000000000000000141511156275200206600ustar00rootroot00000000000000Win32/ x64/ Zuzu-Typ-PyGLM-e113a8a/vs-project/PyGLM build/000077500000000000000000000000001511156275200207055ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/vs-project/PyGLM build/.gitignore000066400000000000000000000000141511156275200226700ustar00rootroot00000000000000Win32/ x64/ Zuzu-Typ-PyGLM-e113a8a/vs-project/PyGLM build/PyGLM build.vcxproj000066400000000000000000000571711511156275200243450ustar00rootroot00000000000000 Debug Win32 Release Win32 Debug x64 Release x64 15.0 {9908A257-6824-4543-B7E4-ACFD9F40AD85} PyGLMbuild 10.0 DynamicLibrary true v143 MultiByte DynamicLibrary false v143 true MultiByte DynamicLibrary true v143 MultiByte DynamicLibrary false v143 true MultiByte glm_d .pyd .pyd glm $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ glm_d .pyd $(SolutionDir)$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ glm .pyd Level3 Disabled true true PyGLM_DEBUG;%(PreprocessorDefinitions) $(ProjectDir)..\..\PyGLM_lib\glm;C:\Python39\include;%(AdditionalIncludeDirectories) C:\Python39\libs;%(AdditionalLibraryDirectories) Level3 Disabled true true $(ProjectDir)..\..\PyGLM_lib\glm;C:\Python39\include;%(AdditionalIncludeDirectories) MultiThreadedDLL EnableFastChecks PyGLM_DEBUG;%(PreprocessorDefinitions) 4706;6282;%(DisableSpecificWarnings) /bigobj %(AdditionalOptions) C:\Python39\libs;%(AdditionalLibraryDirectories) python39_d.lib;%(AdditionalDependencies) Level3 MaxSpeed true true true true $(ProjectDir)..\..\PyGLM_lib\glm;C:\Python39\include;%(AdditionalIncludeDirectories) true true C:\Python39\libs;%(AdditionalLibraryDirectories) Level3 MaxSpeed true true true true $(ProjectDir)..\..\PyGLM_lib\glm;C:\Python39\include;%(AdditionalIncludeDirectories) true true C:\Python39\libs;%(AdditionalLibraryDirectories) Zuzu-Typ-PyGLM-e113a8a/vs-project/PyGLM build/PyGLM build.vcxproj.filters000066400000000000000000001114361511156275200260070ustar00rootroot00000000000000 {4FC737F1-C7A5-4376-A066-2A32D752A2FF} cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx {93995380-89BD-4b04-88EB-625FBE52EBFB} h;hh;hpp;hxx;hm;inl;inc;ipp;xsd {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms {d93bf945-4c03-457f-aeba-cc08ef943ac5} {3f71ae84-8e6d-46da-8d3e-1a6cb0431bce} {a9c5658d-f855-4feb-adff-8938531bb467} {a8ef72c0-c8d4-49be-9352-e28a6d9c7e53} {f94804c9-2fd4-4727-9fba-10193a808b9d} {91fc1aa6-030e-4a2e-93ae-a529391acf24} {d91dc717-4ee5-4a11-8c49-aa7dd85ceaf9} {86837062-3d03-403d-8a0f-6251bb31281b} {989919bb-860f-484e-91a7-39890e432364} {97504e6a-71c0-459c-b60e-adffd2de6397} {0971f061-c871-459a-b9c1-1c8b93aaa6a6} {50e02b2a-0ce5-4418-8ea1-b9864b0541e5} {145e9a38-f295-49c9-ae38-33d20d4c3830} {650253ba-6d79-40b0-b31f-dad50b3fd114} {0e612982-f616-4550-b17d-13f8e0a372ab} {5cf1e6fe-ce56-424d-97f2-672fc8b011da} {668b47bb-5447-40ee-a242-38772b642df7} {fd72c7af-27af-434b-a4bf-af8c36719f58} {360afe8a-a253-4fa7-8db2-8ec052e5b443} {8b909f83-8bb7-45ff-bc39-e101bbf4235d} {3030b6ae-9322-4b96-bd5e-0b3c669b829a} {6142d088-f7b0-49b8-b105-1a6a2646d137} {ec62c849-01b6-4e71-97a8-fa23a46b2d04} {14240a23-84d1-4c0e-b53b-e15e84291972} {c498d64f-2c40-4601-bad7-f219c50a99d9} {8b0e119c-7855-4179-aafb-f5334e320d3f} {18e7d3dd-8dfc-4bf8-9e09-cba1262d33ef} {1847a5e6-780a-4faf-8c52-e9124d276099} {7d1459e6-6a98-4ab3-a1bc-4c2b309b01af} {cc8ad1ac-68eb-4201-9d4f-ac075fb1ad3f} {cf94377a-52e0-4533-a33b-c7ed3af9427c} {9c1ef5d8-f6e3-4b55-81d4-37a331591355} {fe2f4a1c-7980-41c6-8b20-169657425284} {9a1c0558-9aa2-456e-81a1-69810e680b20} {e30da7da-a8d1-490b-8537-99d2ee24ebf1} {26a4ef7e-5751-405c-b536-464a1e3b70c0} Quelldateien Headerdateien Headerdateien Headerdateien\PyGLM\functions\detail Headerdateien\PyGLM\functions\detail Headerdateien\PyGLM\functions\detail Headerdateien\PyGLM\functions\detail Headerdateien\PyGLM\functions\detail Headerdateien\PyGLM\functions\detail Headerdateien\PyGLM\functions\detail Headerdateien\PyGLM\functions\detail Headerdateien\PyGLM\functions\detail Headerdateien\PyGLM\functions\other Headerdateien\PyGLM\functions\other Headerdateien\PyGLM\functions\other Headerdateien\PyGLM\functions\other Headerdateien\PyGLM\functions\other Headerdateien\PyGLM\functions\stable_extensions Headerdateien\PyGLM\functions\stable_extensions Headerdateien\PyGLM\functions\stable_extensions Headerdateien\PyGLM\functions\stable_extensions Headerdateien\PyGLM\functions\stable_extensions Headerdateien\PyGLM\functions\stable_extensions Headerdateien\PyGLM\functions\stable_extensions Headerdateien\PyGLM\functions\stable_extensions Headerdateien\PyGLM\functions\stable_extensions Headerdateien\PyGLM\functions\stable_extensions Headerdateien\PyGLM\functions\stable_extensions Headerdateien\PyGLM\functions\stable_extensions Headerdateien\PyGLM\functions\stable_extensions Headerdateien\PyGLM\functions\stable_extensions Headerdateien\PyGLM\functions\stable_extensions Headerdateien\PyGLM\functions\stable_extensions Headerdateien\PyGLM\functions\stable_extensions Headerdateien\PyGLM\functions\stable_extensions Headerdateien\PyGLM\functions\stable_extensions Headerdateien\PyGLM\functions\stable_extensions Headerdateien\PyGLM\functions\unstable_extensions Headerdateien\PyGLM\functions\unstable_extensions Headerdateien\PyGLM\functions\unstable_extensions Headerdateien\PyGLM\functions\unstable_extensions Headerdateien\PyGLM\functions\unstable_extensions Headerdateien\PyGLM\functions\unstable_extensions Headerdateien\PyGLM\functions\unstable_extensions Headerdateien\PyGLM\functions Headerdateien\PyGLM\functions Headerdateien\PyGLM\internal_functions\type_getters Headerdateien\PyGLM\internal_functions\type_getters Headerdateien\PyGLM\internal_functions\type_getters Headerdateien\PyGLM\internal_functions\type_getters Headerdateien\PyGLM\internal_functions\type_getters Headerdateien\PyGLM\internal_functions\type_getters Headerdateien\PyGLM\internal_functions\type_getters Headerdateien\PyGLM\internal_functions\type_getters Headerdateien\PyGLM\internal_functions\type_getters Headerdateien\PyGLM\internal_functions\type_getters Headerdateien\PyGLM\internal_functions Headerdateien\PyGLM\internal_functions Headerdateien\PyGLM\internal_functions Headerdateien\PyGLM\internal_functions Headerdateien\PyGLM\internal_functions Headerdateien\PyGLM\internal_functions Headerdateien\PyGLM\internal_functions Headerdateien\PyGLM\internal_functions Headerdateien\PyGLM\internal_functions Headerdateien\PyGLM\internal_functions Headerdateien\PyGLM\type_methods Headerdateien\PyGLM\type_methods Headerdateien\PyGLM\type_methods Headerdateien\PyGLM\type_methods Headerdateien\PyGLM\type_methods Headerdateien\PyGLM\type_methods Headerdateien\PyGLM\types\glmArray Headerdateien\PyGLM\types\glmArray Headerdateien\PyGLM\types\mat Headerdateien\PyGLM\types\mat Headerdateien\PyGLM\types\mat\double Headerdateien\PyGLM\types\mat\double Headerdateien\PyGLM\types\mat\double Headerdateien\PyGLM\types\mat\double Headerdateien\PyGLM\types\mat\double Headerdateien\PyGLM\types\mat\double Headerdateien\PyGLM\types\mat\double Headerdateien\PyGLM\types\mat\double Headerdateien\PyGLM\types\mat\double Headerdateien\PyGLM\types\mat\double Headerdateien\PyGLM\types\mat\float Headerdateien\PyGLM\types\mat\float Headerdateien\PyGLM\types\mat\float Headerdateien\PyGLM\types\mat\float Headerdateien\PyGLM\types\mat\float Headerdateien\PyGLM\types\mat\float Headerdateien\PyGLM\types\mat\float Headerdateien\PyGLM\types\mat\float Headerdateien\PyGLM\types\mat\float Headerdateien\PyGLM\types\mat\float Headerdateien\PyGLM\types\mat\int Headerdateien\PyGLM\types\mat\int Headerdateien\PyGLM\types\mat\int Headerdateien\PyGLM\types\mat\int Headerdateien\PyGLM\types\mat\int Headerdateien\PyGLM\types\mat\int Headerdateien\PyGLM\types\mat\int Headerdateien\PyGLM\types\mat\int Headerdateien\PyGLM\types\mat\int Headerdateien\PyGLM\types\mat\int Headerdateien\PyGLM\types\mat\uint Headerdateien\PyGLM\types\mat\uint Headerdateien\PyGLM\types\mat\uint Headerdateien\PyGLM\types\mat\uint Headerdateien\PyGLM\types\mat\uint Headerdateien\PyGLM\types\mat\uint Headerdateien\PyGLM\types\mat\uint Headerdateien\PyGLM\types\mat\uint Headerdateien\PyGLM\types\mat\uint Headerdateien\PyGLM\types\mat\uint Headerdateien\PyGLM\types\mat\uint Headerdateien\PyGLM\types\mvec Headerdateien\PyGLM\types\mvec Headerdateien\PyGLM\types\mvec\double Headerdateien\PyGLM\types\mvec\double Headerdateien\PyGLM\types\mvec\double Headerdateien\PyGLM\types\mvec\double Headerdateien\PyGLM\types\mvec\float Headerdateien\PyGLM\types\mvec\float Headerdateien\PyGLM\types\mvec\float Headerdateien\PyGLM\types\mvec\float Headerdateien\PyGLM\types\mvec\int Headerdateien\PyGLM\types\mvec\int Headerdateien\PyGLM\types\mvec\int Headerdateien\PyGLM\types\mvec\int Headerdateien\PyGLM\types\mvec\uint Headerdateien\PyGLM\types\mvec\uint Headerdateien\PyGLM\types\mvec\uint Headerdateien\PyGLM\types\mvec\uint Headerdateien\PyGLM\types\qua\double Headerdateien\PyGLM\types\qua Headerdateien\PyGLM\types\qua Headerdateien\PyGLM\types\qua\float Headerdateien\PyGLM\types\vec\double Headerdateien\PyGLM\types\vec\double Headerdateien\PyGLM\types\vec\double Headerdateien\PyGLM\types\vec\double Headerdateien\PyGLM\types\vec\double Headerdateien\PyGLM\types\vec\float Headerdateien\PyGLM\types\vec\float Headerdateien\PyGLM\types\vec\float Headerdateien\PyGLM\types\vec\float Headerdateien\PyGLM\types\vec\float Headerdateien\PyGLM\types\vec\int8 Headerdateien\PyGLM\types\vec\int8 Headerdateien\PyGLM\types\vec\int8 Headerdateien\PyGLM\types\vec\int8 Headerdateien\PyGLM\types\vec\int8 Headerdateien\PyGLM\types\vec\int16 Headerdateien\PyGLM\types\vec\int16 Headerdateien\PyGLM\types\vec\int16 Headerdateien\PyGLM\types\vec\int16 Headerdateien\PyGLM\types\vec\int16 Headerdateien\PyGLM\types\vec\int32 Headerdateien\PyGLM\types\vec\int32 Headerdateien\PyGLM\types\vec\int32 Headerdateien\PyGLM\types\vec\int32 Headerdateien\PyGLM\types\vec\int32 Headerdateien\PyGLM\types\vec\int64 Headerdateien\PyGLM\types\vec\int64 Headerdateien\PyGLM\types\vec\int64 Headerdateien\PyGLM\types\vec\int64 Headerdateien\PyGLM\types\vec\int64 Headerdateien\PyGLM\types\vec\bool Headerdateien\PyGLM\types\vec\bool Headerdateien\PyGLM\types\vec\bool Headerdateien\PyGLM\types\vec\bool Headerdateien\PyGLM\types\vec\bool Headerdateien\PyGLM\types\vec\uint64 Headerdateien\PyGLM\types\vec\uint64 Headerdateien\PyGLM\types\vec\uint64 Headerdateien\PyGLM\types\vec\uint64 Headerdateien\PyGLM\types\vec\uint64 Headerdateien\PyGLM\types\vec\uint32 Headerdateien\PyGLM\types\vec\uint32 Headerdateien\PyGLM\types\vec\uint32 Headerdateien\PyGLM\types\vec\uint32 Headerdateien\PyGLM\types\vec\uint32 Headerdateien\PyGLM\types\vec\uint16 Headerdateien\PyGLM\types\vec\uint16 Headerdateien\PyGLM\types\vec\uint16 Headerdateien\PyGLM\types\vec\uint16 Headerdateien\PyGLM\types\vec\uint16 Headerdateien\PyGLM\types\vec\uint8 Headerdateien\PyGLM\types\vec\uint8 Headerdateien\PyGLM\types\vec\uint8 Headerdateien\PyGLM\types\vec\uint8 Headerdateien\PyGLM\types\vec\uint8 Headerdateien\PyGLM\types\vec Headerdateien\PyGLM\types\vec Headerdateien\PyGLM\types Headerdateien\PyGLM\types Headerdateien\PyGLM\types Headerdateien\PyGLM Headerdateien\PyGLM Headerdateien\PyGLM\types Headerdateien Headerdateien\PyGLM\internal_functions Zuzu-Typ-PyGLM-e113a8a/vs-project/PyGLM build/PyGLM build.vcxproj.user000066400000000000000000000002421511156275200253050ustar00rootroot00000000000000 Zuzu-Typ-PyGLM-e113a8a/vs-project/PyGLM test.pyproj000066400000000000000000000046301511156275200220350ustar00rootroot00000000000000 Debug 2.0 4db02b00-448e-49ac-bbde-4e06aa14f15d PyGLM_run.py ..\test . . PyGLM test PyGLM test Standard Python launcher True -i False Global|PythonCore|3.9 true true false true false PyGLM build {9908a257-6824-4543-b7e4-acfd9f40ad85} True Zuzu-Typ-PyGLM-e113a8a/vs-project/PyGLM.sln000066400000000000000000000045711511156275200203520ustar00rootroot00000000000000 Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.10.34916.146 MinimumVisualStudioVersion = 10.0.40219.1 Project("{888888A0-9F3D-457C-B088-3A5042F75D52}") = "PyGLM test", "PyGLM test.pyproj", "{4DB02B00-448E-49AC-BBDE-4E06AA14F15D}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PyGLM build", "PyGLM build\PyGLM build.vcxproj", "{9908A257-6824-4543-B7E4-ACFD9F40AD85}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {4DB02B00-448E-49AC-BBDE-4E06AA14F15D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4DB02B00-448E-49AC-BBDE-4E06AA14F15D}.Debug|x64.ActiveCfg = Debug|Any CPU {4DB02B00-448E-49AC-BBDE-4E06AA14F15D}.Debug|x86.ActiveCfg = Debug|Any CPU {4DB02B00-448E-49AC-BBDE-4E06AA14F15D}.Release|Any CPU.ActiveCfg = Release|Any CPU {4DB02B00-448E-49AC-BBDE-4E06AA14F15D}.Release|x64.ActiveCfg = Release|Any CPU {4DB02B00-448E-49AC-BBDE-4E06AA14F15D}.Release|x86.ActiveCfg = Release|Any CPU {9908A257-6824-4543-B7E4-ACFD9F40AD85}.Debug|Any CPU.ActiveCfg = Debug|x64 {9908A257-6824-4543-B7E4-ACFD9F40AD85}.Debug|Any CPU.Build.0 = Debug|x64 {9908A257-6824-4543-B7E4-ACFD9F40AD85}.Debug|x64.ActiveCfg = Debug|x64 {9908A257-6824-4543-B7E4-ACFD9F40AD85}.Debug|x64.Build.0 = Debug|x64 {9908A257-6824-4543-B7E4-ACFD9F40AD85}.Debug|x86.ActiveCfg = Debug|Win32 {9908A257-6824-4543-B7E4-ACFD9F40AD85}.Debug|x86.Build.0 = Debug|Win32 {9908A257-6824-4543-B7E4-ACFD9F40AD85}.Release|Any CPU.ActiveCfg = Release|x64 {9908A257-6824-4543-B7E4-ACFD9F40AD85}.Release|Any CPU.Build.0 = Release|x64 {9908A257-6824-4543-B7E4-ACFD9F40AD85}.Release|x64.ActiveCfg = Release|x64 {9908A257-6824-4543-B7E4-ACFD9F40AD85}.Release|x64.Build.0 = Release|x64 {9908A257-6824-4543-B7E4-ACFD9F40AD85}.Release|x86.ActiveCfg = Release|Win32 {9908A257-6824-4543-B7E4-ACFD9F40AD85}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {2372BA11-12FC-4113-9F11-16049FC0C8C4} EndGlobalSection EndGlobal Zuzu-Typ-PyGLM-e113a8a/vs-project/PyGLM_run.py000066400000000000000000000020731511156275200210650ustar00rootroot00000000000000 import os os.environ["TEST_PICKLING"] = "True" TEST = True TEST_PERFORMANCE = False GEN_DOC = True if TEST_PERFORMANCE: import PyGLM_vs_NumPy if TEST: import PyGLM_test, time, traceback, sys print("Testing PyGLM...") start_time = time.time() for member in dir(PyGLM_test): if member.startswith("test"): try: getattr(PyGLM_test, member)() except: print("The following test failed: " + member, file=sys.stderr) traceback.print_exc() print("Finished tests in {:.3g}s".format(time.time()-start_time)) import glm from glm import * if GEN_DOC: import generate_function_reference if True: import time def t(func, *args, r=1000000, **kw): start = time.time() for i in range(r): func(*args, **kw) return time.time() - start from sys import getrefcount as rc def memcor(func, *args, r=1000000, **kw): for i in range(r): try: func(*args, **kw) except: pass Zuzu-Typ-PyGLM-e113a8a/vs-project/SlashBack.py000066400000000000000000000467231511156275200211160ustar00rootroot00000000000000 # License (zlib/libpng): ############################################# # # # Copyright (c) 2019 Zuzu_Typ # #--------------------------------------------# # This software is provided 'as-is', # # without any express or implied warranty. # # In no event will the authors be held # # liable for any damages arising from the # # use of this software. # # # # Permission is granted to anyone to use # # this software for any purpose, including # # commercial applications, and to alter it # ## and redistribute it freely, subject to # ## the following restrictions: # ## # ## 1. The origin of this software must not # ## be misrepresented; you must not claim # ## that you wrote the original software. # ## If you use this software in a product, # ## an acknowledgment in the product # ## documentation would be appreciated but # ## is not required. # ## # ## 2. Altered source versions must be # # # plainly marked as such, and must not # # # be misrepresented as being the # # # original software. # # # # # # 3. This notice may not be removed or # ### altered from any source distribution. # ############################################## from builtins import open as builtins_open import sys, os, traceback, string __version__ = "0.2.0" __welcome__ = f"""\ SlashBack v{__version__} by Zuzu_Typ""" __doc__ = """\ A little editor for my own markup language called SlashBack ( \\SB\\ ).""" __usage__ = """\ Usage: SlashBack.py """ class TextConfig: NO_LIST = 0 ORDERED_LIST = 1 UNORDERED_LIST = 2 NO_TASK = 0 CHECKED_TASK = 1 UNCHECKED_TASK = 2 bold = False italic = False strikethrough = False underline = False quote = False table = False separator = False raw = False ignore = False code = None image = None url = None mention = None reference = None comment = None list = NO_LIST task = NO_TASK header = 0 index = 1 indent = 1 list_indices = {} # only for ordered lists def __init__(self, other_config = None): if other_config: self.bold = other_config.bold self.italic = other_config.italic self.strikethrough = other_config.strikethrough self.underline = other_config.underline self.quote = other_config.quote self.table = other_config.table self.separator = other_config.separator self.raw = other_config.raw self.ignore = other_config.ignore self.code = other_config.code self.image = other_config.image self.url = other_config.url self.mention = other_config.mention self.reference = other_config.reference self.comment = other_config.comment self.list = other_config.list self.task = other_config.task self.header = other_config.header self.index = other_config.index self.indent = other_config.indent self.list_indices = other_config.list_indices.copy() def __str__(self): out = set() if self.comment: out.add(f"/* {self.comment} */") if self.bold: out.add("bold") if self.italic: out.add("italic") if self.strikethrough: out.add("strikethrough") if self.underline: out.add("underline") if self.quote: out.add("quote") if self.table: out.add(f"table at {self.index}") if self.raw: out.add("") if self.code: out.add(f"code {self.code}") if self.image: out.add(f"image {self.image}") if self.url: out.add(f"url {self.url}") if self.mention: out.add(f"mention {self.mention}") if self.reference: out.add(f"reference {self.reference}") if self.list: out.add(("ordered list" if self.list == self.ORDERED_LIST else "unordered list") + f" at {self.index}") if self.task: out.add("checked task" if self.list == self.CHECKED_TASK else "unchecked task") if self.header: out.add(f"h{self.header}") if self.separator: out.add("---") return ", ".join(out) __repr__ = lambda self: self.__str__() class Text: def __init__(self, text, text_config): self.text = text self.text_config = text_config class ParsedText: def __init__(self, text_list): self.text_list = text_list def to_markdown(self): out = [f"[//]: # (generated using SlashBack {__version__})\n\n".encode()] current_text_config = TextConfig() table_signalized = True for text in self.text_list: text_string = text.text this_text_config = text.text_config if this_text_config.raw: out.append(text_string) continue if not this_text_config.code: for char in "\\`*_{}[]()#+-.!": text_string = text_string.replace(char.encode(), f"\\{char}".encode()) for char, replacement in ((b"&", b"&"), (b"<", b"<"), (b">", b">"), (b"~", b"~"), (b"|", b"|"), (b"@", b"@"), (b"`", b"`")): text_string = text_string.replace(char, replacement) if not this_text_config.table: text_string = text_string.replace(b"\t", b" ").replace(b" ", b" " * 2).replace(b"\r\n", b"\n").replace(b"\r", b"\n").replace(b"\n", b" \n") else: pass#text_string = text_string.replace(b"`", b"`") if not table_signalized and b"\n" in text_string: table_signalized = True text_string = text_string.replace(b"\n", b"\n" + b"|".join([b"-"] * (this_text_config.index + 1)) + b"\n") if this_text_config.list and this_text_config.index != 0 and current_text_config.index != this_text_config.index: out.append(b" " * (this_text_config.indent - 1) + ( f"{this_text_config.index}. ".encode() if this_text_config.list == TextConfig.ORDERED_LIST else b"* ")) if current_text_config.table and this_text_config.table and current_text_config.index < this_text_config.index: out.append(b"|") if not current_text_config.bold and this_text_config.bold: out.append(b"**") if not current_text_config.italic and this_text_config.italic: out.append(b"*") if not current_text_config.strikethrough and this_text_config.strikethrough: out.append(b"~~") if not current_text_config.underline and this_text_config.underline: out.append(b"") if not current_text_config.quote and this_text_config.quote: out.append(b">") if not current_text_config.table and this_text_config.table: table_signalized = False if not current_text_config.code and this_text_config.code: out.append(b"``` ") if isinstance(this_text_config.code, bytes): out.append(this_text_config.code) if not current_text_config.image and this_text_config.image: out.append(b"![") if not current_text_config.url and this_text_config.url: out.append(b"[") if not current_text_config.list and this_text_config.list: pass if not current_text_config.task and this_text_config.task: if this_text_config.task == TextConfig.CHECKED_TASK: out.append(b"- [x] ") else: out.append(b"- [ ] ") if not current_text_config.header and this_text_config.header: out.append(b"#" * this_text_config.header + b" ") if not current_text_config.separator and this_text_config.separator: out.append(b"\n---") if not current_text_config.mention and this_text_config.mention: out.append(b"@" + this_text_config.mention) if not current_text_config.reference and this_text_config.reference: out.append(this_text_config.reference) if not current_text_config.comment and this_text_config.comment: out.append(f" [//]: # ({this_text_config.comment.decode()}) ".encode()) # backward # if current_text_config.url and not this_text_config.url: out.append(f"]({current_text_config.url.decode()})".encode()) if current_text_config.image and not this_text_config.image: out.append(f"]({current_text_config.image.decode()})".encode()) if current_text_config.code and not this_text_config.code: out.append(b" ```") if current_text_config.task and not this_text_config.task: out.append(b"\n\n") if current_text_config.quote and not this_text_config.quote: out.append(b"\n\n") if current_text_config.underline and not this_text_config.underline: out.append(b"") if current_text_config.strikethrough and not this_text_config.strikethrough: out.append(b"~~") if current_text_config.italic and not this_text_config.italic: out.append(b"*") if current_text_config.bold and not this_text_config.bold: out.append(b"**") if not (not current_text_config.ignore and this_text_config.ignore): out.append(text_string) current_text_config = this_text_config if current_text_config.url: out.append(f"]({current_text_config.url.decode()})".encode()) if current_text_config.image: out.append(f"]({current_text_config.image.decode()})".encode()) if current_text_config.code: out.append(b" ```") if current_text_config.quote: out.append(b"\n\n") if current_text_config.strikethrough: out.append(b"~~") if current_text_config.italic: out.append(b"*") if current_text_config.bold: out.append(b"**") return b"".join(out) class SlashBackParserError(Exception): pass class SlashBackParser: def __init__(self, path = None, auto_read = True): self.path = path self.read() def read(self): file_ = builtins_open(self.path, "rb") content = file_.read() file_.close() self.parsed_text = self.parse(content) def write(self, path): file_ = builtins_open(path, "wb") file_.write(self.parsed_text.to_markdown()) file_.close() def parse_single(self, command, config): command = command.lstrip((string.whitespace + "!#/:|+.~>_<").encode()).rstrip() if config.separator: config.separator = False if config.reference: config.reference = None if config.mention: config.mention = None if config.comment: config.comment = None if command == b"raw": config.raw = not config.raw elif command == b"h1": config.header = 0 if config.header else 1 elif command == b"h2": config.header = 0 if config.header else 2 elif command == b"h3": config.header = 0 if config.header else 3 elif command == b"h4": config.header = 0 if config.header else 4 elif command == b"h5": config.header = 0 if config.header else 5 elif command == b"h6": config.header = 0 if config.header else 6 elif command == b"b": config.bold = not config.bold elif command == b"i": config.italic = not config.italic elif command in (b"separator", b"sep"): config.separator = True elif command == b"s": config.strikethrough = not config.strikethrough elif command == b"u": config.underline = not config.underline elif command in (b"quote", b"q"): config.quote = not config.quote elif command in (b"table", b"tbl"): if config.list: raise SlashBackParserError("A table can't be created inside a list") config.table = not config.table config.index = 0 elif command in (b"list switch", b"ls", b"sl"): if not config.list: raise SlashBackParserError("There's no list to switch here") config.list = config.ORDERED_LIST if config.list == config.UNORDERED_LIST else config.UNORDERED_LIST config.index = 0 elif command in (b"list ordered", b"lo", b"ol"): if config.table: raise SlashBackParserError("A list can't be created inside a table") config.list = config.NO_LIST if config.list else config.ORDERED_LIST config.index = 0 elif command in (b"list unordered", b"lu", b"ul"): if config.table: raise SlashBackParserError("A list can't be created inside a table") config.list = config.NO_LIST if config.list else config.UNORDERED_LIST config.index = 0 elif command in (b"list", b"lo", b"ol", b"lu", b"ul"): if not config.list: raise SlashBackParseError("Unspecified list type") config.list = config.NO_LIST config.list_indices = {} elif command in (b"task checked", b"tc", b"x"): config.task = config.NO_TASK if config.task else config.CHECKED_TASK elif command in (b"task unchecked", b"tu", b"o"): config.task = config.NO_TASK if config.task else config.UNCHECKED_TASK elif command in (b"task", b"tc", b"tu", b"x", b"o"): if not config.task: raise SlashBackParseError("Unspecified task type") config.task = config.NO_TASK elif command in (b"image", b"img"): if not config.image: raise SlashBackParseError("Unspecified image type") config.image = None elif command == b"url": #TODO if not config.url: raise SlashBackParseError("Unspecified url link") config.url = None elif command.count(b"-") == len(command): if config.list: config.indent = command.count(b"-") for indent in config.list_indices.copy(): if indent > config.indent: del config.list_indices[indent] if config.list == config.ORDERED_LIST: config.index = config.list_indices.get(config.indent, 1) config.list_indices[config.indent] = config.index + 1 else: config.index += 1 elif config.table: config.index += 1 if not config.list and not config.table: raise SlashBackParserError(f"Unexpected \\{command.decode()}\\ token") else: space_index = command.find(b" ") first_command = command[:space_index] if space_index != -1 else command info = command[space_index:].strip() if space_index != -1 else "" if first_command == b"image": config.image = None if config.image else info elif first_command == b"url": config.url = None if config.url else info elif first_command == b"code": config.code = None if config.code else info if info else True elif first_command == b"mention": config.mention = info elif first_command == b"reference": config.reference = info elif first_command in (b"c", b"comment", b"ignore"): config.ignore = not config.ignore elif first_command in (b"ic", b"icomment"): config.comment = info else: raise SlashBackParserError(f"Unknown command \"{first_command.decode()}\"") return config def parse(self, text): if (text.count(b"\\") % 2): raise SlashBackParserError("The amount of backslashes isn't even") index = 0 found = text.find(b"\\", index) second_found = text.find(b"\\", found + 1) out = [] current_text = None current_config = TextConfig() while found != -1: current_command = text[found + 1 : second_found] if not current_command: out.append(Text(text[index : found + 1], TextConfig(current_config))) else: out.append(Text(text[index : found], TextConfig(current_config))) current_config = self.parse_single(current_command, current_config) index = second_found + 1 found = text.find(b"\\", index) second_found = text.find(b"\\", found + 1) if (second_found == -1): raise SlashBackParserError("Error while parsing. Inconsistent amount of backslashes") out.append(Text(text[index :], TextConfig(current_config))) return ParsedText(out) open = lambda path: SlashBackParser(path) if __name__ == "__main__": print(__welcome__) has_processed_files = False if len(sys.argv) != 1: print("") for filename in sys.argv[1:]: if filename[0] == "-": print(f"Invalid option: '{filename}' (ignoring)", file=sys.stderr) elif not os.path.exists(filename): print(f"File not found: '{filename}' (ignoring)", file=sys.stderr) else: has_processed_files = True out_filename = os.path.splitext(filename)[0] + ".md" processing_string = f"Processing file {filename} and saving to {out_filename}..." print(processing_string, end = "") try: sbf = open(filename) sbf.write(out_filename) print(f"\r{processing_string} Done.") except SlashBackParserError as exception: print(f"\nERROR: {exception!s}", file=sys.stderr) except Exception as exception: print("\nUNHANDLED EXCEPTION OCCURED!", file=sys.stderr) traceback.print_exc() if not has_processed_files: print("\n" + __usage__, file=sys.stderr) Zuzu-Typ-PyGLM-e113a8a/vs-project/generate_function_reference.py000066400000000000000000000444571511156275200250020ustar00rootroot00000000000000import glm import re, os, SlashBack, sys, traceback builtin_function_or_method = type(glm.silence) HERE = os.path.dirname(__file__) TARGET_FOLDER = os.path.abspath(os.path.join(HERE, "../wiki/function-reference")) functions = [] func_common = ["abs", "sign", "floor", "trunc", "round", "roundEven", "ceil", "fract", "mod", "min", "max", "fmin", "fmax", "clamp", "mix", "step", "smoothstep", "isnan", "isinf", "fma", "frexp", "ldexp", "floatBitsToInt", "floatBitsToUint", "intBitsToFloat", "uintBitsToFloat", "modf"] func_exponential = ["pow", "exp", "log", "exp2", "log2", "sqrt", "inversesqrt"] func_geometric = ["length", "distance", "dot", "cross", "normalize", "faceforward", "reflect", "refract"] func_integer = ["uaddCarry", "usubBorrow", "umulExtended", "imulExtended", "bitfieldExtract", "bitfieldInsert", "bitfieldReverse", "bitCount", "findLSB", "findMSB"] func_matrix = ["matrixCompMult", "outerProduct", "transpose", "determinant", "inverse"] func_packing = ["packDouble2x32", "packUnorm2x16", "packSnorm2x16", "packSnorm4x8", "packUnorm4x8", "packHalf2x16", "unpackDouble2x32", "unpackUnorm2x16", "unpackSnorm2x16", "unpackSnorm4x8", "unpackUnorm4x8", "unpackHalf2x16"] func_trigonometric = ["radians", "degrees", "sin", "cos", "tan", "asin", "acos", "atan", "sinh", "cosh", "tanh", "asinh", "acosh", "atanh"] func_vector_relational = ["equal", "notEqual", "lessThan", "lessThanEqual", "greaterThan", "greaterThanEqual", "any", "all", "not_"] detail = func_common + func_exponential + func_geometric + func_integer + func_matrix + \ func_packing + func_trigonometric + func_vector_relational color_space = ["convertLinearToSRGB", "convertSRGBToLinear"] constants = ["epsilon", "zero", "one", "pi", "two_pi", "root_pi", "half_pi", "three_over_two_pi", "quarter_pi", "one_over_pi", "one_over_two_pi", "two_over_pi", "four_over_pi", "two_over_root_pi", "one_over_root_two", "root_half_pi", "root_two_pi", "root_ln_four", "e", "euler", "root_two", "root_three", "root_five", "ln_two", "ln_ln_two", "ln_ten", "third", "two_thirds", "golden_ratio"] epsilon = ["epsilonEqual", "epsilonNotEqual"] integer = ["iround", "uround"] matrix_access = ["row", "column"] matrix_clip_space = ["tweakedInfinitePerspective"] + \ [x + y for y in ["", "LH", "RH", "NO", "ZO", "LH_ZO", "LH_NO", "RH_ZO", "RH_NO"] for x in ["ortho", "frustum", "perspective", "perspectiveFov"]] +\ ["infinitePerspective" + y for y in ["", "LH", "RH"]] matrix_inverse = ["affineInverse", "inverseTranspose"] matrix_projection = ["project", "projectNO", "projectZO", "unProject", "unProjectNO", "unProjectZO", "pickMatrix"] matrix_transform = ["identity", "translate", "rotate", "rotate_slow", "scale", "scale_slow", "lookAt", "lookAtRH", "lookAtLH"] noise = ["perlin", "simplex"] packing_pack_methods = ["pack" + x + y for x, z in [ ("Int", ("2x8", "4x8", "4x16", "2x16", "2x32")), ("Uint", ("2x8", "4x8", "4x16", "2x16", "2x32")), ("Unorm", ("", "1x8", "2x8", "1x16", "4x16", "3x10_1x2", "2x4", "4x4", "1x5_1x6_1x5", "3x5_1x1", "2x3_1x2")), ("Snorm", ("", "1x8", "2x8", "1x16", "4x16", "3x10_1x2")), ("Half", ("", "1x16", "4x16")), ("", ("I3x10_1x2", "U3x10_1x2", "F2x11_1x10", "F3x9_E1x5", "RGBM")), ] for y in z] packing = [y + x for x in packing_pack_methods for y in ["", "un"]] quaternion = ["quatLookAt", "quatLookAtLH", "quatLookAtRH", "eulerAngles", "roll", "pitch", "yaw", "mat3_cast", "mat4_cast", "quat_cast"] quaternion_common = ["lerp", "slerp", "conjugate"] quaternion_trigonometric = ["angle", "axis", "angleAxis"] random = ["linearRand", "gaussRand", "circularRand", "sphericalRand", "diskRand", "ballRand", "setSeed"] reciprocal = [f.format(x) for f in ("{}", "a{}", "{}h", "a{}h") for x in ("sec", "csc", "cot")] round = ["ceilPowerOfTwo", "floorPowerOfTwo", "roundPowerOfTwo", "ceilMultiple", "floorMultiple", "roundMultiple"] type_ptr = ["value_ptr", "sizeof", "make_quat"] + [f + str(x) for x in range(2, 5) for f in ("make_vec", "make_mat")] +\ ["make_mat{}x{}".format(x, y) for x in range(2,5) for y in range(2,5)] ulp = ["next_float", "prev_float", "float_distance"] decompose = ["decompose"] norm = ["distance2", "l1Norm", "l2Norm", "lMaxNorm", "length2", "lxNorm"] polar_coordinates = ["polar", "euclidean"] matrix_transform_2d = ["shearX", "shearY", "rotate", "translate", "scale"] rotate_vector = ["orientation", "rotate", "rotateX", "rotateY", "rotateZ", "slerp"] compatibility = ["lerp", "atan2", "isfinite", "saturate"] stable_extensions = matrix_clip_space + matrix_projection + matrix_transform + quaternion_common +\ quaternion_trigonometric recommended_extensions = color_space + constants + epsilon + integer + matrix_access + matrix_inverse +\ noise + packing + quaternion + random + reciprocal + round + type_ptr + ulp unstable_extensions = decompose + norm + polar_coordinates + matrix_transform_2d + rotate_vector + compatibility other_functions = ["silence", "add", "and_", "or_", "xor", "cmp", "div", "floordiv", "if_else", "inv", "lshift", "mul", "neg", "pos", "rshift", "sub", "quat_to_vec4", "vec4_to_quat"] known_functions = detail + recommended_extensions + stable_extensions + unstable_extensions + other_functions ignored_functions = ["test", "test_type_identification"] multiple_expected = ["rotate", "translate", "scale", "slerp", "lerp"] folders = {} for raw in dir(glm): func = getattr(glm, raw) if (raw.startswith("__") and raw.endswith("__") or not isinstance(func, builtin_function_or_method)): continue functions.append(raw) is_defined = lambda x: x in functions is_known = lambda x: x in known_functions is_ignored = lambda x: x in ignored_functions for known_func in known_functions: if not is_defined(known_func): print("A 'known' function was not defined: {}".format(known_func)) if known_func not in multiple_expected and known_functions.count(known_func) != 1: print("Function '{}' is known multiple times".format(known_func)) for function in functions: if not is_known(function) and not is_ignored(function): print("Function {} is not known".format(function)) FUNC_PATTERN = re.compile("(^\\w+)\\s*\\(([^)]*)\\)\\s*->\\s*(.+$)") TEMPLATE_PATTERN = re.compile("\\\\code\\\\([A-Z]) in \\[((:?\\w+,? ?)+)\\]\\\\code\\\\") class FunctionName: def __init__(self, name): self.name = name def __str__(self): return "glm.**{}**".format(self.name) class Parameters: def __init__(self, param_string): self.param_string = param_string def __str__(self): inner_out = [] for param in self.param_string.split(","): param = param.strip() if not param: continue if ":" in param: if param.count(":") != 1: print("Invalid amount of ':': {}".format(self.param_string)) else: param, type_ = param.split(":") inner_out.append("**{}**: *{}*".format(param, type_.strip())) else: inner_out.append("**{}**".format(param)) return "({})".format(", ".join(inner_out)) class ReturnValue: def __init__(self, return_value): self.return_value = return_value def __str__(self): return " -\\\\> *{}*".format(self.return_value) class Description: def __init__(self, descr): self.descr = descr def __str__(self): descr = self.descr.replace("\t", "\\raw\\  \\raw\\") while 1: match = TEMPLATE_PATTERN.search(descr) if match: descr = descr[:match.start()] + "\\raw\\***{}*** in [{}]\\raw\\".format(match.group(1), ", ".join(map(lambda x: "**{}**".format(x), match.group(2).split(", ")))) + descr[match.end():] else: break return descr def convert_doc_entry_to_sb(subdoc): lines = subdoc.split("\n") first_line = "" rest_start = 0 for line in lines: first_line += line rest_start += 1 if "->" in line: break descr = Description("\n".join(lines[rest_start:])) match = FUNC_PATTERN.fullmatch(first_line) if match: func_name = FunctionName(match.group(1)) parameters = Parameters(match.group(2)) return_val = ReturnValue(match.group(3)) return "\\raw\\#### {}{}{}\\raw\\\n{}\n".format(str(func_name), str(parameters), str(return_val), str(descr)) print("{} doesn't match the FUNC_PATTERN!".format(subdoc)) return "" def convert_doc_to_sb(func): doc = func.__doc__ name = func.__name__ if doc.count("`") % 2 != 0: print ("{} doesn't have an even amount of backticks!".format(name)) else: doc = doc.replace("`", "\\code\\") out = "\\h3\\{}() function\\h3\\\n".format(name) lines = doc.split("\n") current_subdoc = "" for line in lines: if not line.startswith("\t") and current_subdoc: out += convert_doc_entry_to_sb(current_subdoc) current_subdoc = "" current_subdoc += line + "\n" if current_subdoc.strip(): out += convert_doc_entry_to_sb(current_subdoc) return out def check_doc(func): name = func.__name__ doc = func.__doc__ for line in doc.split("\n"): if line.strip() and not line.startswith("\t") and not line.startswith(name) or len(line) > 100: print("{} has invalid doc: \n{}\n".format(name, line)) return False return True def convert_sb_file(filename): out_filename = os.path.splitext(filename)[0] + ".md" try: sbf = SlashBack.open(filename) sbf.write(out_filename) except SlashBack.SlashBackParserError as exception: print(f"\nERROR: {exception!s}", file=sys.stderr) except Exception as exception: print("\nUNHANDLED EXCEPTION OCCURED!", file=sys.stderr) traceback.print_exc() def generate_reference_for(name, function_names, description): folder = "detail" if function_names[0] in detail else "stable_extensions" if function_names[0] in stable_extensions else \ "recommended_extensions" if function_names[0] in recommended_extensions else "unstable_extensions" if function_names[0] in unstable_extensions else \ "other" if not folder in folders: folders[folder] = {} folders[folder][name] = function_names if not os.path.exists(TARGET_FOLDER + "/{}/".format(folder)): os.mkdir(TARGET_FOLDER + "/{}/".format(folder)) file_name = TARGET_FOLDER + "/{}/{}.sb".format(folder, name) file = open(file_name, "w") file.write("\\c\\This file was generated using a tool\\c\\\n") file.write("\\h1\\{} methods\\h1\\\n".format(name)) file.write("The following methods are all part of the \\b\\{} methods\\b\\.\n".format(name)) file.write(description) file.write("\n\\h2\\Table of contents\\h2\\\n") file.write("\\ul\\\n") function_names.sort() for function_name in function_names: file.write("\\-\\\\url #{}-function\\\\b\\{}\\b\\ function\\url\\\n".format(function_name.lower(), function_name)) file.write("\\ul\\\n") for function_name in function_names: if is_defined(function_name): func = getattr(glm, function_name) if check_doc(func): file.write(convert_doc_to_sb(func)) file.close() convert_sb_file(file_name) generate_reference_for("func_common", func_common, "It contains common GLSL functions.") generate_reference_for("func_exponential", func_exponential, "It contains exponential GLSL functions.") generate_reference_for("func_geometric", func_geometric, "These operate on vectors as vectors, not component-wise.") generate_reference_for("func_integer", func_integer, "It contains GLSL functions on integer types.") generate_reference_for("func_matrix", func_matrix, "It contains GLSL matrix functions.") generate_reference_for("func_packing", func_packing, "Provides GLSL functions to pack and unpack half, single"+\ " and double-precision floating point values into more compact integer types.") generate_reference_for("func_trigonometric", func_trigonometric, "Function parameters specified as angle are assumed to be in units of radians.") generate_reference_for("func_vector_relational", func_vector_relational, "Relational vector functions.") generate_reference_for("color_space", color_space, "Allow to perform bit operations on integer values.") generate_reference_for("constants", constants, "Provide a list of constants and precomputed useful values.") generate_reference_for("epsilon", epsilon, "Comparison functions for a user defined epsilon values.") generate_reference_for("integer", integer, "Contains two different rounding methods.") generate_reference_for("matrix_access", matrix_access, "Defines functions to access rows or columns of a matrix easily.") generate_reference_for("matrix_clip_space", matrix_clip_space, "Defines functions that generate clip space transformation matrices.") generate_reference_for("matrix_inverse", matrix_inverse, "Defines additional matrix inverting functions.") generate_reference_for("matrix_projection", matrix_projection, "Functions that generate common projection transformation matrices.") generate_reference_for("matrix_transform", matrix_transform, "Defines functions that generate common transformation matrices.") generate_reference_for("noise", noise, "Defines 2D, 3D and 4D procedural noise functions Based on the work of Stefan Gustavson"+\ " and Ashima Arts on \"webgl-noise\": \\raw\\https://github.com/ashima/webgl-noise\\raw\\ Following"+\ " Stefan Gustavson's paper \"Simplex noise demystified\": "+\ "\\raw\\http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf\\raw\\") generate_reference_for("packing", packing, "This extension provides a set of function to convert vertors to packed formats.") generate_reference_for("quaternion", quaternion, "Defines a templated quaternion type and several quaternion operations.") generate_reference_for("quaternion_common", quaternion_common, "Provides common functions for quaternion types.") generate_reference_for("quaternion_trigonometric", quaternion_trigonometric, "Provides trigonometric functions for quaternion types.") generate_reference_for("random", random, "Generate random number from various distribution methods.") generate_reference_for("reciprocal", reciprocal, "Define secant, cosecant and cotangent functions.") generate_reference_for("round", round, "Rounding value to specific boundings.") generate_reference_for("type_ptr", type_ptr, "Handles the interaction between pointers and vector, matrix types. "+\ "This extension defines an overloaded function, glm.value_ptr. It "+\ "returns a pointer to the memory layout of the object. Matrix types "+\ "store their values in column-major order. This is useful for uploading "+\ "data to matrices or copying data to buffer objects.") generate_reference_for("ulp", ulp, "Allow the measurement of the accuracy of a function against a reference implementation. "+\ "This extension works on floating-point data and provide results in ULP.") generate_reference_for("decompose", decompose, "Decomposes a model matrix to translations, rotation and scale components.") generate_reference_for("norm", norm, "Various ways to compute vector norms.") generate_reference_for("polar_coordinates", polar_coordinates, "Conversion from Euclidean space to polar space and revert.") generate_reference_for("matrix_transform_2d", matrix_transform_2d, "Defines functions that generate common 2d transformation matrices.") generate_reference_for("rotate_vector", rotate_vector, "Function to directly rotate a vector.") generate_reference_for("compatibility", compatibility, "Provide functions to increase the compatibility with Cg and HLSL languages.") generate_reference_for("other", other_functions, "PyGLM's custom functions.") instructions_filename = TARGET_FOLDER + "/INSTRUCTIONS.sb" instructions_file = open(instructions_filename, "r") instuctions = instructions_file.read() instructions_file.close() toc_filename = TARGET_FOLDER + "/README.sb" toc_file = open(toc_filename, "w") toc_file.write("{}\n".format(instuctions)) toc_file.write("\\h1\\Table of Contents\\h1\\\n") toc_file.write("\\ul\\\n") for folder in folders: sub_toc_filename = TARGET_FOLDER + "/{}/README.sb".format(folder) sub_toc_file = open(sub_toc_filename, "w") sub_toc_file.write("\\h1\\Table of Contents\\h1\\\n") sub_toc_file.write("\\ul\\\n") toc_file.write("\\-\\ \\url {0}/README.md\\{0}\\url\\\n".format(folder)) folder_content = folders[folder] for functions_name in folder_content: sub_toc_file.write("\\-\\ \\url {0}.md \\{0} methods\\ url\\\n".format(functions_name)) toc_file.write("\\--\\ \\url {0}/{1}.md \\{1} methods\\ url\\\n".format(folder, functions_name)) functions = folder_content[functions_name] for function_name in functions: sub_toc_file.write("\\--\\ \\url {0}.md#{1}-function \\\\b\\{1}\\b\\ function \\ url\\\n".format(functions_name, function_name)) toc_file.write("\\---\\ \\url {0}/{1}.md#{2}-function \\\\b\\{2}\\b\\ function \\ url\\\n".format(folder, functions_name, function_name)) sub_toc_file.write("\\ul\\\n") sub_toc_file.close() convert_sb_file(sub_toc_filename) toc_file.write("\\ul\\\n") toc_file.close() convert_sb_file(toc_filename) Zuzu-Typ-PyGLM-e113a8a/wiki/000077500000000000000000000000001511156275200155445ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/wiki/Building-PyGLM.md000066400000000000000000000043131511156275200205520ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) This page is intended for those, who want to build a specific subversion of PyGLM or want to specify different build options\. If that's not you, then you should find the latest release with binary distributions over [here](https://github.com/Zuzu-Typ/PyGLM/releases/latest) or over on [PyPI](https://pypi.org/project/PyGLM/)\. ## Setting up the environment In order to build PyGLM, you're going to need a working C\+\+ development environment\.   Although compilation should work with any C\+\+ compiler, the only ones officially supported are   * [MSVC](https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B) \(Microsoft Visual C\+\+\) for Windows   Click here to download the [build tools](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16) * [GCC](https://gcc.gnu.org/) \(GNU Compiler Collection\) mostly for Linux   ``` sudo apt install gcc ``` \(probably\) * [Clang](https://clang.llvm.org/get_started.html) default Mac OS X compiler   Should already be installed\. That should be all there is to it\. ## Build options If you want to change some build options or make a completely custom build, go ahead and clone PyGLM\. There are three different predefined build options that you can choose from inside of [build\_options\.h](https://github.com/Zuzu-Typ/PyGLM/blob/master/build_options.h)\.   One of the lines should be   ``` #define PyGLM_BUILD PyGLM_DEFAULT ``` You can replace ``` PyGLM_DEFAULT ``` by one of the following options:   * ``` PyGLM_FAST ``` \- No support for using iterables / buffers instead of PyGLM types   * ``` PyGLM_NO_FUNCTIONS ``` \- Only build the types   * ``` PyGLM_MINIMAL ``` \- Combines ``` PyGLM_FAST ``` and ``` PyGLM_NO_FUNCTIONS ``` Another option ``` PyGLM_SLIM ``` was planned, which was supposed to only build the float types, to decrease the file size, though demand seems to be low\. ## Starting the build process To build PyGLM, simply run   ``` python setup.py install ``` \(you do need Python 3\.5 or higher\)Zuzu-Typ-PyGLM-e113a8a/wiki/Building-PyGLM.sb000066400000000000000000000041741511156275200205630ustar00rootroot00000000000000This page is intended for those, who want to build a specific subversion of PyGLM or want to specify different build options. If that's not you, then you should find the latest release with binary distributions over \url https://github.com/Zuzu-Typ/PyGLM/releases/latest \here\ url\ or over on \url https://pypi.org/project/PyGLM/ \PyPI\ url\. \h2 \ Setting up the environment\ h2\ In order to build PyGLM, you're going to need a working C++ development environment. Although compilation should work with any C++ compiler, the only ones officially supported are \lu \ \-\ \url https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B \MSVC\ url\ (Microsoft Visual C++) for Windows Click here to download the \url https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16 \build tools\ url\ \-\ \url https://gcc.gnu.org/ \GCC\ url\ (GNU Compiler Collection) mostly for Linux \code \sudo apt install gcc\ code\ (probably) \-\ \url https://clang.llvm.org/get_started.html \Clang\ url\ default Mac OS X compiler Should already be installed. \ lu\ That should be all there is to it. \h2 \ Build options \ h2\ If you want to change some build options or make a completely custom build, go ahead and clone PyGLM. There are three different predefined build options that you can choose from inside of \url https://github.com/Zuzu-Typ/PyGLM/blob/master/build_options.h \build_options.h\ url\. One of the lines should be \code \ #define PyGLM_BUILD PyGLM_DEFAULT \ code\ You can replace \code \PyGLM_DEFAULT\ code\ by one of the following options: \lu \ \-\ \code \PyGLM_FAST\ code\ - No support for using iterables / buffers instead of PyGLM types \-\ \code \PyGLM_NO_FUNCTIONS\ code\ - Only build the types \-\ \code \PyGLM_MINIMAL\ code\ - Combines \code \PyGLM_FAST\ code\ and \code \PyGLM_NO_FUNCTIONS\ code\ \ lu\ Another option \code \PyGLM_SLIM\ code\ was planned, which was supposed to only build the float types, to decrease the file size, though demand seems to be low. \h2 \Starting the build process\ h2\ To build PyGLM, simply run \code \ python setup.py install \ code\ (you do need Python 3.5 or higher)Zuzu-Typ-PyGLM-e113a8a/wiki/Passing-data-to-external-libs.md000066400000000000000000000016431511156275200235740ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) If you ever come across a situation where you need to **pass data from PyGLM**'s data types **to another library** that uses **external C code**, you should be able to accomplish your goal doing the following: It doesn't matter which kind of PyGLM type you have, but let's pretend you have a **4x4 matrix** that you need to **pass to PyOpenGL**\. ``` Python # a very important identity matrix m = glm.mat4() # a ctypes pointer to m's data ptr = glm.value_ptr(m) # size of m's data in bytes (here 4 * 4 * 4 = 64 bytes) nbytes = glm.sizeof(m) glBufferData(GL_UNIFORM_BUFFER, nbytes, ptr, GL_STATIC_DRAW) ``` This also works for any **vector, quaternion or array** type\. You can take a **shortcut for arrays** though: ``` Python arr = glm.array(glm.mat4(1), glm.mat4(2), glm.mat4(3)) glBufferData(GL_UNIFORM_BUFFER, arr.nbytes, arr.ptr, GL_STATIC_DRAW) ```Zuzu-Typ-PyGLM-e113a8a/wiki/Passing-data-to-external-libs.sb000066400000000000000000000015771511156275200236060ustar00rootroot00000000000000If you ever come across a situation where you need to \b\pass data from PyGLM\b\'s data types \b\to another library\b\ that uses \b\external C code\b\, you should be able to accomplish your goal doing the following: It doesn't matter which kind of PyGLM type you have, but let's pretend you have a \b\4x4 matrix\b\ that you need to \b\pass to PyOpenGL\b\. \code Python\ # a very important identity matrix m = glm.mat4() # a ctypes pointer to m's data ptr = glm.value_ptr(m) # size of m's data in bytes (here 4 * 4 * 4 = 64 bytes) nbytes = glm.sizeof(m) glBufferData(GL_UNIFORM_BUFFER, nbytes, ptr, GL_STATIC_DRAW) \code\ This also works for any \b\vector, quaternion or array\b\ type. You can take a \b\shortcut for arrays\b\ though: \code Python \ arr = glm.array(glm.mat4(1), glm.mat4(2), glm.mat4(3)) glBufferData(GL_UNIFORM_BUFFER, arr.nbytes, arr.ptr, GL_STATIC_DRAW) \code\Zuzu-Typ-PyGLM-e113a8a/wiki/PyGLM-Types.md000066400000000000000000000073521511156275200201270ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) **PyGLM** brings a couple of types with it\. These types represent either **vectors**, **matrices** or **quaternions** or an **array** containing the aforementioned\. 1. A **vector** usually is an array of **1 to 4 numbers** that serve as **positions** or **directions** in a 1 to 4 dimensional coordinate system \(respectively\)\. They support a lot of operations necessary in **linear algebra**\.   Vector types are expressed as **glm\.vecN** \(*N* being the length\)\.   For example a **2D** vector would be expressed as ``` glm.vec2 ```\. Refer to [using vectors](Using-vectors.md) for a complete type reference\. 2. A **matrix** is a **2 dimensional array** of numbers ranging from **2x2** \(4 numbers\) to **4x4** \(16 numbers\)\.   They aid in a lot of complex vector manipulations\.   Matrix types are expressed as **glm\.matNxM** \(*N* being the columns and *M* being the rows\)\. So a **4x4** matrix would be ``` glm.mat4x4 ```, or ``` glm.mat4 ``` for short \(because *N* and *M* are equal\)\. Refer to [using matrices](Using-matrices.md) for a complete type reference\. Note: *Yes, columns and rows are not in the natural order \- this is a flaw of glm\.* 3. A **quaternion** is an **array of 4 numbers** that can be used for complex vector manipulations\. They are made up of a scalar part ``` (w) ``` and a vector part ``` (x, y, z) ``` and are sometimes displayed as ``` (w + x*i + y*j + z*k) ```, where ``` i ```, ``` j ``` and ``` k ``` are imaginary numbers\. Quaternion types are simply expressed as ``` glm.quat ```\. Refer to [using quaternions](Using-quaternions.md) for a complete type reference\. 4. A PyGLM **array** \(``` glm.array ```\) is a simple way of storing a copy of multiple instances of one of the aforementioned types or numbers\. This array can then be used to **transfer that data over to external C functions**, such as ``` glBufferData ``` from PyOpenGL\. Although PyGLM's arrays are a lot simpler than NumPy arrays, they're **quite a bit faster**\. Refer to [using arrays](Using-arrays.md) for a complete type reference\. PyGLM also provides simple access to ``` ctypes ``` C datatypes, such as ``` c_float ```, which can be accessed as ``` glm.c_float ``` or ``` glm.float_ ``` \(the underscore is only present for ``` float ``` and ``` bool ``` to accomodate for wildcard imports, which would override the builtin types\)\. **The following section is devoted to vectors, matrices and quaternions only\.** All of these types use **32\-bit floating point numbers** to store their values\.   PyGLM does however provide **other data types**\.   For **all of the aforementioned**: Data type | Description | Prefix -|-|- **double** | 64\-bit floating point number | ``` d ``` or ``` f64 ``` **float** | 32\-bit floating point number | ``` f ``` or ``` f32 ``` or none Additionally for **matrices** and **vectors**: Data type | Description | Prefix -|-|- **int** | 32\-bit signed integer | ``` i ``` or ``` i32 ``` **uint** | 32\-bit unsigned integer | ``` u ``` or ``` u32 ``` And additionally for **vectors**: Data type | Description | Prefix -|-|- **int64** | 64\-bit signed integer | ``` i64 ``` **int16** | 16\-bit signed integer | ``` i16 ``` **int8** | 8\-bit signed integer | ``` i8 ``` **uint64** | 64\-bit unsigned integer | ``` u64 ``` **uint16** | 16\-bit unsigned integer | ``` u16 ``` **uint8** | 8\-bit unsigned integer | ``` u8 ``` **bool** | boolean values | ``` b ``` If for example you want to use a **2D int64** vector, the type you want to use would be ``` glm.i64vec2 ```\.Zuzu-Typ-PyGLM-e113a8a/wiki/PyGLM-Types.sb000066400000000000000000000075471511156275200201410ustar00rootroot00000000000000\b\PyGLM\b\ brings a couple of types with it. These types represent either \b\vectors\b\, \b\matrices\b\ or \b\quaternions\b\ or an \b\array\b\ containing the aforementioned. \lo \ \-\ A \b\vector\b\ usually is an array of \b\1 to 4 numbers\b\ that serve as \b\positions\b\ or \b\directions\b\ in a 1 to 4 dimensional coordinate system (respectively). They support a lot of operations necessary in \b\linear algebra\b\. Vector types are expressed as \b\glm.vecN\b\ (\i\N\i\ being the length). For example a \b\2D\b\ vector would be expressed as \code\glm.vec2\code\. Refer to \url Using-vectors.md \using vectors\url\ for a complete type reference. \-\ A \b\matrix\b\ is a \b\2 dimensional array\b\ of numbers ranging from \b\2x2\b\ (4 numbers) to \b\4x4\b\ (16 numbers). They aid in a lot of complex vector manipulations. Matrix types are expressed as \b\glm.matNxM\b\ (\i\N\i\ being the columns and \i\M\i\ being the rows). So a \b\4x4\b\ matrix would be \code\glm.mat4x4\code\, or \code\glm.mat4\code\ for short (because \i\N\i\ and \i\M\i\ are equal). Refer to \url Using-matrices.md \using matrices\url\ for a complete type reference. Note: \i\Yes, columns and rows are not in the natural order - this is a flaw of glm.\i\ \-\ A \b\quaternion\b\ is an \b\array of 4 numbers\b\ that can be used for complex vector manipulations. They are made up of a scalar part \code\(w)\code\ and a vector part \code\(x, y, z)\code\ and are sometimes displayed as \code\(w + x*i + y*j + z*k)\code\, where \code\i\code\, \code\j\code\ and \code\k\code\ are imaginary numbers. Quaternion types are simply expressed as \code\glm.quat\code\. Refer to \url Using-quaternions.md \using quaternions\url\ for a complete type reference. \-\A PyGLM \b\array\b\ (\code\glm.array\code\) is a simple way of storing a copy of multiple instances of one of the aforementioned types or numbers. This array can then be used to \b\transfer that data over to external C functions\b\, such as \code\glBufferData\code\ from PyOpenGL. Although PyGLM's arrays are a lot simpler than NumPy arrays, they're \b\quite a bit faster\b\. Refer to \url Using-arrays.md \using arrays\url\ for a complete type reference. \ lo\ PyGLM also provides simple access to \code\ctypes\code\ C datatypes, such as \code\c_float\code\, which can be accessed as \code\glm.c_float\code\ or \code\glm.float_\code\ (the underscore is only present for \code\float\code\ and \code\bool\code\ to accomodate for wildcard imports, which would override the builtin types). \b\The following section is devoted to vectors, matrices and quaternions only.\b\ All of these types use \b\32-bit floating point numbers\b\ to store their values. PyGLM does however provide \b\other data types\b\. For \b \all of the aforementioned\ b\: \table \ Data type \-\ Description \-\ Prefix \b\double\b\ \-\ 64-bit floating point number \-\ \code\d\code\ or \code\f64\code\ \b\float\b\ \-\ 32-bit floating point number \-\ \code\f\code\ or \code\f32\code\ or none \ table\ Additionally for \b \matrices\ b\ and \b \vectors\ b\: \table \ Data type \-\ Description \-\ Prefix \b\int\b\ \-\ 32-bit signed integer \-\ \code\i\code\ or \code\i32\code\ \b\uint\b\ \-\ 32-bit unsigned integer \-\ \code\u\code\ or \code\u32\code\ \ table\ And additionally for \b\vectors\b\: \table \ Data type \-\ Description \-\ Prefix \b\int64\b\ \-\ 64-bit signed integer \-\ \code\i64\code\ \b\int16\b\ \-\ 16-bit signed integer \-\ \code\i16\code\ \b\int8\b\ \-\ 8-bit signed integer \-\ \code\i8\code\ \b\uint64\b\ \-\ 64-bit unsigned integer \-\ \code\u64\code\ \b\uint16\b\ \-\ 16-bit unsigned integer \-\ \code\u16\code\ \b\uint8\b\ \-\ 8-bit unsigned integer \-\ \code\u8\code\ \b\bool\b\ \-\ boolean values \-\ \code\b\code\ \ table\ If for example you want to use a \b\2D int64\b\ vector, the type you want to use would be \code\glm.i64vec2\code\.Zuzu-Typ-PyGLM-e113a8a/wiki/README.md000066400000000000000000000025601511156275200170260ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # PyGLM Wiki ### Welcome to PyGLM's wiki The wiki is continuously growing and improving\. I recommend starting at [PyGLM Types](PyGLM-Types.md) if you're new\. You can also have a look at the [reference of PyGLM's functions](function-reference/README.md)\. \(Or refer to the Python Help system or \_\_doc\_\_ fields if you need more info about individual functions\)\. ``` Python >>> help(glm.identity) Help on built-in function identity in module glm: identity(...) identity(matrix_type: type) -> matNxM Builds an identity matrix. ``` Feel free to browse through the other wiki pages\. Thank you for using PyGLM\! ## Pages in this wiki * [PyGLM Types](PyGLM-Types.md) \- An overview of the data types that PyGLM provides\. * [Using Vectors](Using-vectors.md) \- A reference of the usage of vector types\. * [Using Matrices](Using-matrices.md) \- A reference of the usage of matrix types\. * [Using Quaternions](Using-quaternions.md) \- A reference of the usage of quaternion types\. * [Using Arrays](Using-arrays.md) \- A reference of the usage of the array type\. * [Building PyGLM](Building-PyGLM.md) \- How to build PyGLM from source\. * [Passing data to external libs](Passing-data-to-external-libs.md) \- How to pass data from PyGLM to other C libraries, such as PyOpenGL\. Zuzu-Typ-PyGLM-e113a8a/wiki/README.sb000066400000000000000000000025611511156275200170330ustar00rootroot00000000000000\h1\PyGLM Wiki\h1\ \h3\Welcome to PyGLM's wiki\h3\ The wiki is continuously growing and improving. I recommend starting at \url PyGLM-Types.md \PyGLM Types\ url\ if you're new. You can also have a look at the \url function-reference/README.md \reference of PyGLM's functions\ url\. (Or refer to the Python Help system or __doc__ fields if you need more info about individual functions). \code Python\ >>> help(glm.identity) Help on built-in function identity in module glm: identity(...) identity(matrix_type: type) -> matNxM Builds an identity matrix. \code\ Feel free to browse through the other wiki pages. Thank you for using PyGLM! \h2\Pages in this wiki\h2\ \ul\ \-\ \url PyGLM-Types.md \PyGLM Types\ url\ - An overview of the data types that PyGLM provides. \-\ \url Using-vectors.md \Using Vectors\ url\ - A reference of the usage of vector types. \-\ \url Using-matrices.md \Using Matrices\ url\ - A reference of the usage of matrix types. \-\ \url Using-quaternions.md \Using Quaternions\ url\ - A reference of the usage of quaternion types. \-\ \url Using-arrays.md \Using Arrays\ url\ - A reference of the usage of the array type. \-\ \url Building-PyGLM.md \Building PyGLM\ url\ - How to build PyGLM from source. \-\ \url Passing-data-to-external-libs.md \Passing data to external libs\ url\ - How to pass data from PyGLM to other C libraries, such as PyOpenGL. \ul\Zuzu-Typ-PyGLM-e113a8a/wiki/Using-arrays.md000066400000000000000000000447361511156275200204700ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # Using Arrays PyGLM's array type was introduced in version 2\.0\.0 to reduce the likelihood of requiring users to also use numpy besides glm\. It's mainly intended to **provide a way of passing multiple glm type instances** \(such as vectors\) **to external C functions** \(such as glBufferData\)\. ## Table of contents 1. [About arrays](#about-arrays) 2. [Initialization](#initialization) * [\.\. with vectors, matrices, quaternions or ctypes number objects](#-with-vectors-matrices-quaternions-or-ctypes-number-objects) * [\.\. with other array instances](#-with-other-array-instances) * [\.\. with other compatible arrays / lists / iterables](#-with-other-compatible-arrays--lists--iterables) * [\.\. as a reference instead of a copy](#-as-a-reference-instead-of-a-copy) * [\.\. with zeros](#-with-zeros) * [\.\. from numbers](#-from-numbers) 3. [Members](#members) 4. [Methods](#methods) * [The copy protocol](#the-copy-protocol) * [Pickling](#pickling) * [To list / tuple](#to-list--tuple) * [To and from bytes](#to-and-from-bytes) * [From Numbers](#from-numbers) * [As Reference](#as-reference) * [Zeros](#zeros) * [Filter](#filter) * [Map](#map) * [Sort](#sort) * [Split components](#split-components) * [Reduce](#reduce) * [Concat](#concat) * [Repeat](#repeat) 5. [Operators](#operators) * [Numeric operations](#numeric-operations) * [getitem and setitem](#getitem-and-setitem--operator) * [contains](#contains-in-operator) * [len](#len) * [str](#str) * [repr](#repr) * [iter](#iter) * [hash](#hash) ## About arrays PyGLM's arrays are pure data copies of **one or multiple instances** of a **single PyGLM type**\. For example, an array could copy the data of five different ``` vec3 ``` instances\. However, it cannot copy the data of instances, that don't have the same type, like two ``` vec2 ``` instances and one ``` dvec2 ``` instance\. Additionally, the data inside the array is only a **copy**, thus if the data inside the array is modified, it won't affect the instances it copied the data from\. ## Initialization Arrays can be initialized in a few different ways\. ### \.\.\. with vectors, matrices, quaternions or ctypes number objects An array can be initialized with any number of vectors, metrices or quaternions, as long as they're all of the same type\. ``` Python >>> array(vec3(1, 2, 3), vec3(4, 5, 6)) array(vec3(1, 2, 3), vec3(4, 5, 6)) >>> array(vec3(), ivec3()) TypeError: arrays have to be initialized with arguments of the same glm type ``` The same holds true for ctypes numbers: ``` Python >>> array(int8(2), int8(3)) array(c_int8(2), c_int8(3)) >>> array(int8(2), int16(3)) TypeError: arrays have to be initialized with arguments of the same type ``` You can also create an array of ctypes numbers from normal numbers using ``` from_numbers ```, which needs to have the data type as it's first argument: ``` Python >>> array.from_numbers(int8, 2, 3) array(c_int8(2), c_int8(3)) >>> array(int8, 2, 3) # alternative way array(c_int8(2), c_int8(3)) ``` *Note: The list representations of vecs, mats and quats such as ``` ((1, 2), (3, 4)) ``` \(an alias for ``` mat2(1, 2, 3, 4) ```\) cannot be used here\.* ### \.\.\. with other array instances You can obtain a copy of an array by using the copy constructor\. ``` Python arr_copy = array(arr) ``` ### \.\.\. with other compatible arrays / lists / iterables You can convert any compatible type to a PyGLM array\. This includes lists, tuples, etc\. and types that support the buffer protocol \(such as numpy's arrays\): ``` Python >>> array((ivec1(), ivec1())) array(ivec1(0), ivec1(0)) >>> array([dmat2()]) array(dmat2x2((1, 0), (0, 1))) >>> array(numpy.array([[1,2,3]])) array(ivec3(1, 2, 3)) >>> array([[1,2,3]]) TypeError: invalid argument type(s) for array() ``` *Note: array buffers that store length 4 items are interpreted as vec4s rather than quats\.* ### \.\.\. as a reference instead of a copy If you don't need or don't want a copy of an array or buffer, but want a reference instead \(i\.e\. use the same data in memory as another array / buffer\), you can do so by using ``` glm.array.as_reference ```\. ``` Python >>> arr = array(vec3(1)) >>> arr2 = array.as_reference(arr) >>> arr == arr2 True >>> arr.address == arr2.address True >>> arr[0] = vec3(2) # if you change one of them, the other changes as well >>> arr2 array(vec3(2, 2, 2)) ``` *Note: ``` as_reference ``` only works with array instances or buffers \(e\.g\. ``` numpy.array ```\)\. Also it may not always be possible to create a reference copy, in which case a normal copy is made and a warning is raised\.* ### \.\.\. with zeros You can initialize an array with any given number of zeros or a given type: ``` Python >>> array.zeros(4, uint8) array(c_uint8(0), c_uint8(0), c_uint8(0), c_uint8(0)) >>> array.zeros(2, vec3) array(vec3(0, 0, 0), vec3(0, 0, 0)) ``` ### \.\.\. from numbers You can initialize an array with numbers and a \(ctypes\) data type using ``` glm.array.from_numbers ```: ``` Python >>> array.from_numbers(int8, 1, 2, 3) array(c_int8(1), c_int8(2), c_int8(3)) >>> array.from_numbers(float32, 4.2, 1.1) array(c_float(4.2), c_float(1.1)) >>> array(int8, 1, 2, 3) # You can also use the array() constructor, but beware that the dedicated function is faster array(c_int8(1), c_int8(2), c_int8(3)) >>> array.from_numbers(vec1, 1, 2, 3) TypeError: Invalid argument type for from_number(), expected a ctypes data type as the first argument. Got 'type' ``` ## Members PyGLM arrays have the following members: Name | Type | Description -|-|- element\_type | type | Type class of the contained elements \(e\.g\. ``` glm.vec3 ```\) length | int | Number of elements contained by a given array address | int | The memory address where an array's data is stored ptr | c\_void\_p | A ctypes pointer that points to the content of an array nbytes | int | The total data size in bytes typecode | str | A single character, describing the data type of the elements' values, according to [this list](https://docs.python.org/3/library/struct.html#format-characters) dtype | str | A numpy\-like data type string ctype | str | The respective ctypes data type itemsize | int | The size of one array element in bytes dt\_size | int | The size of each single component of the elements in bytes \(size of data type\) readonly | int | Whether or not the array is read\-only reference | int | The reference to the array owning the data \(if any\) ## Methods ### The copy protocol Arrays support the copy protocol \(see [here](https://docs.python.org/3/library/copy.html)\)\.   You can use ``` copy.copy() ``` or ``` copy.deepcopy() ``` to get a copy of an array\. ### Pickling Arrays support [pickling](https://docs.python.org/3/library/pickle.html#module-interface) \(as of PyGLM 2\.0\.0\), which is Python's serialization method\. ### To list / tuple Any array has a ``` to_list() ``` and a ``` to_tuple() ``` function, which return's the arrays's data represented as a list or tuple respectively\. ### To and from bytes Any array has a ``` to_bytes() ``` and a static ``` from_bytes() ``` method, which allows for conversion of the array's data to and from bytes strings\. The ``` from_bytes() ``` method takes the bytes string and a target type \(``` uint8 ``` by default\) as arguments\. Example: ``` Python >>> array(uint8(1), uint8(2)).to_bytes() b'\x01\x02' >>> array.from_bytes(b"\x01\x02\x03", uint8) array(c_uint8(1), c_uint8(2), c_uint8(3)) >>> array.from_bytes(b"\x00\x00\x00\x00", vec1) array(vec1(0)) >>> array.from_bytes(b"\x00\x00\x00\x00" * 8, vec1) array(vec1(0), vec1(0), vec1(0), vec1(0), vec1(0), vec1(0), vec1(0), vec1(0)) ``` ### From Numbers The array class has a static ``` from_numbers ``` method, which allows for creation of a one\-dimensional array of numbers\. It takes a ctypes number type as it's first argument\. Example: ``` Python >>> array.from_numbers(c_float, 1.2, 3.4) array(c_float(1.2), c_float(3.4)) >>> array.from_numbers(int32, 1, 3, 4, 5) array(c_int32(1), c_int32(3), c_int32(4), c_int32(5)) ``` ### As Reference The array class also has a static ``` as_reference ``` method, which allows for creation of a reference copy of other arrays or objects that support the buffer protocol\. A reference copy means that the newly created array will use the same data in memory as the source array\. It will also keep a reference to the object it shares the data with in the ``` reference ``` member\. Example: ``` Python >>> arr = array(vec2(1)) >>> arr2 = array.as_reference(arr) >>> arr == arr2 True >>> arr is arr2.reference True >>> arr[0] = vec2(-1) # if you change one of them, the other changes as well >>> arr2 array(vec2(-1, -1)) ``` ### Zeros Additionally, the array class has a static ``` zeros ``` method, which allows for creation of an array with items that are initialized with zeros\. This is the fastest way of creating an array, as it uses the builtin ``` calloc ``` function to allocate the memory and initialize it in the same step\. Example: ``` Python >>> array.zeros(4, uint8) array(c_uint8(0), c_uint8(0), c_uint8(0), c_uint8(0)) >>> array.zeros(2, vec3) array(vec3(0, 0, 0), vec3(0, 0, 0)) >>> array.zeros(1, mat4) array(mat4x4((0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0))) ``` ### Filter You can filter an array using a custom filtering function \(i\.e\. create a new array with all of this array's elements that match a certain criteria\)\. The filtering function is called with each element of the array and must return ``` True ``` for the elements to keep and ``` False ``` for the elements to discard\. Example: ``` Python >>> array(c_float, 1, 2, 3, 4, 5).filter(lambda x: x > 3) array(c_float(4), c_float(5)) >>> array(vec3(1), vec3(2), vec3(3)).filter(lambda x: x.x + x.y == 2) array(vec3(1, 1, 1)) ``` ### Map You can map the elements of an array to one or any number of new values using a custom mapping function\. The mapping function is supplied with the amounts of arguments that the map function is given\. If the mapping function returns ``` None ```, the element is discarded \(much like filter\)\. If it returns a single value, that value becomes a new element of the resulting array\. If it returns a tuple, all of the tuple's items are added to the resulting array\. When the mapping function returns numbers, they are interpreted as ctypes numbers of the same type as the array that ``` map ``` was called on\. If you want to specify a custom ctypes type to use, there is a keyword argument called ``` ctype ``` that can be used to do that\. Example: ``` Python >>> array(c_float, 1, 2, 3).map(lambda x: x + 1) array(c_float(2), c_float(3), c_float(4)) >>> array(c_float, 1, 2, 3).map(vec3) array(vec3(1, 1, 1), vec3(2, 2, 2), vec3(3, 3, 3)) >>> array(c_float, 1, 2, 3, 4, 5).map(lambda x: x if x > 3 else None) array(c_float(4), c_float(5)) >>> array(c_float, 1, 2).map(lambda x: (x, x)) array(c_float(1), c_float(1), c_float(2), c_float(2)) >>> array(c_float, 1, 2).map(lambda x: (3, 4) if x == 1 else 5) array(c_float(3), c_float(4), c_float(5)) >>> arr1 = array(c_float, 1, 2, 3) >>> arr2 = array(c_float, 4, 5, 6) >>> arr1.map(lambda x, y: (x + x) * y, arr2) array(c_float(8), c_float(20), c_float(36)) >>> arr3 = array(c_float, 7, 8, 9) >>> arr1.map(lambda x, y, z: vec3(x, y, z), arr2, arr3) array(vec3(1, 4, 7), vec3(2, 5, 8), vec3(3, 6, 9)) >>> arr1.map(lambda x, y, z: x * y + z, arr2, arr3) array(c_float(11), c_float(18), c_float(27)) >>> arr4 = array(vec3(1, 2, 3), vec3( 4, 5, 6)) >>> arr4.map(normalize) array(vec3(0.267261, 0.534522, 0.801784), vec3(0.455842, 0.569803, 0.683764)) >>> arr5 = array(vec3(7, 8, 9), vec3(10,11,12)) >>> arr4.map(dot, arr5) array(c_float(50), c_float(167)) >>> arr4.map(dot, arr5, ctype = c_int32) array(c_int32(50), c_int32(167)) ``` ### Sort You can sort an array by using a custom sorting function\. The sorting function is called with two elements from the array and should return ``` -1 ``` if the first element comes before the second element in order\. Otherwise it should return ``` 0 ``` for equal elements and ``` 1 ``` if the first element comes after the second\. The sorting algorithm used is a recursive quicksort\. Example: ``` Python >>> arr = array(c_float, 6, 5, 4, 3, 2, 1) >>> arr.sort(lambda x, y: -1 if x < y else 0 if x == y else 1) >>> arr array(c_float(1), c_float(2), c_float(3), c_float(4), c_float(5), c_float(6)) >>> arr.sort(lambda x, y: int(sign(y - x))) >>> arr array(c_float(6), c_float(5), c_float(4), c_float(3), c_float(2), c_float(1)) >>> arr.sort(cmp) # using glm.cmp >>> arr array(c_float(1), c_float(2), c_float(3), c_float(4), c_float(5), c_float(6)) ``` ### Split components You can split an array into the components of it's elements using the ``` split_components() ``` method\. Splits each element of this array into it's components\. Returns one or multiple arrays wrapped in a tuple\. Example: ``` Python >>> arr = array(vec3(1, 2, 3), vec3(4, 5, 6)) >>> arr.split_components() (array(c_float(1), c_float(4)), array(c_float(2), c_float(5)), array(c_float(3), c_float(6))) >>> arr = array(mat2((1,2),(3,4)), mat2((5,6),(7,8)), mat2((9,10),(11,12))) >>> arr.split_components() (array(vec2(1, 2), vec2(5, 6), vec2(9, 10)), array(vec2(3, 4), vec2(7, 8), vec2(11, 12))) >>> arr = array(c_float, 6, 5, 4, 3, 2, 1) # doesn't have any components >>> arr.split_components() NotImplementedError: split_components() is not defined for ctypes arrays ``` ### Reduce Used to apply a binary function to this array's elements cumulatively, reducing the array to a single value\. If an optional initializer is given, it is placed before the first element\. Example: ``` Python >>> arr = array(c_float, 6, 5, 4, 3, 2, 1) >>> arr.reduce(lambda x, y: x + y) # (((((6+5)+4)+3)+2)+1) 21.0 >>> arr.reduce(mul) # (((((6*5)*4)*3)*2)*1) 720.0 >>> arr.reduce(sub) # (((((6-5)-4)-3)-2)-1) -9.0 >>> arr.reduce(sub, 21) # with initializer: ((((((21-6)-5)-4)-3)-2)-1) 0.0 ``` ### Concat Arrays can be combined / concatenated using the ``` concat() ``` method, as long as they have the same element type\. ``` Python >>> array(vec2(1, 2)).concat(array(vec2(3, 4))) array(vec2(1, 2), vec2(3, 4)) >>> array(vec4()).concat(array(vec1())) ValueError: the given arrays are incompatible ``` ### Repeat Arrays can be repeated a given number of times using the ``` repeat() ``` method\. ``` Python >>> array(vec3(1, 2, 3)).repeat(3) array(vec3(1, 2, 3), vec3(1, 2, 3), vec3(1, 2, 3)) ``` ### Reinterpret cast You can reinterpret the data of an array as a different element type using the ``` reinterpret_cast() ``` method\. Example: ``` Python >>> array(vec3(1, 2, 3)).reinterpret_cast(float32) array(c_float(1), c_float(2), c_float(3)) >>> array.from_numbers(float32, 1, 2, 3, 4, 5, 6, 7, 8, 9).reinterpret_cast(vec3) array(vec3(1, 2, 3), vec3(4, 5, 6), vec3(7, 8, 9)) ``` ## Operators ### Numeric operations Arrays support a dozen numeric operations: * Addition \(``` + ```\) * Subtraction \(``` - ```\) * Multiplication \(``` * ```\) * Division \(``` / ```\) * Modulus \(``` % ```\) * Power \(``` ** ```\) * Negation \(``` - ```\) * Absolution \(``` abs() ```\) * Inversion \(``` ~ ```\) * Left shift \(``` << ```\) * Right shift \(``` >> ```\) * Bitwise and \(``` & ```\) * Bitwise or \(``` | ```\) * Bitwise xor \(``` ^ ```\) *Note: Not all types are compatible though\.* ### getitem, setitem and delitem \(``` [] ``` operator\) You can access the individual elements of an array using indices\. Likewise you can also modify it's data by overwriting it or delete it using ``` del ``` ``` Python >>> arr = array(vec1(1), vec1(2), vec1(3)) >>> arr[0] vec1( 1 ) >>> arr[1] = vec1(0) >>> arr array(vec1(1), vec1(0), vec1(3)) >>> del arr[2] >>> arr array(vec1(1), vec1(0)) ``` You can also use slices to get or modify sub\-arrays: ``` Python >>> arr = array(vec1(1), vec1(2), vec1(3), vec1(4)) >>> arr[:2] array(vec1(1), vec1(2)) >>> arr[::2] array(vec1(1), vec1(3)) >>> del arr[1:3] >>> arr array(vec1(1), vec1(4)) >>> arr[:] = array(vec1(8), vec1(9)) >>> arr array(vec1(8), vec1(9)) ``` Slices have the following syntax: ``` start_index : stop_index : optional_step ```, meaning you start at ``` start ``` and go ``` step ``` steps until you've reached or passed ``` stop ``` \(exclusive\) or the greatest possible index\. ### contains \(``` in ``` operator\) You can check wether or not an element is present in the array using the ``` in ``` operator\. ``` Python >>> arr = array(vec2(1, 2), vec2(3, 4)) >>> vec2() in arr False >>> vec2(3, 4) in arr True >>> vec2(2, 3) in arr False ``` ### len You can acquire the length of an array using the built\-in ``` len() ``` function\. ``` Python >>> len(array(vec1(0), vec1(1))) 2 >>> len(array(vec2(0, 1), vec2(2, 3), vec2(4, 5))) 3 ``` ### str You can get a string representation of an array using the built\-in ``` str() ``` function\. Example: ``` Python >>> print(str(array(vec2(1, 2), vec2(3, 4), vec2(5, 6)))) [ [ 1, 2 ], [ 3, 4 ], [ 5, 6 ], ] >>> print(str(array(mat2(1, 2, 3, 4), mat2(5, 6, 7, 8)))) [ [ [ 1, 2 ], [ 3, 4 ], ], [ [ 5, 6 ], [ 7, 8 ], ], ] ``` ### repr You can get a reproducable string representation of an array using the built\-in ``` str() ``` function\. Example: ``` Python >>> print(repr(array(vec2(1, 2), vec2(3, 4), vec2(5, 6)))) array(vec2(1, 2), vec2(3, 4), vec2(5, 6)) >>> print(repr(array(mat2(1, 2, 3, 4), mat2(5, 6, 7, 8)))) array(mat2x2((1, 2), (3, 4)), mat2x2((5, 6), (7, 8))) ``` ### iter You can get an iterator from an array using ``` iter() ``` ``` Python >>> arr = array(vec2(1, 2), vec2(3, 4)) >>> it = iter(arr) >>> next(it) vec2( 1, 2 ) >>> next(it) vec2( 3, 4 ) ``` ### hash You can generate a hash value for arrays using ``` hash() ``` Example: ``` Python >>> arr = array(vec3(1), vec3(2), vec3(3), vec3(4)) >>> hash(arr) -2624592468369027458 >>> arr2 = array(vec3(1), vec3(2), vec3(3)) >>> hash(arr2) 9163283608357050393 >>> arr3 = arr2 + array(vec3(4)) >>> hash(arr3) -2624592468369027458 ```Zuzu-Typ-PyGLM-e113a8a/wiki/Using-arrays.sb000066400000000000000000000452551511156275200204710ustar00rootroot00000000000000\h1\Using Arrays\h1\ PyGLM's array type was introduced in version 2.0.0 to reduce the likelihood of requiring users to also use numpy besides glm. It's mainly intended to \b\provide a way of passing multiple glm type instances\b\ (such as vectors) \b\to external C functions\b\ (such as glBufferData). \h2\Table of contents\h2\ \lo\ \-\\url #about-arrays\About arrays\url\ \-\\url #initialization\Initialization\url\\list switch\ \--\\url #-with-vectors-matrices-quaternions-or-ctypes-number-objects\.. with vectors, matrices, quaternions or ctypes number objects\url\ \--\\url #-with-other-array-instances\.. with other array instances\url\ \--\\url #-with-other-compatible-arrays--lists--iterables\.. with other compatible arrays / lists / iterables\url\ \--\\url #-as-a-reference-instead-of-a-copy\.. as a reference instead of a copy\url\ \--\\url #-with-zeros\.. with zeros\url\ \--\\url #-from-numbers\.. from numbers\url\\list switch\ \-\\url #members\Members\url\ \-\\url #methods\Methods\url\\list switch\ \--\\url #the-copy-protocol\The copy protocol\url\ \--\ \url #pickling \Pickling\ url\ \--\\url #to-list--tuple\To list / tuple\url\ \--\\url #to-and-from-bytes\To and from bytes\url\ \--\\url #from-numbers\From Numbers\url\ \--\\url #as-reference\As Reference\url\ \--\\url #zeros\Zeros\url\ \--\\url #filter\Filter\url\ \--\\url #map\Map\url\ \--\\url #sort\Sort\url\ \--\\url #split-components\Split components\url\ \--\\url #reduce\Reduce\url\ \--\\url #concat\Concat\url\ \--\\url #repeat\Repeat\url\\list switch\ \-\\url #operators\Operators\url\\list switch\ \--\\url #numeric-operations\Numeric operations\url\ \--\\url #getitem-and-setitem--operator\getitem and setitem\url\ \--\\url #contains-in-operator\contains\url\ \--\\url #len\len\url\ \--\\url #str\str\url\ \--\\url #repr\repr\url\ \--\\url #iter\iter\url\ \--\\url #hash\hash\url\ \list\ \h2\About arrays\h2\ PyGLM's arrays are pure data copies of \b\one or multiple instances\b\ of a \b\single PyGLM type\b\. For example, an array could copy the data of five different \code\vec3\code\ instances. However, it cannot copy the data of instances, that don't have the same type, like two \code\vec2\code\ instances and one \code\dvec2\code\ instance. Additionally, the data inside the array is only a \b\copy\b\, thus if the data inside the array is modified, it won't affect the instances it copied the data from. \h2\Initialization\h2\ Arrays can be initialized in a few different ways. \h3\... with vectors, matrices, quaternions or ctypes number objects\h3\ An array can be initialized with any number of vectors, metrices or quaternions, as long as they're all of the same type. \code Python\ >>> array(vec3(1, 2, 3), vec3(4, 5, 6)) array(vec3(1, 2, 3), vec3(4, 5, 6)) >>> array(vec3(), ivec3()) TypeError: arrays have to be initialized with arguments of the same glm type \code\ The same holds true for ctypes numbers: \code Python\ >>> array(int8(2), int8(3)) array(c_int8(2), c_int8(3)) >>> array(int8(2), int16(3)) TypeError: arrays have to be initialized with arguments of the same type \code\ You can also create an array of ctypes numbers from normal numbers using \code\from_numbers\code\, which needs to have the data type as it's first argument: \code Python\ >>> array.from_numbers(int8, 2, 3) array(c_int8(2), c_int8(3)) >>> array(int8, 2, 3) # alternative way array(c_int8(2), c_int8(3)) \code\ \i\Note: The list representations of vecs, mats and quats such as \code\((1, 2), (3, 4))\code\ (an alias for \code\mat2(1, 2, 3, 4)\code\) cannot be used here.\i\ \h3\... with other array instances\h3\ You can obtain a copy of an array by using the copy constructor. \code Python\ arr_copy = array(arr) \code\ \h3\... with other compatible arrays / lists / iterables\h3\ You can convert any compatible type to a PyGLM array. This includes lists, tuples, etc. and types that support the buffer protocol (such as numpy's arrays): \code Python\ >>> array((ivec1(), ivec1())) array(ivec1(0), ivec1(0)) >>> array([dmat2()]) array(dmat2x2((1, 0), (0, 1))) >>> array(numpy.array([[1,2,3]])) array(ivec3(1, 2, 3)) >>> array([[1,2,3]]) TypeError: invalid argument type(s) for array() \code\ \i\Note: array buffers that store length 4 items are interpreted as vec4s rather than quats.\i\ \h3\... as a reference instead of a copy\h3\ If you don't need or don't want a copy of an array or buffer, but want a reference instead (i.e. use the same data in memory as another array / buffer), you can do so by using \code\glm.array.as_reference\code\. \code Python\ >>> arr = array(vec3(1)) >>> arr2 = array.as_reference(arr) >>> arr == arr2 True >>> arr.address == arr2.address True >>> arr[0] = vec3(2) # if you change one of them, the other changes as well >>> arr2 array(vec3(2, 2, 2)) \code\ \i\Note: \code\as_reference\code\ only works with array instances or buffers (e.g. \code\numpy.array\code\). Also it may not always be possible to create a reference copy, in which case a normal copy is made and a warning is raised.\i\ \h3\... with zeros\h3\ You can initialize an array with any given number of zeros or a given type: \code Python\ >>> array.zeros(4, uint8) array(c_uint8(0), c_uint8(0), c_uint8(0), c_uint8(0)) >>> array.zeros(2, vec3) array(vec3(0, 0, 0), vec3(0, 0, 0)) \code\ \h3\... from numbers\h3\ You can initialize an array with numbers and a (ctypes) data type using \code\glm.array.from_numbers\code\: \code Python\ >>> array.from_numbers(int8, 1, 2, 3) array(c_int8(1), c_int8(2), c_int8(3)) >>> array.from_numbers(float32, 4.2, 1.1) array(c_float(4.2), c_float(1.1)) >>> array(int8, 1, 2, 3) # You can also use the array() constructor, but beware that the dedicated function is faster array(c_int8(1), c_int8(2), c_int8(3)) >>> array.from_numbers(vec1, 1, 2, 3) TypeError: Invalid argument type for from_number(), expected a ctypes data type as the first argument. Got 'type' \code\ \h2\Members\h2\ PyGLM arrays have the following members: \tbl\ Name \-\ Type \-\ Description element_type \-\ type \-\ Type class of the contained elements (e.g. \code\glm.vec3\code\) length \-\ int \-\ Number of elements contained by a given array address \-\ int \-\ The memory address where an array's data is stored ptr \-\ c_void_p \-\ A ctypes pointer that points to the content of an array nbytes \-\ int \-\ The total data size in bytes typecode \-\ str \-\ A single character, describing the data type of the elements' values, according to \url https://docs.python.org/3/library/struct.html#format-characters \this list\url\ dtype \-\ str \-\ A numpy-like data type string ctype \-\ str \-\ The respective ctypes data type itemsize \-\ int \-\ The size of one array element in bytes dt_size \-\ int \-\ The size of each single component of the elements in bytes (size of data type) readonly \-\ int \-\ Whether or not the array is read-only reference \-\ int \-\ The reference to the array owning the data (if any) \tbl\ \h2\Methods\h2\ \h3\The copy protocol\h3\ Arrays support the copy protocol (see \url https://docs.python.org/3/library/copy.html \here\ url\). You can use \code\copy.copy()\code\ or \code\copy.deepcopy()\code\ to get a copy of an array. \h3\Pickling\h3\ Arrays support \url https://docs.python.org/3/library/pickle.html#module-interface \pickling\url\ (as of PyGLM 2.0.0), which is Python's serialization method. \h3\To list / tuple\h3\ Any array has a \code\to_list()\code\ and a \code\to_tuple()\code\ function, which return's the arrays's data represented as a list or tuple respectively. \h3\To and from bytes\h3\ Any array has a \code\to_bytes()\code\ and a static \code\from_bytes()\code\ method, which allows for conversion of the array's data to and from bytes strings. The \code\from_bytes()\code\ method takes the bytes string and a target type (\code\uint8\code\ by default) as arguments. Example: \code Python\ >>> array(uint8(1), uint8(2)).to_bytes() b'\\x01\\x02' >>> array.from_bytes(b"\\x01\\x02\\x03", uint8) array(c_uint8(1), c_uint8(2), c_uint8(3)) >>> array.from_bytes(b"\\x00\\x00\\x00\\x00", vec1) array(vec1(0)) >>> array.from_bytes(b"\\x00\\x00\\x00\\x00" * 8, vec1) array(vec1(0), vec1(0), vec1(0), vec1(0), vec1(0), vec1(0), vec1(0), vec1(0)) \code\ \h3\From Numbers\h3\ The array class has a static \code\from_numbers\code\ method, which allows for creation of a one-dimensional array of numbers. It takes a ctypes number type as it's first argument. Example: \code Python\ >>> array.from_numbers(c_float, 1.2, 3.4) array(c_float(1.2), c_float(3.4)) >>> array.from_numbers(int32, 1, 3, 4, 5) array(c_int32(1), c_int32(3), c_int32(4), c_int32(5)) \code\ \h3\As Reference\h3\ The array class also has a static \code\as_reference\code\ method, which allows for creation of a reference copy of other arrays or objects that support the buffer protocol. A reference copy means that the newly created array will use the same data in memory as the source array. It will also keep a reference to the object it shares the data with in the \code\reference\code\ member. Example: \code Python\ >>> arr = array(vec2(1)) >>> arr2 = array.as_reference(arr) >>> arr == arr2 True >>> arr is arr2.reference True >>> arr[0] = vec2(-1) # if you change one of them, the other changes as well >>> arr2 array(vec2(-1, -1)) \code\ \h3\Zeros\h3\ Additionally, the array class has a static \code\zeros\code\ method, which allows for creation of an array with items that are initialized with zeros. This is the fastest way of creating an array, as it uses the builtin \code\calloc\code\ function to allocate the memory and initialize it in the same step. Example: \code Python\ >>> array.zeros(4, uint8) array(c_uint8(0), c_uint8(0), c_uint8(0), c_uint8(0)) >>> array.zeros(2, vec3) array(vec3(0, 0, 0), vec3(0, 0, 0)) >>> array.zeros(1, mat4) array(mat4x4((0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0), (0, 0, 0, 0))) \code\ \h3\Filter\h3\ You can filter an array using a custom filtering function (i.e. create a new array with all of this array's elements that match a certain criteria). The filtering function is called with each element of the array and must return \code\True\code\ for the elements to keep and \code\False\code\ for the elements to discard. Example: \code Python\ >>> array(c_float, 1, 2, 3, 4, 5).filter(lambda x: x > 3) array(c_float(4), c_float(5)) >>> array(vec3(1), vec3(2), vec3(3)).filter(lambda x: x.x + x.y == 2) array(vec3(1, 1, 1)) \code\ \h3\Map\h3\ You can map the elements of an array to one or any number of new values using a custom mapping function. The mapping function is supplied with the amounts of arguments that the map function is given. If the mapping function returns \code\None\code\, the element is discarded (much like filter). If it returns a single value, that value becomes a new element of the resulting array. If it returns a tuple, all of the tuple's items are added to the resulting array. When the mapping function returns numbers, they are interpreted as ctypes numbers of the same type as the array that \code\map\code\ was called on. If you want to specify a custom ctypes type to use, there is a keyword argument called \code\ctype\code\ that can be used to do that. Example: \code Python\ >>> array(c_float, 1, 2, 3).map(lambda x: x + 1) array(c_float(2), c_float(3), c_float(4)) >>> array(c_float, 1, 2, 3).map(vec3) array(vec3(1, 1, 1), vec3(2, 2, 2), vec3(3, 3, 3)) >>> array(c_float, 1, 2, 3, 4, 5).map(lambda x: x if x > 3 else None) array(c_float(4), c_float(5)) >>> array(c_float, 1, 2).map(lambda x: (x, x)) array(c_float(1), c_float(1), c_float(2), c_float(2)) >>> array(c_float, 1, 2).map(lambda x: (3, 4) if x == 1 else 5) array(c_float(3), c_float(4), c_float(5)) >>> arr1 = array(c_float, 1, 2, 3) >>> arr2 = array(c_float, 4, 5, 6) >>> arr1.map(lambda x, y: (x + x) * y, arr2) array(c_float(8), c_float(20), c_float(36)) >>> arr3 = array(c_float, 7, 8, 9) >>> arr1.map(lambda x, y, z: vec3(x, y, z), arr2, arr3) array(vec3(1, 4, 7), vec3(2, 5, 8), vec3(3, 6, 9)) >>> arr1.map(lambda x, y, z: x * y + z, arr2, arr3) array(c_float(11), c_float(18), c_float(27)) >>> arr4 = array(vec3(1, 2, 3), vec3( 4, 5, 6)) >>> arr4.map(normalize) array(vec3(0.267261, 0.534522, 0.801784), vec3(0.455842, 0.569803, 0.683764)) >>> arr5 = array(vec3(7, 8, 9), vec3(10,11,12)) >>> arr4.map(dot, arr5) array(c_float(50), c_float(167)) >>> arr4.map(dot, arr5, ctype = c_int32) array(c_int32(50), c_int32(167)) \code\ \h3\Sort\h3\ You can sort an array by using a custom sorting function. The sorting function is called with two elements from the array and should return \code\-1\code\ if the first element comes before the second element in order. Otherwise it should return \code\0\code\ for equal elements and \code\1\code\ if the first element comes after the second. The sorting algorithm used is a recursive quicksort. Example: \code Python\ >>> arr = array(c_float, 6, 5, 4, 3, 2, 1) >>> arr.sort(lambda x, y: -1 if x < y else 0 if x == y else 1) >>> arr array(c_float(1), c_float(2), c_float(3), c_float(4), c_float(5), c_float(6)) >>> arr.sort(lambda x, y: int(sign(y - x))) >>> arr array(c_float(6), c_float(5), c_float(4), c_float(3), c_float(2), c_float(1)) >>> arr.sort(cmp) # using glm.cmp >>> arr array(c_float(1), c_float(2), c_float(3), c_float(4), c_float(5), c_float(6)) \code\ \h3\Split components\h3\ You can split an array into the components of it's elements using the \code\split_components()\code\ method. Splits each element of this array into it's components. Returns one or multiple arrays wrapped in a tuple. Example: \code Python\ >>> arr = array(vec3(1, 2, 3), vec3(4, 5, 6)) >>> arr.split_components() (array(c_float(1), c_float(4)), array(c_float(2), c_float(5)), array(c_float(3), c_float(6))) >>> arr = array(mat2((1,2),(3,4)), mat2((5,6),(7,8)), mat2((9,10),(11,12))) >>> arr.split_components() (array(vec2(1, 2), vec2(5, 6), vec2(9, 10)), array(vec2(3, 4), vec2(7, 8), vec2(11, 12))) >>> arr = array(c_float, 6, 5, 4, 3, 2, 1) # doesn't have any components >>> arr.split_components() NotImplementedError: split_components() is not defined for ctypes arrays \code\ \h3\Reduce\h3\ Used to apply a binary function to this array's elements cumulatively, reducing the array to a single value. If an optional initializer is given, it is placed before the first element. Example: \code Python\ >>> arr = array(c_float, 6, 5, 4, 3, 2, 1) >>> arr.reduce(lambda x, y: x + y) # (((((6+5)+4)+3)+2)+1) 21.0 >>> arr.reduce(mul) # (((((6*5)*4)*3)*2)*1) 720.0 >>> arr.reduce(sub) # (((((6-5)-4)-3)-2)-1) -9.0 >>> arr.reduce(sub, 21) # with initializer: ((((((21-6)-5)-4)-3)-2)-1) 0.0 \code\ \h3\Concat\h3\ Arrays can be combined / concatenated using the \code\concat()\code\ method, as long as they have the same element type. \code Python\ >>> array(vec2(1, 2)).concat(array(vec2(3, 4))) array(vec2(1, 2), vec2(3, 4)) >>> array(vec4()).concat(array(vec1())) ValueError: the given arrays are incompatible \code\ \h3\Repeat\h3\ Arrays can be repeated a given number of times using the \code\repeat()\code\ method. \code Python\ >>> array(vec3(1, 2, 3)).repeat(3) array(vec3(1, 2, 3), vec3(1, 2, 3), vec3(1, 2, 3)) \code\ \h3\Reinterpret cast\h3\ You can reinterpret the data of an array as a different element type using the \code\reinterpret_cast()\code\ method. Example: \code Python\ >>> array(vec3(1, 2, 3)).reinterpret_cast(float32) array(c_float(1), c_float(2), c_float(3)) >>> array.from_numbers(float32, 1, 2, 3, 4, 5, 6, 7, 8, 9).reinterpret_cast(vec3) array(vec3(1, 2, 3), vec3(4, 5, 6), vec3(7, 8, 9)) \code\ \h2\Operators\h2\ \h3\Numeric operations\h3\ Arrays support a dozen numeric operations: \ul\ \-\ Addition (\code\+\code\) \-\ Subtraction (\code\-\code\) \-\ Multiplication (\code\*\code\) \-\ Division (\code\/\code\) \-\ Modulus (\code\%\code\) \-\ Power (\code\**\code\) \-\ Negation (\code\-\code\) \-\ Absolution (\code\abs()\code\) \-\ Inversion (\code\~\code\) \-\ Left shift (\code\<<\code\) \-\ Right shift (\code\>>\code\) \-\ Bitwise and (\code\&\code\) \-\ Bitwise or (\code\|\code\) \-\ Bitwise xor (\code\^\code\) \ul\ \i\Note: Not all types are compatible though.\i\ \h3\getitem, setitem and delitem (\code\[]\code\ operator)\h3\ You can access the individual elements of an array using indices. Likewise you can also modify it's data by overwriting it or delete it using \code\del\code\ \code Python\ >>> arr = array(vec1(1), vec1(2), vec1(3)) >>> arr[0] vec1( 1 ) >>> arr[1] = vec1(0) >>> arr array(vec1(1), vec1(0), vec1(3)) >>> del arr[2] >>> arr array(vec1(1), vec1(0)) \code\ You can also use slices to get or modify sub-arrays: \code Python\ >>> arr = array(vec1(1), vec1(2), vec1(3), vec1(4)) >>> arr[:2] array(vec1(1), vec1(2)) >>> arr[::2] array(vec1(1), vec1(3)) >>> del arr[1:3] >>> arr array(vec1(1), vec1(4)) >>> arr[:] = array(vec1(8), vec1(9)) >>> arr array(vec1(8), vec1(9)) \code\ Slices have the following syntax: \code\start_index : stop_index : optional_step\code\, meaning you start at \code\start\code\ and go \code\step\code\ steps until you've reached or passed \code\stop\code\ (exclusive) or the greatest possible index. \h3\contains (\code\in\code\ operator)\h3\ You can check wether or not an element is present in the array using the \code\in\code\ operator. \code Python\ >>> arr = array(vec2(1, 2), vec2(3, 4)) >>> vec2() in arr False >>> vec2(3, 4) in arr True >>> vec2(2, 3) in arr False \code\ \h3\len\h3\ You can acquire the length of an array using the built-in \code\len()\code\ function. \code Python\ >>> len(array(vec1(0), vec1(1))) 2 >>> len(array(vec2(0, 1), vec2(2, 3), vec2(4, 5))) 3 \code\ \h3\str\h3\ You can get a string representation of an array using the built-in \code\str()\code\ function. Example: \code Python\ >>> print(str(array(vec2(1, 2), vec2(3, 4), vec2(5, 6)))) [ [ 1, 2 ], [ 3, 4 ], [ 5, 6 ], ] >>> print(str(array(mat2(1, 2, 3, 4), mat2(5, 6, 7, 8)))) [ [ [ 1, 2 ], [ 3, 4 ], ], [ [ 5, 6 ], [ 7, 8 ], ], ] \code\ \h3\repr\h3\ You can get a reproducable string representation of an array using the built-in \code\str()\code\ function. Example: \code Python\ >>> print(repr(array(vec2(1, 2), vec2(3, 4), vec2(5, 6)))) array(vec2(1, 2), vec2(3, 4), vec2(5, 6)) >>> print(repr(array(mat2(1, 2, 3, 4), mat2(5, 6, 7, 8)))) array(mat2x2((1, 2), (3, 4)), mat2x2((5, 6), (7, 8))) \code\ \h3\iter\h3\ You can get an iterator from an array using \code\iter()\code\ \code Python\ >>> arr = array(vec2(1, 2), vec2(3, 4)) >>> it = iter(arr) >>> next(it) vec2( 1, 2 ) >>> next(it) vec2( 3, 4 ) \code\ \h3\hash\h3\ You can generate a hash value for arrays using \code\hash()\code\ Example: \code Python\ >>> arr = array(vec3(1), vec3(2), vec3(3), vec3(4)) >>> hash(arr) -2624592468369027458 >>> arr2 = array(vec3(1), vec3(2), vec3(3)) >>> hash(arr2) 9163283608357050393 >>> arr3 = arr2 + array(vec3(4)) >>> hash(arr3) -2624592468369027458 \code\Zuzu-Typ-PyGLM-e113a8a/wiki/Using-matrices.md000066400000000000000000000445471511156275200207760ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # Using Matrices 1. [Initialization](#initialization) * [with no arguments](#initialization-with-no-arguments) * [with single number](#initialization-with-a-single-number) * [with quaternion](#initialization-with-a-quaternion) * [with custom diagonal values](#initializing-the-matrix-diagonal-with-custom-values) * [all components with numbers](#initializing-all-components-with-numbers) * [copying a matrix](#copying-a-matrix) * [with vectors](#constructing-matrices-from-vectors) * [Lists \(and other iterables\)](#lists-and-other-iterables) * [Buffer protocol \(numpy, bytes\)](#objects-that-support-the-buffer-protocol-numpy-bytes) 2. [Methods](#methods) * [The copy protocol](#the-copy-protocol) * [Pickling](#pickling) * [To list / tuple](#to-list--tuple) * [To and from bytes](#to-and-from-bytes) 3. [Operators](#operators) * [add](#add--operator) * [sub](#sub--operator) * [mul](#mul--operator) * [matmul](#matmul--operator) * [div](#div--operator) * [len](#len) * [getitem and setitem](#getitem-and-setitem--operator) * [contains](#contains-in-operator) * [richcompare](#richcompare-eg--operator) * [iter](#iter) * [hash](#hash) ## Initialization Matrices can be constructed in quite a few different ways\. #### Initialization with no arguments Initializing a matrix without any additional arguments will return an identity matrix, meaning that it's values are set to ``` 1 ``` where column and row indices are equal and set to ``` 0 ``` otherwise\.   This results in a diagonal line of ones from top left to bottom right\.   Example: ``` Python >>> print(glm.mat2()) [ 1 ][ 0 ] [ 0 ][ 1 ] >>> print(glm.mat4()) [ 1 ][ 0 ][ 0 ][ 0 ] [ 0 ][ 1 ][ 0 ][ 0 ] [ 0 ][ 0 ][ 1 ][ 0 ] [ 0 ][ 0 ][ 0 ][ 1 ] >>> print(glm.mat2x4()) [ 1 ][ 0 ] [ 0 ][ 1 ] [ 0 ][ 0 ] [ 0 ][ 0 ] ``` #### Initialization with a single number Initializing a matrix with a single number returns a matrix similar to the identity matrices shown above\.   The only difference is that instead of setting equal column and row indices to ``` 1 ```, they're set to the provided number\.   Example: ``` Python >>> print(glm.mat2(3)) [ 3 ][ 0 ] [ 0 ][ 3 ] >>> print(glm.mat4(0)) [ 0 ][ 0 ][ 0 ][ 0 ] [ 0 ][ 0 ][ 0 ][ 0 ] [ 0 ][ 0 ][ 0 ][ 0 ] [ 0 ][ 0 ][ 0 ][ 0 ] >>> print(glm.mat2x4(1.5)) [ 1.5 ][ 0 ] [ 0 ][ 1.5 ] [ 0 ][ 0 ] [ 0 ][ 0 ] ``` #### Initialization with a quaternion Initializing a 3x3 or 4x4 matrix with a quaternion yields a matrix with the same basic rotational properties as the quaternion\. Example: ``` Python >>> q = glm.quat(glm.vec3(0, 0, glm.radians(90))) # rotate 90 degrees around the Z axis >>> print(glm.mat4(q)) [ 5.96046e-08 ][ -1 ][ 0 ][ 0 ] [ 1 ][ 5.96046e-08 ][ 0 ][ 0 ] [ 0 ][ 0 ][ 1 ][ 0 ] [ 0 ][ 0 ][ 0 ][ 1 ] >>> print(glm.rotate(glm.radians(90), glm.vec3(0, 0, 1))) [ -4.37114e-08 ][ -1 ][ 0 ][ 0 ] [ 1 ][ -4.37114e-08 ][ 0 ][ 0 ] [ 0 ][ 0 ][ 1 ][ 0 ] [ 0 ][ 0 ][ 0 ][ 1 ] ``` #### Initializing the matrix diagonal with custom values You can initialize a matrix' diagonal with custom values\. Example: ``` Python >>> print(glm.mat2(1, 2)) [ 1 ][ 0 ] [ 0 ][ 2 ] >>> print(glm.mat4(1, 2, 3, 4)) [ 1 ][ 0 ][ 0 ][ 0 ] [ 0 ][ 2 ][ 0 ][ 0 ] [ 0 ][ 0 ][ 3 ][ 0 ] [ 0 ][ 0 ][ 0 ][ 4 ] >>> print(glm.mat2x4(1, 2)) [ 1 ][ 0 ] [ 0 ][ 2 ] [ 0 ][ 0 ] [ 0 ][ 0 ] ``` i\.e\. a ``` matNxM ``` matrix can be initialized with ``` int(sqrt(N * M)) ``` numbers\. #### Initializing all components with numbers A matrix ``` matNxM ``` can be initialized with *N* x *M* numbers, which will be copied \(or may be converted\) to their respective components\.   Example: ``` Python >>> print(glm.mat2(1, 2, 3, 4)) [ 1 ][ 3 ] [ 2 ][ 4 ] >>> print(glm.mat4(*range(16))) [ 0 ][ 4 ][ 8 ][ 12 ] [ 1 ][ 5 ][ 9 ][ 13 ] [ 2 ][ 6 ][ 10 ][ 14 ] [ 3 ][ 7 ][ 11 ][ 15 ] ``` #### Copying a matrix A copy of a matrix can be obtained by initializing a matrix with an instance of a matrix\.   i\.e\. ``` glm.mat2(glm.mat2(5, 2, 4, 3)) ``` returns matrix ``` ((5, 2), (4, 3)) ```   This is what's known as the copy constructor\. #### Initializing matrices with other matrices You can initialize any matrix with another matrix \(as long as they have the same datatype or size\)\.   Any values that don't fit into the new matrix are discarded and any values that aren't filled by the supplied matrix are padded up with values from the respective identity matrix\.   Example:   ``` Python >>> print(glm.mat4( glm.mat2(9, 8, 7, 6) )) [ 9 ][ 7 ][ 0 ][ 0 ] [ 8 ][ 6 ][ 0 ][ 0 ] [ 0 ][ 0 ][ 1 ][ 0 ] [ 0 ][ 0 ][ 0 ][ 1 ] >>> m44 = glm.mat4(*range(16)) >>> print(m44) [ 0 ][ 4 ][ 8 ][ 12 ] [ 1 ][ 5 ][ 9 ][ 13 ] [ 2 ][ 6 ][ 10 ][ 14 ] [ 3 ][ 7 ][ 11 ][ 15 ] >>> print(glm.mat2(m44)) [ 0 ][ 4 ] [ 1 ][ 5 ] >>> m32 = glm.mat3x2(6, 5, 4, 3, 2, 1) >>> print(m32) [ 6 ][ 4 ][ 2 ] [ 5 ][ 3 ][ 1 ] >>> print(glm.mat2x3(m32)) [ 6 ][ 4 ] [ 5 ][ 3 ] [ 0 ][ 0 ] >>> print(glm.mat3(m32)) [ 6 ][ 4 ][ 2 ] [ 5 ][ 3 ][ 1 ] [ 0 ][ 0 ][ 1 ] >>> print(glm.imat2(glm.dmat2(7.9))) [ 7 ][ 0 ] [ 0 ][ 7 ] ``` #### Constructing matrices from vectors You can construct a ``` matNxM ``` from *N* vectors of length *M*, if they share the same datatype\. Example: ``` Python >>> print(glm.mat2( glm.vec2(1, 2), glm.vec2(3, 4) )) # 2 vectors of length 2 [ 1 ][ 3 ] [ 2 ][ 4 ] >>> print(glm.mat2x4( glm.vec4(1, 2, 3, 4), glm.vec4(5, 6, 7, 8) )) # 2 vectors of length 4 [ 1 ][ 5 ] [ 2 ][ 6 ] [ 3 ][ 7 ] [ 4 ][ 8 ] >>> print(glm.mat4x2( glm.vec2(1, 2), glm.vec2(3, 4), glm.vec2(5, 6), glm.vec2(7, 8) )) # 4 vectors of length 2 [ 1 ][ 3 ][ 5 ][ 7 ] [ 2 ][ 4 ][ 6 ][ 8 ] ``` ### Lists \(and other iterables\) Instead of using matrices, you can use matrix\-like lists / tuples in most cases\. For example, you can initialize a matrix with a matrix\-like tuple: ``` Python >>> print(glm.mat2( ((1, 2), (3, 4)) )) [ 1 ][ 3 ] [ 2 ][ 4 ] ``` Or use it on one handside of a numeric operator: ``` Python >>> m22 = glm.mat2() >>> print(m22) [ 1 ][ 0 ] [ 0 ][ 1 ] >>> print(m22 + ((4, 3), (2, 1))) [ 5 ][ 2 ] [ 3 ][ 2 ] ``` It is also accepted by most functions: ``` Python >>> print(glm.inverse( ((1,2),(3,4)) )) [ -2 ][ 1.5 ] [ 1 ][ -0.5 ] ``` ### Objects that support the buffer protocol \(numpy, bytes\) A few objects in Python support a functionality called the buffer protocol\.   One such example would be the Python ``` bytes ``` type or ``` numpy.array ```\.   PyGLM also supports this protocol and thus can be converted to or from any other object that supports it, granted it's in a fitting format\.   Examples: ``` Python >>> narr = numpy.array(glm.mat4()) >>> print(narr) [[1. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.]] >>> print(glm.mat4(narr)) [ 1 ][ 0 ][ 0 ][ 0 ] [ 0 ][ 1 ][ 0 ][ 0 ] [ 0 ][ 0 ][ 1 ][ 0 ] [ 0 ][ 0 ][ 0 ][ 1 ] ``` *Note: objects that use the buffer protocol may request a reference instead of a copy of the object, meaning that if you change the 'copy', you'll also change the original\.* ## Methods Any matrix type implements the following methods: ### Length You can acquire the length of a matrix with the ``` length() ``` method\. It will give you the same result as the builtin ``` len() ``` method\. ### The copy protocol Matrices support the copy protocol \(see [here](https://docs.python.org/3/library/copy.html)\)\.   You can use ``` copy.copy() ``` or ``` copy.deepcopy() ``` to get a copy of a matrix\. ### Pickling Matrices support [pickling](https://docs.python.org/3/library/pickle.html#module-interface) \(as of PyGLM 2\.0\.0\), which is Python's serialization method\. ### To list / tuple Any matrix type has a ``` to_list() ``` and a ``` to_tuple() ``` function, which returns the matrix' data represented as a list or tuple respectively\. Example: ``` Python >>> print(glm.mat4().to_list()) [[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 0.0, 1.0]] >>> print(glm.mat4().to_tuple()) ((1.0, 0.0, 0.0, 0.0), (0.0, 1.0, 0.0, 0.0), (0.0, 0.0, 1.0, 0.0), (0.0, 0.0, 0.0, 1.0)) ``` ### To and from bytes All matrices have a ``` to_bytes() ``` and a ``` from_bytes() ``` method, which allows for conversion of the matrix' data to and from bytes strings\. ## Operators Matrix types support a bunch of operators\. ### add \(``` + ``` operator\) Matrices support addition with other matrices and numbers\. Only matrices of the same shape and type can be used\. ``` Python sum1 = mat2(1, 2, 3, 4) + mat2(1, 0, 1, 0) # returns mat2(2, 2, 4, 4) sum2 = mat2(1, 2, 3, 4) + 4 # returns mat2(5, 6, 7, 8) ``` Note: Only square matrices allow for left side addition of numbers ### sub \(``` - ``` operator\) Matrices support subtraction with other matrices and numbers\.   ``` Python diff1 = mat2(1, 2, 3, 4) - mat2(1, 0, 1, 0) # returns mat2(0, 2, 2, 4) diff2 = mat2(1, 2, 3, 4) - 4 # returns mat2(-3, -2, -1, 0) ``` Note: Only square matrices allow for left side subtration of numbers ### mul \(``` * ``` operator\) Matrices support multiplication with vectors, other matrices and numbers\.   Multiplying a matrix with a number multiplies each component with that number\. ``` Python prod = mat2(1, 2, 3, 4) * 4 # returns mat2(4, 8, 12, 16) ``` Multiplying a matrix with a vector is a bit more complex\. If you have a ``` matNxM ``` matrix, you can either left\-side multiply it with a length *M* vector and get a length *N* vector in return ``` Python prod1 = vec3(7, 8, 9) * mat2x3((1, 2, 3), (4, 5, 6)) # returns vec2( # 7 * 1 + 8 * 2 + 9 * 3, # 7 * 4 + 8 * 5 + 9 * 6 # ) # = vec2(50, 122) prodx = vec4(a, b, c, d) * mat3x4((m00, m01, m02, m03), (m10, m11, m12, m13), (m20, m21, m22, m23)) # returns vec3( # a * m00 + b * m01 + c * m02 + d * m03, # a * m10 + b * m11 + c * m12 + d * m13, # a * m20 + b * m21 + c * m22 + d * m23 # ) ``` or right\-side multiply it with a length *N* vector and get a length *M* vector in return\. ``` Python prod1 = mat2x3((1, 2, 3), (4, 5, 6)) * vec2(7, 8) # returns vec3( # 7 * 1 + 8 * 4, # 7 * 2 + 8 * 5, # 7 * 3 + 8 * 6 # ) # = vec3(39, 54, 69) prodx = mat3x4((m00, m01, m02, m03), (m10, m11, m12, m13), (m20, m21, m22, m23)) * vec3(a, b, c) # returns vec4( # a * m10 + b * m10 + c * m20, # a * m11 + b * m11 + c * m21, # a * m12 + b * m12 + c * m22, # a * m13 + b * m13 + c * m23 # ) ``` For multiplication of square matrices with vectors using homogenous coordinates, PyGLM provides a shorthand: ``` Python m = rotate(radians(90), vec3(0, 1, 0)) # creates a 4x4 rotation matrix v = vec3(1, 2, 3) # some 3D vector # This is what you would normally have to do to apply the rotation to v: v_rotated = vec3(m * vec4(v, 1)) # returns vec3( 3, 2, -1 ) # This is the shorthand: v_rotated = m * v # returns vec3( 3, 2, -1 ) ``` Now for the most complex part\. Matrix\-matrix multiplication\. You can only multiply a ``` matAxB ``` with a ``` matCxA ``` matrix and it will return a ``` matCxB ``` matrix\. ``` Python mat2x3() * mat4x2() # returns a mat4x3 mat3x2() * mat2x4() # error - these matrices are incompatible mat2x4() * mat2x4() # error - these matrices are incompatible mat2x2() * mat2x2() # returns a mat2x2 mat3x3() * mat2x3() # returns a mat2x3 ``` The actual computation is a combination of multiplication and addition\. Okay, so this may be a bit difficult to grasp at first: Each component of the resulting matrix is the sum of each component of the *first* matrix' respective *row* multiplied by the components of the *second* matrix' respective *column*\. **Keep in mind, that glm's columns and rows are in the opposite order**, so this gets even more complicated\. Lets try to visualize it using an example: ``` Python >>> m24 = glm.mat2x4(1, 2, 3, 4, 5, 6, 7, 8) >>> print(m24) [ 1 ][ 5 ] [ 2 ][ 6 ] [ 3 ][ 7 ] [ 4 ][ 8 ] >>> m22 = glm.mat2(4, 3, 2, 1) >>> print(m22) [ 4 ][ 2 ] [ 3 ][ 1 ] >>> print(m24 * m22) [ 19 ][ 7 ] [ 26 ][ 10 ] [ 33 ][ 13 ] [ 40 ][ 16 ] result = mat2x4( ( m24[0, 0] * m22[0, 0] + m24[1, 0] * m22[0, 1], m24[0, 1] * m22[0, 0] + m24[1, 1] * m22[0, 1], m24[0, 2] * m22[0, 0] + m24[1, 2] * m22[0, 1], m24[0, 3] * m22[0, 0] + m24[1, 3] * m22[0, 1] ), ( m24[0, 0] * m22[1, 0] + m24[1, 0] * m22[1, 1], m24[0, 1] * m22[1, 0] + m24[1, 1] * m22[1, 1], m24[0, 2] * m22[1, 0] + m24[1, 2] * m22[1, 1], m24[0, 3] * m22[1, 0] + m24[1, 3] * m22[1, 1] ) ) ``` ### matmul \(``` @ ``` operator\) Has the same effects as the ``` * ``` operator\. ### div \(``` / ``` operator\) Matrices support division with numbers, vectors and other matrices\.   ``` Python quot = mat2(1, 2, 3, 4) / 2 # returns mat2(0.5, 1, 1.5, 2) ``` Only square matrices can support division with other matrices and vectors\. If a matrix is divided by a vector or vice versa, the matrix is simply inversed and multiplied with that vector instead\. ``` Python >>> m22 = mat2(1, 2, 3, 4) >>> v2 = vec2(5, 6) >>> m22 / v2 vec2( -1, 2 ) >>> glm.inverse(m22) * v2 vec2( -1, 2 ) ``` Division with other matrices follows the same scheme\. The right handside matrix is inversed and then multiplied by the other matrix\. ``` Python >>> m22 = mat2(1, 2, 3, 4) >>> m22 / mat2(8, 7, 6, 5) mat2x2(( 8, 9 ), ( -9, -10 )) >>> m22 * glm.inverse(mat2(8, 7, 6, 5)) mat2x2(( 8, 9 ), ( -9, -10 )) ``` ### len The length of a matrix \(i\.e\. the column count\) can be queried using ``` len() ```\. ``` Python mat_length = len(mat2x4()) # returns 2 ``` ### getitem and setitem \(``` [] ``` operator\) You can get the values of a matrix using indices\. ``` Python m = mat2x3(1, 2, 3, 4, 5, 6) print(m[0]) # prints mvec3(1, 2, 3) print(m[1]) # prints mvec3(4, 5, 6) print(m[0, 2]) # prints 3 print(m[1, 0]) # prints 4 ``` Note: *mvec is a special vector type, that references the values of the matrix it came from\. I\.e\. if you change the mvec's values, you will do so with the values of the matrix too\.* You can also set the values\. ``` Python >>> m = mat2(1, 2, 3, 4) >>> m[0] = vec2(5, 6) >>> print(m) [ 5 ][ 3 ] [ 6 ][ 4 ] ``` ### contains \(``` in ``` operator\) You can query wether or not a value is contained by a matrix using the ``` in ``` operator\. ``` Python >>> m = mat2(1, 2, 3, 4) >>> vec2(1, 2) in m True >>> vec2(2, 3) in m False >>> 3 in m True >>> 0 in m False ``` ### richcompare \(e\.g\. ``` == ``` operator\) You can compare matrices using the equals and not\-equals richcompare operators: ``` Python mat2(1, 2, 3, 4) == mat2(1, 2, 3, 4) # True mat2(1, 2, 3, 4) == mat2(3, 4, 1, 2) # False mat2(1, 2, 3, 4) == mat3(1, 2, 3, 4, 5, 6, 7, 8, 9) # False mat2(1, 2, 3, 4) != mat2(1, 2, 3, 4) # False mat2(1, 2, 3, 4) != mat2(3, 4, 1, 2) # True mat2(1, 2, 3, 4) != mat3(1, 2, 3, 4, 5, 6, 7, 8, 9) # True ``` ### iter You can generate an iterable from matrices using ``` iter() ```\. ``` Python m = mat2(1, 2, 3, 4) it = iter(m) print(next(it)) # prints mvec2(1, 2) print(next(it)) # prints mvec2(3, 4) ``` ### hash You can generate a hash value for matrices using ``` hash() ``` Example: ``` Python >>> m = mat2() >>> hash(m) -8340327414932306126 >>> m2 = mat2(1, 2, 3, 4) >>> hash(m2) 2533527020982565631 ```Zuzu-Typ-PyGLM-e113a8a/wiki/Using-matrices.sb000066400000000000000000000450371511156275200207750ustar00rootroot00000000000000\h1\Using Matrices\h1\ \lo \ \-\ \url #initialization \Initialization\ url\\list switch\ \--\ \url #initialization-with-no-arguments \with no arguments\ url\ \--\ \url #initialization-with-a-single-number \with single number\ url\ \--\ \url #initialization-with-a-quaternion \with quaternion\ url\ \--\ \url #initializing-the-matrix-diagonal-with-custom-values \with custom diagonal values\ url\ \--\ \url #initializing-all-components-with-numbers \all components with numbers\ url\ \--\ \url #copying-a-matrix \copying a matrix\ url\ \--\ \url #constructing-matrices-from-vectors \with vectors\ url\ \--\ \url #lists-and-other-iterables \Lists (and other iterables)\ url\ \--\ \url #objects-that-support-the-buffer-protocol-numpy-bytes \Buffer protocol (numpy, bytes)\ url\\list switch\ \-\ \url #methods \Methods\ url\\list switch\ \--\ \url #the-copy-protocol \The copy protocol\ url\ \--\ \url #pickling \Pickling\ url\ \--\ \url #to-list--tuple \To list / tuple\ url\ \--\ \url #to-and-from-bytes \To and from bytes\ url\\list switch\ \-\ \url #operators \Operators\ url\\list switch\ \--\ \url #add--operator \add\ url\ \--\ \url #sub--operator \sub\ url\ \--\ \url #mul--operator \mul\ url\ \--\ \url #matmul--operator \matmul\ url\ \--\ \url #div--operator \div\ url\ \--\ \url #len \len\ url\ \--\ \url #getitem-and-setitem--operator \getitem and setitem\ url\ \--\ \url #contains-in-operator \contains\ url\ \--\ \url #richcompare-eg--operator \richcompare\ url\ \--\ \url #iter \iter\ url\ \--\ \url #hash\hash\url\ \ list\ \h2 \Initialization\ h2\ Matrices can be constructed in quite a few different ways. \h4 \Initialization with no arguments\ h4\ Initializing a matrix without any additional arguments will return an identity matrix, meaning that it's values are set to \code \1\ code\ where column and row indices are equal and set to \code\0\code\ otherwise. This results in a diagonal line of ones from top left to bottom right. Example: \code Python \ >>> print(glm.mat2()) [ 1 ][ 0 ] [ 0 ][ 1 ] >>> print(glm.mat4()) [ 1 ][ 0 ][ 0 ][ 0 ] [ 0 ][ 1 ][ 0 ][ 0 ] [ 0 ][ 0 ][ 1 ][ 0 ] [ 0 ][ 0 ][ 0 ][ 1 ] >>> print(glm.mat2x4()) [ 1 ][ 0 ] [ 0 ][ 1 ] [ 0 ][ 0 ] [ 0 ][ 0 ] \code\ \h4 \Initialization with a single number\ h4\ Initializing a matrix with a single number returns a matrix similar to the identity matrices shown above. The only difference is that instead of setting equal column and row indices to \code\1\code\, they're set to the provided number. Example: \code Python \ >>> print(glm.mat2(3)) [ 3 ][ 0 ] [ 0 ][ 3 ] >>> print(glm.mat4(0)) [ 0 ][ 0 ][ 0 ][ 0 ] [ 0 ][ 0 ][ 0 ][ 0 ] [ 0 ][ 0 ][ 0 ][ 0 ] [ 0 ][ 0 ][ 0 ][ 0 ] >>> print(glm.mat2x4(1.5)) [ 1.5 ][ 0 ] [ 0 ][ 1.5 ] [ 0 ][ 0 ] [ 0 ][ 0 ] \code\ \h4 \Initialization with a quaternion\ h4\ Initializing a 3x3 or 4x4 matrix with a quaternion yields a matrix with the same basic rotational properties as the quaternion. Example: \code Python \ >>> q = glm.quat(glm.vec3(0, 0, glm.radians(90))) # rotate 90 degrees around the Z axis >>> print(glm.mat4(q)) [ 5.96046e-08 ][ -1 ][ 0 ][ 0 ] [ 1 ][ 5.96046e-08 ][ 0 ][ 0 ] [ 0 ][ 0 ][ 1 ][ 0 ] [ 0 ][ 0 ][ 0 ][ 1 ] >>> print(glm.rotate(glm.radians(90), glm.vec3(0, 0, 1))) [ -4.37114e-08 ][ -1 ][ 0 ][ 0 ] [ 1 ][ -4.37114e-08 ][ 0 ][ 0 ] [ 0 ][ 0 ][ 1 ][ 0 ] [ 0 ][ 0 ][ 0 ][ 1 ] \code\ \h4 \Initializing the matrix diagonal with custom values\ h4\ You can initialize a matrix' diagonal with custom values. Example: \code Python \ >>> print(glm.mat2(1, 2)) [ 1 ][ 0 ] [ 0 ][ 2 ] >>> print(glm.mat4(1, 2, 3, 4)) [ 1 ][ 0 ][ 0 ][ 0 ] [ 0 ][ 2 ][ 0 ][ 0 ] [ 0 ][ 0 ][ 3 ][ 0 ] [ 0 ][ 0 ][ 0 ][ 4 ] >>> print(glm.mat2x4(1, 2)) [ 1 ][ 0 ] [ 0 ][ 2 ] [ 0 ][ 0 ] [ 0 ][ 0 ] \code\ i.e. a \code\matNxM\code\ matrix can be initialized with \code\int(sqrt(N * M))\code\ numbers. \h4 \Initializing all components with numbers\ h4\ A matrix \code\matNxM\code\ can be initialized with \i\N\i\ x \i\M\i\ numbers, which will be copied (or may be converted) to their respective components. Example: \code Python \ >>> print(glm.mat2(1, 2, 3, 4)) [ 1 ][ 3 ] [ 2 ][ 4 ] >>> print(glm.mat4(*range(16))) [ 0 ][ 4 ][ 8 ][ 12 ] [ 1 ][ 5 ][ 9 ][ 13 ] [ 2 ][ 6 ][ 10 ][ 14 ] [ 3 ][ 7 ][ 11 ][ 15 ] \code\ \h4 \Copying a matrix\ h4\ A copy of a matrix can be obtained by initializing a matrix with an instance of a matrix. i.e. \code\glm.mat2(glm.mat2(5, 2, 4, 3))\code\ returns matrix \code\((5, 2), (4, 3))\code\ This is what's known as the copy constructor. \h4 \Initializing matrices with other matrices\ h4\ You can initialize any matrix with another matrix (as long as they have the same datatype or size). Any values that don't fit into the new matrix are discarded and any values that aren't filled by the supplied matrix are padded up with values from the respective identity matrix. Example: \code Python \ >>> print(glm.mat4( glm.mat2(9, 8, 7, 6) )) [ 9 ][ 7 ][ 0 ][ 0 ] [ 8 ][ 6 ][ 0 ][ 0 ] [ 0 ][ 0 ][ 1 ][ 0 ] [ 0 ][ 0 ][ 0 ][ 1 ] >>> m44 = glm.mat4(*range(16)) >>> print(m44) [ 0 ][ 4 ][ 8 ][ 12 ] [ 1 ][ 5 ][ 9 ][ 13 ] [ 2 ][ 6 ][ 10 ][ 14 ] [ 3 ][ 7 ][ 11 ][ 15 ] >>> print(glm.mat2(m44)) [ 0 ][ 4 ] [ 1 ][ 5 ] >>> m32 = glm.mat3x2(6, 5, 4, 3, 2, 1) >>> print(m32) [ 6 ][ 4 ][ 2 ] [ 5 ][ 3 ][ 1 ] >>> print(glm.mat2x3(m32)) [ 6 ][ 4 ] [ 5 ][ 3 ] [ 0 ][ 0 ] >>> print(glm.mat3(m32)) [ 6 ][ 4 ][ 2 ] [ 5 ][ 3 ][ 1 ] [ 0 ][ 0 ][ 1 ] >>> print(glm.imat2(glm.dmat2(7.9))) [ 7 ][ 0 ] [ 0 ][ 7 ] \code\ \h4 \Constructing matrices from vectors\ h4\ You can construct a \code \matNxM\ code\ from \i\N\i\ vectors of length \i\M\i\, if they share the same datatype. Example: \code Python \ >>> print(glm.mat2( glm.vec2(1, 2), glm.vec2(3, 4) )) # 2 vectors of length 2 [ 1 ][ 3 ] [ 2 ][ 4 ] >>> print(glm.mat2x4( glm.vec4(1, 2, 3, 4), glm.vec4(5, 6, 7, 8) )) # 2 vectors of length 4 [ 1 ][ 5 ] [ 2 ][ 6 ] [ 3 ][ 7 ] [ 4 ][ 8 ] >>> print(glm.mat4x2( glm.vec2(1, 2), glm.vec2(3, 4), glm.vec2(5, 6), glm.vec2(7, 8) )) # 4 vectors of length 2 [ 1 ][ 3 ][ 5 ][ 7 ] [ 2 ][ 4 ][ 6 ][ 8 ] \ code\ \h3 \Lists (and other iterables)\ h3\ Instead of using matrices, you can use matrix-like lists / tuples in most cases. For example, you can initialize a matrix with a matrix-like tuple: \code Python \ >>> print(glm.mat2( ((1, 2), (3, 4)) )) [ 1 ][ 3 ] [ 2 ][ 4 ] \ code\ Or use it on one handside of a numeric operator: \code Python \ >>> m22 = glm.mat2() >>> print(m22) [ 1 ][ 0 ] [ 0 ][ 1 ] >>> print(m22 + ((4, 3), (2, 1))) [ 5 ][ 2 ] [ 3 ][ 2 ] \ code\ It is also accepted by most functions: \code Python \ >>> print(glm.inverse( ((1,2),(3,4)) )) [ -2 ][ 1.5 ] [ 1 ][ -0.5 ] \ code\ \h3 \Objects that support the buffer protocol (numpy, bytes)\ h3\ A few objects in Python support a functionality called the buffer protocol. One such example would be the Python \code\bytes\code\ type or \code\numpy.array\code\. PyGLM also supports this protocol and thus can be converted to or from any other object that supports it, granted it's in a fitting format. Examples: \code Python \ >>> narr = numpy.array(glm.mat4()) >>> print(narr) [[1. 0. 0. 0.] [0. 1. 0. 0.] [0. 0. 1. 0.] [0. 0. 0. 1.]] >>> print(glm.mat4(narr)) [ 1 ][ 0 ][ 0 ][ 0 ] [ 0 ][ 1 ][ 0 ][ 0 ] [ 0 ][ 0 ][ 1 ][ 0 ] [ 0 ][ 0 ][ 0 ][ 1 ] \ code\ \i\Note: objects that use the buffer protocol may request a reference instead of a copy of the object, meaning that if you change the 'copy', you'll also change the original.\i\ \h2 \Methods\ h2\ Any matrix type implements the following methods: \h3 \Length\ h3\ You can acquire the length of a matrix with the \code \length()\ code\ method. It will give you the same result as the builtin \code \len()\ code\ method. \h3 \The copy protocol\ h3\ Matrices support the copy protocol (see \url https://docs.python.org/3/library/copy.html \here\ url\). You can use \code\copy.copy()\code\ or \code\copy.deepcopy()\code\ to get a copy of a matrix. \h3\Pickling\h3\ Matrices support \url https://docs.python.org/3/library/pickle.html#module-interface \pickling\url\ (as of PyGLM 2.0.0), which is Python's serialization method. \h3 \To list / tuple\ h3\ Any matrix type has a \code\to_list()\code\ and a \code\to_tuple()\code\ function, which returns the matrix' data represented as a list or tuple respectively. Example: \code Python \ >>> print(glm.mat4().to_list()) [[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 0.0, 1.0]] >>> print(glm.mat4().to_tuple()) ((1.0, 0.0, 0.0, 0.0), (0.0, 1.0, 0.0, 0.0), (0.0, 0.0, 1.0, 0.0), (0.0, 0.0, 0.0, 1.0)) \ code\ \h3\To and from bytes\h3\ All matrices have a \code\to_bytes()\code\ and a \code\from_bytes()\code\ method, which allows for conversion of the matrix' data to and from bytes strings. \h2 \Operators\ h2\ Matrix types support a bunch of operators. \h3 \add (\code\+\code\ operator)\ h3\ Matrices support addition with other matrices and numbers. Only matrices of the same shape and type can be used. \code Python \ sum1 = mat2(1, 2, 3, 4) + mat2(1, 0, 1, 0) # returns mat2(2, 2, 4, 4) sum2 = mat2(1, 2, 3, 4) + 4 # returns mat2(5, 6, 7, 8) \code\ Note: Only square matrices allow for left side addition of numbers \h3 \sub (\code\-\code\ operator)\ h3\ Matrices support subtraction with other matrices and numbers. \code Python \ diff1 = mat2(1, 2, 3, 4) - mat2(1, 0, 1, 0) # returns mat2(0, 2, 2, 4) diff2 = mat2(1, 2, 3, 4) - 4 # returns mat2(-3, -2, -1, 0) \code\ Note: Only square matrices allow for left side subtration of numbers \h3 \mul (\code\*\code\ operator)\ h3\ Matrices support multiplication with vectors, other matrices and numbers. Multiplying a matrix with a number multiplies each component with that number. \code Python \ prod = mat2(1, 2, 3, 4) * 4 # returns mat2(4, 8, 12, 16) \code\ Multiplying a matrix with a vector is a bit more complex. If you have a \code \matNxM\ code\ matrix, you can either left-side multiply it with a length \i\M\i\ vector and get a length \i\N\i\ vector in return \code Python \ prod1 = vec3(7, 8, 9) * mat2x3((1, 2, 3), (4, 5, 6)) # returns vec2( # 7 * 1 + 8 * 2 + 9 * 3, # 7 * 4 + 8 * 5 + 9 * 6 # ) # = vec2(50, 122) prodx = vec4(a, b, c, d) * mat3x4((m00, m01, m02, m03), (m10, m11, m12, m13), (m20, m21, m22, m23)) # returns vec3( # a * m00 + b * m01 + c * m02 + d * m03, # a * m10 + b * m11 + c * m12 + d * m13, # a * m20 + b * m21 + c * m22 + d * m23 # ) \ code\ or right-side multiply it with a length \i\N\i\ vector and get a length \i\M\i\ vector in return. \code Python \ prod1 = mat2x3((1, 2, 3), (4, 5, 6)) * vec2(7, 8) # returns vec3( # 7 * 1 + 8 * 4, # 7 * 2 + 8 * 5, # 7 * 3 + 8 * 6 # ) # = vec3(39, 54, 69) prodx = mat3x4((m00, m01, m02, m03), (m10, m11, m12, m13), (m20, m21, m22, m23)) * vec3(a, b, c) # returns vec4( # a * m10 + b * m10 + c * m20, # a * m11 + b * m11 + c * m21, # a * m12 + b * m12 + c * m22, # a * m13 + b * m13 + c * m23 # ) \ code\ For multiplication of square matrices with vectors using homogenous coordinates, PyGLM provides a shorthand: \code Python \ m = rotate(radians(90), vec3(0, 1, 0)) # creates a 4x4 rotation matrix v = vec3(1, 2, 3) # some 3D vector # This is what you would normally have to do to apply the rotation to v: v_rotated = vec3(m * vec4(v, 1)) # returns vec3( 3, 2, -1 ) # This is the shorthand: v_rotated = m * v # returns vec3( 3, 2, -1 ) \ code\ Now for the most complex part. Matrix-matrix multiplication. You can only multiply a \code\matAxB\code\ with a \code\matCxA\code\ matrix and it will return a \code\matCxB\code\ matrix. \code Python \ mat2x3() * mat4x2() # returns a mat4x3 mat3x2() * mat2x4() # error - these matrices are incompatible mat2x4() * mat2x4() # error - these matrices are incompatible mat2x2() * mat2x2() # returns a mat2x2 mat3x3() * mat2x3() # returns a mat2x3 \ code\ The actual computation is a combination of multiplication and addition. Okay, so this may be a bit difficult to grasp at first: Each component of the resulting matrix is the sum of each component of the \i\first\i\ matrix' respective \i\row\i\ multiplied by the components of the \i\second\i\ matrix' respective \i\column\i\. \b\Keep in mind, that glm's columns and rows are in the opposite order\b\, so this gets even more complicated. Lets try to visualize it using an example: \code Python \ >>> m24 = glm.mat2x4(1, 2, 3, 4, 5, 6, 7, 8) >>> print(m24) [ 1 ][ 5 ] [ 2 ][ 6 ] [ 3 ][ 7 ] [ 4 ][ 8 ] >>> m22 = glm.mat2(4, 3, 2, 1) >>> print(m22) [ 4 ][ 2 ] [ 3 ][ 1 ] >>> print(m24 * m22) [ 19 ][ 7 ] [ 26 ][ 10 ] [ 33 ][ 13 ] [ 40 ][ 16 ] result = mat2x4( ( m24[0, 0] * m22[0, 0] + m24[1, 0] * m22[0, 1], m24[0, 1] * m22[0, 0] + m24[1, 1] * m22[0, 1], m24[0, 2] * m22[0, 0] + m24[1, 2] * m22[0, 1], m24[0, 3] * m22[0, 0] + m24[1, 3] * m22[0, 1] ), ( m24[0, 0] * m22[1, 0] + m24[1, 0] * m22[1, 1], m24[0, 1] * m22[1, 0] + m24[1, 1] * m22[1, 1], m24[0, 2] * m22[1, 0] + m24[1, 2] * m22[1, 1], m24[0, 3] * m22[1, 0] + m24[1, 3] * m22[1, 1] ) ) \ code\ \h3 \matmul (\code\@\code\ operator)\ h3\ Has the same effects as the \code\*\code\ operator. \h3 \div (\code\/\code\ operator)\ h3\ Matrices support division with numbers, vectors and other matrices. \code Python \ quot = mat2(1, 2, 3, 4) / 2 # returns mat2(0.5, 1, 1.5, 2) \code\ Only square matrices can support division with other matrices and vectors. If a matrix is divided by a vector or vice versa, the matrix is simply inversed and multiplied with that vector instead. \code Python \ >>> m22 = mat2(1, 2, 3, 4) >>> v2 = vec2(5, 6) >>> m22 / v2 vec2( -1, 2 ) >>> glm.inverse(m22) * v2 vec2( -1, 2 ) \ code\ Division with other matrices follows the same scheme. The right handside matrix is inversed and then multiplied by the other matrix. \code Python \ >>> m22 = mat2(1, 2, 3, 4) >>> m22 / mat2(8, 7, 6, 5) mat2x2(( 8, 9 ), ( -9, -10 )) >>> m22 * glm.inverse(mat2(8, 7, 6, 5)) mat2x2(( 8, 9 ), ( -9, -10 )) \ code\ \h3 \len\ h3\ The length of a matrix (i.e. the column count) can be queried using \code\len()\code\. \code Python \ mat_length = len(mat2x4()) # returns 2 \code\ \h3 \getitem and setitem (\code\[]\code\ operator)\ h3\ You can get the values of a matrix using indices. \code Python \ m = mat2x3(1, 2, 3, 4, 5, 6) print(m[0]) # prints mvec3(1, 2, 3) print(m[1]) # prints mvec3(4, 5, 6) print(m[0, 2]) # prints 3 print(m[1, 0]) # prints 4 \code\ Note: \i\mvec is a special vector type, that references the values of the matrix it came from. I.e. if you change the mvec's values, you will do so with the values of the matrix too.\i\ You can also set the values. \code Python \ >>> m = mat2(1, 2, 3, 4) >>> m[0] = vec2(5, 6) >>> print(m) [ 5 ][ 3 ] [ 6 ][ 4 ] \code\ \h3 \contains (\code\in\code\ operator)\ h3\ You can query wether or not a value is contained by a matrix using the \code\in\code\ operator. \code Python \ >>> m = mat2(1, 2, 3, 4) >>> vec2(1, 2) in m True >>> vec2(2, 3) in m False >>> 3 in m True >>> 0 in m False \code\ \h3 \richcompare (e.g. \code\==\code\ operator)\ h3\ You can compare matrices using the equals and not-equals richcompare operators: \code Python \ mat2(1, 2, 3, 4) == mat2(1, 2, 3, 4) # True mat2(1, 2, 3, 4) == mat2(3, 4, 1, 2) # False mat2(1, 2, 3, 4) == mat3(1, 2, 3, 4, 5, 6, 7, 8, 9) # False mat2(1, 2, 3, 4) != mat2(1, 2, 3, 4) # False mat2(1, 2, 3, 4) != mat2(3, 4, 1, 2) # True mat2(1, 2, 3, 4) != mat3(1, 2, 3, 4, 5, 6, 7, 8, 9) # True \code\ \h3 \iter\ h3\ You can generate an iterable from matrices using \code\iter()\code\. \code Python \ m = mat2(1, 2, 3, 4) it = iter(m) print(next(it)) # prints mvec2(1, 2) print(next(it)) # prints mvec2(3, 4) \code\ \h3\hash\h3\ You can generate a hash value for matrices using \code\hash()\code\ Example: \code Python\ >>> m = mat2() >>> hash(m) -8340327414932306126 >>> m2 = mat2(1, 2, 3, 4) >>> hash(m2) 2533527020982565631 \code\Zuzu-Typ-PyGLM-e113a8a/wiki/Using-quaternions.md000066400000000000000000000250671511156275200215330ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # Using Quaternions 1. [Initialization](#initialization) * [with no arguments](#initialization-with-no-arguments) * [all components with numbers](#initializing-all-components-with-numbers) * [copying a quaternion](#copying-a-quaternion) * [converting a quaternion](#converting-a-quaternion) * [with vectors](#initializing-quaternions-with-vectors) * [scalar and vector](#initialization-with-a-scalar-and-a-vector) * [two vec3s](#constructing-quaternions-from-two-vec3s) * [euler angles](#constructing-quaternions-from-euler-angles) * [conversion from mat3 or mat4](#converting-a-mat3-or-mat4-to-a-quaternion) * [lists \(and other iterables\)](#lists-and-other-iterables) * [buffer protocol \(numpy, bytes\)](#objects-that-support-the-buffer-protocol-numpy-bytes) 2. [Members](#members) 3. [Methods](#methods) * [The copy protocol](#the-copy-protocol) * [Pickling](#pickling) 4. [Operators](#operators) * [add](#add--operator) * [sub](#sub--operator) * [mul](#mul--operator) * [quat \* quat](#quat--quat) * [quat \* scalar](#quat--scalar) * [quat \* vec](#quat--vec) * [matmul](#matmul--operator) * [div](#div--operator) * [len](#len) * [getitem and setitem](#getitem-and-setitem--operator) * [contains](#contains-in-operator) * [richcompare](#richcompare-eg--operator) * [iter](#iter) * [hash](#hash) ## Initialization There are a few different ways of constructing a quaternion\.   #### Initialization with no arguments Initializing a quaternion without any additional arguments will set the scalar part \(``` w ```\) to 1 and the vector parts \(``` x, y, z ```\) to 0 \(of the respective type\)\.   Example: ``` Python quat() # returns quaternion (1 + 0i + 0j + 0k), where i, j and k are imaginary numbers ``` *Note: The component order of quaternions were inconsistent in PyGLM versions prior to 2\.0\.0\.* #### Initializing all components with numbers A quaternion can be initialized with 4 numbers, which will be copied \(or may be converted\) to their components\.   Example: ``` Python quat(1, 2, 3, 4) # returns quaternion (1 + 2i + 3j + 4k) ``` #### Copying a quaternion A copy of a quaternion can be obtained by initializing a quaternion with another instance of a quaternion\.   I\.e\. ``` quat(quat(1, 2, 3, 4)) ``` returns quaternion ``` (1 + 2i + 3j + 4k) ```   This is what's known as the copy constructor\. #### Converting a quaternion To convert a quaternion from one data type to another, the target data type can simply be initialized with the source\. ``` Python >>> quat(dquat(1, 2, 3, 4)) quat( 1, 2, 3, 4 ) ``` *Note: This feature may not be available in PyGLM versions prior to 2\.0\.0* #### Initializing quaternions with vectors ##### Initialization with a scalar and a vector You can initialize the scalar part \(``` w ```\) of the quaternion with a number and the vector part \(``` x, y, z ```\) with a ``` vec3 ``` \(or ``` dvec3 ``` respectively\)\. Example: ``` Python quat(1, vec3(2, 3, 4)) # returns quaternion (1 + 2i + 3j + 4k) ``` ##### Constructing quaternions from two vec3s You can construct a quaternion from two length 3 vectors, which will return a rotation quaternion, that equals the rotation around an orthagonal axis between first direction to the other\. Example: ``` Python >>> a = vec3(1, -2, 3) >>> b = vec3(-4, 5, -6) >>> q = quat(a, b) # rotation from b to a >>> b_rot = b * q >>> print(normalize(a)) vec3( 0.267261, -0.534522, 0.801784 ) >>> print(normalize(b_rot)) vec3( 0.267261, -0.534523, 0.801784 ) # there may be a few rounding differences ``` ##### Constructing quaternions from euler angles You can create a quaternion from a single ``` vec3 ```, containing 3 angles known as euler angles\. They have the following structure: ``` vec3(pitch, yaw, roll) ```, where each angle is a radian value\. * Pitch is the rotation arount the X\-axis * Yaw is the rotation arount the Y\-axis * Roll is the rotation arount the Z\-axis Example: ``` Python >>> euler_angles = radians(vec3(10, 20, 30)) >>> q = quat(euler_angles) >>> degrees(pitch(q)) 9.999998855319275 >>> degrees(yaw(q)) 20.000001125733135 >>> degrees(roll(q)) 30.000000834826057 ``` #### Converting a mat3 or mat4 to a quaternion You can initialize a quaternion with a mat3x3 \(or mat4x4, which will be converted to a mat3x3\), to get a quaternion with the same rotational effect\. ### Lists \(and other iterables\) Instead of using quaternions, vectors or matrices to initialize vectors, you can also use lists and other iterables\.   In most cases, ``` (1, 2, 3) ``` will be interpreted as a ``` vec3(1, 2, 3) ``` of a fitting type\. ``` (1, 2, 3, 4) ``` may be interpreted as a ``` vec4(1, 2, 3, 4) ``` or a ``` quat(1, 2, 3, 4) ```, depending on the circumstances \- though usually the vector representation is preferred\. ``` ((1, 2), (3, 4)) ``` will be interpreted as a ``` mat2(1, 2, 3, 4) ```\. *Note: This feature may not be supported on PyGLM versions prior to 2\.0\.0, so please handle with care\.* ### Objects that support the buffer protocol \(numpy, bytes\) A few objects in Python support a functionality called the buffer protocol\.   One such example would be the Python ``` bytes ``` type or ``` numpy.array ```\.   PyGLM also supports this protocol and thus can be converted to or from any other object that supports it, granted it's in a fitting format\.   E\.g\. ``` numpy.array(glm.quat(1, 2, 3, 4)) ``` returns ``` array([1., 2., 3., 4.], dtype=float32) ```   and ``` glm.quat(numpy.array([1., 2., 3., 4.], dtype="float32")) ``` returns ``` quat(1, 2, 3, 4) ```\. *Note: objects that use the buffer protocol may request a reference instead of a copy of the object, meaning that if you change the 'copy', you'll also change the original\.*   ## Members A quaternion has a member for each of it's components\.   Member|Description -|- w|The scalar part x|The first vector part y|The second vector part z|The last vector part Quaternions do not support swizzling\. ## Methods Any quaternion type implements the following methods: Method|Description -|- to\_list|Returns a list containing each component of the quaternion to\_tuple|Returns a tuple containing each component of the quaternion to\_bytes|Returns the data of the quaternion as a bytes string from\_bytes|\(static\) Creates a quaternion from a bytes string ### The copy protocol Quaternions support the copy protocol \(see [here](https://docs.python.org/3/library/copy.html)\)\.   You can use ``` copy.copy() ``` or ``` copy.deepcopy() ``` to get a copy of a quaternion\. ### Pickling Quaternions support [pickling](https://docs.python.org/3/library/pickle.html#module-interface) \(as of PyGLM 2\.0\.0\), which is Python's serialization method\. ## Operators Quaternions support a bunch of operators\. ### add \(``` + ``` operator\) Quaternions support component\-wise addition with other quaternions\.   ``` Python sum = quat(1, 2, 3, 4) + quat(5, 6, 7, 8) # returns quat(6, 8, 10, 12) ``` ### sub \(``` - ``` operator\) Quaternions support component\-wise subtraction with other quaternions\.   ``` Python diff = quat(1, 2, 3, 4) + quat(5, 6, 7, 8) # returns quat(-4, -4, -4, -4) ``` ### mul \(``` * ``` operator\) Quaternions support multiplication with other quaternions, vectors and scalars\.   ##### quat \* quat Multiplying two quaternions will return their cross product\. The cross product of ``` quat(s1, v1) ``` and ``` quat(s2, v2) ``` \(with v1 and v2 being length 3 vectors\) is defined as: ``` Python quat( s1 * s2 - dot(v1, v2), s1 * v2 + s2 * v1 + cross(v1, v2) ) ``` Example: ``` Python >>> quat(1, 2, 3, 4) * quat(5, 6, 7, 8) quat( -60, 12, 30, 24 ) >>> cross(quat(1, 2, 3, 4), quat(5, 6, 7, 8)) quat( -60, 12, 30, 24 ) ``` ##### quat \* scalar Multiplying a quaternion with a scalar will scale each component by the given number\. ``` Python >>> quat(1, 2, 3, 4) * 2 quat( 2, 4, 6, 8 ) ``` ##### quat \* vec Multiplying a quaternion by a vector \(vec3 or vec4\) will return a rotated vector\. If the vector is on the left side of the equasion, the result will be a vector rotated by the inverse of the quaternion\. ``` Python >>> q = quat(radians(vec3(0,90,0))) # yaw = 90° >>> v = vec3(1,0,0) >>> q * v vec3( 5.96046e-08, 0, -1 ) >>> v * q vec3( -1.19209e-07, 0, 1 ) ``` ### matmul \(``` @ ``` operator\) Has the same effects as the ``` * ``` operator, but with the arguments switched\. I\.e\. ``` a * b == b @ a ``` ### div \(``` / ``` operator\) Quaternions support component wise, right handside division with scalars \(numbers\)\.   ``` Python quot1 = quat(1, 2, 3, 4) / 2 # returns quat(0.5, 1, 1.5, 2) ``` ### len The length of a quaternion \(always 4\) can be queried using ``` len() ```\. ``` Python quat_length = len(quat()) # returns 4 ``` ### getitem and setitem \(``` [] ``` operator\) You can get the values of a quaternion using indices\. ``` Python q = quat(1, 2, 3, 4) print(q[0]) # prints 1.0 print(q[1]) # prints 2.0 print(q[2]) # prints 3.0 print(q[3]) # prints 4.0 ``` Likewise you can set the values\. ``` Python q = quat(1, 2, 3, 4) q[0] = 9 print(q.w) # prints 9.0 ``` ### contains \(``` in ``` operator\) You can query wether or not a value is contained by a quaternion using the ``` in ``` operator\. ``` Python q = quat(1, 2, 3, 4) true = 2 in q false = 2.01 in q ``` ### richcompare \(e\.g\. ``` == ``` operator\) You can compare quaternions using the equality richcompare operators: ``` Python quat(1, 0, 0, 0) == quat() # True quat(1, 2, 3, 4) == dquat(1, 2, 3, 4) # False quat(1, 2, 3, 4) == vec4(1, 2, 3, 4) # False vec2(1, 2) != vec2(1, 2) # False vec2(1, 2) != vec2(2, 2) # True vec2(1, 2) != vec3(1, 2, 3) # True ``` ### iter You can generate an iterable from quaternions using ``` iter() ```\. ``` Python q = quat(1, 2, 3, 4) it = iter(q) print(next(it)) # prints 1.0 print(next(it)) # prints 2.0 print(next(it)) # prints 3.0 print(next(it)) # prints 4.0 ``` ### hash You can generate a hash value for quaternions using ``` hash() ``` Example: ``` Python >>> q = quat() >>> hash(q) 4797573974374731128 >>> q2 = quat(1, 2, 3, 4) >>> hash(q2) 8060046874292968317 ```Zuzu-Typ-PyGLM-e113a8a/wiki/Using-quaternions.sb000066400000000000000000000252401511156275200215300ustar00rootroot00000000000000\h1\Using Quaternions\h1\ \lo \ \-\ \url #initialization \Initialization\ url\\list switch\ \--\ \url #initialization-with-no-arguments \with no arguments\ url\ \--\ \url #initializing-all-components-with-numbers \all components with numbers\ url\ \--\ \url #copying-a-quaternion \copying a quaternion\ url\ \--\ \url #converting-a-quaternion \converting a quaternion\ url\ \--\ \url #initializing-quaternions-with-vectors \with vectors\ url\ \---\ \url #initialization-with-a-scalar-and-a-vector \scalar and vector\ url\ \---\ \url #constructing-quaternions-from-two-vec3s \two vec3s\ url\ \---\ \url #constructing-quaternions-from-euler-angles \euler angles\ url\ \--\ \url #converting-a-mat3-or-mat4-to-a-quaternion \conversion from mat3 or mat4\ url\ \--\ \url #lists-and-other-iterables \lists (and other iterables)\ url\ \--\ \url #objects-that-support-the-buffer-protocol-numpy-bytes \buffer protocol (numpy, bytes)\ url\\list switch\ \-\ \url #members \Members\ url\ \-\ \url #methods \Methods\ url\\list switch\ \--\ \url #the-copy-protocol \The copy protocol\ url\ \--\ \url #pickling \Pickling\ url\\list switch\ \-\ \url #operators \Operators\ url\\list switch\ \--\ \url #add--operator \add\ url\ \--\ \url #sub--operator \sub\ url\ \--\ \url #mul--operator \mul\ url\ \---\ \url #quat--quat \quat * quat\ url\ \---\ \url #quat--scalar \quat * scalar\ url\ \---\ \url #quat--vec \quat * vec\ url\ \--\ \url #matmul--operator \matmul\ url\ \--\ \url #div--operator \div\ url\ \--\ \url #len \len\ url\ \--\ \url #getitem-and-setitem--operator \getitem and setitem\ url\ \--\ \url #contains-in-operator \contains\ url\ \--\ \url #richcompare-eg--operator \richcompare\ url\ \--\ \url #iter \iter\ url\ \--\ \url #hash\hash\url\ \ list\ \h2\Initialization\h2\ There are a few different ways of constructing a quaternion. \h4\Initialization with no arguments\h4\ Initializing a quaternion without any additional arguments will set the scalar part (\code\w\code\) to 1 and the vector parts (\code\x, y, z\code\) to 0 (of the respective type). Example: \code Python \ quat() # returns quaternion (1 + 0i + 0j + 0k), where i, j and k are imaginary numbers \code\ \i\Note: The component order of quaternions were inconsistent in PyGLM versions prior to 2.0.0.\i\ \h4\Initializing all components with numbers\h4\ A quaternion can be initialized with 4 numbers, which will be copied (or may be converted) to their components. Example: \code Python \ quat(1, 2, 3, 4) # returns quaternion (1 + 2i + 3j + 4k) \code\ \h4\Copying a quaternion\h4\ A copy of a quaternion can be obtained by initializing a quaternion with another instance of a quaternion. I.e. \code\quat(quat(1, 2, 3, 4))\code\ returns quaternion \code\(1 + 2i + 3j + 4k)\code\ This is what's known as the copy constructor. \h4\Converting a quaternion\h4\ To convert a quaternion from one data type to another, the target data type can simply be initialized with the source. \code Python \ >>> quat(dquat(1, 2, 3, 4)) quat( 1, 2, 3, 4 ) \ code\ \i\Note: This feature may not be available in PyGLM versions prior to 2.0.0\i\ \h4\Initializing quaternions with vectors\h4\ \h5\Initialization with a scalar and a vector\h5\ You can initialize the scalar part (\code\w\code\) of the quaternion with a number and the vector part (\code\x, y, z\code\) with a \code\vec3\code\ (or \code\dvec3\code\ respectively). Example: \code Python \ quat(1, vec3(2, 3, 4)) # returns quaternion (1 + 2i + 3j + 4k) \ code\ \h5\Constructing quaternions from two vec3s\h5\ You can construct a quaternion from two length 3 vectors, which will return a rotation quaternion, that equals the rotation around an orthagonal axis between first direction to the other. Example: \code Python \ >>> a = vec3(1, -2, 3) >>> b = vec3(-4, 5, -6) >>> q = quat(a, b) # rotation from b to a >>> b_rot = b * q >>> print(normalize(a)) vec3( 0.267261, -0.534522, 0.801784 ) >>> print(normalize(b_rot)) vec3( 0.267261, -0.534523, 0.801784 ) # there may be a few rounding differences \ code\ \h5\Constructing quaternions from euler angles\h5\ You can create a quaternion from a single \code\vec3\code\, containing 3 angles known as euler angles. They have the following structure: \code\vec3(pitch, yaw, roll)\code\, where each angle is a radian value. \ul\ \-\Pitch is the rotation arount the X-axis \-\Yaw is the rotation arount the Y-axis \-\Roll is the rotation arount the Z-axis \ul\ Example: \code Python \ >>> euler_angles = radians(vec3(10, 20, 30)) >>> q = quat(euler_angles) >>> degrees(pitch(q)) 9.999998855319275 >>> degrees(yaw(q)) 20.000001125733135 >>> degrees(roll(q)) 30.000000834826057 \ code\ \h4\Converting a mat3 or mat4 to a quaternion\h4\ You can initialize a quaternion with a mat3x3 (or mat4x4, which will be converted to a mat3x3), to get a quaternion with the same rotational effect. \h3\Lists (and other iterables)\h3\ Instead of using quaternions, vectors or matrices to initialize vectors, you can also use lists and other iterables. In most cases, \code\(1, 2, 3)\code\ will be interpreted as a \code\vec3(1, 2, 3)\code\ of a fitting type. \code\(1, 2, 3, 4)\code\ may be interpreted as a \code\vec4(1, 2, 3, 4)\code\ or a \code\quat(1, 2, 3, 4)\code\, depending on the circumstances - though usually the vector representation is preferred. \code\((1, 2), (3, 4))\code\ will be interpreted as a \code\mat2(1, 2, 3, 4)\code\. \i\Note: This feature may not be supported on PyGLM versions prior to 2.0.0, so please handle with care.\i\ \h3\Objects that support the buffer protocol (numpy, bytes)\h3\ A few objects in Python support a functionality called the buffer protocol. One such example would be the Python \code\bytes\code\ type or \code\numpy.array\code\. PyGLM also supports this protocol and thus can be converted to or from any other object that supports it, granted it's in a fitting format. E.g. \code\numpy.array(glm.quat(1, 2, 3, 4))\code\ returns \code\array([1., 2., 3., 4.], dtype=float32)\code\ and \code\glm.quat(numpy.array([1., 2., 3., 4.], dtype="float32"))\code\ returns \code\quat(1, 2, 3, 4)\code\. \i\Note: objects that use the buffer protocol may request a reference instead of a copy of the object, meaning that if you change the 'copy', you'll also change the original.\i\ \h2\Members\h2\ A quaternion has a member for each of it's components. \tbl\ Member\-\Description w\-\The scalar part x\-\The first vector part y\-\The second vector part z\-\The last vector part \tbl\ Quaternions do not support swizzling. \h2\Methods\h2\ Any quaternion type implements the following methods: \tbl\ Method\-\Description to_list\-\Returns a list containing each component of the quaternion to_tuple\-\Returns a tuple containing each component of the quaternion to_bytes\-\Returns the data of the quaternion as a bytes string from_bytes\-\(static) Creates a quaternion from a bytes string \tbl\ \h3\The copy protocol\h3\ Quaternions support the copy protocol (see \url https://docs.python.org/3/library/copy.html \here\ url\). You can use \code\copy.copy()\code\ or \code\copy.deepcopy()\code\ to get a copy of a quaternion. \h3\Pickling\h3\ Quaternions support \url https://docs.python.org/3/library/pickle.html#module-interface \pickling\url\ (as of PyGLM 2.0.0), which is Python's serialization method. \h2\Operators\h2\ Quaternions support a bunch of operators. \h3\add (\code\+\code\ operator)\h3\ Quaternions support component-wise addition with other quaternions. \code Python \ sum = quat(1, 2, 3, 4) + quat(5, 6, 7, 8) # returns quat(6, 8, 10, 12) \ code\ \h3\sub (\code\-\code\ operator)\h3\ Quaternions support component-wise subtraction with other quaternions. \code Python \ diff = quat(1, 2, 3, 4) + quat(5, 6, 7, 8) # returns quat(-4, -4, -4, -4) \ code\ \h3\mul (\code\*\code\ operator)\h3\ Quaternions support multiplication with other quaternions, vectors and scalars. \h5\quat * quat\h5\ Multiplying two quaternions will return their cross product. The cross product of \code\quat(s1, v1)\code\ and \code\quat(s2, v2)\code\ (with v1 and v2 being length 3 vectors) is defined as: \code Python\ quat( s1 * s2 - dot(v1, v2), s1 * v2 + s2 * v1 + cross(v1, v2) ) \code\ Example: \code Python \ >>> quat(1, 2, 3, 4) * quat(5, 6, 7, 8) quat( -60, 12, 30, 24 ) >>> cross(quat(1, 2, 3, 4), quat(5, 6, 7, 8)) quat( -60, 12, 30, 24 ) \ code\ \h5\quat * scalar\h5\ Multiplying a quaternion with a scalar will scale each component by the given number. \code Python\ >>> quat(1, 2, 3, 4) * 2 quat( 2, 4, 6, 8 ) \code\ \h5\quat * vec\h5\ Multiplying a quaternion by a vector (vec3 or vec4) will return a rotated vector. If the vector is on the left side of the equasion, the result will be a vector rotated by the inverse of the quaternion. \code Python\ >>> q = quat(radians(vec3(0,90,0))) # yaw = 90° >>> v = vec3(1,0,0) >>> q * v vec3( 5.96046e-08, 0, -1 ) >>> v * q vec3( -1.19209e-07, 0, 1 ) \code\ \h3 \matmul (\code\@\code\ operator)\ h3\ Has the same effects as the \code\*\code\ operator, but with the arguments switched. I.e. \code\a * b == b @ a\code\ \h3\div (\code\/\code\ operator)\h3\ Quaternions support component wise, right handside division with scalars (numbers). \code Python \ quot1 = quat(1, 2, 3, 4) / 2 # returns quat(0.5, 1, 1.5, 2) \ code\ \h3\len\h3\ The length of a quaternion (always 4) can be queried using \code\len()\code\. \code Python \ quat_length = len(quat()) # returns 4 \ code\ \h3\getitem and setitem (\code\[]\code\ operator)\h3\ You can get the values of a quaternion using indices. \code Python \ q = quat(1, 2, 3, 4) print(q[0]) # prints 1.0 print(q[1]) # prints 2.0 print(q[2]) # prints 3.0 print(q[3]) # prints 4.0 \ code\ Likewise you can set the values. \code Python \ q = quat(1, 2, 3, 4) q[0] = 9 print(q.w) # prints 9.0 \ code\ \h3\contains (\code\in\code\ operator)\h3\ You can query wether or not a value is contained by a quaternion using the \code\in\code\ operator. \code Python \ q = quat(1, 2, 3, 4) true = 2 in q false = 2.01 in q \ code\ \h3\richcompare (e.g. \code\==\code\ operator)\h3\ You can compare quaternions using the equality richcompare operators: \code Python \ quat(1, 0, 0, 0) == quat() # True quat(1, 2, 3, 4) == dquat(1, 2, 3, 4) # False quat(1, 2, 3, 4) == vec4(1, 2, 3, 4) # False vec2(1, 2) != vec2(1, 2) # False vec2(1, 2) != vec2(2, 2) # True vec2(1, 2) != vec3(1, 2, 3) # True \ code\ \h3\iter\h3\ You can generate an iterable from quaternions using \code\iter()\code\. \code Python \ q = quat(1, 2, 3, 4) it = iter(q) print(next(it)) # prints 1.0 print(next(it)) # prints 2.0 print(next(it)) # prints 3.0 print(next(it)) # prints 4.0 \ code\ \h3\hash\h3\ You can generate a hash value for quaternions using \code\hash()\code\ Example: \code Python\ >>> q = quat() >>> hash(q) 4797573974374731128 >>> q2 = quat(1, 2, 3, 4) >>> hash(q2) 8060046874292968317 \code\Zuzu-Typ-PyGLM-e113a8a/wiki/Using-vectors.md000066400000000000000000000272371511156275200206510ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # Using Vectors 1. [Initialization](#Initialization) * [with no arguments](#initialization-with-no-arguments) * [with single number](#Initialization-with-a-single-number) * [all components with numbers](#Initializing-all-components-with-numbers) * [copying a vector](#Copying-a-vector) * [with larger vectors](#Initializing-vectors-with-larger-vectors) * [with vectors and numbers](#Constructing-vectors-from-other-vectors-and-numbers) * [Lists \(and other iterables\)](#lists-and-other-iterables) * [Buffer protocol \(numpy, bytes\)](#objects-that-support-the-buffer-protocol-numpy-bytes) 2. [Members](#Members) 3. [Methods](#Methods) * [The copy protocol](#the-copy-protocol) * [Pickling](#pickling) * [To list / tuple](#to-list--tuple) * [To and from bytes](#to-and-from-bytes) 4. [Operators](#Operators) * [add](#add--operator) * [sub](#sub--operator) * [mul](#mul--operator) * [matmul](#matmul--operator) * [div](#div--operator) * [mod](#mod--operator) * [floordiv](#floordiv--operator) * [divmod](#divmod) * [lshift](#lshift--operator) * [rshift](#rshift--operator) * [and](#and--operator) * [or](#or--operator) * [xor](#xor--operator) * [pow](#pow--operator) * [len](#len) * [getitem and setitem](#getitem-and-setitem--operator) * [contains](#contains-in-operator) * [richcompare](#richcompare-eg--operator) * [iter](#iter) * [hash](#hash) ## Initialization There are dozens of ways of constructing a vector\.   For simplicity, if the same initialization process applies to all vector types, it will only be shown for ``` glm.vec2 ```\. #### Initialization with no arguments Initializing a vector without any additional arguments will set all of it's components to zero \(of the respective type\)\.   i\.e\. ``` glm.vec2() ``` returns vector ``` (0.0, 0.0) ```\.   A boolean vector would also be initialized with zero \(or ``` False ``` if you will\)\. #### Initialization with a single number Initializing a vector with a number will set all of it's components to the given number \(which may be converted if necessary\)\.   i\.e\. ``` glm.vec2(2.43) ``` returns vector ``` (2.43, 2.43) ```\.   #### Initializing all components with numbers A vector ``` vecN ``` can be initialized with *N* numbers, which will be copied \(or may be converted\) to their components\.   i\.e\. ``` glm.vec2(1, 2) ``` returns vector ``` (1.0, 2.0) ```   ``` glm.vec3(4, 5, 6) ``` returns vector ``` (4.0, 5.0, 6.0) ```   ``` glm.ivec4(9, 8, 7, 6) ``` returns vector ``` (9, 8, 7, 6) ``` #### Copying a vector A copy of a vector can be obtained by initializing a vector with an instance of a vector\.   i\.e\. ``` glm.vec2(glm.vec2(3, 2)) ``` returns vector ``` (3.0, 2.0) ```   This is what's known as the copy constructor\. #### Initializing vectors with larger vectors You can initialize any vector with a larger vector \(which will discard any values that don't fit into the new vector\)\.   i\.e\. ``` glm.vec1(glm.vec3(1, 2, 3)) ``` returns vector ``` (1.0) ```   likewise ``` glm.vec2(glm.vec4(5, 6, 7, 8)) ``` returns vector ``` (5.0, 6.0) ``` #### Constructing vectors from other vectors and numbers As long as you don't use any ``` vec1 ```s in your equation, you can construct any vector from a combination of vectors and / or numbers if their sum equals the length of the target vector\.   i\.e\. ``` glm.vec4(glm.vec2(1, 2), 3, 4) ``` returns vector ``` (1.0, 2.0, 3.0, 4.0) ```   likewise ``` glm.vec3(5, glm.vec2(4, 3)) ``` returns vector ``` (5.0, 4.0, 3.0) ```   but ``` glm.vec2(glm.vec1(1), 2) ``` doesn't work\.   ``` glm.vec3(glm.vec2(1, 2), glm.vec2(3, 4)) ``` also doesn't work\. ### Lists \(and other iterables\) Instead of using vectors to initialize vectors, you can also use lists and other iterables\.   e\.g\. ``` glm.vec2([1, 2]) ``` returns vector ``` (1.0, 2.0) ```   or ``` glm.vec3((3, 4), 5) ``` returns vector ``` (3.0, 4.0, 5.0) ```   ### Objects that support the buffer protocol \(numpy, bytes\) A few objects in Python support a functionality called the buffer protocol\.   One such example would be the Python ``` bytes ``` type or ``` numpy.array ```\.   PyGLM also supports this protocol and thus can be converted to or from any other object that supports it, granted it's in a fitting format\.   e\.g\. ``` bytes(glm.u8vec2(1,2)) ``` returns ``` b'\x01\x02' ```   and ``` glm.u8vec2(b'\x01\x02') ``` returns an 8\-bit unsigned integer vector ``` (1, 2) ``` or ``` glm.vec3(numpy.array([4,5,6])) ``` returns vector ``` (4.0, 5.0, 6.0) ```   and ``` numpy.array(glm.vec3(4, 5, 6)) ``` returns ``` array([4., 5., 6.], dtype=float32) ```   *Note: objects that use the buffer protocol *may* request a reference instead of a copy of the object, meaning that if you change the 'copy', you'll also change the original\.* ## Members A vector has a member for each of it's values\.   ``` vec1 ``` has members: ``` (x) ```   ``` vec2 ``` has members: ``` (x, y) ```   ``` vec3 ``` has members: ``` (x, y, z) ```   ``` vec4 ``` has members: ``` (x, y, z, w) ```   Using swizzling, you can also construct vectors from up to four members: ``` Python v = vec4(1, 2, 3, 4) v2 = v.xy # returns vec2(1, 2) v3 = v.zw # returns vec2(3, 4) v4 = v.xxxw # returns vec4(1, 1, 1, 4) ``` ## Methods Any vector type implements the following methods: ### The copy protocol Vectors support the copy protocol \(see [here](https://docs.python.org/3/library/copy.html)\)\.   You can use ``` copy.copy() ``` or ``` copy.deepcopy() ``` to get a copy of a vector\. ### Pickling Vectors support [pickling](https://docs.python.org/3/library/pickle.html#module-interface) \(as of PyGLM 2\.0\.0\), which is Python's serialization method\. ### To list / tuple Any vector type has a ``` to_list() ``` and a ``` to_tuple() ``` function, which return's the vector's data represented as a list or tuple respectively\. ### To and from bytes All vectors have a ``` to_bytes() ``` and a ``` from_bytes() ``` method, which allows for conversion of the vector's data to and from bytes strings\. ## Operators Vector types support a *lot* of operators\. ### add \(``` + ``` operator\) Vectors support addition with other vectors and numbers\.   ``` Python sum1 = vec2(1, 2) + vec2(4, 0) # returns vec2(5, 2) sum2 = vec2(1, 2) + 4 # returns vec2(5, 6) ``` ### sub \(``` - ``` operator\) Vectors support subtraction with other vectors and numbers\.   ``` Python diff1 = vec2(1, 2) - vec2(4, 0) # returns vec2(-3, 2) diff2 = vec2(1, 2) - 4 # returns vec2(-3, -2) ``` ### mul \(``` * ``` operator\) Vectors support multiplication with other vectors and numbers\.   ``` Python prod1 = vec2(1, 2) * vec2(4, 0) # returns vec2(4, 0) prod2 = vec2(1, 2) * 4 # returns vec2(4, 8) ``` ### matmul \(``` @ ``` operator\) Has the same effects as the ``` * ``` operator, but with the arguments switched\. I\.e\. ``` a * b == b @ a ``` ### div \(``` / ``` operator\) Vectors support division with other vectors and numbers\.   ``` Python quot1 = vec2(1, 2) / vec2(4, 0.5) # returns vec2(0.25, 4 ) quot2 = vec2(1, 2) / 4 # returns vec2(0.25, 0.5) ``` ### mod \(``` % ``` operator\) Vectors support modulo operations with other vectors and numbers\.   ``` Python mod1 = vec2(1, 2) % vec2(4, 2) # returns vec2(1, 0) mod2 = vec2(1, 2) % 4 # returns vec2(1, 2) ``` ### floordiv \(``` // ``` operator\) Vectors support floored division with other vectors and numbers\.   ``` Python fquot1 = vec2(1, 2) // vec2(4, 0.5) # returns vec2(0, 4) fquot2 = vec2(1, 2) // 4 # returns vec2(0, 0) ``` ### divmod Vectors support combined floor division and modulo operations with other vectors and numbers\.   ``` Python divmod1 = divmod(vec2(1, 2), vec2(4, 2)) # returns (vec2(0, 1), vec2(1, 0)) divmod2 = divmod(vec2(1, 2), 4) # returns (vec2(0, 0), vec2(1, 2)) ``` ### lshift \(``` << ``` operator\) Integer vectors support the bitwise left shift operator\.   ``` Python >>> ivec3(1, 2, 3) << 4 ivec3( 16, 32, 48 ) >>> uvec3(1, 2, 3) << uvec3(1, 2, 3) uvec3( 2, 8, 24 ) ``` ### rshift \(``` >> ``` operator\) Integer vectors support the bitwise right shift operator\.   ``` Python >>> ivec3(16, 32, 48) >> 4 ivec3( 1, 2, 3 ) >>> uvec3(2, 8, 24) >> uvec3(1, 2, 3) uvec3( 1, 2, 3 ) ``` ### and \(``` & ``` operator\) Integer vectors support the bitwise and operator\.   ``` Python >>> ivec3(1, 2, 3) & 2 ivec3( 0, 2, 2 ) >>> uvec3(1, 2, 3) & uvec3(3, 2, 1) uvec3( 1, 2, 1 ) ``` ### or \(``` | ``` operator\) Integer vectors support the bitwise or operator\.   ``` Python >>> ivec3(1, 2, 3) | 2 ivec3( 3, 2, 3 ) >>> uvec3(1, 2, 3) | uvec3(6, 5, 4) uvec3( 7, 7, 7 ) ``` ### xor \(``` ^ ``` operator\) Integer vectors support the bitwise xor operator\.   ``` Python >>> ivec3(1, 2, 3) ^ 2 ivec3( 3, 0, 1 ) >>> uvec3(1, 2, 3) ^ uvec3(3, 2, 1) uvec3( 2, 0, 2 ) ``` ### pow \(``` ** ``` operator\) Vectors support pow operations with other vectors and numbers\.   ``` Python pow1 = vec2(1, 2) ** vec2(4, 2) # returns vec2(1, 4) pow2 = vec2(1, 2) ** 4 # returns vec2(1, 16) ``` ### len The length of a vector can be queried using ``` len() ```\. ``` Python vec_length = len(vec2()) # returns 2 ``` ### getitem and setitem \(``` [] ``` operator\) You can get the values of a vector using indices\. ``` Python v = vec2(1, 2) print(v[0]) # prints 1.0 print(v[1]) # prints 2.0 ``` Likewise you can set the values\. ``` Python v = vec2(1, 2) v[0] = 9 print(v.x) # prints 9.0 ``` ### contains \(``` in ``` operator\) You can query wether or not a value is contained by a vector using the ``` in ``` operator\. ``` Python v = vec2(1, 2) true = 2 in v false = 2.01 in v ``` ### richcompare \(e\.g\. ``` == ``` operator\) You can compare vectors using the richcompare operators: ``` Python vec2(1, 2) == vec2(1, 2) # True vec2(1, 2) == vec2(2, 2) # False vec2(1, 2) == vec3(1, 2, 3) # False vec2(1, 2) != vec2(1, 2) # False vec2(1, 2) != vec2(2, 2) # True vec2(1, 2) != vec3(1, 2, 3) # True vec2(1, 2) < vec2(5, 5) # vec2(1, 1) vec2(1, 2) < vec2(2, 2) # vec2(1, 0) vec2(1, 2) < vec2(0, 0) # vec2(0, 0) vec2(1, 2) <= vec2(5, 5) # vec2(1, 1) vec2(1, 2) <= vec2(2, 2) # vec2(1, 1) vec2(1, 2) <= vec2(0, 0) # vec2(0, 0) vec2(1, 2) > vec2(5, 5) # vec2(0, 0) vec2(1, 2) > vec2(2, 2) # vec2(0, 0) vec2(1, 2) > vec2(0, 0) # vec2(1, 1) vec2(1, 2) >= vec2(5, 5) # vec2(0, 0) vec2(1, 2) >= vec2(2, 2) # vec2(0, 1) vec2(1, 2) >= vec2(0, 0) # vec2(1, 1) ``` ### iter You can generate an iterable from vectors using ``` iter() ```\. ``` Python v = vec2(1, 2) it = iter(v) print(next(it)) # prints 1.0 print(next(it)) # prints 2.0 ``` ### hash You can generate a hash value for vectors using ``` hash() ``` Example: ``` Python >>> v = vec2() >>> hash(v) -1952026010959490761 >>> v2 = vec2(1, 2) >>> hash(v2) 8639716006723752019 >>> v3 = v2 * 0 >>> hash(v3) -1952026010959490761 ```Zuzu-Typ-PyGLM-e113a8a/wiki/Using-vectors.sb000066400000000000000000000272531511156275200206530ustar00rootroot00000000000000\h1\Using Vectors\h1\ \lo \ \-\ \url #Initialization \Initialization\ url\\list switch\ \--\ \url #initialization-with-no-arguments \with no arguments\ url\ \--\ \url #Initialization-with-a-single-number \with single number\ url\ \--\ \url #Initializing-all-components-with-numbers \all components with numbers\ url\ \--\ \url #Copying-a-vector \copying a vector\ url\ \--\ \url #Initializing-vectors-with-larger-vectors \with larger vectors\ url\ \--\ \url #Constructing-vectors-from-other-vectors-and-numbers \with vectors and numbers\ url\ \--\ \url #lists-and-other-iterables \Lists (and other iterables)\ url\ \--\ \url #objects-that-support-the-buffer-protocol-numpy-bytes \Buffer protocol (numpy, bytes)\ url\\list switch\ \-\ \url #Members \Members\ url\ \-\ \url #Methods \Methods\ url\\list switch\ \--\ \url #the-copy-protocol \The copy protocol\ url\ \--\ \url #pickling \Pickling\ url\ \--\ \url #to-list--tuple \To list / tuple\ url\ \--\ \url #to-and-from-bytes \To and from bytes\ url\\list switch\ \-\ \url #Operators \Operators\ url\\list switch\ \--\ \url #add--operator \add\ url\ \--\ \url #sub--operator \sub\ url\ \--\ \url #mul--operator \mul\ url\ \--\ \url #matmul--operator \matmul\ url\ \--\ \url #div--operator \div\ url\ \--\ \url #mod--operator \mod\ url\ \--\ \url #floordiv--operator \floordiv\ url\ \--\ \url #divmod \divmod\ url\ \--\ \url #lshift--operator \lshift\ url\ \--\ \url #rshift--operator \rshift\ url\ \--\ \url #and--operator \and\ url\ \--\ \url #or--operator \or\ url\ \--\ \url #xor--operator \xor\ url\ \--\ \url #pow--operator \pow\ url\ \--\ \url #len \len\ url\ \--\ \url #getitem-and-setitem--operator \getitem and setitem\ url\ \--\ \url #contains-in-operator \contains\ url\ \--\ \url #richcompare-eg--operator \richcompare\ url\ \--\ \url #iter \iter\ url\ \--\ \url #hash\hash\url\ \ list\ \h2\Initialization\h2\ There are dozens of ways of constructing a vector. For simplicity, if the same initialization process applies to all vector types, it will only be shown for \code\glm.vec2\code\. \h4\Initialization with no arguments\h4\ Initializing a vector without any additional arguments will set all of it's components to zero (of the respective type). i.e. \code\glm.vec2()\code\ returns vector \code\(0.0, 0.0)\code\. A boolean vector would also be initialized with zero (or \code\False\code\ if you will). \h4\Initialization with a single number\h4\ Initializing a vector with a number will set all of it's components to the given number (which may be converted if necessary). i.e. \code\glm.vec2(2.43)\code\ returns vector \code\(2.43, 2.43)\code\. \h4\Initializing all components with numbers\h4\ A vector \code\vecN\code\ can be initialized with \i\N\i\ numbers, which will be copied (or may be converted) to their components. i.e. \code\glm.vec2(1, 2)\code\ returns vector \code\(1.0, 2.0)\code\ \code\glm.vec3(4, 5, 6)\code\ returns vector \code\(4.0, 5.0, 6.0)\code\ \code\glm.ivec4(9, 8, 7, 6)\code\ returns vector \code\(9, 8, 7, 6)\code\ \h4\Copying a vector\h4\ A copy of a vector can be obtained by initializing a vector with an instance of a vector. i.e. \code\glm.vec2(glm.vec2(3, 2))\code\ returns vector \code\(3.0, 2.0)\code\ This is what's known as the copy constructor. \h4\Initializing vectors with larger vectors\h4\ You can initialize any vector with a larger vector (which will discard any values that don't fit into the new vector). i.e. \code\glm.vec1(glm.vec3(1, 2, 3))\code\ returns vector \code\(1.0)\code\ likewise \code\glm.vec2(glm.vec4(5, 6, 7, 8))\code\ returns vector \code\(5.0, 6.0)\code\ \h4\Constructing vectors from other vectors and numbers\h4\ As long as you don't use any \code\vec1\code\s in your equation, you can construct any vector from a combination of vectors and / or numbers if their sum equals the length of the target vector. i.e. \code\glm.vec4(glm.vec2(1, 2), 3, 4)\code\ returns vector \code\(1.0, 2.0, 3.0, 4.0)\code\ likewise \code\glm.vec3(5, glm.vec2(4, 3))\code\ returns vector \code\(5.0, 4.0, 3.0)\code\ but \code\glm.vec2(glm.vec1(1), 2)\code\ doesn't work. \code\glm.vec3(glm.vec2(1, 2), glm.vec2(3, 4))\code\ also doesn't work. \h3\Lists (and other iterables)\h3\ Instead of using vectors to initialize vectors, you can also use lists and other iterables. e.g. \code\glm.vec2([1, 2])\code\ returns vector \code\(1.0, 2.0)\code\ or \code\glm.vec3((3, 4), 5)\code\ returns vector \code\(3.0, 4.0, 5.0)\code\ \h3\Objects that support the buffer protocol (numpy, bytes)\h3\ A few objects in Python support a functionality called the buffer protocol. One such example would be the Python \code\bytes\code\ type or \code\numpy.array\code\. PyGLM also supports this protocol and thus can be converted to or from any other object that supports it, granted it's in a fitting format. e.g. \code\bytes(glm.u8vec2(1,2))\code\ returns \code\b'\\x01\\x02'\code\ and \code\glm.u8vec2(b'\\x01\\x02')\code\ returns an 8-bit unsigned integer vector \code\(1, 2)\code\ or \code\glm.vec3(numpy.array([4,5,6]))\code\ returns vector \code\(4.0, 5.0, 6.0)\code\ and \code\numpy.array(glm.vec3(4, 5, 6))\code\ returns \code\array([4., 5., 6.], dtype=float32)\code\ \i\Note: objects that use the buffer protocol \i\may\i\ request a reference instead of a copy of the object, meaning that if you change the 'copy', you'll also change the original.\i\ \h2\Members\h2\ A vector has a member for each of it's values. \code\vec1\code\ has members: \code\(x)\code\ \code\vec2\code\ has members: \code\(x, y)\code\ \code\vec3\code\ has members: \code\(x, y, z)\code\ \code\vec4\code\ has members: \code\(x, y, z, w)\code\ Using swizzling, you can also construct vectors from up to four members: \code Python \ v = vec4(1, 2, 3, 4) v2 = v.xy # returns vec2(1, 2) v3 = v.zw # returns vec2(3, 4) v4 = v.xxxw # returns vec4(1, 1, 1, 4) \ code\ \h2\Methods\h2\ Any vector type implements the following methods: \h3\The copy protocol\h3\ Vectors support the copy protocol (see \url https://docs.python.org/3/library/copy.html \here\ url\). You can use \code\copy.copy()\code\ or \code\copy.deepcopy()\code\ to get a copy of a vector. \h3\Pickling\h3\ Vectors support \url https://docs.python.org/3/library/pickle.html#module-interface \pickling\url\ (as of PyGLM 2.0.0), which is Python's serialization method. \h3\To list / tuple\h3\ Any vector type has a \code\to_list()\code\ and a \code\to_tuple()\code\ function, which return's the vector's data represented as a list or tuple respectively. \h3\To and from bytes\h3\ All vectors have a \code\to_bytes()\code\ and a \code\from_bytes()\code\ method, which allows for conversion of the vector's data to and from bytes strings. \h2\Operators\h2\ Vector types support a \i\lot\i\ of operators. \h3\add (\code\+\code\ operator)\h3\ Vectors support addition with other vectors and numbers. \code Python \ sum1 = vec2(1, 2) + vec2(4, 0) # returns vec2(5, 2) sum2 = vec2(1, 2) + 4 # returns vec2(5, 6) \ code\ \h3\sub (\code\-\code\ operator)\h3\ Vectors support subtraction with other vectors and numbers. \code Python \ diff1 = vec2(1, 2) - vec2(4, 0) # returns vec2(-3, 2) diff2 = vec2(1, 2) - 4 # returns vec2(-3, -2) \ code\ \h3\mul (\code\*\code\ operator)\h3\ Vectors support multiplication with other vectors and numbers. \code Python \ prod1 = vec2(1, 2) * vec2(4, 0) # returns vec2(4, 0) prod2 = vec2(1, 2) * 4 # returns vec2(4, 8) \ code\ \h3 \matmul (\code\@\code\ operator)\ h3\ Has the same effects as the \code\*\code\ operator, but with the arguments switched. I.e. \code\a * b == b @ a\code\ \h3\div (\code\/\code\ operator)\h3\ Vectors support division with other vectors and numbers. \code Python \ quot1 = vec2(1, 2) / vec2(4, 0.5) # returns vec2(0.25, 4 ) quot2 = vec2(1, 2) / 4 # returns vec2(0.25, 0.5) \ code\ \h3\mod (\code\%\code\ operator)\h3\ Vectors support modulo operations with other vectors and numbers. \code Python \ mod1 = vec2(1, 2) % vec2(4, 2) # returns vec2(1, 0) mod2 = vec2(1, 2) % 4 # returns vec2(1, 2) \ code\ \h3\floordiv (\code\//\code\ operator)\h3\ Vectors support floored division with other vectors and numbers. \code Python \ fquot1 = vec2(1, 2) // vec2(4, 0.5) # returns vec2(0, 4) fquot2 = vec2(1, 2) // 4 # returns vec2(0, 0) \ code\ \h3\divmod\h3\ Vectors support combined floor division and modulo operations with other vectors and numbers. \code Python \ divmod1 = divmod(vec2(1, 2), vec2(4, 2)) # returns (vec2(0, 1), vec2(1, 0)) divmod2 = divmod(vec2(1, 2), 4) # returns (vec2(0, 0), vec2(1, 2)) \ code\ \h3\lshift (\code\<<\code\ operator)\h3\ Integer vectors support the bitwise left shift operator. \code Python \ >>> ivec3(1, 2, 3) << 4 ivec3( 16, 32, 48 ) >>> uvec3(1, 2, 3) << uvec3(1, 2, 3) uvec3( 2, 8, 24 ) \ code\ \h3\rshift (\code\>>\code\ operator)\h3\ Integer vectors support the bitwise right shift operator. \code Python \ >>> ivec3(16, 32, 48) >> 4 ivec3( 1, 2, 3 ) >>> uvec3(2, 8, 24) >> uvec3(1, 2, 3) uvec3( 1, 2, 3 ) \ code\ \h3\and (\code\&\code\ operator)\h3\ Integer vectors support the bitwise and operator. \code Python \ >>> ivec3(1, 2, 3) & 2 ivec3( 0, 2, 2 ) >>> uvec3(1, 2, 3) & uvec3(3, 2, 1) uvec3( 1, 2, 1 ) \ code\ \h3\or (\code\|\code\ operator)\h3\ Integer vectors support the bitwise or operator. \code Python \ >>> ivec3(1, 2, 3) | 2 ivec3( 3, 2, 3 ) >>> uvec3(1, 2, 3) | uvec3(6, 5, 4) uvec3( 7, 7, 7 ) \ code\ \h3\xor (\code\^\code\ operator)\h3\ Integer vectors support the bitwise xor operator. \code Python \ >>> ivec3(1, 2, 3) ^ 2 ivec3( 3, 0, 1 ) >>> uvec3(1, 2, 3) ^ uvec3(3, 2, 1) uvec3( 2, 0, 2 ) \ code\ \h3\pow (\code\**\code\ operator)\h3\ Vectors support pow operations with other vectors and numbers. \code Python \ pow1 = vec2(1, 2) ** vec2(4, 2) # returns vec2(1, 4) pow2 = vec2(1, 2) ** 4 # returns vec2(1, 16) \ code\ \h3\len\h3\ The length of a vector can be queried using \code\len()\code\. \code Python \ vec_length = len(vec2()) # returns 2 \ code\ \h3\getitem and setitem (\code\[]\code\ operator)\h3\ You can get the values of a vector using indices. \code Python \ v = vec2(1, 2) print(v[0]) # prints 1.0 print(v[1]) # prints 2.0 \ code\ Likewise you can set the values. \code Python \ v = vec2(1, 2) v[0] = 9 print(v.x) # prints 9.0 \ code\ \h3\contains (\code\in\code\ operator)\h3\ You can query wether or not a value is contained by a vector using the \code\in\code\ operator. \code Python \ v = vec2(1, 2) true = 2 in v false = 2.01 in v \ code\ \h3\richcompare (e.g. \code\==\code\ operator)\h3\ You can compare vectors using the richcompare operators: \code Python \ vec2(1, 2) == vec2(1, 2) # True vec2(1, 2) == vec2(2, 2) # False vec2(1, 2) == vec3(1, 2, 3) # False vec2(1, 2) != vec2(1, 2) # False vec2(1, 2) != vec2(2, 2) # True vec2(1, 2) != vec3(1, 2, 3) # True vec2(1, 2) < vec2(5, 5) # vec2(1, 1) vec2(1, 2) < vec2(2, 2) # vec2(1, 0) vec2(1, 2) < vec2(0, 0) # vec2(0, 0) vec2(1, 2) <= vec2(5, 5) # vec2(1, 1) vec2(1, 2) <= vec2(2, 2) # vec2(1, 1) vec2(1, 2) <= vec2(0, 0) # vec2(0, 0) vec2(1, 2) > vec2(5, 5) # vec2(0, 0) vec2(1, 2) > vec2(2, 2) # vec2(0, 0) vec2(1, 2) > vec2(0, 0) # vec2(1, 1) vec2(1, 2) >= vec2(5, 5) # vec2(0, 0) vec2(1, 2) >= vec2(2, 2) # vec2(0, 1) vec2(1, 2) >= vec2(0, 0) # vec2(1, 1) \ code\ \h3\iter\h3\ You can generate an iterable from vectors using \code\iter()\code\. \code Python \ v = vec2(1, 2) it = iter(v) print(next(it)) # prints 1.0 print(next(it)) # prints 2.0 \ code\ \h3\hash\h3\ You can generate a hash value for vectors using \code\hash()\code\ Example: \code Python\ >>> v = vec2() >>> hash(v) -1952026010959490761 >>> v2 = vec2(1, 2) >>> hash(v2) 8639716006723752019 >>> v3 = v2 * 0 >>> hash(v3) -1952026010959490761 \code\Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/000077500000000000000000000000001511156275200213255ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/INSTRUCTIONS.sb000066400000000000000000000037421511156275200236250ustar00rootroot00000000000000\h1\Function Reference\h1\ This is where you will find a \b\reference of all the functions that PyGLM provides\b\. Most functions are \b\overloaded\b\, i.e. they accept more than one type of argument and may or may not behave differently depending on the type of argument(s). Where possible, I tried to \b\compromise between exactness and readability\b\ of the supported data types. Therefore there are some \b\types\b\ that are \b\placeholders\b\ for others. Here are a few examples: \tbl\ Name \-\ Description \i\number\i\ \-\ Can be \b\(any) numerical type\b\, usually \code\float\code\ or \code\int\code\. \i\vecN\i\ \-\ Can be \b\any\b\ or most of the available \b\vector\b\ types of \b\any length\b\. \i\vec3\i\ \-\ Can be \b\any\b\ or most of the available \b\vector\b\ types of \b\length 3\b\. \i\fvecN\i\ \-\ A \b\float vector\b\ of \b\any length\b\. \i\matNxM\i\ \-\ Can be \b\any\b\ or most of the available \b\matrix\b\ types of \b\any shape\b\. \i\matSxS\i\ \-\ Can be \b\any\b\ or most of the available \b\matrix\b\ types of \b\square shape\b\. \i\quat\i\ \-\ \b\Any\b\ type of \b\quaternion\b\. \tbl\ If different combinations of input arguments are possible, \b\multiple ways to call a particular function are presented\b\. Example: \raw\#### glm.**abs**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Returns \code\x\code\ if \code\x >= 0\code\; otherwise it returns \code\-x\code\. \raw\#### glm.**abs**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\For each component \code\c\code\ of \code\x\code\, \raw\  \raw\Returns \code\c\code\ if \code\c >= 0\code\; otherwise it returns \code\-c\code\. This means that you can call the \code\glm.abs\code\ function with a \code\float\code\ \code\"x"\code\ and it will return a \code\float\code\ value (as you can tell by the \raw\ -> *float*\raw\), or you can call it with a vector, e.g. a \code\vec3\code\ and get a vector (\code\vec3\code\ in this case) back.Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/README.md000066400000000000000000001123071511156275200226100ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # Function Reference This is where you will find a **reference of all the functions that PyGLM provides**\. Most functions are **overloaded**, i\.e\. they accept more than one type of argument and may or may not behave differently depending on the type of argument\(s\)\. Where possible, I tried to **compromise between exactness and readability** of the supported data types\. Therefore there are some **types** that are **placeholders** for others\. Here are a few examples: Name | Description -|- *number* | Can be **\(any\) numerical type**, usually ``` float ``` or ``` int ```\. *vecN* | Can be **any** or most of the available **vector** types of **any length**\. *vec3* | Can be **any** or most of the available **vector** types of **length 3**\. *fvecN* | A **float vector** of **any length**\. *matNxM* | Can be **any** or most of the available **matrix** types of **any shape**\. *matSxS* | Can be **any** or most of the available **matrix** types of **square shape**\. *quat* | **Any** type of **quaternion**\. If different combinations of input arguments are possible, **multiple ways to call a particular function are presented**\. Example: #### glm.**abs**(**x**: *float*) -\> *float*   Returns ``` x ``` if ``` x >= 0 ```; otherwise it returns ``` -x ```\. #### glm.**abs**(**x**: *vecN*) -\> *vecN*   For each component ``` c ``` of ``` x ```,   Returns ``` c ``` if ``` c >= 0 ```; otherwise it returns ``` -c ```\. This means that you can call the ``` glm.abs ``` function with a ``` float ``` ``` "x" ``` and it will return a ``` float ``` value \(as you can tell by the -> *float*\), or you can call it with a vector, e\.g\. a ``` vec3 ``` and get a vector \(``` vec3 ``` in this case\) back\. # Table of Contents * [detail](detail/README.md) * [func\_common methods](detail/func_common.md) * [**abs** function ](detail/func_common.md#abs-function) * [**ceil** function ](detail/func_common.md#ceil-function) * [**clamp** function ](detail/func_common.md#clamp-function) * [**floatBitsToInt** function ](detail/func_common.md#floatBitsToInt-function) * [**floatBitsToUint** function ](detail/func_common.md#floatBitsToUint-function) * [**floor** function ](detail/func_common.md#floor-function) * [**fma** function ](detail/func_common.md#fma-function) * [**fmax** function ](detail/func_common.md#fmax-function) * [**fmin** function ](detail/func_common.md#fmin-function) * [**fract** function ](detail/func_common.md#fract-function) * [**frexp** function ](detail/func_common.md#frexp-function) * [**intBitsToFloat** function ](detail/func_common.md#intBitsToFloat-function) * [**isinf** function ](detail/func_common.md#isinf-function) * [**isnan** function ](detail/func_common.md#isnan-function) * [**ldexp** function ](detail/func_common.md#ldexp-function) * [**max** function ](detail/func_common.md#max-function) * [**min** function ](detail/func_common.md#min-function) * [**mix** function ](detail/func_common.md#mix-function) * [**mod** function ](detail/func_common.md#mod-function) * [**modf** function ](detail/func_common.md#modf-function) * [**round** function ](detail/func_common.md#round-function) * [**roundEven** function ](detail/func_common.md#roundEven-function) * [**sign** function ](detail/func_common.md#sign-function) * [**smoothstep** function ](detail/func_common.md#smoothstep-function) * [**step** function ](detail/func_common.md#step-function) * [**trunc** function ](detail/func_common.md#trunc-function) * [**uintBitsToFloat** function ](detail/func_common.md#uintBitsToFloat-function) * [func\_exponential methods](detail/func_exponential.md) * [**exp** function ](detail/func_exponential.md#exp-function) * [**exp2** function ](detail/func_exponential.md#exp2-function) * [**inversesqrt** function ](detail/func_exponential.md#inversesqrt-function) * [**log** function ](detail/func_exponential.md#log-function) * [**log2** function ](detail/func_exponential.md#log2-function) * [**pow** function ](detail/func_exponential.md#pow-function) * [**sqrt** function ](detail/func_exponential.md#sqrt-function) * [func\_geometric methods](detail/func_geometric.md) * [**cross** function ](detail/func_geometric.md#cross-function) * [**distance** function ](detail/func_geometric.md#distance-function) * [**dot** function ](detail/func_geometric.md#dot-function) * [**faceforward** function ](detail/func_geometric.md#faceforward-function) * [**length** function ](detail/func_geometric.md#length-function) * [**normalize** function ](detail/func_geometric.md#normalize-function) * [**reflect** function ](detail/func_geometric.md#reflect-function) * [**refract** function ](detail/func_geometric.md#refract-function) * [func\_integer methods](detail/func_integer.md) * [**bitCount** function ](detail/func_integer.md#bitCount-function) * [**bitfieldExtract** function ](detail/func_integer.md#bitfieldExtract-function) * [**bitfieldInsert** function ](detail/func_integer.md#bitfieldInsert-function) * [**bitfieldReverse** function ](detail/func_integer.md#bitfieldReverse-function) * [**findLSB** function ](detail/func_integer.md#findLSB-function) * [**findMSB** function ](detail/func_integer.md#findMSB-function) * [**imulExtended** function ](detail/func_integer.md#imulExtended-function) * [**uaddCarry** function ](detail/func_integer.md#uaddCarry-function) * [**umulExtended** function ](detail/func_integer.md#umulExtended-function) * [**usubBorrow** function ](detail/func_integer.md#usubBorrow-function) * [func\_matrix methods](detail/func_matrix.md) * [**determinant** function ](detail/func_matrix.md#determinant-function) * [**inverse** function ](detail/func_matrix.md#inverse-function) * [**matrixCompMult** function ](detail/func_matrix.md#matrixCompMult-function) * [**outerProduct** function ](detail/func_matrix.md#outerProduct-function) * [**transpose** function ](detail/func_matrix.md#transpose-function) * [func\_packing methods](detail/func_packing.md) * [**packDouble2x32** function ](detail/func_packing.md#packDouble2x32-function) * [**packHalf2x16** function ](detail/func_packing.md#packHalf2x16-function) * [**packSnorm2x16** function ](detail/func_packing.md#packSnorm2x16-function) * [**packSnorm4x8** function ](detail/func_packing.md#packSnorm4x8-function) * [**packUnorm2x16** function ](detail/func_packing.md#packUnorm2x16-function) * [**packUnorm4x8** function ](detail/func_packing.md#packUnorm4x8-function) * [**unpackDouble2x32** function ](detail/func_packing.md#unpackDouble2x32-function) * [**unpackHalf2x16** function ](detail/func_packing.md#unpackHalf2x16-function) * [**unpackSnorm2x16** function ](detail/func_packing.md#unpackSnorm2x16-function) * [**unpackSnorm4x8** function ](detail/func_packing.md#unpackSnorm4x8-function) * [**unpackUnorm2x16** function ](detail/func_packing.md#unpackUnorm2x16-function) * [**unpackUnorm4x8** function ](detail/func_packing.md#unpackUnorm4x8-function) * [func\_trigonometric methods](detail/func_trigonometric.md) * [**acos** function ](detail/func_trigonometric.md#acos-function) * [**acosh** function ](detail/func_trigonometric.md#acosh-function) * [**asin** function ](detail/func_trigonometric.md#asin-function) * [**asinh** function ](detail/func_trigonometric.md#asinh-function) * [**atan** function ](detail/func_trigonometric.md#atan-function) * [**atanh** function ](detail/func_trigonometric.md#atanh-function) * [**cos** function ](detail/func_trigonometric.md#cos-function) * [**cosh** function ](detail/func_trigonometric.md#cosh-function) * [**degrees** function ](detail/func_trigonometric.md#degrees-function) * [**radians** function ](detail/func_trigonometric.md#radians-function) * [**sin** function ](detail/func_trigonometric.md#sin-function) * [**sinh** function ](detail/func_trigonometric.md#sinh-function) * [**tan** function ](detail/func_trigonometric.md#tan-function) * [**tanh** function ](detail/func_trigonometric.md#tanh-function) * [func\_vector\_relational methods](detail/func_vector_relational.md) * [**all** function ](detail/func_vector_relational.md#all-function) * [**any** function ](detail/func_vector_relational.md#any-function) * [**equal** function ](detail/func_vector_relational.md#equal-function) * [**greaterThan** function ](detail/func_vector_relational.md#greaterThan-function) * [**greaterThanEqual** function ](detail/func_vector_relational.md#greaterThanEqual-function) * [**lessThan** function ](detail/func_vector_relational.md#lessThan-function) * [**lessThanEqual** function ](detail/func_vector_relational.md#lessThanEqual-function) * [**notEqual** function ](detail/func_vector_relational.md#notEqual-function) * [**not\_** function ](detail/func_vector_relational.md#not_-function) * [recommended\_extensions](recommended_extensions/README.md) * [color\_space methods](recommended_extensions/color_space.md) * [**convertLinearToSRGB** function ](recommended_extensions/color_space.md#convertLinearToSRGB-function) * [**convertSRGBToLinear** function ](recommended_extensions/color_space.md#convertSRGBToLinear-function) * [constants methods](recommended_extensions/constants.md) * [**e** function ](recommended_extensions/constants.md#e-function) * [**epsilon** function ](recommended_extensions/constants.md#epsilon-function) * [**euler** function ](recommended_extensions/constants.md#euler-function) * [**four\_over\_pi** function ](recommended_extensions/constants.md#four_over_pi-function) * [**golden\_ratio** function ](recommended_extensions/constants.md#golden_ratio-function) * [**half\_pi** function ](recommended_extensions/constants.md#half_pi-function) * [**ln\_ln\_two** function ](recommended_extensions/constants.md#ln_ln_two-function) * [**ln\_ten** function ](recommended_extensions/constants.md#ln_ten-function) * [**ln\_two** function ](recommended_extensions/constants.md#ln_two-function) * [**one** function ](recommended_extensions/constants.md#one-function) * [**one\_over\_pi** function ](recommended_extensions/constants.md#one_over_pi-function) * [**one\_over\_root\_two** function ](recommended_extensions/constants.md#one_over_root_two-function) * [**one\_over\_two\_pi** function ](recommended_extensions/constants.md#one_over_two_pi-function) * [**pi** function ](recommended_extensions/constants.md#pi-function) * [**quarter\_pi** function ](recommended_extensions/constants.md#quarter_pi-function) * [**root\_five** function ](recommended_extensions/constants.md#root_five-function) * [**root\_half\_pi** function ](recommended_extensions/constants.md#root_half_pi-function) * [**root\_ln\_four** function ](recommended_extensions/constants.md#root_ln_four-function) * [**root\_pi** function ](recommended_extensions/constants.md#root_pi-function) * [**root\_three** function ](recommended_extensions/constants.md#root_three-function) * [**root\_two** function ](recommended_extensions/constants.md#root_two-function) * [**root\_two\_pi** function ](recommended_extensions/constants.md#root_two_pi-function) * [**third** function ](recommended_extensions/constants.md#third-function) * [**three\_over\_two\_pi** function ](recommended_extensions/constants.md#three_over_two_pi-function) * [**two\_over\_pi** function ](recommended_extensions/constants.md#two_over_pi-function) * [**two\_over\_root\_pi** function ](recommended_extensions/constants.md#two_over_root_pi-function) * [**two\_pi** function ](recommended_extensions/constants.md#two_pi-function) * [**two\_thirds** function ](recommended_extensions/constants.md#two_thirds-function) * [**zero** function ](recommended_extensions/constants.md#zero-function) * [epsilon methods](recommended_extensions/epsilon.md) * [**epsilonEqual** function ](recommended_extensions/epsilon.md#epsilonEqual-function) * [**epsilonNotEqual** function ](recommended_extensions/epsilon.md#epsilonNotEqual-function) * [integer methods](recommended_extensions/integer.md) * [**iround** function ](recommended_extensions/integer.md#iround-function) * [**uround** function ](recommended_extensions/integer.md#uround-function) * [matrix\_access methods](recommended_extensions/matrix_access.md) * [**column** function ](recommended_extensions/matrix_access.md#column-function) * [**row** function ](recommended_extensions/matrix_access.md#row-function) * [matrix\_inverse methods](recommended_extensions/matrix_inverse.md) * [**affineInverse** function ](recommended_extensions/matrix_inverse.md#affineInverse-function) * [**inverseTranspose** function ](recommended_extensions/matrix_inverse.md#inverseTranspose-function) * [noise methods](recommended_extensions/noise.md) * [**perlin** function ](recommended_extensions/noise.md#perlin-function) * [**simplex** function ](recommended_extensions/noise.md#simplex-function) * [packing methods](recommended_extensions/packing.md) * [**packF2x11\_1x10** function ](recommended_extensions/packing.md#packF2x11_1x10-function) * [**packF3x9\_E1x5** function ](recommended_extensions/packing.md#packF3x9_E1x5-function) * [**packHalf** function ](recommended_extensions/packing.md#packHalf-function) * [**packHalf1x16** function ](recommended_extensions/packing.md#packHalf1x16-function) * [**packHalf4x16** function ](recommended_extensions/packing.md#packHalf4x16-function) * [**packI3x10\_1x2** function ](recommended_extensions/packing.md#packI3x10_1x2-function) * [**packInt2x16** function ](recommended_extensions/packing.md#packInt2x16-function) * [**packInt2x32** function ](recommended_extensions/packing.md#packInt2x32-function) * [**packInt2x8** function ](recommended_extensions/packing.md#packInt2x8-function) * [**packInt4x16** function ](recommended_extensions/packing.md#packInt4x16-function) * [**packInt4x8** function ](recommended_extensions/packing.md#packInt4x8-function) * [**packRGBM** function ](recommended_extensions/packing.md#packRGBM-function) * [**packSnorm** function ](recommended_extensions/packing.md#packSnorm-function) * [**packSnorm1x16** function ](recommended_extensions/packing.md#packSnorm1x16-function) * [**packSnorm1x8** function ](recommended_extensions/packing.md#packSnorm1x8-function) * [**packSnorm2x8** function ](recommended_extensions/packing.md#packSnorm2x8-function) * [**packSnorm3x10\_1x2** function ](recommended_extensions/packing.md#packSnorm3x10_1x2-function) * [**packSnorm4x16** function ](recommended_extensions/packing.md#packSnorm4x16-function) * [**packU3x10\_1x2** function ](recommended_extensions/packing.md#packU3x10_1x2-function) * [**packUint2x16** function ](recommended_extensions/packing.md#packUint2x16-function) * [**packUint2x32** function ](recommended_extensions/packing.md#packUint2x32-function) * [**packUint2x8** function ](recommended_extensions/packing.md#packUint2x8-function) * [**packUint4x16** function ](recommended_extensions/packing.md#packUint4x16-function) * [**packUint4x8** function ](recommended_extensions/packing.md#packUint4x8-function) * [**packUnorm** function ](recommended_extensions/packing.md#packUnorm-function) * [**packUnorm1x16** function ](recommended_extensions/packing.md#packUnorm1x16-function) * [**packUnorm1x5\_1x6\_1x5** function ](recommended_extensions/packing.md#packUnorm1x5_1x6_1x5-function) * [**packUnorm1x8** function ](recommended_extensions/packing.md#packUnorm1x8-function) * [**packUnorm2x3\_1x2** function ](recommended_extensions/packing.md#packUnorm2x3_1x2-function) * [**packUnorm2x4** function ](recommended_extensions/packing.md#packUnorm2x4-function) * [**packUnorm2x8** function ](recommended_extensions/packing.md#packUnorm2x8-function) * [**packUnorm3x10\_1x2** function ](recommended_extensions/packing.md#packUnorm3x10_1x2-function) * [**packUnorm3x5\_1x1** function ](recommended_extensions/packing.md#packUnorm3x5_1x1-function) * [**packUnorm4x16** function ](recommended_extensions/packing.md#packUnorm4x16-function) * [**packUnorm4x4** function ](recommended_extensions/packing.md#packUnorm4x4-function) * [**unpackF2x11\_1x10** function ](recommended_extensions/packing.md#unpackF2x11_1x10-function) * [**unpackF3x9\_E1x5** function ](recommended_extensions/packing.md#unpackF3x9_E1x5-function) * [**unpackHalf** function ](recommended_extensions/packing.md#unpackHalf-function) * [**unpackHalf1x16** function ](recommended_extensions/packing.md#unpackHalf1x16-function) * [**unpackHalf4x16** function ](recommended_extensions/packing.md#unpackHalf4x16-function) * [**unpackI3x10\_1x2** function ](recommended_extensions/packing.md#unpackI3x10_1x2-function) * [**unpackInt2x16** function ](recommended_extensions/packing.md#unpackInt2x16-function) * [**unpackInt2x32** function ](recommended_extensions/packing.md#unpackInt2x32-function) * [**unpackInt2x8** function ](recommended_extensions/packing.md#unpackInt2x8-function) * [**unpackInt4x16** function ](recommended_extensions/packing.md#unpackInt4x16-function) * [**unpackInt4x8** function ](recommended_extensions/packing.md#unpackInt4x8-function) * [**unpackRGBM** function ](recommended_extensions/packing.md#unpackRGBM-function) * [**unpackSnorm** function ](recommended_extensions/packing.md#unpackSnorm-function) * [**unpackSnorm1x16** function ](recommended_extensions/packing.md#unpackSnorm1x16-function) * [**unpackSnorm1x8** function ](recommended_extensions/packing.md#unpackSnorm1x8-function) * [**unpackSnorm2x8** function ](recommended_extensions/packing.md#unpackSnorm2x8-function) * [**unpackSnorm3x10\_1x2** function ](recommended_extensions/packing.md#unpackSnorm3x10_1x2-function) * [**unpackSnorm4x16** function ](recommended_extensions/packing.md#unpackSnorm4x16-function) * [**unpackU3x10\_1x2** function ](recommended_extensions/packing.md#unpackU3x10_1x2-function) * [**unpackUint2x16** function ](recommended_extensions/packing.md#unpackUint2x16-function) * [**unpackUint2x32** function ](recommended_extensions/packing.md#unpackUint2x32-function) * [**unpackUint2x8** function ](recommended_extensions/packing.md#unpackUint2x8-function) * [**unpackUint4x16** function ](recommended_extensions/packing.md#unpackUint4x16-function) * [**unpackUint4x8** function ](recommended_extensions/packing.md#unpackUint4x8-function) * [**unpackUnorm** function ](recommended_extensions/packing.md#unpackUnorm-function) * [**unpackUnorm1x16** function ](recommended_extensions/packing.md#unpackUnorm1x16-function) * [**unpackUnorm1x5\_1x6\_1x5** function ](recommended_extensions/packing.md#unpackUnorm1x5_1x6_1x5-function) * [**unpackUnorm1x8** function ](recommended_extensions/packing.md#unpackUnorm1x8-function) * [**unpackUnorm2x3\_1x2** function ](recommended_extensions/packing.md#unpackUnorm2x3_1x2-function) * [**unpackUnorm2x4** function ](recommended_extensions/packing.md#unpackUnorm2x4-function) * [**unpackUnorm2x8** function ](recommended_extensions/packing.md#unpackUnorm2x8-function) * [**unpackUnorm3x10\_1x2** function ](recommended_extensions/packing.md#unpackUnorm3x10_1x2-function) * [**unpackUnorm3x5\_1x1** function ](recommended_extensions/packing.md#unpackUnorm3x5_1x1-function) * [**unpackUnorm4x16** function ](recommended_extensions/packing.md#unpackUnorm4x16-function) * [**unpackUnorm4x4** function ](recommended_extensions/packing.md#unpackUnorm4x4-function) * [quaternion methods](recommended_extensions/quaternion.md) * [**eulerAngles** function ](recommended_extensions/quaternion.md#eulerAngles-function) * [**mat3\_cast** function ](recommended_extensions/quaternion.md#mat3_cast-function) * [**mat4\_cast** function ](recommended_extensions/quaternion.md#mat4_cast-function) * [**pitch** function ](recommended_extensions/quaternion.md#pitch-function) * [**quatLookAt** function ](recommended_extensions/quaternion.md#quatLookAt-function) * [**quatLookAtLH** function ](recommended_extensions/quaternion.md#quatLookAtLH-function) * [**quatLookAtRH** function ](recommended_extensions/quaternion.md#quatLookAtRH-function) * [**quat\_cast** function ](recommended_extensions/quaternion.md#quat_cast-function) * [**roll** function ](recommended_extensions/quaternion.md#roll-function) * [**yaw** function ](recommended_extensions/quaternion.md#yaw-function) * [random methods](recommended_extensions/random.md) * [**ballRand** function ](recommended_extensions/random.md#ballRand-function) * [**circularRand** function ](recommended_extensions/random.md#circularRand-function) * [**diskRand** function ](recommended_extensions/random.md#diskRand-function) * [**gaussRand** function ](recommended_extensions/random.md#gaussRand-function) * [**linearRand** function ](recommended_extensions/random.md#linearRand-function) * [**setSeed** function ](recommended_extensions/random.md#setSeed-function) * [**sphericalRand** function ](recommended_extensions/random.md#sphericalRand-function) * [reciprocal methods](recommended_extensions/reciprocal.md) * [**acot** function ](recommended_extensions/reciprocal.md#acot-function) * [**acoth** function ](recommended_extensions/reciprocal.md#acoth-function) * [**acsc** function ](recommended_extensions/reciprocal.md#acsc-function) * [**acsch** function ](recommended_extensions/reciprocal.md#acsch-function) * [**asec** function ](recommended_extensions/reciprocal.md#asec-function) * [**asech** function ](recommended_extensions/reciprocal.md#asech-function) * [**cot** function ](recommended_extensions/reciprocal.md#cot-function) * [**coth** function ](recommended_extensions/reciprocal.md#coth-function) * [**csc** function ](recommended_extensions/reciprocal.md#csc-function) * [**csch** function ](recommended_extensions/reciprocal.md#csch-function) * [**sec** function ](recommended_extensions/reciprocal.md#sec-function) * [**sech** function ](recommended_extensions/reciprocal.md#sech-function) * [round methods](recommended_extensions/round.md) * [**ceilMultiple** function ](recommended_extensions/round.md#ceilMultiple-function) * [**ceilPowerOfTwo** function ](recommended_extensions/round.md#ceilPowerOfTwo-function) * [**floorMultiple** function ](recommended_extensions/round.md#floorMultiple-function) * [**floorPowerOfTwo** function ](recommended_extensions/round.md#floorPowerOfTwo-function) * [**roundMultiple** function ](recommended_extensions/round.md#roundMultiple-function) * [**roundPowerOfTwo** function ](recommended_extensions/round.md#roundPowerOfTwo-function) * [type\_ptr methods](recommended_extensions/type_ptr.md) * [**make\_mat2** function ](recommended_extensions/type_ptr.md#make_mat2-function) * [**make\_mat2x2** function ](recommended_extensions/type_ptr.md#make_mat2x2-function) * [**make\_mat2x3** function ](recommended_extensions/type_ptr.md#make_mat2x3-function) * [**make\_mat2x4** function ](recommended_extensions/type_ptr.md#make_mat2x4-function) * [**make\_mat3** function ](recommended_extensions/type_ptr.md#make_mat3-function) * [**make\_mat3x2** function ](recommended_extensions/type_ptr.md#make_mat3x2-function) * [**make\_mat3x3** function ](recommended_extensions/type_ptr.md#make_mat3x3-function) * [**make\_mat3x4** function ](recommended_extensions/type_ptr.md#make_mat3x4-function) * [**make\_mat4** function ](recommended_extensions/type_ptr.md#make_mat4-function) * [**make\_mat4x2** function ](recommended_extensions/type_ptr.md#make_mat4x2-function) * [**make\_mat4x3** function ](recommended_extensions/type_ptr.md#make_mat4x3-function) * [**make\_mat4x4** function ](recommended_extensions/type_ptr.md#make_mat4x4-function) * [**make\_quat** function ](recommended_extensions/type_ptr.md#make_quat-function) * [**make\_vec2** function ](recommended_extensions/type_ptr.md#make_vec2-function) * [**make\_vec3** function ](recommended_extensions/type_ptr.md#make_vec3-function) * [**make\_vec4** function ](recommended_extensions/type_ptr.md#make_vec4-function) * [**sizeof** function ](recommended_extensions/type_ptr.md#sizeof-function) * [**value\_ptr** function ](recommended_extensions/type_ptr.md#value_ptr-function) * [ulp methods](recommended_extensions/ulp.md) * [**float\_distance** function ](recommended_extensions/ulp.md#float_distance-function) * [**next\_float** function ](recommended_extensions/ulp.md#next_float-function) * [**prev\_float** function ](recommended_extensions/ulp.md#prev_float-function) * [stable\_extensions](stable_extensions/README.md) * [matrix\_clip\_space methods](stable_extensions/matrix_clip_space.md) * [**frustum** function ](stable_extensions/matrix_clip_space.md#frustum-function) * [**frustumLH** function ](stable_extensions/matrix_clip_space.md#frustumLH-function) * [**frustumLH\_NO** function ](stable_extensions/matrix_clip_space.md#frustumLH_NO-function) * [**frustumLH\_ZO** function ](stable_extensions/matrix_clip_space.md#frustumLH_ZO-function) * [**frustumNO** function ](stable_extensions/matrix_clip_space.md#frustumNO-function) * [**frustumRH** function ](stable_extensions/matrix_clip_space.md#frustumRH-function) * [**frustumRH\_NO** function ](stable_extensions/matrix_clip_space.md#frustumRH_NO-function) * [**frustumRH\_ZO** function ](stable_extensions/matrix_clip_space.md#frustumRH_ZO-function) * [**frustumZO** function ](stable_extensions/matrix_clip_space.md#frustumZO-function) * [**infinitePerspective** function ](stable_extensions/matrix_clip_space.md#infinitePerspective-function) * [**infinitePerspectiveLH** function ](stable_extensions/matrix_clip_space.md#infinitePerspectiveLH-function) * [**infinitePerspectiveRH** function ](stable_extensions/matrix_clip_space.md#infinitePerspectiveRH-function) * [**ortho** function ](stable_extensions/matrix_clip_space.md#ortho-function) * [**orthoLH** function ](stable_extensions/matrix_clip_space.md#orthoLH-function) * [**orthoLH\_NO** function ](stable_extensions/matrix_clip_space.md#orthoLH_NO-function) * [**orthoLH\_ZO** function ](stable_extensions/matrix_clip_space.md#orthoLH_ZO-function) * [**orthoNO** function ](stable_extensions/matrix_clip_space.md#orthoNO-function) * [**orthoRH** function ](stable_extensions/matrix_clip_space.md#orthoRH-function) * [**orthoRH\_NO** function ](stable_extensions/matrix_clip_space.md#orthoRH_NO-function) * [**orthoRH\_ZO** function ](stable_extensions/matrix_clip_space.md#orthoRH_ZO-function) * [**orthoZO** function ](stable_extensions/matrix_clip_space.md#orthoZO-function) * [**perspective** function ](stable_extensions/matrix_clip_space.md#perspective-function) * [**perspectiveFov** function ](stable_extensions/matrix_clip_space.md#perspectiveFov-function) * [**perspectiveFovLH** function ](stable_extensions/matrix_clip_space.md#perspectiveFovLH-function) * [**perspectiveFovLH\_NO** function ](stable_extensions/matrix_clip_space.md#perspectiveFovLH_NO-function) * [**perspectiveFovLH\_ZO** function ](stable_extensions/matrix_clip_space.md#perspectiveFovLH_ZO-function) * [**perspectiveFovNO** function ](stable_extensions/matrix_clip_space.md#perspectiveFovNO-function) * [**perspectiveFovRH** function ](stable_extensions/matrix_clip_space.md#perspectiveFovRH-function) * [**perspectiveFovRH\_NO** function ](stable_extensions/matrix_clip_space.md#perspectiveFovRH_NO-function) * [**perspectiveFovRH\_ZO** function ](stable_extensions/matrix_clip_space.md#perspectiveFovRH_ZO-function) * [**perspectiveFovZO** function ](stable_extensions/matrix_clip_space.md#perspectiveFovZO-function) * [**perspectiveLH** function ](stable_extensions/matrix_clip_space.md#perspectiveLH-function) * [**perspectiveLH\_NO** function ](stable_extensions/matrix_clip_space.md#perspectiveLH_NO-function) * [**perspectiveLH\_ZO** function ](stable_extensions/matrix_clip_space.md#perspectiveLH_ZO-function) * [**perspectiveNO** function ](stable_extensions/matrix_clip_space.md#perspectiveNO-function) * [**perspectiveRH** function ](stable_extensions/matrix_clip_space.md#perspectiveRH-function) * [**perspectiveRH\_NO** function ](stable_extensions/matrix_clip_space.md#perspectiveRH_NO-function) * [**perspectiveRH\_ZO** function ](stable_extensions/matrix_clip_space.md#perspectiveRH_ZO-function) * [**perspectiveZO** function ](stable_extensions/matrix_clip_space.md#perspectiveZO-function) * [**tweakedInfinitePerspective** function ](stable_extensions/matrix_clip_space.md#tweakedInfinitePerspective-function) * [matrix\_projection methods](stable_extensions/matrix_projection.md) * [**pickMatrix** function ](stable_extensions/matrix_projection.md#pickMatrix-function) * [**project** function ](stable_extensions/matrix_projection.md#project-function) * [**projectNO** function ](stable_extensions/matrix_projection.md#projectNO-function) * [**projectZO** function ](stable_extensions/matrix_projection.md#projectZO-function) * [**unProject** function ](stable_extensions/matrix_projection.md#unProject-function) * [**unProjectNO** function ](stable_extensions/matrix_projection.md#unProjectNO-function) * [**unProjectZO** function ](stable_extensions/matrix_projection.md#unProjectZO-function) * [matrix\_transform methods](stable_extensions/matrix_transform.md) * [**identity** function ](stable_extensions/matrix_transform.md#identity-function) * [**lookAt** function ](stable_extensions/matrix_transform.md#lookAt-function) * [**lookAtLH** function ](stable_extensions/matrix_transform.md#lookAtLH-function) * [**lookAtRH** function ](stable_extensions/matrix_transform.md#lookAtRH-function) * [**rotate** function ](stable_extensions/matrix_transform.md#rotate-function) * [**rotate\_slow** function ](stable_extensions/matrix_transform.md#rotate_slow-function) * [**scale** function ](stable_extensions/matrix_transform.md#scale-function) * [**scale\_slow** function ](stable_extensions/matrix_transform.md#scale_slow-function) * [**translate** function ](stable_extensions/matrix_transform.md#translate-function) * [quaternion\_common methods](stable_extensions/quaternion_common.md) * [**conjugate** function ](stable_extensions/quaternion_common.md#conjugate-function) * [**lerp** function ](stable_extensions/quaternion_common.md#lerp-function) * [**slerp** function ](stable_extensions/quaternion_common.md#slerp-function) * [quaternion\_trigonometric methods](stable_extensions/quaternion_trigonometric.md) * [**angle** function ](stable_extensions/quaternion_trigonometric.md#angle-function) * [**angleAxis** function ](stable_extensions/quaternion_trigonometric.md#angleAxis-function) * [**axis** function ](stable_extensions/quaternion_trigonometric.md#axis-function) * [compatibility methods](stable_extensions/compatibility.md) * [**atan2** function ](stable_extensions/compatibility.md#atan2-function) * [**isfinite** function ](stable_extensions/compatibility.md#isfinite-function) * [**lerp** function ](stable_extensions/compatibility.md#lerp-function) * [**saturate** function ](stable_extensions/compatibility.md#saturate-function) * [unstable\_extensions](unstable_extensions/README.md) * [decompose methods](unstable_extensions/decompose.md) * [**decompose** function ](unstable_extensions/decompose.md#decompose-function) * [norm methods](unstable_extensions/norm.md) * [**distance2** function ](unstable_extensions/norm.md#distance2-function) * [**l1Norm** function ](unstable_extensions/norm.md#l1Norm-function) * [**l2Norm** function ](unstable_extensions/norm.md#l2Norm-function) * [**lMaxNorm** function ](unstable_extensions/norm.md#lMaxNorm-function) * [**length2** function ](unstable_extensions/norm.md#length2-function) * [**lxNorm** function ](unstable_extensions/norm.md#lxNorm-function) * [polar\_coordinates methods](unstable_extensions/polar_coordinates.md) * [**euclidean** function ](unstable_extensions/polar_coordinates.md#euclidean-function) * [**polar** function ](unstable_extensions/polar_coordinates.md#polar-function) * [matrix\_transform\_2d methods](unstable_extensions/matrix_transform_2d.md) * [**rotate** function ](unstable_extensions/matrix_transform_2d.md#rotate-function) * [**scale** function ](unstable_extensions/matrix_transform_2d.md#scale-function) * [**shearX** function ](unstable_extensions/matrix_transform_2d.md#shearX-function) * [**shearY** function ](unstable_extensions/matrix_transform_2d.md#shearY-function) * [**translate** function ](unstable_extensions/matrix_transform_2d.md#translate-function) * [rotate\_vector methods](unstable_extensions/rotate_vector.md) * [**orientation** function ](unstable_extensions/rotate_vector.md#orientation-function) * [**rotate** function ](unstable_extensions/rotate_vector.md#rotate-function) * [**rotateX** function ](unstable_extensions/rotate_vector.md#rotateX-function) * [**rotateY** function ](unstable_extensions/rotate_vector.md#rotateY-function) * [**rotateZ** function ](unstable_extensions/rotate_vector.md#rotateZ-function) * [**slerp** function ](unstable_extensions/rotate_vector.md#slerp-function) * [other](other/README.md) * [other methods](other/other.md) * [**add** function ](other/other.md#add-function) * [**and\_** function ](other/other.md#and_-function) * [**cmp** function ](other/other.md#cmp-function) * [**div** function ](other/other.md#div-function) * [**floordiv** function ](other/other.md#floordiv-function) * [**if\_else** function ](other/other.md#if_else-function) * [**inv** function ](other/other.md#inv-function) * [**lshift** function ](other/other.md#lshift-function) * [**mul** function ](other/other.md#mul-function) * [**neg** function ](other/other.md#neg-function) * [**or\_** function ](other/other.md#or_-function) * [**pos** function ](other/other.md#pos-function) * [**quat\_to\_vec4** function ](other/other.md#quat_to_vec4-function) * [**rshift** function ](other/other.md#rshift-function) * [**silence** function ](other/other.md#silence-function) * [**sub** function ](other/other.md#sub-function) * [**vec4\_to\_quat** function ](other/other.md#vec4_to_quat-function) * [**xor** function ](other/other.md#xor-function) Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/README.sb000066400000000000000000001154631511156275200226220ustar00rootroot00000000000000\h1\Function Reference\h1\ This is where you will find a \b\reference of all the functions that PyGLM provides\b\. Most functions are \b\overloaded\b\, i.e. they accept more than one type of argument and may or may not behave differently depending on the type of argument(s). Where possible, I tried to \b\compromise between exactness and readability\b\ of the supported data types. Therefore there are some \b\types\b\ that are \b\placeholders\b\ for others. Here are a few examples: \tbl\ Name \-\ Description \i\number\i\ \-\ Can be \b\(any) numerical type\b\, usually \code\float\code\ or \code\int\code\. \i\vecN\i\ \-\ Can be \b\any\b\ or most of the available \b\vector\b\ types of \b\any length\b\. \i\vec3\i\ \-\ Can be \b\any\b\ or most of the available \b\vector\b\ types of \b\length 3\b\. \i\fvecN\i\ \-\ A \b\float vector\b\ of \b\any length\b\. \i\matNxM\i\ \-\ Can be \b\any\b\ or most of the available \b\matrix\b\ types of \b\any shape\b\. \i\matSxS\i\ \-\ Can be \b\any\b\ or most of the available \b\matrix\b\ types of \b\square shape\b\. \i\quat\i\ \-\ \b\Any\b\ type of \b\quaternion\b\. \tbl\ If different combinations of input arguments are possible, \b\multiple ways to call a particular function are presented\b\. Example: \raw\#### glm.**abs**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Returns \code\x\code\ if \code\x >= 0\code\; otherwise it returns \code\-x\code\. \raw\#### glm.**abs**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\For each component \code\c\code\ of \code\x\code\, \raw\  \raw\Returns \code\c\code\ if \code\c >= 0\code\; otherwise it returns \code\-c\code\. This means that you can call the \code\glm.abs\code\ function with a \code\float\code\ \code\"x"\code\ and it will return a \code\float\code\ value (as you can tell by the \raw\ -> *float*\raw\), or you can call it with a vector, e.g. a \code\vec3\code\ and get a vector (\code\vec3\code\ in this case) back. \h1\Table of Contents\h1\ \ul\ \-\ \url detail/README.md\detail\url\ \--\ \url detail/func_common.md \func_common methods\ url\ \---\ \url detail/func_common.md#abs-function \\b\abs\b\ function \ url\ \---\ \url detail/func_common.md#ceil-function \\b\ceil\b\ function \ url\ \---\ \url detail/func_common.md#clamp-function \\b\clamp\b\ function \ url\ \---\ \url detail/func_common.md#floatBitsToInt-function \\b\floatBitsToInt\b\ function \ url\ \---\ \url detail/func_common.md#floatBitsToUint-function \\b\floatBitsToUint\b\ function \ url\ \---\ \url detail/func_common.md#floor-function \\b\floor\b\ function \ url\ \---\ \url detail/func_common.md#fma-function \\b\fma\b\ function \ url\ \---\ \url detail/func_common.md#fmax-function \\b\fmax\b\ function \ url\ \---\ \url detail/func_common.md#fmin-function \\b\fmin\b\ function \ url\ \---\ \url detail/func_common.md#fract-function \\b\fract\b\ function \ url\ \---\ \url detail/func_common.md#frexp-function \\b\frexp\b\ function \ url\ \---\ \url detail/func_common.md#intBitsToFloat-function \\b\intBitsToFloat\b\ function \ url\ \---\ \url detail/func_common.md#isinf-function \\b\isinf\b\ function \ url\ \---\ \url detail/func_common.md#isnan-function \\b\isnan\b\ function \ url\ \---\ \url detail/func_common.md#ldexp-function \\b\ldexp\b\ function \ url\ \---\ \url detail/func_common.md#max-function \\b\max\b\ function \ url\ \---\ \url detail/func_common.md#min-function \\b\min\b\ function \ url\ \---\ \url detail/func_common.md#mix-function \\b\mix\b\ function \ url\ \---\ \url detail/func_common.md#mod-function \\b\mod\b\ function \ url\ \---\ \url detail/func_common.md#modf-function \\b\modf\b\ function \ url\ \---\ \url detail/func_common.md#round-function \\b\round\b\ function \ url\ \---\ \url detail/func_common.md#roundEven-function \\b\roundEven\b\ function \ url\ \---\ \url detail/func_common.md#sign-function \\b\sign\b\ function \ url\ \---\ \url detail/func_common.md#smoothstep-function \\b\smoothstep\b\ function \ url\ \---\ \url detail/func_common.md#step-function \\b\step\b\ function \ url\ \---\ \url detail/func_common.md#trunc-function \\b\trunc\b\ function \ url\ \---\ \url detail/func_common.md#uintBitsToFloat-function \\b\uintBitsToFloat\b\ function \ url\ \--\ \url detail/func_exponential.md \func_exponential methods\ url\ \---\ \url detail/func_exponential.md#exp-function \\b\exp\b\ function \ url\ \---\ \url detail/func_exponential.md#exp2-function \\b\exp2\b\ function \ url\ \---\ \url detail/func_exponential.md#inversesqrt-function \\b\inversesqrt\b\ function \ url\ \---\ \url detail/func_exponential.md#log-function \\b\log\b\ function \ url\ \---\ \url detail/func_exponential.md#log2-function \\b\log2\b\ function \ url\ \---\ \url detail/func_exponential.md#pow-function \\b\pow\b\ function \ url\ \---\ \url detail/func_exponential.md#sqrt-function \\b\sqrt\b\ function \ url\ \--\ \url detail/func_geometric.md \func_geometric methods\ url\ \---\ \url detail/func_geometric.md#cross-function \\b\cross\b\ function \ url\ \---\ \url detail/func_geometric.md#distance-function \\b\distance\b\ function \ url\ \---\ \url detail/func_geometric.md#dot-function \\b\dot\b\ function \ url\ \---\ \url detail/func_geometric.md#faceforward-function \\b\faceforward\b\ function \ url\ \---\ \url detail/func_geometric.md#length-function \\b\length\b\ function \ url\ \---\ \url detail/func_geometric.md#normalize-function \\b\normalize\b\ function \ url\ \---\ \url detail/func_geometric.md#reflect-function \\b\reflect\b\ function \ url\ \---\ \url detail/func_geometric.md#refract-function \\b\refract\b\ function \ url\ \--\ \url detail/func_integer.md \func_integer methods\ url\ \---\ \url detail/func_integer.md#bitCount-function \\b\bitCount\b\ function \ url\ \---\ \url detail/func_integer.md#bitfieldExtract-function \\b\bitfieldExtract\b\ function \ url\ \---\ \url detail/func_integer.md#bitfieldInsert-function \\b\bitfieldInsert\b\ function \ url\ \---\ \url detail/func_integer.md#bitfieldReverse-function \\b\bitfieldReverse\b\ function \ url\ \---\ \url detail/func_integer.md#findLSB-function \\b\findLSB\b\ function \ url\ \---\ \url detail/func_integer.md#findMSB-function \\b\findMSB\b\ function \ url\ \---\ \url detail/func_integer.md#imulExtended-function \\b\imulExtended\b\ function \ url\ \---\ \url detail/func_integer.md#uaddCarry-function \\b\uaddCarry\b\ function \ url\ \---\ \url detail/func_integer.md#umulExtended-function \\b\umulExtended\b\ function \ url\ \---\ \url detail/func_integer.md#usubBorrow-function \\b\usubBorrow\b\ function \ url\ \--\ \url detail/func_matrix.md \func_matrix methods\ url\ \---\ \url detail/func_matrix.md#determinant-function \\b\determinant\b\ function \ url\ \---\ \url detail/func_matrix.md#inverse-function \\b\inverse\b\ function \ url\ \---\ \url detail/func_matrix.md#matrixCompMult-function \\b\matrixCompMult\b\ function \ url\ \---\ \url detail/func_matrix.md#outerProduct-function \\b\outerProduct\b\ function \ url\ \---\ \url detail/func_matrix.md#transpose-function \\b\transpose\b\ function \ url\ \--\ \url detail/func_packing.md \func_packing methods\ url\ \---\ \url detail/func_packing.md#packDouble2x32-function \\b\packDouble2x32\b\ function \ url\ \---\ \url detail/func_packing.md#packHalf2x16-function \\b\packHalf2x16\b\ function \ url\ \---\ \url detail/func_packing.md#packSnorm2x16-function \\b\packSnorm2x16\b\ function \ url\ \---\ \url detail/func_packing.md#packSnorm4x8-function \\b\packSnorm4x8\b\ function \ url\ \---\ \url detail/func_packing.md#packUnorm2x16-function \\b\packUnorm2x16\b\ function \ url\ \---\ \url detail/func_packing.md#packUnorm4x8-function \\b\packUnorm4x8\b\ function \ url\ \---\ \url detail/func_packing.md#unpackDouble2x32-function \\b\unpackDouble2x32\b\ function \ url\ \---\ \url detail/func_packing.md#unpackHalf2x16-function \\b\unpackHalf2x16\b\ function \ url\ \---\ \url detail/func_packing.md#unpackSnorm2x16-function \\b\unpackSnorm2x16\b\ function \ url\ \---\ \url detail/func_packing.md#unpackSnorm4x8-function \\b\unpackSnorm4x8\b\ function \ url\ \---\ \url detail/func_packing.md#unpackUnorm2x16-function \\b\unpackUnorm2x16\b\ function \ url\ \---\ \url detail/func_packing.md#unpackUnorm4x8-function \\b\unpackUnorm4x8\b\ function \ url\ \--\ \url detail/func_trigonometric.md \func_trigonometric methods\ url\ \---\ \url detail/func_trigonometric.md#acos-function \\b\acos\b\ function \ url\ \---\ \url detail/func_trigonometric.md#acosh-function \\b\acosh\b\ function \ url\ \---\ \url detail/func_trigonometric.md#asin-function \\b\asin\b\ function \ url\ \---\ \url detail/func_trigonometric.md#asinh-function \\b\asinh\b\ function \ url\ \---\ \url detail/func_trigonometric.md#atan-function \\b\atan\b\ function \ url\ \---\ \url detail/func_trigonometric.md#atanh-function \\b\atanh\b\ function \ url\ \---\ \url detail/func_trigonometric.md#cos-function \\b\cos\b\ function \ url\ \---\ \url detail/func_trigonometric.md#cosh-function \\b\cosh\b\ function \ url\ \---\ \url detail/func_trigonometric.md#degrees-function \\b\degrees\b\ function \ url\ \---\ \url detail/func_trigonometric.md#radians-function \\b\radians\b\ function \ url\ \---\ \url detail/func_trigonometric.md#sin-function \\b\sin\b\ function \ url\ \---\ \url detail/func_trigonometric.md#sinh-function \\b\sinh\b\ function \ url\ \---\ \url detail/func_trigonometric.md#tan-function \\b\tan\b\ function \ url\ \---\ \url detail/func_trigonometric.md#tanh-function \\b\tanh\b\ function \ url\ \--\ \url detail/func_vector_relational.md \func_vector_relational methods\ url\ \---\ \url detail/func_vector_relational.md#all-function \\b\all\b\ function \ url\ \---\ \url detail/func_vector_relational.md#any-function \\b\any\b\ function \ url\ \---\ \url detail/func_vector_relational.md#equal-function \\b\equal\b\ function \ url\ \---\ \url detail/func_vector_relational.md#greaterThan-function \\b\greaterThan\b\ function \ url\ \---\ \url detail/func_vector_relational.md#greaterThanEqual-function \\b\greaterThanEqual\b\ function \ url\ \---\ \url detail/func_vector_relational.md#lessThan-function \\b\lessThan\b\ function \ url\ \---\ \url detail/func_vector_relational.md#lessThanEqual-function \\b\lessThanEqual\b\ function \ url\ \---\ \url detail/func_vector_relational.md#notEqual-function \\b\notEqual\b\ function \ url\ \---\ \url detail/func_vector_relational.md#not_-function \\b\not_\b\ function \ url\ \-\ \url recommended_extensions/README.md\recommended_extensions\url\ \--\ \url recommended_extensions/color_space.md \color_space methods\ url\ \---\ \url recommended_extensions/color_space.md#convertLinearToSRGB-function \\b\convertLinearToSRGB\b\ function \ url\ \---\ \url recommended_extensions/color_space.md#convertSRGBToLinear-function \\b\convertSRGBToLinear\b\ function \ url\ \--\ \url recommended_extensions/constants.md \constants methods\ url\ \---\ \url recommended_extensions/constants.md#e-function \\b\e\b\ function \ url\ \---\ \url recommended_extensions/constants.md#epsilon-function \\b\epsilon\b\ function \ url\ \---\ \url recommended_extensions/constants.md#euler-function \\b\euler\b\ function \ url\ \---\ \url recommended_extensions/constants.md#four_over_pi-function \\b\four_over_pi\b\ function \ url\ \---\ \url recommended_extensions/constants.md#golden_ratio-function \\b\golden_ratio\b\ function \ url\ \---\ \url recommended_extensions/constants.md#half_pi-function \\b\half_pi\b\ function \ url\ \---\ \url recommended_extensions/constants.md#ln_ln_two-function \\b\ln_ln_two\b\ function \ url\ \---\ \url recommended_extensions/constants.md#ln_ten-function \\b\ln_ten\b\ function \ url\ \---\ \url recommended_extensions/constants.md#ln_two-function \\b\ln_two\b\ function \ url\ \---\ \url recommended_extensions/constants.md#one-function \\b\one\b\ function \ url\ \---\ \url recommended_extensions/constants.md#one_over_pi-function \\b\one_over_pi\b\ function \ url\ \---\ \url recommended_extensions/constants.md#one_over_root_two-function \\b\one_over_root_two\b\ function \ url\ \---\ \url recommended_extensions/constants.md#one_over_two_pi-function \\b\one_over_two_pi\b\ function \ url\ \---\ \url recommended_extensions/constants.md#pi-function \\b\pi\b\ function \ url\ \---\ \url recommended_extensions/constants.md#quarter_pi-function \\b\quarter_pi\b\ function \ url\ \---\ \url recommended_extensions/constants.md#root_five-function \\b\root_five\b\ function \ url\ \---\ \url recommended_extensions/constants.md#root_half_pi-function \\b\root_half_pi\b\ function \ url\ \---\ \url recommended_extensions/constants.md#root_ln_four-function \\b\root_ln_four\b\ function \ url\ \---\ \url recommended_extensions/constants.md#root_pi-function \\b\root_pi\b\ function \ url\ \---\ \url recommended_extensions/constants.md#root_three-function \\b\root_three\b\ function \ url\ \---\ \url recommended_extensions/constants.md#root_two-function \\b\root_two\b\ function \ url\ \---\ \url recommended_extensions/constants.md#root_two_pi-function \\b\root_two_pi\b\ function \ url\ \---\ \url recommended_extensions/constants.md#third-function \\b\third\b\ function \ url\ \---\ \url recommended_extensions/constants.md#three_over_two_pi-function \\b\three_over_two_pi\b\ function \ url\ \---\ \url recommended_extensions/constants.md#two_over_pi-function \\b\two_over_pi\b\ function \ url\ \---\ \url recommended_extensions/constants.md#two_over_root_pi-function \\b\two_over_root_pi\b\ function \ url\ \---\ \url recommended_extensions/constants.md#two_pi-function \\b\two_pi\b\ function \ url\ \---\ \url recommended_extensions/constants.md#two_thirds-function \\b\two_thirds\b\ function \ url\ \---\ \url recommended_extensions/constants.md#zero-function \\b\zero\b\ function \ url\ \--\ \url recommended_extensions/epsilon.md \epsilon methods\ url\ \---\ \url recommended_extensions/epsilon.md#epsilonEqual-function \\b\epsilonEqual\b\ function \ url\ \---\ \url recommended_extensions/epsilon.md#epsilonNotEqual-function \\b\epsilonNotEqual\b\ function \ url\ \--\ \url recommended_extensions/integer.md \integer methods\ url\ \---\ \url recommended_extensions/integer.md#iround-function \\b\iround\b\ function \ url\ \---\ \url recommended_extensions/integer.md#uround-function \\b\uround\b\ function \ url\ \--\ \url recommended_extensions/matrix_access.md \matrix_access methods\ url\ \---\ \url recommended_extensions/matrix_access.md#column-function \\b\column\b\ function \ url\ \---\ \url recommended_extensions/matrix_access.md#row-function \\b\row\b\ function \ url\ \--\ \url recommended_extensions/matrix_inverse.md \matrix_inverse methods\ url\ \---\ \url recommended_extensions/matrix_inverse.md#affineInverse-function \\b\affineInverse\b\ function \ url\ \---\ \url recommended_extensions/matrix_inverse.md#inverseTranspose-function \\b\inverseTranspose\b\ function \ url\ \--\ \url recommended_extensions/noise.md \noise methods\ url\ \---\ \url recommended_extensions/noise.md#perlin-function \\b\perlin\b\ function \ url\ \---\ \url recommended_extensions/noise.md#simplex-function \\b\simplex\b\ function \ url\ \--\ \url recommended_extensions/packing.md \packing methods\ url\ \---\ \url recommended_extensions/packing.md#packF2x11_1x10-function \\b\packF2x11_1x10\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packF3x9_E1x5-function \\b\packF3x9_E1x5\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packHalf-function \\b\packHalf\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packHalf1x16-function \\b\packHalf1x16\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packHalf4x16-function \\b\packHalf4x16\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packI3x10_1x2-function \\b\packI3x10_1x2\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packInt2x16-function \\b\packInt2x16\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packInt2x32-function \\b\packInt2x32\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packInt2x8-function \\b\packInt2x8\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packInt4x16-function \\b\packInt4x16\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packInt4x8-function \\b\packInt4x8\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packRGBM-function \\b\packRGBM\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packSnorm-function \\b\packSnorm\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packSnorm1x16-function \\b\packSnorm1x16\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packSnorm1x8-function \\b\packSnorm1x8\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packSnorm2x8-function \\b\packSnorm2x8\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packSnorm3x10_1x2-function \\b\packSnorm3x10_1x2\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packSnorm4x16-function \\b\packSnorm4x16\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packU3x10_1x2-function \\b\packU3x10_1x2\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packUint2x16-function \\b\packUint2x16\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packUint2x32-function \\b\packUint2x32\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packUint2x8-function \\b\packUint2x8\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packUint4x16-function \\b\packUint4x16\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packUint4x8-function \\b\packUint4x8\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packUnorm-function \\b\packUnorm\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packUnorm1x16-function \\b\packUnorm1x16\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packUnorm1x5_1x6_1x5-function \\b\packUnorm1x5_1x6_1x5\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packUnorm1x8-function \\b\packUnorm1x8\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packUnorm2x3_1x2-function \\b\packUnorm2x3_1x2\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packUnorm2x4-function \\b\packUnorm2x4\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packUnorm2x8-function \\b\packUnorm2x8\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packUnorm3x10_1x2-function \\b\packUnorm3x10_1x2\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packUnorm3x5_1x1-function \\b\packUnorm3x5_1x1\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packUnorm4x16-function \\b\packUnorm4x16\b\ function \ url\ \---\ \url recommended_extensions/packing.md#packUnorm4x4-function \\b\packUnorm4x4\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackF2x11_1x10-function \\b\unpackF2x11_1x10\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackF3x9_E1x5-function \\b\unpackF3x9_E1x5\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackHalf-function \\b\unpackHalf\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackHalf1x16-function \\b\unpackHalf1x16\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackHalf4x16-function \\b\unpackHalf4x16\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackI3x10_1x2-function \\b\unpackI3x10_1x2\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackInt2x16-function \\b\unpackInt2x16\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackInt2x32-function \\b\unpackInt2x32\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackInt2x8-function \\b\unpackInt2x8\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackInt4x16-function \\b\unpackInt4x16\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackInt4x8-function \\b\unpackInt4x8\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackRGBM-function \\b\unpackRGBM\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackSnorm-function \\b\unpackSnorm\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackSnorm1x16-function \\b\unpackSnorm1x16\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackSnorm1x8-function \\b\unpackSnorm1x8\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackSnorm2x8-function \\b\unpackSnorm2x8\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackSnorm3x10_1x2-function \\b\unpackSnorm3x10_1x2\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackSnorm4x16-function \\b\unpackSnorm4x16\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackU3x10_1x2-function \\b\unpackU3x10_1x2\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackUint2x16-function \\b\unpackUint2x16\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackUint2x32-function \\b\unpackUint2x32\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackUint2x8-function \\b\unpackUint2x8\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackUint4x16-function \\b\unpackUint4x16\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackUint4x8-function \\b\unpackUint4x8\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackUnorm-function \\b\unpackUnorm\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackUnorm1x16-function \\b\unpackUnorm1x16\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackUnorm1x5_1x6_1x5-function \\b\unpackUnorm1x5_1x6_1x5\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackUnorm1x8-function \\b\unpackUnorm1x8\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackUnorm2x3_1x2-function \\b\unpackUnorm2x3_1x2\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackUnorm2x4-function \\b\unpackUnorm2x4\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackUnorm2x8-function \\b\unpackUnorm2x8\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackUnorm3x10_1x2-function \\b\unpackUnorm3x10_1x2\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackUnorm3x5_1x1-function \\b\unpackUnorm3x5_1x1\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackUnorm4x16-function \\b\unpackUnorm4x16\b\ function \ url\ \---\ \url recommended_extensions/packing.md#unpackUnorm4x4-function \\b\unpackUnorm4x4\b\ function \ url\ \--\ \url recommended_extensions/quaternion.md \quaternion methods\ url\ \---\ \url recommended_extensions/quaternion.md#eulerAngles-function \\b\eulerAngles\b\ function \ url\ \---\ \url recommended_extensions/quaternion.md#mat3_cast-function \\b\mat3_cast\b\ function \ url\ \---\ \url recommended_extensions/quaternion.md#mat4_cast-function \\b\mat4_cast\b\ function \ url\ \---\ \url recommended_extensions/quaternion.md#pitch-function \\b\pitch\b\ function \ url\ \---\ \url recommended_extensions/quaternion.md#quatLookAt-function \\b\quatLookAt\b\ function \ url\ \---\ \url recommended_extensions/quaternion.md#quatLookAtLH-function \\b\quatLookAtLH\b\ function \ url\ \---\ \url recommended_extensions/quaternion.md#quatLookAtRH-function \\b\quatLookAtRH\b\ function \ url\ \---\ \url recommended_extensions/quaternion.md#quat_cast-function \\b\quat_cast\b\ function \ url\ \---\ \url recommended_extensions/quaternion.md#roll-function \\b\roll\b\ function \ url\ \---\ \url recommended_extensions/quaternion.md#yaw-function \\b\yaw\b\ function \ url\ \--\ \url recommended_extensions/random.md \random methods\ url\ \---\ \url recommended_extensions/random.md#ballRand-function \\b\ballRand\b\ function \ url\ \---\ \url recommended_extensions/random.md#circularRand-function \\b\circularRand\b\ function \ url\ \---\ \url recommended_extensions/random.md#diskRand-function \\b\diskRand\b\ function \ url\ \---\ \url recommended_extensions/random.md#gaussRand-function \\b\gaussRand\b\ function \ url\ \---\ \url recommended_extensions/random.md#linearRand-function \\b\linearRand\b\ function \ url\ \---\ \url recommended_extensions/random.md#setSeed-function \\b\setSeed\b\ function \ url\ \---\ \url recommended_extensions/random.md#sphericalRand-function \\b\sphericalRand\b\ function \ url\ \--\ \url recommended_extensions/reciprocal.md \reciprocal methods\ url\ \---\ \url recommended_extensions/reciprocal.md#acot-function \\b\acot\b\ function \ url\ \---\ \url recommended_extensions/reciprocal.md#acoth-function \\b\acoth\b\ function \ url\ \---\ \url recommended_extensions/reciprocal.md#acsc-function \\b\acsc\b\ function \ url\ \---\ \url recommended_extensions/reciprocal.md#acsch-function \\b\acsch\b\ function \ url\ \---\ \url recommended_extensions/reciprocal.md#asec-function \\b\asec\b\ function \ url\ \---\ \url recommended_extensions/reciprocal.md#asech-function \\b\asech\b\ function \ url\ \---\ \url recommended_extensions/reciprocal.md#cot-function \\b\cot\b\ function \ url\ \---\ \url recommended_extensions/reciprocal.md#coth-function \\b\coth\b\ function \ url\ \---\ \url recommended_extensions/reciprocal.md#csc-function \\b\csc\b\ function \ url\ \---\ \url recommended_extensions/reciprocal.md#csch-function \\b\csch\b\ function \ url\ \---\ \url recommended_extensions/reciprocal.md#sec-function \\b\sec\b\ function \ url\ \---\ \url recommended_extensions/reciprocal.md#sech-function \\b\sech\b\ function \ url\ \--\ \url recommended_extensions/round.md \round methods\ url\ \---\ \url recommended_extensions/round.md#ceilMultiple-function \\b\ceilMultiple\b\ function \ url\ \---\ \url recommended_extensions/round.md#ceilPowerOfTwo-function \\b\ceilPowerOfTwo\b\ function \ url\ \---\ \url recommended_extensions/round.md#floorMultiple-function \\b\floorMultiple\b\ function \ url\ \---\ \url recommended_extensions/round.md#floorPowerOfTwo-function \\b\floorPowerOfTwo\b\ function \ url\ \---\ \url recommended_extensions/round.md#roundMultiple-function \\b\roundMultiple\b\ function \ url\ \---\ \url recommended_extensions/round.md#roundPowerOfTwo-function \\b\roundPowerOfTwo\b\ function \ url\ \--\ \url recommended_extensions/type_ptr.md \type_ptr methods\ url\ \---\ \url recommended_extensions/type_ptr.md#make_mat2-function \\b\make_mat2\b\ function \ url\ \---\ \url recommended_extensions/type_ptr.md#make_mat2x2-function \\b\make_mat2x2\b\ function \ url\ \---\ \url recommended_extensions/type_ptr.md#make_mat2x3-function \\b\make_mat2x3\b\ function \ url\ \---\ \url recommended_extensions/type_ptr.md#make_mat2x4-function \\b\make_mat2x4\b\ function \ url\ \---\ \url recommended_extensions/type_ptr.md#make_mat3-function \\b\make_mat3\b\ function \ url\ \---\ \url recommended_extensions/type_ptr.md#make_mat3x2-function \\b\make_mat3x2\b\ function \ url\ \---\ \url recommended_extensions/type_ptr.md#make_mat3x3-function \\b\make_mat3x3\b\ function \ url\ \---\ \url recommended_extensions/type_ptr.md#make_mat3x4-function \\b\make_mat3x4\b\ function \ url\ \---\ \url recommended_extensions/type_ptr.md#make_mat4-function \\b\make_mat4\b\ function \ url\ \---\ \url recommended_extensions/type_ptr.md#make_mat4x2-function \\b\make_mat4x2\b\ function \ url\ \---\ \url recommended_extensions/type_ptr.md#make_mat4x3-function \\b\make_mat4x3\b\ function \ url\ \---\ \url recommended_extensions/type_ptr.md#make_mat4x4-function \\b\make_mat4x4\b\ function \ url\ \---\ \url recommended_extensions/type_ptr.md#make_quat-function \\b\make_quat\b\ function \ url\ \---\ \url recommended_extensions/type_ptr.md#make_vec2-function \\b\make_vec2\b\ function \ url\ \---\ \url recommended_extensions/type_ptr.md#make_vec3-function \\b\make_vec3\b\ function \ url\ \---\ \url recommended_extensions/type_ptr.md#make_vec4-function \\b\make_vec4\b\ function \ url\ \---\ \url recommended_extensions/type_ptr.md#sizeof-function \\b\sizeof\b\ function \ url\ \---\ \url recommended_extensions/type_ptr.md#value_ptr-function \\b\value_ptr\b\ function \ url\ \--\ \url recommended_extensions/ulp.md \ulp methods\ url\ \---\ \url recommended_extensions/ulp.md#float_distance-function \\b\float_distance\b\ function \ url\ \---\ \url recommended_extensions/ulp.md#next_float-function \\b\next_float\b\ function \ url\ \---\ \url recommended_extensions/ulp.md#prev_float-function \\b\prev_float\b\ function \ url\ \-\ \url stable_extensions/README.md\stable_extensions\url\ \--\ \url stable_extensions/matrix_clip_space.md \matrix_clip_space methods\ url\ \---\ \url stable_extensions/matrix_clip_space.md#frustum-function \\b\frustum\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#frustumLH-function \\b\frustumLH\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#frustumLH_NO-function \\b\frustumLH_NO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#frustumLH_ZO-function \\b\frustumLH_ZO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#frustumNO-function \\b\frustumNO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#frustumRH-function \\b\frustumRH\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#frustumRH_NO-function \\b\frustumRH_NO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#frustumRH_ZO-function \\b\frustumRH_ZO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#frustumZO-function \\b\frustumZO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#infinitePerspective-function \\b\infinitePerspective\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#infinitePerspectiveLH-function \\b\infinitePerspectiveLH\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#infinitePerspectiveRH-function \\b\infinitePerspectiveRH\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#ortho-function \\b\ortho\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#orthoLH-function \\b\orthoLH\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#orthoLH_NO-function \\b\orthoLH_NO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#orthoLH_ZO-function \\b\orthoLH_ZO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#orthoNO-function \\b\orthoNO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#orthoRH-function \\b\orthoRH\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#orthoRH_NO-function \\b\orthoRH_NO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#orthoRH_ZO-function \\b\orthoRH_ZO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#orthoZO-function \\b\orthoZO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#perspective-function \\b\perspective\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#perspectiveFov-function \\b\perspectiveFov\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#perspectiveFovLH-function \\b\perspectiveFovLH\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#perspectiveFovLH_NO-function \\b\perspectiveFovLH_NO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#perspectiveFovLH_ZO-function \\b\perspectiveFovLH_ZO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#perspectiveFovNO-function \\b\perspectiveFovNO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#perspectiveFovRH-function \\b\perspectiveFovRH\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#perspectiveFovRH_NO-function \\b\perspectiveFovRH_NO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#perspectiveFovRH_ZO-function \\b\perspectiveFovRH_ZO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#perspectiveFovZO-function \\b\perspectiveFovZO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#perspectiveLH-function \\b\perspectiveLH\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#perspectiveLH_NO-function \\b\perspectiveLH_NO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#perspectiveLH_ZO-function \\b\perspectiveLH_ZO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#perspectiveNO-function \\b\perspectiveNO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#perspectiveRH-function \\b\perspectiveRH\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#perspectiveRH_NO-function \\b\perspectiveRH_NO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#perspectiveRH_ZO-function \\b\perspectiveRH_ZO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#perspectiveZO-function \\b\perspectiveZO\b\ function \ url\ \---\ \url stable_extensions/matrix_clip_space.md#tweakedInfinitePerspective-function \\b\tweakedInfinitePerspective\b\ function \ url\ \--\ \url stable_extensions/matrix_projection.md \matrix_projection methods\ url\ \---\ \url stable_extensions/matrix_projection.md#pickMatrix-function \\b\pickMatrix\b\ function \ url\ \---\ \url stable_extensions/matrix_projection.md#project-function \\b\project\b\ function \ url\ \---\ \url stable_extensions/matrix_projection.md#projectNO-function \\b\projectNO\b\ function \ url\ \---\ \url stable_extensions/matrix_projection.md#projectZO-function \\b\projectZO\b\ function \ url\ \---\ \url stable_extensions/matrix_projection.md#unProject-function \\b\unProject\b\ function \ url\ \---\ \url stable_extensions/matrix_projection.md#unProjectNO-function \\b\unProjectNO\b\ function \ url\ \---\ \url stable_extensions/matrix_projection.md#unProjectZO-function \\b\unProjectZO\b\ function \ url\ \--\ \url stable_extensions/matrix_transform.md \matrix_transform methods\ url\ \---\ \url stable_extensions/matrix_transform.md#identity-function \\b\identity\b\ function \ url\ \---\ \url stable_extensions/matrix_transform.md#lookAt-function \\b\lookAt\b\ function \ url\ \---\ \url stable_extensions/matrix_transform.md#lookAtLH-function \\b\lookAtLH\b\ function \ url\ \---\ \url stable_extensions/matrix_transform.md#lookAtRH-function \\b\lookAtRH\b\ function \ url\ \---\ \url stable_extensions/matrix_transform.md#rotate-function \\b\rotate\b\ function \ url\ \---\ \url stable_extensions/matrix_transform.md#rotate_slow-function \\b\rotate_slow\b\ function \ url\ \---\ \url stable_extensions/matrix_transform.md#scale-function \\b\scale\b\ function \ url\ \---\ \url stable_extensions/matrix_transform.md#scale_slow-function \\b\scale_slow\b\ function \ url\ \---\ \url stable_extensions/matrix_transform.md#translate-function \\b\translate\b\ function \ url\ \--\ \url stable_extensions/quaternion_common.md \quaternion_common methods\ url\ \---\ \url stable_extensions/quaternion_common.md#conjugate-function \\b\conjugate\b\ function \ url\ \---\ \url stable_extensions/quaternion_common.md#lerp-function \\b\lerp\b\ function \ url\ \---\ \url stable_extensions/quaternion_common.md#slerp-function \\b\slerp\b\ function \ url\ \--\ \url stable_extensions/quaternion_trigonometric.md \quaternion_trigonometric methods\ url\ \---\ \url stable_extensions/quaternion_trigonometric.md#angle-function \\b\angle\b\ function \ url\ \---\ \url stable_extensions/quaternion_trigonometric.md#angleAxis-function \\b\angleAxis\b\ function \ url\ \---\ \url stable_extensions/quaternion_trigonometric.md#axis-function \\b\axis\b\ function \ url\ \--\ \url stable_extensions/compatibility.md \compatibility methods\ url\ \---\ \url stable_extensions/compatibility.md#atan2-function \\b\atan2\b\ function \ url\ \---\ \url stable_extensions/compatibility.md#isfinite-function \\b\isfinite\b\ function \ url\ \---\ \url stable_extensions/compatibility.md#lerp-function \\b\lerp\b\ function \ url\ \---\ \url stable_extensions/compatibility.md#saturate-function \\b\saturate\b\ function \ url\ \-\ \url unstable_extensions/README.md\unstable_extensions\url\ \--\ \url unstable_extensions/decompose.md \decompose methods\ url\ \---\ \url unstable_extensions/decompose.md#decompose-function \\b\decompose\b\ function \ url\ \--\ \url unstable_extensions/norm.md \norm methods\ url\ \---\ \url unstable_extensions/norm.md#distance2-function \\b\distance2\b\ function \ url\ \---\ \url unstable_extensions/norm.md#l1Norm-function \\b\l1Norm\b\ function \ url\ \---\ \url unstable_extensions/norm.md#l2Norm-function \\b\l2Norm\b\ function \ url\ \---\ \url unstable_extensions/norm.md#lMaxNorm-function \\b\lMaxNorm\b\ function \ url\ \---\ \url unstable_extensions/norm.md#length2-function \\b\length2\b\ function \ url\ \---\ \url unstable_extensions/norm.md#lxNorm-function \\b\lxNorm\b\ function \ url\ \--\ \url unstable_extensions/polar_coordinates.md \polar_coordinates methods\ url\ \---\ \url unstable_extensions/polar_coordinates.md#euclidean-function \\b\euclidean\b\ function \ url\ \---\ \url unstable_extensions/polar_coordinates.md#polar-function \\b\polar\b\ function \ url\ \--\ \url unstable_extensions/matrix_transform_2d.md \matrix_transform_2d methods\ url\ \---\ \url unstable_extensions/matrix_transform_2d.md#rotate-function \\b\rotate\b\ function \ url\ \---\ \url unstable_extensions/matrix_transform_2d.md#scale-function \\b\scale\b\ function \ url\ \---\ \url unstable_extensions/matrix_transform_2d.md#shearX-function \\b\shearX\b\ function \ url\ \---\ \url unstable_extensions/matrix_transform_2d.md#shearY-function \\b\shearY\b\ function \ url\ \---\ \url unstable_extensions/matrix_transform_2d.md#translate-function \\b\translate\b\ function \ url\ \--\ \url unstable_extensions/rotate_vector.md \rotate_vector methods\ url\ \---\ \url unstable_extensions/rotate_vector.md#orientation-function \\b\orientation\b\ function \ url\ \---\ \url unstable_extensions/rotate_vector.md#rotate-function \\b\rotate\b\ function \ url\ \---\ \url unstable_extensions/rotate_vector.md#rotateX-function \\b\rotateX\b\ function \ url\ \---\ \url unstable_extensions/rotate_vector.md#rotateY-function \\b\rotateY\b\ function \ url\ \---\ \url unstable_extensions/rotate_vector.md#rotateZ-function \\b\rotateZ\b\ function \ url\ \---\ \url unstable_extensions/rotate_vector.md#slerp-function \\b\slerp\b\ function \ url\ \-\ \url other/README.md\other\url\ \--\ \url other/other.md \other methods\ url\ \---\ \url other/other.md#add-function \\b\add\b\ function \ url\ \---\ \url other/other.md#and_-function \\b\and_\b\ function \ url\ \---\ \url other/other.md#cmp-function \\b\cmp\b\ function \ url\ \---\ \url other/other.md#div-function \\b\div\b\ function \ url\ \---\ \url other/other.md#floordiv-function \\b\floordiv\b\ function \ url\ \---\ \url other/other.md#if_else-function \\b\if_else\b\ function \ url\ \---\ \url other/other.md#inv-function \\b\inv\b\ function \ url\ \---\ \url other/other.md#lshift-function \\b\lshift\b\ function \ url\ \---\ \url other/other.md#mul-function \\b\mul\b\ function \ url\ \---\ \url other/other.md#neg-function \\b\neg\b\ function \ url\ \---\ \url other/other.md#or_-function \\b\or_\b\ function \ url\ \---\ \url other/other.md#pos-function \\b\pos\b\ function \ url\ \---\ \url other/other.md#quat_to_vec4-function \\b\quat_to_vec4\b\ function \ url\ \---\ \url other/other.md#rshift-function \\b\rshift\b\ function \ url\ \---\ \url other/other.md#silence-function \\b\silence\b\ function \ url\ \---\ \url other/other.md#sub-function \\b\sub\b\ function \ url\ \---\ \url other/other.md#vec4_to_quat-function \\b\vec4_to_quat\b\ function \ url\ \---\ \url other/other.md#xor-function \\b\xor\b\ function \ url\ \ul\ Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/detail/000077500000000000000000000000001511156275200225675ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/detail/README.md000066400000000000000000000154651511156275200240610ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # Table of Contents * [func\_common methods](func_common.md) * [**abs** function ](func_common.md#abs-function) * [**ceil** function ](func_common.md#ceil-function) * [**clamp** function ](func_common.md#clamp-function) * [**floatBitsToInt** function ](func_common.md#floatBitsToInt-function) * [**floatBitsToUint** function ](func_common.md#floatBitsToUint-function) * [**floor** function ](func_common.md#floor-function) * [**fma** function ](func_common.md#fma-function) * [**fmax** function ](func_common.md#fmax-function) * [**fmin** function ](func_common.md#fmin-function) * [**fract** function ](func_common.md#fract-function) * [**frexp** function ](func_common.md#frexp-function) * [**intBitsToFloat** function ](func_common.md#intBitsToFloat-function) * [**isinf** function ](func_common.md#isinf-function) * [**isnan** function ](func_common.md#isnan-function) * [**ldexp** function ](func_common.md#ldexp-function) * [**max** function ](func_common.md#max-function) * [**min** function ](func_common.md#min-function) * [**mix** function ](func_common.md#mix-function) * [**mod** function ](func_common.md#mod-function) * [**modf** function ](func_common.md#modf-function) * [**round** function ](func_common.md#round-function) * [**roundEven** function ](func_common.md#roundEven-function) * [**sign** function ](func_common.md#sign-function) * [**smoothstep** function ](func_common.md#smoothstep-function) * [**step** function ](func_common.md#step-function) * [**trunc** function ](func_common.md#trunc-function) * [**uintBitsToFloat** function ](func_common.md#uintBitsToFloat-function) * [func\_exponential methods](func_exponential.md) * [**exp** function ](func_exponential.md#exp-function) * [**exp2** function ](func_exponential.md#exp2-function) * [**inversesqrt** function ](func_exponential.md#inversesqrt-function) * [**log** function ](func_exponential.md#log-function) * [**log2** function ](func_exponential.md#log2-function) * [**pow** function ](func_exponential.md#pow-function) * [**sqrt** function ](func_exponential.md#sqrt-function) * [func\_geometric methods](func_geometric.md) * [**cross** function ](func_geometric.md#cross-function) * [**distance** function ](func_geometric.md#distance-function) * [**dot** function ](func_geometric.md#dot-function) * [**faceforward** function ](func_geometric.md#faceforward-function) * [**length** function ](func_geometric.md#length-function) * [**normalize** function ](func_geometric.md#normalize-function) * [**reflect** function ](func_geometric.md#reflect-function) * [**refract** function ](func_geometric.md#refract-function) * [func\_integer methods](func_integer.md) * [**bitCount** function ](func_integer.md#bitCount-function) * [**bitfieldExtract** function ](func_integer.md#bitfieldExtract-function) * [**bitfieldInsert** function ](func_integer.md#bitfieldInsert-function) * [**bitfieldReverse** function ](func_integer.md#bitfieldReverse-function) * [**findLSB** function ](func_integer.md#findLSB-function) * [**findMSB** function ](func_integer.md#findMSB-function) * [**imulExtended** function ](func_integer.md#imulExtended-function) * [**uaddCarry** function ](func_integer.md#uaddCarry-function) * [**umulExtended** function ](func_integer.md#umulExtended-function) * [**usubBorrow** function ](func_integer.md#usubBorrow-function) * [func\_matrix methods](func_matrix.md) * [**determinant** function ](func_matrix.md#determinant-function) * [**inverse** function ](func_matrix.md#inverse-function) * [**matrixCompMult** function ](func_matrix.md#matrixCompMult-function) * [**outerProduct** function ](func_matrix.md#outerProduct-function) * [**transpose** function ](func_matrix.md#transpose-function) * [func\_packing methods](func_packing.md) * [**packDouble2x32** function ](func_packing.md#packDouble2x32-function) * [**packHalf2x16** function ](func_packing.md#packHalf2x16-function) * [**packSnorm2x16** function ](func_packing.md#packSnorm2x16-function) * [**packSnorm4x8** function ](func_packing.md#packSnorm4x8-function) * [**packUnorm2x16** function ](func_packing.md#packUnorm2x16-function) * [**packUnorm4x8** function ](func_packing.md#packUnorm4x8-function) * [**unpackDouble2x32** function ](func_packing.md#unpackDouble2x32-function) * [**unpackHalf2x16** function ](func_packing.md#unpackHalf2x16-function) * [**unpackSnorm2x16** function ](func_packing.md#unpackSnorm2x16-function) * [**unpackSnorm4x8** function ](func_packing.md#unpackSnorm4x8-function) * [**unpackUnorm2x16** function ](func_packing.md#unpackUnorm2x16-function) * [**unpackUnorm4x8** function ](func_packing.md#unpackUnorm4x8-function) * [func\_trigonometric methods](func_trigonometric.md) * [**acos** function ](func_trigonometric.md#acos-function) * [**acosh** function ](func_trigonometric.md#acosh-function) * [**asin** function ](func_trigonometric.md#asin-function) * [**asinh** function ](func_trigonometric.md#asinh-function) * [**atan** function ](func_trigonometric.md#atan-function) * [**atanh** function ](func_trigonometric.md#atanh-function) * [**cos** function ](func_trigonometric.md#cos-function) * [**cosh** function ](func_trigonometric.md#cosh-function) * [**degrees** function ](func_trigonometric.md#degrees-function) * [**radians** function ](func_trigonometric.md#radians-function) * [**sin** function ](func_trigonometric.md#sin-function) * [**sinh** function ](func_trigonometric.md#sinh-function) * [**tan** function ](func_trigonometric.md#tan-function) * [**tanh** function ](func_trigonometric.md#tanh-function) * [func\_vector\_relational methods](func_vector_relational.md) * [**all** function ](func_vector_relational.md#all-function) * [**any** function ](func_vector_relational.md#any-function) * [**equal** function ](func_vector_relational.md#equal-function) * [**greaterThan** function ](func_vector_relational.md#greaterThan-function) * [**greaterThanEqual** function ](func_vector_relational.md#greaterThanEqual-function) * [**lessThan** function ](func_vector_relational.md#lessThan-function) * [**lessThanEqual** function ](func_vector_relational.md#lessThanEqual-function) * [**notEqual** function ](func_vector_relational.md#notEqual-function) * [**not\_** function ](func_vector_relational.md#not_-function) Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/detail/README.sb000066400000000000000000000167141511156275200240630ustar00rootroot00000000000000\h1\Table of Contents\h1\ \ul\ \-\ \url func_common.md \func_common methods\ url\ \--\ \url func_common.md#abs-function \\b\abs\b\ function \ url\ \--\ \url func_common.md#ceil-function \\b\ceil\b\ function \ url\ \--\ \url func_common.md#clamp-function \\b\clamp\b\ function \ url\ \--\ \url func_common.md#floatBitsToInt-function \\b\floatBitsToInt\b\ function \ url\ \--\ \url func_common.md#floatBitsToUint-function \\b\floatBitsToUint\b\ function \ url\ \--\ \url func_common.md#floor-function \\b\floor\b\ function \ url\ \--\ \url func_common.md#fma-function \\b\fma\b\ function \ url\ \--\ \url func_common.md#fmax-function \\b\fmax\b\ function \ url\ \--\ \url func_common.md#fmin-function \\b\fmin\b\ function \ url\ \--\ \url func_common.md#fract-function \\b\fract\b\ function \ url\ \--\ \url func_common.md#frexp-function \\b\frexp\b\ function \ url\ \--\ \url func_common.md#intBitsToFloat-function \\b\intBitsToFloat\b\ function \ url\ \--\ \url func_common.md#isinf-function \\b\isinf\b\ function \ url\ \--\ \url func_common.md#isnan-function \\b\isnan\b\ function \ url\ \--\ \url func_common.md#ldexp-function \\b\ldexp\b\ function \ url\ \--\ \url func_common.md#max-function \\b\max\b\ function \ url\ \--\ \url func_common.md#min-function \\b\min\b\ function \ url\ \--\ \url func_common.md#mix-function \\b\mix\b\ function \ url\ \--\ \url func_common.md#mod-function \\b\mod\b\ function \ url\ \--\ \url func_common.md#modf-function \\b\modf\b\ function \ url\ \--\ \url func_common.md#round-function \\b\round\b\ function \ url\ \--\ \url func_common.md#roundEven-function \\b\roundEven\b\ function \ url\ \--\ \url func_common.md#sign-function \\b\sign\b\ function \ url\ \--\ \url func_common.md#smoothstep-function \\b\smoothstep\b\ function \ url\ \--\ \url func_common.md#step-function \\b\step\b\ function \ url\ \--\ \url func_common.md#trunc-function \\b\trunc\b\ function \ url\ \--\ \url func_common.md#uintBitsToFloat-function \\b\uintBitsToFloat\b\ function \ url\ \-\ \url func_exponential.md \func_exponential methods\ url\ \--\ \url func_exponential.md#exp-function \\b\exp\b\ function \ url\ \--\ \url func_exponential.md#exp2-function \\b\exp2\b\ function \ url\ \--\ \url func_exponential.md#inversesqrt-function \\b\inversesqrt\b\ function \ url\ \--\ \url func_exponential.md#log-function \\b\log\b\ function \ url\ \--\ \url func_exponential.md#log2-function \\b\log2\b\ function \ url\ \--\ \url func_exponential.md#pow-function \\b\pow\b\ function \ url\ \--\ \url func_exponential.md#sqrt-function \\b\sqrt\b\ function \ url\ \-\ \url func_geometric.md \func_geometric methods\ url\ \--\ \url func_geometric.md#cross-function \\b\cross\b\ function \ url\ \--\ \url func_geometric.md#distance-function \\b\distance\b\ function \ url\ \--\ \url func_geometric.md#dot-function \\b\dot\b\ function \ url\ \--\ \url func_geometric.md#faceforward-function \\b\faceforward\b\ function \ url\ \--\ \url func_geometric.md#length-function \\b\length\b\ function \ url\ \--\ \url func_geometric.md#normalize-function \\b\normalize\b\ function \ url\ \--\ \url func_geometric.md#reflect-function \\b\reflect\b\ function \ url\ \--\ \url func_geometric.md#refract-function \\b\refract\b\ function \ url\ \-\ \url func_integer.md \func_integer methods\ url\ \--\ \url func_integer.md#bitCount-function \\b\bitCount\b\ function \ url\ \--\ \url func_integer.md#bitfieldExtract-function \\b\bitfieldExtract\b\ function \ url\ \--\ \url func_integer.md#bitfieldInsert-function \\b\bitfieldInsert\b\ function \ url\ \--\ \url func_integer.md#bitfieldReverse-function \\b\bitfieldReverse\b\ function \ url\ \--\ \url func_integer.md#findLSB-function \\b\findLSB\b\ function \ url\ \--\ \url func_integer.md#findMSB-function \\b\findMSB\b\ function \ url\ \--\ \url func_integer.md#imulExtended-function \\b\imulExtended\b\ function \ url\ \--\ \url func_integer.md#uaddCarry-function \\b\uaddCarry\b\ function \ url\ \--\ \url func_integer.md#umulExtended-function \\b\umulExtended\b\ function \ url\ \--\ \url func_integer.md#usubBorrow-function \\b\usubBorrow\b\ function \ url\ \-\ \url func_matrix.md \func_matrix methods\ url\ \--\ \url func_matrix.md#determinant-function \\b\determinant\b\ function \ url\ \--\ \url func_matrix.md#inverse-function \\b\inverse\b\ function \ url\ \--\ \url func_matrix.md#matrixCompMult-function \\b\matrixCompMult\b\ function \ url\ \--\ \url func_matrix.md#outerProduct-function \\b\outerProduct\b\ function \ url\ \--\ \url func_matrix.md#transpose-function \\b\transpose\b\ function \ url\ \-\ \url func_packing.md \func_packing methods\ url\ \--\ \url func_packing.md#packDouble2x32-function \\b\packDouble2x32\b\ function \ url\ \--\ \url func_packing.md#packHalf2x16-function \\b\packHalf2x16\b\ function \ url\ \--\ \url func_packing.md#packSnorm2x16-function \\b\packSnorm2x16\b\ function \ url\ \--\ \url func_packing.md#packSnorm4x8-function \\b\packSnorm4x8\b\ function \ url\ \--\ \url func_packing.md#packUnorm2x16-function \\b\packUnorm2x16\b\ function \ url\ \--\ \url func_packing.md#packUnorm4x8-function \\b\packUnorm4x8\b\ function \ url\ \--\ \url func_packing.md#unpackDouble2x32-function \\b\unpackDouble2x32\b\ function \ url\ \--\ \url func_packing.md#unpackHalf2x16-function \\b\unpackHalf2x16\b\ function \ url\ \--\ \url func_packing.md#unpackSnorm2x16-function \\b\unpackSnorm2x16\b\ function \ url\ \--\ \url func_packing.md#unpackSnorm4x8-function \\b\unpackSnorm4x8\b\ function \ url\ \--\ \url func_packing.md#unpackUnorm2x16-function \\b\unpackUnorm2x16\b\ function \ url\ \--\ \url func_packing.md#unpackUnorm4x8-function \\b\unpackUnorm4x8\b\ function \ url\ \-\ \url func_trigonometric.md \func_trigonometric methods\ url\ \--\ \url func_trigonometric.md#acos-function \\b\acos\b\ function \ url\ \--\ \url func_trigonometric.md#acosh-function \\b\acosh\b\ function \ url\ \--\ \url func_trigonometric.md#asin-function \\b\asin\b\ function \ url\ \--\ \url func_trigonometric.md#asinh-function \\b\asinh\b\ function \ url\ \--\ \url func_trigonometric.md#atan-function \\b\atan\b\ function \ url\ \--\ \url func_trigonometric.md#atanh-function \\b\atanh\b\ function \ url\ \--\ \url func_trigonometric.md#cos-function \\b\cos\b\ function \ url\ \--\ \url func_trigonometric.md#cosh-function \\b\cosh\b\ function \ url\ \--\ \url func_trigonometric.md#degrees-function \\b\degrees\b\ function \ url\ \--\ \url func_trigonometric.md#radians-function \\b\radians\b\ function \ url\ \--\ \url func_trigonometric.md#sin-function \\b\sin\b\ function \ url\ \--\ \url func_trigonometric.md#sinh-function \\b\sinh\b\ function \ url\ \--\ \url func_trigonometric.md#tan-function \\b\tan\b\ function \ url\ \--\ \url func_trigonometric.md#tanh-function \\b\tanh\b\ function \ url\ \-\ \url func_vector_relational.md \func_vector_relational methods\ url\ \--\ \url func_vector_relational.md#all-function \\b\all\b\ function \ url\ \--\ \url func_vector_relational.md#any-function \\b\any\b\ function \ url\ \--\ \url func_vector_relational.md#equal-function \\b\equal\b\ function \ url\ \--\ \url func_vector_relational.md#greaterThan-function \\b\greaterThan\b\ function \ url\ \--\ \url func_vector_relational.md#greaterThanEqual-function \\b\greaterThanEqual\b\ function \ url\ \--\ \url func_vector_relational.md#lessThan-function \\b\lessThan\b\ function \ url\ \--\ \url func_vector_relational.md#lessThanEqual-function \\b\lessThanEqual\b\ function \ url\ \--\ \url func_vector_relational.md#notEqual-function \\b\notEqual\b\ function \ url\ \--\ \url func_vector_relational.md#not_-function \\b\not_\b\ function \ url\ \ul\ Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/detail/func_common.md000066400000000000000000000577051511156275200254320ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # func\_common methods The following methods are all part of the **func\_common methods**\. It contains common GLSL functions\. ## Table of contents * [**abs** function](#abs-function) * [**ceil** function](#ceil-function) * [**clamp** function](#clamp-function) * [**floatBitsToInt** function](#floatbitstoint-function) * [**floatBitsToUint** function](#floatbitstouint-function) * [**floor** function](#floor-function) * [**fma** function](#fma-function) * [**fmax** function](#fmax-function) * [**fmin** function](#fmin-function) * [**fract** function](#fract-function) * [**frexp** function](#frexp-function) * [**intBitsToFloat** function](#intbitstofloat-function) * [**isinf** function](#isinf-function) * [**isnan** function](#isnan-function) * [**ldexp** function](#ldexp-function) * [**max** function](#max-function) * [**min** function](#min-function) * [**mix** function](#mix-function) * [**mod** function](#mod-function) * [**modf** function](#modf-function) * [**round** function](#round-function) * [**roundEven** function](#roundeven-function) * [**sign** function](#sign-function) * [**smoothstep** function](#smoothstep-function) * [**step** function](#step-function) * [**trunc** function](#trunc-function) * [**uintBitsToFloat** function](#uintbitstofloat-function) ### abs\(\) function #### glm.**abs**(**x**: *float*) -\> *float*   Returns ``` x ``` if ``` x >= 0 ```; otherwise it returns ``` -x ```\. #### glm.**abs**(**x**: *vecN*) -\> *vecN*   For each component ``` c ``` of ``` x ```,   Returns ``` c ``` if ``` c >= 0 ```; otherwise it returns ``` -c ```\. ### ceil\(\) function #### glm.**ceil**(**x**: *float*) -\> *float*   Returns a value equal to the nearest integer that is greater than or equal to ``` x ```\. #### glm.**ceil**(**x**: *vecN*) -\> *vecN*   For each component ``` c ``` of ``` x ```,   Returns a value equal to the nearest integer that is greater than or equal to ``` c ```\. ### clamp\(\) function #### glm.**clamp**(**x**: *number*, **minVal**: *number*, **maxVal**: *number*) -\> *number*   Returns ``` min(max(x, minVal), maxVal) ```\. #### glm.**clamp**(**x**: *vecN*, **minVal**: *number*, **maxVal**: *number*) -\> *vecN*   Returns ``` min(max(x, minVal), maxVal) ``` for each component in ``` x ``` using the floating\-point values   ``` minVal ``` and ``` maxVal ```\. #### glm.**clamp**(**x**: *vecN*, **minVal**: *vecN*, **maxVal**: *vecN*) -\> *vecN*   Returns ``` min(max(x, minVal), maxVal) ``` for each component in ``` x ``` using the floating\-point values   ``` minVal ``` and ``` maxVal ```\. ### floatBitsToInt\(\) function #### glm.**floatBitsToInt**(**v**: *float*) -\> *int*   Returns a signed integer value representing the encoding of a floating\-point value\.   The floating\-point value's bit\-level representation is preserved\. #### glm.**floatBitsToInt**(**v**: *fvecN*) -\> *ivecN*   Returns a signed integer value representing the encoding of a floating\-point value\.   The floating\-point value's bit\-level representation is preserved\. ### floatBitsToUint\(\) function #### glm.**floatBitsToUint**(**v**: *float*) -\> *int*   Returns an unsigned integer value representing the encoding of a floating\-point value\.   The floating\-point value's bit\-level representation is preserved\. #### glm.**floatBitsToUint**(**v**: *fvecN*) -\> *uvecN*   Returns an unsigned integer value representing the encoding of a floating\-point value\.   The floating\-point value's bit\-level representation is preserved\. ### floor\(\) function #### glm.**floor**(**x**: *float*) -\> *float*   Returns a value equal to the nearest integer that is less then or equal to ``` x ```\. #### glm.**floor**(**v**: *vecN*) -\> *vecN*   For each component ``` c ``` of ``` v ```:   Returns a value equal to the nearest integer that is less then or equal to ``` c ```\. ### fma\(\) function #### glm.**fma**(**a**: *float*, **b**: *float*, **c**: *float*) -\> *float*   Computes and returns ``` a * b + c ```\. ### fmax\(\) function #### glm.**fmax**(**x**: *number*, **y**: *number*) -\> *float*   Returns ``` y ``` if ``` x < y ```; otherwise, it returns ``` x ```\. If one of the two arguments is ``` NaN ```, the value   of the other argument is returned\. #### glm.**fmax**(**x**: *vecN*, **y**: *number*) -\> *vecN*   For each component ``` c ``` of ``` x ```:   Returns ``` y ``` if ``` c < y ```; otherwise, it returns ``` c ```\. If one of the two arguments is ``` NaN ```, the value   of the other argument is returned\. #### glm.**fmax**(**x**: *vecN*, **y**: *vecN*) -\> *vecN*   For every index ``` i ```:   Returns ``` y[i] ``` if ``` x[i] < y[i] ```; otherwise, it returns ``` x[i] ```\. If one of the two arguments is   ``` NaN ```, the value of the other argument is returned\. #### glm.**fmax**(**a**: *vecN*, **b**: *vecN*, **c**: *vecN*) -\> *vecN*   Returns ``` fmax(fmax(a, b), c) ```\. #### glm.**fmax**(**a**: *vecN*, **b**: *vecN*, **c**: *vecN*, **d**: *vecN*) -\> *vecN*   Returns ``` fmax(fmax(a, b), fmax(c, d)) ```\. ### fmin\(\) function #### glm.**fmin**(**x**: *number*, **y**: *number*) -\> *float*   Returns ``` y ``` if ``` y < x ```; otherwise, it returns ``` x ```\. If one of the two arguments is ``` NaN ```, the value   of the other argument is returned\. #### glm.**fmin**(**x**: *vecN*, **y**: *number*) -\> *vecN*   For each component ``` c ``` of ``` x ```:   Returns ``` y ``` if ``` y < c ```; otherwise, it returns ``` c ```\. If one of the two arguments is ``` NaN ```, the value   of the other argument is returned\. #### glm.**fmin**(**x**: *vecN*, **y**: *vecN*) -\> *vecN*   For every index ``` i ```:   Returns ``` y[i] ``` if ``` y[i] < x[i] ```; otherwise, it returns ``` x[i] ```\. If one of the two arguments is   ``` NaN ```, the value of the other argument is returned\. #### glm.**fmin**(**a**: *vecN*, **b**: *vecN*, **c **: *vecN*) -\> *vecN*   Returns ``` fmin(fmin(a, b), c) ```\. #### glm.**fmin**(**a**: *vecN*, **b**: *vecN*, **c **: *vecN*, **d**: *vecN*) -\> *vecN*   Returns ``` fmin(fmin(a, b), fmin(c, d)) ```\. ### fract\(\) function #### glm.**fract**(**x**: *float*) -\> *float*   Returns ``` x - floor(x) ```\. #### glm.**fract**(**c**: *vecN*) -\> *vecN*   Returns ``` x - floor(x) ```\. ### frexp\(\) function #### glm.**frexp**(**x**: *float*) -\> *(significant: float, exponent: int)*   Splits ``` x ``` into a floating\-point significand in the range ``` [0.5, 1.0) ``` and an integral exponent   of two, such that: ``` x = significand * exp(2, exponent) ``` #### glm.**frexp**(**x**: *vecN*, **exp**: *ivecN*) -\> *vecN*   Splits ``` x ``` into a floating\-point significand in the range ``` [0.5, 1.0) ``` and an integral exponent   of two, such that: ``` x = significand * exp(2, exponent) ```   The significand is returned by the function and the exponent is returned in the parameter   ``` exp ```\. For a floating\-point value of zero, the significantand exponent are both zero\. For a   floating\-point value that is an infinity or is not a number, the results are undefined\. ### intBitsToFloat\(\) function #### glm.**intBitsToFloat**(**v**: *int*) -\> *float*   Returns a floating\-point value corresponding to a signed integer encoding of a floating\-point   value\. If an ``` inf ``` or ``` NaN ``` is passed in, it will not signal, and the resulting floating point   value is unspecified\. Otherwise, the bit\-level representation is preserved\. #### glm.**intBitsToFloat**(**v**: *ivecN*) -\> *fvecN*   Returns a floating\-point value corresponding to a signed integer encoding of a floating\-point   value\. If an ``` inf ``` or ``` NaN ``` is passed in, it will not signal, and the resulting floating point   value is unspecified\. Otherwise, the bit\-level representation is preserved\. ### isinf\(\) function #### glm.**isinf**(**x**: *float*) -\> *bool*   Returns ``` True ``` if ``` x ``` holds a positive infinity or negative infinity representation in the   underlying implementation's set of floating point representations\.   Returns ``` False ``` otherwise, including for implementations with no infinity representations\. #### glm.**isinf**(**x**: *vecN*) -\> *bvecN*   Returns ``` True ``` if ``` x ``` holds a positive infinity or negative infinity representation in the   underlying implementation's set of floating point representations\.   Returns ``` False ``` otherwise, including for implementations with no infinity representations\. #### glm.**isinf**(**x**: *quat*) -\> *bvecN*   Returns ``` True ``` if ``` x ``` holds a positive infinity or negative infinity representation in the   underlying implementation's set of floating point representations\.   Returns ``` False ``` otherwise, including for implementations with no infinity representations\. ### isnan\(\) function #### glm.**isnan**(**x**: *float*) -\> *bool*   Returns ``` True ``` if ``` x ``` holds a ``` NaN ``` \(not a number\) representation in the underlying   implementation's set of floating point representations\.   Returns ``` False ``` otherwise, including for implementations with no ``` NaN ``` representations\. #### glm.**isnan**(**x**: *vecN*) -\> *bvecN*   Returns ``` True ``` if ``` x ``` holds a ``` NaN ``` \(not a number\) representation in the underlying   implementation's set of floating point representations\.   Returns ``` False ``` otherwise, including for implementations with no ``` NaN ``` representations\. #### glm.**isnan**(**x**: *quat*) -\> *bvecN*   Returns ``` True ``` if ``` x ``` holds a ``` NaN ``` \(not a number\) representation in the underlying   implementation's set of floating point representations\.   Returns ``` False ``` otherwise, including for implementations with no ``` NaN ``` representations\. ### ldexp\(\) function #### glm.**ldexp**(**x**: *number*, **exp**: *int*) -\> *float*   Builds a floating\-point number from ``` x ``` and the corresponding integral exponent of two in   ``` exp ```, returning: ``` significand * exp(2, exponent) ```\. If this product is too large to be   represented in the floating\-point type, the result is undefined\. #### glm.**ldexp**(**x**: *vecN*, **exp**: *ivecN*) -\> *vecN*   Builds a floating\-point number from ``` x ``` and the corresponding integral exponent of two in   ``` exp ```, returning: ``` significand * exp(2, exponent) ```\. If this product is too large to be   represented in the floating\-point type, the result is undefined\. ### max\(\) function #### glm.**max**(**x**: *number*, **y**: *number*) -\> *float*   Returns ``` y ``` if ``` x < y ```; otherwise, it returns ``` x ```\. #### glm.**max**(**x**: *vecN*, **y**: *number*) -\> *vecN*   Returns ``` y ``` if ``` x < y ```; otherwise, it returns ``` x ```\. #### glm.**max**(**x**: *vecN*, **y**: *vecN*) -\> *vecN*   Returns ``` y ``` if ``` x < y ```; otherwise, it returns ``` x ```\. #### glm.**max**(**a**: *number*, **b**: *number*, **c**: *number*) -\> *float*   Returns the maximum value of 3 inputs\. #### glm.**max**(**a**: *vecN*, **b**: *vecN*, **c**: *vecN*) -\> *vecN*   Returns the maximum component wise value of 3 inputs\. #### glm.**max**(**a**: *number*, **b**: *number*, **c**: *number*, **d**: *number*) -\> *float*   Returns the maximum value of 4 inputs\. #### glm.**max**(**a**: *vecN*, **b**: *vecN*, **c**: *vecN*, **d**: *vecN*) -\> *vecN*   Returns the maximum component wise value of 4 inputs\. #### glm.**max**(**iterable**) -\> *any*   Returns the greatest number or the maximum component wise value respectively\. ### min\(\) function #### glm.**min**(**x**: *number*, **y**: *number*) -\> *float*   Returns ``` y ``` if ``` y < x ```; otherwise, it returns ``` x ```\. #### glm.**min**(**x**: *vecN*, **y**: *number*) -\> *vecN*   Returns ``` y ``` if ``` y < x ```; otherwise, it returns ``` x ```\. #### glm.**min**(**x**: *vecN*, **y**: *vecN*) -\> *vecN*   Returns ``` y ``` if ``` y < x ```; otherwise, it returns ``` x ```\. #### glm.**min**(**a**: *number*, **b**: *number*, **c**: *number*) -\> *float*   Returns the minimum value of 3 inputs\. #### glm.**min**(**a**: *vecN*, **b**: *vecN*, **c**: *vecN*) -\> *vecN*   Returns the minimum component wise value of 3 inputs\. #### glm.**min**(**a**: *number*, **b**: *number*, **c**: *number*, **d**: *number*) -\> *float*   Returns the minimum value of 4 inputs\. #### glm.**min**(**a**: *vecN*, **b**: *vecN*, **c**: *vecN*, **d**: *vecN*) -\> *vecN*   Returns the minimum component wise value of 4 inputs\. #### glm.**min**(**iterable**) -\> *any*   Returns the smallest number or the minimum component wise value respectively\. ### mix\(\) function #### glm.**mix**(**x**: *number*, **y**: *number*, **a**: *float*) -\> *number*   Returns ``` x * (1.0 - a) + y * a ```, i\.e\., the linear blend of ``` x ``` and ``` y ``` using the floating\-point   value ``` a ```\. The value for ``` a ``` is not restricted to the range ``` [0, 1] ```\. #### glm.**mix**(**x**: *number*, **y**: *number*, **a**: *bool*) -\> *number*   Returns ``` y ``` if ``` a ``` is ``` True ``` and ``` x ``` otherwise\. #### glm.**mix**(**x**: *vecN*, **y**: *vecN*, **a**: *fvecN*) -\> *vecN*   Returns ``` x * (1.0 - a) + y * a ```, i\.e\., the linear blend of ``` x ``` and ``` y ``` using the floating\-point   value ``` a ```\. The value for ``` a ``` is not restricted to the range ``` [0, 1] ```\. #### glm.**mix**(**x**: *vecN*, **y**: *vecN*, **a**: *bvecN*) -\> *vecN*   For each component index ``` i ```:   Returns ``` y[i] ``` if ``` a[i] ``` is ``` True ``` and ``` x[i] ``` otherwise\. #### glm.**mix**(**x**: *matNxM*, **y**: *matNxM*, **a**: *fmatNxM*) -\> *matNxM*   Returns ``` x * (1.0 - a) + y * a ```, i\.e\., the linear blend of ``` x ``` and ``` y ``` using the floating\-point   value ``` a ``` for each component\. The value for ``` a ``` is not restricted to the range ``` [0, 1] ```\. #### glm.**mix**(**x**: *matNxM*, **y**: *matNxM*, **a**: *float*) -\> *matNxM*   Returns ``` x * (1.0 - a) + y * a ```, i\.e\., the linear blend of ``` x ``` and ``` y ``` using the floating\-point   value ``` a ``` for each component\. The value for ``` a ``` is not restricted to the range ``` [0, 1] ```\. #### glm.**mix**(**x**: *quat*, **y**: *quat*, **a**: *float*) -\> *quat*   Spherical linear interpolation of two quaternions\. The interpolation is oriented and the   rotation is performed at constant speed\. For short path spherical linear interpolation, use   the ``` slerp ``` function\. ### mod\(\) function #### glm.**mod**(**a**, **b**) -\> *Any*   Equivalent to ``` a % b ```\. ### modf\(\) function #### glm.**modf**(**x**: *float*) -\> *(fraction, integer)*   Returns the fractional part of ``` x ``` and the integer part \(as a whole number floating point value\)\. #### glm.**modf**(**x**: *vecN*, **i**: *vecN*) -\> *vecN*   Returns the fractional part of ``` x ``` and sets ``` i ``` to the integer part \(as a whole number floating   point value\)\. ### round\(\) function #### glm.**round**(**x**: *number*) -\> *float*   Returns a value equal to the nearest integer to ``` x ```\. The fraction ``` 0.5 ``` will round in a   direction chosen by the implementation, presumably the direction that is fastest\. This   includes the possibility that ``` round(x) ``` returns the same value as ``` roundEven(x) ``` #### glm.**round**(**x**: *vecN*) -\> *vecN*   Returns a value equal to the nearest integer to ``` x ```\. The fraction ``` 0.5 ``` will round in a   direction chosen by the implementation, presumably the direction that is fastest\. This   includes the possibility that ``` round(x) ``` returns the same value as ``` roundEven(x) ``` for all   values of ``` x ```\. ### roundEven\(\) function #### glm.**roundEven**(**x**: *number*) -\> *float*   Returns a value equal to the nearest integer to ``` x ```\. A fractional part of ``` 0.5 ``` will round   toward the nearest even integer\. \(Both ``` 3.5 ``` and ``` 4.5 ``` for ``` x ``` will return ``` 4.0 ```\.\) #### glm.**roundEven**(**x**: *vecN*) -\> *vecN*   Returns a value equal to the nearest integer to ``` x ```\. A fractional part of ``` 0.5 ``` will round   toward the nearest even integer\. \(Both ``` 3.5 ``` and ``` 4.5 ``` for ``` x ``` will return ``` 4.0 ```\.\) ### sign\(\) function #### glm.**sign**(**x**: *number*) -\> *float*   Returns ``` 1.0 ``` if ``` x > 0 ```, ``` 0.0 ``` if ``` x == 0 ```, or ``` -1.0 ``` if ``` x < 0 ```\. #### glm.**sign**(**x**: *vecN*) -\> *vecN*   For every component ``` c ``` of ``` x ```:   Returns ``` 1.0 ``` if ``` x > 0 ```, ``` 0.0 ``` if ``` x == 0 ```, or ``` -1.0 ``` if ``` x < 0 ```\. ### smoothstep\(\) function #### glm.**smoothstep**(**edge0**: *number*, **edge1**: *number*, **x**: *number*) -\> *float*   Returns ``` 0.0 ``` if ``` x <= edge0 ``` and ``` 1.0 ``` if ``` x >= edge1 ``` and performs smooth Hermite interpolation   between ``` 0 ``` and ``` 1 ``` when ``` edge0 < x < edge1 ```\. This is useful in cases where you would want a   threshold function with a smooth transition\. This is equivalent to :   ``` t = clamp((x - edge0) / (edge1 - edge0), 0, 1) ```   ``` return t * t * (3 - 2 * t) ```   Results are undefined if ``` edge0 >= edge1 ```\. #### glm.**smoothstep**(**edge0**: *number*, **edge1**: *number*, **x**: *vecN*) -\> *vecN*   Returns ``` 0.0 ``` if ``` x <= edge0 ``` and ``` 1.0 ``` if ``` x >= edge1 ``` and performs smooth Hermite interpolation   between ``` 0 ``` and ``` 1 ``` when ``` edge0 < x < edge1 ```\. This is useful in cases where you would want a   threshold function with a smooth transition\. This is equivalent to :   ``` t = clamp((x - edge0) / (edge1 - edge0), 0, 1) ```   ``` return t * t * (3 - 2 * t) ```   Results are undefined if ``` edge0 >= edge1 ```\. #### glm.**smoothstep**(**edge0**: *vecN*, **edge1**: *vecN*, **x**: *vecN*) -\> *vecN*   Returns ``` 0.0 ``` if ``` x <= edge0 ``` and ``` 1.0 ``` if ``` x >= edge1 ``` and performs smooth Hermite interpolation   between ``` 0 ``` and ``` 1 ``` when ``` edge0 < x < edge1 ```\. This is useful in cases where you would want a   threshold function with a smooth transition\. This is equivalent to :   ``` t = clamp((x - edge0) / (edge1 - edge0), 0, 1) ```   ``` return t * t * (3 - 2 * t) ```   Results are undefined if ``` edge0 >= edge1 ```\. ### step\(\) function #### glm.**step**(**edge**: *number*, **x**: *number*) -\> *float*   Returns ``` 0.0 ``` if ``` x < edge ```, otherwise it returns ``` 1.0 ```\. #### glm.**step**(**edge**: *number*, **x**: *vecN*) -\> *vecN*   For every component ``` c ``` of ``` x ```:   Returns ``` 0.0 ``` if ``` c < edge ```, otherwise it returns ``` 1.0 ```\. #### glm.**step**(**edge**: *vecN*, **x**: *vecN*) -\> *vecN*   For every index ``` i ```:   Returns ``` 0.0 ``` if ``` x[i] < edge[i] ```, otherwise it returns ``` 1.0 ```\. ### trunc\(\) function #### glm.**trunc**(**x**: *number*) -\> *float*   Returns a value equal to the nearest integer to ``` x ``` whose absolute value is not larger than   the absolute value of ``` x ```\. #### glm.**trunc**(**x**: *vecN*) -\> *vecN*   For every component ``` c ``` of ``` x ```:   Returns a value equal to the nearest integer to ``` c ``` whose absolute value is not larger than   the absolute value of ``` c ```\. ### uintBitsToFloat\(\) function #### glm.**uintBitsToFloat**(**v**: *int*) -\> *float*   Returns a floating\-point value corresponding to an unsigned integer encoding of a floating\-point   value\. If an ``` inf ``` or ``` NaN ``` is passed in, it will not signal, and the resulting floating point   value is unspecified\. Otherwise, the bit\-level representation is preserved\. #### glm.**uintBitsToFloat**(**v**: *ivecN*) -\> *fvecN*   Returns a floating\-point value corresponding to an unsigned integer encoding of a floating\-point   value\. If an ``` inf ``` or ``` NaN ``` is passed in, it will not signal, and the resulting floating point   value is unspecified\. Otherwise, the bit\-level representation is preserved\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/detail/func_common.sb000066400000000000000000000654151511156275200254330ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\func_common methods\h1\ The following methods are all part of the \b\func_common methods\b\. It contains common GLSL functions. \h2\Table of contents\h2\ \ul\ \-\\url #abs-function\\b\abs\b\ function\url\ \-\\url #ceil-function\\b\ceil\b\ function\url\ \-\\url #clamp-function\\b\clamp\b\ function\url\ \-\\url #floatbitstoint-function\\b\floatBitsToInt\b\ function\url\ \-\\url #floatbitstouint-function\\b\floatBitsToUint\b\ function\url\ \-\\url #floor-function\\b\floor\b\ function\url\ \-\\url #fma-function\\b\fma\b\ function\url\ \-\\url #fmax-function\\b\fmax\b\ function\url\ \-\\url #fmin-function\\b\fmin\b\ function\url\ \-\\url #fract-function\\b\fract\b\ function\url\ \-\\url #frexp-function\\b\frexp\b\ function\url\ \-\\url #intbitstofloat-function\\b\intBitsToFloat\b\ function\url\ \-\\url #isinf-function\\b\isinf\b\ function\url\ \-\\url #isnan-function\\b\isnan\b\ function\url\ \-\\url #ldexp-function\\b\ldexp\b\ function\url\ \-\\url #max-function\\b\max\b\ function\url\ \-\\url #min-function\\b\min\b\ function\url\ \-\\url #mix-function\\b\mix\b\ function\url\ \-\\url #mod-function\\b\mod\b\ function\url\ \-\\url #modf-function\\b\modf\b\ function\url\ \-\\url #round-function\\b\round\b\ function\url\ \-\\url #roundeven-function\\b\roundEven\b\ function\url\ \-\\url #sign-function\\b\sign\b\ function\url\ \-\\url #smoothstep-function\\b\smoothstep\b\ function\url\ \-\\url #step-function\\b\step\b\ function\url\ \-\\url #trunc-function\\b\trunc\b\ function\url\ \-\\url #uintbitstofloat-function\\b\uintBitsToFloat\b\ function\url\ \ul\ \h3\abs() function\h3\ \raw\#### glm.**abs**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Returns \code\x\code\ if \code\x >= 0\code\; otherwise it returns \code\-x\code\. \raw\#### glm.**abs**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\For each component \code\c\code\ of \code\x\code\, \raw\  \raw\Returns \code\c\code\ if \code\c >= 0\code\; otherwise it returns \code\-c\code\. \h3\ceil() function\h3\ \raw\#### glm.**ceil**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Returns a value equal to the nearest integer that is greater than or equal to \code\x\code\. \raw\#### glm.**ceil**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\For each component \code\c\code\ of \code\x\code\, \raw\  \raw\Returns a value equal to the nearest integer that is greater than or equal to \code\c\code\. \h3\clamp() function\h3\ \raw\#### glm.**clamp**(**x**: *number*, **minVal**: *number*, **maxVal**: *number*) -\\> *number*\raw\ \raw\  \raw\Returns \code\min(max(x, minVal), maxVal)\code\. \raw\#### glm.**clamp**(**x**: *vecN*, **minVal**: *number*, **maxVal**: *number*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\min(max(x, minVal), maxVal)\code\ for each component in \code\x\code\ using the floating-point values \raw\  \raw\\code\minVal\code\ and \code\maxVal\code\. \raw\#### glm.**clamp**(**x**: *vecN*, **minVal**: *vecN*, **maxVal**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\min(max(x, minVal), maxVal)\code\ for each component in \code\x\code\ using the floating-point values \raw\  \raw\\code\minVal\code\ and \code\maxVal\code\. \h3\floatBitsToInt() function\h3\ \raw\#### glm.**floatBitsToInt**(**v**: *float*) -\\> *int*\raw\ \raw\  \raw\Returns a signed integer value representing the encoding of a floating-point value. \raw\  \raw\The floating-point value's bit-level representation is preserved. \raw\#### glm.**floatBitsToInt**(**v**: *fvecN*) -\\> *ivecN*\raw\ \raw\  \raw\Returns a signed integer value representing the encoding of a floating-point value. \raw\  \raw\The floating-point value's bit-level representation is preserved. \h3\floatBitsToUint() function\h3\ \raw\#### glm.**floatBitsToUint**(**v**: *float*) -\\> *int*\raw\ \raw\  \raw\Returns an unsigned integer value representing the encoding of a floating-point value. \raw\  \raw\The floating-point value's bit-level representation is preserved. \raw\#### glm.**floatBitsToUint**(**v**: *fvecN*) -\\> *uvecN*\raw\ \raw\  \raw\Returns an unsigned integer value representing the encoding of a floating-point value. \raw\  \raw\The floating-point value's bit-level representation is preserved. \h3\floor() function\h3\ \raw\#### glm.**floor**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Returns a value equal to the nearest integer that is less then or equal to \code\x\code\. \raw\#### glm.**floor**(**v**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\For each component \code\c\code\ of \code\v\code\: \raw\  \raw\Returns a value equal to the nearest integer that is less then or equal to \code\c\code\. \h3\fma() function\h3\ \raw\#### glm.**fma**(**a**: *float*, **b**: *float*, **c**: *float*) -\\> *float*\raw\ \raw\  \raw\Computes and returns \code\a * b + c\code\. \h3\fmax() function\h3\ \raw\#### glm.**fmax**(**x**: *number*, **y**: *number*) -\\> *float*\raw\ \raw\  \raw\Returns \code\y\code\ if \code\x < y\code\; otherwise, it returns \code\x\code\. If one of the two arguments is \code\NaN\code\, the value \raw\  \raw\of the other argument is returned. \raw\#### glm.**fmax**(**x**: *vecN*, **y**: *number*) -\\> *vecN*\raw\ \raw\  \raw\For each component \code\c\code\ of \code\x\code\: \raw\  \raw\Returns \code\y\code\ if \code\c < y\code\; otherwise, it returns \code\c\code\. If one of the two arguments is \code\NaN\code\, the value \raw\  \raw\of the other argument is returned. \raw\#### glm.**fmax**(**x**: *vecN*, **y**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\For every index \code\i\code\: \raw\  \raw\Returns \code\y[i]\code\ if \code\x[i] < y[i]\code\; otherwise, it returns \code\x[i]\code\. If one of the two arguments is \raw\  \raw\\code\NaN\code\, the value of the other argument is returned. \raw\#### glm.**fmax**(**a**: *vecN*, **b**: *vecN*, **c**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\fmax(fmax(a, b), c)\code\. \raw\#### glm.**fmax**(**a**: *vecN*, **b**: *vecN*, **c**: *vecN*, **d**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\fmax(fmax(a, b), fmax(c, d))\code\. \h3\fmin() function\h3\ \raw\#### glm.**fmin**(**x**: *number*, **y**: *number*) -\\> *float*\raw\ \raw\  \raw\Returns \code\y\code\ if \code\y < x\code\; otherwise, it returns \code\x\code\. If one of the two arguments is \code\NaN\code\, the value \raw\  \raw\of the other argument is returned. \raw\#### glm.**fmin**(**x**: *vecN*, **y**: *number*) -\\> *vecN*\raw\ \raw\  \raw\For each component \code\c\code\ of \code\x\code\: \raw\  \raw\Returns \code\y\code\ if \code\y < c\code\; otherwise, it returns \code\c\code\. If one of the two arguments is \code\NaN\code\, the value \raw\  \raw\of the other argument is returned. \raw\#### glm.**fmin**(**x**: *vecN*, **y**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\For every index \code\i\code\: \raw\  \raw\Returns \code\y[i]\code\ if \code\y[i] < x[i]\code\; otherwise, it returns \code\x[i]\code\. If one of the two arguments is \raw\  \raw\\code\NaN\code\, the value of the other argument is returned. \raw\#### glm.**fmin**(**a**: *vecN*, **b**: *vecN*, **c **: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\fmin(fmin(a, b), c)\code\. \raw\#### glm.**fmin**(**a**: *vecN*, **b**: *vecN*, **c **: *vecN*, **d**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\fmin(fmin(a, b), fmin(c, d))\code\. \h3\fract() function\h3\ \raw\#### glm.**fract**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Returns \code\x - floor(x)\code\. \raw\#### glm.**fract**(**c**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\x - floor(x)\code\. \h3\frexp() function\h3\ \raw\#### glm.**frexp**(**x**: *float*) -\\> *(significant: float, exponent: int)*\raw\ \raw\  \raw\Splits \code\x\code\ into a floating-point significand in the range \code\[0.5, 1.0)\code\ and an integral exponent \raw\  \raw\of two, such that: \code\x = significand * exp(2, exponent)\code\ \raw\#### glm.**frexp**(**x**: *vecN*, **exp**: *ivecN*) -\\> *vecN*\raw\ \raw\  \raw\Splits \code\x\code\ into a floating-point significand in the range \code\[0.5, 1.0)\code\ and an integral exponent \raw\  \raw\of two, such that: \code\x = significand * exp(2, exponent)\code\ \raw\  \raw\The significand is returned by the function and the exponent is returned in the parameter \raw\  \raw\\code\exp\code\. For a floating-point value of zero, the significantand exponent are both zero. For a \raw\  \raw\floating-point value that is an infinity or is not a number, the results are undefined. \h3\intBitsToFloat() function\h3\ \raw\#### glm.**intBitsToFloat**(**v**: *int*) -\\> *float*\raw\ \raw\  \raw\Returns a floating-point value corresponding to a signed integer encoding of a floating-point \raw\  \raw\value. If an \code\inf\code\ or \code\NaN\code\ is passed in, it will not signal, and the resulting floating point \raw\  \raw\value is unspecified. Otherwise, the bit-level representation is preserved. \raw\#### glm.**intBitsToFloat**(**v**: *ivecN*) -\\> *fvecN*\raw\ \raw\  \raw\Returns a floating-point value corresponding to a signed integer encoding of a floating-point \raw\  \raw\value. If an \code\inf\code\ or \code\NaN\code\ is passed in, it will not signal, and the resulting floating point \raw\  \raw\value is unspecified. Otherwise, the bit-level representation is preserved. \h3\isinf() function\h3\ \raw\#### glm.**isinf**(**x**: *float*) -\\> *bool*\raw\ \raw\  \raw\Returns \code\True\code\ if \code\x\code\ holds a positive infinity or negative infinity representation in the \raw\  \raw\underlying implementation's set of floating point representations. \raw\  \raw\Returns \code\False\code\ otherwise, including for implementations with no infinity representations. \raw\#### glm.**isinf**(**x**: *vecN*) -\\> *bvecN*\raw\ \raw\  \raw\Returns \code\True\code\ if \code\x\code\ holds a positive infinity or negative infinity representation in the \raw\  \raw\underlying implementation's set of floating point representations. \raw\  \raw\Returns \code\False\code\ otherwise, including for implementations with no infinity representations. \raw\#### glm.**isinf**(**x**: *quat*) -\\> *bvecN*\raw\ \raw\  \raw\Returns \code\True\code\ if \code\x\code\ holds a positive infinity or negative infinity representation in the \raw\  \raw\underlying implementation's set of floating point representations. \raw\  \raw\Returns \code\False\code\ otherwise, including for implementations with no infinity representations. \h3\isnan() function\h3\ \raw\#### glm.**isnan**(**x**: *float*) -\\> *bool*\raw\ \raw\  \raw\Returns \code\True\code\ if \code\x\code\ holds a \code\NaN\code\ (not a number) representation in the underlying \raw\  \raw\implementation's set of floating point representations. \raw\  \raw\Returns \code\False\code\ otherwise, including for implementations with no \code\NaN\code\ representations. \raw\#### glm.**isnan**(**x**: *vecN*) -\\> *bvecN*\raw\ \raw\  \raw\Returns \code\True\code\ if \code\x\code\ holds a \code\NaN\code\ (not a number) representation in the underlying \raw\  \raw\implementation's set of floating point representations. \raw\  \raw\Returns \code\False\code\ otherwise, including for implementations with no \code\NaN\code\ representations. \raw\#### glm.**isnan**(**x**: *quat*) -\\> *bvecN*\raw\ \raw\  \raw\Returns \code\True\code\ if \code\x\code\ holds a \code\NaN\code\ (not a number) representation in the underlying \raw\  \raw\implementation's set of floating point representations. \raw\  \raw\Returns \code\False\code\ otherwise, including for implementations with no \code\NaN\code\ representations. \h3\ldexp() function\h3\ \raw\#### glm.**ldexp**(**x**: *number*, **exp**: *int*) -\\> *float*\raw\ \raw\  \raw\Builds a floating-point number from \code\x\code\ and the corresponding integral exponent of two in \raw\  \raw\\code\exp\code\, returning: \code\significand * exp(2, exponent)\code\. If this product is too large to be \raw\  \raw\represented in the floating-point type, the result is undefined. \raw\#### glm.**ldexp**(**x**: *vecN*, **exp**: *ivecN*) -\\> *vecN*\raw\ \raw\  \raw\Builds a floating-point number from \code\x\code\ and the corresponding integral exponent of two in \raw\  \raw\\code\exp\code\, returning: \code\significand * exp(2, exponent)\code\. If this product is too large to be \raw\  \raw\represented in the floating-point type, the result is undefined. \h3\max() function\h3\ \raw\#### glm.**max**(**x**: *number*, **y**: *number*) -\\> *float*\raw\ \raw\  \raw\Returns \code\y\code\ if \code\x < y\code\; otherwise, it returns \code\x\code\. \raw\#### glm.**max**(**x**: *vecN*, **y**: *number*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\y\code\ if \code\x < y\code\; otherwise, it returns \code\x\code\. \raw\#### glm.**max**(**x**: *vecN*, **y**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\y\code\ if \code\x < y\code\; otherwise, it returns \code\x\code\. \raw\#### glm.**max**(**a**: *number*, **b**: *number*, **c**: *number*) -\\> *float*\raw\ \raw\  \raw\Returns the maximum value of 3 inputs. \raw\#### glm.**max**(**a**: *vecN*, **b**: *vecN*, **c**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns the maximum component wise value of 3 inputs. \raw\#### glm.**max**(**a**: *number*, **b**: *number*, **c**: *number*, **d**: *number*) -\\> *float*\raw\ \raw\  \raw\Returns the maximum value of 4 inputs. \raw\#### glm.**max**(**a**: *vecN*, **b**: *vecN*, **c**: *vecN*, **d**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns the maximum component wise value of 4 inputs. \raw\#### glm.**max**(**iterable**) -\\> *any*\raw\ \raw\  \raw\Returns the greatest number or the maximum component wise value respectively. \h3\min() function\h3\ \raw\#### glm.**min**(**x**: *number*, **y**: *number*) -\\> *float*\raw\ \raw\  \raw\Returns \code\y\code\ if \code\y < x\code\; otherwise, it returns \code\x\code\. \raw\#### glm.**min**(**x**: *vecN*, **y**: *number*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\y\code\ if \code\y < x\code\; otherwise, it returns \code\x\code\. \raw\#### glm.**min**(**x**: *vecN*, **y**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\y\code\ if \code\y < x\code\; otherwise, it returns \code\x\code\. \raw\#### glm.**min**(**a**: *number*, **b**: *number*, **c**: *number*) -\\> *float*\raw\ \raw\  \raw\Returns the minimum value of 3 inputs. \raw\#### glm.**min**(**a**: *vecN*, **b**: *vecN*, **c**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns the minimum component wise value of 3 inputs. \raw\#### glm.**min**(**a**: *number*, **b**: *number*, **c**: *number*, **d**: *number*) -\\> *float*\raw\ \raw\  \raw\Returns the minimum value of 4 inputs. \raw\#### glm.**min**(**a**: *vecN*, **b**: *vecN*, **c**: *vecN*, **d**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns the minimum component wise value of 4 inputs. \raw\#### glm.**min**(**iterable**) -\\> *any*\raw\ \raw\  \raw\Returns the smallest number or the minimum component wise value respectively. \h3\mix() function\h3\ \raw\#### glm.**mix**(**x**: *number*, **y**: *number*, **a**: *float*) -\\> *number*\raw\ \raw\  \raw\Returns \code\x * (1.0 - a) + y * a\code\, i.e., the linear blend of \code\x\code\ and \code\y\code\ using the floating-point \raw\  \raw\value \code\a\code\. The value for \code\a\code\ is not restricted to the range \code\[0, 1]\code\. \raw\#### glm.**mix**(**x**: *number*, **y**: *number*, **a**: *bool*) -\\> *number*\raw\ \raw\  \raw\Returns \code\y\code\ if \code\a\code\ is \code\True\code\ and \code\x\code\ otherwise. \raw\#### glm.**mix**(**x**: *vecN*, **y**: *vecN*, **a**: *fvecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\x * (1.0 - a) + y * a\code\, i.e., the linear blend of \code\x\code\ and \code\y\code\ using the floating-point \raw\  \raw\value \code\a\code\. The value for \code\a\code\ is not restricted to the range \code\[0, 1]\code\. \raw\#### glm.**mix**(**x**: *vecN*, **y**: *vecN*, **a**: *bvecN*) -\\> *vecN*\raw\ \raw\  \raw\For each component index \code\i\code\: \raw\  \raw\Returns \code\y[i]\code\ if \code\a[i]\code\ is \code\True\code\ and \code\x[i]\code\ otherwise. \raw\#### glm.**mix**(**x**: *matNxM*, **y**: *matNxM*, **a**: *fmatNxM*) -\\> *matNxM*\raw\ \raw\  \raw\Returns \code\x * (1.0 - a) + y * a\code\, i.e., the linear blend of \code\x\code\ and \code\y\code\ using the floating-point \raw\  \raw\value \code\a\code\ for each component. The value for \code\a\code\ is not restricted to the range \code\[0, 1]\code\. \raw\#### glm.**mix**(**x**: *matNxM*, **y**: *matNxM*, **a**: *float*) -\\> *matNxM*\raw\ \raw\  \raw\Returns \code\x * (1.0 - a) + y * a\code\, i.e., the linear blend of \code\x\code\ and \code\y\code\ using the floating-point \raw\  \raw\value \code\a\code\ for each component. The value for \code\a\code\ is not restricted to the range \code\[0, 1]\code\. \raw\#### glm.**mix**(**x**: *quat*, **y**: *quat*, **a**: *float*) -\\> *quat*\raw\ \raw\  \raw\Spherical linear interpolation of two quaternions. The interpolation is oriented and the \raw\  \raw\rotation is performed at constant speed. For short path spherical linear interpolation, use \raw\  \raw\the \code\slerp\code\ function. \h3\mod() function\h3\ \raw\#### glm.**mod**(**a**, **b**) -\\> *Any*\raw\ \raw\  \raw\Equivalent to \code\a % b\code\. \h3\modf() function\h3\ \raw\#### glm.**modf**(**x**: *float*) -\\> *(fraction, integer)*\raw\ \raw\  \raw\Returns the fractional part of \code\x\code\ and the integer part (as a whole number floating point value). \raw\#### glm.**modf**(**x**: *vecN*, **i**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns the fractional part of \code\x\code\ and sets \code\i\code\ to the integer part (as a whole number floating \raw\  \raw\point value). \h3\round() function\h3\ \raw\#### glm.**round**(**x**: *number*) -\\> *float*\raw\ \raw\  \raw\Returns a value equal to the nearest integer to \code\x\code\. The fraction \code\0.5\code\ will round in a \raw\  \raw\direction chosen by the implementation, presumably the direction that is fastest. This \raw\  \raw\includes the possibility that \code\round(x)\code\ returns the same value as \code\roundEven(x)\code\ \raw\#### glm.**round**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns a value equal to the nearest integer to \code\x\code\. The fraction \code\0.5\code\ will round in a \raw\  \raw\direction chosen by the implementation, presumably the direction that is fastest. This \raw\  \raw\includes the possibility that \code\round(x)\code\ returns the same value as \code\roundEven(x)\code\ for all \raw\  \raw\values of \code\x\code\. \h3\roundEven() function\h3\ \raw\#### glm.**roundEven**(**x**: *number*) -\\> *float*\raw\ \raw\  \raw\Returns a value equal to the nearest integer to \code\x\code\. A fractional part of \code\0.5\code\ will round \raw\  \raw\toward the nearest even integer. (Both \code\3.5\code\ and \code\4.5\code\ for \code\x\code\ will return \code\4.0\code\.) \raw\#### glm.**roundEven**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns a value equal to the nearest integer to \code\x\code\. A fractional part of \code\0.5\code\ will round \raw\  \raw\toward the nearest even integer. (Both \code\3.5\code\ and \code\4.5\code\ for \code\x\code\ will return \code\4.0\code\.) \h3\sign() function\h3\ \raw\#### glm.**sign**(**x**: *number*) -\\> *float*\raw\ \raw\  \raw\Returns \code\1.0\code\ if \code\x > 0\code\, \code\0.0\code\ if \code\x == 0\code\, or \code\-1.0\code\ if \code\x < 0\code\. \raw\#### glm.**sign**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\For every component \code\c\code\ of \code\x\code\: \raw\  \raw\Returns \code\1.0\code\ if \code\x > 0\code\, \code\0.0\code\ if \code\x == 0\code\, or \code\-1.0\code\ if \code\x < 0\code\. \h3\smoothstep() function\h3\ \raw\#### glm.**smoothstep**(**edge0**: *number*, **edge1**: *number*, **x**: *number*) -\\> *float*\raw\ \raw\  \raw\Returns \code\0.0\code\ if \code\x <= edge0\code\ and \code\1.0\code\ if \code\x >= edge1\code\ and performs smooth Hermite interpolation \raw\  \raw\between \code\0\code\ and \code\1\code\ when \code\edge0 < x < edge1\code\. This is useful in cases where you would want a \raw\  \raw\threshold function with a smooth transition. This is equivalent to : \raw\  \raw\\code\t = clamp((x - edge0) / (edge1 - edge0), 0, 1)\code\ \raw\  \raw\\code\return t * t * (3 - 2 * t)\code\ \raw\  \raw\Results are undefined if \code\edge0 >= edge1\code\. \raw\#### glm.**smoothstep**(**edge0**: *number*, **edge1**: *number*, **x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\0.0\code\ if \code\x <= edge0\code\ and \code\1.0\code\ if \code\x >= edge1\code\ and performs smooth Hermite interpolation \raw\  \raw\between \code\0\code\ and \code\1\code\ when \code\edge0 < x < edge1\code\. This is useful in cases where you would want a \raw\  \raw\threshold function with a smooth transition. This is equivalent to : \raw\  \raw\\code\t = clamp((x - edge0) / (edge1 - edge0), 0, 1)\code\ \raw\  \raw\\code\return t * t * (3 - 2 * t)\code\ \raw\  \raw\Results are undefined if \code\edge0 >= edge1\code\. \raw\#### glm.**smoothstep**(**edge0**: *vecN*, **edge1**: *vecN*, **x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\0.0\code\ if \code\x <= edge0\code\ and \code\1.0\code\ if \code\x >= edge1\code\ and performs smooth Hermite interpolation \raw\  \raw\between \code\0\code\ and \code\1\code\ when \code\edge0 < x < edge1\code\. This is useful in cases where you would want a \raw\  \raw\threshold function with a smooth transition. This is equivalent to : \raw\  \raw\\code\t = clamp((x - edge0) / (edge1 - edge0), 0, 1)\code\ \raw\  \raw\\code\return t * t * (3 - 2 * t)\code\ \raw\  \raw\Results are undefined if \code\edge0 >= edge1\code\. \h3\step() function\h3\ \raw\#### glm.**step**(**edge**: *number*, **x**: *number*) -\\> *float*\raw\ \raw\  \raw\Returns \code\0.0\code\ if \code\x < edge\code\, otherwise it returns \code\1.0\code\. \raw\#### glm.**step**(**edge**: *number*, **x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\For every component \code\c\code\ of \code\x\code\: \raw\  \raw\Returns \code\0.0\code\ if \code\c < edge\code\, otherwise it returns \code\1.0\code\. \raw\#### glm.**step**(**edge**: *vecN*, **x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\For every index \code\i\code\: \raw\  \raw\Returns \code\0.0\code\ if \code\x[i] < edge[i]\code\, otherwise it returns \code\1.0\code\. \h3\trunc() function\h3\ \raw\#### glm.**trunc**(**x**: *number*) -\\> *float*\raw\ \raw\  \raw\Returns a value equal to the nearest integer to \code\x\code\ whose absolute value is not larger than \raw\  \raw\the absolute value of \code\x\code\. \raw\#### glm.**trunc**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\For every component \code\c\code\ of \code\x\code\: \raw\  \raw\Returns a value equal to the nearest integer to \code\c\code\ whose absolute value is not larger than \raw\  \raw\the absolute value of \code\c\code\. \h3\uintBitsToFloat() function\h3\ \raw\#### glm.**uintBitsToFloat**(**v**: *int*) -\\> *float*\raw\ \raw\  \raw\Returns a floating-point value corresponding to an unsigned integer encoding of a floating-point \raw\  \raw\value. If an \code\inf\code\ or \code\NaN\code\ is passed in, it will not signal, and the resulting floating point \raw\  \raw\value is unspecified. Otherwise, the bit-level representation is preserved. \raw\#### glm.**uintBitsToFloat**(**v**: *ivecN*) -\\> *fvecN*\raw\ \raw\  \raw\Returns a floating-point value corresponding to an unsigned integer encoding of a floating-point \raw\  \raw\value. If an \code\inf\code\ or \code\NaN\code\ is passed in, it will not signal, and the resulting floating point \raw\  \raw\value is unspecified. Otherwise, the bit-level representation is preserved. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/detail/func_exponential.md000066400000000000000000000100701511156275200264500ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # func\_exponential methods The following methods are all part of the **func\_exponential methods**\. It contains exponential GLSL functions\. ## Table of contents * [**exp** function](#exp-function) * [**exp2** function](#exp2-function) * [**inversesqrt** function](#inversesqrt-function) * [**log** function](#log-function) * [**log2** function](#log2-function) * [**pow** function](#pow-function) * [**sqrt** function](#sqrt-function) ### exp\(\) function #### glm.**exp**(**x**: *float*) -\> *float*   Returns the natural exponentiation of ``` x ```, i\.e\., ``` e^x ```\. #### glm.**exp**(**x**: *vecN*) -\> *vecN*   For every component c of x:   Returns the natural exponentiation of ``` c ```, i\.e\., ``` e^c ```\. #### glm.**exp**(**x**: *quat*) -\> *quat*   Returns an exponential of a quaternion\. ### exp2\(\) function #### glm.**exp2**(**x**: *float*) -\> *float*   Returns ``` 2 ``` raised to the ``` x ``` power\. #### glm.**exp2**(**x**: *vecN*) -\> *vecN*   For every component ``` c ``` of ``` x ```:   Returns ``` 2 ``` raised to the ``` c ``` power\. ### inversesqrt\(\) function #### glm.**inversesqrt**(**x**: *float*) -\> *float*   Returns the reciprocal of the positive square root of ``` x ```\. #### glm.**inversesqrt**(**x**: *vecN*) -\> *vecN*   For every component ``` c ``` of ``` x ```:   Returns the reciprocal of the positive square root of ``` c ```\. ### log\(\) function #### glm.**log**(**x**: *float*) -\> *float*   Returns the natural logarithm of ``` x ```, i\.e\., returns the value ``` y ``` which satisfies the equation   ``` x = e^y ```\. Results are undefined if ``` x <= 0 ```\. #### glm.**log**(**x**: *vecN*) -\> *vecN*   For every component ``` c ``` of ``` x ```:   Returns the natural logarithm of ``` c ```, i\.e\., returns the value ``` y ``` which satisfies the equation   ``` c = e^y ```\. Results are undefined if ``` c <= 0 ```\. #### glm.**log**(**x**: *quat*) -\> *quat*   Returns a logarithm of a quaternion\. ### log2\(\) function #### glm.**log2**(**x**: *float*) -\> *float*   Returns the base ``` 2 ``` log of ``` x ```, i\.e\., returns the value ``` y ```, which satisfies the equation   ``` x = 2 ^ y ```\. #### glm.**log2**(**x**: *vecN*) -\> *vecN*   For every component ``` c ``` of ``` x ```:   Returns the base ``` 2 ``` log of ``` c ```, i\.e\., returns the value ``` y ```, which satisfies the equation   ``` c = 2 ^ y ```\. ### pow\(\) function #### glm.**pow**(**base**: *float*, **exponent**: *float*) -\> *float*   Returns base raised to the power exponent\. #### glm.**pow**(**base**: *vecN*, **exponent**: *vecN*) -\> *vecN*   For every index ``` i ```:   Returns ``` base[i] ``` raised to the power ``` exponent[i] ```\. #### glm.**pow**(**base**: *quat*, **exponent**: *quat*) -\> *quat*   Returns a quaternion raised to a power\. ### sqrt\(\) function #### glm.**sqrt**(**x**: *float*) -\> *float*   Returns the positive square root of ``` x ```\. #### glm.**sqrt**(**x**: *vecN*) -\> *vecN*   For every component ``` c ``` of ``` x ```:   Returns the positive square root of ``` c ```\. #### glm.**sqrt**(**x**: *quat*) -\> *quat*   Returns the square root of a quaternion\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/detail/func_exponential.sb000066400000000000000000000111341511156275200264560ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\func_exponential methods\h1\ The following methods are all part of the \b\func_exponential methods\b\. It contains exponential GLSL functions. \h2\Table of contents\h2\ \ul\ \-\\url #exp-function\\b\exp\b\ function\url\ \-\\url #exp2-function\\b\exp2\b\ function\url\ \-\\url #inversesqrt-function\\b\inversesqrt\b\ function\url\ \-\\url #log-function\\b\log\b\ function\url\ \-\\url #log2-function\\b\log2\b\ function\url\ \-\\url #pow-function\\b\pow\b\ function\url\ \-\\url #sqrt-function\\b\sqrt\b\ function\url\ \ul\ \h3\exp() function\h3\ \raw\#### glm.**exp**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Returns the natural exponentiation of \code\x\code\, i.e., \code\e^x\code\. \raw\#### glm.**exp**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\For every component c of x: \raw\  \raw\Returns the natural exponentiation of \code\c\code\, i.e., \code\e^c\code\. \raw\#### glm.**exp**(**x**: *quat*) -\\> *quat*\raw\ \raw\  \raw\Returns an exponential of a quaternion. \h3\exp2() function\h3\ \raw\#### glm.**exp2**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Returns \code\2\code\ raised to the \code\x\code\ power. \raw\#### glm.**exp2**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\For every component \code\c\code\ of \code\x\code\: \raw\  \raw\Returns \code\2\code\ raised to the \code\c\code\ power. \h3\inversesqrt() function\h3\ \raw\#### glm.**inversesqrt**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Returns the reciprocal of the positive square root of \code\x\code\. \raw\#### glm.**inversesqrt**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\For every component \code\c\code\ of \code\x\code\: \raw\  \raw\Returns the reciprocal of the positive square root of \code\c\code\. \h3\log() function\h3\ \raw\#### glm.**log**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Returns the natural logarithm of \code\x\code\, i.e., returns the value \code\y\code\ which satisfies the equation \raw\  \raw\\code\x = e^y\code\. Results are undefined if \code\x <= 0\code\. \raw\#### glm.**log**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\For every component \code\c\code\ of \code\x\code\: \raw\  \raw\Returns the natural logarithm of \code\c\code\, i.e., returns the value \code\y\code\ which satisfies the equation \raw\  \raw\\code\c = e^y\code\. Results are undefined if \code\c <= 0\code\. \raw\#### glm.**log**(**x**: *quat*) -\\> *quat*\raw\ \raw\  \raw\Returns a logarithm of a quaternion. \h3\log2() function\h3\ \raw\#### glm.**log2**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Returns the base \code\2\code\ log of \code\x\code\, i.e., returns the value \code\y\code\, which satisfies the equation \raw\  \raw\\code\x = 2 ^ y\code\. \raw\#### glm.**log2**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\For every component \code\c\code\ of \code\x\code\: \raw\  \raw\Returns the base \code\2\code\ log of \code\c\code\, i.e., returns the value \code\y\code\, which satisfies the equation \raw\  \raw\\code\c = 2 ^ y\code\. \h3\pow() function\h3\ \raw\#### glm.**pow**(**base**: *float*, **exponent**: *float*) -\\> *float*\raw\ \raw\  \raw\Returns base raised to the power exponent. \raw\#### glm.**pow**(**base**: *vecN*, **exponent**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\For every index \code\i\code\: \raw\  \raw\Returns \code\base[i]\code\ raised to the power \code\exponent[i]\code\. \raw\#### glm.**pow**(**base**: *quat*, **exponent**: *quat*) -\\> *quat*\raw\ \raw\  \raw\Returns a quaternion raised to a power. \h3\sqrt() function\h3\ \raw\#### glm.**sqrt**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Returns the positive square root of \code\x\code\. \raw\#### glm.**sqrt**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\For every component \code\c\code\ of \code\x\code\: \raw\  \raw\Returns the positive square root of \code\c\code\. \raw\#### glm.**sqrt**(**x**: *quat*) -\\> *quat*\raw\ \raw\  \raw\Returns the square root of a quaternion. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/detail/func_geometric.md000066400000000000000000000105431511156275200261050ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # func\_geometric methods The following methods are all part of the **func\_geometric methods**\. These operate on vectors as vectors, not component\-wise\. ## Table of contents * [**cross** function](#cross-function) * [**distance** function](#distance-function) * [**dot** function](#dot-function) * [**faceforward** function](#faceforward-function) * [**length** function](#length-function) * [**normalize** function](#normalize-function) * [**reflect** function](#reflect-function) * [**refract** function](#refract-function) ### cross\(\) function #### glm.**cross**(**x**: *vec3*, **y**: *vec3*) -\> *vec3*   Returns the cross product of ``` x ``` and ``` y ```\. #### glm.**cross**(**x**: *quat*, **y**: *quat*) -\> *quat*   Compute a cross product\. ### distance\(\) function #### glm.**distance**(**p0**: *float*, **p1**: *float*) -\> *float*   Returns the distance between ``` p0 ``` and ``` p1 ```, i\.e\., ``` length(p0 - p1) ```\. #### glm.**distance**(**p0**: *vecN*, **p1**: *vecN*) -\> *float*   Returns the distance between ``` p0 ``` and ``` p1 ```, i\.e\., ``` length(p0 - p1) ```\. ### dot\(\) function #### glm.**dot**(**x**: *number*, **y**: *number*) -\> *float*   Returns the dot product of ``` x ``` and ``` y ```, i\.e\., ``` result = x * y ```\. #### glm.**dot**(**x**: *vecN*, **y**: *vecN*) -\> *number*   Returns the dot product of ``` x ``` and ``` y ```, i\.e\., ``` result = x[0] * y[0] + x[1] * y[1] + ... ``` #### glm.**dot**(**x**: *quat*, **y**: *quat*) -\> *float*   Returns dot product of ``` x ``` and ``` y ```, i\.e\., ``` x[0] * y[0] + x[1] * y[1] + ... ``` ### faceforward\(\) function #### glm.**faceforward**(**N**: *float*, **I**: *float*, **Nref**: *float*) -\> *float*   If ``` dot(Nref, I) < 0.0 ```, return ``` N ```, otherwise, return ``` -N ```\. #### glm.**faceforward**(**N**: *vecN*, **I**: *vecN*, **Nref**: *vecN*) -\> *vecN*   For every index ``` i ```:   If ``` dot(Nref[i], I[i]) < 0.0 ```, return ``` N[i] ```, otherwise, return ``` -N[i] ```\. ### length\(\) function #### glm.**length**(**x**: *float*) -\> *float*   Returns the length of ``` x ```, i\.e\., ``` abs(x) ```\. #### glm.**length**(**x**: *vecN*) -\> *float*   Returns the length of ``` x ```, i\.e\., ``` sqrt(x * x) ```\. #### glm.**length**(**x**: *quat*) -\> *float*   Returns the norm of a quaternion\. ### normalize\(\) function #### glm.**normalize**(**x**: *vecN*) -\> *vecN*   Returns a vector in the same direction as ``` x ``` but with length of ``` 1 ```\. #### glm.**normalize**(**x**: *quat*) -\> *quat*   Returns the normalized quaternion\. ### reflect\(\) function #### glm.**reflect**(**I**: *float*, **N**: *float*) -\> *float*   For the incident vector ``` I ``` and surface orientation ``` N ```, returns the reflection direction:   ``` result = I - 2.0 * dot(N, I) * N ```\. #### glm.**reflect**(**I**: *vecN*, **N**: *vecN*) -\> *vecN*   For the incident vector ``` I ``` and surface orientation ``` N ```, returns the reflection direction:   ``` result = I - 2.0 * dot(N, I) * N ```\. ### refract\(\) function #### glm.**refract**(**I**: *float*, **N**: *float*, **eta**: *float*) -\> *float*   For the incident vector ``` I ``` and surface normal ``` N ```, and the ratio of indices of refraction ``` eta ```,   return the refraction vector\. #### glm.**refract**(**I**: *vecN*, **N**: *vecN*, **eta**: *float*) -\> *vecN*   For the incident vector ``` I ``` and surface normal ``` N ```, and the ratio of indices of refraction ``` eta ```,   return the refraction vector\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/detail/func_geometric.sb000066400000000000000000000115441511156275200261130ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\func_geometric methods\h1\ The following methods are all part of the \b\func_geometric methods\b\. These operate on vectors as vectors, not component-wise. \h2\Table of contents\h2\ \ul\ \-\\url #cross-function\\b\cross\b\ function\url\ \-\\url #distance-function\\b\distance\b\ function\url\ \-\\url #dot-function\\b\dot\b\ function\url\ \-\\url #faceforward-function\\b\faceforward\b\ function\url\ \-\\url #length-function\\b\length\b\ function\url\ \-\\url #normalize-function\\b\normalize\b\ function\url\ \-\\url #reflect-function\\b\reflect\b\ function\url\ \-\\url #refract-function\\b\refract\b\ function\url\ \ul\ \h3\cross() function\h3\ \raw\#### glm.**cross**(**x**: *vec3*, **y**: *vec3*) -\\> *vec3*\raw\ \raw\  \raw\Returns the cross product of \code\x\code\ and \code\y\code\. \raw\#### glm.**cross**(**x**: *quat*, **y**: *quat*) -\\> *quat*\raw\ \raw\  \raw\Compute a cross product. \h3\distance() function\h3\ \raw\#### glm.**distance**(**p0**: *float*, **p1**: *float*) -\\> *float*\raw\ \raw\  \raw\Returns the distance between \code\p0\code\ and \code\p1\code\, i.e., \code\length(p0 - p1)\code\. \raw\#### glm.**distance**(**p0**: *vecN*, **p1**: *vecN*) -\\> *float*\raw\ \raw\  \raw\Returns the distance between \code\p0\code\ and \code\p1\code\, i.e., \code\length(p0 - p1)\code\. \h3\dot() function\h3\ \raw\#### glm.**dot**(**x**: *number*, **y**: *number*) -\\> *float*\raw\ \raw\  \raw\Returns the dot product of \code\x\code\ and \code\y\code\, i.e., \code\result = x * y\code\. \raw\#### glm.**dot**(**x**: *vecN*, **y**: *vecN*) -\\> *number*\raw\ \raw\  \raw\Returns the dot product of \code\x\code\ and \code\y\code\, i.e., \code\result = x[0] * y[0] + x[1] * y[1] + ...\code\ \raw\#### glm.**dot**(**x**: *quat*, **y**: *quat*) -\\> *float*\raw\ \raw\  \raw\Returns dot product of \code\x\code\ and \code\y\code\, i.e., \code\x[0] * y[0] + x[1] * y[1] + ...\code\ \h3\faceforward() function\h3\ \raw\#### glm.**faceforward**(**N**: *float*, **I**: *float*, **Nref**: *float*) -\\> *float*\raw\ \raw\  \raw\If \code\dot(Nref, I) < 0.0\code\, return \code\N\code\, otherwise, return \code\-N\code\. \raw\#### glm.**faceforward**(**N**: *vecN*, **I**: *vecN*, **Nref**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\For every index \code\i\code\: \raw\  \raw\If \code\dot(Nref[i], I[i]) < 0.0\code\, return \code\N[i]\code\, otherwise, return \code\-N[i]\code\. \h3\length() function\h3\ \raw\#### glm.**length**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Returns the length of \code\x\code\, i.e., \code\abs(x)\code\. \raw\#### glm.**length**(**x**: *vecN*) -\\> *float*\raw\ \raw\  \raw\Returns the length of \code\x\code\, i.e., \code\sqrt(x * x)\code\. \raw\#### glm.**length**(**x**: *quat*) -\\> *float*\raw\ \raw\  \raw\Returns the norm of a quaternion. \h3\normalize() function\h3\ \raw\#### glm.**normalize**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns a vector in the same direction as \code\x\code\ but with length of \code\1\code\. \raw\#### glm.**normalize**(**x**: *quat*) -\\> *quat*\raw\ \raw\  \raw\Returns the normalized quaternion. \h3\reflect() function\h3\ \raw\#### glm.**reflect**(**I**: *float*, **N**: *float*) -\\> *float*\raw\ \raw\  \raw\For the incident vector \code\I\code\ and surface orientation \code\N\code\, returns the reflection direction: \raw\  \raw\\code\result = I - 2.0 * dot(N, I) * N\code\. \raw\#### glm.**reflect**(**I**: *vecN*, **N**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\For the incident vector \code\I\code\ and surface orientation \code\N\code\, returns the reflection direction: \raw\  \raw\\code\result = I - 2.0 * dot(N, I) * N\code\. \h3\refract() function\h3\ \raw\#### glm.**refract**(**I**: *float*, **N**: *float*, **eta**: *float*) -\\> *float*\raw\ \raw\  \raw\For the incident vector \code\I\code\ and surface normal \code\N\code\, and the ratio of indices of refraction \code\eta\code\, \raw\  \raw\return the refraction vector. \raw\#### glm.**refract**(**I**: *vecN*, **N**: *vecN*, **eta**: *float*) -\\> *vecN*\raw\ \raw\  \raw\For the incident vector \code\I\code\ and surface normal \code\N\code\, and the ratio of indices of refraction \code\eta\code\, \raw\  \raw\return the refraction vector. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/detail/func_integer.md000066400000000000000000000214661511156275200255720ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # func\_integer methods The following methods are all part of the **func\_integer methods**\. It contains GLSL functions on integer types\. ## Table of contents * [**bitCount** function](#bitcount-function) * [**bitfieldExtract** function](#bitfieldextract-function) * [**bitfieldInsert** function](#bitfieldinsert-function) * [**bitfieldReverse** function](#bitfieldreverse-function) * [**findLSB** function](#findlsb-function) * [**findMSB** function](#findmsb-function) * [**imulExtended** function](#imulextended-function) * [**uaddCarry** function](#uaddcarry-function) * [**umulExtended** function](#umulextended-function) * [**usubBorrow** function](#usubborrow-function) ### bitCount\(\) function #### glm.**bitCount**(**v**: *int*) -\> *int*   Returns the number of bits set to ``` 1 ``` in the binary representation of ``` value ```\. #### glm.**bitCount**(**v**: *vecN*) -\> *ivecN*   For every component ``` c ``` of ``` v ```:   Returns the number of bits set to ``` 1 ``` in the binary representation of ``` c ```\. ### bitfieldExtract\(\) function #### glm.**bitfieldExtract**(**value**: *ctypes*, **offset**: *int*, **bits**: *int*) -\> *int*   Extracts bits ``` [offset, offset + bits - 1] ``` from value, returning them in the least   significant bits of the result\. For unsigned data types, the most significant bits of the   result will be set to zero\. For signed data types, the most significant bits will be set to   the value of bit ``` offset + base - 1 ```\. If ``` bits ``` is zero, the result will be zero\. The result   will be undefined if ``` offset ``` or ``` bits ``` is negative, or if the sum of ``` offset ``` and ``` bits ``` is   greater than the number of bits used to store the operand\.   You can use ``` int32 ```, ``` uint32 ```, ``` int64 ``` or ``` uint64 ``` types to specify the number of bits and the   sign\. #### glm.**bitfieldExtract**(**value**: *vecN*, **offset**: *int*, **bits**: *int*) -\> *vecN*   Returns ``` bitfieldExtract(c, offset, bits) ``` for every component ``` c ``` of ``` value ```\. ### bitfieldInsert\(\) function #### glm.**bitfieldInsert**(**base**: *ctypes*, **insert**: *ctypes*, **offset**: *int*, **bits**: *int*) -\> *int*   Returns the insertion the bits least\-significant bits of insert into base\. The result will   have ``` bits[offset, offset + bits - 1] ``` taken from ``` bits[0, bits - 1] ``` of ``` insert ```, and all other   bits taken directly from the corresponding bits of ``` base ```\. If ``` bits ``` is zero, the result will   simply be ``` base ```\. The result will be undefined if ``` offset ``` or ``` bits ``` is negative, or if the sum of   ``` offset ``` and ``` bits ``` is greater than the number of bits used to store the operand\.   You can use ``` int32 ```, ``` uint32 ```, ``` int64 ``` or ``` uint64 ``` types to specify the number of bits and the   sign\. #### glm.**bitfieldInsert**(**base**: *vecN*, **insert**: *vecN*, **offset**: *int*, **bits**: *int*) -\> *vecN*   Returns ``` bitfieldInsert(base[i], insert[i], offset, bits) ``` for every index ``` i ```\. ### bitfieldReverse\(\) function #### glm.**bitfieldReverse**(**value**: *ctypes*) -\> *int*   Returns the reversal of the bits of ``` value ```\. The bit numbered ``` n ``` of the result will be taken   from ``` bit(bits - 1) - n ``` of ``` value ```, where ``` bits ``` is the total number of bits used to represent   ``` value ```\. You can use ``` int32 ```, ``` uint32 ```, ``` int64 ``` or ``` uint64 ``` types to specify the number of bits   and the sign\. #### glm.**bitfieldReverse**(**value**: *vecN*) -\> *vecN*   Returns the reversal of the bits of ``` value ```\. The bit numbered ``` n ``` of the result will be taken   from ``` bit(bits - 1) - n ``` of ``` value ```, where ``` bits ``` is the total number of bits used to represent   ``` value ```\. ### findLSB\(\) function #### glm.**findLSB**(**value**: *int*) -\> *int*   Returns the bit number of the least significant bit set to ``` 1 ``` in the binary representation   of ``` value ```\. If ``` value ``` is zero, ``` -1 ``` will be returned\. #### glm.**findLSB**(**value**: *vecN*) -\> *ivecN*   Returns the bit number of the least significant bit set to ``` 1 ``` in the binary representation   of ``` value ```\. If ``` value ``` is zero, ``` -1 ``` will be returned\. ### findMSB\(\) function #### glm.**findMSB**(**value**: *int*) -\> *int*   Returns the bit number of the most significant bit in the binary representation of ``` value ```\.   For positive integers, the result will be the bit number of the most significant bit set to   ``` 1 ```\. For negative integers, the result will be the bit number of the most significant bit set   to ``` 0 ```\. For a value of zero or negative one, ``` -1 ``` will be returned\. #### glm.**findMSB**(**value**: *vecN*) -\> *ivecN*   Returns the bit number of the least significant bit set to ``` 1 ``` in the binary representation   of ``` value ```\. If ``` value ``` is zero, ``` -1 ``` will be returned\. ### imulExtended\(\) function #### glm.**imulExtended**(**x**: *int*, **y**: *int*) -\> *(msb: int, lsb: int)*   Multiplies 32\-bit integers ``` x ``` and ``` y ```, producing a 64\-bit result\. The 32 least\-significant   bits are returned in ``` lsb ```\. The 32 most\-significant bits are returned in ``` msb ```\. #### glm.**imulExtended**(**x**: *ivecN*, **y**: *ivecN*, **msb**: *ivecN*, **lsb**: *ivecN*) -\> *ivecN*   Multiplies 32\-bit integers ``` x ``` and ``` y ```, producing a 64\-bit result\. The 32 least\-significant   bits are returned in ``` lsb ```\. The 32 most\-significant bits are returned in ``` msb ```\. ### uaddCarry\(\) function #### glm.**uaddCarry**(**x**: *int*, **y**: *int*) -\> *(result: int, carry: int)*   Adds 32\-bit unsigned integer ``` x ``` and ``` y ```, returning the ``` sum ``` modulo ``` pow(2, 32) ```\. The value carry   is set to ``` 0 ``` if the ``` sum ``` was less than ``` pow(2, 32) ```, or to ``` 1 ``` otherwise\. #### glm.**uaddCarry**(**x**: *uvecN*, **y**: *uvecN*, **carry**: *uvecN*) -\> *uvecN*   Adds 32\-bit unsigned integer ``` x ``` and ``` y ```, returning the ``` sum ``` modulo ``` pow(2, 32) ```\. The value carry   is set to ``` 0 ``` if the ``` sum ``` was less than ``` pow(2, 32) ```, or to ``` 1 ``` otherwise\. ### umulExtended\(\) function #### glm.**umulExtended**(**x**: *int*, **y**: *int*) -\> *(msb: int, lsb: int)*   Multiplies 32\-bit integers ``` x ``` and ``` y ```, producing a 64\-bit result\. The 32 least\-significant   bits are returned in ``` lsb ```\. The 32 most\-significant bits are returned in ``` msb ```\. #### glm.**umulExtended**(**x**: *uvecN*, **y**: *uvecN*, **msb**: *uvecN*, **lsb**: *uvecN*) -\> *uvecN*   Multiplies 32\-bit integers ``` x ``` and ``` y ```, producing a 64\-bit result\. The 32 least\-significant   bits are returned in ``` lsb ```\. The 32 most\-significant bits are returned in ``` msb ```\. ### usubBorrow\(\) function #### glm.**usubBorrow**(**x**: *int*, **y**: *int*) -\> *(result: int, borrow: int)*   Subtracts the 32\-bit unsigned integer ``` y ``` from ``` x ```, returning the difference if non\-negative,   or ``` pow(2, 32) ``` plus the difference otherwise\. The value borrow is set to ``` 0 ``` if ``` x >= y ```, or to   ``` 1 ``` otherwise\. #### glm.**usubBorrow**(**x**: *uvecN*, **y**: *uvecN*, **borrow**: *uvecN*) -\> *uvecN*   Subtracts the 32\-bit unsigned integer ``` y ``` from ``` x ```, returning the difference if non\-negative,   or ``` pow(2, 32) ``` plus the difference otherwise\. The value borrow is set to ``` 0 ``` if ``` x >= y ```, or to   ``` 1 ``` otherwise\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/detail/func_integer.sb000066400000000000000000000235031511156275200255700ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\func_integer methods\h1\ The following methods are all part of the \b\func_integer methods\b\. It contains GLSL functions on integer types. \h2\Table of contents\h2\ \ul\ \-\\url #bitcount-function\\b\bitCount\b\ function\url\ \-\\url #bitfieldextract-function\\b\bitfieldExtract\b\ function\url\ \-\\url #bitfieldinsert-function\\b\bitfieldInsert\b\ function\url\ \-\\url #bitfieldreverse-function\\b\bitfieldReverse\b\ function\url\ \-\\url #findlsb-function\\b\findLSB\b\ function\url\ \-\\url #findmsb-function\\b\findMSB\b\ function\url\ \-\\url #imulextended-function\\b\imulExtended\b\ function\url\ \-\\url #uaddcarry-function\\b\uaddCarry\b\ function\url\ \-\\url #umulextended-function\\b\umulExtended\b\ function\url\ \-\\url #usubborrow-function\\b\usubBorrow\b\ function\url\ \ul\ \h3\bitCount() function\h3\ \raw\#### glm.**bitCount**(**v**: *int*) -\\> *int*\raw\ \raw\  \raw\Returns the number of bits set to \code\1\code\ in the binary representation of \code\value\code\. \raw\#### glm.**bitCount**(**v**: *vecN*) -\\> *ivecN*\raw\ \raw\  \raw\For every component \code\c\code\ of \code\v\code\: \raw\  \raw\Returns the number of bits set to \code\1\code\ in the binary representation of \code\c\code\. \h3\bitfieldExtract() function\h3\ \raw\#### glm.**bitfieldExtract**(**value**: *ctypes*, **offset**: *int*, **bits**: *int*) -\\> *int*\raw\ \raw\  \raw\Extracts bits \code\[offset, offset + bits - 1]\code\ from value, returning them in the least \raw\  \raw\significant bits of the result. For unsigned data types, the most significant bits of the \raw\  \raw\result will be set to zero. For signed data types, the most significant bits will be set to \raw\  \raw\the value of bit \code\offset + base - 1\code\. If \code\bits\code\ is zero, the result will be zero. The result \raw\  \raw\will be undefined if \code\offset\code\ or \code\bits\code\ is negative, or if the sum of \code\offset\code\ and \code\bits\code\ is \raw\  \raw\greater than the number of bits used to store the operand. \raw\  \raw\You can use \code\int32\code\, \code\uint32\code\, \code\int64\code\ or \code\uint64\code\ types to specify the number of bits and the \raw\  \raw\sign. \raw\#### glm.**bitfieldExtract**(**value**: *vecN*, **offset**: *int*, **bits**: *int*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\bitfieldExtract(c, offset, bits)\code\ for every component \code\c\code\ of \code\value\code\. \h3\bitfieldInsert() function\h3\ \raw\#### glm.**bitfieldInsert**(**base**: *ctypes*, **insert**: *ctypes*, **offset**: *int*, **bits**: *int*) -\\> *int*\raw\ \raw\  \raw\Returns the insertion the bits least-significant bits of insert into base. The result will \raw\  \raw\have \code\bits[offset, offset + bits - 1]\code\ taken from \code\bits[0, bits - 1]\code\ of \code\insert\code\, and all other \raw\  \raw\bits taken directly from the corresponding bits of \code\base\code\. If \code\bits\code\ is zero, the result will \raw\  \raw\simply be \code\base\code\. The result will be undefined if \code\offset\code\ or \code\bits\code\ is negative, or if the sum of \raw\  \raw\\code\offset\code\ and \code\bits\code\ is greater than the number of bits used to store the operand. \raw\  \raw\You can use \code\int32\code\, \code\uint32\code\, \code\int64\code\ or \code\uint64\code\ types to specify the number of bits and the \raw\  \raw\sign. \raw\#### glm.**bitfieldInsert**(**base**: *vecN*, **insert**: *vecN*, **offset**: *int*, **bits**: *int*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\bitfieldInsert(base[i], insert[i], offset, bits)\code\ for every index \code\i\code\. \h3\bitfieldReverse() function\h3\ \raw\#### glm.**bitfieldReverse**(**value**: *ctypes*) -\\> *int*\raw\ \raw\  \raw\Returns the reversal of the bits of \code\value\code\. The bit numbered \code\n\code\ of the result will be taken \raw\  \raw\from \code\bit(bits - 1) - n\code\ of \code\value\code\, where \code\bits\code\ is the total number of bits used to represent \raw\  \raw\\code\value\code\. You can use \code\int32\code\, \code\uint32\code\, \code\int64\code\ or \code\uint64\code\ types to specify the number of bits \raw\  \raw\and the sign. \raw\#### glm.**bitfieldReverse**(**value**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns the reversal of the bits of \code\value\code\. The bit numbered \code\n\code\ of the result will be taken \raw\  \raw\from \code\bit(bits - 1) - n\code\ of \code\value\code\, where \code\bits\code\ is the total number of bits used to represent \raw\  \raw\\code\value\code\. \h3\findLSB() function\h3\ \raw\#### glm.**findLSB**(**value**: *int*) -\\> *int*\raw\ \raw\  \raw\Returns the bit number of the least significant bit set to \code\1\code\ in the binary representation \raw\  \raw\of \code\value\code\. If \code\value\code\ is zero, \code\-1\code\ will be returned. \raw\#### glm.**findLSB**(**value**: *vecN*) -\\> *ivecN*\raw\ \raw\  \raw\Returns the bit number of the least significant bit set to \code\1\code\ in the binary representation \raw\  \raw\of \code\value\code\. If \code\value\code\ is zero, \code\-1\code\ will be returned. \h3\findMSB() function\h3\ \raw\#### glm.**findMSB**(**value**: *int*) -\\> *int*\raw\ \raw\  \raw\Returns the bit number of the most significant bit in the binary representation of \code\value\code\. \raw\  \raw\For positive integers, the result will be the bit number of the most significant bit set to \raw\  \raw\\code\1\code\. For negative integers, the result will be the bit number of the most significant bit set \raw\  \raw\to \code\0\code\. For a value of zero or negative one, \code\-1\code\ will be returned. \raw\#### glm.**findMSB**(**value**: *vecN*) -\\> *ivecN*\raw\ \raw\  \raw\Returns the bit number of the least significant bit set to \code\1\code\ in the binary representation \raw\  \raw\of \code\value\code\. If \code\value\code\ is zero, \code\-1\code\ will be returned. \h3\imulExtended() function\h3\ \raw\#### glm.**imulExtended**(**x**: *int*, **y**: *int*) -\\> *(msb: int, lsb: int)*\raw\ \raw\  \raw\Multiplies 32-bit integers \code\x\code\ and \code\y\code\, producing a 64-bit result. The 32 least-significant \raw\  \raw\bits are returned in \code\lsb\code\. The 32 most-significant bits are returned in \code\msb\code\. \raw\#### glm.**imulExtended**(**x**: *ivecN*, **y**: *ivecN*, **msb**: *ivecN*, **lsb**: *ivecN*) -\\> *ivecN*\raw\ \raw\  \raw\Multiplies 32-bit integers \code\x\code\ and \code\y\code\, producing a 64-bit result. The 32 least-significant \raw\  \raw\bits are returned in \code\lsb\code\. The 32 most-significant bits are returned in \code\msb\code\. \h3\uaddCarry() function\h3\ \raw\#### glm.**uaddCarry**(**x**: *int*, **y**: *int*) -\\> *(result: int, carry: int)*\raw\ \raw\  \raw\Adds 32-bit unsigned integer \code\x\code\ and \code\y\code\, returning the \code\sum\code\ modulo \code\pow(2, 32)\code\. The value carry \raw\  \raw\is set to \code\0\code\ if the \code\sum\code\ was less than \code\pow(2, 32)\code\, or to \code\1\code\ otherwise. \raw\#### glm.**uaddCarry**(**x**: *uvecN*, **y**: *uvecN*, **carry**: *uvecN*) -\\> *uvecN*\raw\ \raw\  \raw\Adds 32-bit unsigned integer \code\x\code\ and \code\y\code\, returning the \code\sum\code\ modulo \code\pow(2, 32)\code\. The value carry \raw\  \raw\is set to \code\0\code\ if the \code\sum\code\ was less than \code\pow(2, 32)\code\, or to \code\1\code\ otherwise. \h3\umulExtended() function\h3\ \raw\#### glm.**umulExtended**(**x**: *int*, **y**: *int*) -\\> *(msb: int, lsb: int)*\raw\ \raw\  \raw\Multiplies 32-bit integers \code\x\code\ and \code\y\code\, producing a 64-bit result. The 32 least-significant \raw\  \raw\bits are returned in \code\lsb\code\. The 32 most-significant bits are returned in \code\msb\code\. \raw\#### glm.**umulExtended**(**x**: *uvecN*, **y**: *uvecN*, **msb**: *uvecN*, **lsb**: *uvecN*) -\\> *uvecN*\raw\ \raw\  \raw\Multiplies 32-bit integers \code\x\code\ and \code\y\code\, producing a 64-bit result. The 32 least-significant \raw\  \raw\bits are returned in \code\lsb\code\. The 32 most-significant bits are returned in \code\msb\code\. \h3\usubBorrow() function\h3\ \raw\#### glm.**usubBorrow**(**x**: *int*, **y**: *int*) -\\> *(result: int, borrow: int)*\raw\ \raw\  \raw\Subtracts the 32-bit unsigned integer \code\y\code\ from \code\x\code\, returning the difference if non-negative, \raw\  \raw\or \code\pow(2, 32)\code\ plus the difference otherwise. The value borrow is set to \code\0\code\ if \code\x >= y\code\, or to \raw\  \raw\\code\1\code\ otherwise. \raw\#### glm.**usubBorrow**(**x**: *uvecN*, **y**: *uvecN*, **borrow**: *uvecN*) -\\> *uvecN*\raw\ \raw\  \raw\Subtracts the 32-bit unsigned integer \code\y\code\ from \code\x\code\, returning the difference if non-negative, \raw\  \raw\or \code\pow(2, 32)\code\ plus the difference otherwise. The value borrow is set to \code\0\code\ if \code\x >= y\code\, or to \raw\  \raw\\code\1\code\ otherwise. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/detail/func_matrix.md000066400000000000000000000033451511156275200254350ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # func\_matrix methods The following methods are all part of the **func\_matrix methods**\. It contains GLSL matrix functions\. ## Table of contents * [**determinant** function](#determinant-function) * [**inverse** function](#inverse-function) * [**matrixCompMult** function](#matrixcompmult-function) * [**outerProduct** function](#outerproduct-function) * [**transpose** function](#transpose-function) ### determinant\(\) function #### glm.**determinant**(**m**: *matSxS*) -\> *float*   Return the determinant of a squared matrix\. ### inverse\(\) function #### glm.**inverse**(**m**: *matSxS*) -\> *matSxS*   Return the inverse of a squared matrix\. #### glm.**inverse**(**q**: *quat*) -\> *quat*   Return the inverse of a quaternion\. ### matrixCompMult\(\) function #### glm.**matrixCompMult**(**x**: *matNxM*, **y**: *matNxM*) -\> *matNxM*   Multiply matrix ``` x ``` by matrix ``` y ``` component\-wise, i\.e\., ``` result[i][j] ``` is the scalar product of   ``` x[i][j] ``` and ``` y[i][j] ```\. ### outerProduct\(\) function #### glm.**outerProduct**(**c**: *vecC*, **r**: *vecR*) -\> *matRxC*   Treats the first parameter ``` c ``` as a column vector and the second parameter ``` r ``` as a row vector   and does a linear algebraic matrix multiply ``` c * r ```\. ### transpose\(\) function #### glm.**transpose**(**x**: *matNxM*) -\> *matMxN*   Returns the transposed matrix of ``` x ```\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/detail/func_matrix.sb000066400000000000000000000036241511156275200254410ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\func_matrix methods\h1\ The following methods are all part of the \b\func_matrix methods\b\. It contains GLSL matrix functions. \h2\Table of contents\h2\ \ul\ \-\\url #determinant-function\\b\determinant\b\ function\url\ \-\\url #inverse-function\\b\inverse\b\ function\url\ \-\\url #matrixcompmult-function\\b\matrixCompMult\b\ function\url\ \-\\url #outerproduct-function\\b\outerProduct\b\ function\url\ \-\\url #transpose-function\\b\transpose\b\ function\url\ \ul\ \h3\determinant() function\h3\ \raw\#### glm.**determinant**(**m**: *matSxS*) -\\> *float*\raw\ \raw\  \raw\Return the determinant of a squared matrix. \h3\inverse() function\h3\ \raw\#### glm.**inverse**(**m**: *matSxS*) -\\> *matSxS*\raw\ \raw\  \raw\Return the inverse of a squared matrix. \raw\#### glm.**inverse**(**q**: *quat*) -\\> *quat*\raw\ \raw\  \raw\Return the inverse of a quaternion. \h3\matrixCompMult() function\h3\ \raw\#### glm.**matrixCompMult**(**x**: *matNxM*, **y**: *matNxM*) -\\> *matNxM*\raw\ \raw\  \raw\Multiply matrix \code\x\code\ by matrix \code\y\code\ component-wise, i.e., \code\result[i][j]\code\ is the scalar product of \raw\  \raw\\code\x[i][j]\code\ and \code\y[i][j]\code\. \h3\outerProduct() function\h3\ \raw\#### glm.**outerProduct**(**c**: *vecC*, **r**: *vecR*) -\\> *matRxC*\raw\ \raw\  \raw\Treats the first parameter \code\c\code\ as a column vector and the second parameter \code\r\code\ as a row vector \raw\  \raw\and does a linear algebraic matrix multiply \code\c * r\code\. \h3\transpose() function\h3\ \raw\#### glm.**transpose**(**x**: *matNxM*) -\\> *matMxN*\raw\ \raw\  \raw\Returns the transposed matrix of \code\x\code\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/detail/func_packing.md000066400000000000000000000222271511156275200255450ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # func\_packing methods The following methods are all part of the **func\_packing methods**\. Provides GLSL functions to pack and unpack half, single and double\-precision floating point values into more compact integer types\. ## Table of contents * [**packDouble2x32** function](#packdouble2x32-function) * [**packHalf2x16** function](#packhalf2x16-function) * [**packSnorm2x16** function](#packsnorm2x16-function) * [**packSnorm4x8** function](#packsnorm4x8-function) * [**packUnorm2x16** function](#packunorm2x16-function) * [**packUnorm4x8** function](#packunorm4x8-function) * [**unpackDouble2x32** function](#unpackdouble2x32-function) * [**unpackHalf2x16** function](#unpackhalf2x16-function) * [**unpackSnorm2x16** function](#unpacksnorm2x16-function) * [**unpackSnorm4x8** function](#unpacksnorm4x8-function) * [**unpackUnorm2x16** function](#unpackunorm2x16-function) * [**unpackUnorm4x8** function](#unpackunorm4x8-function) ### packDouble2x32\(\) function #### glm.**packDouble2x32**(**v**: *uvec2*) -\> *float*   Returns a double\-qualifier value obtained by packing the components of ``` v ``` into a 64\-bit   value\. If an IEEE 754 ``` Inf ``` or ``` NaN ``` is created, it will not signal, and the resulting floating   point value is unspecified\. Otherwise, the bit\-level representation of ``` v ``` is preserved\. The   first vector component specifies the 32 least significant bits; the second component   specifies the 32 most significant bits\. ### packHalf2x16\(\) function #### glm.**packHalf2x16**(**v**: *vec2*) -\> *int*   Returns an unsigned integer obtained by converting the components of a two\-component   floating\-point vector to the 16\-bit floating\-point representation found in the OpenGL   Specification, and then packing these two 16\-bit integers into a 32\-bit unsigned integer\.   The first vector component specifies the 16 least\-significant bits of the result; the   second component specifies the 16 most\-significant bits\. ### packSnorm2x16\(\) function #### glm.**packSnorm2x16**(**v**: *vec2*) -\> *int*   First, converts each component of the normalized floating\-point value ``` v ``` into 8\- or 16\-bit   integer values\. Then, the results are packed into the returned 32\-bit unsigned integer\.   The conversion for component ``` c ``` of ``` v ``` to fixed point is done as follows :   ``` round(clamp(v, -1, +1) * 32767.0) ```\. The first component of the vector will be written to   the least significant bits of the output; the last component will be written to the most   significant bits\. ### packSnorm4x8\(\) function #### glm.**packSnorm4x8**(**v**: *vec4*) -\> *int*   First, converts each component of the normalized floating\-point value ``` v ``` into 8\- or 16\-bit   integer values\. Then, the results are packed into the returned 32\-bit unsigned integer\.   The conversion for component ``` c ``` of ``` v ``` to fixed point is done as follows :   ``` round(clamp(c, -1, +1) * 127.0) ```\. The first component of the vector will be written to   the least significant bits of the output; the last component will be written to the most   significant bits\. ### packUnorm2x16\(\) function #### glm.**packUnorm2x16**(**v**: *vec2*) -\> *int*   First, converts each component of the normalized floating\-point value ``` v ``` into 8\- or 16\-bit   integer values\. Then, the results are packed into the returned 32\-bit unsigned integer\.   The conversion for component ``` c ``` of ``` v ``` to fixed point is done as follows :   ``` round(clamp(c, 0, +1) * 65535.0) ```\. The first component of the vector will be written to the   least significant bits of the output; the last component will be written to the most   significant bits\. ### packUnorm4x8\(\) function #### glm.**packUnorm4x8**(**v**: *vec4*) -\> *int*   First, converts each component of the normalized floating\-point value ``` v ``` into 8\- or 16\-bit   integer values\. Then, the results are packed into the returned 32\-bit unsigned integer\.   The conversion for component ``` c ``` of ``` v ``` to fixed point is done as follows :   ``` round(clamp(c, 0, +1) * 255.0) ```\. The first component of the vector will be written to the   least significant bits of the output; the last component will be written to the most   significant bits\. ### unpackDouble2x32\(\) function #### glm.**unpackDouble2x32**(**v**: *double*) -\> *uvec2*   Returns a two\-component unsigned integer vector representation of ``` v ```\. The bit\-level   representation of ``` v ``` is preserved\. The first component of the vector contains the 32 least   significant bits of the double; the second component consists the 32 most significant bits\. ### unpackHalf2x16\(\) function #### glm.**unpackHalf2x16**(**v**: *int*) -\> *vec2*   Returns a two\-component floating\-point vector with components obtained by unpacking a   32\-bit unsigned integer into a pair of 16\-bit values, interpreting those values as 16\-bit   floating\-point numbers according to the OpenGL Specification, and converting them to 32\-bit   floating\-point values\. The first component of the vector is obtained from the 16   least\-significant bits of ``` v ```; the second component is obtained from the 16   most\-significant bits of ``` v ```\. ### unpackSnorm2x16\(\) function #### glm.**unpackSnorm2x16**(**p**: *int*) -\> *vec2*   First, unpacks a single 32\-bit unsigned integer ``` p ``` into a pair of 16\-bit unsigned integers,   four 8\-bit unsigned integers, or four 8\-bit signed integers\. Then, each component is   converted to a normalized floating\-point value to generate the returned two\- or   four\-component vector\. The conversion for unpacked fixed\-point value ``` f ``` to floating point   is done as follows : ``` clamp(f / 32767.0, -1, +1) ```\. The first component of   the returned vector will be extracted from the least significant bits of the input; the   last component will be extracted from the most significant bits\. ### unpackSnorm4x8\(\) function #### glm.**unpackSnorm4x8**(**p**: *int*) -\> *vec4*   First, unpacks a single 32\-bit unsigned integer ``` p ``` into a pair of 16\-bit unsigned integers,   four 8\-bit unsigned integers, or four 8\-bit signed integers\. Then, each component is   converted to a normalized floating\-point value to generate the returned two\- or   four\-component vector\. The conversion for unpacked fixed\-point value ``` f ``` to floating point   is done as follows : ``` clamp(f / 127.0, -1, +1) ```\. The first component of the   returned vector will be extracted from the least significant bits of the input; the last   component will be extracted from the most significant bits\. ### unpackUnorm2x16\(\) function #### glm.**unpackUnorm2x16**(**p**: *int*) -\> *vec2*   First, unpacks a single 32\-bit unsigned integer ``` p ``` into a pair of 16\-bit unsigned integers,   four 8\-bit unsigned integers, or four 8\-bit signed integers\. Then, each component is   converted to a normalized floating\-point value to generate the returned two\- or   four\-component vector\. The conversion for unpacked fixed\-point value ``` f ``` to floating point   is done as follows : ``` f / 65535.0 ```\. The first component of the returned   vector will be extracted from the least significant bits of the input; the last component   will be extracted from the most significant bits\. ### unpackUnorm4x8\(\) function #### glm.**unpackUnorm4x8**(**p**: *int*) -\> *vec4*   First, unpacks a single 32\-bit unsigned integer ``` p ``` into a pair of 16\-bit unsigned integers,   four 8\-bit unsigned integers, or four 8\-bit signed integers\. Then, each component is   converted to a normalized floating\-point value to generate the returned two\- or   four\-component vector\. The conversion for unpacked fixed\-point value ``` f ``` to floating point   is done as follows : ``` f / 255.0 ```\. The first component of the returned vector   will be extracted from the least significant bits of the input; the last component will be   extracted from the most significant bits\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/detail/func_packing.sb000066400000000000000000000236421511156275200255530ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\func_packing methods\h1\ The following methods are all part of the \b\func_packing methods\b\. Provides GLSL functions to pack and unpack half, single and double-precision floating point values into more compact integer types. \h2\Table of contents\h2\ \ul\ \-\\url #packdouble2x32-function\\b\packDouble2x32\b\ function\url\ \-\\url #packhalf2x16-function\\b\packHalf2x16\b\ function\url\ \-\\url #packsnorm2x16-function\\b\packSnorm2x16\b\ function\url\ \-\\url #packsnorm4x8-function\\b\packSnorm4x8\b\ function\url\ \-\\url #packunorm2x16-function\\b\packUnorm2x16\b\ function\url\ \-\\url #packunorm4x8-function\\b\packUnorm4x8\b\ function\url\ \-\\url #unpackdouble2x32-function\\b\unpackDouble2x32\b\ function\url\ \-\\url #unpackhalf2x16-function\\b\unpackHalf2x16\b\ function\url\ \-\\url #unpacksnorm2x16-function\\b\unpackSnorm2x16\b\ function\url\ \-\\url #unpacksnorm4x8-function\\b\unpackSnorm4x8\b\ function\url\ \-\\url #unpackunorm2x16-function\\b\unpackUnorm2x16\b\ function\url\ \-\\url #unpackunorm4x8-function\\b\unpackUnorm4x8\b\ function\url\ \ul\ \h3\packDouble2x32() function\h3\ \raw\#### glm.**packDouble2x32**(**v**: *uvec2*) -\\> *float*\raw\ \raw\  \raw\Returns a double-qualifier value obtained by packing the components of \code\v\code\ into a 64-bit \raw\  \raw\value. If an IEEE 754 \code\Inf\code\ or \code\NaN\code\ is created, it will not signal, and the resulting floating \raw\  \raw\point value is unspecified. Otherwise, the bit-level representation of \code\v\code\ is preserved. The \raw\  \raw\first vector component specifies the 32 least significant bits; the second component \raw\  \raw\specifies the 32 most significant bits. \h3\packHalf2x16() function\h3\ \raw\#### glm.**packHalf2x16**(**v**: *vec2*) -\\> *int*\raw\ \raw\  \raw\Returns an unsigned integer obtained by converting the components of a two-component \raw\  \raw\floating-point vector to the 16-bit floating-point representation found in the OpenGL \raw\  \raw\Specification, and then packing these two 16-bit integers into a 32-bit unsigned integer. \raw\  \raw\The first vector component specifies the 16 least-significant bits of the result; the \raw\  \raw\second component specifies the 16 most-significant bits. \h3\packSnorm2x16() function\h3\ \raw\#### glm.**packSnorm2x16**(**v**: *vec2*) -\\> *int*\raw\ \raw\  \raw\First, converts each component of the normalized floating-point value \code\v\code\ into 8- or 16-bit \raw\  \raw\integer values. Then, the results are packed into the returned 32-bit unsigned integer. \raw\  \raw\The conversion for component \code\c\code\ of \code\v\code\ to fixed point is done as follows : \raw\  \raw\\code\round(clamp(v, -1, +1) * 32767.0)\code\. The first component of the vector will be written to \raw\  \raw\the least significant bits of the output; the last component will be written to the most \raw\  \raw\significant bits. \h3\packSnorm4x8() function\h3\ \raw\#### glm.**packSnorm4x8**(**v**: *vec4*) -\\> *int*\raw\ \raw\  \raw\First, converts each component of the normalized floating-point value \code\v\code\ into 8- or 16-bit \raw\  \raw\integer values. Then, the results are packed into the returned 32-bit unsigned integer. \raw\  \raw\The conversion for component \code\c\code\ of \code\v\code\ to fixed point is done as follows : \raw\  \raw\\code\round(clamp(c, -1, +1) * 127.0)\code\. The first component of the vector will be written to \raw\  \raw\the least significant bits of the output; the last component will be written to the most \raw\  \raw\significant bits. \h3\packUnorm2x16() function\h3\ \raw\#### glm.**packUnorm2x16**(**v**: *vec2*) -\\> *int*\raw\ \raw\  \raw\First, converts each component of the normalized floating-point value \code\v\code\ into 8- or 16-bit \raw\  \raw\integer values. Then, the results are packed into the returned 32-bit unsigned integer. \raw\  \raw\The conversion for component \code\c\code\ of \code\v\code\ to fixed point is done as follows : \raw\  \raw\\code\round(clamp(c, 0, +1) * 65535.0)\code\. The first component of the vector will be written to the \raw\  \raw\least significant bits of the output; the last component will be written to the most \raw\  \raw\significant bits. \h3\packUnorm4x8() function\h3\ \raw\#### glm.**packUnorm4x8**(**v**: *vec4*) -\\> *int*\raw\ \raw\  \raw\First, converts each component of the normalized floating-point value \code\v\code\ into 8- or 16-bit \raw\  \raw\integer values. Then, the results are packed into the returned 32-bit unsigned integer. \raw\  \raw\The conversion for component \code\c\code\ of \code\v\code\ to fixed point is done as follows : \raw\  \raw\\code\round(clamp(c, 0, +1) * 255.0)\code\. The first component of the vector will be written to the \raw\  \raw\least significant bits of the output; the last component will be written to the most \raw\  \raw\significant bits. \h3\unpackDouble2x32() function\h3\ \raw\#### glm.**unpackDouble2x32**(**v**: *double*) -\\> *uvec2*\raw\ \raw\  \raw\Returns a two-component unsigned integer vector representation of \code\v\code\. The bit-level \raw\  \raw\representation of \code\v\code\ is preserved. The first component of the vector contains the 32 least \raw\  \raw\significant bits of the double; the second component consists the 32 most significant bits. \h3\unpackHalf2x16() function\h3\ \raw\#### glm.**unpackHalf2x16**(**v**: *int*) -\\> *vec2*\raw\ \raw\  \raw\Returns a two-component floating-point vector with components obtained by unpacking a \raw\  \raw\32-bit unsigned integer into a pair of 16-bit values, interpreting those values as 16-bit \raw\  \raw\floating-point numbers according to the OpenGL Specification, and converting them to 32-bit \raw\  \raw\floating-point values. The first component of the vector is obtained from the 16 \raw\  \raw\least-significant bits of \code\v\code\; the second component is obtained from the 16 \raw\  \raw\most-significant bits of \code\v\code\. \h3\unpackSnorm2x16() function\h3\ \raw\#### glm.**unpackSnorm2x16**(**p**: *int*) -\\> *vec2*\raw\ \raw\  \raw\First, unpacks a single 32-bit unsigned integer \code\p\code\ into a pair of 16-bit unsigned integers, \raw\  \raw\four 8-bit unsigned integers, or four 8-bit signed integers. Then, each component is \raw\  \raw\converted to a normalized floating-point value to generate the returned two- or \raw\  \raw\four-component vector. The conversion for unpacked fixed-point value \code\f\code\ to floating point \raw\  \raw\is done as follows : \code\clamp(f / 32767.0, -1, +1)\code\. The first component of \raw\  \raw\the returned vector will be extracted from the least significant bits of the input; the \raw\  \raw\last component will be extracted from the most significant bits. \h3\unpackSnorm4x8() function\h3\ \raw\#### glm.**unpackSnorm4x8**(**p**: *int*) -\\> *vec4*\raw\ \raw\  \raw\First, unpacks a single 32-bit unsigned integer \code\p\code\ into a pair of 16-bit unsigned integers, \raw\  \raw\four 8-bit unsigned integers, or four 8-bit signed integers. Then, each component is \raw\  \raw\converted to a normalized floating-point value to generate the returned two- or \raw\  \raw\four-component vector. The conversion for unpacked fixed-point value \code\f\code\ to floating point \raw\  \raw\is done as follows : \code\clamp(f / 127.0, -1, +1)\code\. The first component of the \raw\  \raw\returned vector will be extracted from the least significant bits of the input; the last \raw\  \raw\component will be extracted from the most significant bits. \h3\unpackUnorm2x16() function\h3\ \raw\#### glm.**unpackUnorm2x16**(**p**: *int*) -\\> *vec2*\raw\ \raw\  \raw\First, unpacks a single 32-bit unsigned integer \code\p\code\ into a pair of 16-bit unsigned integers, \raw\  \raw\four 8-bit unsigned integers, or four 8-bit signed integers. Then, each component is \raw\  \raw\converted to a normalized floating-point value to generate the returned two- or \raw\  \raw\four-component vector. The conversion for unpacked fixed-point value \code\f\code\ to floating point \raw\  \raw\is done as follows : \code\f / 65535.0\code\. The first component of the returned \raw\  \raw\vector will be extracted from the least significant bits of the input; the last component \raw\  \raw\will be extracted from the most significant bits. \h3\unpackUnorm4x8() function\h3\ \raw\#### glm.**unpackUnorm4x8**(**p**: *int*) -\\> *vec4*\raw\ \raw\  \raw\First, unpacks a single 32-bit unsigned integer \code\p\code\ into a pair of 16-bit unsigned integers, \raw\  \raw\four 8-bit unsigned integers, or four 8-bit signed integers. Then, each component is \raw\  \raw\converted to a normalized floating-point value to generate the returned two- or \raw\  \raw\four-component vector. The conversion for unpacked fixed-point value \code\f\code\ to floating point \raw\  \raw\is done as follows : \code\f / 255.0\code\. The first component of the returned vector \raw\  \raw\will be extracted from the least significant bits of the input; the last component will be \raw\  \raw\extracted from the most significant bits. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/detail/func_trigonometric.md000066400000000000000000000152411511156275200270140ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # func\_trigonometric methods The following methods are all part of the **func\_trigonometric methods**\. Function parameters specified as angle are assumed to be in units of radians\. ## Table of contents * [**acos** function](#acos-function) * [**acosh** function](#acosh-function) * [**asin** function](#asin-function) * [**asinh** function](#asinh-function) * [**atan** function](#atan-function) * [**atanh** function](#atanh-function) * [**cos** function](#cos-function) * [**cosh** function](#cosh-function) * [**degrees** function](#degrees-function) * [**radians** function](#radians-function) * [**sin** function](#sin-function) * [**sinh** function](#sinh-function) * [**tan** function](#tan-function) * [**tanh** function](#tanh-function) ### acos\(\) function #### glm.**acos**(**x**: *float*) -\> *float*   Arc cosine\. Returns an angle whose cosine is ``` x ```\. The range of values returned by this function   is ``` [0, PI] ```\. Results are undefined if ``` |x| > 1 ```\. #### glm.**acos**(**x**: *vecN*) -\> *vecN*   Returns ``` acos(c) ``` for every component ``` c ``` of ``` x ```\. ### acosh\(\) function #### glm.**acosh**(**x**: *float*) -\> *float*   Arc hyperbolic cosine; returns the non\-negative inverse of ``` cosh ```\. Results are undefined   if ``` x < 1 ```\. #### glm.**acosh**(**x**: *vecN*) -\> *vecN*   Returns ``` acosh(c) ``` for every component ``` c ``` of ``` x ```\. ### asin\(\) function #### glm.**asin**(**x**: *float*) -\> *float*   Arc sine\. Returns an angle whose sine is ``` x ```\. The range of values returned by this function   is ``` [0, PI] ```\. Results are undefined if ``` |x| > 1 ```\. #### glm.**asin**(**x**: *vecN*) -\> *vecN*   Returns ``` asin(c) ``` for every component ``` c ``` of ``` x ```\. ### asinh\(\) function #### glm.**asinh**(**x**: *float*) -\> *float*   Arc hyperbolic sine; returns the inverse of ``` sinh ```\. #### glm.**asinh**(**x**: *vecN*) -\> *vecN*   Returns ``` asinh(c) ``` for every component ``` c ``` of ``` x ```\. ### atan\(\) function #### glm.**atan**(**y_over_x**: *float*) -\> *float*   Arc tangent\. Returns an angle whose tangent is ``` y_over_x ```\. The range of values returned by   this function is ``` [-PI / 2, PI / 2] ```\. #### glm.**atan**(**y_over_x**: *vecN*) -\> *vecN*   Returns ``` atan(c) ``` for every component ``` c ``` of ``` x ```\. #### glm.**atan**(**y**: *float*, **x**: *float*) -\> *float*   Arc tangent\. Returns an angle whose tangent is ``` y / x ```\. The signs of ``` x ``` and ``` y ``` are used to   determine what quadrant the angle is in\. The range of values returned by this function   is ``` [-PI, PI] ```\. Results are undefined if ``` x ``` and ``` y ``` are both ``` 0 ```\. #### glm.**atan**(**y**: *vecN*, **x**: *vecN*) -\> *vecN*   Returns ``` atan(y[i], x[i]) ``` for every index ``` i ```\. ### atanh\(\) function #### glm.**atanh**(**x**: *float*) -\> *float*   Arc hyperbolic tangent; returns the inverse of ``` tanh ```\. Results are undefined if ``` abs(x) >= 1 ```\. #### glm.**atanh**(**x**: *vecN*) -\> *vecN*   Returns ``` atanh(c) ``` for every component ``` c ``` of ``` x ```\. ### cos\(\) function #### glm.**cos**(**angle**: *float*) -\> *float*   The standard trigonometric cosine function\. The values returned by this function will range   from ``` [-1, 1] ```\. #### glm.**cos**(**angle**: *vecN*) -\> *vecN*   Returns ``` cos(c) ``` for every component ``` c ``` of ``` x ```\. ### cosh\(\) function #### glm.**cosh**(**angle**: *float*) -\> *float*   Returns the hyperbolic cosine function, ``` (exp(angle) + exp(-angle)) / 2 ```\. #### glm.**cosh**(**angle**: *vecN*) -\> *vecN*   Returns ``` cosh(c) ``` for every component ``` c ``` of ``` x ```\. ### degrees\(\) function #### glm.**degrees**(**angle**: *float*) -\> *float*   Converts radians to degrees and returns the result\. #### glm.**degrees**(**angle**: *vecN*) -\> *vecN*   Returns ``` degrees(c) ``` for every component ``` c ``` of ``` x ```\. ### radians\(\) function #### glm.**radians**(**angle**: *float*) -\> *float*   Converts degrees to radians and returns the result\. #### glm.**radians**(**angle**: *vecN*) -\> *vecN*   Returns ``` radians(c) ``` for every component ``` c ``` of ``` x ```\. ### sin\(\) function #### glm.**sin**(**angle**: *float*) -\> *float*   The standard trigonometric sine function\. The values returned by this function will range   from ``` [-1, 1] ```\. #### glm.**sin**(**angle**: *vecN*) -\> *vecN*   Returns ``` sin(c) ``` for every component ``` c ``` of ``` x ```\. ### sinh\(\) function #### glm.**sinh**(**angle**: *float*) -\> *float*   Returns the hyperbolic sine function, ``` (exp(angle) - exp(-angle)) / 2 ```\. #### glm.**sinh**(**angle**: *vecN*) -\> *vecN*   Returns ``` sinh(c) ``` for every component ``` c ``` of ``` x ```\. ### tan\(\) function #### glm.**tan**(**angle**: *float*) -\> *float*   The standard trigonometric tangent function\. #### glm.**tan**(**angle**: *vecN*) -\> *vecN*   Returns ``` tan(c) ``` for every component ``` c ``` of ``` x ```\. ### tanh\(\) function #### glm.**tanh**(**angle**: *float*) -\> *float*   Returns the hyperbolic tangent function, ``` sinh(angle) / cosh(angle) ``` #### glm.**tanh**(**angle**: *vecN*) -\> *vecN*   Returns ``` tanh(c) ``` for every component ``` c ``` of ``` x ```\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/detail/func_trigonometric.sb000066400000000000000000000167731511156275200270330ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\func_trigonometric methods\h1\ The following methods are all part of the \b\func_trigonometric methods\b\. Function parameters specified as angle are assumed to be in units of radians. \h2\Table of contents\h2\ \ul\ \-\\url #acos-function\\b\acos\b\ function\url\ \-\\url #acosh-function\\b\acosh\b\ function\url\ \-\\url #asin-function\\b\asin\b\ function\url\ \-\\url #asinh-function\\b\asinh\b\ function\url\ \-\\url #atan-function\\b\atan\b\ function\url\ \-\\url #atanh-function\\b\atanh\b\ function\url\ \-\\url #cos-function\\b\cos\b\ function\url\ \-\\url #cosh-function\\b\cosh\b\ function\url\ \-\\url #degrees-function\\b\degrees\b\ function\url\ \-\\url #radians-function\\b\radians\b\ function\url\ \-\\url #sin-function\\b\sin\b\ function\url\ \-\\url #sinh-function\\b\sinh\b\ function\url\ \-\\url #tan-function\\b\tan\b\ function\url\ \-\\url #tanh-function\\b\tanh\b\ function\url\ \ul\ \h3\acos() function\h3\ \raw\#### glm.**acos**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Arc cosine. Returns an angle whose cosine is \code\x\code\. The range of values returned by this function \raw\  \raw\is \code\[0, PI]\code\. Results are undefined if \code\|x| > 1\code\. \raw\#### glm.**acos**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\acos(c)\code\ for every component \code\c\code\ of \code\x\code\. \h3\acosh() function\h3\ \raw\#### glm.**acosh**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Arc hyperbolic cosine; returns the non-negative inverse of \code\cosh\code\. Results are undefined \raw\  \raw\if \code\x < 1\code\. \raw\#### glm.**acosh**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\acosh(c)\code\ for every component \code\c\code\ of \code\x\code\. \h3\asin() function\h3\ \raw\#### glm.**asin**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Arc sine. Returns an angle whose sine is \code\x\code\. The range of values returned by this function \raw\  \raw\is \code\[0, PI]\code\. Results are undefined if \code\|x| > 1\code\. \raw\#### glm.**asin**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\asin(c)\code\ for every component \code\c\code\ of \code\x\code\. \h3\asinh() function\h3\ \raw\#### glm.**asinh**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Arc hyperbolic sine; returns the inverse of \code\sinh\code\. \raw\#### glm.**asinh**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\asinh(c)\code\ for every component \code\c\code\ of \code\x\code\. \h3\atan() function\h3\ \raw\#### glm.**atan**(**y_over_x**: *float*) -\\> *float*\raw\ \raw\  \raw\Arc tangent. Returns an angle whose tangent is \code\y_over_x\code\. The range of values returned by \raw\  \raw\this function is \code\[-PI / 2, PI / 2]\code\. \raw\#### glm.**atan**(**y_over_x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\atan(c)\code\ for every component \code\c\code\ of \code\x\code\. \raw\#### glm.**atan**(**y**: *float*, **x**: *float*) -\\> *float*\raw\ \raw\  \raw\Arc tangent. Returns an angle whose tangent is \code\y / x\code\. The signs of \code\x\code\ and \code\y\code\ are used to \raw\  \raw\determine what quadrant the angle is in. The range of values returned by this function \raw\  \raw\is \code\[-PI, PI]\code\. Results are undefined if \code\x\code\ and \code\y\code\ are both \code\0\code\. \raw\#### glm.**atan**(**y**: *vecN*, **x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\atan(y[i], x[i])\code\ for every index \code\i\code\. \h3\atanh() function\h3\ \raw\#### glm.**atanh**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Arc hyperbolic tangent; returns the inverse of \code\tanh\code\. Results are undefined if \code\abs(x) >= 1\code\. \raw\#### glm.**atanh**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\atanh(c)\code\ for every component \code\c\code\ of \code\x\code\. \h3\cos() function\h3\ \raw\#### glm.**cos**(**angle**: *float*) -\\> *float*\raw\ \raw\  \raw\The standard trigonometric cosine function. The values returned by this function will range \raw\  \raw\from \code\[-1, 1]\code\. \raw\#### glm.**cos**(**angle**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\cos(c)\code\ for every component \code\c\code\ of \code\x\code\. \h3\cosh() function\h3\ \raw\#### glm.**cosh**(**angle**: *float*) -\\> *float*\raw\ \raw\  \raw\Returns the hyperbolic cosine function, \code\(exp(angle) + exp(-angle)) / 2\code\. \raw\#### glm.**cosh**(**angle**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\cosh(c)\code\ for every component \code\c\code\ of \code\x\code\. \h3\degrees() function\h3\ \raw\#### glm.**degrees**(**angle**: *float*) -\\> *float*\raw\ \raw\  \raw\Converts radians to degrees and returns the result. \raw\#### glm.**degrees**(**angle**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\degrees(c)\code\ for every component \code\c\code\ of \code\x\code\. \h3\radians() function\h3\ \raw\#### glm.**radians**(**angle**: *float*) -\\> *float*\raw\ \raw\  \raw\Converts degrees to radians and returns the result. \raw\#### glm.**radians**(**angle**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\radians(c)\code\ for every component \code\c\code\ of \code\x\code\. \h3\sin() function\h3\ \raw\#### glm.**sin**(**angle**: *float*) -\\> *float*\raw\ \raw\  \raw\The standard trigonometric sine function. The values returned by this function will range \raw\  \raw\from \code\[-1, 1]\code\. \raw\#### glm.**sin**(**angle**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\sin(c)\code\ for every component \code\c\code\ of \code\x\code\. \h3\sinh() function\h3\ \raw\#### glm.**sinh**(**angle**: *float*) -\\> *float*\raw\ \raw\  \raw\Returns the hyperbolic sine function, \code\(exp(angle) - exp(-angle)) / 2\code\. \raw\#### glm.**sinh**(**angle**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\sinh(c)\code\ for every component \code\c\code\ of \code\x\code\. \h3\tan() function\h3\ \raw\#### glm.**tan**(**angle**: *float*) -\\> *float*\raw\ \raw\  \raw\The standard trigonometric tangent function. \raw\#### glm.**tan**(**angle**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\tan(c)\code\ for every component \code\c\code\ of \code\x\code\. \h3\tanh() function\h3\ \raw\#### glm.**tanh**(**angle**: *float*) -\\> *float*\raw\ \raw\  \raw\Returns the hyperbolic tangent function, \code\sinh(angle) / cosh(angle)\code\ \raw\#### glm.**tanh**(**angle**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\tanh(c)\code\ for every component \code\c\code\ of \code\x\code\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/detail/func_vector_relational.md000066400000000000000000000133101511156275200276360ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # func\_vector\_relational methods The following methods are all part of the **func\_vector\_relational methods**\. Relational vector functions\. ## Table of contents * [**all** function](#all-function) * [**any** function](#any-function) * [**equal** function](#equal-function) * [**greaterThan** function](#greaterthan-function) * [**greaterThanEqual** function](#greaterthanequal-function) * [**lessThan** function](#lessthan-function) * [**lessThanEqual** function](#lessthanequal-function) * [**notEqual** function](#notequal-function) * [**not\_** function](#not_-function) ### all\(\) function #### glm.**all**(**v**: *bvecN*) -\> *bool*   Returns ``` True ``` if all components of ``` x ``` are ``` True ```\. ### any\(\) function #### glm.**any**(**v**: *bvecN*) -\> *bool*   Returns ``` True ``` if any component of ``` x ``` is ``` True ```\. ### equal\(\) function #### glm.**equal**(**x**: *vecN*, **y**: *vecN*) -\> *bvecN*   Returns the component\-wise comparison of result ``` x == y ```\. #### glm.**equal**(**x**: *quat*, **y**: *quat*) -\> *bvec4*   Returns the component\-wise comparison of result ``` x == y ```\. #### glm.**equal**(**x**: *matNxM*, **y**: *matNxM*) -\> *bvecN*   Perform a component\-wise equal\-to comparison of two matrices\. Return a boolean vector which   components value is ``` True ``` if this expression is satisfied per column of the matrices\. #### glm.**equal**(**x**: *number*, **y**: *number*, **ULPs**: *int*) -\> *bool*   Returns the component\-wise comparison between two scalars in term of ``` ULPs ```\. #### glm.**equal**(**x**: *vecN*, **y**: *vecN*, **ULPs**: *int*) -\> *bvecN*   Returns the component\-wise comparison between two vectors in term of ``` ULPs ```\. #### glm.**equal**(**x**: *matNxM*, **y**: *matNxM*, **ULPs**: *int*) -\> *bvecN*   Returns the component\-wise comparison between two matrices in term of ``` ULPs ```\. #### glm.**equal**(**x**: *vecN*, **y**: *vecN*, **ULPs**: *ivecN*) -\> *bvecN*   Returns the component\-wise comparison between two vectors in term of ``` ULPs ```\. #### glm.**equal**(**x**: *matNxM*, **y**: *matNxM*, **ULPs**: *ivecN*) -\> *bvecN*   Returns the component\-wise comparison between two matrices in term of ``` ULPs ```\. #### glm.**equal**(**x**: *number*, **y**: *number*, **epsilon**: *number*) -\> *bool*   Returns the comparison of ``` |x - y| < epsilon ```\. #### glm.**equal**(**x**: *vecN*, **y**: *vecN*, **epsilon**: *number*) -\> *bvecN*   Returns the component\-wise comparison of ``` |x - y| < epsilon ```\. #### glm.**equal**(**x**: *quat*, **y**: *quat*, **epsilon**: *number*) -\> *bvec4*   Returns the component\-wise comparison of ``` |x - y| < epsilon ```\. #### glm.**equal**(**x**: *matNxM*, **y**: *matNxM*, **epsilon**: *number*) -\> *bvecN*   Returns the component\-wise comparison of ``` |x - y| < epsilon ```\. #### glm.**equal**(**x**: *vecN*, **y**: *vecN*, **epsilon**: *vecN*) -\> *bvecN*   Returns the component\-wise comparison of ``` |x - y| < epsilon ```\. #### glm.**equal**(**x**: *matNxM*, **y**: *matNxM*, **epsilon**: *vecN*) -\> *bvecN*   Returns the component\-wise comparison of ``` |x - y| < epsilon ```\. ### greaterThan\(\) function #### glm.**greaterThan**(**x**: *vecN*, **y**: *vecN*) -\> *bvecN*   Returns the component\-wise comparison of result ``` x > y ```\. #### glm.**greaterThan**(**x**: *quat*, **y**: *quat*) -\> *bvec4*   Returns the component\-wise comparison of result ``` x > y ```\. ### greaterThanEqual\(\) function #### glm.**greaterThanEqual**(**x**: *vecN*, **y**: *vecN*) -\> *bvecN*   Returns the component\-wise comparison of result ``` x >= y ```\. #### glm.**greaterThanEqual**(**x**: *quat*, **y**: *quat*) -\> *bvec4*   Returns the component\-wise comparison of result ``` x >= y ```\. ### lessThan\(\) function #### glm.**lessThan**(**x**: *vecN*, **y**: *vecN*) -\> *bvecN*   Returns the component\-wise comparison of result ``` x < y ```\. #### glm.**lessThan**(**x**: *quat*, **y**: *quat*) -\> *bvec4*   Returns the component\-wise comparison of result ``` x < y ```\. ### lessThanEqual\(\) function #### glm.**lessThanEqual**(**x**: *vecN*, **y**: *vecN*) -\> *bvecN*   Returns the component\-wise comparison of result ``` x <= y ```\. #### glm.**lessThanEqual**(**x**: *quat*, **y**: *quat*) -\> *bvec4*   Returns the component\-wise comparison of result ``` x <= y ```\. ### notEqual\(\) function #### glm.**notEqual**(***args**) -\> *bvecN*   Returns ``` not equal(*args) ```\. ### not\_\(\) function #### glm.**not_**(**v**: *bvecN*) -\> *bool*   Returns the component\-wise logical complement of ``` x ```\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/detail/func_vector_relational.sb000066400000000000000000000143421511156275200276500ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\func_vector_relational methods\h1\ The following methods are all part of the \b\func_vector_relational methods\b\. Relational vector functions. \h2\Table of contents\h2\ \ul\ \-\\url #all-function\\b\all\b\ function\url\ \-\\url #any-function\\b\any\b\ function\url\ \-\\url #equal-function\\b\equal\b\ function\url\ \-\\url #greaterthan-function\\b\greaterThan\b\ function\url\ \-\\url #greaterthanequal-function\\b\greaterThanEqual\b\ function\url\ \-\\url #lessthan-function\\b\lessThan\b\ function\url\ \-\\url #lessthanequal-function\\b\lessThanEqual\b\ function\url\ \-\\url #notequal-function\\b\notEqual\b\ function\url\ \-\\url #not_-function\\b\not_\b\ function\url\ \ul\ \h3\all() function\h3\ \raw\#### glm.**all**(**v**: *bvecN*) -\\> *bool*\raw\ \raw\  \raw\Returns \code\True\code\ if all components of \code\x\code\ are \code\True\code\. \h3\any() function\h3\ \raw\#### glm.**any**(**v**: *bvecN*) -\\> *bool*\raw\ \raw\  \raw\Returns \code\True\code\ if any component of \code\x\code\ is \code\True\code\. \h3\equal() function\h3\ \raw\#### glm.**equal**(**x**: *vecN*, **y**: *vecN*) -\\> *bvecN*\raw\ \raw\  \raw\Returns the component-wise comparison of result \code\x == y\code\. \raw\#### glm.**equal**(**x**: *quat*, **y**: *quat*) -\\> *bvec4*\raw\ \raw\  \raw\Returns the component-wise comparison of result \code\x == y\code\. \raw\#### glm.**equal**(**x**: *matNxM*, **y**: *matNxM*) -\\> *bvecN*\raw\ \raw\  \raw\Perform a component-wise equal-to comparison of two matrices. Return a boolean vector which \raw\  \raw\components value is \code\True\code\ if this expression is satisfied per column of the matrices. \raw\#### glm.**equal**(**x**: *number*, **y**: *number*, **ULPs**: *int*) -\\> *bool*\raw\ \raw\  \raw\Returns the component-wise comparison between two scalars in term of \code\ULPs\code\. \raw\#### glm.**equal**(**x**: *vecN*, **y**: *vecN*, **ULPs**: *int*) -\\> *bvecN*\raw\ \raw\  \raw\Returns the component-wise comparison between two vectors in term of \code\ULPs\code\. \raw\#### glm.**equal**(**x**: *matNxM*, **y**: *matNxM*, **ULPs**: *int*) -\\> *bvecN*\raw\ \raw\  \raw\Returns the component-wise comparison between two matrices in term of \code\ULPs\code\. \raw\#### glm.**equal**(**x**: *vecN*, **y**: *vecN*, **ULPs**: *ivecN*) -\\> *bvecN*\raw\ \raw\  \raw\Returns the component-wise comparison between two vectors in term of \code\ULPs\code\. \raw\#### glm.**equal**(**x**: *matNxM*, **y**: *matNxM*, **ULPs**: *ivecN*) -\\> *bvecN*\raw\ \raw\  \raw\Returns the component-wise comparison between two matrices in term of \code\ULPs\code\. \raw\#### glm.**equal**(**x**: *number*, **y**: *number*, **epsilon**: *number*) -\\> *bool*\raw\ \raw\  \raw\Returns the comparison of \code\|x - y| < epsilon\code\. \raw\#### glm.**equal**(**x**: *vecN*, **y**: *vecN*, **epsilon**: *number*) -\\> *bvecN*\raw\ \raw\  \raw\Returns the component-wise comparison of \code\|x - y| < epsilon\code\. \raw\#### glm.**equal**(**x**: *quat*, **y**: *quat*, **epsilon**: *number*) -\\> *bvec4*\raw\ \raw\  \raw\Returns the component-wise comparison of \code\|x - y| < epsilon\code\. \raw\#### glm.**equal**(**x**: *matNxM*, **y**: *matNxM*, **epsilon**: *number*) -\\> *bvecN*\raw\ \raw\  \raw\Returns the component-wise comparison of \code\|x - y| < epsilon\code\. \raw\#### glm.**equal**(**x**: *vecN*, **y**: *vecN*, **epsilon**: *vecN*) -\\> *bvecN*\raw\ \raw\  \raw\Returns the component-wise comparison of \code\|x - y| < epsilon\code\. \raw\#### glm.**equal**(**x**: *matNxM*, **y**: *matNxM*, **epsilon**: *vecN*) -\\> *bvecN*\raw\ \raw\  \raw\Returns the component-wise comparison of \code\|x - y| < epsilon\code\. \h3\greaterThan() function\h3\ \raw\#### glm.**greaterThan**(**x**: *vecN*, **y**: *vecN*) -\\> *bvecN*\raw\ \raw\  \raw\Returns the component-wise comparison of result \code\x > y\code\. \raw\#### glm.**greaterThan**(**x**: *quat*, **y**: *quat*) -\\> *bvec4*\raw\ \raw\  \raw\Returns the component-wise comparison of result \code\x > y\code\. \h3\greaterThanEqual() function\h3\ \raw\#### glm.**greaterThanEqual**(**x**: *vecN*, **y**: *vecN*) -\\> *bvecN*\raw\ \raw\  \raw\Returns the component-wise comparison of result \code\x >= y\code\. \raw\#### glm.**greaterThanEqual**(**x**: *quat*, **y**: *quat*) -\\> *bvec4*\raw\ \raw\  \raw\Returns the component-wise comparison of result \code\x >= y\code\. \h3\lessThan() function\h3\ \raw\#### glm.**lessThan**(**x**: *vecN*, **y**: *vecN*) -\\> *bvecN*\raw\ \raw\  \raw\Returns the component-wise comparison of result \code\x < y\code\. \raw\#### glm.**lessThan**(**x**: *quat*, **y**: *quat*) -\\> *bvec4*\raw\ \raw\  \raw\Returns the component-wise comparison of result \code\x < y\code\. \h3\lessThanEqual() function\h3\ \raw\#### glm.**lessThanEqual**(**x**: *vecN*, **y**: *vecN*) -\\> *bvecN*\raw\ \raw\  \raw\Returns the component-wise comparison of result \code\x <= y\code\. \raw\#### glm.**lessThanEqual**(**x**: *quat*, **y**: *quat*) -\\> *bvec4*\raw\ \raw\  \raw\Returns the component-wise comparison of result \code\x <= y\code\. \h3\notEqual() function\h3\ \raw\#### glm.**notEqual**(***args**) -\\> *bvecN*\raw\ \raw\  \raw\Returns \code\not equal(*args)\code\. \h3\not_() function\h3\ \raw\#### glm.**not_**(**v**: *bvecN*) -\\> *bool*\raw\ \raw\  \raw\Returns the component-wise logical complement of \code\x\code\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/other/000077500000000000000000000000001511156275200224465ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/other/README.md000066400000000000000000000021411511156275200237230ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # Table of Contents * [other methods](other.md) * [**add** function ](other.md#add-function) * [**and\_** function ](other.md#and_-function) * [**cmp** function ](other.md#cmp-function) * [**div** function ](other.md#div-function) * [**floordiv** function ](other.md#floordiv-function) * [**if\_else** function ](other.md#if_else-function) * [**inv** function ](other.md#inv-function) * [**lshift** function ](other.md#lshift-function) * [**mul** function ](other.md#mul-function) * [**neg** function ](other.md#neg-function) * [**or\_** function ](other.md#or_-function) * [**pos** function ](other.md#pos-function) * [**quat\_to\_vec4** function ](other.md#quat_to_vec4-function) * [**rshift** function ](other.md#rshift-function) * [**silence** function ](other.md#silence-function) * [**sub** function ](other.md#sub-function) * [**vec4\_to\_quat** function ](other.md#vec4_to_quat-function) * [**xor** function ](other.md#xor-function) Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/other/README.sb000066400000000000000000000022751511156275200237370ustar00rootroot00000000000000\h1\Table of Contents\h1\ \ul\ \-\ \url other.md \other methods\ url\ \--\ \url other.md#add-function \\b\add\b\ function \ url\ \--\ \url other.md#and_-function \\b\and_\b\ function \ url\ \--\ \url other.md#cmp-function \\b\cmp\b\ function \ url\ \--\ \url other.md#div-function \\b\div\b\ function \ url\ \--\ \url other.md#floordiv-function \\b\floordiv\b\ function \ url\ \--\ \url other.md#if_else-function \\b\if_else\b\ function \ url\ \--\ \url other.md#inv-function \\b\inv\b\ function \ url\ \--\ \url other.md#lshift-function \\b\lshift\b\ function \ url\ \--\ \url other.md#mul-function \\b\mul\b\ function \ url\ \--\ \url other.md#neg-function \\b\neg\b\ function \ url\ \--\ \url other.md#or_-function \\b\or_\b\ function \ url\ \--\ \url other.md#pos-function \\b\pos\b\ function \ url\ \--\ \url other.md#quat_to_vec4-function \\b\quat_to_vec4\b\ function \ url\ \--\ \url other.md#rshift-function \\b\rshift\b\ function \ url\ \--\ \url other.md#silence-function \\b\silence\b\ function \ url\ \--\ \url other.md#sub-function \\b\sub\b\ function \ url\ \--\ \url other.md#vec4_to_quat-function \\b\vec4_to_quat\b\ function \ url\ \--\ \url other.md#xor-function \\b\xor\b\ function \ url\ \ul\ Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/other/other.md000066400000000000000000000070121511156275200241110ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # other methods The following methods are all part of the **other methods**\. PyGLM's custom functions\. ## Table of contents * [**add** function](#add-function) * [**and\_** function](#and_-function) * [**cmp** function](#cmp-function) * [**div** function](#div-function) * [**floordiv** function](#floordiv-function) * [**if\_else** function](#if_else-function) * [**inv** function](#inv-function) * [**lshift** function](#lshift-function) * [**mul** function](#mul-function) * [**neg** function](#neg-function) * [**or\_** function](#or_-function) * [**pos** function](#pos-function) * [**quat\_to\_vec4** function](#quat_to_vec4-function) * [**rshift** function](#rshift-function) * [**silence** function](#silence-function) * [**sub** function](#sub-function) * [**vec4\_to\_quat** function](#vec4_to_quat-function) * [**xor** function](#xor-function) ### add\(\) function #### glm.**add**(**a**, **b**) -\> *Any*   Equivalent to ``` a + b ```\. ### and\_\(\) function #### glm.**and_**(**a**, **b**) -\> *Any*   Equivalent to ``` a & b ```\. ### cmp\(\) function #### glm.**cmp**(**a**, **b**) -\> *Any*   Equivalent to ``` -1 if a < b else 1 if a > b else 0 ```\. ### div\(\) function #### glm.**div**(**a**, **b**) -\> *Any*   Equivalent to ``` a / b ```\. ### floordiv\(\) function #### glm.**floordiv**(**a**, **b**) -\> *Any*   Equivalent to ``` a // b ```\. ### if\_else\(\) function #### glm.**if_else**(**b**, **x**, **y**) -\> *Any*   Equivalent to ``` x if b else y ```\. ### inv\(\) function #### glm.**inv**(**a**) -\> *Any*   Equivalent to ``` ~a ```\. ### lshift\(\) function #### glm.**lshift**(**a**, **b**) -\> *Any*   Equivalent to ``` a << b ```\. ### mul\(\) function #### glm.**mul**(**a**, **b**) -\> *Any*   Equivalent to ``` a * b ```\. ### neg\(\) function #### glm.**neg**(**a**) -\> *Any*   Equivalent to ``` -a ```\. ### or\_\(\) function #### glm.**or_**(**a**, **b**) -\> *Any*   Equivalent to ``` a | b ```\. ### pos\(\) function #### glm.**pos**(**a**) -\> *Any*   Equivalent to ``` +a ```\. ### quat\_to\_vec4\(\) function #### glm.**quat_to_vec4**(**quat**) -\> *vec4*   Component wise conversion of quat to vec4\. ### rshift\(\) function #### glm.**rshift**(**a**, **b**) -\> *Any*   Equivalent to ``` a >> b ```\. ### silence\(\) function #### glm.**silence**(**ID**: *int*) -\> *None*   Silence a PyGLM warning \(or all using 0\)\. ### sub\(\) function #### glm.**sub**(**a**, **b**) -\> *Any*   Equivalent to ``` a - b ```\. ### vec4\_to\_quat\(\) function #### glm.**vec4_to_quat**(**vec4**) -\> *quat*   Component wise conversion of vec4 to quat\. ### xor\(\) function #### glm.**xor**(**a**, **b**) -\> *Any*   Equivalent to ``` a ^ b ```\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/other/other.sb000066400000000000000000000077061511156275200241270ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\other methods\h1\ The following methods are all part of the \b\other methods\b\. PyGLM's custom functions. \h2\Table of contents\h2\ \ul\ \-\\url #add-function\\b\add\b\ function\url\ \-\\url #and_-function\\b\and_\b\ function\url\ \-\\url #cmp-function\\b\cmp\b\ function\url\ \-\\url #div-function\\b\div\b\ function\url\ \-\\url #floordiv-function\\b\floordiv\b\ function\url\ \-\\url #if_else-function\\b\if_else\b\ function\url\ \-\\url #inv-function\\b\inv\b\ function\url\ \-\\url #lshift-function\\b\lshift\b\ function\url\ \-\\url #mul-function\\b\mul\b\ function\url\ \-\\url #neg-function\\b\neg\b\ function\url\ \-\\url #or_-function\\b\or_\b\ function\url\ \-\\url #pos-function\\b\pos\b\ function\url\ \-\\url #quat_to_vec4-function\\b\quat_to_vec4\b\ function\url\ \-\\url #rshift-function\\b\rshift\b\ function\url\ \-\\url #silence-function\\b\silence\b\ function\url\ \-\\url #sub-function\\b\sub\b\ function\url\ \-\\url #vec4_to_quat-function\\b\vec4_to_quat\b\ function\url\ \-\\url #xor-function\\b\xor\b\ function\url\ \ul\ \h3\add() function\h3\ \raw\#### glm.**add**(**a**, **b**) -\\> *Any*\raw\ \raw\  \raw\Equivalent to \code\a + b\code\. \h3\and_() function\h3\ \raw\#### glm.**and_**(**a**, **b**) -\\> *Any*\raw\ \raw\  \raw\Equivalent to \code\a & b\code\. \h3\cmp() function\h3\ \raw\#### glm.**cmp**(**a**, **b**) -\\> *Any*\raw\ \raw\  \raw\Equivalent to \code\-1 if a < b else 1 if a > b else 0\code\. \h3\div() function\h3\ \raw\#### glm.**div**(**a**, **b**) -\\> *Any*\raw\ \raw\  \raw\Equivalent to \code\a / b\code\. \h3\floordiv() function\h3\ \raw\#### glm.**floordiv**(**a**, **b**) -\\> *Any*\raw\ \raw\  \raw\Equivalent to \code\a // b\code\. \h3\if_else() function\h3\ \raw\#### glm.**if_else**(**b**, **x**, **y**) -\\> *Any*\raw\ \raw\  \raw\Equivalent to \code\x if b else y\code\. \h3\inv() function\h3\ \raw\#### glm.**inv**(**a**) -\\> *Any*\raw\ \raw\  \raw\Equivalent to \code\~a\code\. \h3\lshift() function\h3\ \raw\#### glm.**lshift**(**a**, **b**) -\\> *Any*\raw\ \raw\  \raw\Equivalent to \code\a << b\code\. \h3\mul() function\h3\ \raw\#### glm.**mul**(**a**, **b**) -\\> *Any*\raw\ \raw\  \raw\Equivalent to \code\a * b\code\. \h3\neg() function\h3\ \raw\#### glm.**neg**(**a**) -\\> *Any*\raw\ \raw\  \raw\Equivalent to \code\-a\code\. \h3\or_() function\h3\ \raw\#### glm.**or_**(**a**, **b**) -\\> *Any*\raw\ \raw\  \raw\Equivalent to \code\a | b\code\. \h3\pos() function\h3\ \raw\#### glm.**pos**(**a**) -\\> *Any*\raw\ \raw\  \raw\Equivalent to \code\+a\code\. \h3\quat_to_vec4() function\h3\ \raw\#### glm.**quat_to_vec4**(**quat**) -\\> *vec4*\raw\ \raw\  \raw\Component wise conversion of quat to vec4. \h3\rshift() function\h3\ \raw\#### glm.**rshift**(**a**, **b**) -\\> *Any*\raw\ \raw\  \raw\Equivalent to \code\a >> b\code\. \h3\silence() function\h3\ \raw\#### glm.**silence**(**ID**: *int*) -\\> *None*\raw\ \raw\  \raw\Silence a PyGLM warning (or all using 0). \h3\sub() function\h3\ \raw\#### glm.**sub**(**a**, **b**) -\\> *Any*\raw\ \raw\  \raw\Equivalent to \code\a - b\code\. \h3\vec4_to_quat() function\h3\ \raw\#### glm.**vec4_to_quat**(**vec4**) -\\> *quat*\raw\ \raw\  \raw\Component wise conversion of vec4 to quat. \h3\xor() function\h3\ \raw\#### glm.**xor**(**a**, **b**) -\\> *Any*\raw\ \raw\  \raw\Equivalent to \code\a ^ b\code\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/000077500000000000000000000000001511156275200260665ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/README.md000066400000000000000000000302621511156275200273500ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # Table of Contents * [color\_space methods](color_space.md) * [**convertLinearToSRGB** function ](color_space.md#convertLinearToSRGB-function) * [**convertSRGBToLinear** function ](color_space.md#convertSRGBToLinear-function) * [constants methods](constants.md) * [**e** function ](constants.md#e-function) * [**epsilon** function ](constants.md#epsilon-function) * [**euler** function ](constants.md#euler-function) * [**four\_over\_pi** function ](constants.md#four_over_pi-function) * [**golden\_ratio** function ](constants.md#golden_ratio-function) * [**half\_pi** function ](constants.md#half_pi-function) * [**ln\_ln\_two** function ](constants.md#ln_ln_two-function) * [**ln\_ten** function ](constants.md#ln_ten-function) * [**ln\_two** function ](constants.md#ln_two-function) * [**one** function ](constants.md#one-function) * [**one\_over\_pi** function ](constants.md#one_over_pi-function) * [**one\_over\_root\_two** function ](constants.md#one_over_root_two-function) * [**one\_over\_two\_pi** function ](constants.md#one_over_two_pi-function) * [**pi** function ](constants.md#pi-function) * [**quarter\_pi** function ](constants.md#quarter_pi-function) * [**root\_five** function ](constants.md#root_five-function) * [**root\_half\_pi** function ](constants.md#root_half_pi-function) * [**root\_ln\_four** function ](constants.md#root_ln_four-function) * [**root\_pi** function ](constants.md#root_pi-function) * [**root\_three** function ](constants.md#root_three-function) * [**root\_two** function ](constants.md#root_two-function) * [**root\_two\_pi** function ](constants.md#root_two_pi-function) * [**third** function ](constants.md#third-function) * [**three\_over\_two\_pi** function ](constants.md#three_over_two_pi-function) * [**two\_over\_pi** function ](constants.md#two_over_pi-function) * [**two\_over\_root\_pi** function ](constants.md#two_over_root_pi-function) * [**two\_pi** function ](constants.md#two_pi-function) * [**two\_thirds** function ](constants.md#two_thirds-function) * [**zero** function ](constants.md#zero-function) * [epsilon methods](epsilon.md) * [**epsilonEqual** function ](epsilon.md#epsilonEqual-function) * [**epsilonNotEqual** function ](epsilon.md#epsilonNotEqual-function) * [integer methods](integer.md) * [**iround** function ](integer.md#iround-function) * [**uround** function ](integer.md#uround-function) * [matrix\_access methods](matrix_access.md) * [**column** function ](matrix_access.md#column-function) * [**row** function ](matrix_access.md#row-function) * [matrix\_inverse methods](matrix_inverse.md) * [**affineInverse** function ](matrix_inverse.md#affineInverse-function) * [**inverseTranspose** function ](matrix_inverse.md#inverseTranspose-function) * [noise methods](noise.md) * [**perlin** function ](noise.md#perlin-function) * [**simplex** function ](noise.md#simplex-function) * [packing methods](packing.md) * [**packF2x11\_1x10** function ](packing.md#packF2x11_1x10-function) * [**packF3x9\_E1x5** function ](packing.md#packF3x9_E1x5-function) * [**packHalf** function ](packing.md#packHalf-function) * [**packHalf1x16** function ](packing.md#packHalf1x16-function) * [**packHalf4x16** function ](packing.md#packHalf4x16-function) * [**packI3x10\_1x2** function ](packing.md#packI3x10_1x2-function) * [**packInt2x16** function ](packing.md#packInt2x16-function) * [**packInt2x32** function ](packing.md#packInt2x32-function) * [**packInt2x8** function ](packing.md#packInt2x8-function) * [**packInt4x16** function ](packing.md#packInt4x16-function) * [**packInt4x8** function ](packing.md#packInt4x8-function) * [**packRGBM** function ](packing.md#packRGBM-function) * [**packSnorm** function ](packing.md#packSnorm-function) * [**packSnorm1x16** function ](packing.md#packSnorm1x16-function) * [**packSnorm1x8** function ](packing.md#packSnorm1x8-function) * [**packSnorm2x8** function ](packing.md#packSnorm2x8-function) * [**packSnorm3x10\_1x2** function ](packing.md#packSnorm3x10_1x2-function) * [**packSnorm4x16** function ](packing.md#packSnorm4x16-function) * [**packU3x10\_1x2** function ](packing.md#packU3x10_1x2-function) * [**packUint2x16** function ](packing.md#packUint2x16-function) * [**packUint2x32** function ](packing.md#packUint2x32-function) * [**packUint2x8** function ](packing.md#packUint2x8-function) * [**packUint4x16** function ](packing.md#packUint4x16-function) * [**packUint4x8** function ](packing.md#packUint4x8-function) * [**packUnorm** function ](packing.md#packUnorm-function) * [**packUnorm1x16** function ](packing.md#packUnorm1x16-function) * [**packUnorm1x5\_1x6\_1x5** function ](packing.md#packUnorm1x5_1x6_1x5-function) * [**packUnorm1x8** function ](packing.md#packUnorm1x8-function) * [**packUnorm2x3\_1x2** function ](packing.md#packUnorm2x3_1x2-function) * [**packUnorm2x4** function ](packing.md#packUnorm2x4-function) * [**packUnorm2x8** function ](packing.md#packUnorm2x8-function) * [**packUnorm3x10\_1x2** function ](packing.md#packUnorm3x10_1x2-function) * [**packUnorm3x5\_1x1** function ](packing.md#packUnorm3x5_1x1-function) * [**packUnorm4x16** function ](packing.md#packUnorm4x16-function) * [**packUnorm4x4** function ](packing.md#packUnorm4x4-function) * [**unpackF2x11\_1x10** function ](packing.md#unpackF2x11_1x10-function) * [**unpackF3x9\_E1x5** function ](packing.md#unpackF3x9_E1x5-function) * [**unpackHalf** function ](packing.md#unpackHalf-function) * [**unpackHalf1x16** function ](packing.md#unpackHalf1x16-function) * [**unpackHalf4x16** function ](packing.md#unpackHalf4x16-function) * [**unpackI3x10\_1x2** function ](packing.md#unpackI3x10_1x2-function) * [**unpackInt2x16** function ](packing.md#unpackInt2x16-function) * [**unpackInt2x32** function ](packing.md#unpackInt2x32-function) * [**unpackInt2x8** function ](packing.md#unpackInt2x8-function) * [**unpackInt4x16** function ](packing.md#unpackInt4x16-function) * [**unpackInt4x8** function ](packing.md#unpackInt4x8-function) * [**unpackRGBM** function ](packing.md#unpackRGBM-function) * [**unpackSnorm** function ](packing.md#unpackSnorm-function) * [**unpackSnorm1x16** function ](packing.md#unpackSnorm1x16-function) * [**unpackSnorm1x8** function ](packing.md#unpackSnorm1x8-function) * [**unpackSnorm2x8** function ](packing.md#unpackSnorm2x8-function) * [**unpackSnorm3x10\_1x2** function ](packing.md#unpackSnorm3x10_1x2-function) * [**unpackSnorm4x16** function ](packing.md#unpackSnorm4x16-function) * [**unpackU3x10\_1x2** function ](packing.md#unpackU3x10_1x2-function) * [**unpackUint2x16** function ](packing.md#unpackUint2x16-function) * [**unpackUint2x32** function ](packing.md#unpackUint2x32-function) * [**unpackUint2x8** function ](packing.md#unpackUint2x8-function) * [**unpackUint4x16** function ](packing.md#unpackUint4x16-function) * [**unpackUint4x8** function ](packing.md#unpackUint4x8-function) * [**unpackUnorm** function ](packing.md#unpackUnorm-function) * [**unpackUnorm1x16** function ](packing.md#unpackUnorm1x16-function) * [**unpackUnorm1x5\_1x6\_1x5** function ](packing.md#unpackUnorm1x5_1x6_1x5-function) * [**unpackUnorm1x8** function ](packing.md#unpackUnorm1x8-function) * [**unpackUnorm2x3\_1x2** function ](packing.md#unpackUnorm2x3_1x2-function) * [**unpackUnorm2x4** function ](packing.md#unpackUnorm2x4-function) * [**unpackUnorm2x8** function ](packing.md#unpackUnorm2x8-function) * [**unpackUnorm3x10\_1x2** function ](packing.md#unpackUnorm3x10_1x2-function) * [**unpackUnorm3x5\_1x1** function ](packing.md#unpackUnorm3x5_1x1-function) * [**unpackUnorm4x16** function ](packing.md#unpackUnorm4x16-function) * [**unpackUnorm4x4** function ](packing.md#unpackUnorm4x4-function) * [quaternion methods](quaternion.md) * [**eulerAngles** function ](quaternion.md#eulerAngles-function) * [**mat3\_cast** function ](quaternion.md#mat3_cast-function) * [**mat4\_cast** function ](quaternion.md#mat4_cast-function) * [**pitch** function ](quaternion.md#pitch-function) * [**quatLookAt** function ](quaternion.md#quatLookAt-function) * [**quatLookAtLH** function ](quaternion.md#quatLookAtLH-function) * [**quatLookAtRH** function ](quaternion.md#quatLookAtRH-function) * [**quat\_cast** function ](quaternion.md#quat_cast-function) * [**roll** function ](quaternion.md#roll-function) * [**yaw** function ](quaternion.md#yaw-function) * [random methods](random.md) * [**ballRand** function ](random.md#ballRand-function) * [**circularRand** function ](random.md#circularRand-function) * [**diskRand** function ](random.md#diskRand-function) * [**gaussRand** function ](random.md#gaussRand-function) * [**linearRand** function ](random.md#linearRand-function) * [**setSeed** function ](random.md#setSeed-function) * [**sphericalRand** function ](random.md#sphericalRand-function) * [reciprocal methods](reciprocal.md) * [**acot** function ](reciprocal.md#acot-function) * [**acoth** function ](reciprocal.md#acoth-function) * [**acsc** function ](reciprocal.md#acsc-function) * [**acsch** function ](reciprocal.md#acsch-function) * [**asec** function ](reciprocal.md#asec-function) * [**asech** function ](reciprocal.md#asech-function) * [**cot** function ](reciprocal.md#cot-function) * [**coth** function ](reciprocal.md#coth-function) * [**csc** function ](reciprocal.md#csc-function) * [**csch** function ](reciprocal.md#csch-function) * [**sec** function ](reciprocal.md#sec-function) * [**sech** function ](reciprocal.md#sech-function) * [round methods](round.md) * [**ceilMultiple** function ](round.md#ceilMultiple-function) * [**ceilPowerOfTwo** function ](round.md#ceilPowerOfTwo-function) * [**floorMultiple** function ](round.md#floorMultiple-function) * [**floorPowerOfTwo** function ](round.md#floorPowerOfTwo-function) * [**roundMultiple** function ](round.md#roundMultiple-function) * [**roundPowerOfTwo** function ](round.md#roundPowerOfTwo-function) * [type\_ptr methods](type_ptr.md) * [**make\_mat2** function ](type_ptr.md#make_mat2-function) * [**make\_mat2x2** function ](type_ptr.md#make_mat2x2-function) * [**make\_mat2x3** function ](type_ptr.md#make_mat2x3-function) * [**make\_mat2x4** function ](type_ptr.md#make_mat2x4-function) * [**make\_mat3** function ](type_ptr.md#make_mat3-function) * [**make\_mat3x2** function ](type_ptr.md#make_mat3x2-function) * [**make\_mat3x3** function ](type_ptr.md#make_mat3x3-function) * [**make\_mat3x4** function ](type_ptr.md#make_mat3x4-function) * [**make\_mat4** function ](type_ptr.md#make_mat4-function) * [**make\_mat4x2** function ](type_ptr.md#make_mat4x2-function) * [**make\_mat4x3** function ](type_ptr.md#make_mat4x3-function) * [**make\_mat4x4** function ](type_ptr.md#make_mat4x4-function) * [**make\_quat** function ](type_ptr.md#make_quat-function) * [**make\_vec2** function ](type_ptr.md#make_vec2-function) * [**make\_vec3** function ](type_ptr.md#make_vec3-function) * [**make\_vec4** function ](type_ptr.md#make_vec4-function) * [**sizeof** function ](type_ptr.md#sizeof-function) * [**value\_ptr** function ](type_ptr.md#value_ptr-function) * [ulp methods](ulp.md) * [**float\_distance** function ](ulp.md#float_distance-function) * [**next\_float** function ](ulp.md#next_float-function) * [**prev\_float** function ](ulp.md#prev_float-function) Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/README.sb000066400000000000000000000324741511156275200273630ustar00rootroot00000000000000\h1\Table of Contents\h1\ \ul\ \-\ \url color_space.md \color_space methods\ url\ \--\ \url color_space.md#convertLinearToSRGB-function \\b\convertLinearToSRGB\b\ function \ url\ \--\ \url color_space.md#convertSRGBToLinear-function \\b\convertSRGBToLinear\b\ function \ url\ \-\ \url constants.md \constants methods\ url\ \--\ \url constants.md#e-function \\b\e\b\ function \ url\ \--\ \url constants.md#epsilon-function \\b\epsilon\b\ function \ url\ \--\ \url constants.md#euler-function \\b\euler\b\ function \ url\ \--\ \url constants.md#four_over_pi-function \\b\four_over_pi\b\ function \ url\ \--\ \url constants.md#golden_ratio-function \\b\golden_ratio\b\ function \ url\ \--\ \url constants.md#half_pi-function \\b\half_pi\b\ function \ url\ \--\ \url constants.md#ln_ln_two-function \\b\ln_ln_two\b\ function \ url\ \--\ \url constants.md#ln_ten-function \\b\ln_ten\b\ function \ url\ \--\ \url constants.md#ln_two-function \\b\ln_two\b\ function \ url\ \--\ \url constants.md#one-function \\b\one\b\ function \ url\ \--\ \url constants.md#one_over_pi-function \\b\one_over_pi\b\ function \ url\ \--\ \url constants.md#one_over_root_two-function \\b\one_over_root_two\b\ function \ url\ \--\ \url constants.md#one_over_two_pi-function \\b\one_over_two_pi\b\ function \ url\ \--\ \url constants.md#pi-function \\b\pi\b\ function \ url\ \--\ \url constants.md#quarter_pi-function \\b\quarter_pi\b\ function \ url\ \--\ \url constants.md#root_five-function \\b\root_five\b\ function \ url\ \--\ \url constants.md#root_half_pi-function \\b\root_half_pi\b\ function \ url\ \--\ \url constants.md#root_ln_four-function \\b\root_ln_four\b\ function \ url\ \--\ \url constants.md#root_pi-function \\b\root_pi\b\ function \ url\ \--\ \url constants.md#root_three-function \\b\root_three\b\ function \ url\ \--\ \url constants.md#root_two-function \\b\root_two\b\ function \ url\ \--\ \url constants.md#root_two_pi-function \\b\root_two_pi\b\ function \ url\ \--\ \url constants.md#third-function \\b\third\b\ function \ url\ \--\ \url constants.md#three_over_two_pi-function \\b\three_over_two_pi\b\ function \ url\ \--\ \url constants.md#two_over_pi-function \\b\two_over_pi\b\ function \ url\ \--\ \url constants.md#two_over_root_pi-function \\b\two_over_root_pi\b\ function \ url\ \--\ \url constants.md#two_pi-function \\b\two_pi\b\ function \ url\ \--\ \url constants.md#two_thirds-function \\b\two_thirds\b\ function \ url\ \--\ \url constants.md#zero-function \\b\zero\b\ function \ url\ \-\ \url epsilon.md \epsilon methods\ url\ \--\ \url epsilon.md#epsilonEqual-function \\b\epsilonEqual\b\ function \ url\ \--\ \url epsilon.md#epsilonNotEqual-function \\b\epsilonNotEqual\b\ function \ url\ \-\ \url integer.md \integer methods\ url\ \--\ \url integer.md#iround-function \\b\iround\b\ function \ url\ \--\ \url integer.md#uround-function \\b\uround\b\ function \ url\ \-\ \url matrix_access.md \matrix_access methods\ url\ \--\ \url matrix_access.md#column-function \\b\column\b\ function \ url\ \--\ \url matrix_access.md#row-function \\b\row\b\ function \ url\ \-\ \url matrix_inverse.md \matrix_inverse methods\ url\ \--\ \url matrix_inverse.md#affineInverse-function \\b\affineInverse\b\ function \ url\ \--\ \url matrix_inverse.md#inverseTranspose-function \\b\inverseTranspose\b\ function \ url\ \-\ \url noise.md \noise methods\ url\ \--\ \url noise.md#perlin-function \\b\perlin\b\ function \ url\ \--\ \url noise.md#simplex-function \\b\simplex\b\ function \ url\ \-\ \url packing.md \packing methods\ url\ \--\ \url packing.md#packF2x11_1x10-function \\b\packF2x11_1x10\b\ function \ url\ \--\ \url packing.md#packF3x9_E1x5-function \\b\packF3x9_E1x5\b\ function \ url\ \--\ \url packing.md#packHalf-function \\b\packHalf\b\ function \ url\ \--\ \url packing.md#packHalf1x16-function \\b\packHalf1x16\b\ function \ url\ \--\ \url packing.md#packHalf4x16-function \\b\packHalf4x16\b\ function \ url\ \--\ \url packing.md#packI3x10_1x2-function \\b\packI3x10_1x2\b\ function \ url\ \--\ \url packing.md#packInt2x16-function \\b\packInt2x16\b\ function \ url\ \--\ \url packing.md#packInt2x32-function \\b\packInt2x32\b\ function \ url\ \--\ \url packing.md#packInt2x8-function \\b\packInt2x8\b\ function \ url\ \--\ \url packing.md#packInt4x16-function \\b\packInt4x16\b\ function \ url\ \--\ \url packing.md#packInt4x8-function \\b\packInt4x8\b\ function \ url\ \--\ \url packing.md#packRGBM-function \\b\packRGBM\b\ function \ url\ \--\ \url packing.md#packSnorm-function \\b\packSnorm\b\ function \ url\ \--\ \url packing.md#packSnorm1x16-function \\b\packSnorm1x16\b\ function \ url\ \--\ \url packing.md#packSnorm1x8-function \\b\packSnorm1x8\b\ function \ url\ \--\ \url packing.md#packSnorm2x8-function \\b\packSnorm2x8\b\ function \ url\ \--\ \url packing.md#packSnorm3x10_1x2-function \\b\packSnorm3x10_1x2\b\ function \ url\ \--\ \url packing.md#packSnorm4x16-function \\b\packSnorm4x16\b\ function \ url\ \--\ \url packing.md#packU3x10_1x2-function \\b\packU3x10_1x2\b\ function \ url\ \--\ \url packing.md#packUint2x16-function \\b\packUint2x16\b\ function \ url\ \--\ \url packing.md#packUint2x32-function \\b\packUint2x32\b\ function \ url\ \--\ \url packing.md#packUint2x8-function \\b\packUint2x8\b\ function \ url\ \--\ \url packing.md#packUint4x16-function \\b\packUint4x16\b\ function \ url\ \--\ \url packing.md#packUint4x8-function \\b\packUint4x8\b\ function \ url\ \--\ \url packing.md#packUnorm-function \\b\packUnorm\b\ function \ url\ \--\ \url packing.md#packUnorm1x16-function \\b\packUnorm1x16\b\ function \ url\ \--\ \url packing.md#packUnorm1x5_1x6_1x5-function \\b\packUnorm1x5_1x6_1x5\b\ function \ url\ \--\ \url packing.md#packUnorm1x8-function \\b\packUnorm1x8\b\ function \ url\ \--\ \url packing.md#packUnorm2x3_1x2-function \\b\packUnorm2x3_1x2\b\ function \ url\ \--\ \url packing.md#packUnorm2x4-function \\b\packUnorm2x4\b\ function \ url\ \--\ \url packing.md#packUnorm2x8-function \\b\packUnorm2x8\b\ function \ url\ \--\ \url packing.md#packUnorm3x10_1x2-function \\b\packUnorm3x10_1x2\b\ function \ url\ \--\ \url packing.md#packUnorm3x5_1x1-function \\b\packUnorm3x5_1x1\b\ function \ url\ \--\ \url packing.md#packUnorm4x16-function \\b\packUnorm4x16\b\ function \ url\ \--\ \url packing.md#packUnorm4x4-function \\b\packUnorm4x4\b\ function \ url\ \--\ \url packing.md#unpackF2x11_1x10-function \\b\unpackF2x11_1x10\b\ function \ url\ \--\ \url packing.md#unpackF3x9_E1x5-function \\b\unpackF3x9_E1x5\b\ function \ url\ \--\ \url packing.md#unpackHalf-function \\b\unpackHalf\b\ function \ url\ \--\ \url packing.md#unpackHalf1x16-function \\b\unpackHalf1x16\b\ function \ url\ \--\ \url packing.md#unpackHalf4x16-function \\b\unpackHalf4x16\b\ function \ url\ \--\ \url packing.md#unpackI3x10_1x2-function \\b\unpackI3x10_1x2\b\ function \ url\ \--\ \url packing.md#unpackInt2x16-function \\b\unpackInt2x16\b\ function \ url\ \--\ \url packing.md#unpackInt2x32-function \\b\unpackInt2x32\b\ function \ url\ \--\ \url packing.md#unpackInt2x8-function \\b\unpackInt2x8\b\ function \ url\ \--\ \url packing.md#unpackInt4x16-function \\b\unpackInt4x16\b\ function \ url\ \--\ \url packing.md#unpackInt4x8-function \\b\unpackInt4x8\b\ function \ url\ \--\ \url packing.md#unpackRGBM-function \\b\unpackRGBM\b\ function \ url\ \--\ \url packing.md#unpackSnorm-function \\b\unpackSnorm\b\ function \ url\ \--\ \url packing.md#unpackSnorm1x16-function \\b\unpackSnorm1x16\b\ function \ url\ \--\ \url packing.md#unpackSnorm1x8-function \\b\unpackSnorm1x8\b\ function \ url\ \--\ \url packing.md#unpackSnorm2x8-function \\b\unpackSnorm2x8\b\ function \ url\ \--\ \url packing.md#unpackSnorm3x10_1x2-function \\b\unpackSnorm3x10_1x2\b\ function \ url\ \--\ \url packing.md#unpackSnorm4x16-function \\b\unpackSnorm4x16\b\ function \ url\ \--\ \url packing.md#unpackU3x10_1x2-function \\b\unpackU3x10_1x2\b\ function \ url\ \--\ \url packing.md#unpackUint2x16-function \\b\unpackUint2x16\b\ function \ url\ \--\ \url packing.md#unpackUint2x32-function \\b\unpackUint2x32\b\ function \ url\ \--\ \url packing.md#unpackUint2x8-function \\b\unpackUint2x8\b\ function \ url\ \--\ \url packing.md#unpackUint4x16-function \\b\unpackUint4x16\b\ function \ url\ \--\ \url packing.md#unpackUint4x8-function \\b\unpackUint4x8\b\ function \ url\ \--\ \url packing.md#unpackUnorm-function \\b\unpackUnorm\b\ function \ url\ \--\ \url packing.md#unpackUnorm1x16-function \\b\unpackUnorm1x16\b\ function \ url\ \--\ \url packing.md#unpackUnorm1x5_1x6_1x5-function \\b\unpackUnorm1x5_1x6_1x5\b\ function \ url\ \--\ \url packing.md#unpackUnorm1x8-function \\b\unpackUnorm1x8\b\ function \ url\ \--\ \url packing.md#unpackUnorm2x3_1x2-function \\b\unpackUnorm2x3_1x2\b\ function \ url\ \--\ \url packing.md#unpackUnorm2x4-function \\b\unpackUnorm2x4\b\ function \ url\ \--\ \url packing.md#unpackUnorm2x8-function \\b\unpackUnorm2x8\b\ function \ url\ \--\ \url packing.md#unpackUnorm3x10_1x2-function \\b\unpackUnorm3x10_1x2\b\ function \ url\ \--\ \url packing.md#unpackUnorm3x5_1x1-function \\b\unpackUnorm3x5_1x1\b\ function \ url\ \--\ \url packing.md#unpackUnorm4x16-function \\b\unpackUnorm4x16\b\ function \ url\ \--\ \url packing.md#unpackUnorm4x4-function \\b\unpackUnorm4x4\b\ function \ url\ \-\ \url quaternion.md \quaternion methods\ url\ \--\ \url quaternion.md#eulerAngles-function \\b\eulerAngles\b\ function \ url\ \--\ \url quaternion.md#mat3_cast-function \\b\mat3_cast\b\ function \ url\ \--\ \url quaternion.md#mat4_cast-function \\b\mat4_cast\b\ function \ url\ \--\ \url quaternion.md#pitch-function \\b\pitch\b\ function \ url\ \--\ \url quaternion.md#quatLookAt-function \\b\quatLookAt\b\ function \ url\ \--\ \url quaternion.md#quatLookAtLH-function \\b\quatLookAtLH\b\ function \ url\ \--\ \url quaternion.md#quatLookAtRH-function \\b\quatLookAtRH\b\ function \ url\ \--\ \url quaternion.md#quat_cast-function \\b\quat_cast\b\ function \ url\ \--\ \url quaternion.md#roll-function \\b\roll\b\ function \ url\ \--\ \url quaternion.md#yaw-function \\b\yaw\b\ function \ url\ \-\ \url random.md \random methods\ url\ \--\ \url random.md#ballRand-function \\b\ballRand\b\ function \ url\ \--\ \url random.md#circularRand-function \\b\circularRand\b\ function \ url\ \--\ \url random.md#diskRand-function \\b\diskRand\b\ function \ url\ \--\ \url random.md#gaussRand-function \\b\gaussRand\b\ function \ url\ \--\ \url random.md#linearRand-function \\b\linearRand\b\ function \ url\ \--\ \url random.md#setSeed-function \\b\setSeed\b\ function \ url\ \--\ \url random.md#sphericalRand-function \\b\sphericalRand\b\ function \ url\ \-\ \url reciprocal.md \reciprocal methods\ url\ \--\ \url reciprocal.md#acot-function \\b\acot\b\ function \ url\ \--\ \url reciprocal.md#acoth-function \\b\acoth\b\ function \ url\ \--\ \url reciprocal.md#acsc-function \\b\acsc\b\ function \ url\ \--\ \url reciprocal.md#acsch-function \\b\acsch\b\ function \ url\ \--\ \url reciprocal.md#asec-function \\b\asec\b\ function \ url\ \--\ \url reciprocal.md#asech-function \\b\asech\b\ function \ url\ \--\ \url reciprocal.md#cot-function \\b\cot\b\ function \ url\ \--\ \url reciprocal.md#coth-function \\b\coth\b\ function \ url\ \--\ \url reciprocal.md#csc-function \\b\csc\b\ function \ url\ \--\ \url reciprocal.md#csch-function \\b\csch\b\ function \ url\ \--\ \url reciprocal.md#sec-function \\b\sec\b\ function \ url\ \--\ \url reciprocal.md#sech-function \\b\sech\b\ function \ url\ \-\ \url round.md \round methods\ url\ \--\ \url round.md#ceilMultiple-function \\b\ceilMultiple\b\ function \ url\ \--\ \url round.md#ceilPowerOfTwo-function \\b\ceilPowerOfTwo\b\ function \ url\ \--\ \url round.md#floorMultiple-function \\b\floorMultiple\b\ function \ url\ \--\ \url round.md#floorPowerOfTwo-function \\b\floorPowerOfTwo\b\ function \ url\ \--\ \url round.md#roundMultiple-function \\b\roundMultiple\b\ function \ url\ \--\ \url round.md#roundPowerOfTwo-function \\b\roundPowerOfTwo\b\ function \ url\ \-\ \url type_ptr.md \type_ptr methods\ url\ \--\ \url type_ptr.md#make_mat2-function \\b\make_mat2\b\ function \ url\ \--\ \url type_ptr.md#make_mat2x2-function \\b\make_mat2x2\b\ function \ url\ \--\ \url type_ptr.md#make_mat2x3-function \\b\make_mat2x3\b\ function \ url\ \--\ \url type_ptr.md#make_mat2x4-function \\b\make_mat2x4\b\ function \ url\ \--\ \url type_ptr.md#make_mat3-function \\b\make_mat3\b\ function \ url\ \--\ \url type_ptr.md#make_mat3x2-function \\b\make_mat3x2\b\ function \ url\ \--\ \url type_ptr.md#make_mat3x3-function \\b\make_mat3x3\b\ function \ url\ \--\ \url type_ptr.md#make_mat3x4-function \\b\make_mat3x4\b\ function \ url\ \--\ \url type_ptr.md#make_mat4-function \\b\make_mat4\b\ function \ url\ \--\ \url type_ptr.md#make_mat4x2-function \\b\make_mat4x2\b\ function \ url\ \--\ \url type_ptr.md#make_mat4x3-function \\b\make_mat4x3\b\ function \ url\ \--\ \url type_ptr.md#make_mat4x4-function \\b\make_mat4x4\b\ function \ url\ \--\ \url type_ptr.md#make_quat-function \\b\make_quat\b\ function \ url\ \--\ \url type_ptr.md#make_vec2-function \\b\make_vec2\b\ function \ url\ \--\ \url type_ptr.md#make_vec3-function \\b\make_vec3\b\ function \ url\ \--\ \url type_ptr.md#make_vec4-function \\b\make_vec4\b\ function \ url\ \--\ \url type_ptr.md#sizeof-function \\b\sizeof\b\ function \ url\ \--\ \url type_ptr.md#value_ptr-function \\b\value_ptr\b\ function \ url\ \-\ \url ulp.md \ulp methods\ url\ \--\ \url ulp.md#float_distance-function \\b\float_distance\b\ function \ url\ \--\ \url ulp.md#next_float-function \\b\next_float\b\ function \ url\ \--\ \url ulp.md#prev_float-function \\b\prev_float\b\ function \ url\ \ul\ Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/color_space.md000066400000000000000000000023151511156275200307020ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # color\_space methods The following methods are all part of the **color\_space methods**\. Allow to perform bit operations on integer values\. ## Table of contents * [**convertLinearToSRGB** function](#convertlineartosrgb-function) * [**convertSRGBToLinear** function](#convertsrgbtolinear-function) ### convertLinearToSRGB\(\) function #### glm.**convertLinearToSRGB**(**ColorLinear**: *vecN*) -\> *vecN*   Convert a linear color to sRGB color using a standard gamma correction\. #### glm.**convertLinearToSRGB**(**ColorLinear**: *vecN*, **Gamma**: *number*) -\> *vecN*   Convert a linear color to sRGB color using a custom gamma correction\. ### convertSRGBToLinear\(\) function #### glm.**convertSRGBToLinear**(**ColorLinear**: *vecN*) -\> *vecN*   Convert a sRGB color to linear color using a standard gamma correction\. #### glm.**convertSRGBToLinear**(**ColorLinear**: *vecN*, **Gamma**: *number*) -\> *vecN*   Convert a sRGB color to linear color using a custom gamma correction\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/color_space.sb000066400000000000000000000024271511156275200307120ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\color_space methods\h1\ The following methods are all part of the \b\color_space methods\b\. Allow to perform bit operations on integer values. \h2\Table of contents\h2\ \ul\ \-\\url #convertlineartosrgb-function\\b\convertLinearToSRGB\b\ function\url\ \-\\url #convertsrgbtolinear-function\\b\convertSRGBToLinear\b\ function\url\ \ul\ \h3\convertLinearToSRGB() function\h3\ \raw\#### glm.**convertLinearToSRGB**(**ColorLinear**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Convert a linear color to sRGB color using a standard gamma correction. \raw\#### glm.**convertLinearToSRGB**(**ColorLinear**: *vecN*, **Gamma**: *number*) -\\> *vecN*\raw\ \raw\  \raw\Convert a linear color to sRGB color using a custom gamma correction. \h3\convertSRGBToLinear() function\h3\ \raw\#### glm.**convertSRGBToLinear**(**ColorLinear**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Convert a sRGB color to linear color using a standard gamma correction. \raw\#### glm.**convertSRGBToLinear**(**ColorLinear**: *vecN*, **Gamma**: *number*) -\\> *vecN*\raw\ \raw\  \raw\Convert a sRGB color to linear color using a custom gamma correction. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/constants.md000066400000000000000000000132461511156275200304320ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # constants methods The following methods are all part of the **constants methods**\. Provide a list of constants and precomputed useful values\. ## Table of contents * [**e** function](#e-function) * [**epsilon** function](#epsilon-function) * [**euler** function](#euler-function) * [**four\_over\_pi** function](#four_over_pi-function) * [**golden\_ratio** function](#golden_ratio-function) * [**half\_pi** function](#half_pi-function) * [**ln\_ln\_two** function](#ln_ln_two-function) * [**ln\_ten** function](#ln_ten-function) * [**ln\_two** function](#ln_two-function) * [**one** function](#one-function) * [**one\_over\_pi** function](#one_over_pi-function) * [**one\_over\_root\_two** function](#one_over_root_two-function) * [**one\_over\_two\_pi** function](#one_over_two_pi-function) * [**pi** function](#pi-function) * [**quarter\_pi** function](#quarter_pi-function) * [**root\_five** function](#root_five-function) * [**root\_half\_pi** function](#root_half_pi-function) * [**root\_ln\_four** function](#root_ln_four-function) * [**root\_pi** function](#root_pi-function) * [**root\_three** function](#root_three-function) * [**root\_two** function](#root_two-function) * [**root\_two\_pi** function](#root_two_pi-function) * [**third** function](#third-function) * [**three\_over\_two\_pi** function](#three_over_two_pi-function) * [**two\_over\_pi** function](#two_over_pi-function) * [**two\_over\_root\_pi** function](#two_over_root_pi-function) * [**two\_pi** function](#two_pi-function) * [**two\_thirds** function](#two_thirds-function) * [**zero** function](#zero-function) ### e\(\) function #### glm.**e**() -\> *float*   Return ``` e ``` constant\. ### epsilon\(\) function #### glm.**epsilon**() -\> *float*   Return the ``` epsilon ``` constant for floating point types\. ### euler\(\) function #### glm.**euler**() -\> *float*   Return Euler's constant\. ### four\_over\_pi\(\) function #### glm.**four_over_pi**() -\> *float*   Return ``` 4 / pi ```\. ### golden\_ratio\(\) function #### glm.**golden_ratio**() -\> *float*   Return the golden ratio constant\. ### half\_pi\(\) function #### glm.**half_pi**() -\> *float*   Return ``` pi / 2 ```\. ### ln\_ln\_two\(\) function #### glm.**ln_ln_two**() -\> *float*   Return ``` ln(ln(2)) ```\. ### ln\_ten\(\) function #### glm.**ln_ten**() -\> *float*   Return ``` ln(10) ```\. ### ln\_two\(\) function #### glm.**ln_two**() -\> *float*   Return ``` ln(2) ```\. ### one\(\) function #### glm.**one**() -\> *float*   Return ``` 1 ```\. ### one\_over\_pi\(\) function #### glm.**one_over_pi**() -\> *float*   Return ``` 1 / pi ```\. ### one\_over\_root\_two\(\) function #### glm.**one_over_root_two**() -\> *float*   Return ``` 1 / sqrt(2) ```\. ### one\_over\_two\_pi\(\) function #### glm.**one_over_two_pi**() -\> *float*   Return ``` 1 / (pi * 2) ```\. ### pi\(\) function #### glm.**pi**() -\> *float*   Return the ``` pi ``` constant for floating point types\. ### quarter\_pi\(\) function #### glm.**quarter_pi**() -\> *float*   Return ``` pi / 4 ```\. ### root\_five\(\) function #### glm.**root_five**() -\> *float*   Return ``` sqrt(5) ```\. ### root\_half\_pi\(\) function #### glm.**root_half_pi**() -\> *float*   Return ``` sqrt(pi / 2) ```\. ### root\_ln\_four\(\) function #### glm.**root_ln_four**() -\> *float*   Return ``` sqrt(ln(4)) ```\. ### root\_pi\(\) function #### glm.**root_pi**() -\> *float*   Return square root of ``` pi ```\. ### root\_three\(\) function #### glm.**root_three**() -\> *float*   Return ``` sqrt(3) ```\. ### root\_two\(\) function #### glm.**root_two**() -\> *float*   Return ``` sqrt(2) ```\. ### root\_two\_pi\(\) function #### glm.**root_two_pi**() -\> *float*   Return ``` sqrt(2 * pi) ```\. ### third\(\) function #### glm.**third**() -\> *float*   Return ``` 1 / 3 ```\. ### three\_over\_two\_pi\(\) function #### glm.**three_over_two_pi**() -\> *float*   Return ``` pi / 2 * 3 ```\. ### two\_over\_pi\(\) function #### glm.**two_over_pi**() -\> *float*   Return ``` 2 / pi ```\. ### two\_over\_root\_pi\(\) function #### glm.**two_over_root_pi**() -\> *float*   Return ``` 2 / sqrt(pi) ```\. ### two\_pi\(\) function #### glm.**two_pi**() -\> *float*   Return ``` pi * 2 ```\. ### two\_thirds\(\) function #### glm.**two_thirds**() -\> *float*   Return ``` 2 / 3 ```\. ### zero\(\) function #### glm.**zero**() -\> *float*   Return ``` 0 ```\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/constants.sb000066400000000000000000000145121511156275200304330ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\constants methods\h1\ The following methods are all part of the \b\constants methods\b\. Provide a list of constants and precomputed useful values. \h2\Table of contents\h2\ \ul\ \-\\url #e-function\\b\e\b\ function\url\ \-\\url #epsilon-function\\b\epsilon\b\ function\url\ \-\\url #euler-function\\b\euler\b\ function\url\ \-\\url #four_over_pi-function\\b\four_over_pi\b\ function\url\ \-\\url #golden_ratio-function\\b\golden_ratio\b\ function\url\ \-\\url #half_pi-function\\b\half_pi\b\ function\url\ \-\\url #ln_ln_two-function\\b\ln_ln_two\b\ function\url\ \-\\url #ln_ten-function\\b\ln_ten\b\ function\url\ \-\\url #ln_two-function\\b\ln_two\b\ function\url\ \-\\url #one-function\\b\one\b\ function\url\ \-\\url #one_over_pi-function\\b\one_over_pi\b\ function\url\ \-\\url #one_over_root_two-function\\b\one_over_root_two\b\ function\url\ \-\\url #one_over_two_pi-function\\b\one_over_two_pi\b\ function\url\ \-\\url #pi-function\\b\pi\b\ function\url\ \-\\url #quarter_pi-function\\b\quarter_pi\b\ function\url\ \-\\url #root_five-function\\b\root_five\b\ function\url\ \-\\url #root_half_pi-function\\b\root_half_pi\b\ function\url\ \-\\url #root_ln_four-function\\b\root_ln_four\b\ function\url\ \-\\url #root_pi-function\\b\root_pi\b\ function\url\ \-\\url #root_three-function\\b\root_three\b\ function\url\ \-\\url #root_two-function\\b\root_two\b\ function\url\ \-\\url #root_two_pi-function\\b\root_two_pi\b\ function\url\ \-\\url #third-function\\b\third\b\ function\url\ \-\\url #three_over_two_pi-function\\b\three_over_two_pi\b\ function\url\ \-\\url #two_over_pi-function\\b\two_over_pi\b\ function\url\ \-\\url #two_over_root_pi-function\\b\two_over_root_pi\b\ function\url\ \-\\url #two_pi-function\\b\two_pi\b\ function\url\ \-\\url #two_thirds-function\\b\two_thirds\b\ function\url\ \-\\url #zero-function\\b\zero\b\ function\url\ \ul\ \h3\e() function\h3\ \raw\#### glm.**e**() -\\> *float*\raw\ \raw\  \raw\Return \code\e\code\ constant. \h3\epsilon() function\h3\ \raw\#### glm.**epsilon**() -\\> *float*\raw\ \raw\  \raw\Return the \code\epsilon\code\ constant for floating point types. \h3\euler() function\h3\ \raw\#### glm.**euler**() -\\> *float*\raw\ \raw\  \raw\Return Euler's constant. \h3\four_over_pi() function\h3\ \raw\#### glm.**four_over_pi**() -\\> *float*\raw\ \raw\  \raw\Return \code\4 / pi\code\. \h3\golden_ratio() function\h3\ \raw\#### glm.**golden_ratio**() -\\> *float*\raw\ \raw\  \raw\Return the golden ratio constant. \h3\half_pi() function\h3\ \raw\#### glm.**half_pi**() -\\> *float*\raw\ \raw\  \raw\Return \code\pi / 2\code\. \h3\ln_ln_two() function\h3\ \raw\#### glm.**ln_ln_two**() -\\> *float*\raw\ \raw\  \raw\Return \code\ln(ln(2))\code\. \h3\ln_ten() function\h3\ \raw\#### glm.**ln_ten**() -\\> *float*\raw\ \raw\  \raw\Return \code\ln(10)\code\. \h3\ln_two() function\h3\ \raw\#### glm.**ln_two**() -\\> *float*\raw\ \raw\  \raw\Return \code\ln(2)\code\. \h3\one() function\h3\ \raw\#### glm.**one**() -\\> *float*\raw\ \raw\  \raw\Return \code\1\code\. \h3\one_over_pi() function\h3\ \raw\#### glm.**one_over_pi**() -\\> *float*\raw\ \raw\  \raw\Return \code\1 / pi\code\. \h3\one_over_root_two() function\h3\ \raw\#### glm.**one_over_root_two**() -\\> *float*\raw\ \raw\  \raw\Return \code\1 / sqrt(2)\code\. \h3\one_over_two_pi() function\h3\ \raw\#### glm.**one_over_two_pi**() -\\> *float*\raw\ \raw\  \raw\Return \code\1 / (pi * 2)\code\. \h3\pi() function\h3\ \raw\#### glm.**pi**() -\\> *float*\raw\ \raw\  \raw\Return the \code\pi\code\ constant for floating point types. \h3\quarter_pi() function\h3\ \raw\#### glm.**quarter_pi**() -\\> *float*\raw\ \raw\  \raw\Return \code\pi / 4\code\. \h3\root_five() function\h3\ \raw\#### glm.**root_five**() -\\> *float*\raw\ \raw\  \raw\Return \code\sqrt(5)\code\. \h3\root_half_pi() function\h3\ \raw\#### glm.**root_half_pi**() -\\> *float*\raw\ \raw\  \raw\Return \code\sqrt(pi / 2)\code\. \h3\root_ln_four() function\h3\ \raw\#### glm.**root_ln_four**() -\\> *float*\raw\ \raw\  \raw\Return \code\sqrt(ln(4))\code\. \h3\root_pi() function\h3\ \raw\#### glm.**root_pi**() -\\> *float*\raw\ \raw\  \raw\Return square root of \code\pi\code\. \h3\root_three() function\h3\ \raw\#### glm.**root_three**() -\\> *float*\raw\ \raw\  \raw\Return \code\sqrt(3)\code\. \h3\root_two() function\h3\ \raw\#### glm.**root_two**() -\\> *float*\raw\ \raw\  \raw\Return \code\sqrt(2)\code\. \h3\root_two_pi() function\h3\ \raw\#### glm.**root_two_pi**() -\\> *float*\raw\ \raw\  \raw\Return \code\sqrt(2 * pi)\code\. \h3\third() function\h3\ \raw\#### glm.**third**() -\\> *float*\raw\ \raw\  \raw\Return \code\1 / 3\code\. \h3\three_over_two_pi() function\h3\ \raw\#### glm.**three_over_two_pi**() -\\> *float*\raw\ \raw\  \raw\Return \code\pi / 2 * 3\code\. \h3\two_over_pi() function\h3\ \raw\#### glm.**two_over_pi**() -\\> *float*\raw\ \raw\  \raw\Return \code\2 / pi\code\. \h3\two_over_root_pi() function\h3\ \raw\#### glm.**two_over_root_pi**() -\\> *float*\raw\ \raw\  \raw\Return \code\2 / sqrt(pi)\code\. \h3\two_pi() function\h3\ \raw\#### glm.**two_pi**() -\\> *float*\raw\ \raw\  \raw\Return \code\pi * 2\code\. \h3\two_thirds() function\h3\ \raw\#### glm.**two_thirds**() -\\> *float*\raw\ \raw\  \raw\Return \code\2 / 3\code\. \h3\zero() function\h3\ \raw\#### glm.**zero**() -\\> *float*\raw\ \raw\  \raw\Return \code\0\code\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/epsilon.md000066400000000000000000000016311511156275200300620ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # epsilon methods The following methods are all part of the **epsilon methods**\. Comparison functions for a user defined epsilon values\. ## Table of contents * [**epsilonEqual** function](#epsilonequal-function) * [**epsilonNotEqual** function](#epsilonnotequal-function) ### epsilonEqual\(\) function #### glm.**epsilonEqual**(**x**: *number*, **y**: *number*, **epsilon**: *number*) -\> *bool*   Returns the component\-wise comparison of ``` |x - y| < epsilon ```\. #### glm.**epsilonEqual**(**x**: *vecN*, **y**: *vecN*, **epsilon**: *number*) -\> *bvecN*   Returns the component\-wise comparison of ``` |x - y| < epsilon ```\. ### epsilonNotEqual\(\) function #### glm.**epsilonNotEqual**(***args**) -\> *not epsilonEqual(*args)* Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/epsilon.sb000066400000000000000000000017261511156275200300730ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\epsilon methods\h1\ The following methods are all part of the \b\epsilon methods\b\. Comparison functions for a user defined epsilon values. \h2\Table of contents\h2\ \ul\ \-\\url #epsilonequal-function\\b\epsilonEqual\b\ function\url\ \-\\url #epsilonnotequal-function\\b\epsilonNotEqual\b\ function\url\ \ul\ \h3\epsilonEqual() function\h3\ \raw\#### glm.**epsilonEqual**(**x**: *number*, **y**: *number*, **epsilon**: *number*) -\\> *bool*\raw\ \raw\  \raw\Returns the component-wise comparison of \code\|x - y| < epsilon\code\. \raw\#### glm.**epsilonEqual**(**x**: *vecN*, **y**: *vecN*, **epsilon**: *number*) -\\> *bvecN*\raw\ \raw\  \raw\Returns the component-wise comparison of \code\|x - y| < epsilon\code\. \h3\epsilonNotEqual() function\h3\ \raw\#### glm.**epsilonNotEqual**(***args**) -\\> *not epsilonEqual(*args)*\raw\ Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/integer.md000066400000000000000000000027411511156275200300510ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # integer methods The following methods are all part of the **integer methods**\. Contains two different rounding methods\. ## Table of contents * [**iround** function](#iround-function) * [**uround** function](#uround-function) ### iround\(\) function #### glm.**iround**(**x**: *number*) -\> *int*   Returns a value equal to the nearest integer to ``` x ```\. The fraction ``` 0.5 ``` will round in a   direction chosen by the implementation, presumably the direction that is fastest\. #### glm.**iround**(**x**: *vecN*) -\> *ivecN*   Returns a value equal to the nearest integer to ``` x ```\. The fraction ``` 0.5 ``` will round in a   direction chosen by the implementation, presumably the direction that is fastest\. ### uround\(\) function #### glm.**uround**(**x**: *number*) -\> *int*   Returns a value equal to the nearest integer to ``` x ```\. The fraction ``` 0.5 ``` will round in a   direction chosen by the implementation, presumably the direction that is fastest\. #### glm.**uround**(**x**: *vecN*) -\> *uvecN*   Returns a value equal to the nearest integer to ``` x ```\. The fraction ``` 0.5 ``` will round in a   direction chosen by the implementation, presumably the direction that is fastest\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/integer.sb000066400000000000000000000031511511156275200300510ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\integer methods\h1\ The following methods are all part of the \b\integer methods\b\. Contains two different rounding methods. \h2\Table of contents\h2\ \ul\ \-\\url #iround-function\\b\iround\b\ function\url\ \-\\url #uround-function\\b\uround\b\ function\url\ \ul\ \h3\iround() function\h3\ \raw\#### glm.**iround**(**x**: *number*) -\\> *int*\raw\ \raw\  \raw\Returns a value equal to the nearest integer to \code\x\code\. The fraction \code\0.5\code\ will round in a \raw\  \raw\direction chosen by the implementation, presumably the direction that is fastest. \raw\#### glm.**iround**(**x**: *vecN*) -\\> *ivecN*\raw\ \raw\  \raw\Returns a value equal to the nearest integer to \code\x\code\. The fraction \code\0.5\code\ will round in a \raw\  \raw\direction chosen by the implementation, presumably the direction that is fastest. \h3\uround() function\h3\ \raw\#### glm.**uround**(**x**: *number*) -\\> *int*\raw\ \raw\  \raw\Returns a value equal to the nearest integer to \code\x\code\. The fraction \code\0.5\code\ will round in a \raw\  \raw\direction chosen by the implementation, presumably the direction that is fastest. \raw\#### glm.**uround**(**x**: *vecN*) -\\> *uvecN*\raw\ \raw\  \raw\Returns a value equal to the nearest integer to \code\x\code\. The fraction \code\0.5\code\ will round in a \raw\  \raw\direction chosen by the implementation, presumably the direction that is fastest. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/matrix_access.md000066400000000000000000000017271511156275200312440ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # matrix\_access methods The following methods are all part of the **matrix\_access methods**\. Defines functions to access rows or columns of a matrix easily\. ## Table of contents * [**column** function](#column-function) * [**row** function](#row-function) ### column\(\) function #### glm.**column**(**m**: *matNxM*, **index**: *int*) -\> *vecM*   Get a specific column of a matrix\. #### glm.**column**(**m**: *matNxM*, **index**: *int*, **x**: *vecM*) -\> *matNxM*   Set a specific column to a matrix\. ### row\(\) function #### glm.**row**(**m**: *matNxM*, **index**: *int*) -\> *vecN*   Get a specific row of a matrix\. #### glm.**row**(**m**: *matNxM*, **index**: *int*, **x**: *vecN*) -\> *matNxM*   Set a specific row to a matrix\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/matrix_access.sb000066400000000000000000000020411511156275200312360ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\matrix_access methods\h1\ The following methods are all part of the \b\matrix_access methods\b\. Defines functions to access rows or columns of a matrix easily. \h2\Table of contents\h2\ \ul\ \-\\url #column-function\\b\column\b\ function\url\ \-\\url #row-function\\b\row\b\ function\url\ \ul\ \h3\column() function\h3\ \raw\#### glm.**column**(**m**: *matNxM*, **index**: *int*) -\\> *vecM*\raw\ \raw\  \raw\Get a specific column of a matrix. \raw\#### glm.**column**(**m**: *matNxM*, **index**: *int*, **x**: *vecM*) -\\> *matNxM*\raw\ \raw\  \raw\Set a specific column to a matrix. \h3\row() function\h3\ \raw\#### glm.**row**(**m**: *matNxM*, **index**: *int*) -\\> *vecN*\raw\ \raw\  \raw\Get a specific row of a matrix. \raw\#### glm.**row**(**m**: *matNxM*, **index**: *int*, **x**: *vecN*) -\\> *matNxM*\raw\ \raw\  \raw\Set a specific row to a matrix. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/matrix_inverse.md000066400000000000000000000013051511156275200314460ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # matrix\_inverse methods The following methods are all part of the **matrix\_inverse methods**\. Defines additional matrix inverting functions\. ## Table of contents * [**affineInverse** function](#affineinverse-function) * [**inverseTranspose** function](#inversetranspose-function) ### affineInverse\(\) function #### glm.**affineInverse**(**m**: *matSxS*) -\> *matSxS*   Fast matrix inverse for affine matrix\. ### inverseTranspose\(\) function #### glm.**inverseTranspose**(**m**: *matSxS*) -\> *matSxS*   Compute the inverse transpose of a matrix\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/matrix_inverse.sb000066400000000000000000000013631511156275200314560ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\matrix_inverse methods\h1\ The following methods are all part of the \b\matrix_inverse methods\b\. Defines additional matrix inverting functions. \h2\Table of contents\h2\ \ul\ \-\\url #affineinverse-function\\b\affineInverse\b\ function\url\ \-\\url #inversetranspose-function\\b\inverseTranspose\b\ function\url\ \ul\ \h3\affineInverse() function\h3\ \raw\#### glm.**affineInverse**(**m**: *matSxS*) -\\> *matSxS*\raw\ \raw\  \raw\Fast matrix inverse for affine matrix. \h3\inverseTranspose() function\h3\ \raw\#### glm.**inverseTranspose**(**m**: *matSxS*) -\\> *matSxS*\raw\ \raw\  \raw\Compute the inverse transpose of a matrix. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/noise.md000066400000000000000000000016561511156275200275350ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # noise methods The following methods are all part of the **noise methods**\. Defines 2D, 3D and 4D procedural noise functions Based on the work of Stefan Gustavson and Ashima Arts on "webgl\-noise": https://github.com/ashima/webgl-noise Following Stefan Gustavson's paper "Simplex noise demystified": http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf ## Table of contents * [**perlin** function](#perlin-function) * [**simplex** function](#simplex-function) ### perlin\(\) function #### glm.**perlin**(**p**: *vecN*) -\> *float*   Classic perlin noise\. #### glm.**perlin**(**p**: *vecN*, **rep**: *vecN*) -\> *float*   Periodic perlin noise\. ### simplex\(\) function #### glm.**simplex**(**p**: *vecN*) -\> *float*   Simplex noise\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/noise.sb000066400000000000000000000020001511156275200275210ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\noise methods\h1\ The following methods are all part of the \b\noise methods\b\. Defines 2D, 3D and 4D procedural noise functions Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": \raw\https://github.com/ashima/webgl-noise\raw\ Following Stefan Gustavson's paper "Simplex noise demystified": \raw\http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf\raw\ \h2\Table of contents\h2\ \ul\ \-\\url #perlin-function\\b\perlin\b\ function\url\ \-\\url #simplex-function\\b\simplex\b\ function\url\ \ul\ \h3\perlin() function\h3\ \raw\#### glm.**perlin**(**p**: *vecN*) -\\> *float*\raw\ \raw\  \raw\Classic perlin noise. \raw\#### glm.**perlin**(**p**: *vecN*, **rep**: *vecN*) -\\> *float*\raw\ \raw\  \raw\Periodic perlin noise. \h3\simplex() function\h3\ \raw\#### glm.**simplex**(**p**: *vecN*) -\\> *float*\raw\ \raw\  \raw\Simplex noise. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/packing.md000066400000000000000000001016441511156275200300320ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # packing methods The following methods are all part of the **packing methods**\. This extension provides a set of function to convert vertors to packed formats\. ## Table of contents * [**packF2x11\_1x10** function](#packf2x11_1x10-function) * [**packF3x9\_E1x5** function](#packf3x9_e1x5-function) * [**packHalf** function](#packhalf-function) * [**packHalf1x16** function](#packhalf1x16-function) * [**packHalf4x16** function](#packhalf4x16-function) * [**packI3x10\_1x2** function](#packi3x10_1x2-function) * [**packInt2x16** function](#packint2x16-function) * [**packInt2x32** function](#packint2x32-function) * [**packInt2x8** function](#packint2x8-function) * [**packInt4x16** function](#packint4x16-function) * [**packInt4x8** function](#packint4x8-function) * [**packRGBM** function](#packrgbm-function) * [**packSnorm** function](#packsnorm-function) * [**packSnorm1x16** function](#packsnorm1x16-function) * [**packSnorm1x8** function](#packsnorm1x8-function) * [**packSnorm2x8** function](#packsnorm2x8-function) * [**packSnorm3x10\_1x2** function](#packsnorm3x10_1x2-function) * [**packSnorm4x16** function](#packsnorm4x16-function) * [**packU3x10\_1x2** function](#packu3x10_1x2-function) * [**packUint2x16** function](#packuint2x16-function) * [**packUint2x32** function](#packuint2x32-function) * [**packUint2x8** function](#packuint2x8-function) * [**packUint4x16** function](#packuint4x16-function) * [**packUint4x8** function](#packuint4x8-function) * [**packUnorm** function](#packunorm-function) * [**packUnorm1x16** function](#packunorm1x16-function) * [**packUnorm1x5\_1x6\_1x5** function](#packunorm1x5_1x6_1x5-function) * [**packUnorm1x8** function](#packunorm1x8-function) * [**packUnorm2x3\_1x2** function](#packunorm2x3_1x2-function) * [**packUnorm2x4** function](#packunorm2x4-function) * [**packUnorm2x8** function](#packunorm2x8-function) * [**packUnorm3x10\_1x2** function](#packunorm3x10_1x2-function) * [**packUnorm3x5\_1x1** function](#packunorm3x5_1x1-function) * [**packUnorm4x16** function](#packunorm4x16-function) * [**packUnorm4x4** function](#packunorm4x4-function) * [**unpackF2x11\_1x10** function](#unpackf2x11_1x10-function) * [**unpackF3x9\_E1x5** function](#unpackf3x9_e1x5-function) * [**unpackHalf** function](#unpackhalf-function) * [**unpackHalf1x16** function](#unpackhalf1x16-function) * [**unpackHalf4x16** function](#unpackhalf4x16-function) * [**unpackI3x10\_1x2** function](#unpacki3x10_1x2-function) * [**unpackInt2x16** function](#unpackint2x16-function) * [**unpackInt2x32** function](#unpackint2x32-function) * [**unpackInt2x8** function](#unpackint2x8-function) * [**unpackInt4x16** function](#unpackint4x16-function) * [**unpackInt4x8** function](#unpackint4x8-function) * [**unpackRGBM** function](#unpackrgbm-function) * [**unpackSnorm** function](#unpacksnorm-function) * [**unpackSnorm1x16** function](#unpacksnorm1x16-function) * [**unpackSnorm1x8** function](#unpacksnorm1x8-function) * [**unpackSnorm2x8** function](#unpacksnorm2x8-function) * [**unpackSnorm3x10\_1x2** function](#unpacksnorm3x10_1x2-function) * [**unpackSnorm4x16** function](#unpacksnorm4x16-function) * [**unpackU3x10\_1x2** function](#unpacku3x10_1x2-function) * [**unpackUint2x16** function](#unpackuint2x16-function) * [**unpackUint2x32** function](#unpackuint2x32-function) * [**unpackUint2x8** function](#unpackuint2x8-function) * [**unpackUint4x16** function](#unpackuint4x16-function) * [**unpackUint4x8** function](#unpackuint4x8-function) * [**unpackUnorm** function](#unpackunorm-function) * [**unpackUnorm1x16** function](#unpackunorm1x16-function) * [**unpackUnorm1x5\_1x6\_1x5** function](#unpackunorm1x5_1x6_1x5-function) * [**unpackUnorm1x8** function](#unpackunorm1x8-function) * [**unpackUnorm2x3\_1x2** function](#unpackunorm2x3_1x2-function) * [**unpackUnorm2x4** function](#unpackunorm2x4-function) * [**unpackUnorm2x8** function](#unpackunorm2x8-function) * [**unpackUnorm3x10\_1x2** function](#unpackunorm3x10_1x2-function) * [**unpackUnorm3x5\_1x1** function](#unpackunorm3x5_1x1-function) * [**unpackUnorm4x16** function](#unpackunorm4x16-function) * [**unpackUnorm4x4** function](#unpackunorm4x4-function) ### packF2x11\_1x10\(\) function #### glm.**packF2x11_1x10**(**v**: *vec3*) -\> *int*   First, converts the first two components of the normalized floating\-point value ``` v ``` into   11\-bit signless floating\-point values\. Then, converts the third component of the normalized   floating\-point value ``` v ``` into a 10\-bit signless floating\-point value\. Then, the results   are packed into the returned 32\-bit unsigned integer\. The first vector component   specifies the 11 least\-significant bits of the result; the last component specifies the   10 most\-significant bits\. ### packF3x9\_E1x5\(\) function #### glm.**packF3x9_E1x5**(**v**: *vec3*) -\> *int*   First, converts the first two components of the normalized floating\-point value ``` v ``` into   11\-bit signless floating\-point values\. Then, converts the third component of the normalized   floating\-point value ``` v ``` into a 10\-bit signless floating\-point value\.Then, the results   are packed into the returned 32\-bit unsigned integer\. The first vector component   specifies the 11 least\-significant bits of the result; the last component specifies the   10 most\-significant bits\. packF3x9\_E1x5 allows encoding into RGBE / RGB9E5 format ### packHalf\(\) function #### glm.**packHalf**(**v**: *vecN*) -\> *u16vecN*   Returns an unsigned integer vector obtained by converting the components of a   floating\-point vector to the 16\-bit floating\-point representation found in the OpenGL   Specification\. The first vector component specifies the 16 least\-significant bits of the   result; the forth component specifies the 16 most\-significant bits\. ### packHalf1x16\(\) function #### glm.**packHalf1x16**(**v**: *float*) -\> *int*   Returns an unsigned integer obtained by converting the components of a floating\-point   scalar to the 16\-bit floating\-point representation found in the OpenGL Specification, and   then packing this 16\-bit value into a 16\-bit unsigned integer\. ### packHalf4x16\(\) function #### glm.**packHalf4x16**(**v**: *vec4*) -\> *int*   Returns an unsigned integer obtained by converting the components of a four\-component   floating\-point vector to the 16\-bit floating\-point representation found in the OpenGL   Specification, and then packing these four 16\-bit values into a 64\-bit unsigned integer\.   The first vector component specifies the 16 least\-significant bits of the result; the   forth component specifies the 16 most\-significant bits\. ### packI3x10\_1x2\(\) function #### glm.**packI3x10_1x2**(**v**: *ivec4*) -\> *int*   Returns an unsigned integer obtained by converting the components of a four\-component   signed integer vector to the 10\-10\-10\-2\-bit signed integer representation found in the   OpenGL Specification, and then packing these four values into a 32\-bit unsigned integer\.   The first vector component specifies the 10 least\-significant bits of the result; the   forth component specifies the 2 most\-significant bits\. ### packInt2x16\(\) function #### glm.**packInt2x16**(**v**: *i16vec2*) -\> *int*   Convert each component from an integer vector into a packed integer\. ### packInt2x32\(\) function #### glm.**packInt2x32**(**v**: *i32vec2*) -\> *int*   Convert each component from an integer vector into a packed integer\. ### packInt2x8\(\) function #### glm.**packInt2x8**(**v**: *i8vec2*) -\> *int*   Convert each component from an integer vector into a packed integer\. ### packInt4x16\(\) function #### glm.**packInt4x16**(**v**: *i16vec4*) -\> *int*   Convert each component from an integer vector into a packed integer\. ### packInt4x8\(\) function #### glm.**packInt4x8**(**v**: *i8vec4*) -\> *int*   Convert each component from an integer vector into a packed integer\. ### packRGBM\(\) function #### glm.**packRGBM**(**v**: *vec3*) -\> *vec4*   Returns an unsigned integer vector obtained by converting the components of a   floating\-point vector to the 16\-bit floating\-point representation found in the OpenGL   Specification\. The first vector component specifies the 16 least\-significant bits of the   result; the forth component specifies the 16 most\-significant bits\. ### packSnorm\(\) function #### glm.**packSnorm**(**t**: *type*, **v**: *vecN*) -\> *vecN*   Convert each component of the normalized floating\-point vector into signed integer values   of type ``` t ```\.   ``` t ``` can be any of the 8 integer types \(``` glm.int32 ```, ``` glm.int64 ```, ``` glm.uint8 ```, \.\.\.\)\. ### packSnorm1x16\(\) function #### glm.**packSnorm1x16**(**v**: *float*) -\> *int*   First, converts the normalized floating\-point value ``` v ``` into 16\-bit integer value\. Then, the   results are packed into the returned 16\-bit unsigned integer\. The conversion to fixed point is   done as follows : ``` round(clamp(s, -1, +1) * 32767.0) ``` ### packSnorm1x8\(\) function #### glm.**packSnorm1x8**(**v**: *float*) -\> *int*   First, converts the normalized floating\-point value ``` v ``` into 8\-bit integer value\. Then, the   results are packed into the returned 8\-bit unsigned integer\. The conversion to fixed point is   done as follows : ``` round(clamp(v, -1, +1) * 127.0) ``` ### packSnorm2x8\(\) function #### glm.**packSnorm2x8**(**v**: *fvec2*) -\> *int*   First, converts each component of the normalized floating\-point value ``` v ``` into 8\-bit integer   values\. Then, the results are packed into the returned 16\-bit unsigned integer\. The   conversion for component ``` c ``` of ``` v ``` to fixed point is done as follows :   ``` round(clamp(c, -1, +1) * 127.0) ```\. The first component of the vector will be   written to the least significant bits of the output; the last component will be written to   the most significant bits\. ### packSnorm3x10\_1x2\(\) function #### glm.**packSnorm3x10_1x2**(**v**: *fvec4*) -\> *int*   First, converts the first three components of the normalized floating\-point value ``` v ``` into   10\-bit signed integer values\. Then, converts the forth component of the normalized   floating\-point value ``` v ``` into 2\-bit signed integer values\. Then, the results are packed into   the returned 32\-bit unsigned integer\. The conversion for component c of v to fixed point   is done as follows : ``` packSnorm3x10_1x2(xyz) ``` : ``` round(clamp(c, -1, +1) * 511.0) ```   ``` packSnorm3x10_1x2(w) ``` : ``` round(clamp(c, -1, +1) * 1.0) ```\. The first vector component specifies   the 10 least\-significant bits of the result; the forth component specifies the 2   most\-significant bits\. ### packSnorm4x16\(\) function #### glm.**packSnorm4x16**(**v**: *fvec4*) -\> *int*   First, converts each component of the normalized floating\-point value ``` v ``` into 16\-bit integer   values\. Then, the results are packed into the returned 64\-bit unsigned integer\. The   conversion for component ``` c ``` of ``` v ``` to fixed point is done as follows :   ``` round(clamp(c, -1, +1) * 32767.0) ```\. The first component of the vector will be   written to the least significant bits of the output; the last component will be written to   the most significant bits\. ### packU3x10\_1x2\(\) function #### glm.**packU3x10_1x2**(**v**: *uvec4*) -\> *int*   Returns an unsigned integer obtained by converting the components of a four\-component   unsigned integer vector to the 10\-10\-10\-2\-bit unsigned integer representation found in the   OpenGL Specification, and then packing these four values into a 32\-bit unsigned integer\.   The first vector component specifies the 10 least\-significant bits of the result; the   forth component specifies the 2 most\-significant bits\. ### packUint2x16\(\) function #### glm.**packUint2x16**(**v**: *u16vec2*) -\> *int*   Convert each component from an integer vector into a packed unsigned integer\. ### packUint2x32\(\) function #### glm.**packUint2x32**(**v**: *u32vec2*) -\> *int*   Convert each component from an integer vector into a packed unsigned integer\. ### packUint2x8\(\) function #### glm.**packUint2x8**(**v**: *u8vec2*) -\> *int*   Convert each component from an integer vector into a packed unsigned integer\. ### packUint4x16\(\) function #### glm.**packUint4x16**(**v**: *u16vec4*) -\> *int*   Convert each component from an integer vector into a packed unsigned integer\. ### packUint4x8\(\) function #### glm.**packUint4x8**(**v**: *u16vec4*) -\> *int*   Convert each component from an integer vector into a packed unsigned integer\. ### packUnorm\(\) function #### glm.**packUnorm**(**t**: *type*, **v**: *vecN*) -\> *vecN*   Convert each component of the normalized floating\-point vector into unsigned integer values   of type ``` t ```\.   ``` t ``` can be any of the 4 unsigned integer types   \(``` glm.uint64 ```, ``` glm.uint32 ```, ``` glm.uint16 ```, ``` glm.uint8 ```\)\. ### packUnorm1x16\(\) function #### glm.**packUnorm1x16**(**v**: *float*) -\> *int*   First, converts the normalized floating\-point value ``` v ``` into a 16\-bit integer value\. Then,   the results are packed into the returned 16\-bit unsigned integer\. The conversion for   component ``` c ``` of ``` v ``` to fixed point is done as follows :   ``` round(clamp(c, 0, +1) * 65535.0) ``` ### packUnorm1x5\_1x6\_1x5\(\) function #### glm.**packUnorm1x5_1x6_1x5**(**v**: *fvec3*) -\> *int*   Convert each component of the normalized floating\-point vector into unsigned integer   values\. ### packUnorm1x8\(\) function #### glm.**packUnorm1x8**(**v**: *float*) -\> *int*   First, converts the normalized floating\-point value ``` v ``` into a 8\-bit integer value\. Then, the   results are packed into the returned 8\-bit unsigned integer\. The conversion for component   ``` c ``` of ``` v ``` to fixed point is done as follows : ``` round(clamp(c, 0, +1) * 255.0) ``` ### packUnorm2x3\_1x2\(\) function #### glm.**packUnorm2x3_1x2**(**v**: *fvec3*) -\> *int*   Convert each component of the normalized floating\-point vector into unsigned integer   values\. ### packUnorm2x4\(\) function #### glm.**packUnorm2x4**(**v**: *fvec2*) -\> *int*   Convert each component of the normalized floating\-point vector into unsigned integer   values\. ### packUnorm2x8\(\) function #### glm.**packUnorm2x8**(**v**: *fvec2*) -\> *int*   First, converts each component of the normalized floating\-point value ``` v ``` into 8\-bit integer   values\. Then, the results are packed into the returned 16\-bit unsigned integer\. The   conversion for component ``` c ``` of ``` v ``` to fixed point is done as follows :   ``` round(clamp(c, 0, +1) * 255.0) ```\. The first component of the vector will be   written to the least significant bits of the output; the last component will be written to   the most significant bits\. ### packUnorm3x10\_1x2\(\) function #### glm.**packUnorm3x10_1x2**(**v**: *fvec4*) -\> *int*   First, converts the first three components of the normalized floating\-point value ``` v ``` into   10\-bit unsigned integer values\. Then, converts the forth component of the normalized   floating\-point value ``` v ``` into 2\-bit signed uninteger values\.Then, the results are packed into   the returned 32\-bit unsigned integer\. The conversion for component c of v to fixed point is   done as follows : ``` packUnorm3x10_1x2(xyz) ``` : ``` round(clamp(c, 0, +1) * 1023.0) ```   ``` packUnorm3x10_1x2(w) ``` : ``` round(clamp(c, 0, +1) * 3.0) ```\. The first vector component specifies   the 10 least\-significant bits of the result; the forth component specifies the 2   most\-significant bits\. ### packUnorm3x5\_1x1\(\) function #### glm.**packUnorm3x5_1x1**(**v**: *fvec4*) -\> *int*   Convert each component of the normalized floating\-point vector into unsigned integer   values\. ### packUnorm4x16\(\) function #### glm.**packUnorm4x16**(**v**: *fvec4*) -\> *int*   First, converts each component of the normalized floating\-point value ``` v ``` into 16\-bit integer   values\. Then, the results are packed into the returned 64\-bit unsigned integer\. The   conversion for component c of v to fixed point is done as follows :   ``` round(clamp(c, 0, +1) * 65535.0) ```\. The first component of the vector will be   written to the least significant bits of the output; the last component will be written to   the most significant bits\. ### packUnorm4x4\(\) function #### glm.**packUnorm4x4**(**v**: *fvec4*) -\> *int*   Convert each component of the normalized floating\-point vector into unsigned integer   values\. ### unpackF2x11\_1x10\(\) function #### glm.**unpackF2x11_1x10**(**p**: *int*) -\> *vec3*   First, unpacks a single 32\-bit unsigned integer ``` p ``` into two 11\-bit signless floating\-point   values and one 10\-bit signless floating\-point value\. Then, each component is converted to a   normalized floating\-point value to generate the returned three\-component vector\. The   first component of the returned vector will be extracted from the least significant bits of   the input; the last component will be extracted from the most significant bits\. ### unpackF3x9\_E1x5\(\) function #### glm.**unpackF3x9_E1x5**(**p**: *int*) -\> *vec3*   First, unpacks a single 32\-bit unsigned integer p into two 11\-bit signless floating\-point   values and one 10\-bit signless floating\-point value\. Then, each component is converted to a   normalized floating\-point value to generate the returned three\-component vector\. The   first component of the returned vector will be extracted from the least significant bits of   the input; the last component will be extracted from the most significant bits\.   unpackF3x9\_E1x5 allows decoding RGBE / RGB9E5 data ### unpackHalf\(\) function #### glm.**unpackHalf**(**p**: *u16vecN*) -\> *vecN*   Returns a floating\-point vector with components obtained by reinterpreting an integer   vector as 16\-bit floating\-point numbers and converting them to 32\-bit floating\-point   values\. The first component of the vector is obtained from the 16 least\-significant bits   of ``` v ```; the forth component is obtained from the 16 most\-significant bits of ``` v ```\. ### unpackHalf1x16\(\) function #### glm.**unpackHalf1x16**(**p**: *int*) -\> *float*   Returns a floating\-point scalar with components obtained by unpacking a 16\-bit unsigned   integer into a 16\-bit value, interpreted as a 16\-bit floating\-point number according to the   OpenGL Specification, and converting it to 32\-bit floating\-point values\. ### unpackHalf4x16\(\) function #### glm.**unpackHalf4x16**(**p**: *int*) -\> *vec4*   Returns a four\-component floating\-point vector with components obtained by unpacking a   64\-bit unsigned integer into four 16\-bit values, interpreting those values as 16\-bit   floating\-point numbers according to the OpenGL Specification, and converting them to 32\-bit   floating\-point values\. The first component of the vector is obtained from the 16   least\-significant bits of ``` v ```; the forth component is obtained from the 16 most\-significant   bits of ``` v ```\. ### unpackI3x10\_1x2\(\) function #### glm.**unpackI3x10_1x2**(**p**: *int*) -\> *ivec4*   Unpacks a single 32\-bit unsigned integer p into three 10\-bit and one 2\-bit signed integers\.   The first component of the returned vector will be extracted from the least significant   bits of the input; the last component will be extracted from the most significant bits\. ### unpackInt2x16\(\) function #### glm.**unpackInt2x16**(**p**: *int*) -\> *i16vec2*   Convert a packed integer into an integer vector\. ### unpackInt2x32\(\) function #### glm.**unpackInt2x32**(**p**: *int*) -\> *i32vec2*   Convert a packed integer into an integer vector\. ### unpackInt2x8\(\) function #### glm.**unpackInt2x8**(**p**: *int*) -\> *i8vec2*   Convert a packed integer into an integer vector\. ### unpackInt4x16\(\) function #### glm.**unpackInt4x16**(**p**: *int*) -\> *i16vec4*   Convert a packed integer into an integer vector\. ### unpackInt4x8\(\) function #### glm.**unpackInt4x8**(**p**: *int*) -\> *i8vec4*   Convert a packed integer into an integer vector\. ### unpackRGBM\(\) function #### glm.**unpackRGBM**(**rgbm**: *vec4*) -\> *vec3*   Returns a floating\-point vector with components obtained by reinterpreting an integer   vector as 16\-bit floating\-point numbers and converting them to 32\-bit floating\-point   values\. The first component of the vector is obtained from the 16 least\-significant bits of   ``` v ```; the forth component is obtained from the 16 most\-significant bits of ``` v ```\. ### unpackSnorm\(\) function #### glm.**unpackSnorm**(**t**: *type*, **v**: *vecN*) -\> *vecN*   Convert a packed integer to a normalized floating\-point vector of type ``` t ```\.   ``` t ``` can be either ``` glm.float ``` or ``` glm.double ```\. ### unpackSnorm1x16\(\) function #### glm.**unpackSnorm1x16**(**p**: *int*) -\> *float*   First, unpacks a single 16\-bit unsigned integer ``` p ``` into a single 16\-bit signed integers\.   Then, each component is converted to a normalized floating\-point value to generate the   returned scalar\. The conversion for unpacked fixed\-point value ``` f ``` to floating point is   done as follows : ``` clamp(f / 32767.0, -1, +1) ``` ### unpackSnorm1x8\(\) function #### glm.**unpackSnorm1x8**(**p**: *int*) -\> *float*   First, unpacks a single 8\-bit unsigned integer ``` p ``` into a single 8\-bit signed integers\.   Then, the value is converted to a normalized floating\-point value to generate the   returned scalar\. The conversion for unpacked fixed\-point value ``` f ``` to floating point is   done as follows : ``` clamp(f / 127.0, -1, +1) ``` ### unpackSnorm2x8\(\) function #### glm.**unpackSnorm2x8**(**p**: *int*) -\> *vec2*   First, unpacks a single 16\-bit unsigned integer p into a pair of 8\-bit signed integers\.   Then, each component is converted to a normalized floating\-point value to generate the   returned two\-component vector\. The conversion for unpacked fixed\-point value ``` f ``` to   floating point is done as follows : ``` clamp(f / 127.0, -1, +1) ```   The first component of the returned vector will be extracted from the least significant   bits of the input; the last component will be extracted from the most significant bits\. ### unpackSnorm3x10\_1x2\(\) function #### glm.**unpackSnorm3x10_1x2**(**p**: *int*) -\> *vec4*   First, unpacks a single 32\-bit unsigned integer ``` p ``` into four 16\-bit signed integers\. Then,   each component is converted to a normalized floating\-point value to generate the returned   four\-component vector\. The conversion for unpacked fixed\-point value ``` f ``` to floating point   is done as follows : ``` unpackSnorm3x10_1x2(xyz) ``` : ``` clamp(f / 511.0, -1, +1) ```   ``` unpackSnorm3x10_1x2(w) ``` : ``` clamp(f / 511.0, -1, +1) ```\. The first component of the returned   vector will be extracted from the least significant bits of the input; the last component   will be extracted from the most significant bits\. ### unpackSnorm4x16\(\) function #### glm.**unpackSnorm4x16**(**p**: *int*) -\> *vec4*   First, unpacks a single 64\-bit unsigned integer ``` p ``` into four 16\-bit signed integers\. Then,   each component is converted to a normalized floating\-point value to generate the returned   four\-component vector\. The conversion for unpacked fixed\-point value ``` f ``` to floating point   is done as follows : ``` clamp(f / 32767.0, -1, +1) ```   The first component of the returned vector will be extracted from the least significant   bits of the input; the last component will be extracted from the most significant bits\. ### unpackU3x10\_1x2\(\) function #### glm.**unpackU3x10_1x2**(**p**: *int*) -\> *uvec4*   Unpacks a single 32\-bit unsigned integer ``` p ``` into three 10\-bit and one 2\-bit unsigned   integers\. The first component of the returned vector will be extracted from the least   significant bits of the input; the last component will be extracted from the most   significant bits\. ### unpackUint2x16\(\) function #### glm.**unpackUint2x16**(**p**: *int*) -\> *u16vec2*   Convert a packed integer into an integer vector\. ### unpackUint2x32\(\) function #### glm.**unpackUint2x32**(**p**: *int*) -\> *u32vec2*   Convert a packed integer into an integer vector\. ### unpackUint2x8\(\) function #### glm.**unpackUint2x8**(**p**: *int*) -\> *u8vec2*   Convert a packed integer into an integer vector\. ### unpackUint4x16\(\) function #### glm.**unpackUint4x16**(**p**: *int*) -\> *u16vec4*   Convert a packed integer into an integer vector\. ### unpackUint4x8\(\) function #### glm.**unpackUint4x8**(**p**: *int*) -\> *u8vec4*   Convert a packed integer into an integer vector\. ### unpackUnorm\(\) function #### glm.**unpackUnorm**(**t**: *type*, **v**: *vecN*) -\> *vecN*   Convert a packed unsigned integer to a normalized floating\-point vector of type ``` t ```\.   ``` t ``` can be either ``` glm.float ``` or ``` glm.double ```\. ### unpackUnorm1x16\(\) function #### glm.**unpackUnorm1x16**(**p**: *int*) -\> *float*   First, unpacks a single 16\-bit unsigned integer ``` p ``` into a of 16\-bit unsigned integers\.   Then, the value is converted to a normalized floating\-point value to generate the   returned scalar\. The conversion for unpacked fixed\-point value ``` f ``` to floating point is   done as follows : ``` f / 65535.0 ``` ### unpackUnorm1x5\_1x6\_1x5\(\) function #### glm.**unpackUnorm1x5_1x6_1x5**(**p**: *int*) -\> *vec3*   Convert a packed integer to a normalized floating\-point vector\. ### unpackUnorm1x8\(\) function #### glm.**unpackUnorm1x8**(**p**: *int*) -\> *float*   Convert a single 8\-bit integer to a normalized floating\-point value\. The conversion for   unpacked fixed\-point value ``` f ``` to floating point is done as follows :   ``` f / 255.0 ``` ### unpackUnorm2x3\_1x2\(\) function #### glm.**unpackUnorm2x3_1x2**(**p**: *int*) -\> *vec3*   Convert a packed integer to a normalized floating\-point vector\. ### unpackUnorm2x4\(\) function #### glm.**unpackUnorm2x4**(**p**: *int*) -\> *vec2*   Convert a packed integer to a normalized floating\-point vector\. ### unpackUnorm2x8\(\) function #### glm.**unpackUnorm2x8**(**p**: *int*) -\> *vec2*   First, unpacks a single 16\-bit unsigned integer ``` p ``` into a pair of 8\-bit unsigned integers\.   Then, each component is converted to a normalized floating\-point value to generate the   returned two\-component vector\. The conversion for unpacked fixed\-point value ``` f ``` to   floating point is done as follows : ``` f / 255.0 ```\. The first component of the   returned vector will be extracted from the least significant bits of the input; the last   component will be extracted from the most significant bits\. ### unpackUnorm3x10\_1x2\(\) function #### glm.**unpackUnorm3x10_1x2**(**p**: *int*) -\> *vec4*   First, unpacks a single 32\-bit unsigned integer ``` p ``` into four 16\-bit signed integers\.   Then, each component is converted to a normalized floating\-point value to generate the   returned four\-component vector\. The conversion for unpacked fixed\-point value ``` f ``` to   floating point is done as follows : ``` unpackSnorm3x10_1x2(xyz) ``` : ``` clamp(f / 1023.0, 0, +1) ```   ``` unpackSnorm3x10_1x2(w) ``` : ``` clamp(f / 3.0, 0, +1) ```\. The first component of the returned vector   will be extracted from the least significant bits of the input; the last component will be   extracted from the most significant bits\. ### unpackUnorm3x5\_1x1\(\) function #### glm.**unpackUnorm3x5_1x1**(**p**: *int*) -\> *vec4*   Convert a packed integer to a normalized floating\-point vector\. ### unpackUnorm4x16\(\) function #### glm.**unpackUnorm4x16**(**p**: *int*) -\> *vec4*   First, unpacks a single 64\-bit unsigned integer ``` p ``` into four 16\-bit unsigned integers\.   Then, each component is converted to a normalized floating\-point value to generate the   returned four\-component vector\. The conversion for unpacked fixed\-point value ``` f ``` to   floating point is done as follows : ``` f / 65535.0 ```\. The first component of   the returned vector will be extracted from the least significant bits of the input; the   last component will be extracted from the most significant bits\. ### unpackUnorm4x4\(\) function #### glm.**unpackUnorm4x4**(**p**: *int*) -\> *vec4*   Convert a packed integer to a normalized floating\-point vector\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/packing.sb000066400000000000000000001073371511156275200300430ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\packing methods\h1\ The following methods are all part of the \b\packing methods\b\. This extension provides a set of function to convert vertors to packed formats. \h2\Table of contents\h2\ \ul\ \-\\url #packf2x11_1x10-function\\b\packF2x11_1x10\b\ function\url\ \-\\url #packf3x9_e1x5-function\\b\packF3x9_E1x5\b\ function\url\ \-\\url #packhalf-function\\b\packHalf\b\ function\url\ \-\\url #packhalf1x16-function\\b\packHalf1x16\b\ function\url\ \-\\url #packhalf4x16-function\\b\packHalf4x16\b\ function\url\ \-\\url #packi3x10_1x2-function\\b\packI3x10_1x2\b\ function\url\ \-\\url #packint2x16-function\\b\packInt2x16\b\ function\url\ \-\\url #packint2x32-function\\b\packInt2x32\b\ function\url\ \-\\url #packint2x8-function\\b\packInt2x8\b\ function\url\ \-\\url #packint4x16-function\\b\packInt4x16\b\ function\url\ \-\\url #packint4x8-function\\b\packInt4x8\b\ function\url\ \-\\url #packrgbm-function\\b\packRGBM\b\ function\url\ \-\\url #packsnorm-function\\b\packSnorm\b\ function\url\ \-\\url #packsnorm1x16-function\\b\packSnorm1x16\b\ function\url\ \-\\url #packsnorm1x8-function\\b\packSnorm1x8\b\ function\url\ \-\\url #packsnorm2x8-function\\b\packSnorm2x8\b\ function\url\ \-\\url #packsnorm3x10_1x2-function\\b\packSnorm3x10_1x2\b\ function\url\ \-\\url #packsnorm4x16-function\\b\packSnorm4x16\b\ function\url\ \-\\url #packu3x10_1x2-function\\b\packU3x10_1x2\b\ function\url\ \-\\url #packuint2x16-function\\b\packUint2x16\b\ function\url\ \-\\url #packuint2x32-function\\b\packUint2x32\b\ function\url\ \-\\url #packuint2x8-function\\b\packUint2x8\b\ function\url\ \-\\url #packuint4x16-function\\b\packUint4x16\b\ function\url\ \-\\url #packuint4x8-function\\b\packUint4x8\b\ function\url\ \-\\url #packunorm-function\\b\packUnorm\b\ function\url\ \-\\url #packunorm1x16-function\\b\packUnorm1x16\b\ function\url\ \-\\url #packunorm1x5_1x6_1x5-function\\b\packUnorm1x5_1x6_1x5\b\ function\url\ \-\\url #packunorm1x8-function\\b\packUnorm1x8\b\ function\url\ \-\\url #packunorm2x3_1x2-function\\b\packUnorm2x3_1x2\b\ function\url\ \-\\url #packunorm2x4-function\\b\packUnorm2x4\b\ function\url\ \-\\url #packunorm2x8-function\\b\packUnorm2x8\b\ function\url\ \-\\url #packunorm3x10_1x2-function\\b\packUnorm3x10_1x2\b\ function\url\ \-\\url #packunorm3x5_1x1-function\\b\packUnorm3x5_1x1\b\ function\url\ \-\\url #packunorm4x16-function\\b\packUnorm4x16\b\ function\url\ \-\\url #packunorm4x4-function\\b\packUnorm4x4\b\ function\url\ \-\\url #unpackf2x11_1x10-function\\b\unpackF2x11_1x10\b\ function\url\ \-\\url #unpackf3x9_e1x5-function\\b\unpackF3x9_E1x5\b\ function\url\ \-\\url #unpackhalf-function\\b\unpackHalf\b\ function\url\ \-\\url #unpackhalf1x16-function\\b\unpackHalf1x16\b\ function\url\ \-\\url #unpackhalf4x16-function\\b\unpackHalf4x16\b\ function\url\ \-\\url #unpacki3x10_1x2-function\\b\unpackI3x10_1x2\b\ function\url\ \-\\url #unpackint2x16-function\\b\unpackInt2x16\b\ function\url\ \-\\url #unpackint2x32-function\\b\unpackInt2x32\b\ function\url\ \-\\url #unpackint2x8-function\\b\unpackInt2x8\b\ function\url\ \-\\url #unpackint4x16-function\\b\unpackInt4x16\b\ function\url\ \-\\url #unpackint4x8-function\\b\unpackInt4x8\b\ function\url\ \-\\url #unpackrgbm-function\\b\unpackRGBM\b\ function\url\ \-\\url #unpacksnorm-function\\b\unpackSnorm\b\ function\url\ \-\\url #unpacksnorm1x16-function\\b\unpackSnorm1x16\b\ function\url\ \-\\url #unpacksnorm1x8-function\\b\unpackSnorm1x8\b\ function\url\ \-\\url #unpacksnorm2x8-function\\b\unpackSnorm2x8\b\ function\url\ \-\\url #unpacksnorm3x10_1x2-function\\b\unpackSnorm3x10_1x2\b\ function\url\ \-\\url #unpacksnorm4x16-function\\b\unpackSnorm4x16\b\ function\url\ \-\\url #unpacku3x10_1x2-function\\b\unpackU3x10_1x2\b\ function\url\ \-\\url #unpackuint2x16-function\\b\unpackUint2x16\b\ function\url\ \-\\url #unpackuint2x32-function\\b\unpackUint2x32\b\ function\url\ \-\\url #unpackuint2x8-function\\b\unpackUint2x8\b\ function\url\ \-\\url #unpackuint4x16-function\\b\unpackUint4x16\b\ function\url\ \-\\url #unpackuint4x8-function\\b\unpackUint4x8\b\ function\url\ \-\\url #unpackunorm-function\\b\unpackUnorm\b\ function\url\ \-\\url #unpackunorm1x16-function\\b\unpackUnorm1x16\b\ function\url\ \-\\url #unpackunorm1x5_1x6_1x5-function\\b\unpackUnorm1x5_1x6_1x5\b\ function\url\ \-\\url #unpackunorm1x8-function\\b\unpackUnorm1x8\b\ function\url\ \-\\url #unpackunorm2x3_1x2-function\\b\unpackUnorm2x3_1x2\b\ function\url\ \-\\url #unpackunorm2x4-function\\b\unpackUnorm2x4\b\ function\url\ \-\\url #unpackunorm2x8-function\\b\unpackUnorm2x8\b\ function\url\ \-\\url #unpackunorm3x10_1x2-function\\b\unpackUnorm3x10_1x2\b\ function\url\ \-\\url #unpackunorm3x5_1x1-function\\b\unpackUnorm3x5_1x1\b\ function\url\ \-\\url #unpackunorm4x16-function\\b\unpackUnorm4x16\b\ function\url\ \-\\url #unpackunorm4x4-function\\b\unpackUnorm4x4\b\ function\url\ \ul\ \h3\packF2x11_1x10() function\h3\ \raw\#### glm.**packF2x11_1x10**(**v**: *vec3*) -\\> *int*\raw\ \raw\  \raw\First, converts the first two components of the normalized floating-point value \code\v\code\ into \raw\  \raw\11-bit signless floating-point values. Then, converts the third component of the normalized \raw\  \raw\floating-point value \code\v\code\ into a 10-bit signless floating-point value. Then, the results \raw\  \raw\are packed into the returned 32-bit unsigned integer. The first vector component \raw\  \raw\specifies the 11 least-significant bits of the result; the last component specifies the \raw\  \raw\10 most-significant bits. \h3\packF3x9_E1x5() function\h3\ \raw\#### glm.**packF3x9_E1x5**(**v**: *vec3*) -\\> *int*\raw\ \raw\  \raw\First, converts the first two components of the normalized floating-point value \code\v\code\ into \raw\  \raw\11-bit signless floating-point values. Then, converts the third component of the normalized \raw\  \raw\floating-point value \code\v\code\ into a 10-bit signless floating-point value.Then, the results \raw\  \raw\are packed into the returned 32-bit unsigned integer. The first vector component \raw\  \raw\specifies the 11 least-significant bits of the result; the last component specifies the \raw\  \raw\10 most-significant bits. packF3x9_E1x5 allows encoding into RGBE / RGB9E5 format \h3\packHalf() function\h3\ \raw\#### glm.**packHalf**(**v**: *vecN*) -\\> *u16vecN*\raw\ \raw\  \raw\Returns an unsigned integer vector obtained by converting the components of a \raw\  \raw\floating-point vector to the 16-bit floating-point representation found in the OpenGL \raw\  \raw\Specification. The first vector component specifies the 16 least-significant bits of the \raw\  \raw\result; the forth component specifies the 16 most-significant bits. \h3\packHalf1x16() function\h3\ \raw\#### glm.**packHalf1x16**(**v**: *float*) -\\> *int*\raw\ \raw\  \raw\Returns an unsigned integer obtained by converting the components of a floating-point \raw\  \raw\scalar to the 16-bit floating-point representation found in the OpenGL Specification, and \raw\  \raw\then packing this 16-bit value into a 16-bit unsigned integer. \h3\packHalf4x16() function\h3\ \raw\#### glm.**packHalf4x16**(**v**: *vec4*) -\\> *int*\raw\ \raw\  \raw\Returns an unsigned integer obtained by converting the components of a four-component \raw\  \raw\floating-point vector to the 16-bit floating-point representation found in the OpenGL \raw\  \raw\Specification, and then packing these four 16-bit values into a 64-bit unsigned integer. \raw\  \raw\The first vector component specifies the 16 least-significant bits of the result; the \raw\  \raw\forth component specifies the 16 most-significant bits. \h3\packI3x10_1x2() function\h3\ \raw\#### glm.**packI3x10_1x2**(**v**: *ivec4*) -\\> *int*\raw\ \raw\  \raw\Returns an unsigned integer obtained by converting the components of a four-component \raw\  \raw\signed integer vector to the 10-10-10-2-bit signed integer representation found in the \raw\  \raw\OpenGL Specification, and then packing these four values into a 32-bit unsigned integer. \raw\  \raw\The first vector component specifies the 10 least-significant bits of the result; the \raw\  \raw\forth component specifies the 2 most-significant bits. \h3\packInt2x16() function\h3\ \raw\#### glm.**packInt2x16**(**v**: *i16vec2*) -\\> *int*\raw\ \raw\  \raw\Convert each component from an integer vector into a packed integer. \h3\packInt2x32() function\h3\ \raw\#### glm.**packInt2x32**(**v**: *i32vec2*) -\\> *int*\raw\ \raw\  \raw\Convert each component from an integer vector into a packed integer. \h3\packInt2x8() function\h3\ \raw\#### glm.**packInt2x8**(**v**: *i8vec2*) -\\> *int*\raw\ \raw\  \raw\Convert each component from an integer vector into a packed integer. \h3\packInt4x16() function\h3\ \raw\#### glm.**packInt4x16**(**v**: *i16vec4*) -\\> *int*\raw\ \raw\  \raw\Convert each component from an integer vector into a packed integer. \h3\packInt4x8() function\h3\ \raw\#### glm.**packInt4x8**(**v**: *i8vec4*) -\\> *int*\raw\ \raw\  \raw\Convert each component from an integer vector into a packed integer. \h3\packRGBM() function\h3\ \raw\#### glm.**packRGBM**(**v**: *vec3*) -\\> *vec4*\raw\ \raw\  \raw\Returns an unsigned integer vector obtained by converting the components of a \raw\  \raw\floating-point vector to the 16-bit floating-point representation found in the OpenGL \raw\  \raw\Specification. The first vector component specifies the 16 least-significant bits of the \raw\  \raw\result; the forth component specifies the 16 most-significant bits. \h3\packSnorm() function\h3\ \raw\#### glm.**packSnorm**(**t**: *type*, **v**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Convert each component of the normalized floating-point vector into signed integer values \raw\  \raw\of type \code\t\code\. \raw\  \raw\\code\t\code\ can be any of the 8 integer types (\code\glm.int32\code\, \code\glm.int64\code\, \code\glm.uint8\code\, ...). \h3\packSnorm1x16() function\h3\ \raw\#### glm.**packSnorm1x16**(**v**: *float*) -\\> *int*\raw\ \raw\  \raw\First, converts the normalized floating-point value \code\v\code\ into 16-bit integer value. Then, the \raw\  \raw\results are packed into the returned 16-bit unsigned integer. The conversion to fixed point is \raw\  \raw\done as follows : \code\round(clamp(s, -1, +1) * 32767.0)\code\ \h3\packSnorm1x8() function\h3\ \raw\#### glm.**packSnorm1x8**(**v**: *float*) -\\> *int*\raw\ \raw\  \raw\First, converts the normalized floating-point value \code\v\code\ into 8-bit integer value. Then, the \raw\  \raw\results are packed into the returned 8-bit unsigned integer. The conversion to fixed point is \raw\  \raw\done as follows : \code\round(clamp(v, -1, +1) * 127.0)\code\ \h3\packSnorm2x8() function\h3\ \raw\#### glm.**packSnorm2x8**(**v**: *fvec2*) -\\> *int*\raw\ \raw\  \raw\First, converts each component of the normalized floating-point value \code\v\code\ into 8-bit integer \raw\  \raw\values. Then, the results are packed into the returned 16-bit unsigned integer. The \raw\  \raw\conversion for component \code\c\code\ of \code\v\code\ to fixed point is done as follows : \raw\  \raw\\code\round(clamp(c, -1, +1) * 127.0)\code\. The first component of the vector will be \raw\  \raw\written to the least significant bits of the output; the last component will be written to \raw\  \raw\the most significant bits. \h3\packSnorm3x10_1x2() function\h3\ \raw\#### glm.**packSnorm3x10_1x2**(**v**: *fvec4*) -\\> *int*\raw\ \raw\  \raw\First, converts the first three components of the normalized floating-point value \code\v\code\ into \raw\  \raw\10-bit signed integer values. Then, converts the forth component of the normalized \raw\  \raw\floating-point value \code\v\code\ into 2-bit signed integer values. Then, the results are packed into \raw\  \raw\the returned 32-bit unsigned integer. The conversion for component c of v to fixed point \raw\  \raw\is done as follows : \code\packSnorm3x10_1x2(xyz)\code\ : \code\round(clamp(c, -1, +1) * 511.0)\code\ \raw\  \raw\\code\packSnorm3x10_1x2(w)\code\ : \code\round(clamp(c, -1, +1) * 1.0)\code\. The first vector component specifies \raw\  \raw\the 10 least-significant bits of the result; the forth component specifies the 2 \raw\  \raw\most-significant bits. \h3\packSnorm4x16() function\h3\ \raw\#### glm.**packSnorm4x16**(**v**: *fvec4*) -\\> *int*\raw\ \raw\  \raw\First, converts each component of the normalized floating-point value \code\v\code\ into 16-bit integer \raw\  \raw\values. Then, the results are packed into the returned 64-bit unsigned integer. The \raw\  \raw\conversion for component \code\c\code\ of \code\v\code\ to fixed point is done as follows : \raw\  \raw\\code\round(clamp(c, -1, +1) * 32767.0)\code\. The first component of the vector will be \raw\  \raw\written to the least significant bits of the output; the last component will be written to \raw\  \raw\the most significant bits. \h3\packU3x10_1x2() function\h3\ \raw\#### glm.**packU3x10_1x2**(**v**: *uvec4*) -\\> *int*\raw\ \raw\  \raw\Returns an unsigned integer obtained by converting the components of a four-component \raw\  \raw\unsigned integer vector to the 10-10-10-2-bit unsigned integer representation found in the \raw\  \raw\OpenGL Specification, and then packing these four values into a 32-bit unsigned integer. \raw\  \raw\The first vector component specifies the 10 least-significant bits of the result; the \raw\  \raw\forth component specifies the 2 most-significant bits. \h3\packUint2x16() function\h3\ \raw\#### glm.**packUint2x16**(**v**: *u16vec2*) -\\> *int*\raw\ \raw\  \raw\Convert each component from an integer vector into a packed unsigned integer. \h3\packUint2x32() function\h3\ \raw\#### glm.**packUint2x32**(**v**: *u32vec2*) -\\> *int*\raw\ \raw\  \raw\Convert each component from an integer vector into a packed unsigned integer. \h3\packUint2x8() function\h3\ \raw\#### glm.**packUint2x8**(**v**: *u8vec2*) -\\> *int*\raw\ \raw\  \raw\Convert each component from an integer vector into a packed unsigned integer. \h3\packUint4x16() function\h3\ \raw\#### glm.**packUint4x16**(**v**: *u16vec4*) -\\> *int*\raw\ \raw\  \raw\Convert each component from an integer vector into a packed unsigned integer. \h3\packUint4x8() function\h3\ \raw\#### glm.**packUint4x8**(**v**: *u16vec4*) -\\> *int*\raw\ \raw\  \raw\Convert each component from an integer vector into a packed unsigned integer. \h3\packUnorm() function\h3\ \raw\#### glm.**packUnorm**(**t**: *type*, **v**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Convert each component of the normalized floating-point vector into unsigned integer values \raw\  \raw\of type \code\t\code\. \raw\  \raw\\code\t\code\ can be any of the 4 unsigned integer types \raw\  \raw\(\code\glm.uint64\code\, \code\glm.uint32\code\, \code\glm.uint16\code\, \code\glm.uint8\code\). \h3\packUnorm1x16() function\h3\ \raw\#### glm.**packUnorm1x16**(**v**: *float*) -\\> *int*\raw\ \raw\  \raw\First, converts the normalized floating-point value \code\v\code\ into a 16-bit integer value. Then, \raw\  \raw\the results are packed into the returned 16-bit unsigned integer. The conversion for \raw\  \raw\component \code\c\code\ of \code\v\code\ to fixed point is done as follows : \raw\  \raw\\code\round(clamp(c, 0, +1) * 65535.0)\code\ \h3\packUnorm1x5_1x6_1x5() function\h3\ \raw\#### glm.**packUnorm1x5_1x6_1x5**(**v**: *fvec3*) -\\> *int*\raw\ \raw\  \raw\Convert each component of the normalized floating-point vector into unsigned integer \raw\  \raw\values. \h3\packUnorm1x8() function\h3\ \raw\#### glm.**packUnorm1x8**(**v**: *float*) -\\> *int*\raw\ \raw\  \raw\First, converts the normalized floating-point value \code\v\code\ into a 8-bit integer value. Then, the \raw\  \raw\results are packed into the returned 8-bit unsigned integer. The conversion for component \raw\  \raw\\code\c\code\ of \code\v\code\ to fixed point is done as follows : \code\round(clamp(c, 0, +1) * 255.0)\code\ \h3\packUnorm2x3_1x2() function\h3\ \raw\#### glm.**packUnorm2x3_1x2**(**v**: *fvec3*) -\\> *int*\raw\ \raw\  \raw\Convert each component of the normalized floating-point vector into unsigned integer \raw\  \raw\values. \h3\packUnorm2x4() function\h3\ \raw\#### glm.**packUnorm2x4**(**v**: *fvec2*) -\\> *int*\raw\ \raw\  \raw\Convert each component of the normalized floating-point vector into unsigned integer \raw\  \raw\values. \h3\packUnorm2x8() function\h3\ \raw\#### glm.**packUnorm2x8**(**v**: *fvec2*) -\\> *int*\raw\ \raw\  \raw\First, converts each component of the normalized floating-point value \code\v\code\ into 8-bit integer \raw\  \raw\values. Then, the results are packed into the returned 16-bit unsigned integer. The \raw\  \raw\conversion for component \code\c\code\ of \code\v\code\ to fixed point is done as follows : \raw\  \raw\\code\round(clamp(c, 0, +1) * 255.0)\code\. The first component of the vector will be \raw\  \raw\written to the least significant bits of the output; the last component will be written to \raw\  \raw\the most significant bits. \h3\packUnorm3x10_1x2() function\h3\ \raw\#### glm.**packUnorm3x10_1x2**(**v**: *fvec4*) -\\> *int*\raw\ \raw\  \raw\First, converts the first three components of the normalized floating-point value \code\v\code\ into \raw\  \raw\10-bit unsigned integer values. Then, converts the forth component of the normalized \raw\  \raw\floating-point value \code\v\code\ into 2-bit signed uninteger values.Then, the results are packed into \raw\  \raw\the returned 32-bit unsigned integer. The conversion for component c of v to fixed point is \raw\  \raw\done as follows : \code\packUnorm3x10_1x2(xyz)\code\ : \code\round(clamp(c, 0, +1) * 1023.0)\code\ \raw\  \raw\\code\packUnorm3x10_1x2(w)\code\ : \code\round(clamp(c, 0, +1) * 3.0)\code\. The first vector component specifies \raw\  \raw\the 10 least-significant bits of the result; the forth component specifies the 2 \raw\  \raw\most-significant bits. \h3\packUnorm3x5_1x1() function\h3\ \raw\#### glm.**packUnorm3x5_1x1**(**v**: *fvec4*) -\\> *int*\raw\ \raw\  \raw\Convert each component of the normalized floating-point vector into unsigned integer \raw\  \raw\values. \h3\packUnorm4x16() function\h3\ \raw\#### glm.**packUnorm4x16**(**v**: *fvec4*) -\\> *int*\raw\ \raw\  \raw\First, converts each component of the normalized floating-point value \code\v\code\ into 16-bit integer \raw\  \raw\values. Then, the results are packed into the returned 64-bit unsigned integer. The \raw\  \raw\conversion for component c of v to fixed point is done as follows : \raw\  \raw\\code\round(clamp(c, 0, +1) * 65535.0)\code\. The first component of the vector will be \raw\  \raw\written to the least significant bits of the output; the last component will be written to \raw\  \raw\the most significant bits. \h3\packUnorm4x4() function\h3\ \raw\#### glm.**packUnorm4x4**(**v**: *fvec4*) -\\> *int*\raw\ \raw\  \raw\Convert each component of the normalized floating-point vector into unsigned integer \raw\  \raw\values. \h3\unpackF2x11_1x10() function\h3\ \raw\#### glm.**unpackF2x11_1x10**(**p**: *int*) -\\> *vec3*\raw\ \raw\  \raw\First, unpacks a single 32-bit unsigned integer \code\p\code\ into two 11-bit signless floating-point \raw\  \raw\values and one 10-bit signless floating-point value. Then, each component is converted to a \raw\  \raw\normalized floating-point value to generate the returned three-component vector. The \raw\  \raw\first component of the returned vector will be extracted from the least significant bits of \raw\  \raw\the input; the last component will be extracted from the most significant bits. \h3\unpackF3x9_E1x5() function\h3\ \raw\#### glm.**unpackF3x9_E1x5**(**p**: *int*) -\\> *vec3*\raw\ \raw\  \raw\First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point \raw\  \raw\values and one 10-bit signless floating-point value. Then, each component is converted to a \raw\  \raw\normalized floating-point value to generate the returned three-component vector. The \raw\  \raw\first component of the returned vector will be extracted from the least significant bits of \raw\  \raw\the input; the last component will be extracted from the most significant bits. \raw\  \raw\unpackF3x9_E1x5 allows decoding RGBE / RGB9E5 data \h3\unpackHalf() function\h3\ \raw\#### glm.**unpackHalf**(**p**: *u16vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns a floating-point vector with components obtained by reinterpreting an integer \raw\  \raw\vector as 16-bit floating-point numbers and converting them to 32-bit floating-point \raw\  \raw\values. The first component of the vector is obtained from the 16 least-significant bits \raw\  \raw\of \code\v\code\; the forth component is obtained from the 16 most-significant bits of \code\v\code\. \h3\unpackHalf1x16() function\h3\ \raw\#### glm.**unpackHalf1x16**(**p**: *int*) -\\> *float*\raw\ \raw\  \raw\Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned \raw\  \raw\integer into a 16-bit value, interpreted as a 16-bit floating-point number according to the \raw\  \raw\OpenGL Specification, and converting it to 32-bit floating-point values. \h3\unpackHalf4x16() function\h3\ \raw\#### glm.**unpackHalf4x16**(**p**: *int*) -\\> *vec4*\raw\ \raw\  \raw\Returns a four-component floating-point vector with components obtained by unpacking a \raw\  \raw\64-bit unsigned integer into four 16-bit values, interpreting those values as 16-bit \raw\  \raw\floating-point numbers according to the OpenGL Specification, and converting them to 32-bit \raw\  \raw\floating-point values. The first component of the vector is obtained from the 16 \raw\  \raw\least-significant bits of \code\v\code\; the forth component is obtained from the 16 most-significant \raw\  \raw\bits of \code\v\code\. \h3\unpackI3x10_1x2() function\h3\ \raw\#### glm.**unpackI3x10_1x2**(**p**: *int*) -\\> *ivec4*\raw\ \raw\  \raw\Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers. \raw\  \raw\The first component of the returned vector will be extracted from the least significant \raw\  \raw\bits of the input; the last component will be extracted from the most significant bits. \h3\unpackInt2x16() function\h3\ \raw\#### glm.**unpackInt2x16**(**p**: *int*) -\\> *i16vec2*\raw\ \raw\  \raw\Convert a packed integer into an integer vector. \h3\unpackInt2x32() function\h3\ \raw\#### glm.**unpackInt2x32**(**p**: *int*) -\\> *i32vec2*\raw\ \raw\  \raw\Convert a packed integer into an integer vector. \h3\unpackInt2x8() function\h3\ \raw\#### glm.**unpackInt2x8**(**p**: *int*) -\\> *i8vec2*\raw\ \raw\  \raw\Convert a packed integer into an integer vector. \h3\unpackInt4x16() function\h3\ \raw\#### glm.**unpackInt4x16**(**p**: *int*) -\\> *i16vec4*\raw\ \raw\  \raw\Convert a packed integer into an integer vector. \h3\unpackInt4x8() function\h3\ \raw\#### glm.**unpackInt4x8**(**p**: *int*) -\\> *i8vec4*\raw\ \raw\  \raw\Convert a packed integer into an integer vector. \h3\unpackRGBM() function\h3\ \raw\#### glm.**unpackRGBM**(**rgbm**: *vec4*) -\\> *vec3*\raw\ \raw\  \raw\Returns a floating-point vector with components obtained by reinterpreting an integer \raw\  \raw\vector as 16-bit floating-point numbers and converting them to 32-bit floating-point \raw\  \raw\values. The first component of the vector is obtained from the 16 least-significant bits of \raw\  \raw\\code\v\code\; the forth component is obtained from the 16 most-significant bits of \code\v\code\. \h3\unpackSnorm() function\h3\ \raw\#### glm.**unpackSnorm**(**t**: *type*, **v**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Convert a packed integer to a normalized floating-point vector of type \code\t\code\. \raw\  \raw\\code\t\code\ can be either \code\glm.float\code\ or \code\glm.double\code\. \h3\unpackSnorm1x16() function\h3\ \raw\#### glm.**unpackSnorm1x16**(**p**: *int*) -\\> *float*\raw\ \raw\  \raw\First, unpacks a single 16-bit unsigned integer \code\p\code\ into a single 16-bit signed integers. \raw\  \raw\Then, each component is converted to a normalized floating-point value to generate the \raw\  \raw\returned scalar. The conversion for unpacked fixed-point value \code\f\code\ to floating point is \raw\  \raw\done as follows : \code\clamp(f / 32767.0, -1, +1)\code\ \h3\unpackSnorm1x8() function\h3\ \raw\#### glm.**unpackSnorm1x8**(**p**: *int*) -\\> *float*\raw\ \raw\  \raw\First, unpacks a single 8-bit unsigned integer \code\p\code\ into a single 8-bit signed integers. \raw\  \raw\Then, the value is converted to a normalized floating-point value to generate the \raw\  \raw\returned scalar. The conversion for unpacked fixed-point value \code\f\code\ to floating point is \raw\  \raw\done as follows : \code\clamp(f / 127.0, -1, +1)\code\ \h3\unpackSnorm2x8() function\h3\ \raw\#### glm.**unpackSnorm2x8**(**p**: *int*) -\\> *vec2*\raw\ \raw\  \raw\First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers. \raw\  \raw\Then, each component is converted to a normalized floating-point value to generate the \raw\  \raw\returned two-component vector. The conversion for unpacked fixed-point value \code\f\code\ to \raw\  \raw\floating point is done as follows : \code\clamp(f / 127.0, -1, +1)\code\ \raw\  \raw\The first component of the returned vector will be extracted from the least significant \raw\  \raw\bits of the input; the last component will be extracted from the most significant bits. \h3\unpackSnorm3x10_1x2() function\h3\ \raw\#### glm.**unpackSnorm3x10_1x2**(**p**: *int*) -\\> *vec4*\raw\ \raw\  \raw\First, unpacks a single 32-bit unsigned integer \code\p\code\ into four 16-bit signed integers. Then, \raw\  \raw\each component is converted to a normalized floating-point value to generate the returned \raw\  \raw\four-component vector. The conversion for unpacked fixed-point value \code\f\code\ to floating point \raw\  \raw\is done as follows : \code\unpackSnorm3x10_1x2(xyz)\code\ : \code\clamp(f / 511.0, -1, +1)\code\ \raw\  \raw\\code\unpackSnorm3x10_1x2(w)\code\ : \code\clamp(f / 511.0, -1, +1)\code\. The first component of the returned \raw\  \raw\vector will be extracted from the least significant bits of the input; the last component \raw\  \raw\will be extracted from the most significant bits. \h3\unpackSnorm4x16() function\h3\ \raw\#### glm.**unpackSnorm4x16**(**p**: *int*) -\\> *vec4*\raw\ \raw\  \raw\First, unpacks a single 64-bit unsigned integer \code\p\code\ into four 16-bit signed integers. Then, \raw\  \raw\each component is converted to a normalized floating-point value to generate the returned \raw\  \raw\four-component vector. The conversion for unpacked fixed-point value \code\f\code\ to floating point \raw\  \raw\is done as follows : \code\clamp(f / 32767.0, -1, +1)\code\ \raw\  \raw\The first component of the returned vector will be extracted from the least significant \raw\  \raw\bits of the input; the last component will be extracted from the most significant bits. \h3\unpackU3x10_1x2() function\h3\ \raw\#### glm.**unpackU3x10_1x2**(**p**: *int*) -\\> *uvec4*\raw\ \raw\  \raw\Unpacks a single 32-bit unsigned integer \code\p\code\ into three 10-bit and one 2-bit unsigned \raw\  \raw\integers. The first component of the returned vector will be extracted from the least \raw\  \raw\significant bits of the input; the last component will be extracted from the most \raw\  \raw\significant bits. \h3\unpackUint2x16() function\h3\ \raw\#### glm.**unpackUint2x16**(**p**: *int*) -\\> *u16vec2*\raw\ \raw\  \raw\Convert a packed integer into an integer vector. \h3\unpackUint2x32() function\h3\ \raw\#### glm.**unpackUint2x32**(**p**: *int*) -\\> *u32vec2*\raw\ \raw\  \raw\Convert a packed integer into an integer vector. \h3\unpackUint2x8() function\h3\ \raw\#### glm.**unpackUint2x8**(**p**: *int*) -\\> *u8vec2*\raw\ \raw\  \raw\Convert a packed integer into an integer vector. \h3\unpackUint4x16() function\h3\ \raw\#### glm.**unpackUint4x16**(**p**: *int*) -\\> *u16vec4*\raw\ \raw\  \raw\Convert a packed integer into an integer vector. \h3\unpackUint4x8() function\h3\ \raw\#### glm.**unpackUint4x8**(**p**: *int*) -\\> *u8vec4*\raw\ \raw\  \raw\Convert a packed integer into an integer vector. \h3\unpackUnorm() function\h3\ \raw\#### glm.**unpackUnorm**(**t**: *type*, **v**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Convert a packed unsigned integer to a normalized floating-point vector of type \code\t\code\. \raw\  \raw\\code\t\code\ can be either \code\glm.float\code\ or \code\glm.double\code\. \h3\unpackUnorm1x16() function\h3\ \raw\#### glm.**unpackUnorm1x16**(**p**: *int*) -\\> *float*\raw\ \raw\  \raw\First, unpacks a single 16-bit unsigned integer \code\p\code\ into a of 16-bit unsigned integers. \raw\  \raw\Then, the value is converted to a normalized floating-point value to generate the \raw\  \raw\returned scalar. The conversion for unpacked fixed-point value \code\f\code\ to floating point is \raw\  \raw\done as follows : \code\f / 65535.0\code\ \h3\unpackUnorm1x5_1x6_1x5() function\h3\ \raw\#### glm.**unpackUnorm1x5_1x6_1x5**(**p**: *int*) -\\> *vec3*\raw\ \raw\  \raw\Convert a packed integer to a normalized floating-point vector. \h3\unpackUnorm1x8() function\h3\ \raw\#### glm.**unpackUnorm1x8**(**p**: *int*) -\\> *float*\raw\ \raw\  \raw\Convert a single 8-bit integer to a normalized floating-point value. The conversion for \raw\  \raw\unpacked fixed-point value \code\f\code\ to floating point is done as follows : \raw\  \raw\\code\f / 255.0\code\ \h3\unpackUnorm2x3_1x2() function\h3\ \raw\#### glm.**unpackUnorm2x3_1x2**(**p**: *int*) -\\> *vec3*\raw\ \raw\  \raw\Convert a packed integer to a normalized floating-point vector. \h3\unpackUnorm2x4() function\h3\ \raw\#### glm.**unpackUnorm2x4**(**p**: *int*) -\\> *vec2*\raw\ \raw\  \raw\Convert a packed integer to a normalized floating-point vector. \h3\unpackUnorm2x8() function\h3\ \raw\#### glm.**unpackUnorm2x8**(**p**: *int*) -\\> *vec2*\raw\ \raw\  \raw\First, unpacks a single 16-bit unsigned integer \code\p\code\ into a pair of 8-bit unsigned integers. \raw\  \raw\Then, each component is converted to a normalized floating-point value to generate the \raw\  \raw\returned two-component vector. The conversion for unpacked fixed-point value \code\f\code\ to \raw\  \raw\floating point is done as follows : \code\f / 255.0\code\. The first component of the \raw\  \raw\returned vector will be extracted from the least significant bits of the input; the last \raw\  \raw\component will be extracted from the most significant bits. \h3\unpackUnorm3x10_1x2() function\h3\ \raw\#### glm.**unpackUnorm3x10_1x2**(**p**: *int*) -\\> *vec4*\raw\ \raw\  \raw\First, unpacks a single 32-bit unsigned integer \code\p\code\ into four 16-bit signed integers. \raw\  \raw\Then, each component is converted to a normalized floating-point value to generate the \raw\  \raw\returned four-component vector. The conversion for unpacked fixed-point value \code\f\code\ to \raw\  \raw\floating point is done as follows : \code\unpackSnorm3x10_1x2(xyz)\code\ : \code\clamp(f / 1023.0, 0, +1)\code\ \raw\  \raw\\code\unpackSnorm3x10_1x2(w)\code\ : \code\clamp(f / 3.0, 0, +1)\code\. The first component of the returned vector \raw\  \raw\will be extracted from the least significant bits of the input; the last component will be \raw\  \raw\extracted from the most significant bits. \h3\unpackUnorm3x5_1x1() function\h3\ \raw\#### glm.**unpackUnorm3x5_1x1**(**p**: *int*) -\\> *vec4*\raw\ \raw\  \raw\Convert a packed integer to a normalized floating-point vector. \h3\unpackUnorm4x16() function\h3\ \raw\#### glm.**unpackUnorm4x16**(**p**: *int*) -\\> *vec4*\raw\ \raw\  \raw\First, unpacks a single 64-bit unsigned integer \code\p\code\ into four 16-bit unsigned integers. \raw\  \raw\Then, each component is converted to a normalized floating-point value to generate the \raw\  \raw\returned four-component vector. The conversion for unpacked fixed-point value \code\f\code\ to \raw\  \raw\floating point is done as follows : \code\f / 65535.0\code\. The first component of \raw\  \raw\the returned vector will be extracted from the least significant bits of the input; the \raw\  \raw\last component will be extracted from the most significant bits. \h3\unpackUnorm4x4() function\h3\ \raw\#### glm.**unpackUnorm4x4**(**p**: *int*) -\\> *vec4*\raw\ \raw\  \raw\Convert a packed integer to a normalized floating-point vector. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/quaternion.md000066400000000000000000000052011511156275200305730ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # quaternion methods The following methods are all part of the **quaternion methods**\. Defines a templated quaternion type and several quaternion operations\. ## Table of contents * [**eulerAngles** function](#eulerangles-function) * [**mat3\_cast** function](#mat3_cast-function) * [**mat4\_cast** function](#mat4_cast-function) * [**pitch** function](#pitch-function) * [**quatLookAt** function](#quatlookat-function) * [**quatLookAtLH** function](#quatlookatlh-function) * [**quatLookAtRH** function](#quatlookatrh-function) * [**quat\_cast** function](#quat_cast-function) * [**roll** function](#roll-function) * [**yaw** function](#yaw-function) ### eulerAngles\(\) function #### glm.**eulerAngles**(**x**: *quat*) -\> *vec3*   Returns euler angles, pitch as x, yaw as y, roll as z\. The result is expressed in radians\. ### mat3\_cast\(\) function #### glm.**mat3_cast**(**x**: *quat*) -\> *mat3*   Converts a quaternion to a 3 x 3 matrix\. ### mat4\_cast\(\) function #### glm.**mat4_cast**(**x**: *quat*) -\> *mat4*   Converts a quaternion to a 4 x 4 matrix\. ### pitch\(\) function #### glm.**pitch**(**x**: *quat*) -\> *float*   Returns pitch value of euler angles expressed in radians\. ### quatLookAt\(\) function #### glm.**quatLookAt**(**direction**: *vec3*, **up**: *vec3*) -\> *quat*   See quatLookAtRH\. ### quatLookAtLH\(\) function #### glm.**quatLookAtLH**(**direction**: *vec3*, **up**: *vec3*) -\> *quat*   Build a left\-handed look at quaternion\. ### quatLookAtRH\(\) function #### glm.**quatLookAtRH**(**direction**: *vec3*, **up**: *vec3*) -\> *quat*   Build a right\-handed look at quaternion\. ### quat\_cast\(\) function #### glm.**quat_cast**(**x**: *mat3*) -\> *quat*   Converts a pure rotation 3 x 3 matrix to a quaternion\. #### glm.**quat_cast**(**x**: *mat4*) -\> *quat*   Converts a pure rotation 4 x 4 matrix to a quaternion\. ### roll\(\) function #### glm.**roll**(**x**: *quat*) -\> *float*   Returns roll value of euler angles expressed in radians\. ### yaw\(\) function #### glm.**yaw**(**x**: *quat*) -\> *float*   Returns yaw value of euler angles expressed in radians\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/quaternion.sb000066400000000000000000000055461511156275200306130ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\quaternion methods\h1\ The following methods are all part of the \b\quaternion methods\b\. Defines a templated quaternion type and several quaternion operations. \h2\Table of contents\h2\ \ul\ \-\\url #eulerangles-function\\b\eulerAngles\b\ function\url\ \-\\url #mat3_cast-function\\b\mat3_cast\b\ function\url\ \-\\url #mat4_cast-function\\b\mat4_cast\b\ function\url\ \-\\url #pitch-function\\b\pitch\b\ function\url\ \-\\url #quatlookat-function\\b\quatLookAt\b\ function\url\ \-\\url #quatlookatlh-function\\b\quatLookAtLH\b\ function\url\ \-\\url #quatlookatrh-function\\b\quatLookAtRH\b\ function\url\ \-\\url #quat_cast-function\\b\quat_cast\b\ function\url\ \-\\url #roll-function\\b\roll\b\ function\url\ \-\\url #yaw-function\\b\yaw\b\ function\url\ \ul\ \h3\eulerAngles() function\h3\ \raw\#### glm.**eulerAngles**(**x**: *quat*) -\\> *vec3*\raw\ \raw\  \raw\Returns euler angles, pitch as x, yaw as y, roll as z. The result is expressed in radians. \h3\mat3_cast() function\h3\ \raw\#### glm.**mat3_cast**(**x**: *quat*) -\\> *mat3*\raw\ \raw\  \raw\Converts a quaternion to a 3 x 3 matrix. \h3\mat4_cast() function\h3\ \raw\#### glm.**mat4_cast**(**x**: *quat*) -\\> *mat4*\raw\ \raw\  \raw\Converts a quaternion to a 4 x 4 matrix. \h3\pitch() function\h3\ \raw\#### glm.**pitch**(**x**: *quat*) -\\> *float*\raw\ \raw\  \raw\Returns pitch value of euler angles expressed in radians. \h3\quatLookAt() function\h3\ \raw\#### glm.**quatLookAt**(**direction**: *vec3*, **up**: *vec3*) -\\> *quat*\raw\ \raw\  \raw\See quatLookAtRH. \h3\quatLookAtLH() function\h3\ \raw\#### glm.**quatLookAtLH**(**direction**: *vec3*, **up**: *vec3*) -\\> *quat*\raw\ \raw\  \raw\Build a left-handed look at quaternion. \h3\quatLookAtRH() function\h3\ \raw\#### glm.**quatLookAtRH**(**direction**: *vec3*, **up**: *vec3*) -\\> *quat*\raw\ \raw\  \raw\Build a right-handed look at quaternion. \h3\quat_cast() function\h3\ \raw\#### glm.**quat_cast**(**x**: *mat3*) -\\> *quat*\raw\ \raw\  \raw\Converts a pure rotation 3 x 3 matrix to a quaternion. \raw\#### glm.**quat_cast**(**x**: *mat4*) -\\> *quat*\raw\ \raw\  \raw\Converts a pure rotation 4 x 4 matrix to a quaternion. \h3\roll() function\h3\ \raw\#### glm.**roll**(**x**: *quat*) -\\> *float*\raw\ \raw\  \raw\Returns roll value of euler angles expressed in radians. \h3\yaw() function\h3\ \raw\#### glm.**yaw**(**x**: *quat*) -\\> *float*\raw\ \raw\  \raw\Returns yaw value of euler angles expressed in radians. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/random.md000066400000000000000000000054111511156275200276710ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # random methods The following methods are all part of the **random methods**\. Generate random number from various distribution methods\. ## Table of contents * [**ballRand** function](#ballrand-function) * [**circularRand** function](#circularrand-function) * [**diskRand** function](#diskrand-function) * [**gaussRand** function](#gaussrand-function) * [**linearRand** function](#linearrand-function) * [**setSeed** function](#setseed-function) * [**sphericalRand** function](#sphericalrand-function) ### ballRand\(\) function #### glm.**ballRand**(**Radius**: *float*) -\> *vec3*   Generate a random 3D vector which coordinates are regulary distributed within the volume of   a ball of a given radius\. ### circularRand\(\) function #### glm.**circularRand**(**Radius**: *float*) -\> *vec2*   Generate a random 2D vector which coordinates are regulary distributed on a circle of a   given radius\. ### diskRand\(\) function #### glm.**diskRand**(**Radius**: *float*) -\> *vec2*   Generate a random 2D vector which coordinates are regulary distributed within the area of   a disk of a given radius\. ### gaussRand\(\) function #### glm.**gaussRand**(**Mean**: *float*, **Deviation**: *float*) -\> *float*   Generate random numbers in the interval ``` [Min, Max] ```, according a gaussian distribution\. #### glm.**gaussRand**(**Mean**: *vecN*, **Deviation**: *vecN*) -\> *vecN*   Generate random numbers in the interval ``` [Min, Max] ```, according a gaussian distribution\. ### linearRand\(\) function #### glm.**linearRand**(**Min**: *float*, **Max**: *float*) -\> *float*   Generate random numbers in the interval ``` [Min, Max] ```, according a linear distribution\. #### glm.**linearRand**(**Min**: *vecN*, **Max**: *vecN*) -\> *vecN*   Generate random numbers in the interval ``` [Min, Max] ```, according a linear distribution\. ### setSeed\(\) function #### glm.**setSeed**(**seed**: *int*) -\> *None*   Sets the seed fot the pseudo\-random number generator used by the \-Rand functions\.   The seed needs to be greater or equal to zero\.   Default seed is ``` 1 ```\. ### sphericalRand\(\) function #### glm.**sphericalRand**(**Radius**: *float*) -\> *vec3*   Generate a random 3D vector which coordinates are regulary distributed on a sphere of a   given radius\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/random.sb000066400000000000000000000060031511156275200276730ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\random methods\h1\ The following methods are all part of the \b\random methods\b\. Generate random number from various distribution methods. \h2\Table of contents\h2\ \ul\ \-\\url #ballrand-function\\b\ballRand\b\ function\url\ \-\\url #circularrand-function\\b\circularRand\b\ function\url\ \-\\url #diskrand-function\\b\diskRand\b\ function\url\ \-\\url #gaussrand-function\\b\gaussRand\b\ function\url\ \-\\url #linearrand-function\\b\linearRand\b\ function\url\ \-\\url #setseed-function\\b\setSeed\b\ function\url\ \-\\url #sphericalrand-function\\b\sphericalRand\b\ function\url\ \ul\ \h3\ballRand() function\h3\ \raw\#### glm.**ballRand**(**Radius**: *float*) -\\> *vec3*\raw\ \raw\  \raw\Generate a random 3D vector which coordinates are regulary distributed within the volume of \raw\  \raw\a ball of a given radius. \h3\circularRand() function\h3\ \raw\#### glm.**circularRand**(**Radius**: *float*) -\\> *vec2*\raw\ \raw\  \raw\Generate a random 2D vector which coordinates are regulary distributed on a circle of a \raw\  \raw\given radius. \h3\diskRand() function\h3\ \raw\#### glm.**diskRand**(**Radius**: *float*) -\\> *vec2*\raw\ \raw\  \raw\Generate a random 2D vector which coordinates are regulary distributed within the area of \raw\  \raw\a disk of a given radius. \h3\gaussRand() function\h3\ \raw\#### glm.**gaussRand**(**Mean**: *float*, **Deviation**: *float*) -\\> *float*\raw\ \raw\  \raw\Generate random numbers in the interval \code\[Min, Max]\code\, according a gaussian distribution. \raw\#### glm.**gaussRand**(**Mean**: *vecN*, **Deviation**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Generate random numbers in the interval \code\[Min, Max]\code\, according a gaussian distribution. \h3\linearRand() function\h3\ \raw\#### glm.**linearRand**(**Min**: *float*, **Max**: *float*) -\\> *float*\raw\ \raw\  \raw\Generate random numbers in the interval \code\[Min, Max]\code\, according a linear distribution. \raw\#### glm.**linearRand**(**Min**: *vecN*, **Max**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Generate random numbers in the interval \code\[Min, Max]\code\, according a linear distribution. \h3\setSeed() function\h3\ \raw\#### glm.**setSeed**(**seed**: *int*) -\\> *None*\raw\ \raw\  \raw\Sets the seed fot the pseudo-random number generator used by the -Rand functions. \raw\  \raw\The seed needs to be greater or equal to zero. \raw\  \raw\Default seed is \code\1\code\. \h3\sphericalRand() function\h3\ \raw\#### glm.**sphericalRand**(**Radius**: *float*) -\\> *vec3*\raw\ \raw\  \raw\Generate a random 3D vector which coordinates are regulary distributed on a sphere of a \raw\  \raw\given radius. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/reciprocal.md000066400000000000000000000050351511156275200305360ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # reciprocal methods The following methods are all part of the **reciprocal methods**\. Define secant, cosecant and cotangent functions\. ## Table of contents * [**acot** function](#acot-function) * [**acoth** function](#acoth-function) * [**acsc** function](#acsc-function) * [**acsch** function](#acsch-function) * [**asec** function](#asec-function) * [**asech** function](#asech-function) * [**cot** function](#cot-function) * [**coth** function](#coth-function) * [**csc** function](#csc-function) * [**csch** function](#csch-function) * [**sec** function](#sec-function) * [**sech** function](#sech-function) ### acot\(\) function #### glm.**acot**(**x**: *float*) -\> *float*   Inverse cotangent function\. ### acoth\(\) function #### glm.**acoth**(**x**: *float*) -\> *float*   Inverse cotangent hyperbolic function\. ### acsc\(\) function #### glm.**acsc**(**x**: *float*) -\> *float*   Inverse cosecant function\. ### acsch\(\) function #### glm.**acsch**(**x**: *float*) -\> *float*   Inverse cosecant hyperbolic function\. ### asec\(\) function #### glm.**asec**(**x**: *float*) -\> *float*   Inverse secant function\. ### asech\(\) function #### glm.**asech**(**x**: *float*) -\> *float*   Inverse secant hyperbolic function\. ### cot\(\) function #### glm.**cot**(**angle**: *float*) -\> *float*   Cotangent function\. adjacent / opposite or ``` 1 / tan(x) ```\. ### coth\(\) function #### glm.**coth**(**angle**: *float*) -\> *float*   Cotangent hyperbolic function\. ### csc\(\) function #### glm.**csc**(**angle**: *float*) -\> *float*   Cosecant function\. hypotenuse / opposite or ``` 1 / sin(x) ```\. ### csch\(\) function #### glm.**csch**(**angle**: *float*) -\> *float*   Cosecant hyperbolic function\. ### sec\(\) function #### glm.**sec**(**angle**: *float*) -\> *float*   Secant function\. hypotenuse / adjacent or ``` 1 / cos(x) ```\. ### sech\(\) function #### glm.**sech**(**angle**: *float*) -\> *float*   Secant hyperbolic function\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/reciprocal.sb000066400000000000000000000054621511156275200305460ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\reciprocal methods\h1\ The following methods are all part of the \b\reciprocal methods\b\. Define secant, cosecant and cotangent functions. \h2\Table of contents\h2\ \ul\ \-\\url #acot-function\\b\acot\b\ function\url\ \-\\url #acoth-function\\b\acoth\b\ function\url\ \-\\url #acsc-function\\b\acsc\b\ function\url\ \-\\url #acsch-function\\b\acsch\b\ function\url\ \-\\url #asec-function\\b\asec\b\ function\url\ \-\\url #asech-function\\b\asech\b\ function\url\ \-\\url #cot-function\\b\cot\b\ function\url\ \-\\url #coth-function\\b\coth\b\ function\url\ \-\\url #csc-function\\b\csc\b\ function\url\ \-\\url #csch-function\\b\csch\b\ function\url\ \-\\url #sec-function\\b\sec\b\ function\url\ \-\\url #sech-function\\b\sech\b\ function\url\ \ul\ \h3\acot() function\h3\ \raw\#### glm.**acot**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Inverse cotangent function. \h3\acoth() function\h3\ \raw\#### glm.**acoth**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Inverse cotangent hyperbolic function. \h3\acsc() function\h3\ \raw\#### glm.**acsc**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Inverse cosecant function. \h3\acsch() function\h3\ \raw\#### glm.**acsch**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Inverse cosecant hyperbolic function. \h3\asec() function\h3\ \raw\#### glm.**asec**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Inverse secant function. \h3\asech() function\h3\ \raw\#### glm.**asech**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Inverse secant hyperbolic function. \h3\cot() function\h3\ \raw\#### glm.**cot**(**angle**: *float*) -\\> *float*\raw\ \raw\  \raw\Cotangent function. adjacent / opposite or \code\1 / tan(x)\code\. \h3\coth() function\h3\ \raw\#### glm.**coth**(**angle**: *float*) -\\> *float*\raw\ \raw\  \raw\Cotangent hyperbolic function. \h3\csc() function\h3\ \raw\#### glm.**csc**(**angle**: *float*) -\\> *float*\raw\ \raw\  \raw\Cosecant function. hypotenuse / opposite or \code\1 / sin(x)\code\. \h3\csch() function\h3\ \raw\#### glm.**csch**(**angle**: *float*) -\\> *float*\raw\ \raw\  \raw\Cosecant hyperbolic function. \h3\sec() function\h3\ \raw\#### glm.**sec**(**angle**: *float*) -\\> *float*\raw\ \raw\  \raw\Secant function. hypotenuse / adjacent or \code\1 / cos(x)\code\. \h3\sech() function\h3\ \raw\#### glm.**sech**(**angle**: *float*) -\\> *float*\raw\ \raw\  \raw\Secant hyperbolic function. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/round.md000066400000000000000000000055721511156275200275500ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # round methods The following methods are all part of the **round methods**\. Rounding value to specific boundings\. ## Table of contents * [**ceilMultiple** function](#ceilmultiple-function) * [**ceilPowerOfTwo** function](#ceilpoweroftwo-function) * [**floorMultiple** function](#floormultiple-function) * [**floorPowerOfTwo** function](#floorpoweroftwo-function) * [**roundMultiple** function](#roundmultiple-function) * [**roundPowerOfTwo** function](#roundpoweroftwo-function) ### ceilMultiple\(\) function #### glm.**ceilMultiple**(**v**: *number*, **Multiple**: *number*) -\> *number*   Higher multiple number of Source\. #### glm.**ceilMultiple**(**v**: *vecN*, **Multiple**: *vecN*) -\> *vecN*   Higher multiple number of Source\. ### ceilPowerOfTwo\(\) function #### glm.**ceilPowerOfTwo**(**v**: *number*) -\> *number*   Return the power of two number which value is just higher the input value, round up to a   power of two\. #### glm.**ceilPowerOfTwo**(**v**: *vecN*) -\> *vecN*   Return the power of two number which value is just higher the input value, round up to a   power of two\. ### floorMultiple\(\) function #### glm.**floorMultiple**(**v**: *number*, **Multiple**: *number*) -\> *number*   Lower multiple number of Source\. #### glm.**floorMultiple**(**v**: *vecN*, **Multiple**: *vecN*) -\> *vecN*   Lower multiple number of Source\. ### floorPowerOfTwo\(\) function #### glm.**floorPowerOfTwo**(**v**: *number*) -\> *number*   Return the power of two number which value is just lower the input value, round down to a   power of two\. #### glm.**floorPowerOfTwo**(**v**: *vecN*) -\> *vecN*   Return the power of two number which value is just lower the input value, round down to a   power of two\. ### roundMultiple\(\) function #### glm.**roundMultiple**(**v**: *number*, **Multiple**: *number*) -\> *number*   Lower multiple number of Source\. #### glm.**roundMultiple**(**v**: *vecN*, **Multiple**: *vecN*) -\> *vecN*   Lower multiple number of Source\. ### roundPowerOfTwo\(\) function #### glm.**roundPowerOfTwo**(**v**: *number*) -\> *number*   Return the power of two number which value is the closet to the input value\. #### glm.**roundPowerOfTwo**(**v**: *vecN*) -\> *vecN*   Return the power of two number which value is the closet to the input value\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/round.sb000066400000000000000000000061661511156275200275540ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\round methods\h1\ The following methods are all part of the \b\round methods\b\. Rounding value to specific boundings. \h2\Table of contents\h2\ \ul\ \-\\url #ceilmultiple-function\\b\ceilMultiple\b\ function\url\ \-\\url #ceilpoweroftwo-function\\b\ceilPowerOfTwo\b\ function\url\ \-\\url #floormultiple-function\\b\floorMultiple\b\ function\url\ \-\\url #floorpoweroftwo-function\\b\floorPowerOfTwo\b\ function\url\ \-\\url #roundmultiple-function\\b\roundMultiple\b\ function\url\ \-\\url #roundpoweroftwo-function\\b\roundPowerOfTwo\b\ function\url\ \ul\ \h3\ceilMultiple() function\h3\ \raw\#### glm.**ceilMultiple**(**v**: *number*, **Multiple**: *number*) -\\> *number*\raw\ \raw\  \raw\Higher multiple number of Source. \raw\#### glm.**ceilMultiple**(**v**: *vecN*, **Multiple**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Higher multiple number of Source. \h3\ceilPowerOfTwo() function\h3\ \raw\#### glm.**ceilPowerOfTwo**(**v**: *number*) -\\> *number*\raw\ \raw\  \raw\Return the power of two number which value is just higher the input value, round up to a \raw\  \raw\power of two. \raw\#### glm.**ceilPowerOfTwo**(**v**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Return the power of two number which value is just higher the input value, round up to a \raw\  \raw\power of two. \h3\floorMultiple() function\h3\ \raw\#### glm.**floorMultiple**(**v**: *number*, **Multiple**: *number*) -\\> *number*\raw\ \raw\  \raw\Lower multiple number of Source. \raw\#### glm.**floorMultiple**(**v**: *vecN*, **Multiple**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Lower multiple number of Source. \h3\floorPowerOfTwo() function\h3\ \raw\#### glm.**floorPowerOfTwo**(**v**: *number*) -\\> *number*\raw\ \raw\  \raw\Return the power of two number which value is just lower the input value, round down to a \raw\  \raw\power of two. \raw\#### glm.**floorPowerOfTwo**(**v**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Return the power of two number which value is just lower the input value, round down to a \raw\  \raw\power of two. \h3\roundMultiple() function\h3\ \raw\#### glm.**roundMultiple**(**v**: *number*, **Multiple**: *number*) -\\> *number*\raw\ \raw\  \raw\Lower multiple number of Source. \raw\#### glm.**roundMultiple**(**v**: *vecN*, **Multiple**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Lower multiple number of Source. \h3\roundPowerOfTwo() function\h3\ \raw\#### glm.**roundPowerOfTwo**(**v**: *number*) -\\> *number*\raw\ \raw\  \raw\Return the power of two number which value is the closet to the input value. \raw\#### glm.**roundPowerOfTwo**(**v**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Return the power of two number which value is the closet to the input value. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/type_ptr.md000066400000000000000000000107151511156275200302620ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # type\_ptr methods The following methods are all part of the **type\_ptr methods**\. Handles the interaction between pointers and vector, matrix types\. This extension defines an overloaded function, glm\.value\_ptr\. It returns a pointer to the memory layout of the object\. Matrix types store their values in column\-major order\. This is useful for uploading data to matrices or copying data to buffer objects\. ## Table of contents * [**make\_mat2** function](#make_mat2-function) * [**make\_mat2x2** function](#make_mat2x2-function) * [**make\_mat2x3** function](#make_mat2x3-function) * [**make\_mat2x4** function](#make_mat2x4-function) * [**make\_mat3** function](#make_mat3-function) * [**make\_mat3x2** function](#make_mat3x2-function) * [**make\_mat3x3** function](#make_mat3x3-function) * [**make\_mat3x4** function](#make_mat3x4-function) * [**make\_mat4** function](#make_mat4-function) * [**make\_mat4x2** function](#make_mat4x2-function) * [**make\_mat4x3** function](#make_mat4x3-function) * [**make\_mat4x4** function](#make_mat4x4-function) * [**make\_quat** function](#make_quat-function) * [**make\_vec2** function](#make_vec2-function) * [**make\_vec3** function](#make_vec3-function) * [**make\_vec4** function](#make_vec4-function) * [**sizeof** function](#sizeof-function) * [**value\_ptr** function](#value_ptr-function) ### make\_mat2\(\) function #### glm.**make_mat2**(**x**: *ctypes pointer*) -\> *mat2*   See make\_mat2x2\(\)\. ### make\_mat2x2\(\) function #### glm.**make_mat2x2**(**x**: *ctypes pointer*) -\> *mat2*   Build a matrix from a pointer\. ### make\_mat2x3\(\) function #### glm.**make_mat2x3**(**x**: *ctypes pointer*) -\> *mat2x3*   Build a matrix from a pointer\. ### make\_mat2x4\(\) function #### glm.**make_mat2x4**(**x**: *ctypes pointer*) -\> *mat2x4*   Build a matrix from a pointer\. ### make\_mat3\(\) function #### glm.**make_mat3**(**x**: *ctypes pointer*) -\> *mat3*   See make\_mat3x3\(\)\. ### make\_mat3x2\(\) function #### glm.**make_mat3x2**(**x**: *ctypes pointer*) -\> *mat3x2*   Build a matrix from a pointer\. ### make\_mat3x3\(\) function #### glm.**make_mat3x3**(**x**: *ctypes pointer*) -\> *mat3*   Build a matrix from a pointer\. ### make\_mat3x4\(\) function #### glm.**make_mat3x4**(**x**: *ctypes pointer*) -\> *mat3x4*   Build a matrix from a pointer\. ### make\_mat4\(\) function #### glm.**make_mat4**(**x**: *ctypes pointer*) -\> *mat4*   See make\_mat4x4\(\)\. ### make\_mat4x2\(\) function #### glm.**make_mat4x2**(**x**: *ctypes pointer*) -\> *mat4x2*   Build a matrix from a pointer\. ### make\_mat4x3\(\) function #### glm.**make_mat4x3**(**x**: *ctypes pointer*) -\> *mat4*   Build a matrix from a pointer\. ### make\_mat4x4\(\) function #### glm.**make_mat4x4**(**x**: *ctypes pointer*) -\> *mat4x4*   Build a matrix from a pointer\. ### make\_quat\(\) function #### glm.**make_quat**(**x**: *ctypes pointer*) -\> *quat*   Build a quaternion from a pointer\. ### make\_vec2\(\) function #### glm.**make_vec2**(**x**: *ctypes pointer*) -\> *vec2*   Build a vector from a pointer\. ### make\_vec3\(\) function #### glm.**make_vec3**(**x**: *ctypes pointer*) -\> *vec3*   Build a vector from a pointer\. ### make\_vec4\(\) function #### glm.**make_vec4**(**x**: *ctypes pointer*) -\> *vec4*   Build a vector from a pointer\. ### sizeof\(\) function #### glm.**sizeof**(**x**: *type*) -\> *int*   Return the data size of ``` x ``` in bytes\.   E\.g\. ``` sizeof(vec4) == sizeof(float32) * 4 = 4 * 4 = 16 ```\. ### value\_ptr\(\) function #### glm.**value_ptr**(**x**) -\> *ctypes pointer*   Return the constant address to the data of the input parameter\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/type_ptr.sb000066400000000000000000000114661511156275200302720ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\type_ptr methods\h1\ The following methods are all part of the \b\type_ptr methods\b\. Handles the interaction between pointers and vector, matrix types. This extension defines an overloaded function, glm.value_ptr. It returns a pointer to the memory layout of the object. Matrix types store their values in column-major order. This is useful for uploading data to matrices or copying data to buffer objects. \h2\Table of contents\h2\ \ul\ \-\\url #make_mat2-function\\b\make_mat2\b\ function\url\ \-\\url #make_mat2x2-function\\b\make_mat2x2\b\ function\url\ \-\\url #make_mat2x3-function\\b\make_mat2x3\b\ function\url\ \-\\url #make_mat2x4-function\\b\make_mat2x4\b\ function\url\ \-\\url #make_mat3-function\\b\make_mat3\b\ function\url\ \-\\url #make_mat3x2-function\\b\make_mat3x2\b\ function\url\ \-\\url #make_mat3x3-function\\b\make_mat3x3\b\ function\url\ \-\\url #make_mat3x4-function\\b\make_mat3x4\b\ function\url\ \-\\url #make_mat4-function\\b\make_mat4\b\ function\url\ \-\\url #make_mat4x2-function\\b\make_mat4x2\b\ function\url\ \-\\url #make_mat4x3-function\\b\make_mat4x3\b\ function\url\ \-\\url #make_mat4x4-function\\b\make_mat4x4\b\ function\url\ \-\\url #make_quat-function\\b\make_quat\b\ function\url\ \-\\url #make_vec2-function\\b\make_vec2\b\ function\url\ \-\\url #make_vec3-function\\b\make_vec3\b\ function\url\ \-\\url #make_vec4-function\\b\make_vec4\b\ function\url\ \-\\url #sizeof-function\\b\sizeof\b\ function\url\ \-\\url #value_ptr-function\\b\value_ptr\b\ function\url\ \ul\ \h3\make_mat2() function\h3\ \raw\#### glm.**make_mat2**(**x**: *ctypes pointer*) -\\> *mat2*\raw\ \raw\  \raw\See make_mat2x2(). \h3\make_mat2x2() function\h3\ \raw\#### glm.**make_mat2x2**(**x**: *ctypes pointer*) -\\> *mat2*\raw\ \raw\  \raw\Build a matrix from a pointer. \h3\make_mat2x3() function\h3\ \raw\#### glm.**make_mat2x3**(**x**: *ctypes pointer*) -\\> *mat2x3*\raw\ \raw\  \raw\Build a matrix from a pointer. \h3\make_mat2x4() function\h3\ \raw\#### glm.**make_mat2x4**(**x**: *ctypes pointer*) -\\> *mat2x4*\raw\ \raw\  \raw\Build a matrix from a pointer. \h3\make_mat3() function\h3\ \raw\#### glm.**make_mat3**(**x**: *ctypes pointer*) -\\> *mat3*\raw\ \raw\  \raw\See make_mat3x3(). \h3\make_mat3x2() function\h3\ \raw\#### glm.**make_mat3x2**(**x**: *ctypes pointer*) -\\> *mat3x2*\raw\ \raw\  \raw\Build a matrix from a pointer. \h3\make_mat3x3() function\h3\ \raw\#### glm.**make_mat3x3**(**x**: *ctypes pointer*) -\\> *mat3*\raw\ \raw\  \raw\Build a matrix from a pointer. \h3\make_mat3x4() function\h3\ \raw\#### glm.**make_mat3x4**(**x**: *ctypes pointer*) -\\> *mat3x4*\raw\ \raw\  \raw\Build a matrix from a pointer. \h3\make_mat4() function\h3\ \raw\#### glm.**make_mat4**(**x**: *ctypes pointer*) -\\> *mat4*\raw\ \raw\  \raw\See make_mat4x4(). \h3\make_mat4x2() function\h3\ \raw\#### glm.**make_mat4x2**(**x**: *ctypes pointer*) -\\> *mat4x2*\raw\ \raw\  \raw\Build a matrix from a pointer. \h3\make_mat4x3() function\h3\ \raw\#### glm.**make_mat4x3**(**x**: *ctypes pointer*) -\\> *mat4*\raw\ \raw\  \raw\Build a matrix from a pointer. \h3\make_mat4x4() function\h3\ \raw\#### glm.**make_mat4x4**(**x**: *ctypes pointer*) -\\> *mat4x4*\raw\ \raw\  \raw\Build a matrix from a pointer. \h3\make_quat() function\h3\ \raw\#### glm.**make_quat**(**x**: *ctypes pointer*) -\\> *quat*\raw\ \raw\  \raw\Build a quaternion from a pointer. \h3\make_vec2() function\h3\ \raw\#### glm.**make_vec2**(**x**: *ctypes pointer*) -\\> *vec2*\raw\ \raw\  \raw\Build a vector from a pointer. \h3\make_vec3() function\h3\ \raw\#### glm.**make_vec3**(**x**: *ctypes pointer*) -\\> *vec3*\raw\ \raw\  \raw\Build a vector from a pointer. \h3\make_vec4() function\h3\ \raw\#### glm.**make_vec4**(**x**: *ctypes pointer*) -\\> *vec4*\raw\ \raw\  \raw\Build a vector from a pointer. \h3\sizeof() function\h3\ \raw\#### glm.**sizeof**(**x**: *type*) -\\> *int*\raw\ \raw\  \raw\Return the data size of \code\x\code\ in bytes. \raw\  \raw\E.g. \code\sizeof(vec4) == sizeof(float32) * 4 = 4 * 4 = 16\code\. \h3\value_ptr() function\h3\ \raw\#### glm.**value_ptr**(**x**) -\\> *ctypes pointer*\raw\ \raw\  \raw\Return the constant address to the data of the input parameter. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/ulp.md000066400000000000000000000055471511156275200272230ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # ulp methods The following methods are all part of the **ulp methods**\. Allow the measurement of the accuracy of a function against a reference implementation\. This extension works on floating\-point data and provide results in ULP\. ## Table of contents * [**float\_distance** function](#float_distance-function) * [**next\_float** function](#next_float-function) * [**prev\_float** function](#prev_float-function) ### float\_distance\(\) function #### glm.**float_distance**(**x**: *float*, **y**: *float*) -\> *float*   Return the distance in the number of ULP between 2 double\-precision floating\-point scalars\. #### glm.**float_distance**(**x**: *fvecN*, **y**: *fvecN*) -\> *ivecN*   Return the distance in the number of ULP between 2 single\-precision floating\-point scalars\. #### glm.**float_distance**(**x**: *dvecN*, **y**: *dvecN*) -\> *i64vecN*   Return the distance in the number of ULP between 2 double\-precision floating\-point scalars\. ### next\_float\(\) function #### glm.**next_float**(**x**: *float*) -\> *float*   Return the next ULP value\(s\) after the input value\(s\)\. #### glm.**next_float**(**x**: *vecN*) -\> *vecN*   Return the next ULP value\(s\) after the input value\(s\)\. #### glm.**next_float**(**x**: *float*, **ULPs**: *float*) -\> *float*   Return the next ULP value\(s\) after the input value\(s\)\. #### glm.**next_float**(**x**: *vecN*, **ULPs**: *float*) -\> *vecN*   Return the next ULP value\(s\) after the input value\(s\)\. #### glm.**next_float**(**x**: *vecN*, **ULPs**: *ivecN*) -\> *float*   Return the next ULP value\(s\) after the input value\(s\)\. ### prev\_float\(\) function #### glm.**prev_float**(**x**: *float*) -\> *float*   Return the previous ULP value\(s\) before the input value\(s\)\. #### glm.**prev_float**(**x**: *vecN*) -\> *vecN*   Return the previous ULP value\(s\) before the input value\(s\)\. #### glm.**prev_float**(**x**: *float*, **ULPs**: *float*) -\> *float*   Return the previous ULP value\(s\) before the input value\(s\)\. #### glm.**prev_float**(**x**: *vecN*, **ULPs**: *float*) -\> *vecN*   Return the previous ULP value\(s\) before the input value\(s\)\. #### glm.**prev_float**(**x**: *vecN*, **ULPs**: *ivecN*) -\> *float*   Return the previous ULP value\(s\) before the input value\(s\)\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/recommended_extensions/ulp.sb000066400000000000000000000060031511156275200272130ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\ulp methods\h1\ The following methods are all part of the \b\ulp methods\b\. Allow the measurement of the accuracy of a function against a reference implementation. This extension works on floating-point data and provide results in ULP. \h2\Table of contents\h2\ \ul\ \-\\url #float_distance-function\\b\float_distance\b\ function\url\ \-\\url #next_float-function\\b\next_float\b\ function\url\ \-\\url #prev_float-function\\b\prev_float\b\ function\url\ \ul\ \h3\float_distance() function\h3\ \raw\#### glm.**float_distance**(**x**: *float*, **y**: *float*) -\\> *float*\raw\ \raw\  \raw\Return the distance in the number of ULP between 2 double-precision floating-point scalars. \raw\#### glm.**float_distance**(**x**: *fvecN*, **y**: *fvecN*) -\\> *ivecN*\raw\ \raw\  \raw\Return the distance in the number of ULP between 2 single-precision floating-point scalars. \raw\#### glm.**float_distance**(**x**: *dvecN*, **y**: *dvecN*) -\\> *i64vecN*\raw\ \raw\  \raw\Return the distance in the number of ULP between 2 double-precision floating-point scalars. \h3\next_float() function\h3\ \raw\#### glm.**next_float**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Return the next ULP value(s) after the input value(s). \raw\#### glm.**next_float**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Return the next ULP value(s) after the input value(s). \raw\#### glm.**next_float**(**x**: *float*, **ULPs**: *float*) -\\> *float*\raw\ \raw\  \raw\Return the next ULP value(s) after the input value(s). \raw\#### glm.**next_float**(**x**: *vecN*, **ULPs**: *float*) -\\> *vecN*\raw\ \raw\  \raw\Return the next ULP value(s) after the input value(s). \raw\#### glm.**next_float**(**x**: *vecN*, **ULPs**: *ivecN*) -\\> *float*\raw\ \raw\  \raw\Return the next ULP value(s) after the input value(s). \h3\prev_float() function\h3\ \raw\#### glm.**prev_float**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Return the previous ULP value(s) before the input value(s). \raw\#### glm.**prev_float**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Return the previous ULP value(s) before the input value(s). \raw\#### glm.**prev_float**(**x**: *float*, **ULPs**: *float*) -\\> *float*\raw\ \raw\  \raw\Return the previous ULP value(s) before the input value(s). \raw\#### glm.**prev_float**(**x**: *vecN*, **ULPs**: *float*) -\\> *vecN*\raw\ \raw\  \raw\Return the previous ULP value(s) before the input value(s). \raw\#### glm.**prev_float**(**x**: *vecN*, **ULPs**: *ivecN*) -\\> *float*\raw\ \raw\  \raw\Return the previous ULP value(s) before the input value(s). Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/stable_extensions/000077500000000000000000000000001511156275200250565ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/stable_extensions/README.md000066400000000000000000000131211511156275200263330ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # Table of Contents * [matrix\_clip\_space methods](matrix_clip_space.md) * [**frustum** function ](matrix_clip_space.md#frustum-function) * [**frustumLH** function ](matrix_clip_space.md#frustumLH-function) * [**frustumLH\_NO** function ](matrix_clip_space.md#frustumLH_NO-function) * [**frustumLH\_ZO** function ](matrix_clip_space.md#frustumLH_ZO-function) * [**frustumNO** function ](matrix_clip_space.md#frustumNO-function) * [**frustumRH** function ](matrix_clip_space.md#frustumRH-function) * [**frustumRH\_NO** function ](matrix_clip_space.md#frustumRH_NO-function) * [**frustumRH\_ZO** function ](matrix_clip_space.md#frustumRH_ZO-function) * [**frustumZO** function ](matrix_clip_space.md#frustumZO-function) * [**infinitePerspective** function ](matrix_clip_space.md#infinitePerspective-function) * [**infinitePerspectiveLH** function ](matrix_clip_space.md#infinitePerspectiveLH-function) * [**infinitePerspectiveRH** function ](matrix_clip_space.md#infinitePerspectiveRH-function) * [**ortho** function ](matrix_clip_space.md#ortho-function) * [**orthoLH** function ](matrix_clip_space.md#orthoLH-function) * [**orthoLH\_NO** function ](matrix_clip_space.md#orthoLH_NO-function) * [**orthoLH\_ZO** function ](matrix_clip_space.md#orthoLH_ZO-function) * [**orthoNO** function ](matrix_clip_space.md#orthoNO-function) * [**orthoRH** function ](matrix_clip_space.md#orthoRH-function) * [**orthoRH\_NO** function ](matrix_clip_space.md#orthoRH_NO-function) * [**orthoRH\_ZO** function ](matrix_clip_space.md#orthoRH_ZO-function) * [**orthoZO** function ](matrix_clip_space.md#orthoZO-function) * [**perspective** function ](matrix_clip_space.md#perspective-function) * [**perspectiveFov** function ](matrix_clip_space.md#perspectiveFov-function) * [**perspectiveFovLH** function ](matrix_clip_space.md#perspectiveFovLH-function) * [**perspectiveFovLH\_NO** function ](matrix_clip_space.md#perspectiveFovLH_NO-function) * [**perspectiveFovLH\_ZO** function ](matrix_clip_space.md#perspectiveFovLH_ZO-function) * [**perspectiveFovNO** function ](matrix_clip_space.md#perspectiveFovNO-function) * [**perspectiveFovRH** function ](matrix_clip_space.md#perspectiveFovRH-function) * [**perspectiveFovRH\_NO** function ](matrix_clip_space.md#perspectiveFovRH_NO-function) * [**perspectiveFovRH\_ZO** function ](matrix_clip_space.md#perspectiveFovRH_ZO-function) * [**perspectiveFovZO** function ](matrix_clip_space.md#perspectiveFovZO-function) * [**perspectiveLH** function ](matrix_clip_space.md#perspectiveLH-function) * [**perspectiveLH\_NO** function ](matrix_clip_space.md#perspectiveLH_NO-function) * [**perspectiveLH\_ZO** function ](matrix_clip_space.md#perspectiveLH_ZO-function) * [**perspectiveNO** function ](matrix_clip_space.md#perspectiveNO-function) * [**perspectiveRH** function ](matrix_clip_space.md#perspectiveRH-function) * [**perspectiveRH\_NO** function ](matrix_clip_space.md#perspectiveRH_NO-function) * [**perspectiveRH\_ZO** function ](matrix_clip_space.md#perspectiveRH_ZO-function) * [**perspectiveZO** function ](matrix_clip_space.md#perspectiveZO-function) * [**tweakedInfinitePerspective** function ](matrix_clip_space.md#tweakedInfinitePerspective-function) * [matrix\_projection methods](matrix_projection.md) * [**pickMatrix** function ](matrix_projection.md#pickMatrix-function) * [**project** function ](matrix_projection.md#project-function) * [**projectNO** function ](matrix_projection.md#projectNO-function) * [**projectZO** function ](matrix_projection.md#projectZO-function) * [**unProject** function ](matrix_projection.md#unProject-function) * [**unProjectNO** function ](matrix_projection.md#unProjectNO-function) * [**unProjectZO** function ](matrix_projection.md#unProjectZO-function) * [matrix\_transform methods](matrix_transform.md) * [**identity** function ](matrix_transform.md#identity-function) * [**lookAt** function ](matrix_transform.md#lookAt-function) * [**lookAtLH** function ](matrix_transform.md#lookAtLH-function) * [**lookAtRH** function ](matrix_transform.md#lookAtRH-function) * [**rotate** function ](matrix_transform.md#rotate-function) * [**rotate\_slow** function ](matrix_transform.md#rotate_slow-function) * [**scale** function ](matrix_transform.md#scale-function) * [**scale\_slow** function ](matrix_transform.md#scale_slow-function) * [**translate** function ](matrix_transform.md#translate-function) * [quaternion\_common methods](quaternion_common.md) * [**conjugate** function ](quaternion_common.md#conjugate-function) * [**lerp** function ](quaternion_common.md#lerp-function) * [**slerp** function ](quaternion_common.md#slerp-function) * [quaternion\_trigonometric methods](quaternion_trigonometric.md) * [**angle** function ](quaternion_trigonometric.md#angle-function) * [**angleAxis** function ](quaternion_trigonometric.md#angleAxis-function) * [**axis** function ](quaternion_trigonometric.md#axis-function) * [compatibility methods](compatibility.md) * [**atan2** function ](compatibility.md#atan2-function) * [**isfinite** function ](compatibility.md#isfinite-function) * [**lerp** function ](compatibility.md#lerp-function) * [**saturate** function ](compatibility.md#saturate-function) Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/stable_extensions/README.sb000066400000000000000000000140241511156275200263420ustar00rootroot00000000000000\h1\Table of Contents\h1\ \ul\ \-\ \url matrix_clip_space.md \matrix_clip_space methods\ url\ \--\ \url matrix_clip_space.md#frustum-function \\b\frustum\b\ function \ url\ \--\ \url matrix_clip_space.md#frustumLH-function \\b\frustumLH\b\ function \ url\ \--\ \url matrix_clip_space.md#frustumLH_NO-function \\b\frustumLH_NO\b\ function \ url\ \--\ \url matrix_clip_space.md#frustumLH_ZO-function \\b\frustumLH_ZO\b\ function \ url\ \--\ \url matrix_clip_space.md#frustumNO-function \\b\frustumNO\b\ function \ url\ \--\ \url matrix_clip_space.md#frustumRH-function \\b\frustumRH\b\ function \ url\ \--\ \url matrix_clip_space.md#frustumRH_NO-function \\b\frustumRH_NO\b\ function \ url\ \--\ \url matrix_clip_space.md#frustumRH_ZO-function \\b\frustumRH_ZO\b\ function \ url\ \--\ \url matrix_clip_space.md#frustumZO-function \\b\frustumZO\b\ function \ url\ \--\ \url matrix_clip_space.md#infinitePerspective-function \\b\infinitePerspective\b\ function \ url\ \--\ \url matrix_clip_space.md#infinitePerspectiveLH-function \\b\infinitePerspectiveLH\b\ function \ url\ \--\ \url matrix_clip_space.md#infinitePerspectiveRH-function \\b\infinitePerspectiveRH\b\ function \ url\ \--\ \url matrix_clip_space.md#ortho-function \\b\ortho\b\ function \ url\ \--\ \url matrix_clip_space.md#orthoLH-function \\b\orthoLH\b\ function \ url\ \--\ \url matrix_clip_space.md#orthoLH_NO-function \\b\orthoLH_NO\b\ function \ url\ \--\ \url matrix_clip_space.md#orthoLH_ZO-function \\b\orthoLH_ZO\b\ function \ url\ \--\ \url matrix_clip_space.md#orthoNO-function \\b\orthoNO\b\ function \ url\ \--\ \url matrix_clip_space.md#orthoRH-function \\b\orthoRH\b\ function \ url\ \--\ \url matrix_clip_space.md#orthoRH_NO-function \\b\orthoRH_NO\b\ function \ url\ \--\ \url matrix_clip_space.md#orthoRH_ZO-function \\b\orthoRH_ZO\b\ function \ url\ \--\ \url matrix_clip_space.md#orthoZO-function \\b\orthoZO\b\ function \ url\ \--\ \url matrix_clip_space.md#perspective-function \\b\perspective\b\ function \ url\ \--\ \url matrix_clip_space.md#perspectiveFov-function \\b\perspectiveFov\b\ function \ url\ \--\ \url matrix_clip_space.md#perspectiveFovLH-function \\b\perspectiveFovLH\b\ function \ url\ \--\ \url matrix_clip_space.md#perspectiveFovLH_NO-function \\b\perspectiveFovLH_NO\b\ function \ url\ \--\ \url matrix_clip_space.md#perspectiveFovLH_ZO-function \\b\perspectiveFovLH_ZO\b\ function \ url\ \--\ \url matrix_clip_space.md#perspectiveFovNO-function \\b\perspectiveFovNO\b\ function \ url\ \--\ \url matrix_clip_space.md#perspectiveFovRH-function \\b\perspectiveFovRH\b\ function \ url\ \--\ \url matrix_clip_space.md#perspectiveFovRH_NO-function \\b\perspectiveFovRH_NO\b\ function \ url\ \--\ \url matrix_clip_space.md#perspectiveFovRH_ZO-function \\b\perspectiveFovRH_ZO\b\ function \ url\ \--\ \url matrix_clip_space.md#perspectiveFovZO-function \\b\perspectiveFovZO\b\ function \ url\ \--\ \url matrix_clip_space.md#perspectiveLH-function \\b\perspectiveLH\b\ function \ url\ \--\ \url matrix_clip_space.md#perspectiveLH_NO-function \\b\perspectiveLH_NO\b\ function \ url\ \--\ \url matrix_clip_space.md#perspectiveLH_ZO-function \\b\perspectiveLH_ZO\b\ function \ url\ \--\ \url matrix_clip_space.md#perspectiveNO-function \\b\perspectiveNO\b\ function \ url\ \--\ \url matrix_clip_space.md#perspectiveRH-function \\b\perspectiveRH\b\ function \ url\ \--\ \url matrix_clip_space.md#perspectiveRH_NO-function \\b\perspectiveRH_NO\b\ function \ url\ \--\ \url matrix_clip_space.md#perspectiveRH_ZO-function \\b\perspectiveRH_ZO\b\ function \ url\ \--\ \url matrix_clip_space.md#perspectiveZO-function \\b\perspectiveZO\b\ function \ url\ \--\ \url matrix_clip_space.md#tweakedInfinitePerspective-function \\b\tweakedInfinitePerspective\b\ function \ url\ \-\ \url matrix_projection.md \matrix_projection methods\ url\ \--\ \url matrix_projection.md#pickMatrix-function \\b\pickMatrix\b\ function \ url\ \--\ \url matrix_projection.md#project-function \\b\project\b\ function \ url\ \--\ \url matrix_projection.md#projectNO-function \\b\projectNO\b\ function \ url\ \--\ \url matrix_projection.md#projectZO-function \\b\projectZO\b\ function \ url\ \--\ \url matrix_projection.md#unProject-function \\b\unProject\b\ function \ url\ \--\ \url matrix_projection.md#unProjectNO-function \\b\unProjectNO\b\ function \ url\ \--\ \url matrix_projection.md#unProjectZO-function \\b\unProjectZO\b\ function \ url\ \-\ \url matrix_transform.md \matrix_transform methods\ url\ \--\ \url matrix_transform.md#identity-function \\b\identity\b\ function \ url\ \--\ \url matrix_transform.md#lookAt-function \\b\lookAt\b\ function \ url\ \--\ \url matrix_transform.md#lookAtLH-function \\b\lookAtLH\b\ function \ url\ \--\ \url matrix_transform.md#lookAtRH-function \\b\lookAtRH\b\ function \ url\ \--\ \url matrix_transform.md#rotate-function \\b\rotate\b\ function \ url\ \--\ \url matrix_transform.md#rotate_slow-function \\b\rotate_slow\b\ function \ url\ \--\ \url matrix_transform.md#scale-function \\b\scale\b\ function \ url\ \--\ \url matrix_transform.md#scale_slow-function \\b\scale_slow\b\ function \ url\ \--\ \url matrix_transform.md#translate-function \\b\translate\b\ function \ url\ \-\ \url quaternion_common.md \quaternion_common methods\ url\ \--\ \url quaternion_common.md#conjugate-function \\b\conjugate\b\ function \ url\ \--\ \url quaternion_common.md#lerp-function \\b\lerp\b\ function \ url\ \--\ \url quaternion_common.md#slerp-function \\b\slerp\b\ function \ url\ \-\ \url quaternion_trigonometric.md \quaternion_trigonometric methods\ url\ \--\ \url quaternion_trigonometric.md#angle-function \\b\angle\b\ function \ url\ \--\ \url quaternion_trigonometric.md#angleAxis-function \\b\angleAxis\b\ function \ url\ \--\ \url quaternion_trigonometric.md#axis-function \\b\axis\b\ function \ url\ \-\ \url compatibility.md \compatibility methods\ url\ \--\ \url compatibility.md#atan2-function \\b\atan2\b\ function \ url\ \--\ \url compatibility.md#isfinite-function \\b\isfinite\b\ function \ url\ \--\ \url compatibility.md#lerp-function \\b\lerp\b\ function \ url\ \--\ \url compatibility.md#saturate-function \\b\saturate\b\ function \ url\ \ul\ Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/stable_extensions/compatibility.md000066400000000000000000000056261511156275200302620ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # compatibility methods The following methods are all part of the **compatibility methods**\. Provide functions to increase the compatibility with Cg and HLSL languages\. ## Table of contents * [**atan2** function](#atan2-function) * [**isfinite** function](#isfinite-function) * [**lerp** function](#lerp-function) * [**saturate** function](#saturate-function) ### atan2\(\) function #### glm.**atan2**(**y**: *float*, **x**: *float*) -\> *float*   Arc tangent\. Returns an angle whose tangent is ``` y / x ```\. The signs of ``` x ``` and ``` y ``` are used to   determine what quadrant the angle is in\. The range of values returned by this function   is ``` [-PI, PI] ```\. Results are undefined if ``` x ``` and ``` y ``` are both ``` 0 ```\.   Alias for ``` atan ```\. #### glm.**atan2**(**y**: *vecN*, **x**: *vecN*) -\> *vecN*   Returns ``` atan(y[i], x[i]) ``` for every index ``` i ```\.   Alias for ``` atan ```\. ### isfinite\(\) function #### glm.**isfinite**(**x**: *float*) -\> *bool*   Test whether or not a scalar is a finite value\. #### glm.**isfinite**(**x**: *vecN*) -\> *bvecN*   Test whether or not each vector component is a finite value\. ### lerp\(\) function #### glm.**lerp**(**x**: *float*, **y**: *float*, **a**: *float*) -\> *float*   Returns ``` x * (1.0 - a) + y * a ```, i\.e\., the linear blend of ``` x ``` and ``` y ``` using the   floating\-point value ``` a ```\. The value for ``` a ``` is not restricted to the range ``` [0, 1] ```\. #### glm.**lerp**(**x**: *vecN*, **y**: *vecN*, **a**: *float*) -\> *vecN*   Returns ``` x * (1.0 - a) + y * a ```, i\.e\., the linear blend of ``` x ``` and ``` y ``` using the   floating\-point value ``` a ```\. The value for ``` a ``` is not restricted to the range ``` [0, 1] ```\. #### glm.**lerp**(**x**: *vecN*, **y**: *vecN*, **a**: *vecN*) -\> *vecN*   Returns ``` x * (1.0 - a) + y * a ```, i\.e\., the linear blend of ``` x ``` and ``` y ``` using the   vector ``` a ```\. The value for ``` a ``` is not restricted to the range ``` [0, 1] ```\. #### glm.**lerp**(**x**: *quat*, **y**: *quat*, **a**: *float*) -\> *quat*   Linear interpolation of two quaternions\. The interpolation is oriented\. ### saturate\(\) function #### glm.**saturate**(**x**: *float*) -\> *float*   Returns ``` clamp(x, 0, 1) ```\. #### glm.**saturate**(**x**: *vecN*) -\> *vecN*   Returns ``` clamp(x, 0, 1) ```\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/stable_extensions/compatibility.sb000066400000000000000000000063501511156275200302610ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\compatibility methods\h1\ The following methods are all part of the \b\compatibility methods\b\. Provide functions to increase the compatibility with Cg and HLSL languages. \h2\Table of contents\h2\ \ul\ \-\\url #atan2-function\\b\atan2\b\ function\url\ \-\\url #isfinite-function\\b\isfinite\b\ function\url\ \-\\url #lerp-function\\b\lerp\b\ function\url\ \-\\url #saturate-function\\b\saturate\b\ function\url\ \ul\ \h3\atan2() function\h3\ \raw\#### glm.**atan2**(**y**: *float*, **x**: *float*) -\\> *float*\raw\ \raw\  \raw\Arc tangent. Returns an angle whose tangent is \code\y / x\code\. The signs of \code\x\code\ and \code\y\code\ are used to \raw\  \raw\determine what quadrant the angle is in. The range of values returned by this function \raw\  \raw\is \code\[-PI, PI]\code\. Results are undefined if \code\x\code\ and \code\y\code\ are both \code\0\code\. \raw\  \raw\Alias for \code\atan\code\. \raw\#### glm.**atan2**(**y**: *vecN*, **x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\atan(y[i], x[i])\code\ for every index \code\i\code\. \raw\  \raw\Alias for \code\atan\code\. \h3\isfinite() function\h3\ \raw\#### glm.**isfinite**(**x**: *float*) -\\> *bool*\raw\ \raw\  \raw\Test whether or not a scalar is a finite value. \raw\#### glm.**isfinite**(**x**: *vecN*) -\\> *bvecN*\raw\ \raw\  \raw\Test whether or not each vector component is a finite value. \h3\lerp() function\h3\ \raw\#### glm.**lerp**(**x**: *float*, **y**: *float*, **a**: *float*) -\\> *float*\raw\ \raw\  \raw\Returns \code\x * (1.0 - a) + y * a\code\, i.e., the linear blend of \code\x\code\ and \code\y\code\ using the \raw\  \raw\floating-point value \code\a\code\. The value for \code\a\code\ is not restricted to the range \code\[0, 1]\code\. \raw\#### glm.**lerp**(**x**: *vecN*, **y**: *vecN*, **a**: *float*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\x * (1.0 - a) + y * a\code\, i.e., the linear blend of \code\x\code\ and \code\y\code\ using the \raw\  \raw\floating-point value \code\a\code\. The value for \code\a\code\ is not restricted to the range \code\[0, 1]\code\. \raw\#### glm.**lerp**(**x**: *vecN*, **y**: *vecN*, **a**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\x * (1.0 - a) + y * a\code\, i.e., the linear blend of \code\x\code\ and \code\y\code\ using the \raw\  \raw\vector \code\a\code\. The value for \code\a\code\ is not restricted to the range \code\[0, 1]\code\. \raw\#### glm.**lerp**(**x**: *quat*, **y**: *quat*, **a**: *float*) -\\> *quat*\raw\ \raw\  \raw\Linear interpolation of two quaternions. The interpolation is oriented. \h3\saturate() function\h3\ \raw\#### glm.**saturate**(**x**: *float*) -\\> *float*\raw\ \raw\  \raw\Returns \code\clamp(x, 0, 1)\code\. \raw\#### glm.**saturate**(**x**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\clamp(x, 0, 1)\code\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/stable_extensions/matrix_clip_space.md000066400000000000000000000410161511156275200310700ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # matrix\_clip\_space methods The following methods are all part of the **matrix\_clip\_space methods**\. Defines functions that generate clip space transformation matrices\. ## Table of contents * [**frustum** function](#frustum-function) * [**frustumLH** function](#frustumlh-function) * [**frustumLH\_NO** function](#frustumlh_no-function) * [**frustumLH\_ZO** function](#frustumlh_zo-function) * [**frustumNO** function](#frustumno-function) * [**frustumRH** function](#frustumrh-function) * [**frustumRH\_NO** function](#frustumrh_no-function) * [**frustumRH\_ZO** function](#frustumrh_zo-function) * [**frustumZO** function](#frustumzo-function) * [**infinitePerspective** function](#infiniteperspective-function) * [**infinitePerspectiveLH** function](#infiniteperspectivelh-function) * [**infinitePerspectiveRH** function](#infiniteperspectiverh-function) * [**ortho** function](#ortho-function) * [**orthoLH** function](#ortholh-function) * [**orthoLH\_NO** function](#ortholh_no-function) * [**orthoLH\_ZO** function](#ortholh_zo-function) * [**orthoNO** function](#orthono-function) * [**orthoRH** function](#orthorh-function) * [**orthoRH\_NO** function](#orthorh_no-function) * [**orthoRH\_ZO** function](#orthorh_zo-function) * [**orthoZO** function](#orthozo-function) * [**perspective** function](#perspective-function) * [**perspectiveFov** function](#perspectivefov-function) * [**perspectiveFovLH** function](#perspectivefovlh-function) * [**perspectiveFovLH\_NO** function](#perspectivefovlh_no-function) * [**perspectiveFovLH\_ZO** function](#perspectivefovlh_zo-function) * [**perspectiveFovNO** function](#perspectivefovno-function) * [**perspectiveFovRH** function](#perspectivefovrh-function) * [**perspectiveFovRH\_NO** function](#perspectivefovrh_no-function) * [**perspectiveFovRH\_ZO** function](#perspectivefovrh_zo-function) * [**perspectiveFovZO** function](#perspectivefovzo-function) * [**perspectiveLH** function](#perspectivelh-function) * [**perspectiveLH\_NO** function](#perspectivelh_no-function) * [**perspectiveLH\_ZO** function](#perspectivelh_zo-function) * [**perspectiveNO** function](#perspectiveno-function) * [**perspectiveRH** function](#perspectiverh-function) * [**perspectiveRH\_NO** function](#perspectiverh_no-function) * [**perspectiveRH\_ZO** function](#perspectiverh_zo-function) * [**perspectiveZO** function](#perspectivezo-function) * [**tweakedInfinitePerspective** function](#tweakedinfiniteperspective-function) ### frustum\(\) function #### glm.**frustum**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   See frustumRH\_NO\. ### frustumLH\(\) function #### glm.**frustumLH**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   See frustumLH\_NO\. ### frustumLH\_NO\(\) function #### glm.**frustumLH_NO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   Creates a left handed frustum matrix\. The near and far clip planes correspond to z   normalized device coordinates of ``` -1 ``` and ``` +1 ``` respectively\.   \(OpenGL clip volume definition\) ### frustumLH\_ZO\(\) function #### glm.**frustumLH_ZO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   Creates a left handed frustum matrix\. The near and far clip planes correspond to z   normalized device coordinates of ``` 0 ``` and ``` +1 ``` respectively\.   \(Direct3D clip volume definition\) ### frustumNO\(\) function #### glm.**frustumNO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   See frustumRH\_NO\. ### frustumRH\(\) function #### glm.**frustumRH**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   See frustumRH\_NO\. ### frustumRH\_NO\(\) function #### glm.**frustumRH_NO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   Creates a right handed frustum matrix\. The near and far clip planes correspond to z   normalized device coordinates of ``` -1 ``` and ``` +1 ``` respectively\.   \(OpenGL clip volume definition\) ### frustumRH\_ZO\(\) function #### glm.**frustumRH_ZO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   Creates a right handed frustum matrix\. The near and far clip planes correspond to z   normalized device coordinates of ``` 0 ``` and ``` +1 ``` respectively\.   \(Direct3D clip volume definition\) ### frustumZO\(\) function #### glm.**frustumZO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   See frustumRH\_ZO\. ### infinitePerspective\(\) function #### glm.**infinitePerspective**(**fovy**: *float*, **aspect**: *float*, **near**: *float*) -\> *fmat4x4*   See infinitePerspectiveRH\. ### infinitePerspectiveLH\(\) function #### glm.**infinitePerspectiveLH**(**fovy**: *float*, **aspect**: *float*, **near**: *float*) -\> *fmat4x4*   Creates a matrix for a left handed, symmetric perspective\-view frustum with far plane at   infinite\. ### infinitePerspectiveRH\(\) function #### glm.**infinitePerspectiveRH**(**fovy**: *float*, **aspect**: *float*, **near**: *float*) -\> *fmat4x4*   Creates a matrix for a right handed, symmetric perspective\-view frustum with far plane at   infinite\. ### ortho\(\) function #### glm.**ortho**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*) -\> *fmat4x4*   Creates a matrix for projecting two\-dimensional coordinates onto the screen\. #### glm.**ortho**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **zNear**: *float*, **zFar**: *float*) -\> *fmat4x4*   See orthoRH\_NO\. ### orthoLH\(\) function #### glm.**orthoLH**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **zNear**: *float*, **zFar**: *float*) -\> *fmat4x4*   See orthoLH\_NO\. ### orthoLH\_NO\(\) function #### glm.**orthoLH_NO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **zNear**: *float*, **zFar**: *float*) -\> *fmat4x4*   Creates a matrix for an orthographic parallel viewing volume using left\-handed   coordinates\. The nearand far clip planes correspond to z normalized device coordinates of   ``` -1 ``` and ``` +1 ``` respectively\.   \(OpenGL clip volume definition\) ### orthoLH\_ZO\(\) function #### glm.**orthoLH_ZO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **zNear**: *float*, **zFar**: *float*) -\> *fmat4x4*   Creates a matrix for an orthographic parallel viewing volume, using left\-handed   coordinates\. The nearand far clip planes correspond to z normalized device   coordinates of ``` 0 ``` and ``` +1 ``` respectively\.   \(Direct3D clip volume definition\) ### orthoNO\(\) function #### glm.**orthoNO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **zNear**: *float*, **zFar**: *float*) -\> *fmat4x4*   See orthoRH\_NO\. ### orthoRH\(\) function #### glm.**orthoRH**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **zNear**: *float*, **zFar**: *float*) -\> *fmat4x4*   See orthoRH\_NO\. ### orthoRH\_NO\(\) function #### glm.**orthoRH_NO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **zNear**: *float*, **zFar**: *float*) -\> *fmat4x4*   Creates a matrix for an orthographic parallel viewing volume using right\-handed   coordinates\. The nearand far clip planes correspond to z normalized device coordinates of   ``` -1 ``` and ``` +1 ``` respectively\.   \(OpenGL clip volume definition\) ### orthoRH\_ZO\(\) function #### glm.**orthoRH_ZO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **zNear**: *float*, **zFar**: *float*) -\> *fmat4x4*   Creates a matrix for an orthographic parallel viewing volume, using right\-handed   coordinates\. The nearand far clip planes correspond to z normalized device   coordinates of ``` 0 ``` and ``` +1 ``` respectively\.   \(Direct3D clip volume definition\) ### orthoZO\(\) function #### glm.**orthoZO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **zNear**: *float*, **zFar**: *float*) -\> *fmat4x4*   See orthoRH\_ZO\. ### perspective\(\) function #### glm.**perspective**(**fovy**: *float*, **aspect**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   See perspectiveRH\_NO\. ### perspectiveFov\(\) function #### glm.**perspectiveFov**(**fov**: *float*, **width**: *float*, **height**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   See perspectiveFovRH\_NO\. ### perspectiveFovLH\(\) function #### glm.**perspectiveFovLH**(**fov**: *float*, **width**: *float*, **height**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   See perspectiveFovLH\_NO\. ### perspectiveFovLH\_NO\(\) function #### glm.**perspectiveFovLH_NO**(**fov**: *float*, **width**: *float*, **height**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   Builds a perspective projection matrix based on a field of view using left\-handed   coordinates\. The nearand far clip planes correspond to z normalized device coordinates of   ``` -1 ``` and ``` +1 ``` respectively\. \(OpenGL clip volume definition\) ### perspectiveFovLH\_ZO\(\) function #### glm.**perspectiveFovLH_ZO**(**fov**: *float*, **width**: *float*, **height**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   Builds a perspective projection matrix based on a field of view using left\-handed   coordinates\. The nearand far clip planes correspond to z normalized device coordinates of   ``` 0 ``` and ``` +1 ``` respectively\. \(Direct3D clip volume definition\) ### perspectiveFovNO\(\) function #### glm.**perspectiveFovNO**(**fov**: *float*, **width**: *float*, **height**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   See perspectiveFovRH\_NO\. ### perspectiveFovRH\(\) function #### glm.**perspectiveFovRH**(**fov**: *float*, **width**: *float*, **height**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   See perspectiveFovRH\_NO\. ### perspectiveFovRH\_NO\(\) function #### glm.**perspectiveFovRH_NO**(**fov**: *float*, **width**: *float*, **height**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   Builds a perspective projection matrix based on a field of view using right\-handed   coordinates\. The nearand far clip planes correspond to z normalized device coordinates of   ``` -1 ``` and ``` +1 ``` respectively\. \(OpenGL clip volume definition\) ### perspectiveFovRH\_ZO\(\) function #### glm.**perspectiveFovRH_ZO**(**fov**: *float*, **width**: *float*, **height**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   Builds a perspective projection matrix based on a field of view using right\-handed   coordinates\. The nearand far clip planes correspond to z normalized device coordinates of   ``` 0 ``` and ``` +1 ``` respectively\. \(Direct3D clip volume definition\) ### perspectiveFovZO\(\) function #### glm.**perspectiveFovZO**(**fov**: *float*, **width**: *float*, **height**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   See perspectiveFovRH\_ZO\. ### perspectiveLH\(\) function #### glm.**perspectiveLH**(**fovy**: *float*, **aspect**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   See perspectiveLH\_NO\. ### perspectiveLH\_NO\(\) function #### glm.**perspectiveLH_NO**(**fovy**: *float*, **aspect**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   Creates a matrix for a left handed, symetric perspective\-view frustum\. The near and far   clip planes correspond to z normalized device coordinates of ``` -1 ``` and ``` +1 ``` respectively\.   \(OpenGL clip volume definition\) ### perspectiveLH\_ZO\(\) function #### glm.**perspectiveLH_ZO**(**fovy**: *float*, **aspect**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   Creates a matrix for a left handed, symetric perspective\-view frustum\. The near and far   clip planes correspond to z normalized device coordinates of ``` 0 ``` and ``` +1 ``` respectively\.   \(Direct3D clip volume definition\) ### perspectiveNO\(\) function #### glm.**perspectiveNO**(**fovy**: *float*, **aspect**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   See perspectiveRH\_NO\. ### perspectiveRH\(\) function #### glm.**perspectiveRH**(**fovy**: *float*, **aspect**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   See perspectiveRH\_NO\. ### perspectiveRH\_NO\(\) function #### glm.**perspectiveRH_NO**(**fovy**: *float*, **aspect**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   Creates a matrix for a right handed, symetric perspective\-view frustum\. The near and far   clip planes correspond to z normalized device coordinates of ``` -1 ``` and ``` +1 ``` respectively\.   \(OpenGL clip volume definition\) ### perspectiveRH\_ZO\(\) function #### glm.**perspectiveRH_ZO**(**fovy**: *float*, **aspect**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   Creates a matrix for a right handed, symetric perspective\-view frustum\. The near and far   clip planes correspond to z normalized device coordinates of ``` 0 ``` and ``` +1 ``` respectively\.   \(Direct3D clip volume definition\) ### perspectiveZO\(\) function #### glm.**perspectiveZO**(**fovy**: *float*, **aspect**: *float*, **near**: *float*, **far**: *float*) -\> *fmat4x4*   See perspectiveRH\_ZO\. ### tweakedInfinitePerspective\(\) function #### glm.**tweakedInfinitePerspective**(**fovy**: *float*, **aspect**: *float*, **near**: *float*) -\> *fmat4x4*   Creates a matrix for a symmetric perspective\-view frustum with far plane at infinite for   graphics hardware that doesn't support depth clamping\. #### glm.**tweakedInfinitePerspective**(**fovy**: *float*, **aspect**: *float*, **near**: *float*, **epsilon**: *float*) -\> *fmat4x4*   Creates a matrix for a symmetric perspective\-view frustum with far plane at infinite for   graphics hardware that doesn't support depth clamping\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/stable_extensions/matrix_clip_space.sb000066400000000000000000000433451511156275200311030ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\matrix_clip_space methods\h1\ The following methods are all part of the \b\matrix_clip_space methods\b\. Defines functions that generate clip space transformation matrices. \h2\Table of contents\h2\ \ul\ \-\\url #frustum-function\\b\frustum\b\ function\url\ \-\\url #frustumlh-function\\b\frustumLH\b\ function\url\ \-\\url #frustumlh_no-function\\b\frustumLH_NO\b\ function\url\ \-\\url #frustumlh_zo-function\\b\frustumLH_ZO\b\ function\url\ \-\\url #frustumno-function\\b\frustumNO\b\ function\url\ \-\\url #frustumrh-function\\b\frustumRH\b\ function\url\ \-\\url #frustumrh_no-function\\b\frustumRH_NO\b\ function\url\ \-\\url #frustumrh_zo-function\\b\frustumRH_ZO\b\ function\url\ \-\\url #frustumzo-function\\b\frustumZO\b\ function\url\ \-\\url #infiniteperspective-function\\b\infinitePerspective\b\ function\url\ \-\\url #infiniteperspectivelh-function\\b\infinitePerspectiveLH\b\ function\url\ \-\\url #infiniteperspectiverh-function\\b\infinitePerspectiveRH\b\ function\url\ \-\\url #ortho-function\\b\ortho\b\ function\url\ \-\\url #ortholh-function\\b\orthoLH\b\ function\url\ \-\\url #ortholh_no-function\\b\orthoLH_NO\b\ function\url\ \-\\url #ortholh_zo-function\\b\orthoLH_ZO\b\ function\url\ \-\\url #orthono-function\\b\orthoNO\b\ function\url\ \-\\url #orthorh-function\\b\orthoRH\b\ function\url\ \-\\url #orthorh_no-function\\b\orthoRH_NO\b\ function\url\ \-\\url #orthorh_zo-function\\b\orthoRH_ZO\b\ function\url\ \-\\url #orthozo-function\\b\orthoZO\b\ function\url\ \-\\url #perspective-function\\b\perspective\b\ function\url\ \-\\url #perspectivefov-function\\b\perspectiveFov\b\ function\url\ \-\\url #perspectivefovlh-function\\b\perspectiveFovLH\b\ function\url\ \-\\url #perspectivefovlh_no-function\\b\perspectiveFovLH_NO\b\ function\url\ \-\\url #perspectivefovlh_zo-function\\b\perspectiveFovLH_ZO\b\ function\url\ \-\\url #perspectivefovno-function\\b\perspectiveFovNO\b\ function\url\ \-\\url #perspectivefovrh-function\\b\perspectiveFovRH\b\ function\url\ \-\\url #perspectivefovrh_no-function\\b\perspectiveFovRH_NO\b\ function\url\ \-\\url #perspectivefovrh_zo-function\\b\perspectiveFovRH_ZO\b\ function\url\ \-\\url #perspectivefovzo-function\\b\perspectiveFovZO\b\ function\url\ \-\\url #perspectivelh-function\\b\perspectiveLH\b\ function\url\ \-\\url #perspectivelh_no-function\\b\perspectiveLH_NO\b\ function\url\ \-\\url #perspectivelh_zo-function\\b\perspectiveLH_ZO\b\ function\url\ \-\\url #perspectiveno-function\\b\perspectiveNO\b\ function\url\ \-\\url #perspectiverh-function\\b\perspectiveRH\b\ function\url\ \-\\url #perspectiverh_no-function\\b\perspectiveRH_NO\b\ function\url\ \-\\url #perspectiverh_zo-function\\b\perspectiveRH_ZO\b\ function\url\ \-\\url #perspectivezo-function\\b\perspectiveZO\b\ function\url\ \-\\url #tweakedinfiniteperspective-function\\b\tweakedInfinitePerspective\b\ function\url\ \ul\ \h3\frustum() function\h3\ \raw\#### glm.**frustum**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\See frustumRH_NO. \h3\frustumLH() function\h3\ \raw\#### glm.**frustumLH**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\See frustumLH_NO. \h3\frustumLH_NO() function\h3\ \raw\#### glm.**frustumLH_NO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\Creates a left handed frustum matrix. The near and far clip planes correspond to z \raw\  \raw\normalized device coordinates of \code\-1\code\ and \code\+1\code\ respectively. \raw\  \raw\(OpenGL clip volume definition) \h3\frustumLH_ZO() function\h3\ \raw\#### glm.**frustumLH_ZO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\Creates a left handed frustum matrix. The near and far clip planes correspond to z \raw\  \raw\normalized device coordinates of \code\0\code\ and \code\+1\code\ respectively. \raw\  \raw\(Direct3D clip volume definition) \h3\frustumNO() function\h3\ \raw\#### glm.**frustumNO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\See frustumRH_NO. \h3\frustumRH() function\h3\ \raw\#### glm.**frustumRH**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\See frustumRH_NO. \h3\frustumRH_NO() function\h3\ \raw\#### glm.**frustumRH_NO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\Creates a right handed frustum matrix. The near and far clip planes correspond to z \raw\  \raw\normalized device coordinates of \code\-1\code\ and \code\+1\code\ respectively. \raw\  \raw\(OpenGL clip volume definition) \h3\frustumRH_ZO() function\h3\ \raw\#### glm.**frustumRH_ZO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\Creates a right handed frustum matrix. The near and far clip planes correspond to z \raw\  \raw\normalized device coordinates of \code\0\code\ and \code\+1\code\ respectively. \raw\  \raw\(Direct3D clip volume definition) \h3\frustumZO() function\h3\ \raw\#### glm.**frustumZO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\See frustumRH_ZO. \h3\infinitePerspective() function\h3\ \raw\#### glm.**infinitePerspective**(**fovy**: *float*, **aspect**: *float*, **near**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\See infinitePerspectiveRH. \h3\infinitePerspectiveLH() function\h3\ \raw\#### glm.**infinitePerspectiveLH**(**fovy**: *float*, **aspect**: *float*, **near**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at \raw\  \raw\infinite. \h3\infinitePerspectiveRH() function\h3\ \raw\#### glm.**infinitePerspectiveRH**(**fovy**: *float*, **aspect**: *float*, **near**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at \raw\  \raw\infinite. \h3\ortho() function\h3\ \raw\#### glm.**ortho**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\Creates a matrix for projecting two-dimensional coordinates onto the screen. \raw\#### glm.**ortho**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **zNear**: *float*, **zFar**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\See orthoRH_NO. \h3\orthoLH() function\h3\ \raw\#### glm.**orthoLH**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **zNear**: *float*, **zFar**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\See orthoLH_NO. \h3\orthoLH_NO() function\h3\ \raw\#### glm.**orthoLH_NO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **zNear**: *float*, **zFar**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\Creates a matrix for an orthographic parallel viewing volume using left-handed \raw\  \raw\coordinates. The nearand far clip planes correspond to z normalized device coordinates of \raw\  \raw\\code\-1\code\ and \code\+1\code\ respectively. \raw\  \raw\(OpenGL clip volume definition) \h3\orthoLH_ZO() function\h3\ \raw\#### glm.**orthoLH_ZO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **zNear**: *float*, **zFar**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\Creates a matrix for an orthographic parallel viewing volume, using left-handed \raw\  \raw\coordinates. The nearand far clip planes correspond to z normalized device \raw\  \raw\coordinates of \code\0\code\ and \code\+1\code\ respectively. \raw\  \raw\(Direct3D clip volume definition) \h3\orthoNO() function\h3\ \raw\#### glm.**orthoNO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **zNear**: *float*, **zFar**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\See orthoRH_NO. \h3\orthoRH() function\h3\ \raw\#### glm.**orthoRH**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **zNear**: *float*, **zFar**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\See orthoRH_NO. \h3\orthoRH_NO() function\h3\ \raw\#### glm.**orthoRH_NO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **zNear**: *float*, **zFar**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\Creates a matrix for an orthographic parallel viewing volume using right-handed \raw\  \raw\coordinates. The nearand far clip planes correspond to z normalized device coordinates of \raw\  \raw\\code\-1\code\ and \code\+1\code\ respectively. \raw\  \raw\(OpenGL clip volume definition) \h3\orthoRH_ZO() function\h3\ \raw\#### glm.**orthoRH_ZO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **zNear**: *float*, **zFar**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\Creates a matrix for an orthographic parallel viewing volume, using right-handed \raw\  \raw\coordinates. The nearand far clip planes correspond to z normalized device \raw\  \raw\coordinates of \code\0\code\ and \code\+1\code\ respectively. \raw\  \raw\(Direct3D clip volume definition) \h3\orthoZO() function\h3\ \raw\#### glm.**orthoZO**(**left**: *float*, **right**: *float*, **bottom**: *float*, **top**: *float*, **zNear**: *float*, **zFar**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\See orthoRH_ZO. \h3\perspective() function\h3\ \raw\#### glm.**perspective**(**fovy**: *float*, **aspect**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\See perspectiveRH_NO. \h3\perspectiveFov() function\h3\ \raw\#### glm.**perspectiveFov**(**fov**: *float*, **width**: *float*, **height**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\See perspectiveFovRH_NO. \h3\perspectiveFovLH() function\h3\ \raw\#### glm.**perspectiveFovLH**(**fov**: *float*, **width**: *float*, **height**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\See perspectiveFovLH_NO. \h3\perspectiveFovLH_NO() function\h3\ \raw\#### glm.**perspectiveFovLH_NO**(**fov**: *float*, **width**: *float*, **height**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\Builds a perspective projection matrix based on a field of view using left-handed \raw\  \raw\coordinates. The nearand far clip planes correspond to z normalized device coordinates of \raw\  \raw\\code\-1\code\ and \code\+1\code\ respectively. (OpenGL clip volume definition) \h3\perspectiveFovLH_ZO() function\h3\ \raw\#### glm.**perspectiveFovLH_ZO**(**fov**: *float*, **width**: *float*, **height**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\Builds a perspective projection matrix based on a field of view using left-handed \raw\  \raw\coordinates. The nearand far clip planes correspond to z normalized device coordinates of \raw\  \raw\\code\0\code\ and \code\+1\code\ respectively. (Direct3D clip volume definition) \h3\perspectiveFovNO() function\h3\ \raw\#### glm.**perspectiveFovNO**(**fov**: *float*, **width**: *float*, **height**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\See perspectiveFovRH_NO. \h3\perspectiveFovRH() function\h3\ \raw\#### glm.**perspectiveFovRH**(**fov**: *float*, **width**: *float*, **height**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\See perspectiveFovRH_NO. \h3\perspectiveFovRH_NO() function\h3\ \raw\#### glm.**perspectiveFovRH_NO**(**fov**: *float*, **width**: *float*, **height**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\Builds a perspective projection matrix based on a field of view using right-handed \raw\  \raw\coordinates. The nearand far clip planes correspond to z normalized device coordinates of \raw\  \raw\\code\-1\code\ and \code\+1\code\ respectively. (OpenGL clip volume definition) \h3\perspectiveFovRH_ZO() function\h3\ \raw\#### glm.**perspectiveFovRH_ZO**(**fov**: *float*, **width**: *float*, **height**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\Builds a perspective projection matrix based on a field of view using right-handed \raw\  \raw\coordinates. The nearand far clip planes correspond to z normalized device coordinates of \raw\  \raw\\code\0\code\ and \code\+1\code\ respectively. (Direct3D clip volume definition) \h3\perspectiveFovZO() function\h3\ \raw\#### glm.**perspectiveFovZO**(**fov**: *float*, **width**: *float*, **height**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\See perspectiveFovRH_ZO. \h3\perspectiveLH() function\h3\ \raw\#### glm.**perspectiveLH**(**fovy**: *float*, **aspect**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\See perspectiveLH_NO. \h3\perspectiveLH_NO() function\h3\ \raw\#### glm.**perspectiveLH_NO**(**fovy**: *float*, **aspect**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\Creates a matrix for a left handed, symetric perspective-view frustum. The near and far \raw\  \raw\clip planes correspond to z normalized device coordinates of \code\-1\code\ and \code\+1\code\ respectively. \raw\  \raw\(OpenGL clip volume definition) \h3\perspectiveLH_ZO() function\h3\ \raw\#### glm.**perspectiveLH_ZO**(**fovy**: *float*, **aspect**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\Creates a matrix for a left handed, symetric perspective-view frustum. The near and far \raw\  \raw\clip planes correspond to z normalized device coordinates of \code\0\code\ and \code\+1\code\ respectively. \raw\  \raw\(Direct3D clip volume definition) \h3\perspectiveNO() function\h3\ \raw\#### glm.**perspectiveNO**(**fovy**: *float*, **aspect**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\See perspectiveRH_NO. \h3\perspectiveRH() function\h3\ \raw\#### glm.**perspectiveRH**(**fovy**: *float*, **aspect**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\See perspectiveRH_NO. \h3\perspectiveRH_NO() function\h3\ \raw\#### glm.**perspectiveRH_NO**(**fovy**: *float*, **aspect**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\Creates a matrix for a right handed, symetric perspective-view frustum. The near and far \raw\  \raw\clip planes correspond to z normalized device coordinates of \code\-1\code\ and \code\+1\code\ respectively. \raw\  \raw\(OpenGL clip volume definition) \h3\perspectiveRH_ZO() function\h3\ \raw\#### glm.**perspectiveRH_ZO**(**fovy**: *float*, **aspect**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\Creates a matrix for a right handed, symetric perspective-view frustum. The near and far \raw\  \raw\clip planes correspond to z normalized device coordinates of \code\0\code\ and \code\+1\code\ respectively. \raw\  \raw\(Direct3D clip volume definition) \h3\perspectiveZO() function\h3\ \raw\#### glm.**perspectiveZO**(**fovy**: *float*, **aspect**: *float*, **near**: *float*, **far**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\See perspectiveRH_ZO. \h3\tweakedInfinitePerspective() function\h3\ \raw\#### glm.**tweakedInfinitePerspective**(**fovy**: *float*, **aspect**: *float*, **near**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for \raw\  \raw\graphics hardware that doesn't support depth clamping. \raw\#### glm.**tweakedInfinitePerspective**(**fovy**: *float*, **aspect**: *float*, **near**: *float*, **epsilon**: *float*) -\\> *fmat4x4*\raw\ \raw\  \raw\Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for \raw\  \raw\graphics hardware that doesn't support depth clamping. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/stable_extensions/matrix_projection.md000066400000000000000000000057531511156275200311520ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # matrix\_projection methods The following methods are all part of the **matrix\_projection methods**\. Functions that generate common projection transformation matrices\. ## Table of contents * [**pickMatrix** function](#pickmatrix-function) * [**project** function](#project-function) * [**projectNO** function](#projectno-function) * [**projectZO** function](#projectzo-function) * [**unProject** function](#unproject-function) * [**unProjectNO** function](#unprojectno-function) * [**unProjectZO** function](#unprojectzo-function) ### pickMatrix\(\) function #### glm.**pickMatrix**(**center**: *vec2*, **delta**: *vec2*, **viewport**: *vec4*) -\> *mat4*   Define a picking region\. ### project\(\) function #### glm.**project**(**obj**: *vec3*, **model**: *mat4*, **proj**: *mat4*, **viewport**: *vec4*) -\> *vec3*   See projectNO\(\)\. ### projectNO\(\) function #### glm.**projectNO**(**obj**: *vec3*, **model**: *mat4*, **proj**: *mat4*, **viewport**: *vec4*) -\> *vec3*   Map the specified object coordinates ``` (obj.x, obj.y, obj.z) ``` into window coordinates\.   The near and far clip planes correspond to z normalized device coordinates of ``` -1 ``` and ``` +1 ```   respectively\. \(OpenGL clip volume definition\) ### projectZO\(\) function #### glm.**projectZO**(**obj**: *vec3*, **model**: *mat4*, **proj**: *mat4*, **viewport**: *vec4*) -\> *vec3*   Map the specified object coordinates ``` (obj.x, obj.y, obj.z) ``` into window coordinates\.   The nearand far clip planes correspond to z normalized device coordinates of ``` 0 ``` and ``` +1 ```   respectively\. \(Direct3D clip volume definition\) ### unProject\(\) function #### glm.**unProject**(**win**: *vec3*, **model**: *mat4*, **proj**: *mat4*, **viewport**: *vec4*) -\> *vec3*   See unProjectNO\(\)\. ### unProjectNO\(\) function #### glm.**unProjectNO**(**win**: *vec3*, **model**: *mat4*, **proj**: *mat4*, **viewport**: *vec4*) -\> *vec3*   Map the specified window coordinates ``` (win.x, win.y, win.z) ``` into object coordinates\.   The nearand far clip planes correspond to z normalized device coordinates of ``` -1 ``` and ``` +1 ```   respectively\. \(OpenGL clip volume definition\) ### unProjectZO\(\) function #### glm.**unProjectZO**(**win**: *vec3*, **model**: *mat4*, **proj**: *mat4*, **viewport**: *vec4*) -\> *vec3*   Map the specified window coordinates ``` (win.x, win.y, win.z) ``` into object coordinates\.   The nearand far clip planes correspond to z normalized device coordinates of ``` 0 ``` and ``` +1 ```   respectively\. \(Direct3D clip volume definition\) Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/stable_extensions/matrix_projection.sb000066400000000000000000000063471511156275200311560ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\matrix_projection methods\h1\ The following methods are all part of the \b\matrix_projection methods\b\. Functions that generate common projection transformation matrices. \h2\Table of contents\h2\ \ul\ \-\\url #pickmatrix-function\\b\pickMatrix\b\ function\url\ \-\\url #project-function\\b\project\b\ function\url\ \-\\url #projectno-function\\b\projectNO\b\ function\url\ \-\\url #projectzo-function\\b\projectZO\b\ function\url\ \-\\url #unproject-function\\b\unProject\b\ function\url\ \-\\url #unprojectno-function\\b\unProjectNO\b\ function\url\ \-\\url #unprojectzo-function\\b\unProjectZO\b\ function\url\ \ul\ \h3\pickMatrix() function\h3\ \raw\#### glm.**pickMatrix**(**center**: *vec2*, **delta**: *vec2*, **viewport**: *vec4*) -\\> *mat4*\raw\ \raw\  \raw\Define a picking region. \h3\project() function\h3\ \raw\#### glm.**project**(**obj**: *vec3*, **model**: *mat4*, **proj**: *mat4*, **viewport**: *vec4*) -\\> *vec3*\raw\ \raw\  \raw\See projectNO(). \h3\projectNO() function\h3\ \raw\#### glm.**projectNO**(**obj**: *vec3*, **model**: *mat4*, **proj**: *mat4*, **viewport**: *vec4*) -\\> *vec3*\raw\ \raw\  \raw\Map the specified object coordinates \code\(obj.x, obj.y, obj.z)\code\ into window coordinates. \raw\  \raw\The near and far clip planes correspond to z normalized device coordinates of \code\-1\code\ and \code\+1\code\ \raw\  \raw\respectively. (OpenGL clip volume definition) \h3\projectZO() function\h3\ \raw\#### glm.**projectZO**(**obj**: *vec3*, **model**: *mat4*, **proj**: *mat4*, **viewport**: *vec4*) -\\> *vec3*\raw\ \raw\  \raw\Map the specified object coordinates \code\(obj.x, obj.y, obj.z)\code\ into window coordinates. \raw\  \raw\The nearand far clip planes correspond to z normalized device coordinates of \code\0\code\ and \code\+1\code\ \raw\  \raw\respectively. (Direct3D clip volume definition) \h3\unProject() function\h3\ \raw\#### glm.**unProject**(**win**: *vec3*, **model**: *mat4*, **proj**: *mat4*, **viewport**: *vec4*) -\\> *vec3*\raw\ \raw\  \raw\See unProjectNO(). \h3\unProjectNO() function\h3\ \raw\#### glm.**unProjectNO**(**win**: *vec3*, **model**: *mat4*, **proj**: *mat4*, **viewport**: *vec4*) -\\> *vec3*\raw\ \raw\  \raw\Map the specified window coordinates \code\(win.x, win.y, win.z)\code\ into object coordinates. \raw\  \raw\The nearand far clip planes correspond to z normalized device coordinates of \code\-1\code\ and \code\+1\code\ \raw\  \raw\respectively. (OpenGL clip volume definition) \h3\unProjectZO() function\h3\ \raw\#### glm.**unProjectZO**(**win**: *vec3*, **model**: *mat4*, **proj**: *mat4*, **viewport**: *vec4*) -\\> *vec3*\raw\ \raw\  \raw\Map the specified window coordinates \code\(win.x, win.y, win.z)\code\ into object coordinates. \raw\  \raw\The nearand far clip planes correspond to z normalized device coordinates of \code\0\code\ and \code\+1\code\ \raw\  \raw\respectively. (Direct3D clip volume definition) Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/stable_extensions/matrix_transform.md000066400000000000000000000122301511156275200307750ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # matrix\_transform methods The following methods are all part of the **matrix\_transform methods**\. Defines functions that generate common transformation matrices\. ## Table of contents * [**identity** function](#identity-function) * [**lookAt** function](#lookat-function) * [**lookAtLH** function](#lookatlh-function) * [**lookAtRH** function](#lookatrh-function) * [**rotate** function](#rotate-function) * [**rotate\_slow** function](#rotate_slow-function) * [**scale** function](#scale-function) * [**scale\_slow** function](#scale_slow-function) * [**translate** function](#translate-function) ### identity\(\) function #### glm.**identity**(**matrix_type**: *type*) -\> *matNxM*   Builds an identity matrix\. ### lookAt\(\) function #### glm.**lookAt**(**eye**: *vec3*, **center**: *vec3*, **up**: *vec3*) -\> *mat4x4*   Build a look at view matrix based on the default handedness\. ### lookAtLH\(\) function #### glm.**lookAtLH**(**eye**: *vec3*, **center**: *vec3*, **up**: *vec3*) -\> *mat4x4*   Build a left handed look at view matrix\. ### lookAtRH\(\) function #### glm.**lookAtRH**(**eye**: *vec3*, **center**: *vec3*, **up**: *vec3*) -\> *mat4x4*   Build a right handed look at view matrix\. ### rotate\(\) function #### glm.**rotate**(**angle**: *number*, **axis**: *vec3*) -\> *mat4x4*   Builds a rotation 4 x 4 matrix created from an axis vector and an angle\. #### glm.**rotate**(**angle**: *number*) -\> *mat3x3*   Builds a rotation 3 x 3 matrix created from an angle\. #### glm.**rotate**(**m**: *mat4x4*, **angle**: *number*, **axis**: *vec3*) -\> *mat4x4*   Builds a rotation 4 x 4 matrix created from an axis vector and an angle\.   ``` m ``` is the input matrix multiplied by this translation matrix #### glm.**rotate**(**m**: *mat3x3*, **angle**: *number*) -\> *mat3x3*   Builds a rotation 3 x 3 matrix created from an angle\.   ``` m ``` is the input matrix multiplied by this translation matrix #### glm.**rotate**(**v**: *vec2*, **angle**: *float*) -\> *vec2*   Rotate a two dimensional vector\. #### glm.**rotate**(**v**: *vec3*, **angle**: *float*, **normal**: *vec3*) -\> *vec3*   Rotate a three dimensional vector around an axis\. #### glm.**rotate**(**v**: *vec4*, **angle**: *float*, **normal**: *vec3*) -\> *vec4*   Rotate a four dimensional vector around an axis\. #### glm.**rotate**(**q**: *quat*, **angle**: *float*, **axis**: *vec3*) -\> *quat*   Rotates a quaternion from a vector of 3 components axis and an angle\. ### rotate\_slow\(\) function #### glm.**rotate_slow**(**m**: *mat4x4*, **angle**: *number*, **axis**: *vec3*) -\> *mat4x4*   Builds a rotation 4 x 4 matrix created from an axis vector and an angle\. ### scale\(\) function #### glm.**scale**(**v**: *vec3*) -\> *mat4x4*   Builds a scale 4 x 4 matrix created from 3 scalars\. #### glm.**scale**(**v**: *vec2*) -\> *mat3x3*   Builds a scale 3 x 3 matrix created from a vector of 2 components\. #### glm.**scale**(**m**: *mat4x4*, **v**: *vec3*) -\> *mat4x4*   Builds a scale 4 x 4 matrix created from 3 scalars\.   ``` m ``` is the input matrix multiplied by this translation matrix #### glm.**scale**(**m**: *mat3x3*, **v**: *vec2*) -\> *mat3x3*   Builds a scale 3 x 3 matrix created from a vector of 2 components\.   ``` m ``` is the input matrix multiplied by this translation matrix ### scale\_slow\(\) function #### glm.**scale_slow**(**m**: *mat4x4*, **v**: *vec3*) -\> *mat4x4*   Builds a scale 4 x 4 matrix created from 3 scalars\. ### translate\(\) function #### glm.**translate**(**v**: *vec3*) -\> *mat4x4*   Builds a translation 4 x 4 matrix created from a vector of 3 components\. #### glm.**translate**(**v**: *vec2*) -\> *mat3x3*   Builds a translation 3 x 3 matrix created from a vector of 2 components\. #### glm.**translate**(**m**: *mat4x4*, **v**: *vec3*) -\> *mat4x4*   Builds a translation 4 x 4 matrix created from a vector of 3 components\.   ``` m ``` is the input matrix multiplied by this translation matrix #### glm.**translate**(**m**: *mat3x3*, **v**: *vec2*) -\> *mat3x3*   Builds a translation 3 x 3 matrix created from a vector of 2 components\.   ``` m ``` is the input matrix multiplied by this translation matrix Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/stable_extensions/matrix_transform.sb000066400000000000000000000131321511156275200310030ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\matrix_transform methods\h1\ The following methods are all part of the \b\matrix_transform methods\b\. Defines functions that generate common transformation matrices. \h2\Table of contents\h2\ \ul\ \-\\url #identity-function\\b\identity\b\ function\url\ \-\\url #lookat-function\\b\lookAt\b\ function\url\ \-\\url #lookatlh-function\\b\lookAtLH\b\ function\url\ \-\\url #lookatrh-function\\b\lookAtRH\b\ function\url\ \-\\url #rotate-function\\b\rotate\b\ function\url\ \-\\url #rotate_slow-function\\b\rotate_slow\b\ function\url\ \-\\url #scale-function\\b\scale\b\ function\url\ \-\\url #scale_slow-function\\b\scale_slow\b\ function\url\ \-\\url #translate-function\\b\translate\b\ function\url\ \ul\ \h3\identity() function\h3\ \raw\#### glm.**identity**(**matrix_type**: *type*) -\\> *matNxM*\raw\ \raw\  \raw\Builds an identity matrix. \h3\lookAt() function\h3\ \raw\#### glm.**lookAt**(**eye**: *vec3*, **center**: *vec3*, **up**: *vec3*) -\\> *mat4x4*\raw\ \raw\  \raw\Build a look at view matrix based on the default handedness. \h3\lookAtLH() function\h3\ \raw\#### glm.**lookAtLH**(**eye**: *vec3*, **center**: *vec3*, **up**: *vec3*) -\\> *mat4x4*\raw\ \raw\  \raw\Build a left handed look at view matrix. \h3\lookAtRH() function\h3\ \raw\#### glm.**lookAtRH**(**eye**: *vec3*, **center**: *vec3*, **up**: *vec3*) -\\> *mat4x4*\raw\ \raw\  \raw\Build a right handed look at view matrix. \h3\rotate() function\h3\ \raw\#### glm.**rotate**(**angle**: *number*, **axis**: *vec3*) -\\> *mat4x4*\raw\ \raw\  \raw\Builds a rotation 4 x 4 matrix created from an axis vector and an angle. \raw\#### glm.**rotate**(**angle**: *number*) -\\> *mat3x3*\raw\ \raw\  \raw\Builds a rotation 3 x 3 matrix created from an angle. \raw\#### glm.**rotate**(**m**: *mat4x4*, **angle**: *number*, **axis**: *vec3*) -\\> *mat4x4*\raw\ \raw\  \raw\Builds a rotation 4 x 4 matrix created from an axis vector and an angle. \raw\  \raw\\code\m\code\ is the input matrix multiplied by this translation matrix \raw\#### glm.**rotate**(**m**: *mat3x3*, **angle**: *number*) -\\> *mat3x3*\raw\ \raw\  \raw\Builds a rotation 3 x 3 matrix created from an angle. \raw\  \raw\\code\m\code\ is the input matrix multiplied by this translation matrix \raw\#### glm.**rotate**(**v**: *vec2*, **angle**: *float*) -\\> *vec2*\raw\ \raw\  \raw\Rotate a two dimensional vector. \raw\#### glm.**rotate**(**v**: *vec3*, **angle**: *float*, **normal**: *vec3*) -\\> *vec3*\raw\ \raw\  \raw\Rotate a three dimensional vector around an axis. \raw\#### glm.**rotate**(**v**: *vec4*, **angle**: *float*, **normal**: *vec3*) -\\> *vec4*\raw\ \raw\  \raw\Rotate a four dimensional vector around an axis. \raw\#### glm.**rotate**(**q**: *quat*, **angle**: *float*, **axis**: *vec3*) -\\> *quat*\raw\ \raw\  \raw\Rotates a quaternion from a vector of 3 components axis and an angle. \h3\rotate_slow() function\h3\ \raw\#### glm.**rotate_slow**(**m**: *mat4x4*, **angle**: *number*, **axis**: *vec3*) -\\> *mat4x4*\raw\ \raw\  \raw\Builds a rotation 4 x 4 matrix created from an axis vector and an angle. \h3\scale() function\h3\ \raw\#### glm.**scale**(**v**: *vec3*) -\\> *mat4x4*\raw\ \raw\  \raw\Builds a scale 4 x 4 matrix created from 3 scalars. \raw\#### glm.**scale**(**v**: *vec2*) -\\> *mat3x3*\raw\ \raw\  \raw\Builds a scale 3 x 3 matrix created from a vector of 2 components. \raw\#### glm.**scale**(**m**: *mat4x4*, **v**: *vec3*) -\\> *mat4x4*\raw\ \raw\  \raw\Builds a scale 4 x 4 matrix created from 3 scalars. \raw\  \raw\\code\m\code\ is the input matrix multiplied by this translation matrix \raw\#### glm.**scale**(**m**: *mat3x3*, **v**: *vec2*) -\\> *mat3x3*\raw\ \raw\  \raw\Builds a scale 3 x 3 matrix created from a vector of 2 components. \raw\  \raw\\code\m\code\ is the input matrix multiplied by this translation matrix \h3\scale_slow() function\h3\ \raw\#### glm.**scale_slow**(**m**: *mat4x4*, **v**: *vec3*) -\\> *mat4x4*\raw\ \raw\  \raw\Builds a scale 4 x 4 matrix created from 3 scalars. \h3\translate() function\h3\ \raw\#### glm.**translate**(**v**: *vec3*) -\\> *mat4x4*\raw\ \raw\  \raw\Builds a translation 4 x 4 matrix created from a vector of 3 components. \raw\#### glm.**translate**(**v**: *vec2*) -\\> *mat3x3*\raw\ \raw\  \raw\Builds a translation 3 x 3 matrix created from a vector of 2 components. \raw\#### glm.**translate**(**m**: *mat4x4*, **v**: *vec3*) -\\> *mat4x4*\raw\ \raw\  \raw\Builds a translation 4 x 4 matrix created from a vector of 3 components. \raw\  \raw\\code\m\code\ is the input matrix multiplied by this translation matrix \raw\#### glm.**translate**(**m**: *mat3x3*, **v**: *vec2*) -\\> *mat3x3*\raw\ \raw\  \raw\Builds a translation 3 x 3 matrix created from a vector of 2 components. \raw\  \raw\\code\m\code\ is the input matrix multiplied by this translation matrix Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/stable_extensions/quaternion_common.md000066400000000000000000000042711511156275200311410ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # quaternion\_common methods The following methods are all part of the **quaternion\_common methods**\. Provides common functions for quaternion types\. ## Table of contents * [**conjugate** function](#conjugate-function) * [**lerp** function](#lerp-function) * [**slerp** function](#slerp-function) ### conjugate\(\) function #### glm.**conjugate**(**q**: *quat*) -\> *quat*   Returns the ``` q ``` conjugate\. ### lerp\(\) function #### glm.**lerp**(**x**: *float*, **y**: *float*, **a**: *float*) -\> *float*   Returns ``` x * (1.0 - a) + y * a ```, i\.e\., the linear blend of ``` x ``` and ``` y ``` using the   floating\-point value ``` a ```\. The value for ``` a ``` is not restricted to the range ``` [0, 1] ```\. #### glm.**lerp**(**x**: *vecN*, **y**: *vecN*, **a**: *float*) -\> *vecN*   Returns ``` x * (1.0 - a) + y * a ```, i\.e\., the linear blend of ``` x ``` and ``` y ``` using the   floating\-point value ``` a ```\. The value for ``` a ``` is not restricted to the range ``` [0, 1] ```\. #### glm.**lerp**(**x**: *vecN*, **y**: *vecN*, **a**: *vecN*) -\> *vecN*   Returns ``` x * (1.0 - a) + y * a ```, i\.e\., the linear blend of ``` x ``` and ``` y ``` using the   vector ``` a ```\. The value for ``` a ``` is not restricted to the range ``` [0, 1] ```\. #### glm.**lerp**(**x**: *quat*, **y**: *quat*, **a**: *float*) -\> *quat*   Linear interpolation of two quaternions\. The interpolation is oriented\. ### slerp\(\) function #### glm.**slerp**(**x**: *quat*, **y**: *quat*, **a**: *float*) -\> *quat*   Spherical linear interpolation of two quaternions\. The interpolation always take the short   path and the rotation is performed at constant speed\. #### glm.**slerp**(**x**: *vec3*, **y**: *vec3*, **a**: *float*) -\> *vec3*   Returns Spherical interpolation between two vectors\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/stable_extensions/quaternion_common.sb000066400000000000000000000046241511156275200311470ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\quaternion_common methods\h1\ The following methods are all part of the \b\quaternion_common methods\b\. Provides common functions for quaternion types. \h2\Table of contents\h2\ \ul\ \-\\url #conjugate-function\\b\conjugate\b\ function\url\ \-\\url #lerp-function\\b\lerp\b\ function\url\ \-\\url #slerp-function\\b\slerp\b\ function\url\ \ul\ \h3\conjugate() function\h3\ \raw\#### glm.**conjugate**(**q**: *quat*) -\\> *quat*\raw\ \raw\  \raw\Returns the \code\q\code\ conjugate. \h3\lerp() function\h3\ \raw\#### glm.**lerp**(**x**: *float*, **y**: *float*, **a**: *float*) -\\> *float*\raw\ \raw\  \raw\Returns \code\x * (1.0 - a) + y * a\code\, i.e., the linear blend of \code\x\code\ and \code\y\code\ using the \raw\  \raw\floating-point value \code\a\code\. The value for \code\a\code\ is not restricted to the range \code\[0, 1]\code\. \raw\#### glm.**lerp**(**x**: *vecN*, **y**: *vecN*, **a**: *float*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\x * (1.0 - a) + y * a\code\, i.e., the linear blend of \code\x\code\ and \code\y\code\ using the \raw\  \raw\floating-point value \code\a\code\. The value for \code\a\code\ is not restricted to the range \code\[0, 1]\code\. \raw\#### glm.**lerp**(**x**: *vecN*, **y**: *vecN*, **a**: *vecN*) -\\> *vecN*\raw\ \raw\  \raw\Returns \code\x * (1.0 - a) + y * a\code\, i.e., the linear blend of \code\x\code\ and \code\y\code\ using the \raw\  \raw\vector \code\a\code\. The value for \code\a\code\ is not restricted to the range \code\[0, 1]\code\. \raw\#### glm.**lerp**(**x**: *quat*, **y**: *quat*, **a**: *float*) -\\> *quat*\raw\ \raw\  \raw\Linear interpolation of two quaternions. The interpolation is oriented. \h3\slerp() function\h3\ \raw\#### glm.**slerp**(**x**: *quat*, **y**: *quat*, **a**: *float*) -\\> *quat*\raw\ \raw\  \raw\Spherical linear interpolation of two quaternions. The interpolation always take the short \raw\  \raw\path and the rotation is performed at constant speed. \raw\#### glm.**slerp**(**x**: *vec3*, **y**: *vec3*, **a**: *float*) -\\> *vec3*\raw\ \raw\  \raw\Returns Spherical interpolation between two vectors. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/stable_extensions/quaternion_trigonometric.md000066400000000000000000000016011511156275200325300ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # quaternion\_trigonometric methods The following methods are all part of the **quaternion\_trigonometric methods**\. Provides trigonometric functions for quaternion types\. ## Table of contents * [**angle** function](#angle-function) * [**angleAxis** function](#angleaxis-function) * [**axis** function](#axis-function) ### angle\(\) function #### glm.**angle**(**x**: *quat*) -\> *float*   Returns the quaternion rotation angle\. ### angleAxis\(\) function #### glm.**angleAxis**(**angle**: *float*, **axis**: *vec3*) -\> *quat*   Build a quaternion from an angle and a normalized axis\. ### axis\(\) function #### glm.**axis**(**x**: *quat*) -\> *vec3*   Returns the ``` q ``` rotation axis\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/stable_extensions/quaternion_trigonometric.sb000066400000000000000000000017111511156275200325360ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\quaternion_trigonometric methods\h1\ The following methods are all part of the \b\quaternion_trigonometric methods\b\. Provides trigonometric functions for quaternion types. \h2\Table of contents\h2\ \ul\ \-\\url #angle-function\\b\angle\b\ function\url\ \-\\url #angleaxis-function\\b\angleAxis\b\ function\url\ \-\\url #axis-function\\b\axis\b\ function\url\ \ul\ \h3\angle() function\h3\ \raw\#### glm.**angle**(**x**: *quat*) -\\> *float*\raw\ \raw\  \raw\Returns the quaternion rotation angle. \h3\angleAxis() function\h3\ \raw\#### glm.**angleAxis**(**angle**: *float*, **axis**: *vec3*) -\\> *quat*\raw\ \raw\  \raw\Build a quaternion from an angle and a normalized axis. \h3\axis() function\h3\ \raw\#### glm.**axis**(**x**: *quat*) -\\> *vec3*\raw\ \raw\  \raw\Returns the \code\q\code\ rotation axis. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/unstable_extensions/000077500000000000000000000000001511156275200254215ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/unstable_extensions/README.md000066400000000000000000000031541511156275200267030ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # Table of Contents * [decompose methods](decompose.md) * [**decompose** function ](decompose.md#decompose-function) * [norm methods](norm.md) * [**distance2** function ](norm.md#distance2-function) * [**l1Norm** function ](norm.md#l1Norm-function) * [**l2Norm** function ](norm.md#l2Norm-function) * [**lMaxNorm** function ](norm.md#lMaxNorm-function) * [**length2** function ](norm.md#length2-function) * [**lxNorm** function ](norm.md#lxNorm-function) * [polar\_coordinates methods](polar_coordinates.md) * [**euclidean** function ](polar_coordinates.md#euclidean-function) * [**polar** function ](polar_coordinates.md#polar-function) * [matrix\_transform\_2d methods](matrix_transform_2d.md) * [**rotate** function ](matrix_transform_2d.md#rotate-function) * [**scale** function ](matrix_transform_2d.md#scale-function) * [**shearX** function ](matrix_transform_2d.md#shearX-function) * [**shearY** function ](matrix_transform_2d.md#shearY-function) * [**translate** function ](matrix_transform_2d.md#translate-function) * [rotate\_vector methods](rotate_vector.md) * [**orientation** function ](rotate_vector.md#orientation-function) * [**rotate** function ](rotate_vector.md#rotate-function) * [**rotateX** function ](rotate_vector.md#rotateX-function) * [**rotateY** function ](rotate_vector.md#rotateY-function) * [**rotateZ** function ](rotate_vector.md#rotateZ-function) * [**slerp** function ](rotate_vector.md#slerp-function) Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/unstable_extensions/README.sb000066400000000000000000000033711511156275200267100ustar00rootroot00000000000000\h1\Table of Contents\h1\ \ul\ \-\ \url decompose.md \decompose methods\ url\ \--\ \url decompose.md#decompose-function \\b\decompose\b\ function \ url\ \-\ \url norm.md \norm methods\ url\ \--\ \url norm.md#distance2-function \\b\distance2\b\ function \ url\ \--\ \url norm.md#l1Norm-function \\b\l1Norm\b\ function \ url\ \--\ \url norm.md#l2Norm-function \\b\l2Norm\b\ function \ url\ \--\ \url norm.md#lMaxNorm-function \\b\lMaxNorm\b\ function \ url\ \--\ \url norm.md#length2-function \\b\length2\b\ function \ url\ \--\ \url norm.md#lxNorm-function \\b\lxNorm\b\ function \ url\ \-\ \url polar_coordinates.md \polar_coordinates methods\ url\ \--\ \url polar_coordinates.md#euclidean-function \\b\euclidean\b\ function \ url\ \--\ \url polar_coordinates.md#polar-function \\b\polar\b\ function \ url\ \-\ \url matrix_transform_2d.md \matrix_transform_2d methods\ url\ \--\ \url matrix_transform_2d.md#rotate-function \\b\rotate\b\ function \ url\ \--\ \url matrix_transform_2d.md#scale-function \\b\scale\b\ function \ url\ \--\ \url matrix_transform_2d.md#shearX-function \\b\shearX\b\ function \ url\ \--\ \url matrix_transform_2d.md#shearY-function \\b\shearY\b\ function \ url\ \--\ \url matrix_transform_2d.md#translate-function \\b\translate\b\ function \ url\ \-\ \url rotate_vector.md \rotate_vector methods\ url\ \--\ \url rotate_vector.md#orientation-function \\b\orientation\b\ function \ url\ \--\ \url rotate_vector.md#rotate-function \\b\rotate\b\ function \ url\ \--\ \url rotate_vector.md#rotateX-function \\b\rotateX\b\ function \ url\ \--\ \url rotate_vector.md#rotateY-function \\b\rotateY\b\ function \ url\ \--\ \url rotate_vector.md#rotateZ-function \\b\rotateZ\b\ function \ url\ \--\ \url rotate_vector.md#slerp-function \\b\slerp\b\ function \ url\ \ul\ Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/unstable_extensions/decompose.md000066400000000000000000000012241511156275200277200ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # decompose methods The following methods are all part of the **decompose methods**\. Decomposes a model matrix to translations, rotation and scale components\. ## Table of contents * [**decompose** function](#decompose-function) ### decompose\(\) function #### glm.**decompose**(**modelMatrix**: *mat4*, **scale**: *vec3*, **orientation**: *quat*, **translation**: *vec3*, **skew**: *vec3*, **perspective**: *vec4*) -\> *bool*   Decomposes a model matrix to translations, rotation and scale components\.   Returns ``` True ``` on success\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/unstable_extensions/decompose.sb000066400000000000000000000012711511156275200277260ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\decompose methods\h1\ The following methods are all part of the \b\decompose methods\b\. Decomposes a model matrix to translations, rotation and scale components. \h2\Table of contents\h2\ \ul\ \-\\url #decompose-function\\b\decompose\b\ function\url\ \ul\ \h3\decompose() function\h3\ \raw\#### glm.**decompose**(**modelMatrix**: *mat4*, **scale**: *vec3*, **orientation**: *quat*, **translation**: *vec3*, **skew**: *vec3*, **perspective**: *vec4*) -\\> *bool*\raw\ \raw\  \raw\Decomposes a model matrix to translations, rotation and scale components. \raw\  \raw\Returns \code\True\code\ on success. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/unstable_extensions/matrix_transform_2d.md000066400000000000000000000105041511156275200317270ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # matrix\_transform\_2d methods The following methods are all part of the **matrix\_transform\_2d methods**\. Defines functions that generate common 2d transformation matrices\. ## Table of contents * [**rotate** function](#rotate-function) * [**scale** function](#scale-function) * [**shearX** function](#shearx-function) * [**shearY** function](#sheary-function) * [**translate** function](#translate-function) ### rotate\(\) function #### glm.**rotate**(**angle**: *number*, **axis**: *vec3*) -\> *mat4x4*   Builds a rotation 4 x 4 matrix created from an axis vector and an angle\. #### glm.**rotate**(**angle**: *number*) -\> *mat3x3*   Builds a rotation 3 x 3 matrix created from an angle\. #### glm.**rotate**(**m**: *mat4x4*, **angle**: *number*, **axis**: *vec3*) -\> *mat4x4*   Builds a rotation 4 x 4 matrix created from an axis vector and an angle\.   ``` m ``` is the input matrix multiplied by this translation matrix #### glm.**rotate**(**m**: *mat3x3*, **angle**: *number*) -\> *mat3x3*   Builds a rotation 3 x 3 matrix created from an angle\.   ``` m ``` is the input matrix multiplied by this translation matrix #### glm.**rotate**(**v**: *vec2*, **angle**: *float*) -\> *vec2*   Rotate a two dimensional vector\. #### glm.**rotate**(**v**: *vec3*, **angle**: *float*, **normal**: *vec3*) -\> *vec3*   Rotate a three dimensional vector around an axis\. #### glm.**rotate**(**v**: *vec4*, **angle**: *float*, **normal**: *vec3*) -\> *vec4*   Rotate a four dimensional vector around an axis\. #### glm.**rotate**(**q**: *quat*, **angle**: *float*, **axis**: *vec3*) -\> *quat*   Rotates a quaternion from a vector of 3 components axis and an angle\. ### scale\(\) function #### glm.**scale**(**v**: *vec3*) -\> *mat4x4*   Builds a scale 4 x 4 matrix created from 3 scalars\. #### glm.**scale**(**v**: *vec2*) -\> *mat3x3*   Builds a scale 3 x 3 matrix created from a vector of 2 components\. #### glm.**scale**(**m**: *mat4x4*, **v**: *vec3*) -\> *mat4x4*   Builds a scale 4 x 4 matrix created from 3 scalars\.   ``` m ``` is the input matrix multiplied by this translation matrix #### glm.**scale**(**m**: *mat3x3*, **v**: *vec2*) -\> *mat3x3*   Builds a scale 3 x 3 matrix created from a vector of 2 components\.   ``` m ``` is the input matrix multiplied by this translation matrix ### shearX\(\) function #### glm.**shearX**(**m**: *mat3x3*, **y**: *number*) -\> *mat3x3*   Builds an horizontal \(parallel to the x axis\) shear 3 x 3 matrix\.   ``` m ``` is the input matrix multiplied by this translation matrix ### shearY\(\) function #### glm.**shearY**(**m**: *mat3x3*, **x**: *number*) -\> *mat3x3*   Builds a vertical \(parallel to the y axis\) shear 3 x 3 matrix\.   ``` m ``` is the input matrix multiplied by this translation matrix ### translate\(\) function #### glm.**translate**(**v**: *vec3*) -\> *mat4x4*   Builds a translation 4 x 4 matrix created from a vector of 3 components\. #### glm.**translate**(**v**: *vec2*) -\> *mat3x3*   Builds a translation 3 x 3 matrix created from a vector of 2 components\. #### glm.**translate**(**m**: *mat4x4*, **v**: *vec3*) -\> *mat4x4*   Builds a translation 4 x 4 matrix created from a vector of 3 components\.   ``` m ``` is the input matrix multiplied by this translation matrix #### glm.**translate**(**m**: *mat3x3*, **v**: *vec2*) -\> *mat3x3*   Builds a translation 3 x 3 matrix created from a vector of 2 components\.   ``` m ``` is the input matrix multiplied by this translation matrix Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/unstable_extensions/matrix_transform_2d.sb000066400000000000000000000113041511156275200317320ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\matrix_transform_2d methods\h1\ The following methods are all part of the \b\matrix_transform_2d methods\b\. Defines functions that generate common 2d transformation matrices. \h2\Table of contents\h2\ \ul\ \-\\url #rotate-function\\b\rotate\b\ function\url\ \-\\url #scale-function\\b\scale\b\ function\url\ \-\\url #shearx-function\\b\shearX\b\ function\url\ \-\\url #sheary-function\\b\shearY\b\ function\url\ \-\\url #translate-function\\b\translate\b\ function\url\ \ul\ \h3\rotate() function\h3\ \raw\#### glm.**rotate**(**angle**: *number*, **axis**: *vec3*) -\\> *mat4x4*\raw\ \raw\  \raw\Builds a rotation 4 x 4 matrix created from an axis vector and an angle. \raw\#### glm.**rotate**(**angle**: *number*) -\\> *mat3x3*\raw\ \raw\  \raw\Builds a rotation 3 x 3 matrix created from an angle. \raw\#### glm.**rotate**(**m**: *mat4x4*, **angle**: *number*, **axis**: *vec3*) -\\> *mat4x4*\raw\ \raw\  \raw\Builds a rotation 4 x 4 matrix created from an axis vector and an angle. \raw\  \raw\\code\m\code\ is the input matrix multiplied by this translation matrix \raw\#### glm.**rotate**(**m**: *mat3x3*, **angle**: *number*) -\\> *mat3x3*\raw\ \raw\  \raw\Builds a rotation 3 x 3 matrix created from an angle. \raw\  \raw\\code\m\code\ is the input matrix multiplied by this translation matrix \raw\#### glm.**rotate**(**v**: *vec2*, **angle**: *float*) -\\> *vec2*\raw\ \raw\  \raw\Rotate a two dimensional vector. \raw\#### glm.**rotate**(**v**: *vec3*, **angle**: *float*, **normal**: *vec3*) -\\> *vec3*\raw\ \raw\  \raw\Rotate a three dimensional vector around an axis. \raw\#### glm.**rotate**(**v**: *vec4*, **angle**: *float*, **normal**: *vec3*) -\\> *vec4*\raw\ \raw\  \raw\Rotate a four dimensional vector around an axis. \raw\#### glm.**rotate**(**q**: *quat*, **angle**: *float*, **axis**: *vec3*) -\\> *quat*\raw\ \raw\  \raw\Rotates a quaternion from a vector of 3 components axis and an angle. \h3\scale() function\h3\ \raw\#### glm.**scale**(**v**: *vec3*) -\\> *mat4x4*\raw\ \raw\  \raw\Builds a scale 4 x 4 matrix created from 3 scalars. \raw\#### glm.**scale**(**v**: *vec2*) -\\> *mat3x3*\raw\ \raw\  \raw\Builds a scale 3 x 3 matrix created from a vector of 2 components. \raw\#### glm.**scale**(**m**: *mat4x4*, **v**: *vec3*) -\\> *mat4x4*\raw\ \raw\  \raw\Builds a scale 4 x 4 matrix created from 3 scalars. \raw\  \raw\\code\m\code\ is the input matrix multiplied by this translation matrix \raw\#### glm.**scale**(**m**: *mat3x3*, **v**: *vec2*) -\\> *mat3x3*\raw\ \raw\  \raw\Builds a scale 3 x 3 matrix created from a vector of 2 components. \raw\  \raw\\code\m\code\ is the input matrix multiplied by this translation matrix \h3\shearX() function\h3\ \raw\#### glm.**shearX**(**m**: *mat3x3*, **y**: *number*) -\\> *mat3x3*\raw\ \raw\  \raw\Builds an horizontal (parallel to the x axis) shear 3 x 3 matrix. \raw\  \raw\\code\m\code\ is the input matrix multiplied by this translation matrix \h3\shearY() function\h3\ \raw\#### glm.**shearY**(**m**: *mat3x3*, **x**: *number*) -\\> *mat3x3*\raw\ \raw\  \raw\Builds a vertical (parallel to the y axis) shear 3 x 3 matrix. \raw\  \raw\\code\m\code\ is the input matrix multiplied by this translation matrix \h3\translate() function\h3\ \raw\#### glm.**translate**(**v**: *vec3*) -\\> *mat4x4*\raw\ \raw\  \raw\Builds a translation 4 x 4 matrix created from a vector of 3 components. \raw\#### glm.**translate**(**v**: *vec2*) -\\> *mat3x3*\raw\ \raw\  \raw\Builds a translation 3 x 3 matrix created from a vector of 2 components. \raw\#### glm.**translate**(**m**: *mat4x4*, **v**: *vec3*) -\\> *mat4x4*\raw\ \raw\  \raw\Builds a translation 4 x 4 matrix created from a vector of 3 components. \raw\  \raw\\code\m\code\ is the input matrix multiplied by this translation matrix \raw\#### glm.**translate**(**m**: *mat3x3*, **v**: *vec2*) -\\> *mat3x3*\raw\ \raw\  \raw\Builds a translation 3 x 3 matrix created from a vector of 2 components. \raw\  \raw\\code\m\code\ is the input matrix multiplied by this translation matrix Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/unstable_extensions/norm.md000066400000000000000000000041761511156275200267260ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # norm methods The following methods are all part of the **norm methods**\. Various ways to compute vector norms\. ## Table of contents * [**distance2** function](#distance2-function) * [**l1Norm** function](#l1norm-function) * [**l2Norm** function](#l2norm-function) * [**lMaxNorm** function](#lmaxnorm-function) * [**length2** function](#length2-function) * [**lxNorm** function](#lxnorm-function) ### distance2\(\) function #### glm.**distance2**(**p0**: *vecN*, **p1**: *vecN*) -\> *float*   Returns the squared distance between ``` p0 ``` and ``` p1 ```, i\.e\., ``` length2(p0 - p1) ```\. ### l1Norm\(\) function #### glm.**l1Norm**(**v**: *vec3*) -\> *float*   Returns the L1 norm of ``` v ```\. #### glm.**l1Norm**(**x**: *vec3*, **y**: *vec3*) -\> *float*   Returns the L1 norm between ``` x ``` and ``` y ```\. ### l2Norm\(\) function #### glm.**l2Norm**(**v**: *vec3*) -\> *float*   Returns the L2 norm of ``` v ```\. #### glm.**l2Norm**(**x**: *vec3*, **y**: *vec3*) -\> *float*   Returns the L2 norm between ``` x ``` and ``` y ```\. ### lMaxNorm\(\) function #### glm.**lMaxNorm**(**v**: *vec3*) -\> *float*   Returns the LMax norm of ``` v ```\. #### glm.**lMaxNorm**(**x**: *vec3*, **y**: *vec3*) -\> *float*   Returns the LMax norm between ``` x ``` and ``` y ```\. ### length2\(\) function #### glm.**length2**(**v**: *vecN*) -\> *float*   Returns the squared length of ``` x ```\. ### lxNorm\(\) function #### glm.**lxNorm**(**v**: *vec3*, **Depth**: *int*) -\> *float*   Returns the L norm of ``` v ```\. #### glm.**lxNorm**(**x**: *vec3*, **y**: *vec3*, **Depth**: *int*) -\> *float*   Returns the L norm between ``` x ``` and ``` y ```\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/unstable_extensions/norm.sb000066400000000000000000000045741511156275200267340ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\norm methods\h1\ The following methods are all part of the \b\norm methods\b\. Various ways to compute vector norms. \h2\Table of contents\h2\ \ul\ \-\\url #distance2-function\\b\distance2\b\ function\url\ \-\\url #l1norm-function\\b\l1Norm\b\ function\url\ \-\\url #l2norm-function\\b\l2Norm\b\ function\url\ \-\\url #lmaxnorm-function\\b\lMaxNorm\b\ function\url\ \-\\url #length2-function\\b\length2\b\ function\url\ \-\\url #lxnorm-function\\b\lxNorm\b\ function\url\ \ul\ \h3\distance2() function\h3\ \raw\#### glm.**distance2**(**p0**: *vecN*, **p1**: *vecN*) -\\> *float*\raw\ \raw\  \raw\Returns the squared distance between \code\p0\code\ and \code\p1\code\, i.e., \code\length2(p0 - p1)\code\. \h3\l1Norm() function\h3\ \raw\#### glm.**l1Norm**(**v**: *vec3*) -\\> *float*\raw\ \raw\  \raw\Returns the L1 norm of \code\v\code\. \raw\#### glm.**l1Norm**(**x**: *vec3*, **y**: *vec3*) -\\> *float*\raw\ \raw\  \raw\Returns the L1 norm between \code\x\code\ and \code\y\code\. \h3\l2Norm() function\h3\ \raw\#### glm.**l2Norm**(**v**: *vec3*) -\\> *float*\raw\ \raw\  \raw\Returns the L2 norm of \code\v\code\. \raw\#### glm.**l2Norm**(**x**: *vec3*, **y**: *vec3*) -\\> *float*\raw\ \raw\  \raw\Returns the L2 norm between \code\x\code\ and \code\y\code\. \h3\lMaxNorm() function\h3\ \raw\#### glm.**lMaxNorm**(**v**: *vec3*) -\\> *float*\raw\ \raw\  \raw\Returns the LMax norm of \code\v\code\. \raw\#### glm.**lMaxNorm**(**x**: *vec3*, **y**: *vec3*) -\\> *float*\raw\ \raw\  \raw\Returns the LMax norm between \code\x\code\ and \code\y\code\. \h3\length2() function\h3\ \raw\#### glm.**length2**(**v**: *vecN*) -\\> *float*\raw\ \raw\  \raw\Returns the squared length of \code\x\code\. \h3\lxNorm() function\h3\ \raw\#### glm.**lxNorm**(**v**: *vec3*, **Depth**: *int*) -\\> *float*\raw\ \raw\  \raw\Returns the L norm of \code\v\code\. \raw\#### glm.**lxNorm**(**x**: *vec3*, **y**: *vec3*, **Depth**: *int*) -\\> *float*\raw\ \raw\  \raw\Returns the L norm between \code\x\code\ and \code\y\code\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/unstable_extensions/polar_coordinates.md000066400000000000000000000013301511156275200314470ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # polar\_coordinates methods The following methods are all part of the **polar\_coordinates methods**\. Conversion from Euclidean space to polar space and revert\. ## Table of contents * [**euclidean** function](#euclidean-function) * [**polar** function](#polar-function) ### euclidean\(\) function #### glm.**euclidean**(**polar**: *vec2*) -\> *vec3*   Convert Polar to Euclidean coordinates\. ### polar\(\) function #### glm.**polar**(**euclidean**: *vec3*) -\> *vec3*   Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/unstable_extensions/polar_coordinates.sb000066400000000000000000000014061511156275200314570ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\polar_coordinates methods\h1\ The following methods are all part of the \b\polar_coordinates methods\b\. Conversion from Euclidean space to polar space and revert. \h2\Table of contents\h2\ \ul\ \-\\url #euclidean-function\\b\euclidean\b\ function\url\ \-\\url #polar-function\\b\polar\b\ function\url\ \ul\ \h3\euclidean() function\h3\ \raw\#### glm.**euclidean**(**polar**: *vec2*) -\\> *vec3*\raw\ \raw\  \raw\Convert Polar to Euclidean coordinates. \h3\polar() function\h3\ \raw\#### glm.**polar**(**euclidean**: *vec3*) -\\> *vec3*\raw\ \raw\  \raw\Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/unstable_extensions/rotate_vector.md000066400000000000000000000074441511156275200306340ustar00rootroot00000000000000[//]: # (generated using SlashBack 0.2.0) # rotate\_vector methods The following methods are all part of the **rotate\_vector methods**\. Function to directly rotate a vector\. ## Table of contents * [**orientation** function](#orientation-function) * [**rotate** function](#rotate-function) * [**rotateX** function](#rotatex-function) * [**rotateY** function](#rotatey-function) * [**rotateZ** function](#rotatez-function) * [**slerp** function](#slerp-function) ### orientation\(\) function #### glm.**orientation**(**Normal**: *vec3*, **Up**: *vec3*) -\> *mat4*   Build a rotation matrix from a normal and a up vector\. ### rotate\(\) function #### glm.**rotate**(**angle**: *number*, **axis**: *vec3*) -\> *mat4x4*   Builds a rotation 4 x 4 matrix created from an axis vector and an angle\. #### glm.**rotate**(**angle**: *number*) -\> *mat3x3*   Builds a rotation 3 x 3 matrix created from an angle\. #### glm.**rotate**(**m**: *mat4x4*, **angle**: *number*, **axis**: *vec3*) -\> *mat4x4*   Builds a rotation 4 x 4 matrix created from an axis vector and an angle\.   ``` m ``` is the input matrix multiplied by this translation matrix #### glm.**rotate**(**m**: *mat3x3*, **angle**: *number*) -\> *mat3x3*   Builds a rotation 3 x 3 matrix created from an angle\.   ``` m ``` is the input matrix multiplied by this translation matrix #### glm.**rotate**(**v**: *vec2*, **angle**: *float*) -\> *vec2*   Rotate a two dimensional vector\. #### glm.**rotate**(**v**: *vec3*, **angle**: *float*, **normal**: *vec3*) -\> *vec3*   Rotate a three dimensional vector around an axis\. #### glm.**rotate**(**v**: *vec4*, **angle**: *float*, **normal**: *vec3*) -\> *vec4*   Rotate a four dimensional vector around an axis\. #### glm.**rotate**(**q**: *quat*, **angle**: *float*, **axis**: *vec3*) -\> *quat*   Rotates a quaternion from a vector of 3 components axis and an angle\. ### rotateX\(\) function #### glm.**rotateX**(**v**: *vec3*, **angle**: *float*) -\> *vec3*   Rotate a three dimensional vector around the X axis\. #### glm.**rotateX**(**v**: *vec4*, **angle**: *float*) -\> *vec3*   Rotate a four dimensional vector around the X axis\. ### rotateY\(\) function #### glm.**rotateY**(**v**: *vec3*, **angle**: *float*) -\> *vec3*   Rotate a three dimensional vector around the Y axis\. #### glm.**rotateY**(**v**: *vec4*, **angle**: *float*) -\> *vec3*   Rotate a four dimensional vector around the Y axis\. ### rotateZ\(\) function #### glm.**rotateZ**(**v**: *vec3*, **angle**: *float*) -\> *vec3*   Rotate a three dimensional vector around the Z axis\. #### glm.**rotateZ**(**v**: *vec4*, **angle**: *float*) -\> *vec3*   Rotate a four dimensional vector around the Z axis\. ### slerp\(\) function #### glm.**slerp**(**x**: *quat*, **y**: *quat*, **a**: *float*) -\> *quat*   Spherical linear interpolation of two quaternions\. The interpolation always take the short   path and the rotation is performed at constant speed\. #### glm.**slerp**(**x**: *vec3*, **y**: *vec3*, **a**: *float*) -\> *vec3*   Returns Spherical interpolation between two vectors\. Zuzu-Typ-PyGLM-e113a8a/wiki/function-reference/unstable_extensions/rotate_vector.sb000066400000000000000000000101431511156275200306260ustar00rootroot00000000000000\c\This file was generated using a tool\c\ \h1\rotate_vector methods\h1\ The following methods are all part of the \b\rotate_vector methods\b\. Function to directly rotate a vector. \h2\Table of contents\h2\ \ul\ \-\\url #orientation-function\\b\orientation\b\ function\url\ \-\\url #rotate-function\\b\rotate\b\ function\url\ \-\\url #rotatex-function\\b\rotateX\b\ function\url\ \-\\url #rotatey-function\\b\rotateY\b\ function\url\ \-\\url #rotatez-function\\b\rotateZ\b\ function\url\ \-\\url #slerp-function\\b\slerp\b\ function\url\ \ul\ \h3\orientation() function\h3\ \raw\#### glm.**orientation**(**Normal**: *vec3*, **Up**: *vec3*) -\\> *mat4*\raw\ \raw\  \raw\Build a rotation matrix from a normal and a up vector. \h3\rotate() function\h3\ \raw\#### glm.**rotate**(**angle**: *number*, **axis**: *vec3*) -\\> *mat4x4*\raw\ \raw\  \raw\Builds a rotation 4 x 4 matrix created from an axis vector and an angle. \raw\#### glm.**rotate**(**angle**: *number*) -\\> *mat3x3*\raw\ \raw\  \raw\Builds a rotation 3 x 3 matrix created from an angle. \raw\#### glm.**rotate**(**m**: *mat4x4*, **angle**: *number*, **axis**: *vec3*) -\\> *mat4x4*\raw\ \raw\  \raw\Builds a rotation 4 x 4 matrix created from an axis vector and an angle. \raw\  \raw\\code\m\code\ is the input matrix multiplied by this translation matrix \raw\#### glm.**rotate**(**m**: *mat3x3*, **angle**: *number*) -\\> *mat3x3*\raw\ \raw\  \raw\Builds a rotation 3 x 3 matrix created from an angle. \raw\  \raw\\code\m\code\ is the input matrix multiplied by this translation matrix \raw\#### glm.**rotate**(**v**: *vec2*, **angle**: *float*) -\\> *vec2*\raw\ \raw\  \raw\Rotate a two dimensional vector. \raw\#### glm.**rotate**(**v**: *vec3*, **angle**: *float*, **normal**: *vec3*) -\\> *vec3*\raw\ \raw\  \raw\Rotate a three dimensional vector around an axis. \raw\#### glm.**rotate**(**v**: *vec4*, **angle**: *float*, **normal**: *vec3*) -\\> *vec4*\raw\ \raw\  \raw\Rotate a four dimensional vector around an axis. \raw\#### glm.**rotate**(**q**: *quat*, **angle**: *float*, **axis**: *vec3*) -\\> *quat*\raw\ \raw\  \raw\Rotates a quaternion from a vector of 3 components axis and an angle. \h3\rotateX() function\h3\ \raw\#### glm.**rotateX**(**v**: *vec3*, **angle**: *float*) -\\> *vec3*\raw\ \raw\  \raw\Rotate a three dimensional vector around the X axis. \raw\#### glm.**rotateX**(**v**: *vec4*, **angle**: *float*) -\\> *vec3*\raw\ \raw\  \raw\Rotate a four dimensional vector around the X axis. \h3\rotateY() function\h3\ \raw\#### glm.**rotateY**(**v**: *vec3*, **angle**: *float*) -\\> *vec3*\raw\ \raw\  \raw\Rotate a three dimensional vector around the Y axis. \raw\#### glm.**rotateY**(**v**: *vec4*, **angle**: *float*) -\\> *vec3*\raw\ \raw\  \raw\Rotate a four dimensional vector around the Y axis. \h3\rotateZ() function\h3\ \raw\#### glm.**rotateZ**(**v**: *vec3*, **angle**: *float*) -\\> *vec3*\raw\ \raw\  \raw\Rotate a three dimensional vector around the Z axis. \raw\#### glm.**rotateZ**(**v**: *vec4*, **angle**: *float*) -\\> *vec3*\raw\ \raw\  \raw\Rotate a four dimensional vector around the Z axis. \h3\slerp() function\h3\ \raw\#### glm.**slerp**(**x**: *quat*, **y**: *quat*, **a**: *float*) -\\> *quat*\raw\ \raw\  \raw\Spherical linear interpolation of two quaternions. The interpolation always take the short \raw\  \raw\path and the rotation is performed at constant speed. \raw\#### glm.**slerp**(**x**: *vec3*, **y**: *vec3*, **a**: *float*) -\\> *vec3*\raw\ \raw\  \raw\Returns Spherical interpolation between two vectors. Zuzu-Typ-PyGLM-e113a8a/wiki/generated/000077500000000000000000000000001511156275200175025ustar00rootroot00000000000000Zuzu-Typ-PyGLM-e113a8a/wiki/generated/generate.py000066400000000000000000000016501511156275200216500ustar00rootroot00000000000000import re import os URL_PATTERN = re.compile("\\[[^\\]]+\\]\\(([^\\)]+)\\)") for filename in os.listdir("../"): if filename.endswith(".md"): file_ = open(os.path.join("../", filename), "r") content = file_.read() file_.close() index = 0 while True: match = URL_PATTERN.search(content, index) if not match: break if match.group(1).lower() == "function-reference/README.md".lower(): content = content[:match.start(1)] + "https://github.com/Zuzu-Typ/PyGLM/blob/master/wiki/function-reference/README.md" + content[match.end(1):] else: content = content[:match.start(1)] + match.group(1).replace(".md", "") + content[match.end(1):] index = match.end() file_ = open(filename, "w") file_.write(content) file_.close()