Showing preview only (5,233K chars total). Download the full file or copy to clipboard to get everything.
Repository: drufat/triangle
Branch: master
Commit: 595b43eb6682
Files: 130
Total size: 5.0 MB
Directory structure:
gitextract_oz5fl3es/
├── .github/
│ └── workflows/
│ └── wheels.yml
├── .gitignore
├── .gitmodules
├── LICENSE
├── README.rst
├── doc/
│ ├── API.rst
│ ├── Makefile
│ ├── conf.py
│ ├── convex.rst
│ ├── data.rst
│ ├── definitions.rst
│ ├── delaunay.rst
│ ├── examples.rst
│ ├── index.rst
│ ├── installing.rst
│ ├── plot/
│ │ ├── PSLG.py
│ │ ├── api_convex_hull.py
│ │ ├── api_delaunay.py
│ │ ├── api_triangulate.py
│ │ ├── api_voronoi.py
│ │ ├── bndries.py
│ │ ├── conforming_delaunay.py
│ │ ├── conforming_delaunay1.py
│ │ ├── constrained_conforming_delaunay.py
│ │ ├── constrained_conforming_delaunay1.py
│ │ ├── constrained_delaunay.py
│ │ ├── constrained_delaunay1.py
│ │ ├── convex_hull.py
│ │ ├── delaunay.py
│ │ ├── delaunay1.py
│ │ ├── ex1.py
│ │ ├── ex2.py
│ │ ├── ex3.py
│ │ ├── ex4.py
│ │ ├── ex5.py
│ │ ├── ex6.py
│ │ ├── ex7.py
│ │ ├── face.py
│ │ ├── holes_cavities.py
│ │ ├── quality.py
│ │ ├── quality1.py
│ │ ├── quality2.py
│ │ ├── refine.py
│ │ ├── refine1.py
│ │ ├── refine2.py
│ │ ├── voronoi.py
│ │ ├── voronoi1.py
│ │ └── voronoi3.py
│ ├── quality.rst
│ ├── refine.rst
│ └── voronoi.rst
├── pyproject.toml
├── setup.py
├── tests/
│ └── test_triangle.py
└── triangle/
├── __init__.py
├── core.c
├── core.pyx
├── data/
│ ├── A.1.ele
│ ├── A.1.node
│ ├── A.1.poly
│ ├── A.poly
│ ├── bbox.1.area
│ ├── bbox.1.ele
│ ├── bbox.1.node
│ ├── box.1.ele
│ ├── box.1.node
│ ├── box.1.poly
│ ├── box.2.ele
│ ├── box.2.node
│ ├── box.2.poly
│ ├── box.3.ele
│ ├── box.3.node
│ ├── box.3.poly
│ ├── box.4.ele
│ ├── box.4.node
│ ├── box.4.poly
│ ├── box.poly
│ ├── diamond_02_00009.1.ele
│ ├── diamond_02_00009.1.node
│ ├── diamond_02_00009.1.v.edge
│ ├── diamond_02_00009.1.v.node
│ ├── diamond_02_00009.node
│ ├── dots.1.v.edge
│ ├── dots.1.v.node
│ ├── dots.node
│ ├── double_hex.1.ele
│ ├── double_hex.1.node
│ ├── double_hex.1.poly
│ ├── double_hex.2.ele
│ ├── double_hex.2.node
│ ├── double_hex.2.poly
│ ├── double_hex.poly
│ ├── double_hex2.1.ele
│ ├── double_hex2.1.node
│ ├── double_hex2.1.poly
│ ├── double_hex2.2.ele
│ ├── double_hex2.2.node
│ ├── double_hex2.2.poly
│ ├── double_hex2.poly
│ ├── double_hex3.1.ele
│ ├── double_hex3.1.node
│ ├── double_hex3.1.poly
│ ├── double_hex3.node
│ ├── double_hex3.poly
│ ├── ell.ele
│ ├── ell.node
│ ├── face.1.ele
│ ├── face.1.node
│ ├── face.1.poly
│ ├── face.poly
│ ├── greenland.ele
│ ├── greenland.node
│ ├── la.1.ele
│ ├── la.1.node
│ ├── la.1.poly
│ ├── la.poly
│ ├── spiral.1.ele
│ ├── spiral.1.node
│ ├── spiral.node
│ ├── spiral.q.1.ele
│ ├── spiral.q.1.node
│ ├── spiral.r.1.ele
│ ├── spiral.r.1.node
│ ├── square_circle_hole.1.ele
│ ├── square_circle_hole.1.node
│ └── square_circle_hole.poly
├── data.py
├── plot.py
├── tri.py
└── version.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/workflows/wheels.yml
================================================
name: Build Wheels
on: [push, pull_request]
jobs:
build_wheels:
name: Build wheel on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
steps:
- uses: actions/checkout@v3
with:
submodules: 'recursive'
- uses: actions/setup-python@v3
- name: Install cibuildwheel
run: |
python -m pip install cibuildwheel
- name: Build wheel
run: |
python -m cibuildwheel --output-dir dist
- uses: actions/upload-artifact@v3
with:
name: wheels
path: dist/
- name: Upload To PyPI
if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags')
run: |
python -m pip install twine
python -m twine check --strict dist/*
python -m twine upload dist/*
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.pypi_github_triangle }}
================================================
FILE: .gitignore
================================================
*.pyc
*.so
.eggs/
build/
dist/
triangle.egg-info/
.plot
================================================
FILE: .gitmodules
================================================
[submodule "c"]
path = c
url = https://github.com/drufat/triangle-c
================================================
FILE: LICENSE
================================================
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.
================================================
FILE: README.rst
================================================
Triangle
--------
|Build Status| |Version Status| |Downloads|
.. |Build Status| image:: https://github.com/drufat/triangle/actions/workflows/wheels.yml/badge.svg?branch=master
:target: https://github.com/drufat/triangle/actions/workflows/wheels.yml
.. |Version Status| image:: https://img.shields.io/pypi/v/triangle.svg
:target: https://pypi.python.org/pypi/triangle/
.. |Downloads| image:: https://img.shields.io/pypi/dm/triangle.svg
:target: https://pypi.python.org/pypi/triangle/
*Triangle* is a python wrapper around Jonathan Richard Shewchuk's two-dimensional quality mesh generator and delaunay triangulator library, available `here <quake_>`_. This implementation utilizes Cython_ to wrap the C API as closely as possible. The source is available on Github_, and the documentation can be accessed at `rufat.be/triangle <https://rufat.be/triangle>`_.
.. _quake: https://www.cs.cmu.edu/~quake/triangle.html
.. _Cython: https://cython.org
.. _Github: https://github.com/drufat/triangle
================================================
FILE: doc/API.rst
================================================
API
===
.. autofunction:: triangle.triangulate
.. autofunction:: triangle.convex_hull
.. autofunction:: triangle.delaunay
.. autofunction:: triangle.voronoi
.. autofunction:: triangle.get_data
.. autofunction:: triangle.loads
.. autofunction:: triangle.load
================================================
FILE: doc/Makefile
================================================
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = .
BUILDDIR = build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
================================================
FILE: doc/conf.py
================================================
# Configuration file for the Sphinx documentation builder.
#
# This file only contains a selection of the most common options. For a full
# list see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html
# -- Path setup --------------------------------------------------------------
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
# import os
# import sys
# sys.path.insert(0, os.path.abspath('.'))
# -- Project information -----------------------------------------------------
project = 'Triangle'
copyright = '2020, Dzhelil Rufat'
author = 'Dzhelil Rufat'
# The full version, including alpha/beta/rc tags
release = '20200325'
# -- General configuration ---------------------------------------------------
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'matplotlib.sphinxext.plot_directive',
'IPython.sphinxext.ipython_directive',
'IPython.sphinxext.ipython_console_highlighting',
'sphinx.ext.mathjax',
'sphinx.ext.autodoc',
'sphinx.ext.doctest',
'sphinx.ext.inheritance_diagram',
'numpydoc']
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = []
# -- Options for HTML output -------------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
html_theme = 'alabaster'
html_theme_options = {
'show_relbars' : True, # add previous page / next page links
}
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
# html_static_path = ['_static']
================================================
FILE: doc/convex.rst
================================================
Convex Hulls and Mesh Boundaries
================================
If the input is a vertex set (rather than a PSLG), Triangle produces its convex
hull as a by-product in the output's segments if you use the -c switch. There
are faster algorithms for finding a two-dimensional convex hull than triangulation,
of course, but this one comes for free. In the example below, the data `dots` is
read, and its convex hull produced in `dots.1`.
.. plot:: plot/convex_hull.py
If the input is an unconstrained mesh (you are using the -r switch but not the
-p switch), Triangle produces a list of its boundary edges (including hole
boundaries) as a by-product when you use the -c switch. If you also use the -p
switch, the output will contain all the segments from the input as well. For
example, consider the mesh described by `face.1`.
.. plot:: plot/face.py
::
triangulate(get_data('face.1'), 'rc')
triangulate(get_data('face.1'), 'rpc')
In each case, the boundary segments can be found in face.2.poly.
.. plot:: plot/bndries.py
================================================
FILE: doc/data.rst
================================================
Data
=====
A
---
**A** is a planar straight line graph of the capital letter A. We use it as
input to get a constrained Delaunay triangulation.
.. plot::
import triangle as tr
tr.show_data('A')
BOX
---
**BOX** is a planar straight line graph of a double box. We use it as input to
get a constrained Delaunay triangulation.
.. plot::
import triangle as tr
tr.show_data('box')
The command::
triangulate(box, opts='pc')
creates the first mesh. (We need the pc because we didn't surround our initial
area with segments.)
.. plot::
import triangle as tr
tr.show_data('box.1')
The command::
box1 = get_data('box.1')
triangulate(box1, opts='rpa0.2')
refines the box.1 mesh with an area constraint of 0.2:
.. plot::
import triangle as tr
tr.show_data('box.2')
The command::
box2 = get_data('box.2')
triangulate(box2, opts='rpa0.05')
refines the box.2 mesh with an area constraint of 0.05, 1/4 of the previous
maximum area:
.. plot::
import triangle as tr
tr.show_data('box.3')
The command "triangulate(box3, opts='rpa0.0125')" refines the box.3 mesh with an
area constraint of 0.0125, 1/4 of the previous maximum area:
.. plot::
import triangle as tr
tr.show_data('box.4')
DIAMOND_02_00009
-----------------
**DIAMOND_02_00009** is another set of test data, for which we want the Voronoi
diagram.
.. plot::
import triangle as tr
tr.show_data('diamond_02_00009')
.. plot::
import triangle as tr
tr.show_data('diamond_02_00009.1')
.. plot:: plot/voronoi1.py
DOUBLE_HEX
-----------
**DOUBLE_HEX** describes a unit square with two hexagonal holes. 72 points are
listed on the outer boundary, and 12 on each of the holes. It is desired to
create a nice looking mesh of about 500 nodes, and no additional nodes on the
boundary segments.
.. plot::
import triangle as tr
tr.show_data('double_hex')
Our first command::
triangle -p double_hex.poly
requests that we triangulate the current points:
.. plot::
import triangle as tr
tr.show_data('double_hex.1')
Our second command::
triangle -pqY -a0.0015 double_hex.1.poly
requests that we triangulate the current points, adding new nodes as necessary
to make a nice mesh, with no triangle being larger than 0.0015 in area, and
with no points added on boundary segments. We end up with 525 nodes and 956
elements:
.. plot::
import triangle as tr
tr.show_data('double_hex.2')
DOUBLE_HEX2
-------------
**DOUBLE_HEX2** describes a unit square with two hexagonal holes. 36 points are
listed on the outer boundary, and 6 on each of the holes. It is desired to
create a nice looking mesh of about 235 elements, and no additional nodes on
the boundary segments.
.. plot::
import triangle as tr
tr.show_data('double_hex2')
Our first command::
triangle -p double_hex2.poly
requests that we triangulate the current points:
.. plot::
import triangle as tr
tr.show_data('double_hex2.1')
Our second command::
triangle -pqY -a0.0060 double_hex2.1.poly
requests that we triangulate the current points, adding new nodes as necessary
to make a nice mesh, with no triangle being larger than 0.0060 in area, and
with no points added on boundary segments. We end up with 141 nodes and 236
elements:
.. plot::
import triangle as tr
tr.show_data('double_hex2.2')
**DOUBLE_HEX3** describes a unit square with two hexagonal holes. 4 points are
listed on the outer boundary, and 6 on each of the holes. We want triangle to
triangulate this region.
.. plot::
import triangle as tr
tr.show_data('double_hex3')
Our command::
triangle -pq -a0.0015 double_hex3.poly
requests that we triangulate the region, adding points as necessary so that no
triangle has an area greater than 0.0015.
.. plot::
import triangle as tr
tr.show_data('double_hex3.1')
ELL
-----
**ELL** is a triangulation of an L-shaped region, using a mesh of 21 nodes and
24 elements.
.. plot::
import triangle as tr
tr.show_data('ell')
GREENLAND
----------
**GREENLAND** is a triangulation of Greenland, using a graded (varying-size)
mesh of 33,343 nodes and 64,125 elements. The resulting image is essentially a
black blob the shape of Greenland. However, by modifying the code below, it is
possible to see interesting details of the mesh.
.. plot::
import triangle as tr
tr.show_data('greenland')
LA
----
**LA** is a POLY file containing information representing soil layers. The data
includes points that are bounded by line segments defining the different
layers. The intent is that certain layers will be triangulated with smaller
area requirements.
.. plot::
import matplotlib.pyplot as plt
import triangle as tr
plt.figure(figsize=(8, 3))
tr.show_data('la')
SPIRAL
--------
**SPIRAL** is a node file containing points that form a spiral.
.. plot::
import triangle as tr
tr.show_data('spiral')
The command "triangle spiral" produces a Delaunay triangulation of the points,
in the following node and element files:
.. plot::
import triangle as tr
tr.show_data('spiral.1')
The command "triangle -q spiral" produces a Delaunay triangulation with no angle
smaller than 20 degrees (the default). This is done by adding points as
necessary: in the following node and element files:
.. plot::
import triangle as tr
tr.show_data('spiral.q.1')
The command "triangle -q32.5 spiral" produces a Delaunay triangulation with no
angle smaller than 32.5 degrees. This is done by adding points as necessary: in
the following node and element files:
.. plot::
import triangle as tr
tr.show_data('spiral.r.1')
SQUARE_CIRCLE_HOLE
-------------------
**SQUARE_CIRCLE_HOLE** is a planar straight line graph of a square region with
an off center circular hole, and 826 points computed by a CVT calculation,
prepared by Hua Fei.
.. plot::
import triangle as tr
tr.show_data('square_circle_hole')
.. plot::
import triangle as tr
tr.show_data('square_circle_hole.1')
================================================
FILE: doc/definitions.rst
================================================
Definitions (of several geometric terms)
========================================
Delaunay Triangulation
-----------------------
A *Delaunay triangulation* of a vertex set is a triangulation of the vertex set
with the property that no vertex in the vertex set falls in the interior of the
circumcircle (circle that passes through all three vertices) of any triangle in
the triangulation.
.. plot:: plot/delaunay.py
Voronoi Diagram
-----------------------
A *Voronoi diagram* of a vertex set is a subdivision of the plane into polygonal
regions (some of which may be infinite), where each region is the set of points
in the plane that are closer to some input vertex than to any other input
vertex. (The Voronoi diagram is the geometric dual of the Delaunay
triangulation.)
.. plot:: plot/voronoi.py
Planar Straight Line Graph
-----------------------------
A *Planar Straight Line Graph* (PSLG) is a collection of vertices and segments.
Segments are edges whose endpoints are vertices in the PSLG, and whose presence
in any mesh generated from the PSLG is enforced.
.. plot:: plot/PSLG.py
Constrained Delaunay Triangulation
------------------------------------
A *constrained Delaunay triangulation* of a PSLG is similar to a Delaunay
triangulation, but each PSLG segment is present as a single edge in the
triangulation. A constrained Delaunay triangulation is not truly a Delaunay
triangulation. Some of its triangles might not be Delaunay, but they are all
constrained Delaunay.
.. plot:: plot/constrained_delaunay.py
Conforming Delaunay Triangulation
----------------------------------
A *conforming Delaunay triangulation* (CDT) of a PSLG is a true Delaunay
triangulation in which each PSLG segment may have been subdivided into several
edges by the insertion of additional vertices, called Steiner points. Steiner
points are necessary to allow the segments to exist in the mesh while
maintaining the Delaunay property. Steiner points are also inserted to meet
constraints on the minimum angle and maximum triangle area.
.. plot:: plot/conforming_delaunay.py
Constrained Conforming Delaunay Triangulation
---------------------------------------------
A *constrained conforming Delaunay triangulation* (CCDT) of a PSLG is a
constrained Delaunay triangulation that includes Steiner points. It usually
takes fewer vertices to make a good-quality CCDT than a good-quality CDT,
because the triangles do not need to be Delaunay (although they still must be
constrained Delaunay).
.. plot:: plot/constrained_conforming_delaunay.py
================================================
FILE: doc/delaunay.rst
================================================
Generating Delaunay Triangulations
==================================
Triangle's default behavior is to find the Delaunay triangulation of a set of
vertices. The command below produces the Delaunay triangulation, also
illustrated below.
.. plot:: plot/delaunay1.py
:include-source:
To triangulate a PSLG instead, describe the geometry of the region you wish to
mesh in a python dictionary, such as `get_data('face')`, illustrated below. Use
the `-p` switch to specify that the input is a PSLG rather than a vertex set. The
command::
trianglulate(get_data('face'), 'p')
will produce the constrained Delaunay triangulation, with holes and concavities
removed. (The mouth and eye holes are specified in the input file; the
concavities are removed automatically.)
.. plot:: plot/holes_cavities.py
:include-source:
The automatic removal of concavities from the triangulation will be detrimental
if you have not taken care to surround the area to be triangulated with
segments. In the next example, the input file box.poly defines an open region,
so the `-c` switch must be used to prevent the automatic removal of concavities
(which would eliminate the whole triangulation). ::
trianglulate(get_data('box'), 'pc')
produces the constrained Delaunay triangulation illustrated below. The -c switch
causes Triangle to triangulate the convex hull of the PSLG.
.. plot:: plot/constrained_delaunay1.py
:include-source:
A conforming constrained Delaunay triangulation of a PSLG can be generated by
use of the `-q`, `-a`, or `-u` switch, in addition to the -p switch. If you don't
wish to enforce any angle or area constraints, use `-q0`, which requests
quality meshing with a minimum angle of zero. The result is demonstrated
below.::
trianglulate(get_data('face'), 'pq10')
.. plot:: plot/constrained_conforming_delaunay1.py
:include-source:
A conforming Delaunay triangulation of a PSLG can be generated as above, with
the addition of the `-D` switch to ensure that all the triangles of the final
mesh are Delaunay (and not just constrained Delaunay).::
trianglulate(get_data('face'), 'pq0D')
.. plot:: plot/conforming_delaunay1.py
:include-source:
================================================
FILE: doc/examples.rst
================================================
Examples
========
Let us triangulate a simple square
.. plot:: plot/ex1.py
:include-source:
In order to set maximum area of the triangles, we set the *maxarea* keyword
.. plot:: plot/ex2.py
:include-source:
If we want to decrease the area even further
.. plot:: plot/ex3.py
:include-source:
To do the same with a circle
.. plot:: plot/ex4.py
:include-source:
.. plot:: plot/ex5.py
:include-source:
To add a hole in the middle of the circle
.. plot:: plot/ex6.py
:include-source:
To triangulate with region attributes
.. plot:: plot/ex7.py
:include-source:
================================================
FILE: doc/index.rst
================================================
.. include:: ../README.rst
.. toctree::
:maxdepth: 1
installing
API
data
examples
definitions
delaunay
quality
refine
convex
voronoi
..
..
..
.. * :ref:`genindex`
.. * :ref:`modindex`
.. * :ref:`search`
..
..
================================================
FILE: doc/installing.rst
================================================
Installation
============
To install simply run::
pip install triangle
or build from source::
git clone https://github.com/drufat/triangle.git
cd triangle
pip install .
================================================
FILE: doc/plot/PSLG.py
================================================
import matplotlib.pyplot as plt
import triangle as tr
A = tr.get_data('A')
ax = plt.axes()
tr.plot(ax, **A)
plt.show()
================================================
FILE: doc/plot/api_convex_hull.py
================================================
import matplotlib.pyplot as plt
import numpy as np
import triangle as tr
pts = np.array([[0, 0], [0, 1], [1, 1], [1, 0]])
segments = tr.convex_hull(pts)
A = dict(vertices=pts)
B = dict(vertices=pts, segments=segments)
tr.compare(plt, A, B)
plt.show()
================================================
FILE: doc/plot/api_delaunay.py
================================================
import matplotlib.pyplot as plt
import numpy as np
import triangle as tr
pts = np.array([[0, 0], [0, 1], [.5, .5], [1, 1], [1, 0]])
tri = tr.delaunay(pts)
A = dict(vertices=pts)
B = dict(vertices=pts, triangles=tri)
tr.compare(plt, A, B)
plt.show()
================================================
FILE: doc/plot/api_triangulate.py
================================================
import matplotlib.pyplot as plt
import numpy as np
import triangle as tr
A = {'vertices': np.array([[0, 0], [0, 1], [1, 1], [1, 0]])}
B = tr.triangulate(A, 'a0.2')
tr.compare(plt, A, B)
plt.show()
================================================
FILE: doc/plot/api_voronoi.py
================================================
import matplotlib.pyplot as plt
import numpy as np
import triangle as tr
pts = np.array([[0, 0], [0, 1], [0.5, 0.5], [1, 1], [1, 0]])
vertices, edges, ray_origins, ray_directions = tr.voronoi(pts)
A = dict(vertices=pts)
B = dict(
vertices=vertices,
edges=edges,
ray_origins=ray_origins,
ray_directions=ray_directions,
)
tr.compare(plt, A, B)
plt.show()
================================================
FILE: doc/plot/bndries.py
================================================
import matplotlib.pyplot as plt
import triangle as tr
def bndry(dict):
return {k: dict[k] for k in ('vertices', 'segments')}
face = tr.get_data('face.1')
A = tr.triangulate(face, 'rc')
B = tr.triangulate(face, 'rpc')
tr.compare(plt, bndry(A), bndry(B))
plt.show()
================================================
FILE: doc/plot/conforming_delaunay.py
================================================
import matplotlib.pyplot as plt
import triangle as tr
A = tr.get_data('A')
t = tr.triangulate(A, 'pq0D')
tr.plot(plt.axes(), **t)
plt.show()
================================================
FILE: doc/plot/conforming_delaunay1.py
================================================
import matplotlib.pyplot as plt
import triangle as tr
face = tr.get_data('face')
t = tr.triangulate(face, 'pq0D')
tr.plot(plt.axes(), **t)
plt.show()
================================================
FILE: doc/plot/constrained_conforming_delaunay.py
================================================
import matplotlib.pyplot as plt
import triangle as tr
A = tr.get_data('A')
t = tr.triangulate(A, 'pq30')
tr.plot(plt.axes(), **t)
plt.show()
================================================
FILE: doc/plot/constrained_conforming_delaunay1.py
================================================
import matplotlib.pyplot as plt
import triangle as tr
face = tr.get_data('face')
t = tr.triangulate(face, 'pq10')
tr.compare(plt, face, t)
plt.show()
================================================
FILE: doc/plot/constrained_delaunay.py
================================================
import matplotlib.pyplot as plt
import triangle as tr
ax = plt.axes()
A = tr.get_data('A')
t = tr.triangulate(A, 'p')
tr.plot(ax, **t)
plt.show()
================================================
FILE: doc/plot/constrained_delaunay1.py
================================================
import matplotlib.pyplot as plt
import triangle as tr
box = tr.get_data('box')
t = tr.triangulate(box, 'pc')
tr.compare(plt, box, t)
plt.show()
================================================
FILE: doc/plot/convex_hull.py
================================================
import matplotlib.pyplot as plt
import triangle as tr
dots = tr.get_data('dots')
pts = dots['vertices']
segs = tr.convex_hull(pts)
tr.plot(plt.axes(), vertices=pts, segments=segs)
plt.show()
================================================
FILE: doc/plot/delaunay.py
================================================
import matplotlib.pyplot as plt
import triangle as tr
d0 = tr.get_data('dots')
d1 = tr.triangulate(d0)
tr.compare(plt, d0, d1)
plt.show()
================================================
FILE: doc/plot/delaunay1.py
================================================
import matplotlib.pyplot as plt
import triangle as tr
spiral = tr.get_data('spiral')
t = tr.triangulate(spiral)
tr.compare(plt, spiral, t)
plt.show()
================================================
FILE: doc/plot/ex1.py
================================================
import matplotlib.pyplot as plt
import numpy as np
import triangle as tr
A = dict(vertices=np.array(((0, 0), (1, 0), (1, 1), (0, 1))))
B = tr.triangulate(A)
tr.compare(plt, A, B)
plt.show()
================================================
FILE: doc/plot/ex2.py
================================================
import matplotlib.pyplot as plt
import numpy as np
import triangle as tr
A = dict(vertices=np.array(((0, 0), (1, 0), (1, 1), (0, 1))))
B = tr.triangulate(A, 'qa0.1')
tr.compare(plt, A, B)
plt.show()
================================================
FILE: doc/plot/ex3.py
================================================
import matplotlib.pyplot as plt
import numpy as np
import triangle as tr
A = dict(vertices=np.array(((0, 0), (1, 0), (1, 1), (0, 1))))
B = tr.triangulate(A, 'qa0.01')
tr.compare(plt, A, B)
plt.show()
================================================
FILE: doc/plot/ex4.py
================================================
import matplotlib.pyplot as plt
import numpy as np
import triangle as tr
N = 32
theta = np.linspace(0, 2 * np.pi, N, endpoint=False)
pts = np.stack([np.cos(theta), np.sin(theta)], axis=1)
A = dict(vertices=pts)
B = tr.triangulate(A, 'q')
tr.compare(plt, A, B)
plt.show()
================================================
FILE: doc/plot/ex5.py
================================================
import matplotlib.pyplot as plt
import numpy as np
import triangle as tr
N = 32
theta = np.linspace(0, 2 * np.pi, N, endpoint=False)
pts = np.stack([np.cos(theta), np.sin(theta)], axis=1)
A = dict(vertices=pts)
B = tr.triangulate(A, 'qa0.05')
tr.compare(plt, A, B)
plt.show()
================================================
FILE: doc/plot/ex6.py
================================================
import matplotlib.pyplot as plt
import numpy as np
import triangle as tr
def circle(N, R):
i = np.arange(N)
theta = i * 2 * np.pi / N
pts = np.stack([np.cos(theta), np.sin(theta)], axis=1) * R
seg = np.stack([i, i + 1], axis=1) % N
return pts, seg
pts0, seg0 = circle(30, 1.4)
pts1, seg1 = circle(16, 0.6)
pts = np.vstack([pts0, pts1])
seg = np.vstack([seg0, seg1 + seg0.shape[0]])
A = dict(vertices=pts, segments=seg, holes=[[0, 0]])
B = tr.triangulate(A, 'qpa0.05')
tr.compare(plt, A, B)
plt.show()
================================================
FILE: doc/plot/ex7.py
================================================
import matplotlib.pyplot as plt
import numpy as np
import triangle as tr
# arrays to fill in with input
vertices = []
segments = []
regions = []
# make a box with given dims and place given attribute at its center
def make_box(x, y, w, h, attribute):
i = len(vertices)
vertices.extend([
[x, y],
[x + w, y],
[x + w, y + h],
[x, y + h],
])
segments.extend([
(i + 0, i + 1),
(i + 1, i + 2),
(i + 2, i + 3),
(i + 3, i + 0),
])
regions.append([x + 0.5 * w, y + 0.5 * h, attribute, 0])
# generate some input
make_box(0, 0, 5, 5, 1)
make_box(1, 1, 3, 1, 2)
make_box(1, 3, 1, 1, 3)
make_box(3, 3, 1, 1, 4)
A = dict(vertices=vertices, segments=segments, regions=regions)
B = tr.triangulate(A, 'pA')
tr.compare(plt, A, B)
plt.show()
================================================
FILE: doc/plot/face.py
================================================
import matplotlib.pyplot as plt
import triangle as tr
face = tr.get_data('face.1')
tr.plot(plt.axes(), **face)
plt.show()
================================================
FILE: doc/plot/holes_cavities.py
================================================
import matplotlib.pyplot as plt
import triangle as tr
face = tr.get_data('face')
t = tr.triangulate(face, 'p')
tr.compare(plt, face, t)
plt.show()
================================================
FILE: doc/plot/quality.py
================================================
import matplotlib.pyplot as plt
import triangle as tr
spiral = tr.get_data('spiral')
a = tr.triangulate(spiral)
b = tr.triangulate(spiral, 'q')
c = tr.triangulate(spiral, 'q32.5')
plt.figure(figsize=(5, 6))
ax1 = plt.subplot(221)
tr.plot(ax1, **spiral)
ax2 = plt.subplot(222)
tr.plot(ax2, **a)
ax3 = plt.subplot(223)
tr.plot(ax3, **b)
ax4 = plt.subplot(224)
tr.plot(ax4, **c)
plt.tight_layout()
plt.show()
================================================
FILE: doc/plot/quality1.py
================================================
import matplotlib.pyplot as plt
import triangle as tr
spiral = tr.get_data('spiral')
t = tr.triangulate(spiral, 'a.2')
ax1 = plt.subplot(111)
tr.plot(ax1, **t)
plt.show()
================================================
FILE: doc/plot/quality2.py
================================================
import matplotlib.pyplot as plt
import triangle as tr
plt.figure(figsize=(8, 7))
la = tr.get_data('la')
ax1 = plt.subplot(311)
tr.plot(ax1, **la)
t = tr.triangulate(la, 'pq')
ax2 = plt.subplot(312, sharex=ax1, sharey=ax1)
tr.plot(ax2, **t)
t = tr.triangulate(la, 'pqa')
ax2 = plt.subplot(313, sharex=ax1, sharey=ax1)
tr.plot(ax2, **t)
plt.show()
================================================
FILE: doc/plot/refine.py
================================================
import matplotlib.pyplot as plt
import triangle as tr
box1 = tr.get_data('bbox.1')
box2 = tr.triangulate(box1, 'rpa0.2')
box3 = tr.triangulate(box2, 'rpa0.05')
box4 = tr.triangulate(box3, 'rpa0.0125')
plt.figure(figsize=(15, 5))
ax1 = plt.subplot(131, aspect='equal')
tr.plot(ax1, **box2)
ax2 = plt.subplot(132, sharex=ax1, sharey=ax1)
tr.plot(ax2, **box3)
ax2 = plt.subplot(133, sharex=ax1, sharey=ax1)
tr.plot(ax2, **box4)
plt.show()
================================================
FILE: doc/plot/refine1.py
================================================
import matplotlib.pyplot as plt
import triangle as tr
box1 = tr.get_data('bbox.1')
box2 = tr.triangulate(box1, 'rpa')
tr.plot(plt.axes(), **box2)
plt.show()
================================================
FILE: doc/plot/refine2.py
================================================
import matplotlib.pyplot as plt
import triangle as tr
box1 = tr.get_data('bbox.1')
box2 = tr.triangulate(box1, 'rpaa.5')
tr.plot(plt.axes(), **box2)
plt.show()
================================================
FILE: doc/plot/voronoi.py
================================================
import matplotlib.pyplot as plt
import triangle as tr
pts = tr.get_data('dots')['vertices']
A = dict(vertices=pts)
points, edges, ray_origin, ray_direct = tr.voronoi(pts)
B = dict(vertices=points,
edges=edges,
ray_origins=ray_origin,
ray_directions=ray_direct)
tr.compare(plt, A, B)
plt.show()
================================================
FILE: doc/plot/voronoi1.py
================================================
import matplotlib.pyplot as plt
import triangle as tr
pts = tr.get_data('diamond_02_00009')['vertices']
t = dict(vertices=pts)
d = tr.get_data('diamond_02_00009.1.v')
tr.compare(plt, t, d)
plt.show()
================================================
FILE: doc/plot/voronoi3.py
================================================
import matplotlib.pyplot as plt
import numpy as np
import triangle as tr
pts = [[0, 0], [0, 1], [0.5, 0.5], [1, 1], [1, 0]]
pts = np.array(pts)
vertices, edges, ray_origins, ray_directions = tr.voronoi(pts)
ax = plt.axes()
tr.plot(ax, vertices=pts)
lim = ax.axis()
tr.plot(ax,
vertices=vertices,
edges=edges,
ray_origins=ray_origins,
ray_directions=ray_directions)
ax.axis(lim)
plt.show()
================================================
FILE: doc/quality.rst
================================================
Quality Meshing: Angle and Size Constraints
===========================================
Triangle generates a conforming constrained Delaunay triangulation whenever the
-q, -a, or -u, switch is used. These switches set constraints on angles and
triangle sizes in the mesh.
The -q switch sets a minimum angle constraint. A number may follow the `q`;
otherwise, the default minimum angle is twenty degrees. For the vertex set
spiral below, consider the differences among triangle spiral triangle -q spiral
triangle -q32.5 spiral
.. plot:: plot/quality.py
Note that the angle constraint does not apply to small angles between input
segments; such angles cannot be removed.
The -a switch sets a maximum area constraint. There are three ways to use this
switch. The first way is to specify a maximum area on the command line. The
next example is a mesh in which no triangle has area greater than 0.2.
::
triangulate(spiral,'a.2')
.. plot:: plot/quality1.py
The second manner of using the -a switch is applicable only when creating a new
mesh from a PSLG. The file describing the PSLG itself contains area
constraints, each of which is applied to a segment-bounded region; see the
.poly file format for details. For an example, look at the last seven lines of
la.poly, which describes a vertical cross section of soil in the Los Angeles
Basin. Below is an illustration of the results when the -a switch is or is not
invoked.
::
triangulate(la,'pq')
triangulate(la,'pqa')
.. plot:: plot/quality2.py
================================================
FILE: doc/refine.rst
================================================
Refining Preexisting Meshes
===========================
The -r switch causes a mesh (.node and .ele files) to be read and refined. If
the -p switch is also used, a .poly file is read and used to specify edges that
are constrained and cannot be eliminated (although they can be divided into
smaller edges) by the refinement process.
When you refine a mesh, you generally want to impose tighter quality
constraints. One way to accomplish this is to use -q with a larger angle, or -a
followed by a smaller area than you used to generate the mesh you are refining.
In order to simplify the maintenance of a sequence of successively refined
meshes, all files written by Triangle have iteration numbers in their
filenames; the iteration number of each mesh is one greater than that of the
mesh it was created from. In the example below, the input mesh (which you saw
created on the Delaunay triangulation page) has iteration number one, and
consists of the files box.1.node and box.1.ele.
.. plot::
import triangle as tr
import matplotlib.pyplot as plt
box1 = tr.get_data('bbox.1')
tr.plot(plt.axes(), **box1)
plt.show()
This mesh is refined with an area constraint of 0.2, creating a new mesh with
iteration number two. Repeating the process with smaller area constraints,
iterations three and four are also created. ::
triangle -rpa0.2 box.1
triangle -rpa.05 box.2
triangle -rpa.0125 box.3
.. plot:: plot/refine.py
Above, the -p switch is used to retain segment information. At each iteration, a
.poly file is read and used to specify edges that are constrained and cannot be
eliminated (although they can be divided into smaller edges) by the refinement
process. In this example, it didn't make any difference because the mesh has no
interior boundaries; however, in a mesh with interior boundaries, the -p switch
is necessary to maintain these boundaries during refinement; hence, you should
make a habit of using it whenever refining a mesh that was originally formed
from a PSLG. If you forget, the information about interior segments will be
lost for all future iterations.
You can perform finely controlled refinement by creating an .area file, which
specifies a maximum area for each triangle, and use the -a switch (without a
number following). Each triangle's area constraint is applied to that triangle.
The constraints in an .area file are typically based on a posteriori error
estimates resulting from a finite element simulation on that mesh. In the
example file box.1.area, one triangle has been constrained to have area no
greater than 0.02; all other triangles are left unconstrained (by assigning
them negative areas). ::
triangulate(bbox1, 'rpa')
.. plot:: plot/refine1.py
================================================
FILE: doc/voronoi.rst
================================================
Voronoi Diagrams
=================
The -v switch produces the Voronoi diagram of a vertex set in files suffixed
.v.node and .v.edge. In this example, the file dots.node is input, and its
Voronoi diagram is written to dots.1.v.node and dots.1.v.edge. These are
ordinary .node and .edge format files, containing the Voronoi vertices and
edges, respectively. Some of the edges are infinite rays.
.. plot:: plot/voronoi.py
This implementation does not use exact arithmetic to compute the Voronoi
vertices, and does not check whether neighboring vertices are identical. Be
forewarned that if the Delaunay triangulation is degenerate or near-degenerate,
the Voronoi diagram may have duplicate vertices, crossing edges, or infinite
rays whose direction vector is zero. The result is a valid Voronoi diagram only
if Triangle's output is a true Delaunay triangulation with no holes. The
Voronoi output is usually meaningless (and may contain crossing edges and other
pathology) if the output is a constrained Delaunay triangulation (CDT) or a
conforming constrained Delaunay triangulation (CCDT), or if it has holes or
concavities. If the triangulation is convex and has no holes, this can be fixed
by using the -D switch (in conjunction with a refinement switch, like -q0) to
ensure that a conforming Delaunay triangulation is constructed.
================================================
FILE: pyproject.toml
================================================
[build-system]
requires = [
'Cython >=3.0.2',
'setuptools >=61',
]
build-backend = 'setuptools.build_meta'
[project]
name = 'triangle'
dynamic = ['version']
authors = [
{ name = 'Dzhelil Rufat', email = 'd@rufat.be' },
]
description = 'Python binding to the triangle library'
readme = 'README.rst'
license = { text = 'LGPL-3.0' }
requires-python = '>=3.7'
dependencies = [
'numpy',
]
[project.optional-dependencies]
test = [
'pytest',
]
[project.urls]
Homepage = 'https://rufat.be/triangle'
Repository = 'https://github.com/drufat/triangle'
[tool.setuptools]
include-package-data = false
packages = ['triangle']
[tool.setuptools.dynamic]
version = { attr = 'triangle.version.__version__' }
[tool.setuptools.package-data]
triangle = [
'data/*.node',
'data/*.ele',
'data/*.poly',
'data/*.area',
'data/*.edge',
'data/*.neigh',
]
[tool.cibuildwheel]
skip = ['pp*', '*musllinux*']
test-skip = ['*-manylinux_i686']
test-requires = 'pytest'
test-command = 'pytest {project}/tests'
================================================
FILE: setup.py
================================================
from setuptools import setup, Extension
define_macros = [
('VOID', 'void'),
('REAL', 'double'),
('NO_TIMER', 1),
('TRILIBRARY', 1),
('ANSI_DECLARATORS', 1),
]
ext_modules = [
Extension(
'triangle.core',
['c/triangle.c', 'triangle/core.c'],
include_dirs=['c'],
define_macros=define_macros,
# extra_compile_args=['-g'],
),
]
# see pyproject.toml for other metadata
setup(
name='triangle',
ext_modules=ext_modules,
)
================================================
FILE: tests/test_triangle.py
================================================
import numpy as np
from triangle import triangulate, convex_hull, voronoi, delaunay
def test_triangulate():
v = [[0, 0], [0, 1], [1, 1], [1, 0]]
t = triangulate({"vertices": v}, "a0.2")
assert np.allclose(
t["vertices"],
[
[0.0, 0.0],
[0.0, 1.0],
[1.0, 1.0],
[1.0, 0.0],
[0.5, 0.5],
[0.0, 0.5],
[0.5, 0.0],
[1.0, 0.5],
[0.5, 1.0],
],
)
assert np.allclose(
t["vertex_markers"],
[[1], [1], [1], [1], [0], [1], [1], [1], [1]],
)
assert np.allclose(
t["triangles"],
[
[7, 2, 4],
[5, 0, 4],
[4, 8, 1],
[4, 1, 5],
[4, 0, 6],
[6, 3, 4],
[4, 3, 7],
[4, 2, 8],
],
)
def test_delaunay():
pts = [[0, 0], [0, 1], [0.5, 0.5], [1, 1], [1, 0]]
tri = delaunay(pts)
assert np.allclose(
tri,
[
[1, 0, 2],
[2, 4, 3],
[4, 2, 0],
[2, 3, 1],
],
)
def test_hull():
pts = [[0, 0], [0, 1], [1, 1], [1, 0]]
segments = convex_hull(pts)
assert np.allclose(segments, [[3, 0], [2, 3], [1, 2], [0, 1]])
def test_voronoi():
pts = [[0, 0], [0, 1], [0.5, 0.5], [1, 1], [1, 0]]
points, edges, ray_origin, ray_direct = voronoi(pts)
assert np.allclose(
points,
[[0.0, 0.5], [1.0, 0.5], [0.5, 0.0], [0.5, 1.0]],
)
assert np.allclose(edges, [[0, 2], [0, 3], [1, 2], [1, 3]])
assert np.allclose(ray_origin, [0, 1, 2, 3])
assert np.allclose(
ray_direct,
[[-1.0, 0.0], [1.0, 0.0], [0.0, -1.0], [0.0, 1.0]],
)
================================================
FILE: triangle/__init__.py
================================================
from .version import __version__
from .data import (
loads,
load,
get_data,
show_data,
)
from .plot import (
plot,
comparev,
compare,
)
from .tri import (
triangulate,
convex_hull,
delaunay,
voronoi,
)
================================================
FILE: triangle/core.c
================================================
/* Generated by Cython 3.0.11 */
#ifndef PY_SSIZE_T_CLEAN
#define PY_SSIZE_T_CLEAN
#endif /* PY_SSIZE_T_CLEAN */
#if defined(CYTHON_LIMITED_API) && 0
#ifndef Py_LIMITED_API
#if CYTHON_LIMITED_API+0 > 0x03030000
#define Py_LIMITED_API CYTHON_LIMITED_API
#else
#define Py_LIMITED_API 0x03030000
#endif
#endif
#endif
#include "Python.h"
#ifndef Py_PYTHON_H
#error Python headers needed to compile C extensions, please install development version of Python.
#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
#error Cython requires Python 2.7+ or Python 3.3+.
#else
#if defined(CYTHON_LIMITED_API) && CYTHON_LIMITED_API
#define __PYX_EXTRA_ABI_MODULE_NAME "limited"
#else
#define __PYX_EXTRA_ABI_MODULE_NAME ""
#endif
#define CYTHON_ABI "3_0_11" __PYX_EXTRA_ABI_MODULE_NAME
#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI
#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "."
#define CYTHON_HEX_VERSION 0x03000BF0
#define CYTHON_FUTURE_DIVISION 1
#include <stddef.h>
#ifndef offsetof
#define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
#endif
#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS)
#ifndef __stdcall
#define __stdcall
#endif
#ifndef __cdecl
#define __cdecl
#endif
#ifndef __fastcall
#define __fastcall
#endif
#endif
#ifndef DL_IMPORT
#define DL_IMPORT(t) t
#endif
#ifndef DL_EXPORT
#define DL_EXPORT(t) t
#endif
#define __PYX_COMMA ,
#ifndef HAVE_LONG_LONG
#define HAVE_LONG_LONG
#endif
#ifndef PY_LONG_LONG
#define PY_LONG_LONG LONG_LONG
#endif
#ifndef Py_HUGE_VAL
#define Py_HUGE_VAL HUGE_VAL
#endif
#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX
#if defined(GRAALVM_PYTHON)
/* For very preliminary testing purposes. Most variables are set the same as PyPy.
The existence of this section does not imply that anything works or is even tested */
#define CYTHON_COMPILING_IN_PYPY 0
#define CYTHON_COMPILING_IN_CPYTHON 0
#define CYTHON_COMPILING_IN_LIMITED_API 0
#define CYTHON_COMPILING_IN_GRAAL 1
#define CYTHON_COMPILING_IN_NOGIL 0
#undef CYTHON_USE_TYPE_SLOTS
#define CYTHON_USE_TYPE_SLOTS 0
#undef CYTHON_USE_TYPE_SPECS
#define CYTHON_USE_TYPE_SPECS 0
#undef CYTHON_USE_PYTYPE_LOOKUP
#define CYTHON_USE_PYTYPE_LOOKUP 0
#if PY_VERSION_HEX < 0x03050000
#undef CYTHON_USE_ASYNC_SLOTS
#define CYTHON_USE_ASYNC_SLOTS 0
#elif !defined(CYTHON_USE_ASYNC_SLOTS)
#define CYTHON_USE_ASYNC_SLOTS 1
#endif
#undef CYTHON_USE_PYLIST_INTERNALS
#define CYTHON_USE_PYLIST_INTERNALS 0
#undef CYTHON_USE_UNICODE_INTERNALS
#define CYTHON_USE_UNICODE_INTERNALS 0
#undef CYTHON_USE_UNICODE_WRITER
#define CYTHON_USE_UNICODE_WRITER 0
#undef CYTHON_USE_PYLONG_INTERNALS
#define CYTHON_USE_PYLONG_INTERNALS 0
#undef CYTHON_AVOID_BORROWED_REFS
#define CYTHON_AVOID_BORROWED_REFS 1
#undef CYTHON_ASSUME_SAFE_MACROS
#define CYTHON_ASSUME_SAFE_MACROS 0
#undef CYTHON_UNPACK_METHODS
#define CYTHON_UNPACK_METHODS 0
#undef CYTHON_FAST_THREAD_STATE
#define CYTHON_FAST_THREAD_STATE 0
#undef CYTHON_FAST_GIL
#define CYTHON_FAST_GIL 0
#undef CYTHON_METH_FASTCALL
#define CYTHON_METH_FASTCALL 0
#undef CYTHON_FAST_PYCALL
#define CYTHON_FAST_PYCALL 0
#ifndef CYTHON_PEP487_INIT_SUBCLASS
#define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3)
#endif
#undef CYTHON_PEP489_MULTI_PHASE_INIT
#define CYTHON_PEP489_MULTI_PHASE_INIT 1
#undef CYTHON_USE_MODULE_STATE
#define CYTHON_USE_MODULE_STATE 0
#undef CYTHON_USE_TP_FINALIZE
#define CYTHON_USE_TP_FINALIZE 0
#undef CYTHON_USE_DICT_VERSIONS
#define CYTHON_USE_DICT_VERSIONS 0
#undef CYTHON_USE_EXC_INFO_STACK
#define CYTHON_USE_EXC_INFO_STACK 0
#ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
#define CYTHON_UPDATE_DESCRIPTOR_DOC 0
#endif
#undef CYTHON_USE_FREELISTS
#define CYTHON_USE_FREELISTS 0
#elif defined(PYPY_VERSION)
#define CYTHON_COMPILING_IN_PYPY 1
#define CYTHON_COMPILING_IN_CPYTHON 0
#define CYTHON_COMPILING_IN_LIMITED_API 0
#define CYTHON_COMPILING_IN_GRAAL 0
#define CYTHON_COMPILING_IN_NOGIL 0
#undef CYTHON_USE_TYPE_SLOTS
#define CYTHON_USE_TYPE_SLOTS 0
#ifndef CYTHON_USE_TYPE_SPECS
#define CYTHON_USE_TYPE_SPECS 0
#endif
#undef CYTHON_USE_PYTYPE_LOOKUP
#define CYTHON_USE_PYTYPE_LOOKUP 0
#if PY_VERSION_HEX < 0x03050000
#undef CYTHON_USE_ASYNC_SLOTS
#define CYTHON_USE_ASYNC_SLOTS 0
#elif !defined(CYTHON_USE_ASYNC_SLOTS)
#define CYTHON_USE_ASYNC_SLOTS 1
#endif
#undef CYTHON_USE_PYLIST_INTERNALS
#define CYTHON_USE_PYLIST_INTERNALS 0
#undef CYTHON_USE_UNICODE_INTERNALS
#define CYTHON_USE_UNICODE_INTERNALS 0
#undef CYTHON_USE_UNICODE_WRITER
#define CYTHON_USE_UNICODE_WRITER 0
#undef CYTHON_USE_PYLONG_INTERNALS
#define CYTHON_USE_PYLONG_INTERNALS 0
#undef CYTHON_AVOID_BORROWED_REFS
#define CYTHON_AVOID_BORROWED_REFS 1
#undef CYTHON_ASSUME_SAFE_MACROS
#define CYTHON_ASSUME_SAFE_MACROS 0
#undef CYTHON_UNPACK_METHODS
#define CYTHON_UNPACK_METHODS 0
#undef CYTHON_FAST_THREAD_STATE
#define CYTHON_FAST_THREAD_STATE 0
#undef CYTHON_FAST_GIL
#define CYTHON_FAST_GIL 0
#undef CYTHON_METH_FASTCALL
#define CYTHON_METH_FASTCALL 0
#undef CYTHON_FAST_PYCALL
#define CYTHON_FAST_PYCALL 0
#ifndef CYTHON_PEP487_INIT_SUBCLASS
#define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3)
#endif
#if PY_VERSION_HEX < 0x03090000
#undef CYTHON_PEP489_MULTI_PHASE_INIT
#define CYTHON_PEP489_MULTI_PHASE_INIT 0
#elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT)
#define CYTHON_PEP489_MULTI_PHASE_INIT 1
#endif
#undef CYTHON_USE_MODULE_STATE
#define CYTHON_USE_MODULE_STATE 0
#undef CYTHON_USE_TP_FINALIZE
#define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00)
#undef CYTHON_USE_DICT_VERSIONS
#define CYTHON_USE_DICT_VERSIONS 0
#undef CYTHON_USE_EXC_INFO_STACK
#define CYTHON_USE_EXC_INFO_STACK 0
#ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
#define CYTHON_UPDATE_DESCRIPTOR_DOC 0
#endif
#undef CYTHON_USE_FREELISTS
#define CYTHON_USE_FREELISTS 0
#elif defined(CYTHON_LIMITED_API)
#ifdef Py_LIMITED_API
#undef __PYX_LIMITED_VERSION_HEX
#define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API
#endif
#define CYTHON_COMPILING_IN_PYPY 0
#define CYTHON_COMPILING_IN_CPYTHON 0
#define CYTHON_COMPILING_IN_LIMITED_API 1
#define CYTHON_COMPILING_IN_GRAAL 0
#define CYTHON_COMPILING_IN_NOGIL 0
#undef CYTHON_CLINE_IN_TRACEBACK
#define CYTHON_CLINE_IN_TRACEBACK 0
#undef CYTHON_USE_TYPE_SLOTS
#define CYTHON_USE_TYPE_SLOTS 0
#undef CYTHON_USE_TYPE_SPECS
#define CYTHON_USE_TYPE_SPECS 1
#undef CYTHON_USE_PYTYPE_LOOKUP
#define CYTHON_USE_PYTYPE_LOOKUP 0
#undef CYTHON_USE_ASYNC_SLOTS
#define CYTHON_USE_ASYNC_SLOTS 0
#undef CYTHON_USE_PYLIST_INTERNALS
#define CYTHON_USE_PYLIST_INTERNALS 0
#undef CYTHON_USE_UNICODE_INTERNALS
#define CYTHON_USE_UNICODE_INTERNALS 0
#ifndef CYTHON_USE_UNICODE_WRITER
#define CYTHON_USE_UNICODE_WRITER 0
#endif
#undef CYTHON_USE_PYLONG_INTERNALS
#define CYTHON_USE_PYLONG_INTERNALS 0
#ifndef CYTHON_AVOID_BORROWED_REFS
#define CYTHON_AVOID_BORROWED_REFS 0
#endif
#undef CYTHON_ASSUME_SAFE_MACROS
#define CYTHON_ASSUME_SAFE_MACROS 0
#undef CYTHON_UNPACK_METHODS
#define CYTHON_UNPACK_METHODS 0
#undef CYTHON_FAST_THREAD_STATE
#define CYTHON_FAST_THREAD_STATE 0
#undef CYTHON_FAST_GIL
#define CYTHON_FAST_GIL 0
#undef CYTHON_METH_FASTCALL
#define CYTHON_METH_FASTCALL 0
#undef CYTHON_FAST_PYCALL
#define CYTHON_FAST_PYCALL 0
#ifndef CYTHON_PEP487_INIT_SUBCLASS
#define CYTHON_PEP487_INIT_SUBCLASS 1
#endif
#undef CYTHON_PEP489_MULTI_PHASE_INIT
#define CYTHON_PEP489_MULTI_PHASE_INIT 0
#undef CYTHON_USE_MODULE_STATE
#define CYTHON_USE_MODULE_STATE 1
#ifndef CYTHON_USE_TP_FINALIZE
#define CYTHON_USE_TP_FINALIZE 0
#endif
#undef CYTHON_USE_DICT_VERSIONS
#define CYTHON_USE_DICT_VERSIONS 0
#undef CYTHON_USE_EXC_INFO_STACK
#define CYTHON_USE_EXC_INFO_STACK 0
#ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
#define CYTHON_UPDATE_DESCRIPTOR_DOC 0
#endif
#undef CYTHON_USE_FREELISTS
#define CYTHON_USE_FREELISTS 0
#elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL)
#define CYTHON_COMPILING_IN_PYPY 0
#define CYTHON_COMPILING_IN_CPYTHON 0
#define CYTHON_COMPILING_IN_LIMITED_API 0
#define CYTHON_COMPILING_IN_GRAAL 0
#define CYTHON_COMPILING_IN_NOGIL 1
#ifndef CYTHON_USE_TYPE_SLOTS
#define CYTHON_USE_TYPE_SLOTS 1
#endif
#ifndef CYTHON_USE_TYPE_SPECS
#define CYTHON_USE_TYPE_SPECS 0
#endif
#undef CYTHON_USE_PYTYPE_LOOKUP
#define CYTHON_USE_PYTYPE_LOOKUP 0
#ifndef CYTHON_USE_ASYNC_SLOTS
#define CYTHON_USE_ASYNC_SLOTS 1
#endif
#ifndef CYTHON_USE_PYLONG_INTERNALS
#define CYTHON_USE_PYLONG_INTERNALS 0
#endif
#undef CYTHON_USE_PYLIST_INTERNALS
#define CYTHON_USE_PYLIST_INTERNALS 0
#ifndef CYTHON_USE_UNICODE_INTERNALS
#define CYTHON_USE_UNICODE_INTERNALS 1
#endif
#undef CYTHON_USE_UNICODE_WRITER
#define CYTHON_USE_UNICODE_WRITER 0
#ifndef CYTHON_AVOID_BORROWED_REFS
#define CYTHON_AVOID_BORROWED_REFS 0
#endif
#ifndef CYTHON_ASSUME_SAFE_MACROS
#define CYTHON_ASSUME_SAFE_MACROS 1
#endif
#ifndef CYTHON_UNPACK_METHODS
#define CYTHON_UNPACK_METHODS 1
#endif
#undef CYTHON_FAST_THREAD_STATE
#define CYTHON_FAST_THREAD_STATE 0
#undef CYTHON_FAST_GIL
#define CYTHON_FAST_GIL 0
#ifndef CYTHON_METH_FASTCALL
#define CYTHON_METH_FASTCALL 1
#endif
#undef CYTHON_FAST_PYCALL
#define CYTHON_FAST_PYCALL 0
#ifndef CYTHON_PEP487_INIT_SUBCLASS
#define CYTHON_PEP487_INIT_SUBCLASS 1
#endif
#ifndef CYTHON_PEP489_MULTI_PHASE_INIT
#define CYTHON_PEP489_MULTI_PHASE_INIT 1
#endif
#ifndef CYTHON_USE_MODULE_STATE
#define CYTHON_USE_MODULE_STATE 0
#endif
#ifndef CYTHON_USE_TP_FINALIZE
#define CYTHON_USE_TP_FINALIZE 1
#endif
#undef CYTHON_USE_DICT_VERSIONS
#define CYTHON_USE_DICT_VERSIONS 0
#undef CYTHON_USE_EXC_INFO_STACK
#define CYTHON_USE_EXC_INFO_STACK 0
#ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
#define CYTHON_UPDATE_DESCRIPTOR_DOC 1
#endif
#ifndef CYTHON_USE_FREELISTS
#define CYTHON_USE_FREELISTS 0
#endif
#else
#define CYTHON_COMPILING_IN_PYPY 0
#define CYTHON_COMPILING_IN_CPYTHON 1
#define CYTHON_COMPILING_IN_LIMITED_API 0
#define CYTHON_COMPILING_IN_GRAAL 0
#define CYTHON_COMPILING_IN_NOGIL 0
#ifndef CYTHON_USE_TYPE_SLOTS
#define CYTHON_USE_TYPE_SLOTS 1
#endif
#ifndef CYTHON_USE_TYPE_SPECS
#define CYTHON_USE_TYPE_SPECS 0
#endif
#ifndef CYTHON_USE_PYTYPE_LOOKUP
#define CYTHON_USE_PYTYPE_LOOKUP 1
#endif
#if PY_MAJOR_VERSION < 3
#undef CYTHON_USE_ASYNC_SLOTS
#define CYTHON_USE_ASYNC_SLOTS 0
#elif !defined(CYTHON_USE_ASYNC_SLOTS)
#define CYTHON_USE_ASYNC_SLOTS 1
#endif
#ifndef CYTHON_USE_PYLONG_INTERNALS
#define CYTHON_USE_PYLONG_INTERNALS 1
#endif
#ifndef CYTHON_USE_PYLIST_INTERNALS
#define CYTHON_USE_PYLIST_INTERNALS 1
#endif
#ifndef CYTHON_USE_UNICODE_INTERNALS
#define CYTHON_USE_UNICODE_INTERNALS 1
#endif
#if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2
#undef CYTHON_USE_UNICODE_WRITER
#define CYTHON_USE_UNICODE_WRITER 0
#elif !defined(CYTHON_USE_UNICODE_WRITER)
#define CYTHON_USE_UNICODE_WRITER 1
#endif
#ifndef CYTHON_AVOID_BORROWED_REFS
#define CYTHON_AVOID_BORROWED_REFS 0
#endif
#ifndef CYTHON_ASSUME_SAFE_MACROS
#define CYTHON_ASSUME_SAFE_MACROS 1
#endif
#ifndef CYTHON_UNPACK_METHODS
#define CYTHON_UNPACK_METHODS 1
#endif
#ifndef CYTHON_FAST_THREAD_STATE
#define CYTHON_FAST_THREAD_STATE 1
#endif
#ifndef CYTHON_FAST_GIL
#define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6)
#endif
#ifndef CYTHON_METH_FASTCALL
#define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1)
#endif
#ifndef CYTHON_FAST_PYCALL
#define CYTHON_FAST_PYCALL 1
#endif
#ifndef CYTHON_PEP487_INIT_SUBCLASS
#define CYTHON_PEP487_INIT_SUBCLASS 1
#endif
#if PY_VERSION_HEX < 0x03050000
#undef CYTHON_PEP489_MULTI_PHASE_INIT
#define CYTHON_PEP489_MULTI_PHASE_INIT 0
#elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT)
#define CYTHON_PEP489_MULTI_PHASE_INIT 1
#endif
#ifndef CYTHON_USE_MODULE_STATE
#define CYTHON_USE_MODULE_STATE 0
#endif
#if PY_VERSION_HEX < 0x030400a1
#undef CYTHON_USE_TP_FINALIZE
#define CYTHON_USE_TP_FINALIZE 0
#elif !defined(CYTHON_USE_TP_FINALIZE)
#define CYTHON_USE_TP_FINALIZE 1
#endif
#if PY_VERSION_HEX < 0x030600B1
#undef CYTHON_USE_DICT_VERSIONS
#define CYTHON_USE_DICT_VERSIONS 0
#elif !defined(CYTHON_USE_DICT_VERSIONS)
#define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5)
#endif
#if PY_VERSION_HEX < 0x030700A3
#undef CYTHON_USE_EXC_INFO_STACK
#define CYTHON_USE_EXC_INFO_STACK 0
#elif !defined(CYTHON_USE_EXC_INFO_STACK)
#define CYTHON_USE_EXC_INFO_STACK 1
#endif
#ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
#define CYTHON_UPDATE_DESCRIPTOR_DOC 1
#endif
#ifndef CYTHON_USE_FREELISTS
#define CYTHON_USE_FREELISTS 1
#endif
#endif
#if !defined(CYTHON_FAST_PYCCALL)
#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
#endif
#if !defined(CYTHON_VECTORCALL)
#define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1)
#endif
#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1)
#if CYTHON_USE_PYLONG_INTERNALS
#if PY_MAJOR_VERSION < 3
#include "longintrepr.h"
#endif
#undef SHIFT
#undef BASE
#undef MASK
#ifdef SIZEOF_VOID_P
enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) };
#endif
#endif
#ifndef __has_attribute
#define __has_attribute(x) 0
#endif
#ifndef __has_cpp_attribute
#define __has_cpp_attribute(x) 0
#endif
#ifndef CYTHON_RESTRICT
#if defined(__GNUC__)
#define CYTHON_RESTRICT __restrict__
#elif defined(_MSC_VER) && _MSC_VER >= 1400
#define CYTHON_RESTRICT __restrict
#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#define CYTHON_RESTRICT restrict
#else
#define CYTHON_RESTRICT
#endif
#endif
#ifndef CYTHON_UNUSED
#if defined(__cplusplus)
/* for clang __has_cpp_attribute(maybe_unused) is true even before C++17
* but leads to warnings with -pedantic, since it is a C++17 feature */
#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L)
#if __has_cpp_attribute(maybe_unused)
#define CYTHON_UNUSED [[maybe_unused]]
#endif
#endif
#endif
#endif
#ifndef CYTHON_UNUSED
# if defined(__GNUC__)
# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
# define CYTHON_UNUSED __attribute__ ((__unused__))
# else
# define CYTHON_UNUSED
# endif
# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
# define CYTHON_UNUSED __attribute__ ((__unused__))
# else
# define CYTHON_UNUSED
# endif
#endif
#ifndef CYTHON_UNUSED_VAR
# if defined(__cplusplus)
template<class T> void CYTHON_UNUSED_VAR( const T& ) { }
# else
# define CYTHON_UNUSED_VAR(x) (void)(x)
# endif
#endif
#ifndef CYTHON_MAYBE_UNUSED_VAR
#define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x)
#endif
#ifndef CYTHON_NCP_UNUSED
# if CYTHON_COMPILING_IN_CPYTHON
# define CYTHON_NCP_UNUSED
# else
# define CYTHON_NCP_UNUSED CYTHON_UNUSED
# endif
#endif
#ifndef CYTHON_USE_CPP_STD_MOVE
#if defined(__cplusplus) && (\
__cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600))
#define CYTHON_USE_CPP_STD_MOVE 1
#else
#define CYTHON_USE_CPP_STD_MOVE 0
#endif
#endif
#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
#ifdef _MSC_VER
#ifndef _MSC_STDINT_H_
#if _MSC_VER < 1300
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
#else
typedef unsigned __int8 uint8_t;
typedef unsigned __int16 uint16_t;
typedef unsigned __int32 uint32_t;
#endif
#endif
#if _MSC_VER < 1300
#ifdef _WIN64
typedef unsigned long long __pyx_uintptr_t;
#else
typedef unsigned int __pyx_uintptr_t;
#endif
#else
#ifdef _WIN64
typedef unsigned __int64 __pyx_uintptr_t;
#else
typedef unsigned __int32 __pyx_uintptr_t;
#endif
#endif
#else
#include <stdint.h>
typedef uintptr_t __pyx_uintptr_t;
#endif
#ifndef CYTHON_FALLTHROUGH
#if defined(__cplusplus)
/* for clang __has_cpp_attribute(fallthrough) is true even before C++17
* but leads to warnings with -pedantic, since it is a C++17 feature */
#if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L)
#if __has_cpp_attribute(fallthrough)
#define CYTHON_FALLTHROUGH [[fallthrough]]
#endif
#endif
#ifndef CYTHON_FALLTHROUGH
#if __has_cpp_attribute(clang::fallthrough)
#define CYTHON_FALLTHROUGH [[clang::fallthrough]]
#elif __has_cpp_attribute(gnu::fallthrough)
#define CYTHON_FALLTHROUGH [[gnu::fallthrough]]
#endif
#endif
#endif
#ifndef CYTHON_FALLTHROUGH
#if __has_attribute(fallthrough)
#define CYTHON_FALLTHROUGH __attribute__((fallthrough))
#else
#define CYTHON_FALLTHROUGH
#endif
#endif
#if defined(__clang__) && defined(__apple_build_version__)
#if __apple_build_version__ < 7000000
#undef CYTHON_FALLTHROUGH
#define CYTHON_FALLTHROUGH
#endif
#endif
#endif
#ifdef __cplusplus
template <typename T>
struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);};
#define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL<type>::value)
#else
#define __PYX_IS_UNSIGNED(type) (((type)-1) > 0)
#endif
#if CYTHON_COMPILING_IN_PYPY == 1
#define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000)
#else
#define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000)
#endif
#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer))
#ifndef CYTHON_INLINE
#if defined(__clang__)
#define CYTHON_INLINE __inline__ __attribute__ ((__unused__))
#elif defined(__GNUC__)
#define CYTHON_INLINE __inline__
#elif defined(_MSC_VER)
#define CYTHON_INLINE __inline
#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#define CYTHON_INLINE inline
#else
#define CYTHON_INLINE
#endif
#endif
#define __PYX_BUILD_PY_SSIZE_T "n"
#define CYTHON_FORMAT_SSIZE_T "z"
#if PY_MAJOR_VERSION < 3
#define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
#define __Pyx_DefaultClassType PyClass_Type
#define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
#else
#define __Pyx_BUILTIN_MODULE_NAME "builtins"
#define __Pyx_DefaultClassType PyType_Type
#if CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE PyObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f,
PyObject *code, PyObject *c, PyObject* n, PyObject *v,
PyObject *fv, PyObject *cell, PyObject* fn,
PyObject *name, int fline, PyObject *lnos) {
PyObject *exception_table = NULL;
PyObject *types_module=NULL, *code_type=NULL, *result=NULL;
#if __PYX_LIMITED_VERSION_HEX < 0x030B0000
PyObject *version_info;
PyObject *py_minor_version = NULL;
#endif
long minor_version = 0;
PyObject *type, *value, *traceback;
PyErr_Fetch(&type, &value, &traceback);
#if __PYX_LIMITED_VERSION_HEX >= 0x030B0000
minor_version = 11;
#else
if (!(version_info = PySys_GetObject("version_info"))) goto end;
if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end;
minor_version = PyLong_AsLong(py_minor_version);
Py_DECREF(py_minor_version);
if (minor_version == -1 && PyErr_Occurred()) goto end;
#endif
if (!(types_module = PyImport_ImportModule("types"))) goto end;
if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end;
if (minor_version <= 7) {
(void)p;
result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOO", a, k, l, s, f, code,
c, n, v, fn, name, fline, lnos, fv, cell);
} else if (minor_version <= 10) {
result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOO", a,p, k, l, s, f, code,
c, n, v, fn, name, fline, lnos, fv, cell);
} else {
if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end;
result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOO", a,p, k, l, s, f, code,
c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell);
}
end:
Py_XDECREF(code_type);
Py_XDECREF(exception_table);
Py_XDECREF(types_module);
if (type) {
PyErr_Restore(type, value, traceback);
}
return result;
}
#ifndef CO_OPTIMIZED
#define CO_OPTIMIZED 0x0001
#endif
#ifndef CO_NEWLOCALS
#define CO_NEWLOCALS 0x0002
#endif
#ifndef CO_VARARGS
#define CO_VARARGS 0x0004
#endif
#ifndef CO_VARKEYWORDS
#define CO_VARKEYWORDS 0x0008
#endif
#ifndef CO_ASYNC_GENERATOR
#define CO_ASYNC_GENERATOR 0x0200
#endif
#ifndef CO_GENERATOR
#define CO_GENERATOR 0x0020
#endif
#ifndef CO_COROUTINE
#define CO_COROUTINE 0x0080
#endif
#elif PY_VERSION_HEX >= 0x030B0000
static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f,
PyObject *code, PyObject *c, PyObject* n, PyObject *v,
PyObject *fv, PyObject *cell, PyObject* fn,
PyObject *name, int fline, PyObject *lnos) {
PyCodeObject *result;
PyObject *empty_bytes = PyBytes_FromStringAndSize("", 0);
if (!empty_bytes) return NULL;
result =
#if PY_VERSION_HEX >= 0x030C0000
PyUnstable_Code_NewWithPosOnlyArgs
#else
PyCode_NewWithPosOnlyArgs
#endif
(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, empty_bytes);
Py_DECREF(empty_bytes);
return result;
}
#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY
#define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
#else
#define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
#endif
#endif
#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE)
#define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type)
#else
#define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type))
#endif
#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is)
#define __Pyx_Py_Is(x, y) Py_Is(x, y)
#else
#define __Pyx_Py_Is(x, y) ((x) == (y))
#endif
#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone)
#define __Pyx_Py_IsNone(ob) Py_IsNone(ob)
#else
#define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None)
#endif
#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue)
#define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob)
#else
#define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True)
#endif
#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse)
#define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob)
#else
#define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False)
#endif
#define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj))
#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY
#define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o)
#else
#define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o)
#endif
#ifndef CO_COROUTINE
#define CO_COROUTINE 0x80
#endif
#ifndef CO_ASYNC_GENERATOR
#define CO_ASYNC_GENERATOR 0x200
#endif
#ifndef Py_TPFLAGS_CHECKTYPES
#define Py_TPFLAGS_CHECKTYPES 0
#endif
#ifndef Py_TPFLAGS_HAVE_INDEX
#define Py_TPFLAGS_HAVE_INDEX 0
#endif
#ifndef Py_TPFLAGS_HAVE_NEWBUFFER
#define Py_TPFLAGS_HAVE_NEWBUFFER 0
#endif
#ifndef Py_TPFLAGS_HAVE_FINALIZE
#define Py_TPFLAGS_HAVE_FINALIZE 0
#endif
#ifndef Py_TPFLAGS_SEQUENCE
#define Py_TPFLAGS_SEQUENCE 0
#endif
#ifndef Py_TPFLAGS_MAPPING
#define Py_TPFLAGS_MAPPING 0
#endif
#ifndef METH_STACKLESS
#define METH_STACKLESS 0
#endif
#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL)
#ifndef METH_FASTCALL
#define METH_FASTCALL 0x80
#endif
typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs);
typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args,
Py_ssize_t nargs, PyObject *kwnames);
#else
#if PY_VERSION_HEX >= 0x030d00A4
# define __Pyx_PyCFunctionFast PyCFunctionFast
# define __Pyx_PyCFunctionFastWithKeywords PyCFunctionFastWithKeywords
#else
# define __Pyx_PyCFunctionFast _PyCFunctionFast
# define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords
#endif
#endif
#if CYTHON_METH_FASTCALL
#define __Pyx_METH_FASTCALL METH_FASTCALL
#define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast
#define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords
#else
#define __Pyx_METH_FASTCALL METH_VARARGS
#define __Pyx_PyCFunction_FastCall PyCFunction
#define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords
#endif
#if CYTHON_VECTORCALL
#define __pyx_vectorcallfunc vectorcallfunc
#define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET
#define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n))
#elif CYTHON_BACKPORT_VECTORCALL
typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args,
size_t nargsf, PyObject *kwnames);
#define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1))
#define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET))
#else
#define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0
#define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n))
#endif
#if PY_MAJOR_VERSION >= 0x030900B1
#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_CheckExact(func)
#else
#define __Pyx_PyCFunction_CheckExact(func) PyCFunction_Check(func)
#endif
#define __Pyx_CyOrPyCFunction_Check(func) PyCFunction_Check(func)
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) (((PyCFunctionObject*)(func))->m_ml->ml_meth)
#elif !CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(func)
#endif
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_CyOrPyCFunction_GET_FLAGS(func) (((PyCFunctionObject*)(func))->m_ml->ml_flags)
static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) {
return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self;
}
#endif
static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void *cfunc) {
#if CYTHON_COMPILING_IN_LIMITED_API
return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc;
#else
return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc;
#endif
}
#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCFunction(func, cfunc)
#if __PYX_LIMITED_VERSION_HEX < 0x030900B1
#define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b))
typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *);
#else
#define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b)
#define __Pyx_PyCMethod PyCMethod
#endif
#ifndef METH_METHOD
#define METH_METHOD 0x200
#endif
#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc)
#define PyObject_Malloc(s) PyMem_Malloc(s)
#define PyObject_Free(p) PyMem_Free(p)
#define PyObject_Realloc(p) PyMem_Realloc(p)
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0)
#define __Pyx_PyFrame_SetLineNumber(frame, lineno)
#else
#define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0)
#define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno)
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_PyThreadState_Current PyThreadState_Get()
#elif !CYTHON_FAST_THREAD_STATE
#define __Pyx_PyThreadState_Current PyThreadState_GET()
#elif PY_VERSION_HEX >= 0x030d00A1
#define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked()
#elif PY_VERSION_HEX >= 0x03060000
#define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet()
#elif PY_VERSION_HEX >= 0x03000000
#define __Pyx_PyThreadState_Current PyThreadState_GET()
#else
#define __Pyx_PyThreadState_Current _PyThreadState_Current
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op)
{
void *result;
result = PyModule_GetState(op);
if (!result)
Py_FatalError("Couldn't find the module state");
return result;
}
#endif
#define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype)
#if CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name))
#else
#define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name)
#endif
#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT)
#include "pythread.h"
#define Py_tss_NEEDS_INIT 0
typedef int Py_tss_t;
static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) {
*key = PyThread_create_key();
return 0;
}
static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) {
Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t));
*key = Py_tss_NEEDS_INIT;
return key;
}
static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) {
PyObject_Free(key);
}
static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) {
return *key != Py_tss_NEEDS_INIT;
}
static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) {
PyThread_delete_key(*key);
*key = Py_tss_NEEDS_INIT;
}
static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) {
return PyThread_set_key_value(*key, value);
}
static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
return PyThread_get_key_value(*key);
}
#endif
#if PY_MAJOR_VERSION < 3
#if CYTHON_COMPILING_IN_PYPY
#if PYPY_VERSION_NUM < 0x07030600
#if defined(__cplusplus) && __cplusplus >= 201402L
[[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]]
#elif defined(__GNUC__) || defined(__clang__)
__attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")))
#elif defined(_MSC_VER)
__declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))
#endif
static CYTHON_INLINE int PyGILState_Check(void) {
return 0;
}
#else // PYPY_VERSION_NUM < 0x07030600
#endif // PYPY_VERSION_NUM < 0x07030600
#else
static CYTHON_INLINE int PyGILState_Check(void) {
PyThreadState * tstate = _PyThreadState_Current;
return tstate && (tstate == PyGILState_GetThisThreadState());
}
#endif
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 || defined(_PyDict_NewPresized)
#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n))
#else
#define __Pyx_PyDict_NewPresized(n) PyDict_New()
#endif
#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION
#define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y)
#define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y)
#else
#define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y)
#define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y)
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && PY_VERSION_HEX < 0x030d0000 && CYTHON_USE_UNICODE_INTERNALS
#define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash)
static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) {
PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name);
if (res == NULL) PyErr_Clear();
return res;
}
#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000)
#define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError
#define __Pyx_PyDict_GetItemStr PyDict_GetItem
#else
static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) {
#if CYTHON_COMPILING_IN_PYPY
return PyDict_GetItem(dict, name);
#else
PyDictEntry *ep;
PyDictObject *mp = (PyDictObject*) dict;
long hash = ((PyStringObject *) name)->ob_shash;
assert(hash != -1);
ep = (mp->ma_lookup)(mp, name, hash);
if (ep == NULL) {
return NULL;
}
return ep->me_value;
#endif
}
#define __Pyx_PyDict_GetItemStr PyDict_GetItem
#endif
#if CYTHON_USE_TYPE_SLOTS
#define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags)
#define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0)
#define __Pyx_PyObject_GetIterNextFunc(obj) (Py_TYPE(obj)->tp_iternext)
#else
#define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp))
#define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature)
#define __Pyx_PyObject_GetIterNextFunc(obj) PyIter_Next
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_SetItemOnTypeDict(tp, k, v) PyObject_GenericSetAttr((PyObject*)tp, k, v)
#else
#define __Pyx_SetItemOnTypeDict(tp, k, v) PyDict_SetItem(tp->tp_dict, k, v)
#endif
#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000
#define __Pyx_PyHeapTypeObject_GC_Del(obj) {\
PyTypeObject *type = Py_TYPE((PyObject*)obj);\
assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\
PyObject_GC_Del(obj);\
Py_DECREF(type);\
}
#else
#define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj)
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
#define CYTHON_PEP393_ENABLED 1
#define __Pyx_PyUnicode_READY(op) (0)
#define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GetLength(u)
#define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i)
#define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U)
#define __Pyx_PyUnicode_KIND(u) ((void)u, (0))
#define __Pyx_PyUnicode_DATA(u) ((void*)u)
#define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i))
#define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u))
#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
#define CYTHON_PEP393_ENABLED 1
#if PY_VERSION_HEX >= 0x030C0000
#define __Pyx_PyUnicode_READY(op) (0)
#else
#define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\
0 : _PyUnicode_Ready((PyObject *)(op)))
#endif
#define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u)
#define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
#define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u)
#define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u))
#define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u)
#define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i)
#define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch)
#if PY_VERSION_HEX >= 0x030C0000
#define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u))
#else
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000
#define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length))
#else
#define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
#endif
#endif
#else
#define CYTHON_PEP393_ENABLED 0
#define PyUnicode_1BYTE_KIND 1
#define PyUnicode_2BYTE_KIND 2
#define PyUnicode_4BYTE_KIND 4
#define __Pyx_PyUnicode_READY(op) (0)
#define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u)
#define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
#define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U)
#define __Pyx_PyUnicode_KIND(u) ((int)sizeof(Py_UNICODE))
#define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u))
#define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
#define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch)
#define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u))
#endif
#if CYTHON_COMPILING_IN_PYPY
#define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b)
#define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b)
#else
#define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b)
#define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\
PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
#endif
#if CYTHON_COMPILING_IN_PYPY
#if !defined(PyUnicode_DecodeUnicodeEscape)
#define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors)
#endif
#if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500)
#undef PyUnicode_Contains
#define PyUnicode_Contains(u, s) PySequence_Contains(u, s)
#endif
#if !defined(PyByteArray_Check)
#define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type)
#endif
#if !defined(PyObject_Format)
#define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt)
#endif
#endif
#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
#if PY_MAJOR_VERSION >= 3
#define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b)
#else
#define __Pyx_PyString_Format(a, b) PyString_Format(a, b)
#endif
#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII)
#define PyObject_ASCII(o) PyObject_Repr(o)
#endif
#if PY_MAJOR_VERSION >= 3
#define PyBaseString_Type PyUnicode_Type
#define PyStringObject PyUnicodeObject
#define PyString_Type PyUnicode_Type
#define PyString_Check PyUnicode_Check
#define PyString_CheckExact PyUnicode_CheckExact
#ifndef PyObject_Unicode
#define PyObject_Unicode PyObject_Str
#endif
#endif
#if PY_MAJOR_VERSION >= 3
#define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj)
#define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj)
#else
#define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj))
#define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj))
#endif
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_PySequence_ListKeepNew(obj)\
(likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj))
#else
#define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj)
#endif
#ifndef PySet_CheckExact
#define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type)
#endif
#if PY_VERSION_HEX >= 0x030900A4
#define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt)
#define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size)
#else
#define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt)
#define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size)
#endif
#if CYTHON_ASSUME_SAFE_MACROS
#define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i)
#define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq)
#define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0))
#define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0))
#define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o)
#define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o)
#define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o)
#define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o)
#define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o)
#else
#define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i)
#define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq)
#define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v)
#define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v)
#define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o)
#define __Pyx_PyList_GET_SIZE(o) PyList_Size(o)
#define __Pyx_PySet_GET_SIZE(o) PySet_Size(o)
#define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o)
#define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o)
#endif
#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1
#define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name)
#else
static CYTHON_INLINE PyObject *__Pyx_PyImport_AddModuleRef(const char *name) {
PyObject *module = PyImport_AddModule(name);
Py_XINCREF(module);
return module;
}
#endif
#if PY_MAJOR_VERSION >= 3
#define PyIntObject PyLongObject
#define PyInt_Type PyLong_Type
#define PyInt_Check(op) PyLong_Check(op)
#define PyInt_CheckExact(op) PyLong_CheckExact(op)
#define __Pyx_Py3Int_Check(op) PyLong_Check(op)
#define __Pyx_Py3Int_CheckExact(op) PyLong_CheckExact(op)
#define PyInt_FromString PyLong_FromString
#define PyInt_FromUnicode PyLong_FromUnicode
#define PyInt_FromLong PyLong_FromLong
#define PyInt_FromSize_t PyLong_FromSize_t
#define PyInt_FromSsize_t PyLong_FromSsize_t
#define PyInt_AsLong PyLong_AsLong
#define PyInt_AS_LONG PyLong_AS_LONG
#define PyInt_AsSsize_t PyLong_AsSsize_t
#define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask
#define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
#define PyNumber_Int PyNumber_Long
#else
#define __Pyx_Py3Int_Check(op) (PyLong_Check(op) || PyInt_Check(op))
#define __Pyx_Py3Int_CheckExact(op) (PyLong_CheckExact(op) || PyInt_CheckExact(op))
#endif
#if PY_MAJOR_VERSION >= 3
#define PyBoolObject PyLongObject
#endif
#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY
#ifndef PyUnicode_InternFromString
#define PyUnicode_InternFromString(s) PyUnicode_FromString(s)
#endif
#endif
#if PY_VERSION_HEX < 0x030200A4
typedef long Py_hash_t;
#define __Pyx_PyInt_FromHash_t PyInt_FromLong
#define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t
#else
#define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
#define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t
#endif
#if CYTHON_USE_ASYNC_SLOTS
#if PY_VERSION_HEX >= 0x030500B1
#define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
#define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)
#else
#define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))
#endif
#else
#define __Pyx_PyType_AsAsync(obj) NULL
#endif
#ifndef __Pyx_PyAsyncMethodsStruct
typedef struct {
unaryfunc am_await;
unaryfunc am_aiter;
unaryfunc am_anext;
} __Pyx_PyAsyncMethodsStruct;
#endif
#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS)
#if !defined(_USE_MATH_DEFINES)
#define _USE_MATH_DEFINES
#endif
#endif
#include <math.h>
#ifdef NAN
#define __PYX_NAN() ((float) NAN)
#else
static CYTHON_INLINE float __PYX_NAN() {
float value;
memset(&value, 0xFF, sizeof(value));
return value;
}
#endif
#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL)
#define __Pyx_truncl trunc
#else
#define __Pyx_truncl truncl
#endif
#define __PYX_MARK_ERR_POS(f_index, lineno) \
{ __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; }
#define __PYX_ERR(f_index, lineno, Ln_error) \
{ __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; }
#ifdef CYTHON_EXTERN_C
#undef __PYX_EXTERN_C
#define __PYX_EXTERN_C CYTHON_EXTERN_C
#elif defined(__PYX_EXTERN_C)
#ifdef _MSC_VER
#pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.")
#else
#warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.
#endif
#else
#ifdef __cplusplus
#define __PYX_EXTERN_C extern "C"
#else
#define __PYX_EXTERN_C extern
#endif
#endif
#define __PYX_HAVE__triangle__core
#define __PYX_HAVE_API__triangle__core
/* Early includes */
#include <string.h>
#include <stdlib.h>
#include "triangle.h"
#include "pythread.h"
#ifdef _OPENMP
#include <omp.h>
#endif /* _OPENMP */
#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS)
#define CYTHON_WITHOUT_ASSERTIONS
#endif
typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding;
const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry;
#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0
#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8)
#define __PYX_DEFAULT_STRING_ENCODING ""
#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString
#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
#define __Pyx_uchar_cast(c) ((unsigned char)c)
#define __Pyx_long_cast(x) ((long)x)
#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\
(sizeof(type) < sizeof(Py_ssize_t)) ||\
(sizeof(type) > sizeof(Py_ssize_t) &&\
likely(v < (type)PY_SSIZE_T_MAX ||\
v == (type)PY_SSIZE_T_MAX) &&\
(!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\
v == (type)PY_SSIZE_T_MIN))) ||\
(sizeof(type) == sizeof(Py_ssize_t) &&\
(is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\
v == (type)PY_SSIZE_T_MAX))) )
static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) {
return (size_t) i < (size_t) limit;
}
#if defined (__cplusplus) && __cplusplus >= 201103L
#include <cstdlib>
#define __Pyx_sst_abs(value) std::abs(value)
#elif SIZEOF_INT >= SIZEOF_SIZE_T
#define __Pyx_sst_abs(value) abs(value)
#elif SIZEOF_LONG >= SIZEOF_SIZE_T
#define __Pyx_sst_abs(value) labs(value)
#elif defined (_MSC_VER)
#define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value))
#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#define __Pyx_sst_abs(value) llabs(value)
#elif defined (__GNUC__)
#define __Pyx_sst_abs(value) __builtin_llabs(value)
#else
#define __Pyx_sst_abs(value) ((value<0) ? -value : value)
#endif
static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s);
static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*);
static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*);
#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l)
#define __Pyx_PyBytes_FromString PyBytes_FromString
#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*);
#if PY_MAJOR_VERSION < 3
#define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString
#define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
#else
#define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString
#define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize
#endif
#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s))
#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s))
#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s))
#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s))
#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s))
#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s))
#define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s)
#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s)
#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s)
#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s)
#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s)
#define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o)
#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode
#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj)
#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None)
static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b);
static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*);
static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
#define __Pyx_PySequence_Tuple(obj)\
(likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*);
#if CYTHON_ASSUME_SAFE_MACROS
#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
#else
#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
#endif
#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
#if PY_MAJOR_VERSION >= 3
#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x))
#else
#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x))
#endif
#if CYTHON_USE_PYLONG_INTERNALS
#if PY_VERSION_HEX >= 0x030C00A7
#ifndef _PyLong_SIGN_MASK
#define _PyLong_SIGN_MASK 3
#endif
#ifndef _PyLong_NON_SIZE_BITS
#define _PyLong_NON_SIZE_BITS 3
#endif
#define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK)
#define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0)
#define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x))
#define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1)
#define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0)
#define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0])
#define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS))
#define __Pyx_PyLong_SignedDigitCount(x)\
((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x))
#if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue)
#define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x)
#define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x)
#else
#define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS))
#define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0])
#endif
typedef Py_ssize_t __Pyx_compact_pylong;
typedef size_t __Pyx_compact_upylong;
#else
#define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0)
#define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0)
#define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0)
#define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0)
#define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0])
#define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x))
#define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x)
#define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1)
#define __Pyx_PyLong_CompactValue(x)\
((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0]))
typedef sdigit __Pyx_compact_pylong;
typedef digit __Pyx_compact_upylong;
#endif
#if PY_VERSION_HEX >= 0x030C00A5
#define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit)
#else
#define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit)
#endif
#endif
#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
#include <string.h>
static int __Pyx_sys_getdefaultencoding_not_ascii;
static int __Pyx_init_sys_getdefaultencoding_params(void) {
PyObject* sys;
PyObject* default_encoding = NULL;
PyObject* ascii_chars_u = NULL;
PyObject* ascii_chars_b = NULL;
const char* default_encoding_c;
sys = PyImport_ImportModule("sys");
if (!sys) goto bad;
default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL);
Py_DECREF(sys);
if (!default_encoding) goto bad;
default_encoding_c = PyBytes_AsString(default_encoding);
if (!default_encoding_c) goto bad;
if (strcmp(default_encoding_c, "ascii") == 0) {
__Pyx_sys_getdefaultencoding_not_ascii = 0;
} else {
char ascii_chars[128];
int c;
for (c = 0; c < 128; c++) {
ascii_chars[c] = (char) c;
}
__Pyx_sys_getdefaultencoding_not_ascii = 1;
ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL);
if (!ascii_chars_u) goto bad;
ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL);
if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) {
PyErr_Format(
PyExc_ValueError,
"This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.",
default_encoding_c);
goto bad;
}
Py_DECREF(ascii_chars_u);
Py_DECREF(ascii_chars_b);
}
Py_DECREF(default_encoding);
return 0;
bad:
Py_XDECREF(default_encoding);
Py_XDECREF(ascii_chars_u);
Py_XDECREF(ascii_chars_b);
return -1;
}
#endif
#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3
#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL)
#else
#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL)
#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
#include <string.h>
static char* __PYX_DEFAULT_STRING_ENCODING;
static int __Pyx_init_sys_getdefaultencoding_params(void) {
PyObject* sys;
PyObject* default_encoding = NULL;
char* default_encoding_c;
sys = PyImport_ImportModule("sys");
if (!sys) goto bad;
default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL);
Py_DECREF(sys);
if (!default_encoding) goto bad;
default_encoding_c = PyBytes_AsString(default_encoding);
if (!default_encoding_c) goto bad;
__PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1);
if (!__PYX_DEFAULT_STRING_ENCODING) goto bad;
strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c);
Py_DECREF(default_encoding);
return 0;
bad:
Py_XDECREF(default_encoding);
return -1;
}
#endif
#endif
/* Test for GCC > 2.95 */
#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
#else /* !__GNUC__ or GCC < 2.95 */
#define likely(x) (x)
#define unlikely(x) (x)
#endif /* __GNUC__ */
static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; }
#if !CYTHON_USE_MODULE_STATE
static PyObject *__pyx_m = NULL;
#endif
static int __pyx_lineno;
static int __pyx_clineno = 0;
static const char * __pyx_cfilenm = __FILE__;
static const char *__pyx_filename;
/* #### Code section: filename_table ### */
static const char *__pyx_f[] = {
"triangle/core.pyx",
"<stringsource>",
};
/* #### Code section: utility_code_proto_before_types ### */
/* ForceInitThreads.proto */
#ifndef __PYX_FORCE_INIT_THREADS
#define __PYX_FORCE_INIT_THREADS 0
#endif
/* NoFastGil.proto */
#define __Pyx_PyGILState_Ensure PyGILState_Ensure
#define __Pyx_PyGILState_Release PyGILState_Release
#define __Pyx_FastGIL_Remember()
#define __Pyx_FastGIL_Forget()
#define __Pyx_FastGilFuncInit()
/* BufferFormatStructs.proto */
struct __Pyx_StructField_;
#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0)
typedef struct {
const char* name;
struct __Pyx_StructField_* fields;
size_t size;
size_t arraysize[8];
int ndim;
char typegroup;
char is_unsigned;
int flags;
} __Pyx_TypeInfo;
typedef struct __Pyx_StructField_ {
__Pyx_TypeInfo* type;
const char* name;
size_t offset;
} __Pyx_StructField;
typedef struct {
__Pyx_StructField* field;
size_t parent_offset;
} __Pyx_BufFmt_StackElem;
typedef struct {
__Pyx_StructField root;
__Pyx_BufFmt_StackElem* head;
size_t fmt_offset;
size_t new_count, enc_count;
size_t struct_alignment;
int is_complex;
char enc_type;
char new_packmode;
char enc_packmode;
char is_valid_array;
} __Pyx_BufFmt_Context;
/* Atomics.proto */
#include <pythread.h>
#ifndef CYTHON_ATOMICS
#define CYTHON_ATOMICS 1
#endif
#define __PYX_CYTHON_ATOMICS_ENABLED() CYTHON_ATOMICS
#define __pyx_atomic_int_type int
#define __pyx_nonatomic_int_type int
#if CYTHON_ATOMICS && (defined(__STDC_VERSION__) &&\
(__STDC_VERSION__ >= 201112L) &&\
!defined(__STDC_NO_ATOMICS__))
#include <stdatomic.h>
#elif CYTHON_ATOMICS && (defined(__cplusplus) && (\
(__cplusplus >= 201103L) ||\
(defined(_MSC_VER) && _MSC_VER >= 1700)))
#include <atomic>
#endif
#if CYTHON_ATOMICS && (defined(__STDC_VERSION__) &&\
(__STDC_VERSION__ >= 201112L) &&\
!defined(__STDC_NO_ATOMICS__) &&\
ATOMIC_INT_LOCK_FREE == 2)
#undef __pyx_atomic_int_type
#define __pyx_atomic_int_type atomic_int
#define __pyx_atomic_incr_aligned(value) atomic_fetch_add_explicit(value, 1, memory_order_relaxed)
#define __pyx_atomic_decr_aligned(value) atomic_fetch_sub_explicit(value, 1, memory_order_acq_rel)
#if defined(__PYX_DEBUG_ATOMICS) && defined(_MSC_VER)
#pragma message ("Using standard C atomics")
#elif defined(__PYX_DEBUG_ATOMICS)
#warning "Using standard C atomics"
#endif
#elif CYTHON_ATOMICS && (defined(__cplusplus) && (\
(__cplusplus >= 201103L) ||\
\
(defined(_MSC_VER) && _MSC_VER >= 1700)) &&\
ATOMIC_INT_LOCK_FREE == 2)
#undef __pyx_atomic_int_type
#define __pyx_atomic_int_type std::atomic_int
#define __pyx_atomic_incr_aligned(value) std::atomic_fetch_add_explicit(value, 1, std::memory_order_relaxed)
#define __pyx_atomic_decr_aligned(value) std::atomic_fetch_sub_explicit(value, 1, std::memory_order_acq_rel)
#if defined(__PYX_DEBUG_ATOMICS) && defined(_MSC_VER)
#pragma message ("Using standard C++ atomics")
#elif defined(__PYX_DEBUG_ATOMICS)
#warning "Using standard C++ atomics"
#endif
#elif CYTHON_ATOMICS && (__GNUC__ >= 5 || (__GNUC__ == 4 &&\
(__GNUC_MINOR__ > 1 ||\
(__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ >= 2))))
#define __pyx_atomic_incr_aligned(value) __sync_fetch_and_add(value, 1)
#define __pyx_atomic_decr_aligned(value) __sync_fetch_and_sub(value, 1)
#ifdef __PYX_DEBUG_ATOMICS
#warning "Using GNU atomics"
#endif
#elif CYTHON_ATOMICS && defined(_MSC_VER)
#include <intrin.h>
#undef __pyx_atomic_int_type
#define __pyx_atomic_int_type long
#undef __pyx_nonatomic_int_type
#define __pyx_nonatomic_int_type long
#pragma intrinsic (_InterlockedExchangeAdd)
#define __pyx_atomic_incr_aligned(value) _InterlockedExchangeAdd(value, 1)
#define __pyx_atomic_decr_aligned(value) _InterlockedExchangeAdd(value, -1)
#ifdef __PYX_DEBUG_ATOMICS
#pragma message ("Using MSVC atomics")
#endif
#else
#undef CYTHON_ATOMICS
#define CYTHON_ATOMICS 0
#ifdef __PYX_DEBUG_ATOMICS
#warning "Not using atomics"
#endif
#endif
#if CYTHON_ATOMICS
#define __pyx_add_acquisition_count(memview)\
__pyx_atomic_incr_aligned(__pyx_get_slice_count_pointer(memview))
#define __pyx_sub_acquisition_count(memview)\
__pyx_atomic_decr_aligned(__pyx_get_slice_count_pointer(memview))
#else
#define __pyx_add_acquisition_count(memview)\
__pyx_add_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock)
#define __pyx_sub_acquisition_count(memview)\
__pyx_sub_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock)
#endif
/* MemviewSliceStruct.proto */
struct __pyx_memoryview_obj;
typedef struct {
struct __pyx_memoryview_obj *memview;
char *data;
Py_ssize_t shape[8];
Py_ssize_t strides[8];
Py_ssize_t suboffsets[8];
} __Pyx_memviewslice;
#define __Pyx_MemoryView_Len(m) (m.shape[0])
/* #### Code section: numeric_typedefs ### */
/* #### Code section: complex_type_declarations ### */
/* #### Code section: type_declarations ### */
/*--- Type declarations ---*/
struct __pyx_obj_8triangle_4core___pyx_scope_struct____pyx_f_8triangle_4core_ii;
struct __pyx_obj_8triangle_4core___pyx_scope_struct_1___pyx_f_8triangle_4core_dd;
struct __pyx_obj_8triangle_4core___pyx_scope_struct_2___pyx_f_8triangle_4core__wrap;
struct __pyx_array_obj;
struct __pyx_MemviewEnum_obj;
struct __pyx_memoryview_obj;
struct __pyx_memoryviewslice_obj;
/* "triangle/core.pyx":67
*
*
* cdef ii(int* _0, int* _1, int** pdata, check, free_): # <<<<<<<<<<<<<<
*
* def _get():
*/
struct __pyx_obj_8triangle_4core___pyx_scope_struct____pyx_f_8triangle_4core_ii {
PyObject_HEAD
int *__pyx_v__0;
int *__pyx_v__1;
PyObject *__pyx_v_check;
PyObject *__pyx_v_free_;
int **__pyx_v_pdata;
};
/* "triangle/core.pyx":87
*
*
* cdef dd(int* _0, int* _1, double** pdata, check, free_): # <<<<<<<<<<<<<<
*
* def _get():
*/
struct __pyx_obj_8triangle_4core___pyx_scope_struct_1___pyx_f_8triangle_4core_dd {
PyObject_HEAD
int *__pyx_v__0;
int *__pyx_v__1;
PyObject *__pyx_v_check;
PyObject *__pyx_v_free_;
double **__pyx_v_pdata;
};
/* "triangle/core.pyx":108
*
*
* cdef _wrap(triangulateio* c): # <<<<<<<<<<<<<<
*
* cdef int _1 = 1
*/
struct __pyx_obj_8triangle_4core___pyx_scope_struct_2___pyx_f_8triangle_4core__wrap {
PyObject_HEAD
int __pyx_v__1;
int __pyx_v__2;
int __pyx_v__3;
int __pyx_v__4;
};
/* "View.MemoryView":114
* @cython.collection_type("sequence")
* @cname("__pyx_array")
* cdef class array: # <<<<<<<<<<<<<<
*
* cdef:
*/
struct __pyx_array_obj {
PyObject_HEAD
struct __pyx_vtabstruct_array *__pyx_vtab;
char *data;
Py_ssize_t len;
char *format;
int ndim;
Py_ssize_t *_shape;
Py_ssize_t *_strides;
Py_ssize_t itemsize;
PyObject *mode;
PyObject *_format;
void (*callback_free_data)(void *);
int free_data;
int dtype_is_object;
};
/* "View.MemoryView":302
*
* @cname('__pyx_MemviewEnum')
* cdef class Enum(object): # <<<<<<<<<<<<<<
* cdef object name
* def __init__(self, name):
*/
struct __pyx_MemviewEnum_obj {
PyObject_HEAD
PyObject *name;
};
/* "View.MemoryView":337
*
* @cname('__pyx_memoryview')
* cdef class memoryview: # <<<<<<<<<<<<<<
*
* cdef object obj
*/
struct __pyx_memoryview_obj {
PyObject_HEAD
struct __pyx_vtabstruct_memoryview *__pyx_vtab;
PyObject *obj;
PyObject *_size;
PyObject *_array_interface;
PyThread_type_lock lock;
__pyx_atomic_int_type acquisition_count;
Py_buffer view;
int flags;
int dtype_is_object;
__Pyx_TypeInfo *typeinfo;
};
/* "View.MemoryView":952
* @cython.collection_type("sequence")
* @cname('__pyx_memoryviewslice')
* cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<<
* "Internal class for passing memoryview slices to Python"
*
*/
struct __pyx_memoryviewslice_obj {
struct __pyx_memoryview_obj __pyx_base;
__Pyx_memviewslice from_slice;
PyObject *from_object;
PyObject *(*to_object_func)(char *);
int (*to_dtype_func)(char *, PyObject *);
};
/* "View.MemoryView":114
* @cython.collection_type("sequence")
* @cname("__pyx_array")
* cdef class array: # <<<<<<<<<<<<<<
*
* cdef:
*/
struct __pyx_vtabstruct_array {
PyObject *(*get_memview)(struct __pyx_array_obj *);
};
static struct __pyx_vtabstruct_array *__pyx_vtabptr_array;
/* "View.MemoryView":337
*
* @cname('__pyx_memoryview')
* cdef class memoryview: # <<<<<<<<<<<<<<
*
* cdef object obj
*/
struct __pyx_vtabstruct_memoryview {
char *(*get_item_pointer)(struct __pyx_memoryview_obj *, PyObject *);
PyObject *(*is_slice)(struct __pyx_memoryview_obj *, PyObject *);
PyObject *(*setitem_slice_assignment)(struct __pyx_memoryview_obj *, PyObject *, PyObject *);
PyObject *(*setitem_slice_assign_scalar)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *);
PyObject *(*setitem_indexed)(struct __pyx_memoryview_obj *, PyObject *, PyObject *);
PyObject *(*convert_item_to_object)(struct __pyx_memoryview_obj *, char *);
PyObject *(*assign_item_from_object)(struct __pyx_memoryview_obj *, char *, PyObject *);
PyObject *(*_get_base)(struct __pyx_memoryview_obj *);
};
static struct __pyx_vtabstruct_memoryview *__pyx_vtabptr_memoryview;
/* "View.MemoryView":952
* @cython.collection_type("sequence")
* @cname('__pyx_memoryviewslice')
* cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<<
* "Internal class for passing memoryview slices to Python"
*
*/
struct __pyx_vtabstruct__memoryviewslice {
struct __pyx_vtabstruct_memoryview __pyx_base;
};
static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice;
/* #### Code section: utility_code_proto ### */
/* --- Runtime support code (head) --- */
/* Refnanny.proto */
#ifndef CYTHON_REFNANNY
#define CYTHON_REFNANNY 0
#endif
#if CYTHON_REFNANNY
typedef struct {
void (*INCREF)(void*, PyObject*, Py_ssize_t);
void (*DECREF)(void*, PyObject*, Py_ssize_t);
void (*GOTREF)(void*, PyObject*, Py_ssize_t);
void (*GIVEREF)(void*, PyObject*, Py_ssize_t);
void* (*SetupContext)(const char*, Py_ssize_t, const char*);
void (*FinishContext)(void**);
} __Pyx_RefNannyAPIStruct;
static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname);
#define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
#ifdef WITH_THREAD
#define __Pyx_RefNannySetupContext(name, acquire_gil)\
if (acquire_gil) {\
PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
__pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\
PyGILState_Release(__pyx_gilstate_save);\
} else {\
__pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\
}
#define __Pyx_RefNannyFinishContextNogil() {\
PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
__Pyx_RefNannyFinishContext();\
PyGILState_Release(__pyx_gilstate_save);\
}
#else
#define __Pyx_RefNannySetupContext(name, acquire_gil)\
__pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__))
#define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext()
#endif
#define __Pyx_RefNannyFinishContextNogil() {\
PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
__Pyx_RefNannyFinishContext();\
PyGILState_Release(__pyx_gilstate_save);\
}
#define __Pyx_RefNannyFinishContext()\
__Pyx_RefNanny->FinishContext(&__pyx_refnanny)
#define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__))
#define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__))
#define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__))
#define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__))
#define __Pyx_XINCREF(r) do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0)
#define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0)
#define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0)
#define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0)
#else
#define __Pyx_RefNannyDeclarations
#define __Pyx_RefNannySetupContext(name, acquire_gil)
#define __Pyx_RefNannyFinishContextNogil()
#define __Pyx_RefNannyFinishContext()
#define __Pyx_INCREF(r) Py_INCREF(r)
#define __Pyx_DECREF(r) Py_DECREF(r)
#define __Pyx_GOTREF(r)
#define __Pyx_GIVEREF(r)
#define __Pyx_XINCREF(r) Py_XINCREF(r)
#define __Pyx_XDECREF(r) Py_XDECREF(r)
#define __Pyx_XGOTREF(r)
#define __Pyx_XGIVEREF(r)
#endif
#define __Pyx_Py_XDECREF_SET(r, v) do {\
PyObject *tmp = (PyObject *) r;\
r = v; Py_XDECREF(tmp);\
} while (0)
#define __Pyx_XDECREF_SET(r, v) do {\
PyObject *tmp = (PyObject *) r;\
r = v; __Pyx_XDECREF(tmp);\
} while (0)
#define __Pyx_DECREF_SET(r, v) do {\
PyObject *tmp = (PyObject *) r;\
r = v; __Pyx_DECREF(tmp);\
} while (0)
#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
/* PyErrExceptionMatches.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err)
static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err);
#else
#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err)
#endif
/* PyThreadStateGet.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate;
#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current;
#if PY_VERSION_HEX >= 0x030C00A6
#define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL)
#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL)
#else
#define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL)
#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type)
#endif
#else
#define __Pyx_PyThreadState_declare
#define __Pyx_PyThreadState_assign
#define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL)
#define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred()
#endif
/* PyErrFetchRestore.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL)
#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb)
#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb)
#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb)
#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6
#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL))
#else
#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
#endif
#else
#define __Pyx_PyErr_Clear() PyErr_Clear()
#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb)
#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb)
#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb)
#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb)
#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb)
#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb)
#endif
/* PyObjectGetAttrStr.proto */
#if CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name);
#else
#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
#endif
/* PyObjectGetAttrStrNoError.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name);
/* GetBuiltinName.proto */
static PyObject *__Pyx_GetBuiltinName(PyObject *name);
/* TupleAndListFromArray.proto */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n);
static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n);
#endif
/* IncludeStringH.proto */
#include <string.h>
/* BytesEquals.proto */
static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals);
/* UnicodeEquals.proto */
static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals);
/* fastcall.proto */
#if CYTHON_AVOID_BORROWED_REFS
#define __Pyx_Arg_VARARGS(args, i) PySequence_GetItem(args, i)
#elif CYTHON_ASSUME_SAFE_MACROS
#define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i)
#else
#define __Pyx_Arg_VARARGS(args, i) PyTuple_GetItem(args, i)
#endif
#if CYTHON_AVOID_BORROWED_REFS
#define __Pyx_Arg_NewRef_VARARGS(arg) __Pyx_NewRef(arg)
#define __Pyx_Arg_XDECREF_VARARGS(arg) Py_XDECREF(arg)
#else
#define __Pyx_Arg_NewRef_VARARGS(arg) arg
#define __Pyx_Arg_XDECREF_VARARGS(arg)
#endif
#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds)
#define __Pyx_KwValues_VARARGS(args, nargs) NULL
#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s)
#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw)
#if CYTHON_METH_FASTCALL
#define __Pyx_Arg_FASTCALL(args, i) args[i]
#define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds)
#define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs))
static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000
CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues);
#else
#define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw)
#endif
#define __Pyx_Arg_NewRef_FASTCALL(arg) arg /* no-op, __Pyx_Arg_FASTCALL is direct and this needs
to have the same reference counting */
#define __Pyx_Arg_XDECREF_FASTCALL(arg)
#else
#define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS
#define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS
#define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS
#define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS
#define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS
#define __Pyx_Arg_NewRef_FASTCALL(arg) __Pyx_Arg_NewRef_VARARGS(arg)
#define __Pyx_Arg_XDECREF_FASTCALL(arg) __Pyx_Arg_XDECREF_VARARGS(arg)
#endif
#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start)
#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start)
#else
#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop)
#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop)
#endif
/* RaiseArgTupleInvalid.proto */
static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found);
/* RaiseDoubleKeywords.proto */
static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);
/* ParseKeywords.proto */
static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues,
PyObject **argnames[],
PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,
const char* function_name);
/* ArgTypeTest.proto */
#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\
((likely(__Pyx_IS_TYPE(obj, type) | (none_allowed && (obj == Py_None)))) ? 1 :\
__Pyx__ArgTypeTest(obj, type, name, exact))
static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact);
/* RaiseException.proto */
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);
/* PyFunctionFastCall.proto */
#if CYTHON_FAST_PYCALL
#if !CYTHON_VECTORCALL
#define __Pyx_PyFunction_FastCall(func, args, nargs)\
__Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL)
static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs);
#endif
#define __Pyx_BUILD_ASSERT_EXPR(cond)\
(sizeof(char [1 - 2*!(cond)]) - 1)
#ifndef Py_MEMBER_SIZE
#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member)
#endif
#if !CYTHON_VECTORCALL
#if PY_VERSION_HEX >= 0x03080000
#include "frameobject.h"
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API
#ifndef Py_BUILD_CORE
#define Py_BUILD_CORE 1
#endif
#include "internal/pycore_frame.h"
#endif
#define __Pxy_PyFrame_Initialize_Offsets()
#define __Pyx_PyFrame_GetLocalsplus(frame) ((frame)->f_localsplus)
#else
static size_t __pyx_pyframe_localsplus_offset = 0;
#include "frameobject.h"
#define __Pxy_PyFrame_Initialize_Offsets()\
((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\
(void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus)))
#define __Pyx_PyFrame_GetLocalsplus(frame)\
(assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset))
#endif
#endif
#endif
/* PyObjectCall.proto */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
#else
#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
#endif
/* PyObjectCallMethO.proto */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg);
#endif
/* PyObjectFastCall.proto */
#define __Pyx_PyObject_FastCall(func, args, nargs) __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL)
static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs);
/* RaiseUnexpectedTypeError.proto */
static int __Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj);
/* GCCDiagnostics.proto */
#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
#define __Pyx_HAS_GCC_DIAGNOSTIC
#endif
/* BuildPyUnicode.proto */
static PyObject* __Pyx_PyUnicode_BuildFromAscii(Py_ssize_t ulength, char* chars, int clength,
int prepend_sign, char padding_char);
/* CIntToPyUnicode.proto */
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_int(int value, Py_ssize_t width, char padding_char, char format_char);
/* CIntToPyUnicode.proto */
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_Py_ssize_t(Py_ssize_t value, Py_ssize_t width, char padding_char, char format_char);
/* JoinPyUnicode.proto */
static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength,
Py_UCS4 max_char);
/* StrEquals.proto */
#if PY_MAJOR_VERSION >= 3
#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals
#else
#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals
#endif
/* PyObjectFormatSimple.proto */
#if CYTHON_COMPILING_IN_PYPY
#define __Pyx_PyObject_FormatSimple(s, f) (\
likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
PyObject_Format(s, f))
#elif PY_MAJOR_VERSION < 3
#define __Pyx_PyObject_FormatSimple(s, f) (\
likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
likely(PyString_CheckExact(s)) ? PyUnicode_FromEncodedObject(s, NULL, "strict") :\
PyObject_Format(s, f))
#elif CYTHON_USE_TYPE_SLOTS
#define __Pyx_PyObject_FormatSimple(s, f) (\
likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
likely(PyLong_CheckExact(s)) ? PyLong_Type.tp_repr(s) :\
likely(PyFloat_CheckExact(s)) ? PyFloat_Type.tp_repr(s) :\
PyObject_Format(s, f))
#else
#define __Pyx_PyObject_FormatSimple(s, f) (\
likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
PyObject_Format(s, f))
#endif
CYTHON_UNUSED static int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *); /*proto*/
/* GetAttr.proto */
static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *);
/* GetItemInt.proto */
#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
(__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
__Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\
(is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\
__Pyx_GetItemInt_Generic(o, to_py_func(i))))
#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
(__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
__Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
(PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
int wraparound, int boundscheck);
#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
(__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
__Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
(PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL))
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
int wraparound, int boundscheck);
static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j);
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
int is_list, int wraparound, int boundscheck);
/* PyObjectCallOneArg.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg);
/* ObjectGetItem.proto */
#if CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key);
#else
#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key)
#endif
/* KeywordStringCheck.proto */
static int __Pyx_CheckKeywordStrings(PyObject *kw, const char* function_name, int kw_allowed);
/* DivInt[Py_ssize_t].proto */
static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t, Py_ssize_t);
/* UnaryNegOverflows.proto */
#define __Pyx_UNARY_NEG_WOULD_OVERFLOW(x)\
(((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x)))
/* GetAttr3.proto */
static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *);
/* PyDictVersioning.proto */
#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS
#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1)
#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag)
#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\
(version_var) = __PYX_GET_DICT_VERSION(dict);\
(cache_var) = (value);
#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\
static PY_UINT64_T __pyx_dict_version = 0;\
static PyObject *__pyx_dict_cached_value = NULL;\
if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\
(VAR) = __pyx_dict_cached_value;\
} else {\
(VAR) = __pyx_dict_cached_value = (LOOKUP);\
__pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\
}\
}
static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj);
static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj);
static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version);
#else
#define __PYX_GET_DICT_VERSION(dict) (0)
#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)
#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP);
#endif
/* GetModuleGlobalName.proto */
#if CYTHON_USE_DICT_VERSIONS
#define __Pyx_GetModuleGlobalName(var, name) do {\
static PY_UINT64_T __pyx_dict_version = 0;\
static PyObject *__pyx_dict_cached_value = NULL;\
(var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\
(likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\
__Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
} while(0)
#define __Pyx_GetModuleGlobalNameUncached(var, name) do {\
PY_UINT64_T __pyx_dict_version;\
PyObject *__pyx_dict_cached_value;\
(var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
} while(0)
static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value);
#else
#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name)
#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name)
static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name);
#endif
/* AssertionsEnabled.proto */
#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
#define __Pyx_init_assertions_enabled() (0)
#define __pyx_assertions_enabled() (1)
#elif CYTHON_COMPILING_IN_LIMITED_API || (CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030C0000)
static int __pyx_assertions_enabled_flag;
#define __pyx_assertions_enabled() (__pyx_assertions_enabled_flag)
static int __Pyx_init_assertions_enabled(void) {
PyObject *builtins, *debug, *debug_str;
int flag;
builtins = PyEval_GetBuiltins();
if (!builtins) goto bad;
debug_str = PyUnicode_FromStringAndSize("__debug__", 9);
if (!debug_str) goto bad;
debug = PyObject_GetItem(builtins, debug_str);
Py_DECREF(debug_str);
if (!debug) goto bad;
flag = PyObject_IsTrue(debug);
Py_DECREF(debug);
if (flag == -1) goto bad;
__pyx_assertions_enabled_flag = flag;
return 0;
bad:
__pyx_assertions_enabled_flag = 1;
return -1;
}
#else
#define __Pyx_init_assertions_enabled() (0)
#define __pyx_assertions_enabled() (!Py_OptimizeFlag)
#endif
/* RaiseTooManyValuesToUnpack.proto */
static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
/* RaiseNeedMoreValuesToUnpack.proto */
static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
/* RaiseNoneIterError.proto */
static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);
/* ExtTypeTest.proto */
static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type);
/* GetTopmostException.proto */
#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE
static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate);
#endif
/* SaveResetException.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
#else
#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb)
#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb)
#endif
/* GetException.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb)
static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#else
static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);
#endif
/* SwapException.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#else
static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb);
#endif
/* Import.proto */
static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
/* ImportDottedModule.proto */
static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple);
#if PY_MAJOR_VERSION >= 3
static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple);
#endif
/* FastTypeChecks.proto */
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type)
#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2)
static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b);
static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b);
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type);
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2);
#else
#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2))
#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type)
#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2))
#endif
#define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2)
#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)
CYTHON_UNUSED static int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
/* ListCompAppend.proto */
#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
PyListObject* L = (PyListObject*) list;
Py_ssize_t len = Py_SIZE(list);
if (likely(L->allocated > len)) {
Py_INCREF(x);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000
L->ob_item[len] = x;
#else
PyList_SET_ITEM(list, len, x);
#endif
__Pyx_SET_SIZE(list, len + 1);
return 0;
}
return PyList_Append(list, x);
}
#else
#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x)
#endif
/* PySequenceMultiply.proto */
#define __Pyx_PySequence_Multiply_Left(mul, seq) __Pyx_PySequence_Multiply(seq, mul)
static CYTHON_INLINE PyObject* __Pyx_PySequence_Multiply(PyObject *seq, Py_ssize_t mul);
/* SetItemInt.proto */
#define __Pyx_SetItemInt(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
(__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
__Pyx_SetItemInt_Fast(o, (Py_ssize_t)i, v, is_list, wraparound, boundscheck) :\
(is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) :\
__Pyx_SetItemInt_Generic(o, to_py_func(i), v)))
static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v);
static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v,
int is_list, int wraparound, int boundscheck);
/* RaiseUnboundLocalError.proto */
static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname);
/* DivInt[long].proto */
static CYTHON_INLINE long __Pyx_div_long(long, long);
/* PySequenceContains.proto */
static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) {
int result = PySequence_Contains(seq, item);
return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
}
/* ImportFrom.proto */
static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
/* HasAttr.proto */
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);
/* ListAppend.proto */
#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
PyListObject* L = (PyListObject*) list;
Py_ssize_t len = Py_SIZE(list);
if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) {
Py_INCREF(x);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000
L->ob_item[len] = x;
#else
PyList_SET_ITEM(list, len, x);
#endif
__Pyx_SET_SIZE(list, len + 1);
return 0;
}
return PyList_Append(list, x);
}
#else
#define __Pyx_PyList_Append(L,x) PyList_Append(L,x)
#endif
/* PyObjectCall2Args.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2);
/* PyObjectGetMethod.proto */
static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method);
/* PyObjectCallMethod1.proto */
static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg);
/* StringJoin.proto */
#if PY_MAJOR_VERSION < 3
#define __Pyx_PyString_Join __Pyx_PyBytes_Join
#define __Pyx_PyBaseString_Join(s, v) (PyUnicode_CheckExact(s) ? PyUnicode_Join(s, v) : __Pyx_PyBytes_Join(s, v))
#else
#define __Pyx_PyString_Join PyUnicode_Join
#define __Pyx_PyBaseString_Join PyUnicode_Join
#endif
static CYTHON_INLINE PyObject* __Pyx_PyBytes_Join(PyObject* sep, PyObject* values);
/* CIntToPyUnicode.proto */
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_size_t(size_t value, Py_ssize_t width, char padding_char, char format_char);
/* BufferIndexError.proto */
static void __Pyx_RaiseBufferIndexError(int axis);
/* IterFinish.proto */
static CYTHON_INLINE int __Pyx_IterFinish(void);
/* UnpackItemEndCheck.proto */
static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected);
/* RaiseClosureNameError.proto */
static CYTHON_INLINE void __Pyx_RaiseClosureNameError(const char *varname);
/* IncludeStructmemberH.proto */
#include <structmember.h>
/* FixUpExtensionType.proto */
#if CYTHON_USE_TYPE_SPECS
static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type);
#endif
/* FetchSharedCythonModule.proto */
static PyObject *__Pyx_FetchSharedCythonABIModule(void);
/* FetchCommonType.proto */
#if !CYTHON_USE_TYPE_SPECS
static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type);
#else
static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases);
#endif
/* PyMethodNew.proto */
#if CYTHON_COMPILING_IN_LIMITED_API
static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) {
PyObject *typesModule=NULL, *methodType=NULL, *result=NULL;
CYTHON_UNUSED_VAR(typ);
if (!self)
return __Pyx_NewRef(func);
typesModule = PyImport_ImportModule("types");
if (!typesModule) return NULL;
methodType = PyObject_GetAttrString(typesModule, "MethodType");
Py_DECREF(typesModule);
if (!methodType) return NULL;
result = PyObject_CallFunctionObjArgs(methodType, func, self, NULL);
Py_DECREF(methodType);
return result;
}
#elif PY_MAJOR_VERSION >= 3
static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) {
CYTHON_UNUSED_VAR(typ);
if (!self)
return __Pyx_NewRef(func);
return PyMethod_New(func, self);
}
#else
#define __Pyx_PyMethod_New PyMethod_New
#endif
/* PyVectorcallFastCallDict.proto */
#if CYTHON_METH_FASTCALL
static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw);
#endif
/* CythonFunctionShared.proto */
#define __Pyx_CyFunction_USED
#define __Pyx_CYFUNCTION_STATICMETHOD 0x01
#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02
#define __Pyx_CYFUNCTION_CCLASS 0x04
#define __Pyx_CYFUNCTION_COROUTINE 0x08
#define __Pyx_CyFunction_GetClosure(f)\
(((__pyx_CyFunctionObject *) (f))->func_closure)
#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_CyFunction_GetClassObj(f)\
(((__pyx_CyFunctionObject *) (f))->func_classobj)
#else
#define __Pyx_CyFunction_GetClassObj(f)\
((PyObject*) ((PyCMethodObject *) (f))->mm_class)
#endif
#define __Pyx_CyFunction_SetClassObj(f, classobj)\
__Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj))
#define __Pyx_CyFunction_Defaults(type, f)\
((type *)(((__pyx_CyFunctionObject *) (f))->defaults))
#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\
((__pyx_CyFunctionObject *) (f))->defaults_getter = (g)
typedef struct {
#if CYTHON_COMPILING_IN_LIMITED_API
PyObject_HEAD
PyObject *func;
#elif PY_VERSION_HEX < 0x030900B1
PyCFunctionObject func;
#else
PyCMethodObject func;
#endif
#if CYTHON_BACKPORT_VECTORCALL
__pyx_vectorcallfunc func_vectorcall;
#endif
#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API
PyObject *func_weakreflist;
#endif
PyObject *func_dict;
PyObject *func_name;
PyObject *func_qualname;
PyObject *func_doc;
PyObject *func_globals;
PyObject *func_code;
PyObject *func_closure;
#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
PyObject *func_classobj;
#endif
void *defaults;
int defaults_pyobjects;
size_t defaults_size;
int flags;
PyObject *defaults_tuple;
PyObject *defaults_kwdict;
PyObject *(*defaults_getter)(PyObject *);
PyObject *func_annotations;
PyObject *func_is_coroutine;
} __pyx_CyFunctionObject;
#undef __Pyx_CyOrPyCFunction_Check
#define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_CyFunctionType)
#define __Pyx_CyOrPyCFunction_Check(obj) __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type)
#define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CyFunctionType)
static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc);
#undef __Pyx_IsSameCFunction
#define __Pyx_IsSameCFunction(func, cfunc) __Pyx__IsSameCyOrCFunction(func, cfunc)
static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml,
int flags, PyObject* qualname,
PyObject *closure,
PyObject *module, PyObject *globals,
PyObject* code);
static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj);
static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m,
size_t size,
int pyobjects);
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m,
PyObject *tuple);
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m,
PyObject *dict);
static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m,
PyObject *dict);
static int __pyx_CyFunction_init(PyObject *module);
#if CYTHON_METH_FASTCALL
static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
#if CYTHON_BACKPORT_VECTORCALL
#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall)
#else
#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall)
#endif
#endif
/* CythonFunction.proto */
static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml,
int flags, PyObject* qualname,
PyObject *closure,
PyObject *module, PyObject *globals,
PyObject* code);
/* DictGetItem.proto */
#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key);
#define __Pyx_PyObject_Dict_GetItem(obj, name)\
(likely(PyDict_CheckExact(obj)) ?\
__Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name))
#else
#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key)
#define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name)
#endif
/* PyObject_GenericGetAttrNoDict.proto */
#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name);
#else
#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr
#endif
/* PyObject_GenericGetAttr.proto */
#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name);
#else
#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr
#endif
/* PyObjectCallNoArg.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
/* PyObjectCallMethod0.proto */
static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name);
/* ValidateBasesTuple.proto */
#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS
static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases);
#endif
/* PyType_Ready.proto */
CYTHON_UNUSED static int __Pyx_PyType_Ready(PyTypeObject *t);
/* SetVTable.proto */
static int __Pyx_SetVtable(PyTypeObject* typeptr , void* vtable);
/* GetVTable.proto */
static void* __Pyx_GetVtable(PyTypeObject *type);
/* MergeVTables.proto */
#if !CYTHON_COMPILING_IN_LIMITED_API
static int __Pyx_MergeVtables(PyTypeObject *type);
#endif
/* SetupReduce.proto */
#if !CYTHON_COMPILING_IN_LIMITED_API
static int __Pyx_setup_reduce(PyObject* type_obj);
#endif
/* CLineInTraceback.proto */
#ifdef CYTHON_CLINE_IN_TRACEBACK
#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0)
#else
static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line);
#endif
/* CodeObjectCache.proto */
#if !CYTHON_COMPILING_IN_LIMITED_API
typedef struct {
PyCodeObject* code_object;
int code_line;
} __Pyx_CodeObjectCacheEntry;
struct __Pyx_CodeObjectCache {
int count;
int max_count;
__Pyx_CodeObjectCacheEntry* entries;
};
static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
static PyCodeObject *__pyx_find_code_object(int code_line);
static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
#endif
/* AddTraceback.proto */
static void __Pyx_AddTraceback(const char *funcname, int c_line,
int py_line, const char *filename);
#if PY_MAJOR_VERSION < 3
static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags);
static void __Pyx_ReleaseBuffer(Py_buffer *view);
#else
#define __Pyx_GetBuffer PyObject_GetBuffer
#define __Pyx_ReleaseBuffer PyBuffer_Release
#endif
/* BufferStructDeclare.proto */
typedef struct {
Py_ssize_t shape, strides, suboffsets;
} __Pyx_Buf_DimInfo;
typedef struct {
size_t refcount;
Py_buffer pybuffer;
} __Pyx_Buffer;
typedef struct {
__Pyx_Buffer *rcbuffer;
char *data;
__Pyx_Buf_DimInfo diminfo[8];
} __Pyx_LocalBuf_ND;
/* MemviewSliceIsContig.proto */
static int __pyx_memviewslice_is_contig(const __Pyx_memviewslice mvs, char order, int ndim);
/* OverlappingSlices.proto */
static int __pyx_slices_overlap(__Pyx_memviewslice *slice1,
__Pyx_memviewslice *slice2,
int ndim, size_t itemsize);
/* MemviewDtypeToObject.proto */
static CYTHON_INLINE PyObject *__pyx_memview_get_int(const char *itemp);
static CYTHON_INLINE int __pyx_memview_set_int(const char *itemp, PyObject *obj);
/* MemviewDtypeToObject.proto */
static CYTHON_INLINE PyObject *__pyx_memview_get_double(const char *itemp);
static CYTHON_INLINE int __pyx_memview_set_double(const char *itemp, PyObject *obj);
/* IsLittleEndian.proto */
static CYTHON_INLINE int __Pyx_Is_Little_Endian(void);
/* BufferFormatCheck.proto */
static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts);
static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx,
__Pyx_BufFmt_StackElem* stack,
__Pyx_TypeInfo* type);
/* TypeInfoCompare.proto */
static int __pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b);
/* MemviewSliceValidateAndInit.proto */
static int __Pyx_ValidateAndInit_memviewslice(
int *axes_specs,
int c_or_f_flag,
int buf_flags,
int ndim,
__Pyx_TypeInfo *dtype,
__Pyx_BufFmt_StackElem stack[],
__Pyx_memviewslice *memviewslice,
PyObject *original_obj);
/* ObjectToMemviewSlice.proto */
static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_d_dc_int(PyObject *, int writable_flag);
/* ObjectToMemviewSlice.proto */
static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(PyObject *, int writable_flag);
/* MemviewSliceCopyTemplate.proto */
static __Pyx_memviewslice
__pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs,
const char *mode, int ndim,
size_t sizeof_dtype, int contig_flag,
int dtype_is_object);
/* MemviewSliceInit.proto */
#define __Pyx_BUF_MAX_NDIMS %(BUF_MAX_NDIMS)d
#define __Pyx_MEMVIEW_DIRECT 1
#define __Pyx_MEMVIEW_PTR 2
#define __Pyx_MEMVIEW_FULL 4
#define __Pyx_MEMVIEW_CONTIG 8
#define __Pyx_MEMVIEW_STRIDED 16
#define __Pyx_MEMVIEW_FOLLOW 32
#define __Pyx_IS_C_CONTIG 1
#define __Pyx_IS_F_CONTIG 2
static int __Pyx_init_memviewslice(
struct __pyx_memoryview_obj *memview,
int ndim,
__Pyx_memviewslice *memviewslice,
int memview_is_new_reference);
static CYTHON_INLINE int __pyx_add_acquisition_count_locked(
__pyx_atomic_int_type *acquisition_count, PyThread_type_lock lock);
static CYTHON_INLINE int __pyx_sub_acquisition_count_locked(
__pyx_atomic_int_type *acquisition_count, PyThread_type_lock lock);
#define __pyx_get_slice_count_pointer(memview) (&memview->acquisition_count)
#define __PYX_INC_MEMVIEW(slice, have_gil) __Pyx_INC_MEMVIEW(slice, have_gil, __LINE__)
#define __PYX_XCLEAR_MEMVIEW(slice, have_gil) __Pyx_XCLEAR_MEMVIEW(slice, have_gil, __LINE__)
static CYTHON_INLINE void __Pyx_INC_MEMVIEW(__Pyx_memviewslice *, int, int);
static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *, int, int);
/* TypeInfoToFormat.proto */
struct __pyx_typeinfo_string {
char string[3];
};
static struct __pyx_typeinfo_string __Pyx_TypeInfoToFormat(__Pyx_TypeInfo *type);
/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
/* CIntFromPy.proto */
static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
/* CIntFromPy.proto */
static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
/* CIntFromPy.proto */
static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *);
/* FormatTypeName.proto */
#if CYTHON_COMPILING_IN_LIMITED_API
typedef PyObject *__Pyx_TypeName;
#define __Pyx_FMT_TYPENAME "%U"
static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp);
#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj)
#else
typedef const char *__Pyx_TypeName;
#define __Pyx_FMT_TYPENAME "%.200s"
#define __Pyx_PyType_GetName(tp) ((tp)->tp_name)
#define __Pyx_DECREF_TypeName(obj)
#endif
/* CheckBinaryVersion.proto */
static unsigned long __Pyx_get_runtime_version(void);
static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer);
/* InitStrings.proto */
static int __Pyx_InitStrings(__Pyx_StringTabEntry *t);
/* #### Code section: module_declarations ### */
static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self); /* proto*/
static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto*/
static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj); /* proto*/
static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src); /* proto*/
static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value); /* proto*/
static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto*/
static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/
static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/
static PyObject *__pyx_memoryview__get_base(struct __pyx_memoryview_obj *__pyx_v_self); /* proto*/
static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/
static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/
static PyObject *__pyx_memoryviewslice__get_base(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto*/
/* Module declarations from "libc.string" */
/* Module declarations from "libc.stdlib" */
/* Module declarations from "triangle.core" */
static PyObject *__pyx_7genexpr__pyx_v_8triangle_4core_name;
static PyObject *__pyx_7genexpr__pyx_v_8triangle_4core_dtype;
static PyObject *__pyx_collections_abc_Sequence = 0;
static PyObject *generic = 0;
static PyObject *strided = 0;
static PyObject *indirect = 0;
static PyObject *contiguous = 0;
static PyObject *indirect_contiguous = 0;
static int __pyx_memoryview_thread_locks_used;
static PyThread_type_lock __pyx_memoryview_thread_locks[8];
static PyObject *__pyx_f_8triangle_4core_array_ii(int, int, int *); /*proto*/
static PyObject *__pyx_f_8triangle_4core_array_dd(int, int, double *); /*proto*/
static int *__pyx_f_8triangle_4core_ptr_ii(__Pyx_memviewslice); /*proto*/
static double *__pyx_f_8triangle_4core_ptr_dd(__Pyx_memviewslice); /*proto*/
static PyObject *__pyx_f_8triangle_4core_ii(int *, int *, int **, PyObject *, PyObject *); /*proto*/
static PyObject *__pyx_f_8triangle_4core_dd(int *, int *, double **, PyObject *, PyObject *); /*proto*/
static PyObject *__pyx_f_8triangle_4core__wrap(struct triangulateio *); /*proto*/
static PyObject *__pyx_f_8triangle_4core_cinit(struct triangulateio *); /*proto*/
static PyObject *__pyx_f_8triangle_4core_wrap(struct triangulateio *); /*proto*/
static PyObject *__pyx_f_8triangle_4core_fin(PyObject *, struct triangulateio *); /*proto*/
static PyObject *__pyx_f_8triangle_4core_fout(struct triangulateio *, PyObject *); /*proto*/
static int __pyx_array_allocate_buffer(struct __pyx_array_obj *); /*proto*/
static struct __pyx_array_obj *__pyx_array_new(PyObject *, Py_ssize_t, char *, char *, char *); /*proto*/
static PyObject *__pyx_memoryview_new(PyObject *, int, int, __Pyx_TypeInfo *); /*proto*/
static CYTHON_INLINE int __pyx_memoryview_check(PyObject *); /*proto*/
static PyObject *_unellipsify(PyObject *, int); /*proto*/
static int assert_direct_dimensions(Py_ssize_t *, int); /*proto*/
static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *, PyObject *); /*proto*/
static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int, int); /*proto*/
static char *__pyx_pybuffer_index(Py_buffer *, char *, Py_ssize_t, Py_ssize_t); /*proto*/
static int __pyx_memslice_transpose(__Pyx_memviewslice *); /*proto*/
static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice, int, PyObject *(*)(char *), int (*)(char *, PyObject *), int); /*proto*/
static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/
static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/
static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *); /*proto*/
static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/
static Py_ssize_t abs_py_ssize_t(Py_ssize_t); /*proto*/
static char __pyx_get_best_slice_order(__Pyx_memviewslice *, int); /*proto*/
static void _copy_strided_to_strided(char *, Py_ssize_t *, char *, Py_ssize_t *, Py_ssize_t *, Py_ssize_t *, int, size_t); /*proto*/
static void copy_strided_to_strided(__Pyx_memviewslice *, __Pyx_memviewslice *, int, size_t); /*proto*/
static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *, int); /*proto*/
static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *, Py_ssize_t *, Py_ssize_t, int, char); /*proto*/
static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *, __Pyx_memviewslice *, char, int); /*proto*/
static int __pyx_memoryview_err_extents(int, Py_ssize_t, Py_ssize_t); /*proto*/
static int __pyx_memoryview_err_dim(PyObject *, PyObject *, int); /*proto*/
static int __pyx_memoryview_err(PyObject *, PyObject *); /*proto*/
static int __pyx_memoryview_err_no_memory(void); /*proto*/
static int __pyx_memoryview_copy_contents(__Pyx_memviewslice, __Pyx_memviewslice, int, int, int); /*proto*/
static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *, int, int); /*proto*/
static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *, int, int, int); /*proto*/
static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/
static void __pyx_memoryview_refcount_objects_in_slice(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/
static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *, int, size_t, void *, int); /*proto*/
static void __pyx_memoryview__slice_assign_scalar(char *, Py_ssize_t *, Py_ssize_t *, int, size_t, void *); /*proto*/
static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *, PyObject *); /*proto*/
static PyObject *__pyx_format_from_typeinfo(__Pyx_TypeInfo *); /*proto*/
/* #### Code section: typeinfo ### */
static __Pyx_TypeInfo __Pyx_TypeInfo_int = { "int", NULL, sizeof(int), { 0 }, 0, __PYX_IS_UNSIGNED(int) ? 'U' : 'I', __PYX_IS_UNSIGNED(int), 0 };
static __Pyx_TypeInfo __Pyx_TypeInfo_double = { "double", NULL, sizeof(double), { 0 }, 0, 'R', 0, 0 };
/* #### Code section: before_global_var ### */
#define __Pyx_MODULE_NAME "triangle.core"
extern int __pyx_module_is_main_triangle__core;
int __pyx_module_is_main_triangle__core = 0;
/* Implementation of "triangle.core" */
/* #### Code section: global_var ### */
static PyObject *__pyx_builtin_AssertionError;
static PyObject *__pyx_builtin_zip;
static PyObject *__pyx_builtin_ValueError;
static PyObject *__pyx_builtin_RuntimeError;
static PyObject *__pyx_builtin___import__;
static PyObject *__pyx_builtin_MemoryError;
static PyObject *__pyx_builtin_enumerate;
static PyObject *__pyx_builtin_TypeError;
static PyObject *__pyx_builtin_range;
static PyObject *__pyx_builtin_Ellipsis;
static PyObject *__pyx_builtin_id;
static PyObject *__pyx_builtin_IndexError;
/* #### Code section: string_decls ### */
static const char __pyx_k_[] = ": ";
static const char __pyx_k_O[] = "O";
static const char __pyx_k_T[] = "T{";
static const char __pyx_k_c[] = "c";
static const char __pyx_k_v[] = "v";
static const char __pyx_k__2[] = ".";
static const char __pyx_k__3[] = "*";
static const char __pyx_k__6[] = "'";
static const char __pyx_k__7[] = ")";
static const char __pyx_k__9[] = "^";
static const char __pyx_k_gc[] = "gc";
static const char __pyx_k_id[] = "id";
static const char __pyx_k_in[] = "_in";
static const char __pyx_k_np[] = "np";
static const char __pyx_k__10[] = "";
static const char __pyx_k__11[] = ":";
static const char __pyx_k__12[] = "}";
static const char __pyx_k__13[] = "(";
static const char __pyx_k__14[] = ",";
static const char __pyx_k__55[] = "?";
static const char __pyx_k_abc[] = "abc";
static const char __pyx_k_and[] = " and ";
static const char __pyx_k_get[] = "_get";
static const char __pyx_k_got[] = " (got ";
static const char __pyx_k_new[] = "__new__";
static const char __pyx_k_obj[] = "obj";
static const char __pyx_k_out[] = "out_";
static const char __pyx_k_set[] = "_set";
static const char __pyx_k_sys[] = "sys";
static const char __pyx_k_zip[] = "zip";
static const char __pyx_k_base[] = "base";
static const char __pyx_k_data[] = "data";
static const char __pyx_k_dict[] = "__dict__";
static const char __pyx_k_free[] = "_free";
static const char __pyx_k_in_2[] = "in_";
static const char __pyx_k_intc[] = "intc";
static const char __pyx_k_join[] = "join";
static const char __pyx_k_main[] = "__main__";
static const char __pyx_k_mode[] = "mode";
static const char __pyx_k_name[] = "name";
static const char __pyx_k_ndim[] = "ndim";
static const char __pyx_k_opts[] = "opts";
static const char __pyx_k_pack[] = "pack";
static const char __pyx_k_size[] = "size";
static const char __pyx_k_spec[] = "__spec__";
static const char __pyx_k_step[] = "step";
static const char __pyx_k_stop[] = "stop";
static const char __pyx_k_test[] = "__test__";
static const char __pyx_k_ASCII[] = "ASCII";
static const char __pyx_k_array[] = "array";
static const char __pyx_k_check[] = "check";
static const char __pyx_k_class[] = "__class__";
static const char __pyx_k_count[] = "count";
static const char __pyx_k_dtype[] = "dtype";
static const char __pyx_k_error[] = "error";
static const char __pyx_k_flags[] = "flags";
static const char __pyx_k_index[] = "index";
static const char __pyx_k_numpy[] = "numpy";
static const char __pyx_k_out_2[] = "_out";
static const char __pyx_k_range[] = "range";
static const char __pyx_k_shape[] = "shape";
static const char __pyx_k_start[] = "start";
static const char __pyx_k_utf_8[] = "utf-8";
static const char __pyx_k_value[] = "value";
static const char __pyx_k_double[] = "double";
static const char __pyx_k_enable[] = "enable";
static const char __pyx_k_encode[] = "encode";
static const char __pyx_k_fields[] = "fields";
static const char __pyx_k_format[] = "format";
static const char __pyx_k_import[] = "__import__";
static const char __pyx_k_name_2[] = "__name__";
static const char __pyx_k_pickle[] = "pickle";
static const char __pyx_k_reduce[] = "__reduce__";
static const char __pyx_k_struct[] = "struct";
static const char __pyx_k_triang[] = "triang";
static const char __pyx_k_unpack[] = "unpack";
static const char __pyx_k_update[] = "update";
static const char __pyx_k_vorout[] = "vorout_";
static const char __pyx_k_disable[] = "disable";
static const char __pyx_k_fortran[] = "fortran";
static const char __pyx_k_memview[] = "memview";
static const char __pyx_k_reshape[] = "reshape";
static const char __pyx_k_Ellipsis[] = "Ellipsis";
static const char __pyx_k_Sequence[] = "Sequence";
static const char __pyx_k_contig2d[] = "contig2d";
static const char __pyx_k_edgelist[] = "edgelist";
static const char __pyx_k_getstate[] = "__getstate__";
static const char __pyx_k_holelist[] = "holelist";
static const char __pyx_k_itemsize[] = "itemsize";
static const char __pyx_k_normlist[] = "normlist";
static const char __pyx_k_pyx_type[] = "__pyx_type";
static const char __pyx_k_register[] = "register";
static const char __pyx_k_setstate[] = "__setstate__";
static const char __pyx_k_vorout_2[] = "_vorout";
static const char __pyx_k_TypeError[] = "TypeError";
static const char __pyx_k_enumerate[] = "enumerate";
static const char __pyx_k_isenabled[] = "isenabled";
static const char __pyx_k_pointlist[] = "pointlist";
static const char __pyx_k_pyx_state[] = "__pyx_state";
static const char __pyx_k_reduce_ex[] = "__reduce_ex__";
static const char __pyx_k_IndexError[] = "IndexError";
static const char __pyx_k_ValueError[] = "ValueError";
static const char __pyx_k_pyx_result[] = "__pyx_result";
static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
static const char __pyx_k_regionlist[] = "regionlist";
static const char __pyx_k_MemoryError[] = "MemoryError";
static const char __pyx_k_PickleError[] = "PickleError";
static const char __pyx_k_collections[] = "collections";
static const char __pyx_k_field_dtype[] = "field_dtype";
static const char __pyx_k_segmentlist[] = "segmentlist";
static const char __pyx_k_C_CONTIGUOUS[] = "C_CONTIGUOUS";
static const char __pyx_k_RuntimeError[] = "RuntimeError";
static const char __pyx_k_initializing[] = "_initializing";
static const char __pyx_k_is_coroutine[] = "_is_coroutine";
static const char __pyx_k_neighborlist[] = "neighborlist";
static const char __pyx_k_pyx_checksum[] = "__pyx_checksum";
static const char __pyx_k_stringsource[] = "<stringsource>";
static const char __pyx_k_trianglelist[] = "trianglelist";
static const char __pyx_k_version_info[] = "version_info";
static const char __pyx_k_class_getitem[] = "__class_getitem__";
static const char __pyx_k_reduce_cython[] = "__reduce_cython__";
static const char __pyx_k_triangle_core[] = "triangle.core";
static const char __pyx_k_AssertionError[] = "AssertionError";
static const char __pyx_k_dd_locals__get[] = "dd.<locals>._get";
static const char __pyx_k_dd_locals__set[] = "dd.<locals>._set";
static const char __pyx_k_edgemarkerlist[] = "edgemarkerlist";
static const char __pyx_k_ii_locals__get[] = "ii.<locals>._get";
static const char __pyx_k_ii_locals__set[] = "ii.<locals>._set";
static const char __pyx_k_View_MemoryView[] = "View.MemoryView";
static const char __pyx_k_allocate_buffer[] = "allocate_buffer";
static const char __pyx_k_collections_abc[] = "collections.abc";
static const char __pyx_k_dd_locals__free[] = "dd.<locals>._free";
static const char __pyx_k_dtype_is_object[] = "dtype_is_object";
static const char __pyx_k_ii_locals__free[] = "ii.<locals>._free";
static const char __pyx_k_pointmarkerlist[] = "pointmarkerlist";
static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError";
static const char __pyx_k_setstate_cython[] = "__setstate_cython__";
static const char __pyx_k_trianglearealist[] = "trianglearealist";
static const char __pyx_k_ascontiguousarray[] = "ascontiguousarray";
static const char __pyx_k_pyx_unpickle_Enum[] = "__pyx_unpickle_Enum";
static const char __pyx_k_segmentmarkerlist[] = "segmentmarkerlist";
static const char __pyx_k_triangle_core_pyx[] = "triangle/core.pyx";
static const char __pyx_k_wrap_locals_check[] = "_wrap.<locals>.check";
static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines";
static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback";
static const char __pyx_k_pointattributelist[] = "pointattributelist";
static const char __pyx_k_strided_and_direct[] = "<strided and direct>";
static const char __pyx_k_strided_and_indirect[] = "<strided and indirect>";
static const char __pyx_k_Invalid_shape_in_axis[] = "Invalid shape in axis ";
static const char __pyx_k_contiguous_and_direct[] = "<contiguous and direct>";
static const char __pyx_k_triangleattributelist[] = "triangleattributelist";
static const char __pyx_k_Cannot_index_with_type[] = "Cannot index with type '";
static const char __pyx_k_MemoryView_of_r_object[] = "<MemoryView of %r object>";
static const char __pyx_k_MemoryView_of_r_at_0x_x[] = "<MemoryView of %r at 0x%x>";
static const char __pyx_k_contiguous_and_indirect[] = "<contiguous and indirect>";
static const char __pyx_k_Dimension_d_is_not_direct[] = "Dimension %d is not direct";
static const char __pyx_k_Index_out_of_bounds_axis_d[] = "Index out of bounds (axis %d)";
static const char __pyx_k_Step_may_not_be_zero_axis_d[] = "Step may not be zero (axis %d)";
static const char __pyx_k_itemsize_0_for_cython_array[] = "itemsize <= 0 for cython.array";
static const char __pyx_k_unable_to_allocate_array_data[] = "unable to allocate array data.";
static const char __pyx_k_strided_and_direct_or_indirect[] = "<strided and direct or indirect>";
static const char __pyx_k_All_dimensions_preceding_dimensi[] = "All dimensions preceding dimension %d must be indexed and not sliced";
static const char __pyx_k_Buffer_view_does_not_expose_stri[] = "Buffer view does not expose strides";
static const char __pyx_k_Can_only_create_a_buffer_that_is[] = "Can only create a buffer that is contiguous in memory.";
static const char __pyx_k_Cannot_assign_to_read_only_memor[] = "Cannot assign to read-only memoryview";
static const char __pyx_k_Cannot_create_writable_memory_vi[] = "Cannot create writable memory view from read-only memoryview";
static const char __pyx_k_Cannot_transpose_memoryview_with[] = "Cannot transpose memoryview with indirect dimensions";
static const char __pyx_k_Empty_shape_tuple_for_cython_arr[] = "Empty shape tuple for cython.array";
static const char __pyx_k_Incompatible_checksums_0x_x_vs_0[] = "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))";
static const char __pyx_k_Indirect_dimensions_not_supporte[] = "Indirect dimensions not supported";
static const char __pyx_k_Input_must_have_at_least_three_v[] = "Input must have at least three vertices.";
static const char __pyx_k_Invalid_mode_expected_c_or_fortr[] = "Invalid mode, expected 'c' or 'fortran', got ";
static const char __pyx_k_Out_of_bounds_on_buffer_access_a[] = "Out of bounds on buffer access (axis ";
static const char __pyx_k_Triangulation_failed_probably_be[] = "Triangulation failed -- probably because of invalid geometry on input.";
static const char __pyx_k_Unable_to_convert_item_to_object[] = "Unable to convert item to object";
static const char __pyx_k_got_differing_extents_in_dimensi[] = "got differing extents in dimension ";
static const char __pyx_k_no_default___reduce___due_to_non[] = "no default __reduce__ due to non-trivial __cinit__";
static const char __pyx_k_unable_to_allocate_shape_and_str[] = "unable to allocate shape and strides.";
/* #### Code section: decls ### */
static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer); /* proto */
static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self); /* proto */
static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr); /* proto */
static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item); /* proto */
static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object); /* proto */
static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto */
static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto */
static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */
static PyObject *__pyx_pf___pyx_memoryviewslice_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_8triangle_4core_2ii__get(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_8triangle_4core_2ii_2_set(PyObject *__pyx_self, PyObject *__pyx_v_v); /* proto */
static PyObject *__pyx_pf_8triangle_4core_2ii_4_free(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_8triangle_4core_2dd__get(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_8triangle_4core_2dd_2_set(PyObject *__pyx_self, PyObject *__pyx_v_v); /* proto */
static PyObject *__pyx_pf_8triangle_4core_2dd_4_free(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_8triangle_4core_5_wrap_check(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_8triangle_4core_contig2d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_value, PyObject *__pyx_v_dtype); /* proto */
static PyObject *__pyx_pf_8triangle_4core_2triang(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v__in, PyObject *__pyx_v_opts); /* proto */
static PyObject *__pyx_tp_new_8triangle_4core___pyx_scope_struct____pyx_f_8triangle_4core_ii(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_8triangle_4core___pyx_scope_struct_1___pyx_f_8triangle_4core_dd(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_8triangle_4core___pyx_scope_struct_2___pyx_f_8triangle_4core__wrap(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
/* #### Code section: late_includes ### */
/* #### Code section: module_state ### */
typedef struct {
PyObject *__pyx_d;
PyObject *__pyx_b;
PyObject *__pyx_cython_runtime;
PyObject *__pyx_empty_tuple;
PyObject *__pyx_empty_bytes;
PyObject *__pyx_empty_unicode;
#ifdef __Pyx_CyFunction_USED
PyTypeObject *__pyx_CyFunctionType;
#endif
#ifdef __Pyx_FusedFunction_USED
PyTypeObject *__pyx_FusedFunctionType;
#endif
#ifdef __Pyx_Generator_USED
PyTypeObject *__pyx_GeneratorType;
#endif
#ifdef __Pyx_IterableCoroutine_USED
PyTypeObject *__pyx_IterableCoroutineType;
#endif
#ifdef __Pyx_Coroutine_USED
PyTypeObject *__pyx_CoroutineAwaitType;
#endif
#ifdef __Pyx_Coroutine_USED
PyTypeObject *__pyx_CoroutineType;
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
#endif
#if CYTHON_USE_MODULE_STATE
PyObject *__pyx_type_8triangle_4core___pyx_scope_struct____pyx_f_8triangle_4core_ii;
PyObject *__pyx_type_8triangle_4core___pyx_scope_struct_1___pyx_f_8triangle_4core_dd;
PyObject *__pyx_type_8triangle_4core___pyx_scope_struct_2___pyx_f_8triangle_4core__wrap;
PyObject *__pyx_type___pyx_array;
PyObject *__pyx_type___pyx_MemviewEnum;
PyObject *__pyx_type___pyx_memoryview;
PyObject *__pyx_type___pyx_memoryviewslice;
#endif
PyTypeObject *__pyx_ptype_8triangle_4core___pyx_scope_struct____pyx_f_8triangle_4core_ii;
PyTypeObject *__pyx_ptype_8triangle_4core___pyx_scope_struct_1___pyx_f_8triangle_4core_dd;
PyTypeObject *__pyx_ptype_8triangle_4core___pyx_scope_struct_2___pyx_f_8triangle_4core__wrap;
PyTypeObject *__pyx_array_type;
PyTypeObject *__pyx_MemviewEnum_type;
PyTypeObject *__pyx_memoryview_type;
PyTypeObject *__pyx_memoryviewslice_type;
PyObject *__pyx_kp_u_;
PyObject *__pyx_n_s_ASCII;
PyObject *__pyx_kp_s_All_dimensions_preceding_dimensi;
PyObject *__pyx_n_s_AssertionError;
PyObject *__pyx_kp_s_Buffer_view_does_not_expose_stri;
PyObject *__pyx_n_u_C_CONTIGUOUS;
PyObject *__pyx_kp_s_Can_only_create_a_buffer_that_is;
PyObject *__pyx_kp_s_Cannot_assign_to_read_only_memor;
PyObject *__pyx_kp_s_Cannot_create_writable_memory_vi;
PyObject *__pyx_kp_u_Cannot_index_with_type;
PyObject *__pyx_kp_s_Cannot_transpose_memoryview_with;
PyObject *__pyx_kp_s_Dimension_d_is_not_direct;
PyObject *__pyx_n_s_Ellipsis;
PyObject *__pyx_kp_s_Empty_shape_tuple_for_cython_arr;
PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0;
PyObject *__pyx_n_s_IndexError;
PyObject *__pyx_kp_s_Index_out_of_bounds_axis_d;
PyObject *__pyx_kp_s_Indirect_dimensions_not_supporte;
PyObject *__pyx_kp_u_Input_must_have_at_least_three_v;
PyObject *__pyx_kp_u_Invalid_mode_expected_c_or_fortr;
PyObject *__pyx_kp_u_Invalid_shape_in_axis;
PyObject *__pyx_n_s_MemoryError;
PyObject *__pyx_kp_s_MemoryView_of_r_at_0x_x;
PyObject *__pyx_kp_s_MemoryView_of_r_object;
PyObject *__pyx_n_b_O;
PyObject *__pyx_kp_u_Out_of_bounds_on_buffer_access_a;
PyObject *__pyx_n_s_PickleError;
PyObject *__pyx_n_s_RuntimeError;
PyObject *__pyx_n_s_Sequence;
PyObject *__pyx_kp_s_Step_may_not_be_zero_axis_d;
PyObject *__pyx_kp_b_T;
PyObject *__pyx_kp_u_Triangulation_failed_probably_be;
PyObject *__pyx_n_s_TypeError;
PyObject *__pyx_kp_s_Unable_to_convert_item_to_object;
PyObject *__pyx_n_s_ValueError;
PyObject *__pyx_n_s_View_MemoryView;
PyObject *__pyx_kp_b__10;
PyObject *__pyx_kp_b__11;
PyObject *__pyx_kp_b__12;
PyObject *__pyx_kp_u__13;
PyObject *__pyx_kp_u__14;
PyObject *__pyx_kp_u__2;
PyObject *__pyx_n_s__3;
PyObject *__pyx_n_s__55;
PyObject *__pyx_kp_u__6;
PyObject *__pyx_kp_u__7;
PyObject *__pyx_kp_b__9;
PyObject *__pyx_n_s_abc;
PyObject *__pyx_n_s_allocate_buffer;
PyObject *__pyx_kp_u_and;
PyObject *__pyx_n_s_array;
PyObject *__pyx_n_s_ascontiguousarray;
PyObject *__pyx_n_s_asyncio_coroutines;
PyObject *__pyx_n_s_base;
PyObject *__pyx_n_s_c;
PyObject *__pyx_n_u_c;
PyObject *__pyx_n_s_check;
PyObject *__pyx_n_s_class;
PyObject *__pyx_n_s_class_getitem;
PyObject *__pyx_n_s_cline_in_traceback;
PyObject *__pyx_n_s_collections;
PyObject *__pyx_kp_s_collections_abc;
PyObject *__pyx_n_s_contig2d;
PyObject *__pyx_kp_s_contiguous_and_direct;
PyObject *__pyx_kp_s_contiguous_and_indirect;
PyObject *__pyx_n_s_count;
PyObject *__pyx_n_s_data;
PyObject *__pyx_n_s_dd_locals__free;
PyObject *__pyx_n_s_dd_locals__get;
PyObject *__pyx_n_s_dd_locals__set;
PyObject *__pyx_n_s_dict;
PyObject *__pyx_kp_u_disable;
PyObject *__pyx_n_u_double;
PyObject *__pyx_n_s_dtype;
PyObject *__pyx_n_s_dtype_is_object;
PyObject *__pyx_n_u_edgelist;
PyObject *__pyx_n_u_edgemarkerlist;
PyObject *__pyx_kp_u_enable;
PyObject *__pyx_n_s_encode;
PyObject *__pyx_n_s_enumerate;
PyObject *__pyx_n_s_error;
PyObject *__pyx_n_s_field_dtype;
PyObject *__pyx_n_s_fields;
PyObject *__pyx_n_s_flags;
PyObject *__pyx_n_s_format;
PyObject *__pyx_n_s_fortran;
PyObject *__pyx_n_u_fortran;
PyObject *__pyx_n_s_free;
PyObject *__pyx_kp_u_gc;
PyObject *__pyx_n_s_get;
PyObject *__pyx_n_s_getstate;
PyObject *__pyx_kp_u_got;
PyObject *__pyx_kp_u_got_differing_extents_in_dimensi;
PyObject *__pyx_n_u_holelist;
PyObject *__pyx_n_s_id;
PyObject *__pyx_n_s_ii_locals__free;
PyObject *__pyx_n_s_ii_locals__get;
PyObject *__pyx_n_s_ii_locals__set;
PyObject *__pyx_n_s_import;
PyObject *__pyx_n_s_in;
PyObject *__pyx_n_s_in_2;
PyObject *__pyx_n_s_index;
PyObject *__pyx_n_s_initializing;
PyObject *__pyx_n_u_intc;
PyObject *__pyx_n_s_is_coroutine;
PyObject *__pyx_kp_u_isenabled;
PyObject *__pyx_n_s_itemsize;
PyObject *__pyx_kp_s_itemsize_0_for_cython_array;
PyObject *__pyx_n_s_join;
PyObject *__pyx_n_s_main;
PyObject *__pyx_n_s_memview;
PyObject *__pyx_n_s_mode;
PyObject *__pyx_n_s_name;
PyObject *__pyx_n_s_name_2;
PyObject *__pyx_n_s_ndim;
PyObject *__pyx_n_u_neighborlist;
PyObject *__pyx_n_s_new;
PyObject *__pyx_kp_s_no_default___reduce___due_to_non;
PyObject *__pyx_n_u_normlist;
PyObject *__pyx_n_s_np;
PyObject *__pyx_n_s_numpy;
PyObject *__pyx_n_s_obj;
PyObject *__pyx_n_s_opts;
PyObject *__pyx_n_s_out;
PyObject *__pyx_n_s_out_2;
PyObject *__pyx_n_s_pack;
PyObject *__pyx_n_s_pickle;
PyObject *__pyx_n_u_pointattributelist;
PyObject *__pyx_n_u_pointlist;
PyObject *__pyx_n_u_pointmarkerlist;
PyObject *__pyx_n_s_pyx_PickleError;
PyObject *__pyx_n_s_pyx_checksum;
PyObject *__pyx_n_s_pyx_result;
PyObject *__pyx_n_s_pyx_state;
PyObject *__pyx_n_s_pyx_type;
PyObject *__pyx_n_s_pyx_unpickle_Enum;
PyObject *__pyx_n_s_pyx_vtable;
PyObject *__pyx_n_s_range;
PyObject *__pyx_n_s_reduce;
PyObject *__pyx_n_s_reduce_cython;
PyObject *__pyx_n_s_reduce_ex;
PyObject *__pyx_n_u_regionlist;
PyObject *__pyx_n_s_register;
PyObject *__pyx_n_s_reshape;
PyObject *__pyx_n_u_segmentlist;
PyObject *__pyx_n_u_segmentmarkerlist;
PyObject *__pyx_n_s_set;
PyObject *__pyx_n_s_setstate;
PyObject *__pyx_n_s_setstate_cython;
PyObject *__pyx_n_s_shape;
PyObject *__pyx_n_s_size;
PyObject *__pyx_n_s_spec;
PyObject *__pyx_n_s_start;
PyObject *__pyx_n_s_step;
PyObject *__pyx_n_s_stop;
PyObject *__pyx_kp_s_strided_and_direct;
PyObject *__pyx_kp_s_strided_and_direct_or_indirect;
PyObject *__pyx_kp_s_strided_and_indirect;
PyObject *__pyx_kp_s_stringsource;
PyObject *__pyx_n_s_struct;
PyObject *__pyx_n_s_sys;
PyObject *__pyx_n_s_test;
PyObject *__pyx_n_s_triang;
PyObject *__pyx_n_s_triangle_core;
PyObject *__pyx_kp_s_triangle_core_pyx;
PyObject *__pyx_n_u_trianglearealist;
PyObject *__pyx_n_u_triangleattributelist;
PyObject *__pyx_n_u_trianglelist;
PyObject *__pyx_kp_s_unable_to_allocate_array_data;
PyObject *__pyx_kp_s_unable_to_allocate_shape_and_str;
PyObject *__pyx_n_s_unpack;
PyObject *__pyx_n_s_update;
PyObject *__pyx_kp_u_utf_8;
PyObject *__pyx_n_s_v;
PyObject *__pyx_n_s_value;
PyObject *__pyx_n_s_version_info;
PyObject *__pyx_n_s_vorout;
PyObject *__pyx_n_s_vorout_2;
PyObject *__pyx_n_s_wrap_locals_check;
PyObject *__pyx_n_s_zip;
PyObject *__pyx_int_0;
PyObject *__pyx_int_1;
PyObject *__pyx_int_3;
PyObject *__pyx_int_112105877;
PyObject *__pyx_int_136983863;
PyObject *__pyx_int_184977713;
PyObject *__pyx_int_neg_1;
PyObject *__pyx_slice__5;
PyObject *__pyx_tuple__4;
PyObject *__pyx_tuple__8;
PyObject *__pyx_tuple__16;
PyObject *__pyx_tuple__23;
PyObject *__pyx_tuple__24;
PyObject *__pyx_tuple__25;
PyObject *__pyx_tuple__26;
PyObject *__pyx_tuple__27;
PyObject *__pyx_tuple__28;
PyObject *__pyx_tuple__29;
PyObject *__pyx_tuple__30;
PyObject *__pyx_tuple__31;
PyObject *__pyx_tuple__32;
PyObject *__pyx_tuple__33;
PyObject *__pyx_tuple__34;
PyObject *__pyx_tuple__36;
PyObject *__pyx_tuple__37;
PyObject *__pyx_tuple__38;
PyObject *__pyx_tuple__39;
PyObject *__pyx_tuple__40;
PyObject *__pyx_tuple__41;
PyObject *__pyx_tuple__42;
PyObject *__pyx_tuple__43;
PyObject *__pyx_tuple__44;
PyObject *__pyx_tuple__45;
PyObject *__pyx_tuple__46;
PyObject *__pyx_tuple__47;
PyObject *__pyx_tuple__48;
PyObject *__pyx_tuple__49;
PyObject *__pyx_tuple__50;
PyObject *__pyx_tuple__51;
PyObject *__pyx_tuple__53;
PyObject *__pyx_codeobj__15;
PyObject *__pyx_codeobj__17;
PyObject *__pyx_codeobj__18;
PyObject *__pyx_codeobj__19;
PyObject *__pyx_codeobj__20;
PyObject *__pyx_codeobj__21;
PyObject *__pyx_codeobj__22;
PyObject *__pyx_codeobj__35;
PyObject *__pyx_codeobj__52;
PyObject *__pyx_codeobj__54;
} __pyx_mstate;
#if CYTHON_USE_MODULE_STATE
#ifdef __cplusplus
namespace {
extern struct PyModuleDef __pyx_moduledef;
} /* anonymous namespace */
#else
static struct PyModuleDef __pyx_moduledef;
#endif
#define __pyx_mstate(o) ((__pyx_mstate *)__Pyx_PyModule_GetState(o))
#define __pyx_mstate_global (__pyx_mstate(PyState_FindModule(&__pyx_moduledef)))
#define __pyx_m (PyState_FindModule(&__pyx_moduledef))
#else
static __pyx_mstate __pyx_mstate_global_static =
#ifdef __cplusplus
{};
#else
{0};
#endif
static __pyx_mstate *__pyx_mstate_global = &__pyx_mstate_global_static;
#endif
/* #### Code section: module_state_clear ### */
#if CYTHON_USE_MODULE_STATE
static int __pyx_m_clear(PyObject *m) {
__pyx_mstate *clear_module_state = __pyx_mstate(m);
if (!clear_module_state) return 0;
Py_CLEAR(clear_module_state->__pyx_d);
Py_CLEAR(clear_module_state->__pyx_b);
Py_CLEAR(clear_module_state->__pyx_cython_runtime);
Py_CLEAR(clear_module_state->__pyx_empty_tuple);
Py_CLEAR(clear_module_state->__pyx_empty_bytes);
Py_CLEAR(clear_module_state->__pyx_empty_unicode);
#ifdef __Pyx_CyFunction_USED
Py_CLEAR(clea
gitextract_oz5fl3es/
├── .github/
│ └── workflows/
│ └── wheels.yml
├── .gitignore
├── .gitmodules
├── LICENSE
├── README.rst
├── doc/
│ ├── API.rst
│ ├── Makefile
│ ├── conf.py
│ ├── convex.rst
│ ├── data.rst
│ ├── definitions.rst
│ ├── delaunay.rst
│ ├── examples.rst
│ ├── index.rst
│ ├── installing.rst
│ ├── plot/
│ │ ├── PSLG.py
│ │ ├── api_convex_hull.py
│ │ ├── api_delaunay.py
│ │ ├── api_triangulate.py
│ │ ├── api_voronoi.py
│ │ ├── bndries.py
│ │ ├── conforming_delaunay.py
│ │ ├── conforming_delaunay1.py
│ │ ├── constrained_conforming_delaunay.py
│ │ ├── constrained_conforming_delaunay1.py
│ │ ├── constrained_delaunay.py
│ │ ├── constrained_delaunay1.py
│ │ ├── convex_hull.py
│ │ ├── delaunay.py
│ │ ├── delaunay1.py
│ │ ├── ex1.py
│ │ ├── ex2.py
│ │ ├── ex3.py
│ │ ├── ex4.py
│ │ ├── ex5.py
│ │ ├── ex6.py
│ │ ├── ex7.py
│ │ ├── face.py
│ │ ├── holes_cavities.py
│ │ ├── quality.py
│ │ ├── quality1.py
│ │ ├── quality2.py
│ │ ├── refine.py
│ │ ├── refine1.py
│ │ ├── refine2.py
│ │ ├── voronoi.py
│ │ ├── voronoi1.py
│ │ └── voronoi3.py
│ ├── quality.rst
│ ├── refine.rst
│ └── voronoi.rst
├── pyproject.toml
├── setup.py
├── tests/
│ └── test_triangle.py
└── triangle/
├── __init__.py
├── core.c
├── core.pyx
├── data/
│ ├── A.1.ele
│ ├── A.1.node
│ ├── A.1.poly
│ ├── A.poly
│ ├── bbox.1.area
│ ├── bbox.1.ele
│ ├── bbox.1.node
│ ├── box.1.ele
│ ├── box.1.node
│ ├── box.1.poly
│ ├── box.2.ele
│ ├── box.2.node
│ ├── box.2.poly
│ ├── box.3.ele
│ ├── box.3.node
│ ├── box.3.poly
│ ├── box.4.ele
│ ├── box.4.node
│ ├── box.4.poly
│ ├── box.poly
│ ├── diamond_02_00009.1.ele
│ ├── diamond_02_00009.1.node
│ ├── diamond_02_00009.1.v.edge
│ ├── diamond_02_00009.1.v.node
│ ├── diamond_02_00009.node
│ ├── dots.1.v.edge
│ ├── dots.1.v.node
│ ├── dots.node
│ ├── double_hex.1.ele
│ ├── double_hex.1.node
│ ├── double_hex.1.poly
│ ├── double_hex.2.ele
│ ├── double_hex.2.node
│ ├── double_hex.2.poly
│ ├── double_hex.poly
│ ├── double_hex2.1.ele
│ ├── double_hex2.1.node
│ ├── double_hex2.1.poly
│ ├── double_hex2.2.ele
│ ├── double_hex2.2.node
│ ├── double_hex2.2.poly
│ ├── double_hex2.poly
│ ├── double_hex3.1.ele
│ ├── double_hex3.1.node
│ ├── double_hex3.1.poly
│ ├── double_hex3.node
│ ├── double_hex3.poly
│ ├── ell.ele
│ ├── ell.node
│ ├── face.1.ele
│ ├── face.1.node
│ ├── face.1.poly
│ ├── face.poly
│ ├── greenland.ele
│ ├── greenland.node
│ ├── la.1.ele
│ ├── la.1.node
│ ├── la.1.poly
│ ├── la.poly
│ ├── spiral.1.ele
│ ├── spiral.1.node
│ ├── spiral.node
│ ├── spiral.q.1.ele
│ ├── spiral.q.1.node
│ ├── spiral.r.1.ele
│ ├── spiral.r.1.node
│ ├── square_circle_hole.1.ele
│ ├── square_circle_hole.1.node
│ └── square_circle_hole.poly
├── data.py
├── plot.py
├── tri.py
└── version.py
SYMBOL INDEX (659 symbols across 8 files)
FILE: doc/plot/bndries.py
function bndry (line 6) | def bndry(dict):
FILE: doc/plot/ex6.py
function circle (line 7) | def circle(N, R):
FILE: doc/plot/ex7.py
function make_box (line 13) | def make_box(x, y, w, h, attribute):
FILE: tests/test_triangle.py
function test_triangulate (line 6) | def test_triangulate():
function test_delaunay (line 42) | def test_delaunay():
function test_hull (line 56) | def test_hull():
function test_voronoi (line 62) | def test_voronoi():
FILE: triangle/core.c
type __pyx_uintptr_t (line 510) | typedef unsigned long long __pyx_uintptr_t;
type __pyx_uintptr_t (line 512) | typedef unsigned int __pyx_uintptr_t;
type __pyx_uintptr_t (line 516) | typedef unsigned __int64 __pyx_uintptr_t;
type __pyx_uintptr_t (line 518) | typedef unsigned __int32 __pyx_uintptr_t;
type __pyx_uintptr_t (line 523) | typedef uintptr_t __pyx_uintptr_t;
function CYTHON_INLINE (line 595) | static CYTHON_INLINE PyObject* __Pyx_PyCode_New(int a, int p, int k, int...
function CYTHON_INLINE (line 662) | static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k,...
type PyObject (line 749) | typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *co...
type PyObject (line 750) | typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, ...
type PyObject (line 775) | typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *...
function CYTHON_INLINE (line 796) | static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *...
function CYTHON_INLINE (line 800) | static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void *cf...
type PyObject (line 810) | typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObjec...
function CYTHON_INLINE (line 844) | static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op)
type Py_tss_t (line 862) | typedef int Py_tss_t;
function CYTHON_INLINE (line 863) | static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) {
function CYTHON_INLINE (line 867) | static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) {
function CYTHON_INLINE (line 872) | static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) {
function CYTHON_INLINE (line 875) | static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) {
function CYTHON_INLINE (line 878) | static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) {
function CYTHON_INLINE (line 882) | static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) {
function CYTHON_INLINE (line 885) | static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
function CYTHON_INLINE (line 899) | static CYTHON_INLINE int PyGILState_Check(void) {
function CYTHON_INLINE (line 905) | static CYTHON_INLINE int PyGILState_Check(void) {
function CYTHON_INLINE (line 925) | static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, ...
function CYTHON_INLINE (line 934) | static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObjec...
function CYTHON_INLINE (line 1114) | static CYTHON_INLINE PyObject *__Pyx_PyImport_AddModuleRef(const char *n...
type Py_hash_t (line 1151) | typedef long Py_hash_t;
type __Pyx_PyAsyncMethodsStruct (line 1169) | typedef struct {
function CYTHON_INLINE (line 1185) | static CYTHON_INLINE float __PYX_NAN() {
type __Pyx_StringTabEntry (line 1234) | typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const c...
function CYTHON_INLINE (line 1255) | static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t l...
type Py_ssize_t (line 1353) | typedef Py_ssize_t __Pyx_compact_pylong;
type __Pyx_compact_upylong (line 1354) | typedef size_t __Pyx_compact_upylong;
type sdigit (line 1366) | typedef sdigit __Pyx_compact_pylong;
type digit (line 1367) | typedef digit __Pyx_compact_upylong;
function __Pyx_init_sys_getdefaultencoding_params (line 1378) | static int __Pyx_init_sys_getdefaultencoding_params(void) {
function __Pyx_init_sys_getdefaultencoding_params (line 1429) | static int __Pyx_init_sys_getdefaultencoding_params(void) {
function CYTHON_INLINE (line 1461) | static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void...
type __Pyx_StructField_ (line 1491) | struct __Pyx_StructField_
type __Pyx_TypeInfo (line 1493) | typedef struct {
type __Pyx_StructField (line 1503) | typedef struct __Pyx_StructField_ {
type __Pyx_BufFmt_StackElem (line 1508) | typedef struct {
type __Pyx_BufFmt_Context (line 1512) | typedef struct {
type __pyx_memoryview_obj (line 1609) | struct __pyx_memoryview_obj
type __Pyx_memviewslice (line 1610) | typedef struct {
type __pyx_obj_8triangle_4core___pyx_scope_struct____pyx_f_8triangle_4core_ii (line 1624) | struct __pyx_obj_8triangle_4core___pyx_scope_struct____pyx_f_8triangle_4...
type __pyx_obj_8triangle_4core___pyx_scope_struct_1___pyx_f_8triangle_4core_dd (line 1625) | struct __pyx_obj_8triangle_4core___pyx_scope_struct_1___pyx_f_8triangle_...
type __pyx_obj_8triangle_4core___pyx_scope_struct_2___pyx_f_8triangle_4core__wrap (line 1626) | struct __pyx_obj_8triangle_4core___pyx_scope_struct_2___pyx_f_8triangle_...
type __pyx_array_obj (line 1627) | struct __pyx_array_obj
type __pyx_MemviewEnum_obj (line 1628) | struct __pyx_MemviewEnum_obj
type __pyx_memoryview_obj (line 1629) | struct __pyx_memoryview_obj
type __pyx_memoryviewslice_obj (line 1630) | struct __pyx_memoryviewslice_obj
type __pyx_obj_8triangle_4core___pyx_scope_struct____pyx_f_8triangle_4core_ii (line 1639) | struct __pyx_obj_8triangle_4core___pyx_scope_struct____pyx_f_8triangle_4...
type __pyx_obj_8triangle_4core___pyx_scope_struct_1___pyx_f_8triangle_4core_dd (line 1656) | struct __pyx_obj_8triangle_4core___pyx_scope_struct_1___pyx_f_8triangle_...
type __pyx_obj_8triangle_4core___pyx_scope_struct_2___pyx_f_8triangle_4core__wrap (line 1673) | struct __pyx_obj_8triangle_4core___pyx_scope_struct_2___pyx_f_8triangle_...
type __pyx_array_obj (line 1689) | struct __pyx_array_obj {
type __pyx_MemviewEnum_obj (line 1714) | struct __pyx_MemviewEnum_obj {
type __pyx_memoryview_obj (line 1727) | struct __pyx_memoryview_obj {
type __pyx_memoryviewslice_obj (line 1749) | struct __pyx_memoryviewslice_obj {
type __pyx_vtabstruct_array (line 1767) | struct __pyx_vtabstruct_array {
type __pyx_vtabstruct_array (line 1770) | struct __pyx_vtabstruct_array
type __pyx_vtabstruct_memoryview (line 1781) | struct __pyx_vtabstruct_memoryview {
type __pyx_vtabstruct_memoryview (line 1791) | struct __pyx_vtabstruct_memoryview
type __pyx_vtabstruct__memoryviewslice (line 1802) | struct __pyx_vtabstruct__memoryviewslice {
type __pyx_vtabstruct__memoryviewslice (line 1805) | struct __pyx_vtabstruct__memoryviewslice
type __Pyx_RefNannyAPIStruct (line 1814) | typedef struct {
type __pyx_array_obj (line 2141) | struct __pyx_array_obj
function __Pyx_init_assertions_enabled (line 2244) | static int __Pyx_init_assertions_enabled(void) {
function CYTHON_INLINE (line 2341) | static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject*...
function CYTHON_INLINE (line 2381) | static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyO...
function CYTHON_INLINE (line 2394) | static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
function PyObject (line 2467) | static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyOb...
function PyObject (line 2482) | static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyOb...
type __pyx_CyFunctionObject (line 2518) | typedef struct {
type __Pyx_CodeObjectCacheEntry (line 2659) | typedef struct {
type __Pyx_CodeObjectCache (line 2663) | struct __Pyx_CodeObjectCache {
type __Pyx_CodeObjectCache (line 2668) | struct __Pyx_CodeObjectCache
type __Pyx_Buf_DimInfo (line 2688) | typedef struct {
type __Pyx_Buffer (line 2691) | typedef struct {
type __Pyx_LocalBuf_ND (line 2695) | typedef struct {
type __pyx_memoryview_obj (line 2764) | struct __pyx_memoryview_obj
type __pyx_typeinfo_string (line 2779) | struct __pyx_typeinfo_string {
type __pyx_typeinfo_string (line 2782) | struct __pyx_typeinfo_string
type PyObject (line 2801) | typedef PyObject *__Pyx_TypeName;
type __pyx_array_obj (line 2820) | struct __pyx_array_obj
type __pyx_memoryview_obj (line 2821) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 2822) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 2823) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 2824) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 2824) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 2825) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 2826) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 2827) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 2828) | struct __pyx_memoryview_obj
type __pyx_memoryviewslice_obj (line 2829) | struct __pyx_memoryviewslice_obj
type __pyx_memoryviewslice_obj (line 2830) | struct __pyx_memoryviewslice_obj
type __pyx_memoryviewslice_obj (line 2831) | struct __pyx_memoryviewslice_obj
type triangulateio (line 2854) | struct triangulateio
type triangulateio (line 2855) | struct triangulateio
type triangulateio (line 2856) | struct triangulateio
type triangulateio (line 2857) | struct triangulateio
type triangulateio (line 2858) | struct triangulateio
type __pyx_array_obj (line 2859) | struct __pyx_array_obj
type __pyx_array_obj (line 2860) | struct __pyx_array_obj
type __pyx_memoryview_obj (line 2865) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 2865) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 2870) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 2871) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 2872) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 2873) | struct __pyx_memoryview_obj
type __pyx_MemviewEnum_obj (line 2892) | struct __pyx_MemviewEnum_obj
type __pyx_array_obj (line 3096) | struct __pyx_array_obj
type __pyx_array_obj (line 3097) | struct __pyx_array_obj
type __pyx_array_obj (line 3098) | struct __pyx_array_obj
type __pyx_array_obj (line 3099) | struct __pyx_array_obj
type __pyx_array_obj (line 3100) | struct __pyx_array_obj
type __pyx_array_obj (line 3101) | struct __pyx_array_obj
type __pyx_array_obj (line 3102) | struct __pyx_array_obj
type __pyx_array_obj (line 3103) | struct __pyx_array_obj
type __pyx_MemviewEnum_obj (line 3106) | struct __pyx_MemviewEnum_obj
type __pyx_MemviewEnum_obj (line 3107) | struct __pyx_MemviewEnum_obj
type __pyx_MemviewEnum_obj (line 3108) | struct __pyx_MemviewEnum_obj
type __pyx_MemviewEnum_obj (line 3109) | struct __pyx_MemviewEnum_obj
type __pyx_memoryview_obj (line 3110) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 3111) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 3112) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 3113) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 3114) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 3115) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 3116) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 3117) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 3118) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 3119) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 3120) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 3121) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 3122) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 3123) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 3124) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 3125) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 3126) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 3127) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 3128) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 3129) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 3130) | struct __pyx_memoryview_obj
type __pyx_memoryviewslice_obj (line 3133) | struct __pyx_memoryviewslice_obj
type __pyx_mstate (line 3155) | typedef struct {
type PyModuleDef (line 3435) | struct PyModuleDef
type PyModuleDef (line 3438) | struct PyModuleDef
function __pyx_m_clear (line 3457) | static int __pyx_m_clear(PyObject *m) {
function __pyx_m_traverse (line 3721) | static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
function __pyx_array___cinit__ (line 4270) | static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx...
function __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__ (line 4434) | static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(s...
function CYTHON_UNUSED (line 4972) | CYTHON_UNUSED static int __pyx_array_getbuffer(PyObject *__pyx_v_self, P...
function __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__ (line 4985) | static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffe...
function __pyx_array___dealloc__ (line 5321) | static void __pyx_array___dealloc__(PyObject *__pyx_v_self) {
function __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__ (line 5332) | static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc...
function PyObject (line 5458) | static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__...
function PyObject (line 5471) | static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(...
function PyObject (line 5521) | static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v...
function Py_ssize_t (line 5603) | static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self) {
function Py_ssize_t (line 5616) | static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__l...
function PyObject (line 5652) | static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObjec...
function PyObject (line 5665) | static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__ge...
function PyObject (line 5722) | static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObjec...
function PyObject (line 5735) | static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__g...
function __pyx_array___setitem__ (line 5792) | static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__p...
function __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__ (line 5805) | static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem...
function PyObject (line 5860) | static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx...
function PyObject (line 5892) | static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED st...
function PyObject (line 5939) | static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__p...
function PyObject (line 6026) | static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED...
function __pyx_array_allocate_buffer (line 6066) | static int __pyx_array_allocate_buffer(struct __pyx_array_obj *__pyx_v_s...
type __pyx_array_obj (line 6225) | struct __pyx_array_obj
type __pyx_array_obj (line 6226) | struct __pyx_array_obj
type __pyx_array_obj (line 6228) | struct __pyx_array_obj
type __pyx_array_obj (line 6295) | struct __pyx_array_obj
type __pyx_array_obj (line 6341) | struct __pyx_array_obj
function __pyx_MemviewEnum___init__ (line 6400) | static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *...
function __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__ (line 6477) | static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init...
function PyObject (line 6519) | static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self) {
function PyObject (line 6532) | static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_...
function PyObject (line 6578) | static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject ...
function PyObject (line 6610) | static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __p...
function PyObject (line 6837) | static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObjec...
function PyObject (line 6924) | static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct ...
function __pyx_memoryview___cinit__ (line 6973) | static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *...
function __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__ (line 7084) | static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_...
function __pyx_memoryview___dealloc__ (line 7417) | static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self) {
function __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__ (line 7428) | static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview...
type __pyx_memoryview_obj (line 7643) | struct __pyx_memoryview_obj
function PyObject (line 7796) | static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, Py...
function PyObject (line 7809) | static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memor...
function __pyx_memoryview___setitem__ (line 7985) | static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject...
function __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__ (line 7998) | static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_...
function PyObject (line 8209) | static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *...
function PyObject (line 8419) | static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_...
function PyObject (line 8504) | static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __p...
function PyObject (line 8791) | static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryvie...
function PyObject (line 8852) | static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_me...
function PyObject (line 9100) | static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_m...
function CYTHON_UNUSED (line 9313) | CYTHON_UNUSED static int __pyx_memoryview_getbuffer(PyObject *__pyx_v_se...
function __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__ (line 9326) | static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_...
function PyObject (line 9653) | static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__...
function PyObject (line 9666) | static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(...
function PyObject (line 9741) | static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__ge...
function PyObject (line 9754) | static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get...
function PyObject (line 9804) | static PyObject *__pyx_memoryview__get_base(struct __pyx_memoryview_obj ...
function PyObject (line 9846) | static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__g...
function PyObject (line 9859) | static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___ge...
function PyObject (line 9931) | static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1_...
function PyObject (line 9944) | static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___...
function PyObject (line 10046) | static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffset...
function PyObject (line 10059) | static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffset...
function PyObject (line 10165) | static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__ge...
function PyObject (line 10178) | static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get...
function PyObject (line 10230) | static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1...
function PyObject (line 10243) | static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize__...
function PyObject (line 10295) | static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__...
function PyObject (line 10308) | static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___g...
function PyObject (line 10370) | static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__ge...
function PyObject (line 10383) | static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get...
function Py_ssize_t (line 10511) | static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self) {
function Py_ssize_t (line 10524) | static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memo...
function PyObject (line 10590) | static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self) {
function PyObject (line 10603) | static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memor...
function PyObject (line 10694) | static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self) {
function PyObject (line 10707) | static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memor...
function PyObject (line 10781) | static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self,
function PyObject (line 10813) | static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memor...
function PyObject (line 10884) | static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self,
function PyObject (line 10916) | static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memor...
function PyObject (line 10987) | static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self,
function PyObject (line 11019) | static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memor...
function PyObject (line 11108) | static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self,
function PyObject (line 11140) | static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memor...
function PyObject (line 11228) | static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *...
function PyObject (line 11260) | static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUS...
function PyObject (line 11307) | static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject...
function PyObject (line 11394) | static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_U...
function PyObject (line 11434) | static PyObject *__pyx_memoryview_new(PyObject *__pyx_v_o, int __pyx_v_f...
function CYTHON_INLINE (line 11525) | static CYTHON_INLINE int __pyx_memoryview_check(PyObject *__pyx_v_o) {
function PyObject (line 11561) | static PyObject *_unellipsify(PyObject *__pyx_v_index, int __pyx_v_ndim) {
function assert_direct_dimensions (line 11942) | static int assert_direct_dimensions(Py_ssize_t *__pyx_v_suboffsets, int ...
type __pyx_memoryview_obj (line 12029) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 12029) | struct __pyx_memoryview_obj
type __pyx_memoryviewslice_obj (line 12036) | struct __pyx_memoryviewslice_obj
type __pyx_memoryview_obj (line 12047) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 12051) | struct __pyx_memoryview_obj
type __pyx_memoryviewslice_obj (line 12123) | struct __pyx_memoryviewslice_obj
type __pyx_memoryview_obj (line 12547) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 12588) | struct __pyx_memoryview_obj
function __pyx_memoryview_slice_memviewslice (line 12623) | static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *__pyx...
function __pyx_memslice_transpose (line 13737) | static int __pyx_memslice_transpose(__Pyx_memviewslice *__pyx_v_memslice) {
function __pyx_memoryviewslice___dealloc__ (line 13914) | static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self) {
function __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__ (line 13925) | static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memo...
function PyObject (line 13955) | static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __p...
function PyObject (line 14041) | static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __...
function PyObject (line 14124) | static PyObject *__pyx_memoryviewslice__get_base(struct __pyx_memoryview...
function PyObject (line 14170) | static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObj...
function PyObject (line 14202) | static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON...
function PyObject (line 14249) | static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyO...
function PyObject (line 14336) | static PyObject *__pyx_pf___pyx_memoryviewslice_2__setstate_cython__(CYT...
function PyObject (line 14376) | static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice __pyx_v_m...
function __Pyx_memviewslice (line 14762) | static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(st...
function __pyx_memoryview_slice_copy (line 14863) | static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *__p...
function PyObject (line 14988) | static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_ob...
function PyObject (line 15048) | static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_me...
function Py_ssize_t (line 15172) | static Py_ssize_t abs_py_ssize_t(Py_ssize_t __pyx_v_arg) {
function __pyx_get_best_slice_order (line 15214) | static char __pyx_get_best_slice_order(__Pyx_memviewslice *__pyx_v_mslic...
function _copy_strided_to_strided (line 15404) | static void _copy_strided_to_strided(char *__pyx_v_src_data, Py_ssize_t ...
function copy_strided_to_strided (line 15639) | static void copy_strided_to_strided(__Pyx_memviewslice *__pyx_v_src, __P...
function Py_ssize_t (line 15669) | static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__...
function Py_ssize_t (line 15741) | static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_sh...
type __pyx_memoryview_obj (line 15872) | struct __pyx_memoryview_obj
function __pyx_memoryview_err_extents (line 16119) | static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_...
function __pyx_memoryview_err_dim (line 16215) | static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, PyObject *_...
function __pyx_memoryview_err (line 16275) | static int __pyx_memoryview_err(PyObject *__pyx_v_error, PyObject *__pyx...
function __pyx_memoryview_err_no_memory (line 16325) | static int __pyx_memoryview_err_no_memory(void) {
function __pyx_memoryview_copy_contents (line 16369) | static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src...
function __pyx_memoryview_broadcast_leading (line 16947) | static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx...
function __pyx_memoryview_refcount_copying (line 17060) | static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_...
function __pyx_memoryview_refcount_objects_in_slice_with_gil (line 17108) | static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__...
function __pyx_memoryview_refcount_objects_in_slice (line 17144) | static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_dat...
function __pyx_memoryview_slice_assign_scalar (line 17274) | static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__p...
function __pyx_memoryview__slice_assign_scalar (line 17322) | static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py...
function PyObject (line 17460) | static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyO...
function PyObject (line 17577) | static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTH...
function PyObject (line 17758) | static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum...
function PyObject (line 17896) | static PyObject *__pyx_format_from_typeinfo(__Pyx_TypeInfo *__pyx_v_type) {
function PyObject (line 18267) | static PyObject *__pyx_f_8triangle_4core_array_ii(int __pyx_v_N, int __p...
function PyObject (line 18368) | static PyObject *__pyx_f_8triangle_4core_array_dd(int __pyx_v_N, int __p...
function PyObject (line 18588) | static PyObject *__pyx_pw_8triangle_4core_2ii_1_get(PyObject *__pyx_self...
function PyObject (line 18601) | static PyObject *__pyx_pf_8triangle_4core_2ii__get(PyObject *__pyx_self) {
function PyObject (line 18664) | static PyObject *__pyx_pw_8triangle_4core_2ii_3_set(PyObject *__pyx_self,
function PyObject (line 18751) | static PyObject *__pyx_pf_8triangle_4core_2ii_2_set(PyObject *__pyx_self...
function PyObject (line 18927) | static PyObject *__pyx_pw_8triangle_4core_2ii_5_free(PyObject *__pyx_sel...
function PyObject (line 18940) | static PyObject *__pyx_pf_8triangle_4core_2ii_4_free(PyObject *__pyx_sel...
function PyObject (line 19038) | static PyObject *__pyx_f_8triangle_4core_ii(int *__pyx_v__0, int *__pyx_...
function PyObject (line 19161) | static PyObject *__pyx_pw_8triangle_4core_2dd_1_get(PyObject *__pyx_self...
function PyObject (line 19174) | static PyObject *__pyx_pf_8triangle_4core_2dd__get(PyObject *__pyx_self) {
function PyObject (line 19237) | static PyObject *__pyx_pw_8triangle_4core_2dd_3_set(PyObject *__pyx_self,
function PyObject (line 19324) | static PyObject *__pyx_pf_8triangle_4core_2dd_2_set(PyObject *__pyx_self...
function PyObject (line 19500) | static PyObject *__pyx_pw_8triangle_4core_2dd_5_free(PyObject *__pyx_sel...
function PyObject (line 19513) | static PyObject *__pyx_pf_8triangle_4core_2dd_4_free(PyObject *__pyx_sel...
function PyObject (line 19611) | static PyObject *__pyx_f_8triangle_4core_dd(int *__pyx_v__0, int *__pyx_...
function PyObject (line 19734) | static PyObject *__pyx_pw_8triangle_4core_5_wrap_1check(PyObject *__pyx_...
function PyObject (line 19747) | static PyObject *__pyx_pf_8triangle_4core_5_wrap_check(PyObject *__pyx_s...
function PyObject (line 19864) | static PyObject *__pyx_f_8triangle_4core__wrap(struct triangulateio *__p...
function PyObject (line 20192) | static PyObject *__pyx_f_8triangle_4core_cinit(struct triangulateio *__p...
function PyObject (line 20427) | static PyObject *__pyx_f_8triangle_4core_wrap(struct triangulateio *__py...
function PyObject (line 20808) | static PyObject *__pyx_pw_8triangle_4core_1contig2d(PyObject *__pyx_self,
function PyObject (line 20910) | static PyObject *__pyx_pf_8triangle_4core_contig2d(CYTHON_UNUSED PyObjec...
function PyObject (line 21093) | static PyObject *__pyx_f_8triangle_4core_fin(PyObject *__pyx_v_d, struct...
function PyObject (line 21369) | static PyObject *__pyx_f_8triangle_4core_fout(struct triangulateio *__py...
function PyObject (line 21713) | static PyObject *__pyx_pw_8triangle_4core_3triang(PyObject *__pyx_self,
function PyObject (line 21815) | static PyObject *__pyx_pf_8triangle_4core_2triang(CYTHON_UNUSED PyObject...
type __pyx_obj_8triangle_4core___pyx_scope_struct____pyx_f_8triangle_4core_ii (line 22197) | struct __pyx_obj_8triangle_4core___pyx_scope_struct____pyx_f_8triangle_4...
function PyObject (line 22201) | static PyObject *__pyx_tp_new_8triangle_4core___pyx_scope_struct____pyx_...
function __pyx_tp_dealloc_8triangle_4core___pyx_scope_struct____pyx_f_8triangle_4core_ii (line 22223) | static void __pyx_tp_dealloc_8triangle_4core___pyx_scope_struct____pyx_f...
function __pyx_tp_traverse_8triangle_4core___pyx_scope_struct____pyx_f_8triangle_4core_ii (line 22252) | static int __pyx_tp_traverse_8triangle_4core___pyx_scope_struct____pyx_f...
function __pyx_tp_clear_8triangle_4core___pyx_scope_struct____pyx_f_8triangle_4core_ii (line 22264) | static int __pyx_tp_clear_8triangle_4core___pyx_scope_struct____pyx_f_8t...
type __pyx_obj_8triangle_4core___pyx_scope_struct____pyx_f_8triangle_4core_ii (line 22285) | struct __pyx_obj_8triangle_4core___pyx_scope_struct____pyx_f_8triangle_4...
type __pyx_obj_8triangle_4core___pyx_scope_struct____pyx_f_8triangle_4core_ii (line 22295) | struct __pyx_obj_8triangle_4core___pyx_scope_struct____pyx_f_8triangle_4...
type __pyx_obj_8triangle_4core___pyx_scope_struct_1___pyx_f_8triangle_4core_dd (line 22378) | struct __pyx_obj_8triangle_4core___pyx_scope_struct_1___pyx_f_8triangle_...
function PyObject (line 22382) | static PyObject *__pyx_tp_new_8triangle_4core___pyx_scope_struct_1___pyx...
function __pyx_tp_dealloc_8triangle_4core___pyx_scope_struct_1___pyx_f_8triangle_4core_dd (line 22404) | static void __pyx_tp_dealloc_8triangle_4core___pyx_scope_struct_1___pyx_...
function __pyx_tp_traverse_8triangle_4core___pyx_scope_struct_1___pyx_f_8triangle_4core_dd (line 22433) | static int __pyx_tp_traverse_8triangle_4core___pyx_scope_struct_1___pyx_...
function __pyx_tp_clear_8triangle_4core___pyx_scope_struct_1___pyx_f_8triangle_4core_dd (line 22445) | static int __pyx_tp_clear_8triangle_4core___pyx_scope_struct_1___pyx_f_8...
type __pyx_obj_8triangle_4core___pyx_scope_struct_1___pyx_f_8triangle_4core_dd (line 22466) | struct __pyx_obj_8triangle_4core___pyx_scope_struct_1___pyx_f_8triangle_...
type __pyx_obj_8triangle_4core___pyx_scope_struct_1___pyx_f_8triangle_4core_dd (line 22476) | struct __pyx_obj_8triangle_4core___pyx_scope_struct_1___pyx_f_8triangle_...
type __pyx_obj_8triangle_4core___pyx_scope_struct_2___pyx_f_8triangle_4core__wrap (line 22559) | struct __pyx_obj_8triangle_4core___pyx_scope_struct_2___pyx_f_8triangle_...
function PyObject (line 22563) | static PyObject *__pyx_tp_new_8triangle_4core___pyx_scope_struct_2___pyx...
function __pyx_tp_dealloc_8triangle_4core___pyx_scope_struct_2___pyx_f_8triangle_4core__wrap (line 22584) | static void __pyx_tp_dealloc_8triangle_4core___pyx_scope_struct_2___pyx_...
type __pyx_obj_8triangle_4core___pyx_scope_struct_2___pyx_f_8triangle_4core__wrap (line 22616) | struct __pyx_obj_8triangle_4core___pyx_scope_struct_2___pyx_f_8triangle_...
type __pyx_obj_8triangle_4core___pyx_scope_struct_2___pyx_f_8triangle_4core__wrap (line 22626) | struct __pyx_obj_8triangle_4core___pyx_scope_struct_2___pyx_f_8triangle_...
type __pyx_vtabstruct_array (line 22707) | struct __pyx_vtabstruct_array
function PyObject (line 22709) | static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObje...
function __pyx_tp_dealloc_array (line 22734) | static void __pyx_tp_dealloc_array(PyObject *o) {
function PyObject (line 22762) | static PyObject *__pyx_sq_item_array(PyObject *o, Py_ssize_t i) {
function __pyx_mp_ass_subscript_array (line 22770) | static int __pyx_mp_ass_subscript_array(PyObject *o, PyObject *i, PyObje...
function PyObject (line 22784) | static PyObject *__pyx_tp_getattro_array(PyObject *o, PyObject *n) {
function PyObject (line 22793) | static PyObject *__pyx_getprop___pyx_array_memview(PyObject *o, CYTHON_U...
type PyGetSetDef (line 22804) | struct PyGetSetDef
type __pyx_array_obj (line 22846) | struct __pyx_array_obj
type __pyx_array_obj (line 22892) | struct __pyx_array_obj
function PyObject (line 22974) | static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, CYTHON_UNUSED PyObje...
function __pyx_tp_dealloc_Enum (line 22993) | static void __pyx_tp_dealloc_Enum(PyObject *o) {
function __pyx_tp_traverse_Enum (line 23014) | static int __pyx_tp_traverse_Enum(PyObject *o, visitproc v, void *a) {
function __pyx_tp_clear_Enum (line 23023) | static int __pyx_tp_clear_Enum(PyObject *o) {
function PyObject (line 23032) | static PyObject *__pyx_specialmethod___pyx_MemviewEnum___repr__(PyObject...
type __pyx_MemviewEnum_obj (line 23055) | struct __pyx_MemviewEnum_obj
type __pyx_MemviewEnum_obj (line 23065) | struct __pyx_MemviewEnum_obj
type __pyx_vtabstruct_memoryview (line 23146) | struct __pyx_vtabstruct_memoryview
function PyObject (line 23148) | static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, P...
function __pyx_tp_dealloc_memoryview (line 23175) | static void __pyx_tp_dealloc_memoryview(PyObject *o) {
function __pyx_tp_traverse_memoryview (line 23206) | static int __pyx_tp_traverse_memoryview(PyObject *o, visitproc v, void *...
function __pyx_tp_clear_memoryview (line 23224) | static int __pyx_tp_clear_memoryview(PyObject *o) {
function PyObject (line 23239) | static PyObject *__pyx_sq_item_memoryview(PyObject *o, Py_ssize_t i) {
function __pyx_mp_ass_subscript_memoryview (line 23247) | static int __pyx_mp_ass_subscript_memoryview(PyObject *o, PyObject *i, P...
function PyObject (line 23261) | static PyObject *__pyx_getprop___pyx_memoryview_T(PyObject *o, CYTHON_UN...
function PyObject (line 23265) | static PyObject *__pyx_getprop___pyx_memoryview_base(PyObject *o, CYTHON...
function PyObject (line 23269) | static PyObject *__pyx_getprop___pyx_memoryview_shape(PyObject *o, CYTHO...
function PyObject (line 23273) | static PyObject *__pyx_getprop___pyx_memoryview_strides(PyObject *o, CYT...
function PyObject (line 23277) | static PyObject *__pyx_getprop___pyx_memoryview_suboffsets(PyObject *o, ...
function PyObject (line 23281) | static PyObject *__pyx_getprop___pyx_memoryview_ndim(PyObject *o, CYTHON...
function PyObject (line 23285) | static PyObject *__pyx_getprop___pyx_memoryview_itemsize(PyObject *o, CY...
function PyObject (line 23289) | static PyObject *__pyx_getprop___pyx_memoryview_nbytes(PyObject *o, CYTH...
function PyObject (line 23293) | static PyObject *__pyx_getprop___pyx_memoryview_size(PyObject *o, CYTHON...
function PyObject (line 23297) | static PyObject *__pyx_specialmethod___pyx_memoryview___repr__(PyObject ...
type PyGetSetDef (line 23312) | struct PyGetSetDef
type __pyx_memoryview_obj (line 23365) | struct __pyx_memoryview_obj
type __pyx_memoryview_obj (line 23411) | struct __pyx_memoryview_obj
type __pyx_vtabstruct__memoryviewslice (line 23492) | struct __pyx_vtabstruct__memoryviewslice
function PyObject (line 23494) | static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject...
function __pyx_tp_dealloc__memoryviewslice (line 23505) | static void __pyx_tp_dealloc__memoryviewslice(PyObject *o) {
function __pyx_tp_traverse__memoryviewslice (line 23528) | static int __pyx_tp_traverse__memoryviewslice(PyObject *o, visitproc v, ...
function __pyx_tp_clear__memoryviewslice (line 23538) | static int __pyx_tp_clear__memoryviewslice(PyObject *o) {
type __pyx_memoryviewslice_obj (line 23566) | struct __pyx_memoryviewslice_obj
type __pyx_memoryviewslice_obj (line 23576) | struct __pyx_memoryviewslice_obj
function __Pyx_CreateStringTabAndInitStrings (line 23680) | static int __Pyx_CreateStringTabAndInitStrings(void) {
function CYTHON_SMALL_CODE (line 23867) | static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
function CYTHON_SMALL_CODE (line 23886) | static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
function CYTHON_SMALL_CODE (line 24311) | static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) {
function CYTHON_SMALL_CODE (line 24326) | static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) {
function __Pyx_modinit_global_init_code (line 24346) | static int __Pyx_modinit_global_init_code(void) {
function __Pyx_modinit_variable_export_code (line 24362) | static int __Pyx_modinit_variable_export_code(void) {
function __Pyx_modinit_function_export_code (line 24370) | static int __Pyx_modinit_function_export_code(void) {
function __Pyx_modinit_type_init_code (line 24378) | static int __Pyx_modinit_type_init_code(void) {
function __Pyx_modinit_type_import_code (line 24591) | static int __Pyx_modinit_type_import_code(void) {
function __Pyx_modinit_variable_import_code (line 24599) | static int __Pyx_modinit_variable_import_code(void) {
function __Pyx_modinit_function_import_code (line 24607) | static int __Pyx_modinit_function_import_code(void) {
type PyModuleDef (line 24629) | struct PyModuleDef
type PyModuleDef (line 24631) | struct PyModuleDef
function __Pyx_PyMODINIT_FUNC (line 24687) | __Pyx_PyMODINIT_FUNC PyInit_core(void)
function CYTHON_SMALL_CODE (line 24692) | static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) {
function CYTHON_SMALL_CODE (line 24718) | static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, P...
function CYTHON_SMALL_CODE (line 24739) | static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, Py...
function __Pyx_RefNannyAPIStruct (line 25669) | static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modn...
function __Pyx_PyErr_ExceptionMatchesTuple (line 25686) | static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObjec...
function CYTHON_INLINE (line 25699) | static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadSta...
function CYTHON_INLINE (line 25729) | static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate,...
function CYTHON_INLINE (line 25757) | static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, P...
function CYTHON_INLINE (line 25788) | static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, ...
function __Pyx_PyObject_GetAttrStr_ClearAttributeError (line 25802) | static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) {
function CYTHON_INLINE (line 25809) | static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject...
function PyObject (line 25830) | static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
function CYTHON_INLINE (line 25845) | static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHO...
function CYTHON_INLINE (line 25853) | static CYTHON_INLINE PyObject *
function CYTHON_INLINE (line 25866) | static CYTHON_INLINE PyObject *
function CYTHON_INLINE (line 25881) | static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2...
function CYTHON_INLINE (line 25928) | static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* ...
function CYTHON_INLINE (line 26031) | static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwna...
function CYTHON_UNUSED (line 26049) | CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwn...
function __Pyx_RaiseArgtupleInvalid (line 26069) | static void __Pyx_RaiseArgtupleInvalid(
function __Pyx_RaiseDoubleKeywordsError (line 26095) | static void __Pyx_RaiseDoubleKeywordsError(
function __Pyx_ParseOptionalKeywords (line 26109) | static int __Pyx_ParseOptionalKeywords(
function __Pyx__ArgTypeTest (line 26265) | static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const c...
function __Pyx_Raise (line 26293) | static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, P...
function __Pyx_Raise (line 26344) | static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, P...
function PyObject (line 26454) | static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObjec...
function CYTHON_INLINE (line 26577) | static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObj...
function CYTHON_INLINE (line 26602) | static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, ...
function PyObject (line 26627) | static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObje...
function CYTHON_INLINE (line 26643) | static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *fun...
function __Pyx_RaiseUnexpectedTypeError (line 26704) | static int
function PyObject (line 26743) | static PyObject* __Pyx_PyUnicode_BuildFromAscii(Py_ssize_t ulength, char...
function CYTHON_INLINE (line 26817) | static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_int(int value, Py_ss...
function CYTHON_INLINE (line 26890) | static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_Py_ssize_t(Py_ssize_...
function PyObject (line 26963) | static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t ...
function CYTHON_INLINE (line 27032) | static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) {
function PyObject (line 27045) | static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
function CYTHON_INLINE (line 27052) | static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, P...
function CYTHON_INLINE (line 27070) | static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, ...
function CYTHON_INLINE (line 27088) | static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssi...
function CYTHON_INLINE (line 27140) | static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func,...
function PyObject (line 27147) | static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject *index) {
function PyObject (line 27163) | static PyObject *__Pyx_PyObject_GetItem_Slow(PyObject *obj, PyObject *ke...
function PyObject (line 27181) | static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key) {
function __Pyx_CheckKeywordStrings (line 27196) | static int __Pyx_CheckKeywordStrings(
function CYTHON_INLINE (line 27270) | static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t a, Py_ss...
function PyObject (line 27279) | static PyObject *__Pyx_GetAttr3Default(PyObject *d) {
function CYTHON_INLINE (line 27289) | static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, ...
function CYTHON_INLINE (line 27311) | static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) {
function CYTHON_INLINE (line 27315) | static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject ...
function CYTHON_INLINE (line 27327) | static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj...
function CYTHON_INLINE (line 27339) | static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name)
function CYTHON_INLINE (line 27379) | static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expec...
function CYTHON_INLINE (line 27385) | static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t inde...
function CYTHON_INLINE (line 27392) | static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
function CYTHON_INLINE (line 27397) | static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *typ...
function _PyErr_StackItem (line 27418) | static _PyErr_StackItem *
function CYTHON_INLINE (line 27433) | static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, Py...
function CYTHON_INLINE (line 27465) | static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, P...
function __Pyx_GetException (line 27502) | static int __Pyx_GetException(PyObject **type, PyObject **value, PyObjec...
function CYTHON_INLINE (line 27595) | static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, Py...
function CYTHON_INLINE (line 27637) | static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject ...
function PyObject (line 27648) | static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int l...
function PyObject (line 27743) | static PyObject *__Pyx__ImportDottedModule_Lookup(PyObject *name) {
function PyObject (line 27758) | static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, Py...
function PyObject (line 27781) | static PyObject *__Pyx__ImportDottedModule(PyObject *name, PyObject *par...
function PyObject (line 27807) | static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *part...
function __Pyx_InBases (line 27835) | static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) {
function CYTHON_INLINE (line 27843) | static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *...
function CYTHON_INLINE (line 27858) | static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeOb...
function __Pyx_inner_PyErr_GivenExceptionMatches2 (line 27875) | static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObj...
function CYTHON_INLINE (line 27897) | static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObje...
function __Pyx_PyErr_GivenExceptionMatchesTuple (line 27905) | static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, Py...
function CYTHON_INLINE (line 27926) | static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err...
function CYTHON_INLINE (line 27938) | static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *er...
function PyObject (line 27950) | static PyObject* __Pyx_PySequence_Multiply_Generic(PyObject *seq, Py_ssi...
function CYTHON_INLINE (line 27958) | static CYTHON_INLINE PyObject* __Pyx_PySequence_Multiply(PyObject *seq, ...
function __Pyx_SetItemInt_Generic (line 27971) | static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *...
function CYTHON_INLINE (line 27978) | static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i...
function CYTHON_INLINE (line 28025) | static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varna...
function __Pyx_div_long (line 28030) | static CYTHON_INLINE long __Pyx_div_long(long a, long b) {
function PyObject (line 28038) | static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
function CYTHON_INLINE (line 28081) | static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
function CYTHON_INLINE (line 28099) | static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* functi...
function __Pyx_PyObject_GetMethod (line 28105) | static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObj...
function PyObject (line 28207) | static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject*...
function PyObject (line 28213) | static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* met...
function CYTHON_INLINE (line 28234) | static CYTHON_INLINE PyObject* __Pyx_PyBytes_Join(PyObject* sep, PyObjec...
function CYTHON_INLINE (line 28246) | static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_size_t(size_t value,...
function __Pyx_RaiseBufferIndexError (line 28319) | static void __Pyx_RaiseBufferIndexError(int axis) {
function CYTHON_INLINE (line 28325) | static CYTHON_INLINE int __Pyx_IterFinish(void) {
function __Pyx_IternextUnpackEndCheck (line 28340) | static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t exp...
function CYTHON_INLINE (line 28350) | static CYTHON_INLINE void __Pyx_RaiseClosureNameError(const char *varnam...
function __Pyx_fix_up_extension_type_from_spec (line 28356) | static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTy...
function PyObject (line 28428) | static PyObject *__Pyx_FetchSharedCythonABIModule(void) {
function __Pyx_VerifyCachedType (line 28433) | static int __Pyx_VerifyCachedType(PyObject *cached_type,
function PyTypeObject (line 28451) | static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) {
function PyTypeObject (line 28486) | static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyT...
function PyObject (line 28535) | static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __py...
function CYTHON_INLINE (line 28580) | static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject ...
function CYTHON_INLINE (line 28591) | static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void...
function CYTHON_INLINE (line 28600) | static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void...
function CYTHON_INLINE (line 28604) | static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunction...
function PyObject (line 28615) | static PyObject *
function __Pyx_CyFunction_set_doc (line 28641) | static int
function PyObject (line 28652) | static PyObject *
function __Pyx_CyFunction_set_name (line 28670) | static int
function PyObject (line 28688) | static PyObject *
function __Pyx_CyFunction_set_qualname (line 28695) | static int
function PyObject (line 28713) | static PyObject *
function __Pyx_CyFunction_set_dict (line 28725) | static int
function PyObject (line 28743) | static PyObject *
function PyObject (line 28750) | static PyObject *
function PyObject (line 28758) | static PyObject *
function __Pyx_CyFunction_init_defaults (line 28766) | static int
function __Pyx_CyFunction_set_defaults (line 28788) | static int
function PyObject (line 28804) | static PyObject *
function __Pyx_CyFunction_set_kwdefaults (line 28819) | static int
function PyObject (line 28835) | static PyObject *
function __Pyx_CyFunction_set_annotations (line 28850) | static int
function PyObject (line 28864) | static PyObject *
function PyObject (line 28876) | static PyObject *
function PyObject (line 28915) | static PyObject *
function __Pyx_CyFunction_set_module (line 28920) | static int
function PyObject (line 28973) | static PyObject *
function PyObject (line 28993) | static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMet...
function __Pyx_CyFunction_clear (line 29063) | static int
function __Pyx__CyFunction_dealloc (line 29103) | static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m)
function __Pyx_CyFunction_dealloc (line 29110) | static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m)
function __Pyx_CyFunction_traverse (line 29115) | static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitpro...
function PyObject (line 29143) | static PyObject*
function PyObject (line 29154) | static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *...
function CYTHON_INLINE (line 29254) | static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyO...
function PyObject (line 29265) | static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject ...
function CYTHON_INLINE (line 29313) | static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyF...
function PyObject (line 29331) | static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyO...
function PyObject (line 29361) | static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject...
function PyObject (line 29391) | static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject...
function PyObject (line 29415) | static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(P...
function __pyx_CyFunction_init (line 29556) | static int __pyx_CyFunction_init(PyObject *module) {
function CYTHON_INLINE (line 29568) | static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func,...
function CYTHON_INLINE (line 29578) | static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *fu...
function CYTHON_INLINE (line 29583) | static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *f...
function CYTHON_INLINE (line 29588) | static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *...
function PyObject (line 29595) | static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObje...
function PyObject (line 29609) | static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
function PyObject (line 29633) | static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, P...
function CYTHON_INLINE (line 29646) | static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObj...
function PyObject (line 29675) | static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* ...
function CYTHON_INLINE (line 29684) | static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
function PyObject (line 29690) | static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* met...
function __Pyx_validate_bases_tuple (line 29707) | static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t ...
function __Pyx_SetVtable (line 29873) | static int __Pyx_SetVtable(PyTypeObject *type, void *vtable) {
function __Pyx_MergeVtables (line 29912) | static int __Pyx_MergeVtables(PyTypeObject *type) {
function __Pyx_setup_reduce_is_named (line 29965) | static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) {
function __Pyx_setup_reduce (line 29981) | static int __Pyx_setup_reduce(PyObject* type_obj) {
function __Pyx_CLineForTraceback (line 30076) | static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) {
function __pyx_bisect_code_objects (line 30119) | static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries...
function PyCodeObject (line 30140) | static PyCodeObject *__pyx_find_code_object(int code_line) {
function __pyx_insert_code_object (line 30154) | static void __pyx_insert_code_object(int code_line, PyCodeObject* code_o...
function PyObject (line 30210) | static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, P...
function __Pyx_AddTraceback (line 30247) | static void __Pyx_AddTraceback(const char *funcname, int c_line,
function PyCodeObject (line 30292) | static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
function __Pyx_AddTraceback (line 30351) | static void __Pyx_AddTraceback(const char *funcname, int c_line,
function __Pyx_GetBuffer (line 30392) | static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) {
function __Pyx_ReleaseBuffer (line 30404) | static void __Pyx_ReleaseBuffer(Py_buffer *view) {
function __pyx_memviewslice_is_contig (line 30419) | static int
function __pyx_get_array_memory_extents (line 30441) | static void
function __pyx_slices_overlap (line 30465) | static int
function CYTHON_INLINE (line 30499) | static CYTHON_INLINE PyObject *__pyx_memview_get_int(const char *itemp) {
function CYTHON_INLINE (line 30502) | static CYTHON_INLINE int __pyx_memview_set_int(const char *itemp, PyObje...
function CYTHON_INLINE (line 30511) | static CYTHON_INLINE PyObject *__pyx_memview_get_double(const char *item...
function CYTHON_INLINE (line 30514) | static CYTHON_INLINE int __pyx_memview_set_double(const char *itemp, PyO...
function CYTHON_INLINE (line 30523) | static CYTHON_INLINE int __Pyx_Is_Little_Endian(void)
function __Pyx_BufFmt_Init (line 30534) | static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx,
function __Pyx_BufFmt_ParseNumber (line 30561) | static int __Pyx_BufFmt_ParseNumber(const char** ts) {
function __Pyx_BufFmt_ExpectNumber (line 30576) | static int __Pyx_BufFmt_ExpectNumber(const char **ts) {
function __Pyx_BufFmt_RaiseUnexpectedChar (line 30583) | static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) {
function __Pyx_BufFmt_TypeCharToStandardSize (line 30612) | static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_comple...
function __Pyx_BufFmt_TypeCharToNativeSize (line 30630) | static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) {
type __Pyx_st_short (line 30649) | typedef struct { char c; short x; } __Pyx_st_short;
type __Pyx_st_int (line 30650) | typedef struct { char c; int x; } __Pyx_st_int;
type __Pyx_st_long (line 30651) | typedef struct { char c; long x; } __Pyx_st_long;
type __Pyx_st_float (line 30652) | typedef struct { char c; float x; } __Pyx_st_float;
type __Pyx_st_double (line 30653) | typedef struct { char c; double x; } __Pyx_st_double;
type __Pyx_st_longdouble (line 30654) | typedef struct { char c; long double x; } __Pyx_st_longdouble;
type __Pyx_st_void_p (line 30655) | typedef struct { char c; void *x; } __Pyx_st_void_p;
type __Pyx_st_longlong (line 30657) | typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong;
function __Pyx_BufFmt_TypeCharToAlignment (line 30659) | static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, int is_complex) {
type __Pyx_pad_short (line 30682) | typedef struct { short x; char c; } __Pyx_pad_short;
type __Pyx_pad_int (line 30683) | typedef struct { int x; char c; } __Pyx_pad_int;
type __Pyx_pad_long (line 30684) | typedef struct { long x; char c; } __Pyx_pad_long;
type __Pyx_pad_float (line 30685) | typedef struct { float x; char c; } __Pyx_pad_float;
type __Pyx_pad_double (line 30686) | typedef struct { double x; char c; } __Pyx_pad_double;
type __Pyx_pad_longdouble (line 30687) | typedef struct { long double x; char c; } __Pyx_pad_longdouble;
type __Pyx_pad_void_p (line 30688) | typedef struct { void *x; char c; } __Pyx_pad_void_p;
type __Pyx_pad_longlong (line 30690) | typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong;
function __Pyx_BufFmt_TypeCharToPadding (line 30692) | static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, int is_complex) {
function __Pyx_BufFmt_TypeCharToGroup (line 30711) | static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) {
function __Pyx_BufFmt_RaiseExpected (line 30732) | static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) {
function __Pyx_BufFmt_ProcessTypeChunk (line 30756) | static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) {
function __pyx_buffmt_parse_array (line 30858) | static int
function __pyx_typeinfo_cmp (line 31044) | static int
function __pyx_check_strides (line 31085) | static int
function __pyx_check_suboffsets (line 31138) | static int
function __pyx_verify_contig (line 31162) | static int
function __Pyx_ValidateAndInit_memviewslice (line 31191) | static int __Pyx_ValidateAndInit_memviewslice(
function CYTHON_INLINE (line 31267) | static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlic...
function CYTHON_INLINE (line 31290) | static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlic...
function __Pyx_memviewslice (line 31313) | static __Pyx_memviewslice
function __Pyx_init_memviewslice (line 31380) | static int
function __pyx_fatalerror (line 31432) | static void __pyx_fatalerror(const char *fmt, ...) Py_NO_RETURN {
function CYTHON_INLINE (line 31444) | static CYTHON_INLINE int
function CYTHON_INLINE (line 31454) | static CYTHON_INLINE int
function CYTHON_INLINE (line 31464) | static CYTHON_INLINE void
function CYTHON_INLINE (line 31488) | static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memsl...
function __Pyx_TypeInfoToFormat (line 31515) | static struct __pyx_typeinfo_string __Pyx_TypeInfoToFormat(__Pyx_TypeInf...
function CYTHON_INLINE (line 31559) | static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
function CYTHON_INLINE (line 31897) | static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
function __Pyx_TypeName (line 32503) | static __Pyx_TypeName
function __Pyx_get_runtime_version (line 32518) | static unsigned long __Pyx_get_runtime_version(void) {
function __Pyx_check_binary_version (line 32542) | static int __Pyx_check_binary_version(unsigned long ct_version, unsigned...
function __Pyx_InitString (line 32566) | static int __Pyx_InitString(__Pyx_StringTabEntry t, PyObject **str) {
function __Pyx_InitStrings (line 32585) | static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
function CYTHON_INLINE (line 32608) | static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) {
function CYTHON_INLINE (line 32616) | static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_...
function CYTHON_INLINE (line 32621) | static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* ...
function CYTHON_INLINE (line 32626) | static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) {
function CYTHON_INLINE (line 32653) | static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObjec...
function CYTHON_INLINE (line 32695) | static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
function CYTHON_INLINE (line 32700) | static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) {
function PyObject (line 32707) | static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* resul...
function CYTHON_INLINE (line 32780) | static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
function CYTHON_INLINE (line 32840) | static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) {
function CYTHON_INLINE (line 32857) | static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) {
function CYTHON_INLINE (line 32860) | static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
FILE: triangle/data.py
function remove_comments (line 7) | def remove_comments(s):
function split (line 11) | def split(tup, pos):
function loads (line 15) | def loads(
function load (line 195) | def load(directory, name):
function get_data_dir (line 209) | def get_data_dir():
function get_data (line 214) | def get_data(name):
function show_data (line 222) | def show_data(name):
FILE: triangle/plot.py
function compare (line 4) | def compare(plt, A, B, figsize=(6, 3)):
function comparev (line 15) | def comparev(plt, A, B, figsize=(3, 6)):
function plot (line 26) | def plot(ax, **kw):
function vertices (line 46) | def vertices(ax, **kw):
function segments (line 58) | def segments(ax, **kw):
function triangles (line 74) | def triangles(ax, **kw):
function holes (line 79) | def holes(ax, **kw):
function edges (line 84) | def edges(ax, **kw):
function regions (line 121) | def regions(ax, **kw):
function triangle_attributes (line 131) | def triangle_attributes(ax, **kw):
FILE: triangle/tri.py
function triangulate (line 30) | def triangulate(tri, opts=''):
function delaunay (line 79) | def delaunay(pts):
function convex_hull (line 100) | def convex_hull(pts):
function voronoi (line 121) | def voronoi(pts):
Condensed preview — 130 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,371K chars).
[
{
"path": ".github/workflows/wheels.yml",
"chars": 964,
"preview": "name: Build Wheels\n\non: [push, pull_request]\n\njobs:\n build_wheels:\n name: Build wheel on ${{ matrix.os }}\n runs-o"
},
{
"path": ".gitignore",
"chars": 58,
"preview": "*.pyc\n*.so\n\n.eggs/\nbuild/\ndist/\ntriangle.egg-info/\n\n.plot\n"
},
{
"path": ".gitmodules",
"chars": 70,
"preview": "[submodule \"c\"]\n\tpath = c\n\turl = https://github.com/drufat/triangle-c\n"
},
{
"path": "LICENSE",
"chars": 7652,
"preview": " GNU LESSER GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007"
},
{
"path": "README.rst",
"chars": 1004,
"preview": "Triangle\n--------\n\n|Build Status| |Version Status| |Downloads|\n\n.. |Build Status| image:: https://github.com/drufat/tria"
},
{
"path": "doc/API.rst",
"chars": 265,
"preview": "API\n===\n\n.. autofunction:: triangle.triangulate\n\n.. autofunction:: triangle.convex_hull\n\n.. autofunction:: triangle.dela"
},
{
"path": "doc/Makefile",
"chars": 633,
"preview": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line, and also\n# from the "
},
{
"path": "doc/conf.py",
"chars": 2341,
"preview": "# Configuration file for the Sphinx documentation builder.\n#\n# This file only contains a selection of the most common op"
},
{
"path": "doc/convex.rst",
"chars": 1039,
"preview": "Convex Hulls and Mesh Boundaries\n================================\n\nIf the input is a vertex set (rather than a PSLG), Tr"
},
{
"path": "doc/data.rst",
"chars": 6092,
"preview": "Data\n=====\n\nA\n---\n**A** is a planar straight line graph of the capital letter A. We use it as\ninput to get a constrained"
},
{
"path": "doc/definitions.rst",
"chars": 2542,
"preview": "Definitions (of several geometric terms)\n========================================\n\nDelaunay Triangulation\n--------------"
},
{
"path": "doc/delaunay.rst",
"chars": 2194,
"preview": "Generating Delaunay Triangulations\n==================================\n\nTriangle's default behavior is to find the Delaun"
},
{
"path": "doc/examples.rst",
"chars": 599,
"preview": "Examples\n========\n\nLet us triangulate a simple square\n\n.. plot:: plot/ex1.py\n :include-source:\n\nIn order to set maxim"
},
{
"path": "doc/index.rst",
"chars": 255,
"preview": ".. include:: ../README.rst\n\n.. toctree::\n :maxdepth: 1\n\n installing\n API\n data\n examples\n definitions\n"
},
{
"path": "doc/installing.rst",
"chars": 194,
"preview": "Installation \n============\n\nTo install simply run:: \n\n pip install triangle\n \nor build from source:: \n\n git clone"
},
{
"path": "doc/plot/PSLG.py",
"chars": 121,
"preview": "import matplotlib.pyplot as plt\n\nimport triangle as tr\n\nA = tr.get_data('A')\nax = plt.axes()\ntr.plot(ax, **A)\nplt.show()"
},
{
"path": "doc/plot/api_convex_hull.py",
"chars": 254,
"preview": "import matplotlib.pyplot as plt\nimport numpy as np\n\nimport triangle as tr\n\npts = np.array([[0, 0], [0, 1], [1, 1], [1, 0"
},
{
"path": "doc/plot/api_delaunay.py",
"chars": 252,
"preview": "import matplotlib.pyplot as plt\nimport numpy as np\n\nimport triangle as tr\n\npts = np.array([[0, 0], [0, 1], [.5, .5], [1,"
},
{
"path": "doc/plot/api_triangulate.py",
"chars": 200,
"preview": "import matplotlib.pyplot as plt\nimport numpy as np\n\nimport triangle as tr\n\nA = {'vertices': np.array([[0, 0], [0, 1], [1"
},
{
"path": "doc/plot/api_voronoi.py",
"chars": 373,
"preview": "import matplotlib.pyplot as plt\nimport numpy as np\n\nimport triangle as tr\n\npts = np.array([[0, 0], [0, 1], [0.5, 0.5], ["
},
{
"path": "doc/plot/bndries.py",
"chars": 275,
"preview": "import matplotlib.pyplot as plt\n\nimport triangle as tr\n\n\ndef bndry(dict):\n return {k: dict[k] for k in ('vertices', '"
},
{
"path": "doc/plot/conforming_delaunay.py",
"chars": 143,
"preview": "import matplotlib.pyplot as plt\n\nimport triangle as tr\n\nA = tr.get_data('A')\nt = tr.triangulate(A, 'pq0D')\ntr.plot(plt.a"
},
{
"path": "doc/plot/conforming_delaunay1.py",
"chars": 153,
"preview": "import matplotlib.pyplot as plt\n\nimport triangle as tr\n\nface = tr.get_data('face')\nt = tr.triangulate(face, 'pq0D')\ntr.p"
},
{
"path": "doc/plot/constrained_conforming_delaunay.py",
"chars": 143,
"preview": "import matplotlib.pyplot as plt\n\nimport triangle as tr\n\nA = tr.get_data('A')\nt = tr.triangulate(A, 'pq30')\ntr.plot(plt.a"
},
{
"path": "doc/plot/constrained_conforming_delaunay1.py",
"chars": 153,
"preview": "import matplotlib.pyplot as plt\n\nimport triangle as tr\n\nface = tr.get_data('face')\nt = tr.triangulate(face, 'pq10')\n\ntr."
},
{
"path": "doc/plot/constrained_delaunay.py",
"chars": 148,
"preview": "import matplotlib.pyplot as plt\n\nimport triangle as tr\n\nax = plt.axes()\nA = tr.get_data('A')\nt = tr.triangulate(A, 'p')\n"
},
{
"path": "doc/plot/constrained_delaunay1.py",
"chars": 147,
"preview": "import matplotlib.pyplot as plt\n\nimport triangle as tr\n\nbox = tr.get_data('box')\nt = tr.triangulate(box, 'pc')\n\ntr.compa"
},
{
"path": "doc/plot/convex_hull.py",
"chars": 195,
"preview": "import matplotlib.pyplot as plt\n\nimport triangle as tr\n\ndots = tr.get_data('dots')\npts = dots['vertices']\nsegs = tr.conv"
},
{
"path": "doc/plot/delaunay.py",
"chars": 140,
"preview": "import matplotlib.pyplot as plt\n\nimport triangle as tr\n\nd0 = tr.get_data('dots')\nd1 = tr.triangulate(d0)\ntr.compare(plt,"
},
{
"path": "doc/plot/delaunay1.py",
"chars": 154,
"preview": "import matplotlib.pyplot as plt\n\nimport triangle as tr\n\nspiral = tr.get_data('spiral')\nt = tr.triangulate(spiral)\n\ntr.co"
},
{
"path": "doc/plot/ex1.py",
"chars": 192,
"preview": "import matplotlib.pyplot as plt\nimport numpy as np\n\nimport triangle as tr\n\nA = dict(vertices=np.array(((0, 0), (1, 0), ("
},
{
"path": "doc/plot/ex2.py",
"chars": 201,
"preview": "import matplotlib.pyplot as plt\nimport numpy as np\n\nimport triangle as tr\n\nA = dict(vertices=np.array(((0, 0), (1, 0), ("
},
{
"path": "doc/plot/ex3.py",
"chars": 202,
"preview": "import matplotlib.pyplot as plt\nimport numpy as np\n\nimport triangle as tr\n\nA = dict(vertices=np.array(((0, 0), (1, 0), ("
},
{
"path": "doc/plot/ex4.py",
"chars": 273,
"preview": "import matplotlib.pyplot as plt\nimport numpy as np\n\nimport triangle as tr\n\nN = 32\ntheta = np.linspace(0, 2 * np.pi, N, e"
},
{
"path": "doc/plot/ex5.py",
"chars": 278,
"preview": "import matplotlib.pyplot as plt\nimport numpy as np\n\nimport triangle as tr\n\nN = 32\ntheta = np.linspace(0, 2 * np.pi, N, e"
},
{
"path": "doc/plot/ex6.py",
"chars": 527,
"preview": "import matplotlib.pyplot as plt\nimport numpy as np\n\nimport triangle as tr\n\n\ndef circle(N, R):\n i = np.arange(N)\n t"
},
{
"path": "doc/plot/ex7.py",
"chars": 823,
"preview": "import matplotlib.pyplot as plt\nimport numpy as np\n\nimport triangle as tr\n\n# arrays to fill in with input\nvertices = []\n"
},
{
"path": "doc/plot/face.py",
"chars": 124,
"preview": "import matplotlib.pyplot as plt\n\nimport triangle as tr\n\nface = tr.get_data('face.1')\ntr.plot(plt.axes(), **face)\nplt.sho"
},
{
"path": "doc/plot/holes_cavities.py",
"chars": 150,
"preview": "import matplotlib.pyplot as plt\n\nimport triangle as tr\n\nface = tr.get_data('face')\nt = tr.triangulate(face, 'p')\n\ntr.com"
},
{
"path": "doc/plot/quality.py",
"chars": 413,
"preview": "import matplotlib.pyplot as plt\n\nimport triangle as tr\n\nspiral = tr.get_data('spiral')\na = tr.triangulate(spiral)\nb = tr"
},
{
"path": "doc/plot/quality1.py",
"chars": 175,
"preview": "import matplotlib.pyplot as plt\n\nimport triangle as tr\n\nspiral = tr.get_data('spiral')\n\nt = tr.triangulate(spiral, 'a.2'"
},
{
"path": "doc/plot/quality2.py",
"chars": 352,
"preview": "import matplotlib.pyplot as plt\n\nimport triangle as tr\n\nplt.figure(figsize=(8, 7))\n\nla = tr.get_data('la')\nax1 = plt.sub"
},
{
"path": "doc/plot/refine.py",
"chars": 443,
"preview": "import matplotlib.pyplot as plt\n\nimport triangle as tr\n\nbox1 = tr.get_data('bbox.1')\nbox2 = tr.triangulate(box1, 'rpa0.2"
},
{
"path": "doc/plot/refine1.py",
"chars": 159,
"preview": "import matplotlib.pyplot as plt\n\nimport triangle as tr\n\nbox1 = tr.get_data('bbox.1')\nbox2 = tr.triangulate(box1, 'rpa')\n"
},
{
"path": "doc/plot/refine2.py",
"chars": 162,
"preview": "import matplotlib.pyplot as plt\n\nimport triangle as tr\n\nbox1 = tr.get_data('bbox.1')\nbox2 = tr.triangulate(box1, 'rpaa.5"
},
{
"path": "doc/plot/voronoi.py",
"chars": 325,
"preview": "import matplotlib.pyplot as plt\n\nimport triangle as tr\n\npts = tr.get_data('dots')['vertices']\n\nA = dict(vertices=pts)\n\np"
},
{
"path": "doc/plot/voronoi1.py",
"chars": 203,
"preview": "import matplotlib.pyplot as plt\n\nimport triangle as tr\n\npts = tr.get_data('diamond_02_00009')['vertices']\nt = dict(verti"
},
{
"path": "doc/plot/voronoi3.py",
"chars": 425,
"preview": "import matplotlib.pyplot as plt\nimport numpy as np\n\nimport triangle as tr\n\npts = [[0, 0], [0, 1], [0.5, 0.5], [1, 1], [1"
},
{
"path": "doc/quality.rst",
"chars": 1517,
"preview": "Quality Meshing: Angle and Size Constraints\n===========================================\n\nTriangle generates a conforming"
},
{
"path": "doc/refine.rst",
"chars": 2746,
"preview": "Refining Preexisting Meshes\n===========================\n\nThe -r switch causes a mesh (.node and .ele files) to be read a"
},
{
"path": "doc/voronoi.rst",
"chars": 1337,
"preview": "Voronoi Diagrams\n=================\n\nThe -v switch produces the Voronoi diagram of a vertex set in files suffixed\n.v.node"
},
{
"path": "pyproject.toml",
"chars": 1025,
"preview": "[build-system]\nrequires = [\n 'Cython >=3.0.2',\n 'setuptools >=61',\n]\nbuild-backend = 'setuptools.build_meta'\n\n[pro"
},
{
"path": "setup.py",
"chars": 494,
"preview": "from setuptools import setup, Extension\n\n\ndefine_macros = [\n ('VOID', 'void'),\n ('REAL', 'double'),\n ('NO_TIMER"
},
{
"path": "tests/test_triangle.py",
"chars": 1741,
"preview": "import numpy as np\n\nfrom triangle import triangulate, convex_hull, voronoi, delaunay\n\n\ndef test_triangulate():\n v = ["
},
{
"path": "triangle/__init__.py",
"chars": 246,
"preview": "from .version import __version__\nfrom .data import (\n loads,\n load,\n get_data,\n show_data,\n)\nfrom .plot impo"
},
{
"path": "triangle/core.c",
"chars": 1230796,
"preview": "/* Generated by Cython 3.0.11 */\n\n#ifndef PY_SSIZE_T_CLEAN\n#define PY_SSIZE_T_CLEAN\n#endif /* PY_SSIZE_T_CLEAN */\n#if de"
},
{
"path": "triangle/core.pyx",
"chars": 5950,
"preview": "#cython: language_level=3\n\nfrom libc.stdlib cimport free\nimport numpy as np\n\n\ncdef extern from \"triangle.h\":\n\n struct"
},
{
"path": "triangle/data/A.1.ele",
"chars": 768,
"preview": "29 3 0\n 1 29 2 1\n 2 2 29 23\n 3 25 24 23\n 4 23 22 2\n 5 2"
},
{
"path": "triangle/data/A.1.node",
"chars": 2071,
"preview": "29 2 1 1\n 1 0.20000000000000001 -0.77639999999999998 -0.56999999999999995 1\n 2 0.22 -0.7732 -0.55000"
},
{
"path": "triangle/data/A.1.poly",
"chars": 869,
"preview": "0 2 1 1\n29 1\n 1 29 1 1\n 2 1 2 1\n 3 2 3 1\n 4 3 4 "
},
{
"path": "triangle/data/A.poly",
"chars": 1045,
"preview": "29 2 1 0\n1 0.200000 -0.776400 -0.57\n2 0.220000 -0.773200 -0.55\n3 0.245600 -0.756400 -0.51\n4 0.277600 -0.702000 -0.53\n5 0"
},
{
"path": "triangle/data/bbox.1.area",
"chars": 80,
"preview": "12\n1 -1\n2 -1\n3 0.02\n4 -1\n5 -1\n6 -1\n7 -1\n8 -1\n9 -1\n10 -1\n11 -1\n12 -1\n"
},
{
"path": "triangle/data/bbox.1.ele",
"chars": 342,
"preview": "12 3 0\n 1 7 11 8\n 2 9 1 5\n 3 6 2 9\n 4 5 1 10\n 5 "
},
{
"path": "triangle/data/bbox.1.node",
"chars": 272,
"preview": "12 2 0 1\n 1 0 0 5\n 2 0 3 5\n 3 3 0 1\n 4 3 3 33\n 5 1 1 1\n 6 1 2 1"
},
{
"path": "triangle/data/box.1.ele",
"chars": 240,
"preview": "8 3 0\n 1 1 5 6\n 2 5 1 3\n 3 2 6 8\n 4 6 2 1\n 5 7"
},
{
"path": "triangle/data/box.1.node",
"chars": 190,
"preview": "8 2 0 1\n 1 0 0 5\n 2 0 3 5\n 3 3 0 1\n 4 3 3 33\n 5 1 1 1\n 6 1 2 10"
},
{
"path": "triangle/data/box.1.poly",
"chars": 282,
"preview": "0 2 0 1\n8 1\n 1 1 2 5\n 2 5 7 1\n 3 8 7 1\n 4 6 8 "
},
{
"path": "triangle/data/box.2.ele",
"chars": 1597,
"preview": "62 3 0\n 1 16 6 18\n 2 23 22 20\n 3 33 32 8\n 4 14 24 19\n 5 2"
},
{
"path": "triangle/data/box.2.node",
"chars": 1312,
"preview": "40 2 0 1\n 1 0 0 5\n 2 0 3 5\n 3 3 0 1\n 4 3 3 33\n 5 1 1 1\n 6 1 2 1"
},
{
"path": "triangle/data/box.2.poly",
"chars": 559,
"preview": "0 2 0 1\n18 1\n 1 1 9 5\n 2 5 7 1\n 3 36 7 1\n 4 6 8 "
},
{
"path": "triangle/data/box.3.ele",
"chars": 6324,
"preview": "251 3 0\n 1 95 96 93\n 2 57 59 23\n 3 8 72 80\n 4 112 14 111\n 5 "
},
{
"path": "triangle/data/box.3.node",
"chars": 6107,
"preview": "142 2 0 1\n 1 0 0 5\n 2 0 3 5\n 3 3 0 1\n 4 3 3 33\n 5 1 1 1\n 6 1 2 "
},
{
"path": "triangle/data/box.3.poly",
"chars": 965,
"preview": "0 2 0 1\n33 1\n 1 1 103 5\n 2 5 7 1\n 3 36 7 1\n 4 6 8 "
},
{
"path": "triangle/data/box.4.ele",
"chars": 24851,
"preview": "992 3 0\n 1 93 239 238\n 2 203 59 256\n 3 360 362 8\n 4 111 156 155\n 5 2"
},
{
"path": "triangle/data/box.4.node",
"chars": 25313,
"preview": "531 2 0 1\n 1 0 0 5\n 2 0 3 5\n 3 3 0 1\n 4 3 3 33\n 5 1 1 1\n 6 1 2 "
},
{
"path": "triangle/data/box.4.poly",
"chars": 1966,
"preview": "0 2 0 1\n70 1\n 1 1 172 5\n 2 5 200 1\n 3 36 7 1\n 4 370 8 "
},
{
"path": "triangle/data/box.poly",
"chars": 639,
"preview": "# A box with eight vertices in 2D, no attributes, one boundary marker.\n#\n# Licensing:\n#\n# This code is distributed u"
},
{
"path": "triangle/data/diamond_02_00009.1.ele",
"chars": 358,
"preview": "12 3 0\n 1 1 3 2\n 2 4 3 5\n 3 2 4 9\n 4 4 2 3\n 5 "
},
{
"path": "triangle/data/diamond_02_00009.1.node",
"chars": 354,
"preview": "9 2 0 1\n 1 0 0 1\n 2 0 1 1\n 3 0.20000000000000001 0.5 0\n 4 0.29999999999999999 0.5999"
},
{
"path": "triangle/data/diamond_02_00009.1.v.edge",
"chars": 338,
"preview": "20 0\n 1 1 5\n 2 1 4\n 3 1 -1 -1 0\n 4 2 4\n 5 2 12\n 6 2 11\n 7 3 4\n 8 3 8\n 9 "
},
{
"path": "triangle/data/diamond_02_00009.1.v.node",
"chars": 530,
"preview": "12 2 0 0\n 1 -0.52499999999999991 0.5\n 2 0.30000000000000004 0.49999999999999994\n 3 0.5 1.0625\n 4 "
},
{
"path": "triangle/data/diamond_02_00009.node",
"chars": 611,
"preview": "# diamond_02_00009.node\n# created by hand for use with TRIANGLE.\n#\n# File generated on 08 August 2003.\n#\n# This set "
},
{
"path": "triangle/data/dots.1.v.edge",
"chars": 4767,
"preview": "286 0\n 1 1 4\n 2 1 10\n 3 1 3\n 4 2 5\n 5 2 -1 -0.28245900000000002 0.016920000000000040\n 6 "
},
{
"path": "triangle/data/dots.1.v.node",
"chars": 9497,
"preview": "187 2 0 0\n 1 -0.64677978809216052 -0.15912669633082885\n 2 -0.75196630372219431 -0.34140833900679557\n 3 "
},
{
"path": "triangle/data/dots.node",
"chars": 2493,
"preview": "100 2 0 0\n1 0.0476694 0.809168\n2 -0.0412985 0.0934087\n3 0.771124 -0.145541\n4 -0.00285913 -0.0054207\n5 0.0121"
},
{
"path": "triangle/data/double_hex.1.ele",
"chars": 2502,
"preview": "98 3 0\n 1 72 1 2\n 2 71 72 2\n 3 69 70 4\n 4 68 69 5\n 5 7"
},
{
"path": "triangle/data/double_hex.1.node",
"chars": 3607,
"preview": "96 2 0 1\n 1 0 0 1\n 2 0.055599999999999997 0 1\n 3 0.1111 0 1\n 4 0.16669999999999999 0"
},
{
"path": "triangle/data/double_hex.1.poly",
"chars": 2720,
"preview": "0 2 0 1\n96 1\n 1 2 1 1\n 2 3 2 1\n 3 4 3 1\n 4 5 4 "
},
{
"path": "triangle/data/double_hex.2.ele",
"chars": 23966,
"preview": "956 3 0\n 1 198 151 374\n 2 1 2 505\n 3 319 211 140\n 4 120 403 428\n 5 3"
},
{
"path": "triangle/data/double_hex.2.node",
"chars": 26468,
"preview": "525 2 0 1\n 1 0 0 1\n 2 0.055599999999999997 0 1\n 3 0.1111 0 1\n 4 0.16669999999999999 "
},
{
"path": "triangle/data/double_hex.2.poly",
"chars": 2733,
"preview": "0 2 0 1\n96 1\n 1 2 1 1\n 2 3 2 1\n 3 4 3 1\n 4 5 4 "
},
{
"path": "triangle/data/double_hex.poly",
"chars": 4893,
"preview": "# double_hex.poly\n#\n# Discussion:\n#\n# This file describes a rectangular region with two hexagonal holes.\n# It de"
},
{
"path": "triangle/data/double_hex2.1.ele",
"chars": 1303,
"preview": "50 3 0\n 1 36 1 2\n 2 35 36 2\n 3 43 38 33\n 4 32 33 38\n 5 3"
},
{
"path": "triangle/data/double_hex2.1.node",
"chars": 1790,
"preview": "48 2 0 1\n 1 0 0 1\n 2 0.1111 0 1\n 3 0.22220000000000001 0 1\n 4 0.33329999999999999 0 "
},
{
"path": "triangle/data/double_hex2.1.poly",
"chars": 1425,
"preview": "0 2 0 1\n48 1\n 1 2 1 1\n 2 3 2 1\n 3 4 3 1\n 4 5 4 "
},
{
"path": "triangle/data/double_hex2.2.ele",
"chars": 5967,
"preview": "236 3 0\n 1 46 45 81\n 2 1 2 102\n 3 110 62 111\n 4 81 45 82\n 5 1"
},
{
"path": "triangle/data/double_hex2.2.node",
"chars": 6716,
"preview": "141 2 0 1\n 1 0 0 1\n 2 0.1111 0 1\n 3 0.22220000000000001 0 1\n 4 0.33329999999999999 0"
},
{
"path": "triangle/data/double_hex2.2.poly",
"chars": 1438,
"preview": "0 2 0 1\n48 1\n 1 2 1 1\n 2 3 2 1\n 3 4 3 1\n 4 5 4 "
},
{
"path": "triangle/data/double_hex2.poly",
"chars": 3162,
"preview": "# double_hex2.poly\n#\n# Discussion:\n#\n# This file describes a rectangular region with two hexagonal holes.\n# It d"
},
{
"path": "triangle/data/double_hex3.1.ele",
"chars": 24264,
"preview": "968 3 0\n 1 75 155 321\n 2 365 442 166\n 3 88 205 314\n 4 445 444 170\n 5 4"
},
{
"path": "triangle/data/double_hex3.1.node",
"chars": 25934,
"preview": "531 2 0 1\n 1 0 0 1\n 2 1 0 1\n 3 1 1 1\n 4 0 1 1\n 5 0.14999999999999999 0.75 "
},
{
"path": "triangle/data/double_hex3.1.poly",
"chars": 2731,
"preview": "0 2 0 1\n96 1\n 1 2 529 1\n 2 3 379 1\n 3 4 354 1\n 4 1 296 "
},
{
"path": "triangle/data/double_hex3.node",
"chars": 505,
"preview": "16 2 0 1\n#\n# Points on the exterior.\n#\n 1 0.0000 0.0000 1\n 2 1.0000 0.0000 1\n 3 1.0000 1.0000 1\n 4 0"
},
{
"path": "triangle/data/double_hex3.poly",
"chars": 1848,
"preview": "# double_hex3.poly\n#\n# Discussion:\n#\n# This file describes a rectangular region with two hexagonal holes.\n# It d"
},
{
"path": "triangle/data/ell.ele",
"chars": 321,
"preview": "24 3 0\n 1 1 2 6\n 2 7 6 2\n 3 2 3 7\n 4 8 7 3\n 5 3 4 8\n 6 9 8 4\n 7 4 5 9\n 8 10 9 5\n 9 6 "
},
{
"path": "triangle/data/ell.node",
"chars": 348,
"preview": "21 2 0 1\n 1 0.0 0.0 1\n 2 1.0 0.0 1\n 3 2.0 0.0 1\n 4 3.0 0.0 1\n 5 4.0 0.0 1\n 6 0.0 1.0 1\n 7 1.0 1.0"
},
{
"path": "triangle/data/face.1.ele",
"chars": 946,
"preview": "36 3 0\n 1 12 6 7\n 2 5 6 12\n 3 14 13 4\n 4 25 14 5\n 5 1"
},
{
"path": "triangle/data/face.1.node",
"chars": 587,
"preview": "26 2 0 1\n 1 80 0 2\n 2 100 50 2\n 3 0 100 2\n 4 -100 50 2\n 5 -80 0 2\n 6 "
},
{
"path": "triangle/data/face.1.poly",
"chars": 693,
"preview": "0 2 0 1\n22 1\n 1 1 2 2\n 2 3 2 2\n 3 4 3 2\n 4 4 5 "
},
{
"path": "triangle/data/face.poly",
"chars": 1482,
"preview": "# face.poly\n#\n# A face with twenty-six points in 2D, no attributes, one boundary marker.\n26 2 0 1\n# The outer polyhedron"
},
{
"path": "triangle/data/greenland.ele",
"chars": 1793579,
"preview": "64125 3 0\n 1 8664 8665 8661\n 2 8665 8664 2364\n 3 607 8661 8663\n 4 8661 607 8664\n 5 "
},
{
"path": "triangle/data/greenland.node",
"chars": 1659689,
"preview": "33343 2 0 1\n 1 105 39.5 1\n 2 106.5 40 1\n 3 105.5 41 1\n 4 105.5 44 1\n 5 107 "
},
{
"path": "triangle/data/la.1.ele",
"chars": 39207,
"preview": "1566 3 0\n 1 113 112 718\n 2 86 114 115\n 3 86 87 422\n 4 86 85 114\n 5 "
},
{
"path": "triangle/data/la.1.node",
"chars": 42764,
"preview": "860 2 0 1\n 1 0 -0 101\n 2 41.889299999999999 -0 101\n 3 0 -0.23558499999999999 102\n 4 2"
},
{
"path": "triangle/data/la.1.poly",
"chars": 13877,
"preview": "0 2 0 1\n499 1\n 1 337 4 102\n 2 459 5 102\n 3 483 6 102\n 4 394 7 "
},
{
"path": "triangle/data/la.poly",
"chars": 9061,
"preview": "141 2 0 1\n 1 0.000000E+00 -.000000E+00 101\n 2 0.418893E+02 -.000000E+00 101\n 3 0.000000E+00 -.23"
},
{
"path": "triangle/data/spiral.1.ele",
"chars": 415,
"preview": "15 3 0\n 1 1 5 6\n 2 1 6 7\n 3 3 4 1\n 4 2 1 13\n 5 "
},
{
"path": "triangle/data/spiral.1.node",
"chars": 725,
"preview": "15 2 0 1\n 1 0 0 0\n 2 -0.41599999999999998 0.90900000000000003 0\n 3 -1.3500000000000001 0.436 "
},
{
"path": "triangle/data/spiral.node",
"chars": 449,
"preview": "# spiral.node\n#\n# A set of fifteen points in 2D, no attributes, no boundary markers.\n15 2 0 0\n# And here are the fift"
},
{
"path": "triangle/data/spiral.q.1.ele",
"chars": 616,
"preview": "23 3 0\n 1 1 5 6\n 2 1 6 7\n 3 18 16 17\n 4 3 4 1\n 5 1"
},
{
"path": "triangle/data/spiral.q.1.node",
"chars": 983,
"preview": "20 2 0 1\n 1 0 0 0\n 2 -0.41599999999999998 0.90900000000000003 0\n 3 -1.3500000000000001 0.436 "
},
{
"path": "triangle/data/spiral.r.1.ele",
"chars": 920,
"preview": "35 3 0\n 1 7 24 6\n 2 25 26 21\n 3 16 21 23\n 4 24 22 6\n 5 "
},
{
"path": "triangle/data/spiral.r.1.node",
"chars": 1338,
"preview": "27 2 0 1\n 1 0 0 0\n 2 -0.41599999999999998 0.90900000000000003 0\n 3 -1.3500000000000001 0.436 "
},
{
"path": "triangle/data/square_circle_hole.1.ele",
"chars": 37987,
"preview": "1517 3 0\n 1 1 824 823\n 2 824 1 814\n 3 823 824 813\n 4 812 813 793\n 5 "
},
{
"path": "triangle/data/square_circle_hole.1.node",
"chars": 38746,
"preview": "826 2 0 1\n 1 -4 -6 1\n 2 4 -6 1\n 3 4 0 1\n 4 -4 0 1\n 5 -0.12872700000000001 -"
},
{
"path": "triangle/data/square_circle_hole.poly",
"chars": 31610,
"preview": "# square_circle_hole.poly\n#\n# Discussion:\n#\n# This file describes a rectangular region with one hole.\n# It descr"
},
{
"path": "triangle/data.py",
"chars": 6426,
"preview": "import os\nimport re\n\nimport numpy as np\n\n\ndef remove_comments(s):\n return re.sub(\"#.*\\n\", '', s)\n\n\ndef split(tup, pos"
},
{
"path": "triangle/plot.py",
"chars": 3738,
"preview": "import numpy as np\n\n\ndef compare(plt, A, B, figsize=(6, 3)):\n plt.figure(figsize=figsize)\n ax1 = plt.subplot(121)\n"
},
{
"path": "triangle/tri.py",
"chars": 6239,
"preview": "from .core import triang\n\nterms = (\n # points\n ('pointlist', 'vertices'),\n ('pointattributelist', 'vertex_attri"
},
{
"path": "triangle/version.py",
"chars": 25,
"preview": "__version__ = '20250106'\n"
}
]
About this extraction
This page contains the full source code of the drufat/triangle GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 130 files (5.0 MB), approximately 1.3M tokens, and a symbol index with 659 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.