diff --git a/previews/PR135/404.html b/previews/PR135/404.html index 798e3189e..1e7f79a52 100644 --- a/previews/PR135/404.html +++ b/previews/PR135/404.html @@ -5,10 +5,10 @@ 404 | GeometryOps.jl - - + + - + @@ -16,7 +16,7 @@
- + \ No newline at end of file diff --git a/previews/PR135/api.html b/previews/PR135/api.html index a28a79c9a..7fb6d0aac 100644 --- a/previews/PR135/api.html +++ b/previews/PR135/api.html @@ -5,20 +5,20 @@ Full GeometryOps API documentation | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Full GeometryOps API documentation

Warning

This page is still very much WIP!

Documentation for GeometryOps's full API (only for reference!).

apply and associated functions

# GeometryOps.applyFunction.
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
+    
Skip to content

Full GeometryOps API documentation

Warning

This page is still very much WIP!

Documentation for GeometryOps's full API (only for reference!).

apply and associated functions

# GeometryOps.applyFunction.
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
 import GeometryOps as GO
 geom = GI.Polygon([GI.LinearRing([(1, 2), (3, 4), (5, 6), (1, 2)]),
                    GI.LinearRing([(3, 4), (5, 6), (6, 7), (3, 4)])])
@@ -27,7 +27,7 @@
     (GI.y(p), GI.x(p))
 end

source


# GeometryOps.applyreduceFunction.
julia
applyreduce(f, op, target::Union{TraitTarget, GI.AbstractTrait}, obj; threaded)

Apply function f to all objects with the target trait, and reduce the result with an op like +.

The order and grouping of application of op is not guaranteed.

If threaded==true threads will be used over arrays and iterables, feature collections and nested geometries.

source


# GeometryOps.reprojectFunction.
julia
reproject(geometry; source_crs, target_crs, transform, always_xy, time)
 reproject(geometry, source_crs, target_crs; always_xy, time)
-reproject(geometry, transform; always_xy, time)

Reproject any GeoInterface.jl compatible geometry from source_crs to target_crs.

The returned object will be constructed from GeoInterface.WrapperGeometry geometries, wrapping views of a Vector{Proj.Point{D}}, where D is the dimension.

Tip

The Proj.jl package must be loaded for this method to work, since it is implemented in a package extension.

Arguments

  • geometry: Any GeoInterface.jl compatible geometries.

  • source_crs: the source coordinate referece system, as a GeoFormatTypes.jl object or a string.

  • target_crs: the target coordinate referece system, as a GeoFormatTypes.jl object or a string.

If these a passed as keywords, transform will take priority. Without it target_crs is always needed, and source_crs is needed if it is not retreivable from the geometry with GeoInterface.crs(geometry).

Keywords

  • always_xy: force x, y coordinate order, true by default. false will expect and return points in the crs coordinate order.

  • time: the time for the coordinates. Inf by default.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

source


# GeometryOps.transformFunction.
julia
transform(f, obj)

Apply a function f to all the points in obj.

Points will be passed to f as an SVector to allow using CoordinateTransformations.jl and Rotations.jl without hassle.

SVector is also a valid GeoInterface.jl point, so will work in all GeoInterface.jl methods.

Example

julia
julia> import GeoInterface as GI
+reproject(geometry, transform; always_xy, time)

Reproject any GeoInterface.jl compatible geometry from source_crs to target_crs.

The returned object will be constructed from GeoInterface.WrapperGeometry geometries, wrapping views of a Vector{Proj.Point{D}}, where D is the dimension.

Tip

The Proj.jl package must be loaded for this method to work, since it is implemented in a package extension.

Arguments

  • geometry: Any GeoInterface.jl compatible geometries.

  • source_crs: the source coordinate reference system, as a GeoFormatTypes.jl object or a string.

  • target_crs: the target coordinate reference system, as a GeoFormatTypes.jl object or a string.

If these a passed as keywords, transform will take priority. Without it target_crs is always needed, and source_crs is needed if it is not retrievable from the geometry with GeoInterface.crs(geometry).

Keywords

  • always_xy: force x, y coordinate order, true by default. false will expect and return points in the crs coordinate order.

  • time: the time for the coordinates. Inf by default.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

source


# GeometryOps.transformFunction.
julia
transform(f, obj)

Apply a function f to all the points in obj.

Points will be passed to f as an SVector to allow using CoordinateTransformations.jl and Rotations.jl without hassle.

SVector is also a valid GeoInterface.jl point, so will work in all GeoInterface.jl methods.

Example

julia
julia> import GeoInterface as GI
 
 julia> import GeometryOps as GO
 
@@ -40,7 +40,7 @@
 GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Linea
 rRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, Nothing}(StaticArraysCo
 re.SVector{2, Float64}[[4.5, 3.5], [6.5, 5.5], [8.5, 7.5], [4.5, 3.5]], nothing, nothing), GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, Nothing}(StaticA
-rraysCore.SVector{2, Float64}[[6.5, 5.5], [8.5, 7.5], [9.5, 8.5], [6.5, 5.5]], nothing, nothing)], nothing, nothing)

With Rotations.jl you need to actuall multiply the Rotation by the SVector point, which is easy using an anonymous function.

julia
julia> using Rotations
+rraysCore.SVector{2, Float64}[[6.5, 5.5], [8.5, 7.5], [9.5, 8.5], [6.5, 5.5]], nothing, nothing)], nothing, nothing)

With Rotations.jl you need to actually multiply the Rotation by the SVector point, which is easy using an anonymous function.

julia
julia> using Rotations
 
 julia> GO.transform(p -> one(RotMatrix{2}) * p, geom)
 GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Int64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearR
@@ -89,7 +89,7 @@
 true

source

julia
overlaps(::GI.AbstractTrait, geom1, ::GI.AbstractTrait, geom2)::Bool

For any non-specified pair, all have non-matching dimensions, return false.

source

julia
overlaps(
     ::GI.MultiPointTrait, points1,
     ::GI.MultiPointTrait, points2,
-)::Bool

If the multipoints overlap, meaning some, but not all, of the points within the multipoints are shared, return true.

source

julia
overlaps(::GI.LineTrait, line1, ::GI.LineTrait, line)::Bool

If the lines overlap, meaning that they are colinear but each have one endpoint outside of the other line, return true. Else false.

source

julia
overlaps(
+)::Bool

If the multipoints overlap, meaning some, but not all, of the points within the multipoints are shared, return true.

source

julia
overlaps(::GI.LineTrait, line1, ::GI.LineTrait, line)::Bool

If the lines overlap, meaning that they are collinear but each have one endpoint outside of the other line, return true. Else false.

source

julia
overlaps(
     ::Union{GI.LineStringTrait, GI.LinearRing}, line1,
     ::Union{GI.LineStringTrait, GI.LinearRing}, line2,
 )::Bool

If the curves overlap, meaning that at least one edge of each curve overlaps, return true. Else false.

source

julia
overlaps(
@@ -104,7 +104,7 @@
 )::Bool

Return true if polygon overlaps with at least one of the polygons within the multipolygon. Else false.

source

julia
overlaps(
     ::GI.MultiPolygonTrait, polys1,
     ::GI.MultiPolygonTrait, polys2,
-)::Bool

Return true if at least one pair of polygons from multipolygons overlap. Else false.

source


# GeometryOps.touchesFunction.
julia
touches(geom1, geom2)::Bool

Return true if the first geometry touches the second geometry. In other words, the two interiors cannot interact, but one of the geometries must have a boundary point that interacts with either the other geometies interior or boundary.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+)::Bool

Return true if at least one pair of polygons from multipolygons overlap. Else false.

source


# GeometryOps.touchesFunction.
julia
touches(geom1, geom2)::Bool

Return true if the first geometry touches the second geometry. In other words, the two interiors cannot interact, but one of the geometries must have a boundary point that interacts with either the other geometry's interior or boundary.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 
 l1 = GI.Line([(0.0, 0.0), (1.0, 0.0)])
 l2 = GI.Line([(1.0, 1.0), (1.0, -1.0)])
@@ -127,13 +127,13 @@
 true

source

julia
equals(::T, geom_a, ::T, geom_b)::Bool

Two geometries of the same type, which don't have a equals function to dispatch off of should throw an error.

source

julia
equals(trait_a, geom_a, trait_b, geom_b)

Two geometries which are not of the same type cannot be equal so they always return false.

source

julia
equals(::GI.PointTrait, p1, ::GI.PointTrait, p2)::Bool

Two points are the same if they have the same x and y (and z if 3D) coordinates.

source

julia
equals(::GI.PointTrait, p1, ::GI.MultiPointTrait, mp2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source

julia
equals(::GI.MultiPointTrait, mp1, ::GI.PointTrait, p2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source

julia
equals(::GI.MultiPointTrait, mp1, ::GI.MultiPointTrait, mp2)::Bool

Two multipoints are equal if they share the same set of points.

source

julia
equals(
     ::Union{GI.LineTrait, GI.LineStringTrait}, l1,
     ::Union{GI.LineTrait, GI.LineStringTrait}, l2,
-)::Bool

Two lines/linestrings are equal if they share the same set of points going along the curve. Note that lines/linestrings aren't closed by defintion.

source

julia
equals(
+)::Bool

Two lines/linestrings are equal if they share the same set of points going along the curve. Note that lines/linestrings aren't closed by definition.

source

julia
equals(
     ::Union{GI.LineTrait, GI.LineStringTrait}, l1,
     ::GI.LinearRingTrait, l2,
-)::Bool

A line/linestring and a linear ring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source

julia
equals(
+)::Bool

A line/linestring and a linear ring are equal if they share the same set of points going along the curve. Note that lines aren't closed by definition, but rings are, so the line must have a repeated last point to be equal

source

julia
equals(
     ::GI.LinearRingTrait, l1,
     ::Union{GI.LineTrait, GI.LineStringTrait}, l2,
-)::Bool

A linear ring and a line/linestring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source

julia
equals(
+)::Bool

A linear ring and a line/linestring are equal if they share the same set of points going along the curve. Note that lines aren't closed by definition, but rings are, so the line must have a repeated last point to be equal

source

julia
equals(
     ::GI.LinearRingTrait, l1,
     ::GI.LinearRingTrait, l2,
 )::Bool

Two linear rings are equal if they share the same set of points going along the curve. Note that rings are closed by definition, so they can have, but don't need, a repeated last point to be equal.

source

julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two polygons are equal if they share the same exterior edge and holes.

source

julia
equals(::GI.PolygonTrait, geom_a, ::GI.MultiPolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source

julia
equals(::GI.MultiPolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source

julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two multipolygons are equal if they share the same set of polygons.

source


# GeometryOps.centroidFunction.
julia
centroid(geom, [T=Float64])::Tuple{T, T}

Returns the centroid of a given line segment, linear ring, polygon, or mutlipolygon.

source


# GeometryOps.distanceFunction.
julia
distance(point, geom, ::Type{T} = Float64)::T

Calculates the ditance from the geometry g1 to the point. The distance will always be positive or zero.

The method will differ based on the type of the geometry provided: - The distance from a point to a point is just the Euclidean distance between the points. - The distance from a point to a line is the minimum distance from the point to the closest point on the given line. - The distance from a point to a linestring is the minimum distance from the point to the closest segment of the linestring. - The distance from a point to a linear ring is the minimum distance from the point to the closest segment of the linear ring. - The distance from a point to a polygon is zero if the point is within the polygon and otherwise is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The distance from a point to a multigeometry or a geometry collection is the minimum distance between the point and any of the sub-geometries.

Result will be of type T, where T is an optional argument with a default value of Float64.

source


# GeometryOps.signed_distanceFunction.
julia
signed_distance(point, geom, ::Type{T} = Float64)::T

Calculates the signed distance from the geometry geom to the given point. Points within geom have a negative signed distance, and points outside of geom have a positive signed distance. - The signed distance from a point to a point, line, linestring, or linear ring is equal to the distance between the two. - The signed distance from a point to a polygon is negative if the point is within the polygon and is positive otherwise. The value of the distance is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The signed distance from a point to a multigeometry or a geometry collection is the minimum signed distance between the point and any of the sub-geometries.

Result will be of type T, where T is an optional argument with a default value of Float64.

source


# GeometryOps.areaFunction.
julia
area(geom, [T = Float64])::T

Returns the area of a geometry or collection of geometries. This is computed slightly differently for different geometries:

- The area of a point/multipoint is always zero.
@@ -141,7 +141,7 @@
 - The area of a polygon is the absolute value of the signed area.
 - The area multi-polygon is the sum of the areas of all of the sub-polygons.
 - The area of a geometry collection, feature collection of array/iterable 
-    is the sum of the areas of all of the sub-geometries.

Result will be of type T, where T is an optional argument with a default value of Float64.

source


# GeometryOps.signed_areaFunction.
julia
signed_area(geom, [T = Float64])::T

Returns the signed area of a single geometry, based on winding order. This is computed slighly differently for different geometries:

- The signed area of a point is always zero.
+    is the sum of the areas of all of the sub-geometries.

Result will be of type T, where T is an optional argument with a default value of Float64.

source


# GeometryOps.signed_areaFunction.
julia
signed_area(geom, [T = Float64])::T

Returns the signed area of a single geometry, based on winding order. This is computed slightly differently for different geometries:

- The signed area of a point is always zero.
 - The signed area of a curve is always zero.
 - The signed area of a polygon is computed with the shoelace formula and is
 positive if the polygon coordinates wind clockwise and negative if
@@ -150,11 +150,11 @@
 meaning as each sub-polygon could have a different winding order.

Result will be of type T, where T is an optional argument with a default value of Float64.

source


# GeometryOps.anglesFunction.
julia
angles(geom, ::Type{T} = Float64)

Returns the angles of a geometry or collection of geometries. This is computed differently for different geometries:

- The angles of a point is an empty vector.
 - The angles of a single line segment is an empty vector.
 - The angles of a linestring or linearring is a vector of angles formed by the curve.
-- The angles of a polygin is a vector of vectors of angles formed by each ring.
+- The angles of a polygon is a vector of vectors of angles formed by each ring.
 - The angles of a multi-geometry collection is a vector of the angles of each of the
-    sub-geometries as defined above.

Result will be a Vector, or nested set of vectors, of type T where an optional argument with a default value of Float64.

source


# GeometryOps.embed_extentFunction.
julia
embed_extent(obj)

Recursively wrap the object with a GeoInterface.jl geometry, calculating and adding an Extents.Extent to all objects.

This can improve performance when extents need to be checked multiple times, such when needing to check if many points are in geometries, and using their extents as a quick filter for obviously exterior points.

Keywords

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

source


Barycentric coordinates

# GeometryOps.barycentric_coordinatesFunction.
julia
barycentric_coordinates(method = MeanValue(), polygon, point)

Returns the barycentric coordinates of point in polygon using the barycentric coordinate method method.

source


# GeometryOps.barycentric_coordinates!Function.
julia
barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, polygon, point)

Loads the barycentric coordinates of point in polygon into λs using the barycentric coordinate method method.

λs must be of the length of the polygon plus its holes.

Tip

Use this method to avoid excess allocations when you need to calculate barycentric coordinates for many points.

source


# GeometryOps.barycentric_interpolateFunction.
julia
barycentric_interpolate(method = MeanValue(), polygon, values::AbstractVector{V}, point)

Returns the interpolated value at point within polygon using the barycentric coordinate method method. values are the per-point values for the polygon which are to be interpolated.

Returns an object of type V.

Warning

Barycentric interpolation is currently defined only for 2-dimensional polygons. If you pass a 3-D polygon in, the Z coordinate will be used as per-vertex value to be interpolated (the M coordinate in GIS parlance).

source


Other methods

# GeometryOps.AbstractBarycentricCoordinateMethodType.
julia
abstract type AbstractBarycentricCoordinateMethod

Abstract supertype for barycentric coordinate methods. The subtypes may serve as dispatch types, or may cache some information about the target polygon.

API

The following methods must be implemented for all subtypes:

  • barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, point::Point{2, T2})

  • barycentric_interpolate(method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, values::Vector{V}, point::Point{2, T2})::V

  • barycentric_interpolate(method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, interiors::Vector{<: Vector{<: Point{2, T1}}} values::Vector{V}, point::Point{2, T2})::V

The rest of the methods will be implemented in terms of these, and have efficient dispatches for broadcasting.

source


# GeometryOps.ClosedRingType.
julia
ClosedRing() <: GeometryCorrection

This correction ensures that a polygon's exterior and interior rings are closed.

It can be called on any geometry correction as usual.

See also GeometryCorrection.

source


# GeometryOps.DiffIntersectingPolygonsType.
julia
DiffIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygons included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be made nonintersecting through the difference operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area. See also GeometryCorrection, UnionIntersectingPolygons.

source


# GeometryOps.DouglasPeuckerType.
julia
DouglasPeucker <: SimplifyAlg
+    sub-geometries as defined above.

Result will be a Vector, or nested set of vectors, of type T where an optional argument with a default value of Float64.

source


# GeometryOps.embed_extentFunction.
julia
embed_extent(obj)

Recursively wrap the object with a GeoInterface.jl geometry, calculating and adding an Extents.Extent to all objects.

This can improve performance when extents need to be checked multiple times, such when needing to check if many points are in geometries, and using their extents as a quick filter for obviously exterior points.

Keywords

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

source


Barycentric coordinates

# GeometryOps.barycentric_coordinatesFunction.
julia
barycentric_coordinates(method = MeanValue(), polygon, point)

Returns the barycentric coordinates of point in polygon using the barycentric coordinate method method.

source


# GeometryOps.barycentric_coordinates!Function.
julia
barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, polygon, point)

Loads the barycentric coordinates of point in polygon into λs using the barycentric coordinate method method.

λs must be of the length of the polygon plus its holes.

Tip

Use this method to avoid excess allocations when you need to calculate barycentric coordinates for many points.

source


# GeometryOps.barycentric_interpolateFunction.
julia
barycentric_interpolate(method = MeanValue(), polygon, values::AbstractVector{V}, point)

Returns the interpolated value at point within polygon using the barycentric coordinate method method. values are the per-point values for the polygon which are to be interpolated.

Returns an object of type V.

Warning

Barycentric interpolation is currently defined only for 2-dimensional polygons. If you pass a 3-D polygon in, the Z coordinate will be used as per-vertex value to be interpolated (the M coordinate in GIS parlance).

source


Other methods

# GeometryOps.AbstractBarycentricCoordinateMethodType.
julia
abstract type AbstractBarycentricCoordinateMethod

Abstract supertype for barycentric coordinate methods. The subtypes may serve as dispatch types, or may cache some information about the target polygon.

API

The following methods must be implemented for all subtypes:

  • barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, point::Point{2, T2})

  • barycentric_interpolate(method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, values::Vector{V}, point::Point{2, T2})::V

  • barycentric_interpolate(method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, interiors::Vector{<: Vector{<: Point{2, T1}}} values::Vector{V}, point::Point{2, T2})::V

The rest of the methods will be implemented in terms of these, and have efficient dispatches for broadcasting.

source


# GeometryOps.ClosedRingType.
julia
ClosedRing() <: GeometryCorrection

This correction ensures that a polygon's exterior and interior rings are closed.

It can be called on any geometry correction as usual.

See also GeometryCorrection.

source


# GeometryOps.DiffIntersectingPolygonsType.
julia
DiffIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygons included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be made nonintersecting through the difference operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area. See also GeometryCorrection, UnionIntersectingPolygons.

source


# GeometryOps.DouglasPeuckerType.
julia
DouglasPeucker <: SimplifyAlg
 
-DouglasPeucker(; number, ratio, tol)

Simplifies geometries by removing points below tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance a point will be from the line joining its neighboring points.

Note: user input tol is squared to avoid uneccesary computation in algorithm.

source


# GeometryOps.GEOSType.
julia
GEOS(; params...)

A struct which instructs the method it's passed to as an algorithm to use the appropriate GEOS function via LibGEOS.jl for the operation.

Dispatch is generally carried out using the names of the keyword arguments. For example, segmentize will only accept a GEOS struct with only a max_distance keyword, and no other.

It's generally a lot slower than the native Julia implementations, since it must convert to the LibGEOS implementation and back - so be warned!

source


# GeometryOps.GeodesicSegmentsType.
julia
GeodesicSegments(; max_distance::Real, equatorial_radius::Real=6378137, flattening::Real=1/298.257223563)

A method for segmentizing geometries by adding extra vertices to the geometry so that no segment is longer than a given distance. This method calculates the distance between points on the geodesic, and assumes input in lat/long coordinates.

Warning

Any input geometries must be in lon/lat coordinates! If not, the method may fail or error.

Arguments

  • max_distance::Real: The maximum distance, in meters, between vertices in the geometry.

  • equatorial_radius::Real=6378137: The equatorial radius of the Earth, in meters. Passed to Proj.geod_geodesic.

  • flattening::Real=1/298.257223563: The flattening of the Earth, which is the ratio of the difference between the equatorial and polar radii to the equatorial radius. Passed to Proj.geod_geodesic.

One can also omit the equatorial_radius and flattening keyword arguments, and pass a geodesic object directly to the eponymous keyword.

This method uses the Proj/GeographicLib API for geodesic calculations.

source


# GeometryOps.GeometryCorrectionType.
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source


# GeometryOps.LineOrientationType.
julia
Enum LineOrientation

Enum for the orientation of a line with respect to a curve. A line can be line_cross (crossing over the curve), line_hinge (crossing the endpoint of the curve), line_over (colinear with the curve), or line_out (not interacting with the curve).

source


# GeometryOps.LinearSegmentsType.
julia
LinearSegments(; max_distance::Real)

A method for segmentizing geometries by adding extra vertices to the geometry so that no segment is longer than a given distance.

Here, max_distance is a purely nondimensional quantity and will apply in the input space. This is to say, that if the polygon is provided in lat/lon coordinates then the max_distance will be in degrees of arc. If the polygon is provided in meters, then the max_distance will be in meters.

source


# GeometryOps.MeanValueType.
julia
MeanValue() <: AbstractBarycentricCoordinateMethod

This method calculates barycentric coordinates using the mean value method.

References

source


# GeometryOps.PointOrientationType.
julia
Enum PointOrientation

Enum for the orientation of a point with respect to a curve. A point can be point_in the curve, point_on the curve, or point_out of the curve.

source


# GeometryOps.RadialDistanceType.
julia
RadialDistance <: SimplifyAlg

Simplifies geometries by removing points less than tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance between points.

Note: user input tol is squared to avoid uneccesary computation in algorithm.

source


# GeometryOps.SimplifyAlgType.
julia
abstract type SimplifyAlg

Abstract type for simplification algorithms.

API

For now, the algorithm must hold the number, ratio and tol properties.

Simplification algorithm types can hook into the interface by implementing the _simplify(trait, alg, geom) methods for whichever traits are necessary.

source


# GeometryOps.TraitTargetType.
julia
TraitTarget{T}

This struct holds a trait parameter or a union of trait parameters.

It is primarily used for dispatch into methods which select trait levels, like apply, or as a parameter to target.

Constructors

julia
TraitTarget(GI.PointTrait())
+DouglasPeucker(; number, ratio, tol)

Simplifies geometries by removing points below tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance a point will be from the line joining its neighboring points.

Note: user input tol is squared to avoid unnecessary computation in algorithm.

source


# GeometryOps.GEOSType.
julia
GEOS(; params...)

A struct which instructs the method it's passed to as an algorithm to use the appropriate GEOS function via LibGEOS.jl for the operation.

Dispatch is generally carried out using the names of the keyword arguments. For example, segmentize will only accept a GEOS struct with only a max_distance keyword, and no other.

It's generally a lot slower than the native Julia implementations, since it must convert to the LibGEOS implementation and back - so be warned!

source


# GeometryOps.GeodesicSegmentsType.
julia
GeodesicSegments(; max_distance::Real, equatorial_radius::Real=6378137, flattening::Real=1/298.257223563)

A method for segmentizing geometries by adding extra vertices to the geometry so that no segment is longer than a given distance. This method calculates the distance between points on the geodesic, and assumes input in lat/long coordinates.

Warning

Any input geometries must be in lon/lat coordinates! If not, the method may fail or error.

Arguments

  • max_distance::Real: The maximum distance, in meters, between vertices in the geometry.

  • equatorial_radius::Real=6378137: The equatorial radius of the Earth, in meters. Passed to Proj.geod_geodesic.

  • flattening::Real=1/298.257223563: The flattening of the Earth, which is the ratio of the difference between the equatorial and polar radii to the equatorial radius. Passed to Proj.geod_geodesic.

One can also omit the equatorial_radius and flattening keyword arguments, and pass a geodesic object directly to the eponymous keyword.

This method uses the Proj/GeographicLib API for geodesic calculations.

source


# GeometryOps.GeometryCorrectionType.
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source


# GeometryOps.LineOrientationType.
julia
Enum LineOrientation

Enum for the orientation of a line with respect to a curve. A line can be line_cross (crossing over the curve), line_hinge (crossing the endpoint of the curve), line_over (collinear with the curve), or line_out (not interacting with the curve).

source


# GeometryOps.LinearSegmentsType.
julia
LinearSegments(; max_distance::Real)

A method for segmentizing geometries by adding extra vertices to the geometry so that no segment is longer than a given distance.

Here, max_distance is a purely nondimensional quantity and will apply in the input space. This is to say, that if the polygon is provided in lat/lon coordinates then the max_distance will be in degrees of arc. If the polygon is provided in meters, then the max_distance will be in meters.

source


# GeometryOps.MeanValueType.
julia
MeanValue() <: AbstractBarycentricCoordinateMethod

This method calculates barycentric coordinates using the mean value method.

References

source


# GeometryOps.MonotoneChainMethodType.
julia
MonotoneChainMethod()

This is an algorithm for the convex_hull function.

Uses DelaunayTriangulation.jl to compute the convex hull. This is a pure Julia algorithm which provides an optimal Delaunay triangulation.

See also convex_hull

source


# GeometryOps.PointOrientationType.
julia
Enum PointOrientation

Enum for the orientation of a point with respect to a curve. A point can be point_in the curve, point_on the curve, or point_out of the curve.

source


# GeometryOps.RadialDistanceType.
julia
RadialDistance <: SimplifyAlg

Simplifies geometries by removing points less than tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance between points.

Note: user input tol is squared to avoid unnecessary computation in algorithm.

source


# GeometryOps.SimplifyAlgType.
julia
abstract type SimplifyAlg

Abstract type for simplification algorithms.

API

For now, the algorithm must hold the number, ratio and tol properties.

Simplification algorithm types can hook into the interface by implementing the _simplify(trait, alg, geom) methods for whichever traits are necessary.

source


# GeometryOps.TraitTargetType.
julia
TraitTarget{T}

This struct holds a trait parameter or a union of trait parameters.

It is primarily used for dispatch into methods which select trait levels, like apply, or as a parameter to target.

Constructors

julia
TraitTarget(GI.PointTrait())
 TraitTarget(GI.LineStringTrait(), GI.LinearRingTrait()) # and other traits as you may like
 TraitTarget(TraitTarget(...))
 # There are also type based constructors available, but that's not advised.
@@ -162,10 +162,10 @@
 TraitTarget(Union{GI.LineStringTrait, GI.LinearRingTrait})
 # etc.

source


# GeometryOps.UnionIntersectingPolygonsType.
julia
UnionIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygon's included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be combined through the union operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area.

See also GeometryCorrection.

source


# GeometryOps.VisvalingamWhyattType.
julia
VisvalingamWhyatt <: SimplifyAlg
 
-VisvalingamWhyatt(; kw...)

Simplifies geometries by removing points below tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum area of a triangle made with a point and its neighboring points.

Note: user input tol is doubled to avoid uneccesary computation in algorithm.

source


# GeometryOps._detMethod.
julia
_det(s1::Point2{T1}, s2::Point2{T2}) where {T1 <: Real, T2 <: Real}

Returns the determinant of the matrix formed by hcat'ing two points s1 and s2.

Specifically, this is:

julia
s1[1] * s2[2] - s1[2] * s2[1]

source


# GeometryOps._equals_curvesMethod.
julia
_equals_curves(c1, c2, closed_type1, closed_type2)::Bool

Two curves are equal if they share the same set of point, representing the same geometry. Both curves must must be composed of the same set of points, however, they do not have to wind in the same direction, or start on the same point to be equivalent. Inputs: c1 first geometry c2 second geometry closed_type1::Bool true if c1 is closed by definition (polygon, linear ring) closed_type2::Bool true if c2 is closed by definition (polygon, linear ring)

source


# GeometryOps.anglesMethod.
julia
angles(geom, ::Type{T} = Float64)

Returns the angles of a geometry or collection of geometries. This is computed differently for different geometries:

- The angles of a point is an empty vector.
+VisvalingamWhyatt(; kw...)

Simplifies geometries by removing points below tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum area of a triangle made with a point and its neighboring points.

Note: user input tol is doubled to avoid unnecessary computation in algorithm.

source


# GeometryOps._detMethod.
julia
_det(s1::Point2{T1}, s2::Point2{T2}) where {T1 <: Real, T2 <: Real}

Returns the determinant of the matrix formed by hcat'ing two points s1 and s2.

Specifically, this is:

julia
s1[1] * s2[2] - s1[2] * s2[1]

source


# GeometryOps._equals_curvesMethod.
julia
_equals_curves(c1, c2, closed_type1, closed_type2)::Bool

Two curves are equal if they share the same set of point, representing the same geometry. Both curves must must be composed of the same set of points, however, they do not have to wind in the same direction, or start on the same point to be equivalent. Inputs: c1 first geometry c2 second geometry closed_type1::Bool true if c1 is closed by definition (polygon, linear ring) closed_type2::Bool true if c2 is closed by definition (polygon, linear ring)

source


# GeometryOps.anglesMethod.
julia
angles(geom, ::Type{T} = Float64)

Returns the angles of a geometry or collection of geometries. This is computed differently for different geometries:

- The angles of a point is an empty vector.
 - The angles of a single line segment is an empty vector.
 - The angles of a linestring or linearring is a vector of angles formed by the curve.
-- The angles of a polygin is a vector of vectors of angles formed by each ring.
+- The angles of a polygon is a vector of vectors of angles formed by each ring.
 - The angles of a multi-geometry collection is a vector of the angles of each of the
     sub-geometries as defined above.

Result will be a Vector, or nested set of vectors, of type T where an optional argument with a default value of Float64.

source


# GeometryOps.applyMethod.
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
 import GeometryOps as GO
@@ -185,7 +185,7 @@
 
 GO.contains(line, point)
 # output
-true

source


# GeometryOps.coverageMethod.
julia
coverage(geom, xmin, xmax, ymin, ymax, [T = Float64])::T

Returns the area of intersection between given geometry and grid cell defined by its minimum and maximum x and y-values. This is computed differently for different geometries:

  • The signed area of a point is always zero.

  • The signed area of a curve is always zero.

  • The signed area of a polygon is calculated by tracing along its edges and switching to the cell edges if needed.

  • The coverage of a geometry collection, multi-geometry, feature collection of array/iterable is the sum of the coverages of all of the sub-geometries.

Result will be of type T, where T is an optional argument with a default value of Float64.

source


# GeometryOps.coveredbyMethod.
julia
coveredby(g1, g2)::Bool

Return true if the first geometry is completely covered by the second geometry. The interior and boundary of the primary geometry (g1) must not intersect the exterior of the secondary geometry (g2).

Furthermore, coveredby returns the exact opposite result of covers. They are equivalent with the order of the arguments swapped.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+true

source


# GeometryOps.convex_hullFunction.
julia
convex_hull([method], geometries)

Compute the convex hull of the points in geometries. Returns a GI.Polygon representing the convex hull.

Note that the polygon returned is wound counterclockwise as in the Simple Features standard by default. If you choose GEOS, the winding order will be inverted.

Warning

This interface only computes the 2-dimensional convex hull!

For higher dimensional hulls, use the relevant package (Qhull.jl, Quickhull.jl, or similar).

source


# GeometryOps.coverageMethod.
julia
coverage(geom, xmin, xmax, ymin, ymax, [T = Float64])::T

Returns the area of intersection between given geometry and grid cell defined by its minimum and maximum x and y-values. This is computed differently for different geometries:

  • The signed area of a point is always zero.

  • The signed area of a curve is always zero.

  • The signed area of a polygon is calculated by tracing along its edges and switching to the cell edges if needed.

  • The coverage of a geometry collection, multi-geometry, feature collection of array/iterable is the sum of the coverages of all of the sub-geometries.

Result will be of type T, where T is an optional argument with a default value of Float64.

source


# GeometryOps.coveredbyMethod.
julia
coveredby(g1, g2)::Bool

Return true if the first geometry is completely covered by the second geometry. The interior and boundary of the primary geometry (g1) must not intersect the exterior of the secondary geometry (g2).

Furthermore, coveredby returns the exact opposite result of covers. They are equivalent with the order of the arguments swapped.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 p1 = GI.Point(0.0, 0.0)
 p2 = GI.Point(1.0, 1.0)
 l1 = GI.Line([p1, p2])
@@ -237,13 +237,13 @@
 )::Bool

Two linear rings are equal if they share the same set of points going along the curve. Note that rings are closed by definition, so they can have, but don't need, a repeated last point to be equal.

source


# GeometryOps.equalsMethod.
julia
equals(
     ::GI.LinearRingTrait, l1,
     ::Union{GI.LineTrait, GI.LineStringTrait}, l2,
-)::Bool

A linear ring and a line/linestring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPointTrait, mp1, ::GI.MultiPointTrait, mp2)::Bool

Two multipoints are equal if they share the same set of points.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPointTrait, mp1, ::GI.PointTrait, p2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two multipolygons are equal if they share the same set of polygons.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PointTrait, p1, ::GI.MultiPointTrait, mp2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PointTrait, p1, ::GI.PointTrait, p2)::Bool

Two points are the same if they have the same x and y (and z if 3D) coordinates.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.MultiPolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two polygons are equal if they share the same exterior edge and holes.

source


# GeometryOps.equalsMethod.
julia
equals(
+)::Bool

A linear ring and a line/linestring are equal if they share the same set of points going along the curve. Note that lines aren't closed by definition, but rings are, so the line must have a repeated last point to be equal

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPointTrait, mp1, ::GI.MultiPointTrait, mp2)::Bool

Two multipoints are equal if they share the same set of points.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPointTrait, mp1, ::GI.PointTrait, p2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two multipolygons are equal if they share the same set of polygons.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PointTrait, p1, ::GI.MultiPointTrait, mp2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PointTrait, p1, ::GI.PointTrait, p2)::Bool

Two points are the same if they have the same x and y (and z if 3D) coordinates.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.MultiPolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two polygons are equal if they share the same exterior edge and holes.

source


# GeometryOps.equalsMethod.
julia
equals(
     ::Union{GI.LineTrait, GI.LineStringTrait}, l1,
     ::GI.LinearRingTrait, l2,
-)::Bool

A line/linestring and a linear ring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source


# GeometryOps.equalsMethod.
julia
equals(
+)::Bool

A line/linestring and a linear ring are equal if they share the same set of points going along the curve. Note that lines aren't closed by definition, but rings are, so the line must have a repeated last point to be equal

source


# GeometryOps.equalsMethod.
julia
equals(
     ::Union{GI.LineTrait, GI.LineStringTrait}, l1,
     ::Union{GI.LineTrait, GI.LineStringTrait}, l2,
-)::Bool

Two lines/linestrings are equal if they share the same set of points going along the curve. Note that lines/linestrings aren't closed by defintion.

source


# GeometryOps.equalsMethod.
julia
equals(::T, geom_a, ::T, geom_b)::Bool

Two geometries of the same type, which don't have a equals function to dispatch off of should throw an error.

source


# GeometryOps.flattenMethod.
julia
flatten(target::Type{<:GI.AbstractTrait}, obj)
+)::Bool

Two lines/linestrings are equal if they share the same set of points going along the curve. Note that lines/linestrings aren't closed by definition.

source


# GeometryOps.equalsMethod.
julia
equals(::T, geom_a, ::T, geom_b)::Bool

Two geometries of the same type, which don't have a equals function to dispatch off of should throw an error.

source


# GeometryOps.flattenMethod.
julia
flatten(target::Type{<:GI.AbstractTrait}, obj)
 flatten(f, target::Type{<:GI.AbstractTrait}, obj)

Lazily flatten any AbstractArray, iterator, FeatureCollectionTrait, FeatureTrait or AbstractGeometryTrait object obj, so that objects with the target trait are returned by the iterator.

If f is passed in it will be applied to the target geometries.

source


# GeometryOps.flipMethod.
julia
flip(obj)

Swap all of the x and y coordinates in obj, otherwise keeping the original structure (but not necessarily the original type).

Keywords

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

source


# GeometryOps.intersectionMethod.
julia
intersection(geom_a, geom_b, [T::Type]; target::Type, fix_multipoly = UnionIntersectingPolygons())

Return the intersection between two geometries as a list of geometries. Return an empty list if none are found. The type of the list will be constrained as much as possible given the input geometries. Furthermore, the user can provide a target type as a keyword argument and a list of target geometries found in the intersection will be returned. The user can also provide a float type that they would like the points of returned geometries to be. If the user is taking a intersection involving one or more multipolygons, and the multipolygon might be comprised of polygons that intersect, if fix_multipoly is set to an IntersectingPolygons correction (the default is UnionIntersectingPolygons()), then the needed multipolygons will be fixed to be valid before performing the intersection to ensure a correct answer. Only set fix_multipoly to nothing if you know that the multipolygons are valid, as it will avoid unneeded computation.

Example

julia
import GeoInterface as GI, GeometryOps as GO
 
 line1 = GI.Line([(124.584961,-12.768946), (126.738281,-17.224758)])
@@ -295,7 +295,7 @@
 
 GO.overlaps(poly1, poly2)
 # output
-true

source


# GeometryOps.overlapsMethod.
julia
overlaps(::GI.AbstractTrait, geom1, ::GI.AbstractTrait, geom2)::Bool

For any non-specified pair, all have non-matching dimensions, return false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(::GI.LineTrait, line1, ::GI.LineTrait, line)::Bool

If the lines overlap, meaning that they are colinear but each have one endpoint outside of the other line, return true. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
+true

source


# GeometryOps.overlapsMethod.
julia
overlaps(::GI.AbstractTrait, geom1, ::GI.AbstractTrait, geom2)::Bool

For any non-specified pair, all have non-matching dimensions, return false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(::GI.LineTrait, line1, ::GI.LineTrait, line)::Bool

If the lines overlap, meaning that they are collinear but each have one endpoint outside of the other line, return true. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
     ::GI.MultiPointTrait, points1,
     ::GI.MultiPointTrait, points2,
 )::Bool

If the multipoints overlap, meaning some, but not all, of the points within the multipoints are shared, return true.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
@@ -323,14 +323,14 @@
 polygonize(xs, ys, A::AbstractMatrix{Bool}; kw...)
 polygonize(f, xs, ys, A::AbstractMatrix; kw...)

Polygonize an AbstractMatrix of values, currently to a single class of polygons.

Returns a MultiPolygon for Bool values and f return values, and a FeatureCollection of Features holding MultiPolygon for all other values.

Function f should return either true or false or a transformation of values into simpler groups, especially useful for floating point arrays.

If xs and ys are ranges, they are used as the pixel/cell center points. If they are Vector of Tuple they are used as the lower and upper bounds of each pixel/cell.

Keywords

  • minpoints: ignore polygons with less than minpoints points.

  • values: the values to turn into polygons. By default these are union(A), If function f is passed these refer to the return values of f, by default union(map(f, A). If values Bool, false is ignored and a single MultiPolygon is returned rather than a FeatureCollection.

Example

julia
using GeometryOps
 A = rand(100, 100)
-multipolygon = polygonize(>(0.5), A);

source


# GeometryOps.rebuildMethod.
julia
rebuild(geom, child_geoms)

Rebuild a geometry from child geometries.

By default geometries will be rebuilt as a GeoInterface.Wrappers geometry, but rebuild can have methods added to it to dispatch on geometries from other packages and specify how to rebuild them.

(Maybe it should go into GeoInterface.jl)

source


# GeometryOps.reconstructMethod.
julia
reconstruct(geom, components)

Reconstruct geom from an iterable of component objects that match its structure.

All objects in components must have the same GeoInterface.trait.

Ususally used in combination with flatten.

source


# GeometryOps.segmentizeMethod.
julia
segmentize([method = LinearSegments()], geom; max_distance::Real, threaded)

Segmentize a geometry by adding extra vertices to the geometry so that no segment is longer than a given distance. This is useful for plotting geometries with a limited number of vertices, or for ensuring that a geometry is not too "coarse" for a given application.

Arguments

  • method::SegmentizeMethod = LinearSegments(): The method to use for segmentizing the geometry. At the moment, only LinearSegments and GeodesicSegments are available.

  • geom: The geometry to segmentize. Must be a LineString, LinearRing, or greater in complexity.

  • max_distance::Real: The maximum distance, in the input space, between vertices in the geometry. Only used if you don't explicitly pass a method.

Returns a geometry of similar type to the input geometry, but resampled.

source


# GeometryOps.signed_areaMethod.
julia
signed_area(geom, [T = Float64])::T

Returns the signed area of a single geometry, based on winding order. This is computed slighly differently for different geometries:

- The signed area of a point is always zero.
+multipolygon = polygonize(>(0.5), A);

source


# GeometryOps.rebuildMethod.
julia
rebuild(geom, child_geoms)

Rebuild a geometry from child geometries.

By default geometries will be rebuilt as a GeoInterface.Wrappers geometry, but rebuild can have methods added to it to dispatch on geometries from other packages and specify how to rebuild them.

(Maybe it should go into GeoInterface.jl)

source


# GeometryOps.reconstructMethod.
julia
reconstruct(geom, components)

Reconstruct geom from an iterable of component objects that match its structure.

All objects in components must have the same GeoInterface.trait.

Usually used in combination with flatten.

source


# GeometryOps.segmentizeMethod.
julia
segmentize([method = LinearSegments()], geom; max_distance::Real, threaded)

Segmentize a geometry by adding extra vertices to the geometry so that no segment is longer than a given distance. This is useful for plotting geometries with a limited number of vertices, or for ensuring that a geometry is not too "coarse" for a given application.

Arguments

  • method::SegmentizeMethod = LinearSegments(): The method to use for segmentizing the geometry. At the moment, only LinearSegments and GeodesicSegments are available.

  • geom: The geometry to segmentize. Must be a LineString, LinearRing, or greater in complexity.

  • max_distance::Real: The maximum distance, in the input space, between vertices in the geometry. Only used if you don't explicitly pass a method.

Returns a geometry of similar type to the input geometry, but resampled.

source


# GeometryOps.signed_areaMethod.
julia
signed_area(geom, [T = Float64])::T

Returns the signed area of a single geometry, based on winding order. This is computed slightly differently for different geometries:

- The signed area of a point is always zero.
 - The signed area of a curve is always zero.
 - The signed area of a polygon is computed with the shoelace formula and is
 positive if the polygon coordinates wind clockwise and negative if
 counterclockwise.
 - You cannot compute the signed area of a multipolygon as it doesn't have a
 meaning as each sub-polygon could have a different winding order.

Result will be of type T, where T is an optional argument with a default value of Float64.

source


# GeometryOps.signed_distanceMethod.
julia
signed_distance(point, geom, ::Type{T} = Float64)::T

Calculates the signed distance from the geometry geom to the given point. Points within geom have a negative signed distance, and points outside of geom have a positive signed distance. - The signed distance from a point to a point, line, linestring, or linear ring is equal to the distance between the two. - The signed distance from a point to a polygon is negative if the point is within the polygon and is positive otherwise. The value of the distance is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The signed distance from a point to a multigeometry or a geometry collection is the minimum signed distance between the point and any of the sub-geometries.

Result will be of type T, where T is an optional argument with a default value of Float64.

source


# GeometryOps.simplifyMethod.
julia
simplify(obj; kw...)
-simplify(::SimplifyAlg, obj; kw...)

Simplify a geometry, feature, feature collection, or nested vectors or a table of these.

RadialDistance, DouglasPeucker, or VisvalingamWhyatt algorithms are available, listed in order of increasing quality but decreaseing performance.

PoinTrait and MultiPointTrait are returned unchanged.

The default behaviour is simplify(DouglasPeucker(; kw...), obj). Pass in other SimplifyAlg to use other algorithms.

Keywords

  • prefilter_alg: SimplifyAlg algorithm used to pre-filter object before using primary filtering algorithm.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Keywords for DouglasPeucker are allowed when no algorithm is specified:

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance a point will be from the line joining its neighboring points.

Example

Simplify a polygon to have six points:

julia
import GeoInterface as GI
+simplify(::SimplifyAlg, obj; kw...)

Simplify a geometry, feature, feature collection, or nested vectors or a table of these.

RadialDistance, DouglasPeucker, or VisvalingamWhyatt algorithms are available, listed in order of increasing quality but decreasing performance.

PoinTrait and MultiPointTrait are returned unchanged.

The default behaviour is simplify(DouglasPeucker(; kw...), obj). Pass in other SimplifyAlg to use other algorithms.

Keywords

  • prefilter_alg: SimplifyAlg algorithm used to pre-filter object before using primary filtering algorithm.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Keywords for DouglasPeucker are allowed when no algorithm is specified:

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance a point will be from the line joining its neighboring points.

Example

Simplify a polygon to have six points:

julia
import GeoInterface as GI
 import GeometryOps as GO
 
 poly = GI.Polygon([[
@@ -359,7 +359,7 @@
 GI.npoint(simple)
 
 # output
-6

source


# GeometryOps.t_valueMethod.
julia
t_value(sᵢ, sᵢ₊₁, rᵢ, rᵢ₊₁)

Returns the "T-value" as described in Hormann's presentation [1] on how to calculate the mean-value coordinate.

Here, sᵢ is the vector from vertex vᵢ to the point, and rᵢ is the norm (length) of sᵢ. s must be Point and r must be real numbers.

t=det(s,s)rr+ss

+6

source


# GeometryOps.t_valueMethod.
julia
t_value(sᵢ, sᵢ₊₁, rᵢ, rᵢ₊₁)

Returns the "T-value" as described in Hormann's presentation [1] on how to calculate the mean-value coordinate.

Here, sᵢ is the vector from vertex vᵢ to the point, and rᵢ is the norm (length) of sᵢ. s must be Point and r must be real numbers.

t=det(s,s)rr+ss

 
 [source](https://github.com/JuliaGeo/GeometryOps.jl/blob/v0.1.10/src/methods/barycentric.jl#L289-L305)
 
@@ -372,7 +372,7 @@
 
 
 ```julia
-to_edges()

Convert any geometry or collection of geometries into a flat vector of Tuple{Tuple{Float64,Float64},Tuple{Float64,Float64}} edges.

source


# GeometryOps.touchesMethod.
julia
touches(geom1, geom2)::Bool

Return true if the first geometry touches the second geometry. In other words, the two interiors cannot interact, but one of the geometries must have a boundary point that interacts with either the other geometies interior or boundary.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+to_edges()

Convert any geometry or collection of geometries into a flat vector of Tuple{Tuple{Float64,Float64},Tuple{Float64,Float64}} edges.

source


# GeometryOps.touchesMethod.
julia
touches(geom1, geom2)::Bool

Return true if the first geometry touches the second geometry. In other words, the two interiors cannot interact, but one of the geometries must have a boundary point that interacts with either the other geometry's interior or boundary.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 
 l1 = GI.Line([(0.0, 0.0), (1.0, 0.0)])
 l2 = GI.Line([(1.0, 1.0), (1.0, -1.0)])
@@ -392,7 +392,7 @@
 GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Linea
 rRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, Nothing}(StaticArraysCo
 re.SVector{2, Float64}[[4.5, 3.5], [6.5, 5.5], [8.5, 7.5], [4.5, 3.5]], nothing, nothing), GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, Nothing}(StaticA
-rraysCore.SVector{2, Float64}[[6.5, 5.5], [8.5, 7.5], [9.5, 8.5], [6.5, 5.5]], nothing, nothing)], nothing, nothing)

With Rotations.jl you need to actuall multiply the Rotation by the SVector point, which is easy using an anonymous function.

julia
julia> using Rotations
+rraysCore.SVector{2, Float64}[[6.5, 5.5], [8.5, 7.5], [9.5, 8.5], [6.5, 5.5]], nothing, nothing)], nothing, nothing)

With Rotations.jl you need to actually multiply the Rotation by the SVector point, which is easy using an anonymous function.

julia
julia> using Rotations
 
 julia> GO.transform(p -> one(RotMatrix{2}) * p, geom)
 GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Int64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearR
@@ -416,7 +416,7 @@
 
 # output
 true

source



  1. K. Hormann and N. Sukumar. Generalized Barycentric Coordinates in Computer Graphics and Computational Mechanics. Taylor & Fancis, CRC Press, 2017. ↩︎

- + \ No newline at end of file diff --git a/previews/PR135/assets/uugjisc.BOOG5oTW.png b/previews/PR135/assets/afsyzdr.BOOG5oTW.png similarity index 100% rename from previews/PR135/assets/uugjisc.BOOG5oTW.png rename to previews/PR135/assets/afsyzdr.BOOG5oTW.png diff --git a/previews/PR135/assets/rlpsaah.C3SxJ3x-.png b/previews/PR135/assets/aithltv.C3SxJ3x-.png similarity index 100% rename from previews/PR135/assets/rlpsaah.C3SxJ3x-.png rename to previews/PR135/assets/aithltv.C3SxJ3x-.png diff --git a/previews/PR135/assets/api.md.D8UtvlcW.js b/previews/PR135/assets/api.md.BkdCNSpp.js similarity index 84% rename from previews/PR135/assets/api.md.D8UtvlcW.js rename to previews/PR135/assets/api.md.BkdCNSpp.js index 8df9bb16a..3c39cf685 100644 --- a/previews/PR135/assets/api.md.D8UtvlcW.js +++ b/previews/PR135/assets/api.md.BkdCNSpp.js @@ -1,4 +1,4 @@ -import{_ as n,c as e,j as s,a,a7 as i,o as t}from"./chunks/framework.k41oUgTf.js";const q=JSON.parse('{"title":"Full GeometryOps API documentation","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),l={name:"api.md"},h=i(`

Full GeometryOps API documentation

Warning

This page is still very much WIP!

Documentation for GeometryOps's full API (only for reference!).

apply and associated functions

# GeometryOps.applyFunction.
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
+import{_ as n,c as e,j as s,a,a7 as i,o as t}from"./chunks/framework.CONf0Rze.js";const q=JSON.parse('{"title":"Full GeometryOps API documentation","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),l={name:"api.md"},h=i(`

Full GeometryOps API documentation

Warning

This page is still very much WIP!

Documentation for GeometryOps's full API (only for reference!).

apply and associated functions

# GeometryOps.applyFunction.
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
 import GeometryOps as GO
 geom = GI.Polygon([GI.LinearRing([(1, 2), (3, 4), (5, 6), (1, 2)]),
                    GI.LinearRing([(3, 4), (5, 6), (6, 7), (3, 4)])])
@@ -7,7 +7,7 @@ import{_ as n,c as e,j as s,a,a7 as i,o as t}from"./chunks/framework.k41oUgTf.js
     (GI.y(p), GI.x(p))
 end

source


# GeometryOps.applyreduceFunction.
julia
applyreduce(f, op, target::Union{TraitTarget, GI.AbstractTrait}, obj; threaded)

Apply function f to all objects with the target trait, and reduce the result with an op like +.

The order and grouping of application of op is not guaranteed.

If threaded==true threads will be used over arrays and iterables, feature collections and nested geometries.

source


# GeometryOps.reprojectFunction.
julia
reproject(geometry; source_crs, target_crs, transform, always_xy, time)
 reproject(geometry, source_crs, target_crs; always_xy, time)
-reproject(geometry, transform; always_xy, time)

Reproject any GeoInterface.jl compatible geometry from source_crs to target_crs.

The returned object will be constructed from GeoInterface.WrapperGeometry geometries, wrapping views of a Vector{Proj.Point{D}}, where D is the dimension.

Tip

The Proj.jl package must be loaded for this method to work, since it is implemented in a package extension.

Arguments

  • geometry: Any GeoInterface.jl compatible geometries.

  • source_crs: the source coordinate referece system, as a GeoFormatTypes.jl object or a string.

  • target_crs: the target coordinate referece system, as a GeoFormatTypes.jl object or a string.

If these a passed as keywords, transform will take priority. Without it target_crs is always needed, and source_crs is needed if it is not retreivable from the geometry with GeoInterface.crs(geometry).

Keywords

  • always_xy: force x, y coordinate order, true by default. false will expect and return points in the crs coordinate order.

  • time: the time for the coordinates. Inf by default.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

source


# GeometryOps.transformFunction.
julia
transform(f, obj)

Apply a function f to all the points in obj.

Points will be passed to f as an SVector to allow using CoordinateTransformations.jl and Rotations.jl without hassle.

SVector is also a valid GeoInterface.jl point, so will work in all GeoInterface.jl methods.

Example

julia
julia> import GeoInterface as GI
+reproject(geometry, transform; always_xy, time)

Reproject any GeoInterface.jl compatible geometry from source_crs to target_crs.

The returned object will be constructed from GeoInterface.WrapperGeometry geometries, wrapping views of a Vector{Proj.Point{D}}, where D is the dimension.

Tip

The Proj.jl package must be loaded for this method to work, since it is implemented in a package extension.

Arguments

  • geometry: Any GeoInterface.jl compatible geometries.

  • source_crs: the source coordinate reference system, as a GeoFormatTypes.jl object or a string.

  • target_crs: the target coordinate reference system, as a GeoFormatTypes.jl object or a string.

If these a passed as keywords, transform will take priority. Without it target_crs is always needed, and source_crs is needed if it is not retrievable from the geometry with GeoInterface.crs(geometry).

Keywords

  • always_xy: force x, y coordinate order, true by default. false will expect and return points in the crs coordinate order.

  • time: the time for the coordinates. Inf by default.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

source


# GeometryOps.transformFunction.
julia
transform(f, obj)

Apply a function f to all the points in obj.

Points will be passed to f as an SVector to allow using CoordinateTransformations.jl and Rotations.jl without hassle.

SVector is also a valid GeoInterface.jl point, so will work in all GeoInterface.jl methods.

Example

julia
julia> import GeoInterface as GI
 
 julia> import GeometryOps as GO
 
@@ -20,7 +20,7 @@ import{_ as n,c as e,j as s,a,a7 as i,o as t}from"./chunks/framework.k41oUgTf.js
 GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Linea
 rRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, Nothing}(StaticArraysCo
 re.SVector{2, Float64}[[4.5, 3.5], [6.5, 5.5], [8.5, 7.5], [4.5, 3.5]], nothing, nothing), GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, Nothing}(StaticA
-rraysCore.SVector{2, Float64}[[6.5, 5.5], [8.5, 7.5], [9.5, 8.5], [6.5, 5.5]], nothing, nothing)], nothing, nothing)

With Rotations.jl you need to actuall multiply the Rotation by the SVector point, which is easy using an anonymous function.

julia
julia> using Rotations
+rraysCore.SVector{2, Float64}[[6.5, 5.5], [8.5, 7.5], [9.5, 8.5], [6.5, 5.5]], nothing, nothing)], nothing, nothing)

With Rotations.jl you need to actually multiply the Rotation by the SVector point, which is easy using an anonymous function.

julia
julia> using Rotations
 
 julia> GO.transform(p -> one(RotMatrix{2}) * p, geom)
 GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Int64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearR
@@ -69,7 +69,7 @@ import{_ as n,c as e,j as s,a,a7 as i,o as t}from"./chunks/framework.k41oUgTf.js
 true

source

julia
overlaps(::GI.AbstractTrait, geom1, ::GI.AbstractTrait, geom2)::Bool

For any non-specified pair, all have non-matching dimensions, return false.

source

julia
overlaps(
     ::GI.MultiPointTrait, points1,
     ::GI.MultiPointTrait, points2,
-)::Bool

If the multipoints overlap, meaning some, but not all, of the points within the multipoints are shared, return true.

source

julia
overlaps(::GI.LineTrait, line1, ::GI.LineTrait, line)::Bool

If the lines overlap, meaning that they are colinear but each have one endpoint outside of the other line, return true. Else false.

source

julia
overlaps(
+)::Bool

If the multipoints overlap, meaning some, but not all, of the points within the multipoints are shared, return true.

source

julia
overlaps(::GI.LineTrait, line1, ::GI.LineTrait, line)::Bool

If the lines overlap, meaning that they are collinear but each have one endpoint outside of the other line, return true. Else false.

source

julia
overlaps(
     ::Union{GI.LineStringTrait, GI.LinearRing}, line1,
     ::Union{GI.LineStringTrait, GI.LinearRing}, line2,
 )::Bool

If the curves overlap, meaning that at least one edge of each curve overlaps, return true. Else false.

source

julia
overlaps(
@@ -84,7 +84,7 @@ import{_ as n,c as e,j as s,a,a7 as i,o as t}from"./chunks/framework.k41oUgTf.js
 )::Bool

Return true if polygon overlaps with at least one of the polygons within the multipolygon. Else false.

source

julia
overlaps(
     ::GI.MultiPolygonTrait, polys1,
     ::GI.MultiPolygonTrait, polys2,
-)::Bool

Return true if at least one pair of polygons from multipolygons overlap. Else false.

source


# GeometryOps.touchesFunction.
julia
touches(geom1, geom2)::Bool

Return true if the first geometry touches the second geometry. In other words, the two interiors cannot interact, but one of the geometries must have a boundary point that interacts with either the other geometies interior or boundary.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+)::Bool

Return true if at least one pair of polygons from multipolygons overlap. Else false.

source


# GeometryOps.touchesFunction.
julia
touches(geom1, geom2)::Bool

Return true if the first geometry touches the second geometry. In other words, the two interiors cannot interact, but one of the geometries must have a boundary point that interacts with either the other geometry's interior or boundary.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 
 l1 = GI.Line([(0.0, 0.0), (1.0, 0.0)])
 l2 = GI.Line([(1.0, 1.0), (1.0, -1.0)])
@@ -107,13 +107,13 @@ import{_ as n,c as e,j as s,a,a7 as i,o as t}from"./chunks/framework.k41oUgTf.js
 true

source

julia
equals(::T, geom_a, ::T, geom_b)::Bool

Two geometries of the same type, which don't have a equals function to dispatch off of should throw an error.

source

julia
equals(trait_a, geom_a, trait_b, geom_b)

Two geometries which are not of the same type cannot be equal so they always return false.

source

julia
equals(::GI.PointTrait, p1, ::GI.PointTrait, p2)::Bool

Two points are the same if they have the same x and y (and z if 3D) coordinates.

source

julia
equals(::GI.PointTrait, p1, ::GI.MultiPointTrait, mp2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source

julia
equals(::GI.MultiPointTrait, mp1, ::GI.PointTrait, p2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source

julia
equals(::GI.MultiPointTrait, mp1, ::GI.MultiPointTrait, mp2)::Bool

Two multipoints are equal if they share the same set of points.

source

julia
equals(
     ::Union{GI.LineTrait, GI.LineStringTrait}, l1,
     ::Union{GI.LineTrait, GI.LineStringTrait}, l2,
-)::Bool

Two lines/linestrings are equal if they share the same set of points going along the curve. Note that lines/linestrings aren't closed by defintion.

source

julia
equals(
+)::Bool

Two lines/linestrings are equal if they share the same set of points going along the curve. Note that lines/linestrings aren't closed by definition.

source

julia
equals(
     ::Union{GI.LineTrait, GI.LineStringTrait}, l1,
     ::GI.LinearRingTrait, l2,
-)::Bool

A line/linestring and a linear ring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source

julia
equals(
+)::Bool

A line/linestring and a linear ring are equal if they share the same set of points going along the curve. Note that lines aren't closed by definition, but rings are, so the line must have a repeated last point to be equal

source

julia
equals(
     ::GI.LinearRingTrait, l1,
     ::Union{GI.LineTrait, GI.LineStringTrait}, l2,
-)::Bool

A linear ring and a line/linestring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source

julia
equals(
+)::Bool

A linear ring and a line/linestring are equal if they share the same set of points going along the curve. Note that lines aren't closed by definition, but rings are, so the line must have a repeated last point to be equal

source

julia
equals(
     ::GI.LinearRingTrait, l1,
     ::GI.LinearRingTrait, l2,
 )::Bool

Two linear rings are equal if they share the same set of points going along the curve. Note that rings are closed by definition, so they can have, but don't need, a repeated last point to be equal.

source

julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two polygons are equal if they share the same exterior edge and holes.

source

julia
equals(::GI.PolygonTrait, geom_a, ::GI.MultiPolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source

julia
equals(::GI.MultiPolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source

julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two multipolygons are equal if they share the same set of polygons.

source


# GeometryOps.centroidFunction.
julia
centroid(geom, [T=Float64])::Tuple{T, T}

Returns the centroid of a given line segment, linear ring, polygon, or mutlipolygon.

source


# GeometryOps.distanceFunction.
julia
distance(point, geom, ::Type{T} = Float64)::T

Calculates the ditance from the geometry g1 to the point. The distance will always be positive or zero.

The method will differ based on the type of the geometry provided: - The distance from a point to a point is just the Euclidean distance between the points. - The distance from a point to a line is the minimum distance from the point to the closest point on the given line. - The distance from a point to a linestring is the minimum distance from the point to the closest segment of the linestring. - The distance from a point to a linear ring is the minimum distance from the point to the closest segment of the linear ring. - The distance from a point to a polygon is zero if the point is within the polygon and otherwise is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The distance from a point to a multigeometry or a geometry collection is the minimum distance between the point and any of the sub-geometries.

Result will be of type T, where T is an optional argument with a default value of Float64.

source


# GeometryOps.signed_distanceFunction.
julia
signed_distance(point, geom, ::Type{T} = Float64)::T

Calculates the signed distance from the geometry geom to the given point. Points within geom have a negative signed distance, and points outside of geom have a positive signed distance. - The signed distance from a point to a point, line, linestring, or linear ring is equal to the distance between the two. - The signed distance from a point to a polygon is negative if the point is within the polygon and is positive otherwise. The value of the distance is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The signed distance from a point to a multigeometry or a geometry collection is the minimum signed distance between the point and any of the sub-geometries.

Result will be of type T, where T is an optional argument with a default value of Float64.

source


# GeometryOps.areaFunction.
julia
area(geom, [T = Float64])::T

Returns the area of a geometry or collection of geometries. This is computed slightly differently for different geometries:

- The area of a point/multipoint is always zero.
@@ -121,7 +121,7 @@ import{_ as n,c as e,j as s,a,a7 as i,o as t}from"./chunks/framework.k41oUgTf.js
 - The area of a polygon is the absolute value of the signed area.
 - The area multi-polygon is the sum of the areas of all of the sub-polygons.
 - The area of a geometry collection, feature collection of array/iterable 
-    is the sum of the areas of all of the sub-geometries.

Result will be of type T, where T is an optional argument with a default value of Float64.

source


# GeometryOps.signed_areaFunction.
julia
signed_area(geom, [T = Float64])::T

Returns the signed area of a single geometry, based on winding order. This is computed slighly differently for different geometries:

- The signed area of a point is always zero.
+    is the sum of the areas of all of the sub-geometries.

Result will be of type T, where T is an optional argument with a default value of Float64.

source


# GeometryOps.signed_areaFunction.
julia
signed_area(geom, [T = Float64])::T

Returns the signed area of a single geometry, based on winding order. This is computed slightly differently for different geometries:

- The signed area of a point is always zero.
 - The signed area of a curve is always zero.
 - The signed area of a polygon is computed with the shoelace formula and is
 positive if the polygon coordinates wind clockwise and negative if
@@ -130,11 +130,11 @@ import{_ as n,c as e,j as s,a,a7 as i,o as t}from"./chunks/framework.k41oUgTf.js
 meaning as each sub-polygon could have a different winding order.

Result will be of type T, where T is an optional argument with a default value of Float64.

source


# GeometryOps.anglesFunction.
julia
angles(geom, ::Type{T} = Float64)

Returns the angles of a geometry or collection of geometries. This is computed differently for different geometries:

- The angles of a point is an empty vector.
 - The angles of a single line segment is an empty vector.
 - The angles of a linestring or linearring is a vector of angles formed by the curve.
-- The angles of a polygin is a vector of vectors of angles formed by each ring.
+- The angles of a polygon is a vector of vectors of angles formed by each ring.
 - The angles of a multi-geometry collection is a vector of the angles of each of the
-    sub-geometries as defined above.

Result will be a Vector, or nested set of vectors, of type T where an optional argument with a default value of Float64.

source


# GeometryOps.embed_extentFunction.
julia
embed_extent(obj)

Recursively wrap the object with a GeoInterface.jl geometry, calculating and adding an Extents.Extent to all objects.

This can improve performance when extents need to be checked multiple times, such when needing to check if many points are in geometries, and using their extents as a quick filter for obviously exterior points.

Keywords

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

source


Barycentric coordinates

# GeometryOps.barycentric_coordinatesFunction.
julia
barycentric_coordinates(method = MeanValue(), polygon, point)

Returns the barycentric coordinates of point in polygon using the barycentric coordinate method method.

source


# GeometryOps.barycentric_coordinates!Function.
julia
barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, polygon, point)

Loads the barycentric coordinates of point in polygon into λs using the barycentric coordinate method method.

λs must be of the length of the polygon plus its holes.

Tip

Use this method to avoid excess allocations when you need to calculate barycentric coordinates for many points.

source


# GeometryOps.barycentric_interpolateFunction.
julia
barycentric_interpolate(method = MeanValue(), polygon, values::AbstractVector{V}, point)

Returns the interpolated value at point within polygon using the barycentric coordinate method method. values are the per-point values for the polygon which are to be interpolated.

Returns an object of type V.

Warning

Barycentric interpolation is currently defined only for 2-dimensional polygons. If you pass a 3-D polygon in, the Z coordinate will be used as per-vertex value to be interpolated (the M coordinate in GIS parlance).

source


Other methods

# GeometryOps.AbstractBarycentricCoordinateMethodType.
julia
abstract type AbstractBarycentricCoordinateMethod

Abstract supertype for barycentric coordinate methods. The subtypes may serve as dispatch types, or may cache some information about the target polygon.

API

The following methods must be implemented for all subtypes:

  • barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, point::Point{2, T2})

  • barycentric_interpolate(method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, values::Vector{V}, point::Point{2, T2})::V

  • barycentric_interpolate(method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, interiors::Vector{<: Vector{<: Point{2, T1}}} values::Vector{V}, point::Point{2, T2})::V

The rest of the methods will be implemented in terms of these, and have efficient dispatches for broadcasting.

source


# GeometryOps.ClosedRingType.
julia
ClosedRing() <: GeometryCorrection

This correction ensures that a polygon's exterior and interior rings are closed.

It can be called on any geometry correction as usual.

See also GeometryCorrection.

source


# GeometryOps.DiffIntersectingPolygonsType.
julia
DiffIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygons included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be made nonintersecting through the difference operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area. See also GeometryCorrection, UnionIntersectingPolygons.

source


# GeometryOps.DouglasPeuckerType.
julia
DouglasPeucker <: SimplifyAlg
+    sub-geometries as defined above.

Result will be a Vector, or nested set of vectors, of type T where an optional argument with a default value of Float64.

source


# GeometryOps.embed_extentFunction.
julia
embed_extent(obj)

Recursively wrap the object with a GeoInterface.jl geometry, calculating and adding an Extents.Extent to all objects.

This can improve performance when extents need to be checked multiple times, such when needing to check if many points are in geometries, and using their extents as a quick filter for obviously exterior points.

Keywords

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

source


Barycentric coordinates

# GeometryOps.barycentric_coordinatesFunction.
julia
barycentric_coordinates(method = MeanValue(), polygon, point)

Returns the barycentric coordinates of point in polygon using the barycentric coordinate method method.

source


# GeometryOps.barycentric_coordinates!Function.
julia
barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, polygon, point)

Loads the barycentric coordinates of point in polygon into λs using the barycentric coordinate method method.

λs must be of the length of the polygon plus its holes.

Tip

Use this method to avoid excess allocations when you need to calculate barycentric coordinates for many points.

source


# GeometryOps.barycentric_interpolateFunction.
julia
barycentric_interpolate(method = MeanValue(), polygon, values::AbstractVector{V}, point)

Returns the interpolated value at point within polygon using the barycentric coordinate method method. values are the per-point values for the polygon which are to be interpolated.

Returns an object of type V.

Warning

Barycentric interpolation is currently defined only for 2-dimensional polygons. If you pass a 3-D polygon in, the Z coordinate will be used as per-vertex value to be interpolated (the M coordinate in GIS parlance).

source


Other methods

# GeometryOps.AbstractBarycentricCoordinateMethodType.
julia
abstract type AbstractBarycentricCoordinateMethod

Abstract supertype for barycentric coordinate methods. The subtypes may serve as dispatch types, or may cache some information about the target polygon.

API

The following methods must be implemented for all subtypes:

  • barycentric_coordinates!(λs::Vector{<: Real}, method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, point::Point{2, T2})

  • barycentric_interpolate(method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, values::Vector{V}, point::Point{2, T2})::V

  • barycentric_interpolate(method::AbstractBarycentricCoordinateMethod, exterior::Vector{<: Point{2, T1}}, interiors::Vector{<: Vector{<: Point{2, T1}}} values::Vector{V}, point::Point{2, T2})::V

The rest of the methods will be implemented in terms of these, and have efficient dispatches for broadcasting.

source


# GeometryOps.ClosedRingType.
julia
ClosedRing() <: GeometryCorrection

This correction ensures that a polygon's exterior and interior rings are closed.

It can be called on any geometry correction as usual.

See also GeometryCorrection.

source


# GeometryOps.DiffIntersectingPolygonsType.
julia
DiffIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygons included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be made nonintersecting through the difference operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area. See also GeometryCorrection, UnionIntersectingPolygons.

source


# GeometryOps.DouglasPeuckerType.
julia
DouglasPeucker <: SimplifyAlg
 
-DouglasPeucker(; number, ratio, tol)

Simplifies geometries by removing points below tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance a point will be from the line joining its neighboring points.

Note: user input tol is squared to avoid uneccesary computation in algorithm.

source


# GeometryOps.GEOSType.
julia
GEOS(; params...)

A struct which instructs the method it's passed to as an algorithm to use the appropriate GEOS function via LibGEOS.jl for the operation.

Dispatch is generally carried out using the names of the keyword arguments. For example, segmentize will only accept a GEOS struct with only a max_distance keyword, and no other.

It's generally a lot slower than the native Julia implementations, since it must convert to the LibGEOS implementation and back - so be warned!

source


# GeometryOps.GeodesicSegmentsType.
julia
GeodesicSegments(; max_distance::Real, equatorial_radius::Real=6378137, flattening::Real=1/298.257223563)

A method for segmentizing geometries by adding extra vertices to the geometry so that no segment is longer than a given distance. This method calculates the distance between points on the geodesic, and assumes input in lat/long coordinates.

Warning

Any input geometries must be in lon/lat coordinates! If not, the method may fail or error.

Arguments

  • max_distance::Real: The maximum distance, in meters, between vertices in the geometry.

  • equatorial_radius::Real=6378137: The equatorial radius of the Earth, in meters. Passed to Proj.geod_geodesic.

  • flattening::Real=1/298.257223563: The flattening of the Earth, which is the ratio of the difference between the equatorial and polar radii to the equatorial radius. Passed to Proj.geod_geodesic.

One can also omit the equatorial_radius and flattening keyword arguments, and pass a geodesic object directly to the eponymous keyword.

This method uses the Proj/GeographicLib API for geodesic calculations.

source


# GeometryOps.GeometryCorrectionType.
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source


# GeometryOps.LineOrientationType.
julia
Enum LineOrientation

Enum for the orientation of a line with respect to a curve. A line can be line_cross (crossing over the curve), line_hinge (crossing the endpoint of the curve), line_over (colinear with the curve), or line_out (not interacting with the curve).

source


# GeometryOps.LinearSegmentsType.
julia
LinearSegments(; max_distance::Real)

A method for segmentizing geometries by adding extra vertices to the geometry so that no segment is longer than a given distance.

Here, max_distance is a purely nondimensional quantity and will apply in the input space. This is to say, that if the polygon is provided in lat/lon coordinates then the max_distance will be in degrees of arc. If the polygon is provided in meters, then the max_distance will be in meters.

source


# GeometryOps.MeanValueType.
julia
MeanValue() <: AbstractBarycentricCoordinateMethod

This method calculates barycentric coordinates using the mean value method.

References

source


# GeometryOps.PointOrientationType.
julia
Enum PointOrientation

Enum for the orientation of a point with respect to a curve. A point can be point_in the curve, point_on the curve, or point_out of the curve.

source


# GeometryOps.RadialDistanceType.
julia
RadialDistance <: SimplifyAlg

Simplifies geometries by removing points less than tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance between points.

Note: user input tol is squared to avoid uneccesary computation in algorithm.

source


# GeometryOps.SimplifyAlgType.
julia
abstract type SimplifyAlg

Abstract type for simplification algorithms.

API

For now, the algorithm must hold the number, ratio and tol properties.

Simplification algorithm types can hook into the interface by implementing the _simplify(trait, alg, geom) methods for whichever traits are necessary.

source


# GeometryOps.TraitTargetType.
julia
TraitTarget{T}

This struct holds a trait parameter or a union of trait parameters.

It is primarily used for dispatch into methods which select trait levels, like apply, or as a parameter to target.

Constructors

julia
TraitTarget(GI.PointTrait())
+DouglasPeucker(; number, ratio, tol)

Simplifies geometries by removing points below tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance a point will be from the line joining its neighboring points.

Note: user input tol is squared to avoid unnecessary computation in algorithm.

source


# GeometryOps.GEOSType.
julia
GEOS(; params...)

A struct which instructs the method it's passed to as an algorithm to use the appropriate GEOS function via LibGEOS.jl for the operation.

Dispatch is generally carried out using the names of the keyword arguments. For example, segmentize will only accept a GEOS struct with only a max_distance keyword, and no other.

It's generally a lot slower than the native Julia implementations, since it must convert to the LibGEOS implementation and back - so be warned!

source


# GeometryOps.GeodesicSegmentsType.
julia
GeodesicSegments(; max_distance::Real, equatorial_radius::Real=6378137, flattening::Real=1/298.257223563)

A method for segmentizing geometries by adding extra vertices to the geometry so that no segment is longer than a given distance. This method calculates the distance between points on the geodesic, and assumes input in lat/long coordinates.

Warning

Any input geometries must be in lon/lat coordinates! If not, the method may fail or error.

Arguments

  • max_distance::Real: The maximum distance, in meters, between vertices in the geometry.

  • equatorial_radius::Real=6378137: The equatorial radius of the Earth, in meters. Passed to Proj.geod_geodesic.

  • flattening::Real=1/298.257223563: The flattening of the Earth, which is the ratio of the difference between the equatorial and polar radii to the equatorial radius. Passed to Proj.geod_geodesic.

One can also omit the equatorial_radius and flattening keyword arguments, and pass a geodesic object directly to the eponymous keyword.

This method uses the Proj/GeographicLib API for geodesic calculations.

source


# GeometryOps.GeometryCorrectionType.
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source


# GeometryOps.LineOrientationType.
julia
Enum LineOrientation

Enum for the orientation of a line with respect to a curve. A line can be line_cross (crossing over the curve), line_hinge (crossing the endpoint of the curve), line_over (collinear with the curve), or line_out (not interacting with the curve).

source


# GeometryOps.LinearSegmentsType.
julia
LinearSegments(; max_distance::Real)

A method for segmentizing geometries by adding extra vertices to the geometry so that no segment is longer than a given distance.

Here, max_distance is a purely nondimensional quantity and will apply in the input space. This is to say, that if the polygon is provided in lat/lon coordinates then the max_distance will be in degrees of arc. If the polygon is provided in meters, then the max_distance will be in meters.

source


# GeometryOps.MeanValueType.
julia
MeanValue() <: AbstractBarycentricCoordinateMethod

This method calculates barycentric coordinates using the mean value method.

References

source


# GeometryOps.MonotoneChainMethodType.
julia
MonotoneChainMethod()

This is an algorithm for the convex_hull function.

Uses DelaunayTriangulation.jl to compute the convex hull. This is a pure Julia algorithm which provides an optimal Delaunay triangulation.

See also convex_hull

source


# GeometryOps.PointOrientationType.
julia
Enum PointOrientation

Enum for the orientation of a point with respect to a curve. A point can be point_in the curve, point_on the curve, or point_out of the curve.

source


# GeometryOps.RadialDistanceType.
julia
RadialDistance <: SimplifyAlg

Simplifies geometries by removing points less than tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance between points.

Note: user input tol is squared to avoid unnecessary computation in algorithm.

source


# GeometryOps.SimplifyAlgType.
julia
abstract type SimplifyAlg

Abstract type for simplification algorithms.

API

For now, the algorithm must hold the number, ratio and tol properties.

Simplification algorithm types can hook into the interface by implementing the _simplify(trait, alg, geom) methods for whichever traits are necessary.

source


# GeometryOps.TraitTargetType.
julia
TraitTarget{T}

This struct holds a trait parameter or a union of trait parameters.

It is primarily used for dispatch into methods which select trait levels, like apply, or as a parameter to target.

Constructors

julia
TraitTarget(GI.PointTrait())
 TraitTarget(GI.LineStringTrait(), GI.LinearRingTrait()) # and other traits as you may like
 TraitTarget(TraitTarget(...))
 # There are also type based constructors available, but that's not advised.
@@ -142,10 +142,10 @@ import{_ as n,c as e,j as s,a,a7 as i,o as t}from"./chunks/framework.k41oUgTf.js
 TraitTarget(Union{GI.LineStringTrait, GI.LinearRingTrait})
 # etc.

source


# GeometryOps.UnionIntersectingPolygonsType.
julia
UnionIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygon's included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be combined through the union operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area.

See also GeometryCorrection.

source


# GeometryOps.VisvalingamWhyattType.
julia
VisvalingamWhyatt <: SimplifyAlg
 
-VisvalingamWhyatt(; kw...)

Simplifies geometries by removing points below tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum area of a triangle made with a point and its neighboring points.

Note: user input tol is doubled to avoid uneccesary computation in algorithm.

source


# GeometryOps._detMethod.
julia
_det(s1::Point2{T1}, s2::Point2{T2}) where {T1 <: Real, T2 <: Real}

Returns the determinant of the matrix formed by hcat'ing two points s1 and s2.

Specifically, this is:

julia
s1[1] * s2[2] - s1[2] * s2[1]

source


# GeometryOps._equals_curvesMethod.
julia
_equals_curves(c1, c2, closed_type1, closed_type2)::Bool

Two curves are equal if they share the same set of point, representing the same geometry. Both curves must must be composed of the same set of points, however, they do not have to wind in the same direction, or start on the same point to be equivalent. Inputs: c1 first geometry c2 second geometry closed_type1::Bool true if c1 is closed by definition (polygon, linear ring) closed_type2::Bool true if c2 is closed by definition (polygon, linear ring)

source


# GeometryOps.anglesMethod.
julia
angles(geom, ::Type{T} = Float64)

Returns the angles of a geometry or collection of geometries. This is computed differently for different geometries:

- The angles of a point is an empty vector.
+VisvalingamWhyatt(; kw...)

Simplifies geometries by removing points below tol distance from the line between its neighboring points.

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum area of a triangle made with a point and its neighboring points.

Note: user input tol is doubled to avoid unnecessary computation in algorithm.

source


# GeometryOps._detMethod.
julia
_det(s1::Point2{T1}, s2::Point2{T2}) where {T1 <: Real, T2 <: Real}

Returns the determinant of the matrix formed by hcat'ing two points s1 and s2.

Specifically, this is:

julia
s1[1] * s2[2] - s1[2] * s2[1]

source


# GeometryOps._equals_curvesMethod.
julia
_equals_curves(c1, c2, closed_type1, closed_type2)::Bool

Two curves are equal if they share the same set of point, representing the same geometry. Both curves must must be composed of the same set of points, however, they do not have to wind in the same direction, or start on the same point to be equivalent. Inputs: c1 first geometry c2 second geometry closed_type1::Bool true if c1 is closed by definition (polygon, linear ring) closed_type2::Bool true if c2 is closed by definition (polygon, linear ring)

source


# GeometryOps.anglesMethod.
julia
angles(geom, ::Type{T} = Float64)

Returns the angles of a geometry or collection of geometries. This is computed differently for different geometries:

- The angles of a point is an empty vector.
 - The angles of a single line segment is an empty vector.
 - The angles of a linestring or linearring is a vector of angles formed by the curve.
-- The angles of a polygin is a vector of vectors of angles formed by each ring.
+- The angles of a polygon is a vector of vectors of angles formed by each ring.
 - The angles of a multi-geometry collection is a vector of the angles of each of the
     sub-geometries as defined above.

Result will be a Vector, or nested set of vectors, of type T where an optional argument with a default value of Float64.

source


# GeometryOps.applyMethod.
julia
apply(f, target::Union{TraitTarget, GI.AbstractTrait}, obj; kw...)

Reconstruct a geometry, feature, feature collection, or nested vectors of either using the function f on the target trait.

f(target_geom) => x where x also has the target trait, or a trait that can be substituted. For example, swapping PolgonTrait to MultiPointTrait will fail if the outer object has MultiPolygonTrait, but should work if it has FeatureTrait.

Objects "shallower" than the target trait are always completely rebuilt, like a Vector of FeatureCollectionTrait of FeatureTrait when the target has PolygonTrait and is held in the features. These will always be GeoInterface geometries/feature/feature collections. But "deeper" objects may remain unchanged or be whatever GeoInterface compatible objects f returns.

The result is a functionally similar geometry with values depending on f.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Example

Flipped point the order in any feature or geometry, or iterables of either:

julia
import GeoInterface as GI
 import GeometryOps as GO
@@ -165,7 +165,7 @@ import{_ as n,c as e,j as s,a,a7 as i,o as t}from"./chunks/framework.k41oUgTf.js
 
 GO.contains(line, point)
 # output
-true

source


# GeometryOps.coverageMethod.
julia
coverage(geom, xmin, xmax, ymin, ymax, [T = Float64])::T

Returns the area of intersection between given geometry and grid cell defined by its minimum and maximum x and y-values. This is computed differently for different geometries:

  • The signed area of a point is always zero.

  • The signed area of a curve is always zero.

  • The signed area of a polygon is calculated by tracing along its edges and switching to the cell edges if needed.

  • The coverage of a geometry collection, multi-geometry, feature collection of array/iterable is the sum of the coverages of all of the sub-geometries.

Result will be of type T, where T is an optional argument with a default value of Float64.

source


# GeometryOps.coveredbyMethod.
julia
coveredby(g1, g2)::Bool

Return true if the first geometry is completely covered by the second geometry. The interior and boundary of the primary geometry (g1) must not intersect the exterior of the secondary geometry (g2).

Furthermore, coveredby returns the exact opposite result of covers. They are equivalent with the order of the arguments swapped.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+true

source


# GeometryOps.convex_hullFunction.
julia
convex_hull([method], geometries)

Compute the convex hull of the points in geometries. Returns a GI.Polygon representing the convex hull.

Note that the polygon returned is wound counterclockwise as in the Simple Features standard by default. If you choose GEOS, the winding order will be inverted.

Warning

This interface only computes the 2-dimensional convex hull!

For higher dimensional hulls, use the relevant package (Qhull.jl, Quickhull.jl, or similar).

source


# GeometryOps.coverageMethod.
julia
coverage(geom, xmin, xmax, ymin, ymax, [T = Float64])::T

Returns the area of intersection between given geometry and grid cell defined by its minimum and maximum x and y-values. This is computed differently for different geometries:

  • The signed area of a point is always zero.

  • The signed area of a curve is always zero.

  • The signed area of a polygon is calculated by tracing along its edges and switching to the cell edges if needed.

  • The coverage of a geometry collection, multi-geometry, feature collection of array/iterable is the sum of the coverages of all of the sub-geometries.

Result will be of type T, where T is an optional argument with a default value of Float64.

source


# GeometryOps.coveredbyMethod.
julia
coveredby(g1, g2)::Bool

Return true if the first geometry is completely covered by the second geometry. The interior and boundary of the primary geometry (g1) must not intersect the exterior of the secondary geometry (g2).

Furthermore, coveredby returns the exact opposite result of covers. They are equivalent with the order of the arguments swapped.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 p1 = GI.Point(0.0, 0.0)
 p2 = GI.Point(1.0, 1.0)
 l1 = GI.Line([p1, p2])
@@ -217,13 +217,13 @@ import{_ as n,c as e,j as s,a,a7 as i,o as t}from"./chunks/framework.k41oUgTf.js
 )::Bool

Two linear rings are equal if they share the same set of points going along the curve. Note that rings are closed by definition, so they can have, but don't need, a repeated last point to be equal.

source


# GeometryOps.equalsMethod.
julia
equals(
     ::GI.LinearRingTrait, l1,
     ::Union{GI.LineTrait, GI.LineStringTrait}, l2,
-)::Bool

A linear ring and a line/linestring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPointTrait, mp1, ::GI.MultiPointTrait, mp2)::Bool

Two multipoints are equal if they share the same set of points.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPointTrait, mp1, ::GI.PointTrait, p2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two multipolygons are equal if they share the same set of polygons.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PointTrait, p1, ::GI.MultiPointTrait, mp2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PointTrait, p1, ::GI.PointTrait, p2)::Bool

Two points are the same if they have the same x and y (and z if 3D) coordinates.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.MultiPolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two polygons are equal if they share the same exterior edge and holes.

source


# GeometryOps.equalsMethod.
julia
equals(
+)::Bool

A linear ring and a line/linestring are equal if they share the same set of points going along the curve. Note that lines aren't closed by definition, but rings are, so the line must have a repeated last point to be equal

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPointTrait, mp1, ::GI.MultiPointTrait, mp2)::Bool

Two multipoints are equal if they share the same set of points.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPointTrait, mp1, ::GI.PointTrait, p2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two multipolygons are equal if they share the same set of polygons.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.MultiPolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PointTrait, p1, ::GI.MultiPointTrait, mp2)::Bool

A point and a multipoint are equal if the multipoint is composed of a single point that is equivalent to the given point.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PointTrait, p1, ::GI.PointTrait, p2)::Bool

Two points are the same if they have the same x and y (and z if 3D) coordinates.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.MultiPolygonTrait, geom_b)::Bool

A polygon and a multipolygon are equal if the multipolygon is composed of a single polygon that is equivalent to the given polygon.

source


# GeometryOps.equalsMethod.
julia
equals(::GI.PolygonTrait, geom_a, ::GI.PolygonTrait, geom_b)::Bool

Two polygons are equal if they share the same exterior edge and holes.

source


# GeometryOps.equalsMethod.
julia
equals(
     ::Union{GI.LineTrait, GI.LineStringTrait}, l1,
     ::GI.LinearRingTrait, l2,
-)::Bool

A line/linestring and a linear ring are equal if they share the same set of points going along the curve. Note that lines aren't closed by defintion, but rings are, so the line must have a repeated last point to be equal

source


# GeometryOps.equalsMethod.
julia
equals(
+)::Bool

A line/linestring and a linear ring are equal if they share the same set of points going along the curve. Note that lines aren't closed by definition, but rings are, so the line must have a repeated last point to be equal

source


# GeometryOps.equalsMethod.
julia
equals(
     ::Union{GI.LineTrait, GI.LineStringTrait}, l1,
     ::Union{GI.LineTrait, GI.LineStringTrait}, l2,
-)::Bool

Two lines/linestrings are equal if they share the same set of points going along the curve. Note that lines/linestrings aren't closed by defintion.

source


# GeometryOps.equalsMethod.
julia
equals(::T, geom_a, ::T, geom_b)::Bool

Two geometries of the same type, which don't have a equals function to dispatch off of should throw an error.

source


# GeometryOps.flattenMethod.
julia
flatten(target::Type{<:GI.AbstractTrait}, obj)
+)::Bool

Two lines/linestrings are equal if they share the same set of points going along the curve. Note that lines/linestrings aren't closed by definition.

source


# GeometryOps.equalsMethod.
julia
equals(::T, geom_a, ::T, geom_b)::Bool

Two geometries of the same type, which don't have a equals function to dispatch off of should throw an error.

source


# GeometryOps.flattenMethod.
julia
flatten(target::Type{<:GI.AbstractTrait}, obj)
 flatten(f, target::Type{<:GI.AbstractTrait}, obj)

Lazily flatten any AbstractArray, iterator, FeatureCollectionTrait, FeatureTrait or AbstractGeometryTrait object obj, so that objects with the target trait are returned by the iterator.

If f is passed in it will be applied to the target geometries.

source


# GeometryOps.flipMethod.
julia
flip(obj)

Swap all of the x and y coordinates in obj, otherwise keeping the original structure (but not necessarily the original type).

Keywords

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

source


# GeometryOps.intersectionMethod.
julia
intersection(geom_a, geom_b, [T::Type]; target::Type, fix_multipoly = UnionIntersectingPolygons())

Return the intersection between two geometries as a list of geometries. Return an empty list if none are found. The type of the list will be constrained as much as possible given the input geometries. Furthermore, the user can provide a target type as a keyword argument and a list of target geometries found in the intersection will be returned. The user can also provide a float type that they would like the points of returned geometries to be. If the user is taking a intersection involving one or more multipolygons, and the multipolygon might be comprised of polygons that intersect, if fix_multipoly is set to an IntersectingPolygons correction (the default is UnionIntersectingPolygons()), then the needed multipolygons will be fixed to be valid before performing the intersection to ensure a correct answer. Only set fix_multipoly to nothing if you know that the multipolygons are valid, as it will avoid unneeded computation.

Example

julia
import GeoInterface as GI, GeometryOps as GO
 
 line1 = GI.Line([(124.584961,-12.768946), (126.738281,-17.224758)])
@@ -259,7 +259,7 @@ import{_ as n,c as e,j as s,a,a7 as i,o as t}from"./chunks/framework.k41oUgTf.js
 GO.intersects(line1, line2)
 
 # output
-true

source


`,174),p={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},r=s("a",{id:"GeometryOps.isclockwise-Tuple{Any}",href:"#GeometryOps.isclockwise-Tuple{Any}"},"#",-1),k=s("b",null,[s("u",null,"GeometryOps.isclockwise")],-1),o=s("i",null,"Method",-1),d=i('
julia
isclockwise(line::Union{LineString, Vector{Position}})::Bool

Take a ring and return true if the line goes clockwise, or false if the line goes counter-clockwise. "Going clockwise" means, mathematically,

',2),g={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},y={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.827ex"},xmlns:"http://www.w3.org/2000/svg",width:"33.539ex",height:"6.785ex",role:"img",focusable:"false",viewBox:"0 -1749.5 14824.1 2999","aria-hidden":"true"},E=i('',1),c=[E],u=s("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[s("mrow",{"data-mjx-texclass":"INNER"},[s("mo",{"data-mjx-texclass":"OPEN"},"("),s("munderover",null,[s("mo",{"data-mjx-texclass":"OP"},"∑"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",null,"i"),s("mo",null,"="),s("mn",null,"2")]),s("mi",null,"n")]),s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"x"),s("mi",null,"i")]),s("mo",null,"−"),s("msub",null,[s("mi",null,"x"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",null,"i"),s("mo",null,"−"),s("mn",null,"1")])]),s("mo",{stretchy:"false"},")"),s("mo",null,"⋅"),s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"y"),s("mi",null,"i")]),s("mo",null,"+"),s("msub",null,[s("mi",null,"y"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",null,"i"),s("mo",null,"−"),s("mn",null,"1")])]),s("mo",{stretchy:"false"},")"),s("mo",{"data-mjx-texclass":"CLOSE"},")")]),s("mo",null,">"),s("mn",null,"0")])],-1),m=i(`

Example

julia
julia> import GeoInterface as GI, GeometryOps as GO
+true

source


`,178),p={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},r=s("a",{id:"GeometryOps.isclockwise-Tuple{Any}",href:"#GeometryOps.isclockwise-Tuple{Any}"},"#",-1),k=s("b",null,[s("u",null,"GeometryOps.isclockwise")],-1),o=s("i",null,"Method",-1),d=i('
julia
isclockwise(line::Union{LineString, Vector{Position}})::Bool

Take a ring and return true if the line goes clockwise, or false if the line goes counter-clockwise. "Going clockwise" means, mathematically,

',2),g={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},y={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.827ex"},xmlns:"http://www.w3.org/2000/svg",width:"33.539ex",height:"6.785ex",role:"img",focusable:"false",viewBox:"0 -1749.5 14824.1 2999","aria-hidden":"true"},E=i('',1),c=[E],u=s("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[s("mrow",{"data-mjx-texclass":"INNER"},[s("mo",{"data-mjx-texclass":"OPEN"},"("),s("munderover",null,[s("mo",{"data-mjx-texclass":"OP"},"∑"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",null,"i"),s("mo",null,"="),s("mn",null,"2")]),s("mi",null,"n")]),s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"x"),s("mi",null,"i")]),s("mo",null,"−"),s("msub",null,[s("mi",null,"x"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",null,"i"),s("mo",null,"−"),s("mn",null,"1")])]),s("mo",{stretchy:"false"},")"),s("mo",null,"⋅"),s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"y"),s("mi",null,"i")]),s("mo",null,"+"),s("msub",null,[s("mi",null,"y"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",null,"i"),s("mo",null,"−"),s("mn",null,"1")])]),s("mo",{stretchy:"false"},")"),s("mo",{"data-mjx-texclass":"CLOSE"},")")]),s("mo",null,">"),s("mn",null,"0")])],-1),m=i(`

Example

julia
julia> import GeoInterface as GI, GeometryOps as GO
 julia> ring = GI.LinearRing([(0, 0), (1, 1), (1, 0), (0, 0)]);
 julia> GO.isclockwise(ring)
 # output
@@ -275,7 +275,7 @@ import{_ as n,c as e,j as s,a,a7 as i,o as t}from"./chunks/framework.k41oUgTf.js
 
 GO.overlaps(poly1, poly2)
 # output
-true

source


# GeometryOps.overlapsMethod.
julia
overlaps(::GI.AbstractTrait, geom1, ::GI.AbstractTrait, geom2)::Bool

For any non-specified pair, all have non-matching dimensions, return false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(::GI.LineTrait, line1, ::GI.LineTrait, line)::Bool

If the lines overlap, meaning that they are colinear but each have one endpoint outside of the other line, return true. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
+true

source


# GeometryOps.overlapsMethod.
julia
overlaps(::GI.AbstractTrait, geom1, ::GI.AbstractTrait, geom2)::Bool

For any non-specified pair, all have non-matching dimensions, return false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(::GI.LineTrait, line1, ::GI.LineTrait, line)::Bool

If the lines overlap, meaning that they are collinear but each have one endpoint outside of the other line, return true. Else false.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
     ::GI.MultiPointTrait, points1,
     ::GI.MultiPointTrait, points2,
 )::Bool

If the multipoints overlap, meaning some, but not all, of the points within the multipoints are shared, return true.

source


# GeometryOps.overlapsMethod.
julia
overlaps(
@@ -303,14 +303,14 @@ import{_ as n,c as e,j as s,a,a7 as i,o as t}from"./chunks/framework.k41oUgTf.js
 polygonize(xs, ys, A::AbstractMatrix{Bool}; kw...)
 polygonize(f, xs, ys, A::AbstractMatrix; kw...)

Polygonize an AbstractMatrix of values, currently to a single class of polygons.

Returns a MultiPolygon for Bool values and f return values, and a FeatureCollection of Features holding MultiPolygon for all other values.

Function f should return either true or false or a transformation of values into simpler groups, especially useful for floating point arrays.

If xs and ys are ranges, they are used as the pixel/cell center points. If they are Vector of Tuple they are used as the lower and upper bounds of each pixel/cell.

Keywords

  • minpoints: ignore polygons with less than minpoints points.

  • values: the values to turn into polygons. By default these are union(A), If function f is passed these refer to the return values of f, by default union(map(f, A). If values Bool, false is ignored and a single MultiPolygon is returned rather than a FeatureCollection.

Example

julia
using GeometryOps
 A = rand(100, 100)
-multipolygon = polygonize(>(0.5), A);

source


# GeometryOps.rebuildMethod.
julia
rebuild(geom, child_geoms)

Rebuild a geometry from child geometries.

By default geometries will be rebuilt as a GeoInterface.Wrappers geometry, but rebuild can have methods added to it to dispatch on geometries from other packages and specify how to rebuild them.

(Maybe it should go into GeoInterface.jl)

source


# GeometryOps.reconstructMethod.
julia
reconstruct(geom, components)

Reconstruct geom from an iterable of component objects that match its structure.

All objects in components must have the same GeoInterface.trait.

Ususally used in combination with flatten.

source


# GeometryOps.segmentizeMethod.
julia
segmentize([method = LinearSegments()], geom; max_distance::Real, threaded)

Segmentize a geometry by adding extra vertices to the geometry so that no segment is longer than a given distance. This is useful for plotting geometries with a limited number of vertices, or for ensuring that a geometry is not too "coarse" for a given application.

Arguments

  • method::SegmentizeMethod = LinearSegments(): The method to use for segmentizing the geometry. At the moment, only LinearSegments and GeodesicSegments are available.

  • geom: The geometry to segmentize. Must be a LineString, LinearRing, or greater in complexity.

  • max_distance::Real: The maximum distance, in the input space, between vertices in the geometry. Only used if you don't explicitly pass a method.

Returns a geometry of similar type to the input geometry, but resampled.

source


# GeometryOps.signed_areaMethod.
julia
signed_area(geom, [T = Float64])::T

Returns the signed area of a single geometry, based on winding order. This is computed slighly differently for different geometries:

- The signed area of a point is always zero.
+multipolygon = polygonize(>(0.5), A);

source


# GeometryOps.rebuildMethod.
julia
rebuild(geom, child_geoms)

Rebuild a geometry from child geometries.

By default geometries will be rebuilt as a GeoInterface.Wrappers geometry, but rebuild can have methods added to it to dispatch on geometries from other packages and specify how to rebuild them.

(Maybe it should go into GeoInterface.jl)

source


# GeometryOps.reconstructMethod.
julia
reconstruct(geom, components)

Reconstruct geom from an iterable of component objects that match its structure.

All objects in components must have the same GeoInterface.trait.

Usually used in combination with flatten.

source


# GeometryOps.segmentizeMethod.
julia
segmentize([method = LinearSegments()], geom; max_distance::Real, threaded)

Segmentize a geometry by adding extra vertices to the geometry so that no segment is longer than a given distance. This is useful for plotting geometries with a limited number of vertices, or for ensuring that a geometry is not too "coarse" for a given application.

Arguments

  • method::SegmentizeMethod = LinearSegments(): The method to use for segmentizing the geometry. At the moment, only LinearSegments and GeodesicSegments are available.

  • geom: The geometry to segmentize. Must be a LineString, LinearRing, or greater in complexity.

  • max_distance::Real: The maximum distance, in the input space, between vertices in the geometry. Only used if you don't explicitly pass a method.

Returns a geometry of similar type to the input geometry, but resampled.

source


# GeometryOps.signed_areaMethod.
julia
signed_area(geom, [T = Float64])::T

Returns the signed area of a single geometry, based on winding order. This is computed slightly differently for different geometries:

- The signed area of a point is always zero.
 - The signed area of a curve is always zero.
 - The signed area of a polygon is computed with the shoelace formula and is
 positive if the polygon coordinates wind clockwise and negative if
 counterclockwise.
 - You cannot compute the signed area of a multipolygon as it doesn't have a
 meaning as each sub-polygon could have a different winding order.

Result will be of type T, where T is an optional argument with a default value of Float64.

source


# GeometryOps.signed_distanceMethod.
julia
signed_distance(point, geom, ::Type{T} = Float64)::T

Calculates the signed distance from the geometry geom to the given point. Points within geom have a negative signed distance, and points outside of geom have a positive signed distance. - The signed distance from a point to a point, line, linestring, or linear ring is equal to the distance between the two. - The signed distance from a point to a polygon is negative if the point is within the polygon and is positive otherwise. The value of the distance is the minimum distance from the point to an edge of the polygon. This includes edges created by holes. - The signed distance from a point to a multigeometry or a geometry collection is the minimum signed distance between the point and any of the sub-geometries.

Result will be of type T, where T is an optional argument with a default value of Float64.

source


# GeometryOps.simplifyMethod.
julia
simplify(obj; kw...)
-simplify(::SimplifyAlg, obj; kw...)

Simplify a geometry, feature, feature collection, or nested vectors or a table of these.

RadialDistance, DouglasPeucker, or VisvalingamWhyatt algorithms are available, listed in order of increasing quality but decreaseing performance.

PoinTrait and MultiPointTrait are returned unchanged.

The default behaviour is simplify(DouglasPeucker(; kw...), obj). Pass in other SimplifyAlg to use other algorithms.

Keywords

  • prefilter_alg: SimplifyAlg algorithm used to pre-filter object before using primary filtering algorithm.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Keywords for DouglasPeucker are allowed when no algorithm is specified:

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance a point will be from the line joining its neighboring points.

Example

Simplify a polygon to have six points:

julia
import GeoInterface as GI
+simplify(::SimplifyAlg, obj; kw...)

Simplify a geometry, feature, feature collection, or nested vectors or a table of these.

RadialDistance, DouglasPeucker, or VisvalingamWhyatt algorithms are available, listed in order of increasing quality but decreasing performance.

PoinTrait and MultiPointTrait are returned unchanged.

The default behaviour is simplify(DouglasPeucker(; kw...), obj). Pass in other SimplifyAlg to use other algorithms.

Keywords

  • prefilter_alg: SimplifyAlg algorithm used to pre-filter object before using primary filtering algorithm.

  • threaded: true or false. Whether to use multithreading. Defaults to false.

  • crs: The CRS to attach to geometries. Defaults to nothing.

  • calc_extent: true or false. Whether to calculate the extent. Defaults to false.

Keywords for DouglasPeucker are allowed when no algorithm is specified:

Keywords

  • ratio: the fraction of points that should remain after simplify. Useful as it will generalise for large collections of objects.

  • number: the number of points that should remain after simplify. Less useful for large collections of mixed size objects.

  • tol: the minimum distance a point will be from the line joining its neighboring points.

Example

Simplify a polygon to have six points:

julia
import GeoInterface as GI
 import GeometryOps as GO
 
 poly = GI.Polygon([[
@@ -339,7 +339,7 @@ import{_ as n,c as e,j as s,a,a7 as i,o as t}from"./chunks/framework.k41oUgTf.js
 GI.npoint(simple)
 
 # output
-6

source


`,37),b={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},C=s("a",{id:"GeometryOps.t_value-Union{Tuple{T2}, Tuple{T1}, Tuple{N}, Tuple{Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, T2, T2}} where {N, T1<:Real, T2<:Real}",href:"#GeometryOps.t_value-Union{Tuple{T2}, Tuple{T1}, Tuple{N}, Tuple{Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, T2, T2}} where {N, T1<:Real, T2<:Real}"},"#",-1),T=s("b",null,[s("u",null,"GeometryOps.t_value")],-1),f=s("i",null,"Method",-1),v=i('
julia
t_value(sᵢ, sᵢ₊₁, rᵢ, rᵢ₊₁)

Returns the "T-value" as described in Hormann's presentation [1] on how to calculate the mean-value coordinate.

Here, sᵢ is the vector from vertex vᵢ to the point, and rᵢ is the norm (length) of sᵢ. s must be Point and r must be real numbers.

',3),A={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},G={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.059ex"},xmlns:"http://www.w3.org/2000/svg",width:"27.746ex",height:"5.362ex",role:"img",focusable:"false",viewBox:"0 -1460 12263.9 2370","aria-hidden":"true"},B=i('',1),O=[B],D=s("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[s("mi",null,"t"),s("mi",null,"ᵢ"),s("mo",null,"="),s("mfrac",null,[s("mrow",null,[s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",{"data-mjx-auto-op":"false"},"det")]),s("mrow",{"data-mjx-texclass":"INNER"},[s("mo",{"data-mjx-texclass":"OPEN"},"("),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mo",null,","),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")]),s("mo",{"data-mjx-texclass":"CLOSE"},")")])]),s("mrow",null,[s("mi",null,"r"),s("mi",null,"ᵢ"),s("mo",null,"∗"),s("mi",null,"r"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")]),s("mo",null,"+"),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mo",null,"⋅"),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")])])])])],-1),j=i(`

+6

source


`,37),b={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},C=s("a",{id:"GeometryOps.t_value-Union{Tuple{T2}, Tuple{T1}, Tuple{N}, Tuple{Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, T2, T2}} where {N, T1<:Real, T2<:Real}",href:"#GeometryOps.t_value-Union{Tuple{T2}, Tuple{T1}, Tuple{N}, Tuple{Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, T2, T2}} where {N, T1<:Real, T2<:Real}"},"#",-1),f=s("b",null,[s("u",null,"GeometryOps.t_value")],-1),T=s("i",null,"Method",-1),v=i('
julia
t_value(sᵢ, sᵢ₊₁, rᵢ, rᵢ₊₁)

Returns the "T-value" as described in Hormann's presentation [1] on how to calculate the mean-value coordinate.

Here, sᵢ is the vector from vertex vᵢ to the point, and rᵢ is the norm (length) of sᵢ. s must be Point and r must be real numbers.

',3),G={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},A={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.059ex"},xmlns:"http://www.w3.org/2000/svg",width:"27.746ex",height:"5.362ex",role:"img",focusable:"false",viewBox:"0 -1460 12263.9 2370","aria-hidden":"true"},B=i('',1),O=[B],D=s("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[s("mi",null,"t"),s("mi",null,"ᵢ"),s("mo",null,"="),s("mfrac",null,[s("mrow",null,[s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",{"data-mjx-auto-op":"false"},"det")]),s("mrow",{"data-mjx-texclass":"INNER"},[s("mo",{"data-mjx-texclass":"OPEN"},"("),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mo",null,","),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")]),s("mo",{"data-mjx-texclass":"CLOSE"},")")])]),s("mrow",null,[s("mi",null,"r"),s("mi",null,"ᵢ"),s("mo",null,"∗"),s("mi",null,"r"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")]),s("mo",null,"+"),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mo",null,"⋅"),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")])])])])],-1),j=i(`

 
 [source](https://github.com/JuliaGeo/GeometryOps.jl/blob/v0.1.10/src/methods/barycentric.jl#L289-L305)
 
@@ -352,7 +352,7 @@ import{_ as n,c as e,j as s,a,a7 as i,o as t}from"./chunks/framework.k41oUgTf.js
 
 
 \`\`\`julia
-to_edges()

Convert any geometry or collection of geometries into a flat vector of Tuple{Tuple{Float64,Float64},Tuple{Float64,Float64}} edges.

source

`,3),x=i(`
# GeometryOps.touchesMethod.
julia
touches(geom1, geom2)::Bool

Return true if the first geometry touches the second geometry. In other words, the two interiors cannot interact, but one of the geometries must have a boundary point that interacts with either the other geometies interior or boundary.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
+to_edges()

Convert any geometry or collection of geometries into a flat vector of Tuple{Tuple{Float64,Float64},Tuple{Float64,Float64}} edges.

source

`,3),x=i(`
# GeometryOps.touchesMethod.
julia
touches(geom1, geom2)::Bool

Return true if the first geometry touches the second geometry. In other words, the two interiors cannot interact, but one of the geometries must have a boundary point that interacts with either the other geometry's interior or boundary.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 
 l1 = GI.Line([(0.0, 0.0), (1.0, 0.0)])
 l2 = GI.Line([(1.0, 1.0), (1.0, -1.0)])
@@ -372,7 +372,7 @@ import{_ as n,c as e,j as s,a,a7 as i,o as t}from"./chunks/framework.k41oUgTf.js
 GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Linea
 rRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, Nothing}(StaticArraysCo
 re.SVector{2, Float64}[[4.5, 3.5], [6.5, 5.5], [8.5, 7.5], [4.5, 3.5]], nothing, nothing), GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, Nothing}(StaticA
-rraysCore.SVector{2, Float64}[[6.5, 5.5], [8.5, 7.5], [9.5, 8.5], [6.5, 5.5]], nothing, nothing)], nothing, nothing)

With Rotations.jl you need to actuall multiply the Rotation by the SVector point, which is easy using an anonymous function.

julia
julia> using Rotations
+rraysCore.SVector{2, Float64}[[6.5, 5.5], [8.5, 7.5], [9.5, 8.5], [6.5, 5.5]], nothing, nothing)], nothing, nothing)

With Rotations.jl you need to actually multiply the Rotation by the SVector point, which is easy using an anonymous function.

julia
julia> using Rotations
 
 julia> GO.transform(p -> one(RotMatrix{2}) * p, geom)
 GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Int64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearR
@@ -395,4 +395,4 @@ import{_ as n,c as e,j as s,a,a7 as i,o as t}from"./chunks/framework.k41oUgTf.js
 GO.within(point, line)
 
 # output
-true

source



  1. K. Hormann and N. Sukumar. Generalized Barycentric Coordinates in Computer Graphics and Computational Mechanics. Taylor & Fancis, CRC Press, 2017. ↩︎

`,17);function w(Q,_,I,L,P,M){return t(),e("div",null,[h,s("div",p,[r,a(" "),k,a(" — "),o,a(". "),d,s("mjx-container",g,[(t(),e("svg",y,c)),u]),m]),F,s("div",b,[C,a(" "),T,a(" — "),f,a(". "),v,s("mjx-container",A,[(t(),e("svg",G,O)),D]),j]),x])}const S=n(l,[["render",w]]);export{q as __pageData,S as default}; +true

source



  1. K. Hormann and N. Sukumar. Generalized Barycentric Coordinates in Computer Graphics and Computational Mechanics. Taylor & Fancis, CRC Press, 2017. ↩︎

`,17);function w(Q,_,I,L,P,M){return t(),e("div",null,[h,s("div",p,[r,a(" "),k,a(" — "),o,a(". "),d,s("mjx-container",g,[(t(),e("svg",y,c)),u]),m]),F,s("div",b,[C,a(" "),f,a(" — "),T,a(". "),v,s("mjx-container",G,[(t(),e("svg",A,O)),D]),j]),x])}const S=n(l,[["render",w]]);export{q as __pageData,S as default}; diff --git a/previews/PR135/assets/api.md.D8UtvlcW.lean.js b/previews/PR135/assets/api.md.BkdCNSpp.lean.js similarity index 91% rename from previews/PR135/assets/api.md.D8UtvlcW.lean.js rename to previews/PR135/assets/api.md.BkdCNSpp.lean.js index 3ecf51118..11e83afee 100644 --- a/previews/PR135/assets/api.md.D8UtvlcW.lean.js +++ b/previews/PR135/assets/api.md.BkdCNSpp.lean.js @@ -1 +1 @@ -import{_ as n,c as e,j as s,a,a7 as i,o as t}from"./chunks/framework.k41oUgTf.js";const q=JSON.parse('{"title":"Full GeometryOps API documentation","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),l={name:"api.md"},h=i("",174),p={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},r=s("a",{id:"GeometryOps.isclockwise-Tuple{Any}",href:"#GeometryOps.isclockwise-Tuple{Any}"},"#",-1),k=s("b",null,[s("u",null,"GeometryOps.isclockwise")],-1),o=s("i",null,"Method",-1),d=i("",2),g={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},y={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.827ex"},xmlns:"http://www.w3.org/2000/svg",width:"33.539ex",height:"6.785ex",role:"img",focusable:"false",viewBox:"0 -1749.5 14824.1 2999","aria-hidden":"true"},E=i("",1),c=[E],u=s("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[s("mrow",{"data-mjx-texclass":"INNER"},[s("mo",{"data-mjx-texclass":"OPEN"},"("),s("munderover",null,[s("mo",{"data-mjx-texclass":"OP"},"∑"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",null,"i"),s("mo",null,"="),s("mn",null,"2")]),s("mi",null,"n")]),s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"x"),s("mi",null,"i")]),s("mo",null,"−"),s("msub",null,[s("mi",null,"x"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",null,"i"),s("mo",null,"−"),s("mn",null,"1")])]),s("mo",{stretchy:"false"},")"),s("mo",null,"⋅"),s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"y"),s("mi",null,"i")]),s("mo",null,"+"),s("msub",null,[s("mi",null,"y"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",null,"i"),s("mo",null,"−"),s("mn",null,"1")])]),s("mo",{stretchy:"false"},")"),s("mo",{"data-mjx-texclass":"CLOSE"},")")]),s("mo",null,">"),s("mn",null,"0")])],-1),m=i("",3),F=i("",37),b={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},C=s("a",{id:"GeometryOps.t_value-Union{Tuple{T2}, Tuple{T1}, Tuple{N}, Tuple{Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, T2, T2}} where {N, T1<:Real, T2<:Real}",href:"#GeometryOps.t_value-Union{Tuple{T2}, Tuple{T1}, Tuple{N}, Tuple{Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, T2, T2}} where {N, T1<:Real, T2<:Real}"},"#",-1),T=s("b",null,[s("u",null,"GeometryOps.t_value")],-1),f=s("i",null,"Method",-1),v=i("",3),A={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},G={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.059ex"},xmlns:"http://www.w3.org/2000/svg",width:"27.746ex",height:"5.362ex",role:"img",focusable:"false",viewBox:"0 -1460 12263.9 2370","aria-hidden":"true"},B=i("",1),O=[B],D=s("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[s("mi",null,"t"),s("mi",null,"ᵢ"),s("mo",null,"="),s("mfrac",null,[s("mrow",null,[s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",{"data-mjx-auto-op":"false"},"det")]),s("mrow",{"data-mjx-texclass":"INNER"},[s("mo",{"data-mjx-texclass":"OPEN"},"("),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mo",null,","),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")]),s("mo",{"data-mjx-texclass":"CLOSE"},")")])]),s("mrow",null,[s("mi",null,"r"),s("mi",null,"ᵢ"),s("mo",null,"∗"),s("mi",null,"r"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")]),s("mo",null,"+"),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mo",null,"⋅"),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")])])])])],-1),j=i("",3),x=i("",17);function w(Q,_,I,L,P,M){return t(),e("div",null,[h,s("div",p,[r,a(" "),k,a(" — "),o,a(". "),d,s("mjx-container",g,[(t(),e("svg",y,c)),u]),m]),F,s("div",b,[C,a(" "),T,a(" — "),f,a(". "),v,s("mjx-container",A,[(t(),e("svg",G,O)),D]),j]),x])}const S=n(l,[["render",w]]);export{q as __pageData,S as default}; +import{_ as n,c as e,j as s,a,a7 as i,o as t}from"./chunks/framework.CONf0Rze.js";const q=JSON.parse('{"title":"Full GeometryOps API documentation","description":"","frontmatter":{},"headers":[],"relativePath":"api.md","filePath":"api.md","lastUpdated":null}'),l={name:"api.md"},h=i("",178),p={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},r=s("a",{id:"GeometryOps.isclockwise-Tuple{Any}",href:"#GeometryOps.isclockwise-Tuple{Any}"},"#",-1),k=s("b",null,[s("u",null,"GeometryOps.isclockwise")],-1),o=s("i",null,"Method",-1),d=i("",2),g={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},y={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.827ex"},xmlns:"http://www.w3.org/2000/svg",width:"33.539ex",height:"6.785ex",role:"img",focusable:"false",viewBox:"0 -1749.5 14824.1 2999","aria-hidden":"true"},E=i("",1),c=[E],u=s("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[s("mrow",{"data-mjx-texclass":"INNER"},[s("mo",{"data-mjx-texclass":"OPEN"},"("),s("munderover",null,[s("mo",{"data-mjx-texclass":"OP"},"∑"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",null,"i"),s("mo",null,"="),s("mn",null,"2")]),s("mi",null,"n")]),s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"x"),s("mi",null,"i")]),s("mo",null,"−"),s("msub",null,[s("mi",null,"x"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",null,"i"),s("mo",null,"−"),s("mn",null,"1")])]),s("mo",{stretchy:"false"},")"),s("mo",null,"⋅"),s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"y"),s("mi",null,"i")]),s("mo",null,"+"),s("msub",null,[s("mi",null,"y"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",null,"i"),s("mo",null,"−"),s("mn",null,"1")])]),s("mo",{stretchy:"false"},")"),s("mo",{"data-mjx-texclass":"CLOSE"},")")]),s("mo",null,">"),s("mn",null,"0")])],-1),m=i("",3),F=i("",37),b={style:{"border-width":"1px","border-style":"solid","border-color":"black",padding:"1em","border-radius":"25px"}},C=s("a",{id:"GeometryOps.t_value-Union{Tuple{T2}, Tuple{T1}, Tuple{N}, Tuple{Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, T2, T2}} where {N, T1<:Real, T2<:Real}",href:"#GeometryOps.t_value-Union{Tuple{T2}, Tuple{T1}, Tuple{N}, Tuple{Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, Union{Tuple{Vararg{T1, N}}, StaticArraysCore.StaticArray{Tuple{N}, T1, 1}}, T2, T2}} where {N, T1<:Real, T2<:Real}"},"#",-1),f=s("b",null,[s("u",null,"GeometryOps.t_value")],-1),T=s("i",null,"Method",-1),v=i("",3),G={class:"MathJax",jax:"SVG",display:"true",style:{direction:"ltr",display:"block","text-align":"center",margin:"1em 0",position:"relative"}},A={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-2.059ex"},xmlns:"http://www.w3.org/2000/svg",width:"27.746ex",height:"5.362ex",role:"img",focusable:"false",viewBox:"0 -1460 12263.9 2370","aria-hidden":"true"},B=i("",1),O=[B],D=s("mjx-assistive-mml",{unselectable:"on",display:"block",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",overflow:"hidden",width:"100%"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},[s("mi",null,"t"),s("mi",null,"ᵢ"),s("mo",null,"="),s("mfrac",null,[s("mrow",null,[s("mrow",{"data-mjx-texclass":"ORD"},[s("mi",{"data-mjx-auto-op":"false"},"det")]),s("mrow",{"data-mjx-texclass":"INNER"},[s("mo",{"data-mjx-texclass":"OPEN"},"("),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mo",null,","),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")]),s("mo",{"data-mjx-texclass":"CLOSE"},")")])]),s("mrow",null,[s("mi",null,"r"),s("mi",null,"ᵢ"),s("mo",null,"∗"),s("mi",null,"r"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")]),s("mo",null,"+"),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mo",null,"⋅"),s("mi",null,"s"),s("mi",null,"ᵢ"),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₊")]),s("mrow",{"data-mjx-texclass":"ORD"},[s("mo",{"data-mjx-pseudoscript":"true"},"₁")])])])])],-1),j=i("",3),x=i("",17);function w(Q,_,I,L,P,M){return t(),e("div",null,[h,s("div",p,[r,a(" "),k,a(" — "),o,a(". "),d,s("mjx-container",g,[(t(),e("svg",y,c)),u]),m]),F,s("div",b,[C,a(" "),f,a(" — "),T,a(". "),v,s("mjx-container",G,[(t(),e("svg",A,O)),D]),j]),x])}const S=n(l,[["render",w]]);export{q as __pageData,S as default}; diff --git a/previews/PR135/assets/app.BPnMWvu-.js b/previews/PR135/assets/app.okziLJoA.js similarity index 90% rename from previews/PR135/assets/app.BPnMWvu-.js rename to previews/PR135/assets/app.okziLJoA.js index 59373d7b8..9f514c9f8 100644 --- a/previews/PR135/assets/app.BPnMWvu-.js +++ b/previews/PR135/assets/app.okziLJoA.js @@ -1 +1 @@ -import{U as o,a8 as p,a9 as u,aa as l,ab as c,ac as f,ad as d,ae as m,af as h,ag as g,ah as A,d as P,u as v,y,x as w,ai as C,aj as R,ak as b,a6 as E}from"./chunks/framework.k41oUgTf.js";import{R as S}from"./chunks/theme.BCxq1kHm.js";function i(e){if(e.extends){const a=i(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=i(S),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return y(()=>{w(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),R(),b(),s.setup&&s.setup(),()=>E(s.Layout)}});async function _(){globalThis.__VITEPRESS__=!0;const e=x(),a=j();a.provide(u,e);const t=l(e.route);return a.provide(c,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function j(){return h(T)}function x(){let e=o,a;return g(t=>{let n=A(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&_().then(({app:e,router:a,data:t})=>{a.go().then(()=>{p(a.route,t.site),e.mount("#app")})});export{_ as createApp}; +import{U as o,a8 as p,a9 as u,aa as l,ab as c,ac as f,ad as d,ae as m,af as h,ag as g,ah as A,d as P,u as v,y,x as w,ai as C,aj as R,ak as b,a6 as E}from"./chunks/framework.CONf0Rze.js";import{R as S}from"./chunks/theme.D6VlRy8Q.js";function i(e){if(e.extends){const a=i(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=i(S),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return y(()=>{w(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),R(),b(),s.setup&&s.setup(),()=>E(s.Layout)}});async function _(){globalThis.__VITEPRESS__=!0;const e=x(),a=j();a.provide(u,e);const t=l(e.route);return a.provide(c,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function j(){return h(T)}function x(){let e=o,a;return g(t=>{let n=A(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&_().then(({app:e,router:a,data:t})=>{a.go().then(()=>{p(a.route,t.site),e.mount("#app")})});export{_ as createApp}; diff --git a/previews/PR135/assets/zbzherl.BEFUMtlf.png b/previews/PR135/assets/bhjiovt.BEFUMtlf.png similarity index 100% rename from previews/PR135/assets/zbzherl.BEFUMtlf.png rename to previews/PR135/assets/bhjiovt.BEFUMtlf.png diff --git a/previews/PR135/assets/briiybs.Cy4gx45x.png b/previews/PR135/assets/briiybs.Cy4gx45x.png new file mode 100644 index 000000000..74d2b4aec Binary files /dev/null and b/previews/PR135/assets/briiybs.Cy4gx45x.png differ diff --git a/previews/PR135/assets/call_notes.md.DwdSQiwl.js b/previews/PR135/assets/call_notes.md.CzI2sRnh.js similarity index 96% rename from previews/PR135/assets/call_notes.md.DwdSQiwl.js rename to previews/PR135/assets/call_notes.md.CzI2sRnh.js index e1407b87d..5b972f12e 100644 --- a/previews/PR135/assets/call_notes.md.DwdSQiwl.js +++ b/previews/PR135/assets/call_notes.md.CzI2sRnh.js @@ -1 +1 @@ -import{_ as e,c as i,o as l,a7 as t}from"./chunks/framework.k41oUgTf.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"call_notes.md","filePath":"call_notes.md","lastUpdated":null}'),o={name:"call_notes.md"},a=t('

20th April, 2024

See GeometryOps#114.

  • [ ] Exact predicates can be defined for lower-level, more atomic predicates within GeometryOps.

  • [ ] Add Shewchuck's adaptive math as a stage for exact predicates.

  • [x] @skygering to write docstrings for the predicates

29th Feb, 2024

To do

  • [ ] Finish clipping degeneracies

  • [ ] Fix cross & overlap functions

  • [x] Benchmarks to show why things you couldn't concieve of in R are doable in Julia

  • [x] profile functions for exponential improvements

  • [ ] A list of projects people can work on...the beauty here is that each function is kind of self-contained so it's an undergrad level project

  • [ ] Doc improvements

    • more

    • benchmarks page

  • Methods to validate and fix geometry

    • [ ] Polygons and LinearRings:

      • [ ] self-intersection

      • [ ] holes are actually within the polygon

      • [ ] Polygon exteriors must be counterclockwise, holes clockwise.

      • [ ] length of all rings > 4

      • [ ] repeated last point

    • [ ] LineStrings: NaN/Inf points

    • [x] Fix linear rings at some point to make sure the ring is closed, i.e., points[end] == points[begin]

  • Tests

    • [x] Simplify functions

    • [x] Polygonize

    • Barycentric tests for n_vertices > 4

Done

  • Rename bools.jl to something more relevant to the actual code -> orientation.jl

  • Doc improvements:

    • organise sections
',8),n=[a];function r(s,p,c,d,h,u){return l(),i("div",null,n)}const g=e(o,[["render",r]]);export{m as __pageData,g as default}; +import{_ as e,c as i,o as l,a7 as t}from"./chunks/framework.CONf0Rze.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"call_notes.md","filePath":"call_notes.md","lastUpdated":null}'),o={name:"call_notes.md"},a=t('

20th April, 2024

See GeometryOps#114.

  • [ ] Exact predicates can be defined for lower-level, more atomic predicates within GeometryOps.

  • [ ] Add Shewchuck's adaptive math as a stage for exact predicates.

  • [x] @skygering to write docstrings for the predicates

29th Feb, 2024

To do

  • [ ] Finish clipping degeneracies

  • [ ] Fix cross & overlap functions

  • [x] Benchmarks to show why things you couldn't concieve of in R are doable in Julia

  • [x] profile functions for exponential improvements

  • [ ] A list of projects people can work on...the beauty here is that each function is kind of self-contained so it's an undergrad level project

  • [ ] Doc improvements

    • more

    • benchmarks page

  • Methods to validate and fix geometry

    • [ ] Polygons and LinearRings:

      • [ ] self-intersection

      • [ ] holes are actually within the polygon

      • [ ] Polygon exteriors must be counterclockwise, holes clockwise.

      • [ ] length of all rings > 4

      • [ ] repeated last point

    • [ ] LineStrings: NaN/Inf points

    • [x] Fix linear rings at some point to make sure the ring is closed, i.e., points[end] == points[begin]

  • Tests

    • [x] Simplify functions

    • [x] Polygonize

    • Barycentric tests for n_vertices > 4

Done

  • Rename bools.jl to something more relevant to the actual code -> orientation.jl

  • Doc improvements:

    • organise sections
',8),n=[a];function r(s,p,c,d,h,u){return l(),i("div",null,n)}const g=e(o,[["render",r]]);export{m as __pageData,g as default}; diff --git a/previews/PR135/assets/call_notes.md.DwdSQiwl.lean.js b/previews/PR135/assets/call_notes.md.CzI2sRnh.lean.js similarity index 67% rename from previews/PR135/assets/call_notes.md.DwdSQiwl.lean.js rename to previews/PR135/assets/call_notes.md.CzI2sRnh.lean.js index 0a8fa6790..09f4090f3 100644 --- a/previews/PR135/assets/call_notes.md.DwdSQiwl.lean.js +++ b/previews/PR135/assets/call_notes.md.CzI2sRnh.lean.js @@ -1 +1 @@ -import{_ as e,c as i,o as l,a7 as t}from"./chunks/framework.k41oUgTf.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"call_notes.md","filePath":"call_notes.md","lastUpdated":null}'),o={name:"call_notes.md"},a=t("",8),n=[a];function r(s,p,c,d,h,u){return l(),i("div",null,n)}const g=e(o,[["render",r]]);export{m as __pageData,g as default}; +import{_ as e,c as i,o as l,a7 as t}from"./chunks/framework.CONf0Rze.js";const m=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"call_notes.md","filePath":"call_notes.md","lastUpdated":null}'),o={name:"call_notes.md"},a=t("",8),n=[a];function r(s,p,c,d,h,u){return l(),i("div",null,n)}const g=e(o,[["render",r]]);export{m as __pageData,g as default}; diff --git a/previews/PR135/assets/cezjmfi.BcI7dJNv.png b/previews/PR135/assets/cezjmfi.BcI7dJNv.png new file mode 100644 index 000000000..a13c05761 Binary files /dev/null and b/previews/PR135/assets/cezjmfi.BcI7dJNv.png differ diff --git a/previews/PR135/assets/chunks/@localSearchIndexroot.BBdiXmf3.js b/previews/PR135/assets/chunks/@localSearchIndexroot.BBdiXmf3.js deleted file mode 100644 index 15d07d1fd..000000000 --- a/previews/PR135/assets/chunks/@localSearchIndexroot.BBdiXmf3.js +++ /dev/null @@ -1 +0,0 @@ -const e='{"documentCount":172,"nextId":172,"documentIds":{"0":"/GeometryOps.jl/previews/PR135/call_notes#20th-April,-2024","1":"/GeometryOps.jl/previews/PR135/call_notes#29th-Feb,-2024","2":"/GeometryOps.jl/previews/PR135/call_notes#To-do","3":"/GeometryOps.jl/previews/PR135/call_notes#done","4":"/GeometryOps.jl/previews/PR135/api#Full-GeometryOps-API-documentation","5":"/GeometryOps.jl/previews/PR135/api#apply-and-associated-functions","6":"/GeometryOps.jl/previews/PR135/api#General-geometry-methods","7":"/GeometryOps.jl/previews/PR135/api#OGC-methods","8":"/GeometryOps.jl/previews/PR135/api#Other-general-methods","9":"/GeometryOps.jl/previews/PR135/api#Barycentric-coordinates","10":"/GeometryOps.jl/previews/PR135/api#Other-methods","11":"/GeometryOps.jl/previews/PR135/experiments/accurate_accumulators#Accurate-accumulation","12":"/GeometryOps.jl/previews/PR135/experiments/predicates#predicates","13":"/GeometryOps.jl/previews/PR135/experiments/predicates#orient","14":"/GeometryOps.jl/previews/PR135/experiments/predicates#dashboard","15":"/GeometryOps.jl/previews/PR135/experiments/predicates#Testing-robust-vs-regular-predicates","16":"/GeometryOps.jl/previews/PR135/experiments/predicates#incircle","17":"/GeometryOps.jl/previews/PR135/explanations/paradigms#paradigms","18":"/GeometryOps.jl/previews/PR135/explanations/paradigms#apply","19":"/GeometryOps.jl/previews/PR135/explanations/paradigms#applyreduce","20":"/GeometryOps.jl/previews/PR135/explanations/paradigms#fix-and-prepare","21":"/GeometryOps.jl/previews/PR135/explanations/peculiarities#peculiarities","22":"/GeometryOps.jl/previews/PR135/explanations/peculiarities#What-does-apply-return-and-why?","23":"/GeometryOps.jl/previews/PR135/explanations/peculiarities#Why-do-you-want-me-to-provide-a-target-in-set-operations?","24":"/GeometryOps.jl/previews/PR135/explanations/peculiarities#_True-and-_False-(or-BoolsAsTypes)","25":"/GeometryOps.jl/previews/PR135/#what-is-geometryops-jl","26":"/GeometryOps.jl/previews/PR135/#how-to-navigate-the-docs","27":"/GeometryOps.jl/previews/PR135/introduction#introduction","28":"/GeometryOps.jl/previews/PR135/introduction#Main-concepts","29":"/GeometryOps.jl/previews/PR135/introduction#The-apply-paradigm","30":"/GeometryOps.jl/previews/PR135/introduction#What\'s-this-GeoInterface.Wrapper-thing?","31":"/GeometryOps.jl/previews/PR135/source/GeometryOps#geometryops-jl","32":"/GeometryOps.jl/previews/PR135/source/methods/angles#angles","33":"/GeometryOps.jl/previews/PR135/source/methods/angles#What-is-angles?","34":"/GeometryOps.jl/previews/PR135/source/methods/angles#implementation","35":"/GeometryOps.jl/previews/PR135/source/methods/area#Area-and-signed-area","36":"/GeometryOps.jl/previews/PR135/source/methods/area#What-is-area?-What-is-signed-area?","37":"/GeometryOps.jl/previews/PR135/source/methods/area#implementation","38":"/GeometryOps.jl/previews/PR135/source/methods/barycentric#Barycentric-coordinates","39":"/GeometryOps.jl/previews/PR135/source/methods/barycentric#example","40":"/GeometryOps.jl/previews/PR135/source/methods/barycentric#Barycentric-coordinate-API","41":"/GeometryOps.jl/previews/PR135/source/methods/buffer#buffer","42":"/GeometryOps.jl/previews/PR135/source/methods/centroid#centroid","43":"/GeometryOps.jl/previews/PR135/source/methods/centroid#What-is-the-centroid?","44":"/GeometryOps.jl/previews/PR135/source/methods/centroid#implementation","45":"/GeometryOps.jl/previews/PR135/source/methods/clipping/clipping_processor#Polygon-clipping-helpers","46":"/GeometryOps.jl/previews/PR135/source/methods/clipping/coverage#What-is-coverage?","47":"/GeometryOps.jl/previews/PR135/source/methods/clipping/coverage#implementation","48":"/GeometryOps.jl/previews/PR135/source/methods/clipping/cut#Polygon-cutting","49":"/GeometryOps.jl/previews/PR135/source/methods/clipping/cut#What-is-cut?","50":"/GeometryOps.jl/previews/PR135/source/methods/clipping/cut#implementation","51":"/GeometryOps.jl/previews/PR135/source/methods/clipping/difference#Difference-Polygon-Clipping","52":"/GeometryOps.jl/previews/PR135/source/methods/clipping/difference#Helper-functions-for-Differences-with-Greiner-and-Hormann-Polygon-Clipping","53":"/GeometryOps.jl/previews/PR135/source/methods/clipping/intersection#Geometry-Intersection","54":"/GeometryOps.jl/previews/PR135/source/methods/clipping/intersection#Helper-functions-for-Intersections-with-Greiner-and-Hormann-Polygon-Clipping","55":"/GeometryOps.jl/previews/PR135/source/methods/clipping/union#Union-Polygon-Clipping","56":"/GeometryOps.jl/previews/PR135/source/methods/clipping/union#Helper-functions-for-Unions-with-Greiner-and-Hormann-Polygon-Clipping","57":"/GeometryOps.jl/previews/PR135/source/methods/clipping/predicates#If-we-want-to-inject-adaptivity,-we-would-do-something-like:","58":"/GeometryOps.jl/previews/PR135/source/methods/distance#Distance-and-signed-distance","59":"/GeometryOps.jl/previews/PR135/source/methods/distance#What-is-distance?-What-is-signed-distance?","60":"/GeometryOps.jl/previews/PR135/source/methods/distance#implementation","61":"/GeometryOps.jl/previews/PR135/source/methods/equals#equals","62":"/GeometryOps.jl/previews/PR135/source/methods/equals#What-is-equals?","63":"/GeometryOps.jl/previews/PR135/source/methods/equals#implementation","64":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/contains#contains","65":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/contains#What-is-contains?","66":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/contains#implementation","67":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/coveredby#coveredby","68":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/coveredby#What-is-coveredby?","69":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/coveredby#implementation","70":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/coveredby#Convert-features-to-geometries","71":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/coveredby#Points-coveredby-geometries","72":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/coveredby#Lines-coveredby-geometries","73":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/coveredby#Rings-covered-by-geometries","74":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/coveredby#Polygons-covered-by-geometries","75":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/coveredby#Geometries-coveredby-multi-geometry/geometry-collections","76":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/coveredby#Multi-geometry/geometry-collections-coveredby-geometries","77":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/covers#covers","78":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/covers#What-is-covers?","79":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/covers#implementation","80":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/crosses#Crossing-checks","81":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/disjoint#disjoint","82":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/disjoint#What-is-disjoint?","83":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/disjoint#implementation","84":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/disjoint#Convert-features-to-geometries","85":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/disjoint#Point-disjoint-geometries","86":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/disjoint#Lines-disjoint-geometries","87":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/disjoint#Rings-disjoint-geometries","88":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/disjoint#Polygon-disjoint-geometries","89":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/disjoint#Geometries-disjoint-multi-geometry/geometry-collections","90":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/disjoint#Multi-geometry/geometry-collections-coveredby-geometries","91":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/geom_geom_processors#Line-curve-interaction","92":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/intersects#Intersection-checks","93":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/intersects#What-is-intersects?","94":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/intersects#implementation","95":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/overlaps#overlaps","96":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/overlaps#What-is-overlaps?","97":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/overlaps#implementation","98":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/touches#touches","99":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/touches#What-is-touches?","100":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/touches#implementation","101":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/touches#Convert-features-to-geometries","102":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/touches#Point-touches-geometries","103":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/touches#Lines-touching-geometries","104":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/touches#Rings-touch-geometries","105":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/touches#Polygons-touch-geometries","106":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/touches#Geometries-touch-multi-geometry/geometry-collections","107":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/touches#Multi-geometry/geometry-collections-cross-geometries","108":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/within#within","109":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/within#What-is-within?","110":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/within#implementation","111":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/within#Convert-features-to-geometries","112":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/within#Points-within-geometries","113":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/within#Lines-within-geometries","114":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/within#Rings-covered-by-geometries","115":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/within#Polygons-within-geometries","116":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/within#Geometries-within-multi-geometry/geometry-collections","117":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/within#Multi-geometry/geometry-collections-within-geometries","118":"/GeometryOps.jl/previews/PR135/source/methods/orientation#orientation","119":"/GeometryOps.jl/previews/PR135/source/methods/orientation#isclockwise","120":"/GeometryOps.jl/previews/PR135/source/methods/orientation#isconcave","121":"/GeometryOps.jl/previews/PR135/source/methods/polygonize#Polygonizing-raster-data","122":"/GeometryOps.jl/previews/PR135/source/not_implemented_yet#Not-implemented-yet","123":"/GeometryOps.jl/previews/PR135/source/primitives#Primitive-functions","124":"/GeometryOps.jl/previews/PR135/source/primitives#docstrings","125":"/GeometryOps.jl/previews/PR135/source/primitives#functions","126":"/GeometryOps.jl/previews/PR135/source/primitives#types","127":"/GeometryOps.jl/previews/PR135/source/primitives#implementation","128":"/GeometryOps.jl/previews/PR135/source/primitives#What-is-apply?","129":"/GeometryOps.jl/previews/PR135/source/primitives#embedding","130":"/GeometryOps.jl/previews/PR135/source/primitives#threading","131":"/GeometryOps.jl/previews/PR135/source/transformations/correction/closed_ring#Closed-Rings","132":"/GeometryOps.jl/previews/PR135/source/transformations/correction/closed_ring#example","133":"/GeometryOps.jl/previews/PR135/source/transformations/correction/closed_ring#implementation","134":"/GeometryOps.jl/previews/PR135/source/transformations/correction/geometry_correction#Geometry-Corrections","135":"/GeometryOps.jl/previews/PR135/source/transformations/correction/geometry_correction#interface","136":"/GeometryOps.jl/previews/PR135/source/transformations/correction/geometry_correction#Available-corrections","137":"/GeometryOps.jl/previews/PR135/source/transformations/correction/intersecting_polygons#Intersecting-Polygons","138":"/GeometryOps.jl/previews/PR135/source/transformations/correction/intersecting_polygons#example","139":"/GeometryOps.jl/previews/PR135/source/transformations/correction/intersecting_polygons#implementation","140":"/GeometryOps.jl/previews/PR135/source/transformations/flip#Coordinate-flipping","141":"/GeometryOps.jl/previews/PR135/source/transformations/extent#Extent-embedding","142":"/GeometryOps.jl/previews/PR135/source/transformations/reproject#Geometry-reprojection","143":"/GeometryOps.jl/previews/PR135/source/transformations/reproject#Method-error-handling","144":"/GeometryOps.jl/previews/PR135/source/transformations/segmentize#segmentize","145":"/GeometryOps.jl/previews/PR135/source/transformations/segmentize#examples","146":"/GeometryOps.jl/previews/PR135/source/transformations/segmentize#benchmark","147":"/GeometryOps.jl/previews/PR135/source/transformations/segmentize#implementation","148":"/GeometryOps.jl/previews/PR135/source/transformations/simplify#Geometry-simplification","149":"/GeometryOps.jl/previews/PR135/source/transformations/simplify#examples","150":"/GeometryOps.jl/previews/PR135/source/transformations/simplify#benchmark","151":"/GeometryOps.jl/previews/PR135/source/transformations/simplify#Simplify-with-RadialDistance-Algorithm","152":"/GeometryOps.jl/previews/PR135/source/transformations/simplify#Simplify-with-DouglasPeucker-Algorithm","153":"/GeometryOps.jl/previews/PR135/source/transformations/simplify#Simplify-with-VisvalingamWhyatt-Algorithm","154":"/GeometryOps.jl/previews/PR135/source/transformations/simplify#Shared-utils","155":"/GeometryOps.jl/previews/PR135/source/transformations/tuples#Tuple-conversion","156":"/GeometryOps.jl/previews/PR135/source/types#types","157":"/GeometryOps.jl/previews/PR135/source/types#TraitTarget","158":"/GeometryOps.jl/previews/PR135/source/types#BoolsAsTypes","159":"/GeometryOps.jl/previews/PR135/source/types#GEOS","160":"/GeometryOps.jl/previews/PR135/source/transformations/transform#Pointwise-transformation","161":"/GeometryOps.jl/previews/PR135/source/utils#Utility-functions","162":"/GeometryOps.jl/previews/PR135/tutorials/creating_geometry#Creating-Geometry","163":"/GeometryOps.jl/previews/PR135/tutorials/creating_geometry#creating-geometry","164":"/GeometryOps.jl/previews/PR135/tutorials/creating_geometry#plot-geometry","165":"/GeometryOps.jl/previews/PR135/tutorials/creating_geometry#geom-crs","166":"/GeometryOps.jl/previews/PR135/tutorials/creating_geometry#attributes","167":"/GeometryOps.jl/previews/PR135/tutorials/creating_geometry#save-geometry","168":"/GeometryOps.jl/previews/PR135/tutorials/spatial_joins#Spatial-joins","169":"/GeometryOps.jl/previews/PR135/tutorials/spatial_joins#Simple-example","170":"/GeometryOps.jl/previews/PR135/tutorials/spatial_joins#Real-world-example","171":"/GeometryOps.jl/previews/PR135/tutorials/spatial_joins#Enabling-custom-predicates"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[3,1,55],"1":[3,1,1],"2":[2,3,107],"3":[1,3,17],"4":[4,1,88],"5":[4,4,248],"6":[3,4,1],"7":[2,7,207],"8":[3,7,261],"9":[2,4,84],"10":[2,4,1065],"11":[2,1,74],"12":[1,1,5],"13":[1,1,128],"14":[1,2,116],"15":[5,2,72],"16":[1,1,1],"17":[1,1,53],"18":[1,1,109],"19":[1,2,35],"20":[3,1,79],"21":[1,1,1],"22":[7,1,71],"23":[13,1,101],"24":[6,1,66],"25":[5,1,72],"26":[5,1,61],"27":[1,1,72],"28":[2,1,1],"29":[3,3,50],"30":[8,3,18],"31":[2,1,116],"32":[1,1,3],"33":[4,1,57],"34":[1,1,270],"35":[4,1,4],"36":[5,4,101],"37":[1,4,247],"38":[2,1,65],"39":[1,2,211],"40":[3,2,414],"41":[1,1,110],"42":[1,1,6],"43":[5,1,91],"44":[1,1,199],"45":[3,1,614],"46":[4,1,70],"47":[1,1,327],"48":[2,1,3],"49":[4,2,57],"50":[1,2,200],"51":[3,1,215],"52":[10,1,191],"53":[2,1,252],"54":[10,1,482],"55":[3,1,237],"56":[10,1,285],"57":[11,1,25],"58":[4,1,4],"59":[5,4,129],"60":[1,4,260],"61":[1,1,3],"62":[4,1,68],"63":[1,1,266],"64":[1,1,3],"65":[4,1,79],"66":[1,1,79],"67":[1,1,3],"68":[4,1,81],"69":[1,1,128],"70":[4,1,11],"71":[3,1,56],"72":[3,1,46],"73":[4,1,48],"74":[4,1,40],"75":[5,1,40],"76":[5,1,44],"77":[1,1,3],"78":[4,1,67],"79":[1,1,78],"80":[2,1,149],"81":[1,1,3],"82":[4,1,68],"83":[1,1,110],"84":[4,1,10],"85":[3,1,57],"86":[3,1,58],"87":[3,1,47],"88":[3,1,33],"89":[5,1,39],"90":[5,1,44],"91":[3,1,434],"92":[2,1,3],"93":[4,2,80],"94":[1,2,76],"95":[1,1,3],"96":[4,1,82],"97":[1,1,244],"98":[1,1,3],"99":[4,1,70],"100":[1,1,125],"101":[4,1,11],"102":[3,1,69],"103":[3,1,53],"104":[3,1,62],"105":[3,1,41],"106":[5,1,39],"107":[5,1,42],"108":[1,1,3],"109":[4,1,72],"110":[1,1,129],"111":[4,1,11],"112":[3,1,63],"113":[3,1,53],"114":[4,1,53],"115":[3,1,38],"116":[5,1,39],"117":[5,1,42],"118":[1,1,4],"119":[1,1,21],"120":[1,1,206],"121":[3,1,513],"122":[3,1,47],"123":[2,1,113],"124":[1,2,1],"125":[1,3,106],"126":[1,2,12],"127":[1,2,33],"128":[4,2,114],"129":[2,2,36],"130":[1,2,546],"131":[2,1,54],"132":[1,2,87],"133":[1,2,83],"134":[2,1,41],"135":[1,2,112],"136":[2,2,109],"137":[2,1,77],"138":[1,2,70],"139":[1,2,136],"140":[2,1,56],"141":[2,1,71],"142":[2,1,132],"143":[3,2,77],"144":[1,1,76],"145":[1,1,147],"146":[1,1,268],"147":[1,1,188],"148":[2,1,44],"149":[1,2,67],"150":[1,2,404],"151":[4,1,75],"152":[4,1,187],"153":[4,1,85],"154":[2,1,149],"155":[2,1,58],"156":[1,1,38],"157":[1,1,74],"158":[1,1,82],"159":[1,1,147],"160":[2,1,111],"161":[2,1,142],"162":[2,1,60],"163":[4,2,287],"164":[13,2,281],"165":[9,2,200],"166":[7,2,63],"167":[4,2,140],"168":[2,1,138],"169":[2,2,137],"170":[3,2,117],"171":[3,2,68]},"averageFieldLength":[2.877906976744186,1.4534883720930232,110.20348837209302],"storedFields":{"0":{"title":"20th April, 2024","titles":[]},"1":{"title":"29th Feb, 2024","titles":[]},"2":{"title":"To do","titles":["29th Feb, 2024"]},"3":{"title":"Done","titles":["29th Feb, 2024"]},"4":{"title":"Full GeometryOps API documentation","titles":[]},"5":{"title":"apply and associated functions","titles":["Full GeometryOps API documentation"]},"6":{"title":"General geometry methods","titles":["Full GeometryOps API documentation"]},"7":{"title":"OGC methods","titles":["Full GeometryOps API documentation","General geometry methods"]},"8":{"title":"Other general methods","titles":["Full GeometryOps API documentation","General geometry methods"]},"9":{"title":"Barycentric coordinates","titles":["Full GeometryOps API documentation"]},"10":{"title":"Other methods","titles":["Full GeometryOps API documentation"]},"11":{"title":"Accurate accumulation","titles":[]},"12":{"title":"Predicates","titles":[]},"13":{"title":"Orient","titles":["Predicates"]},"14":{"title":"Dashboard","titles":["Predicates","Orient"]},"15":{"title":"Testing robust vs regular predicates","titles":["Predicates","Orient"]},"16":{"title":"Incircle","titles":["Predicates"]},"17":{"title":"Paradigms","titles":[]},"18":{"title":"apply","titles":["Paradigms"]},"19":{"title":"applyreduce","titles":["Paradigms","apply"]},"20":{"title":"fix and prepare","titles":["Paradigms"]},"21":{"title":"Peculiarities","titles":[]},"22":{"title":"What does apply return and why?","titles":["Peculiarities"]},"23":{"title":"Why do you want me to provide a target in set operations?","titles":["Peculiarities"]},"24":{"title":"_True and _False (or BoolsAsTypes)","titles":["Peculiarities"]},"25":{"title":"What is GeometryOps.jl?","titles":[]},"26":{"title":"How to navigate the docs","titles":[]},"27":{"title":"Introduction","titles":[]},"28":{"title":"Main concepts","titles":["Introduction"]},"29":{"title":"The apply paradigm","titles":["Introduction","Main concepts"]},"30":{"title":"What's this GeoInterface.Wrapper thing?","titles":["Introduction","Main concepts"]},"31":{"title":"GeometryOps.jl","titles":[]},"32":{"title":"Angles","titles":[]},"33":{"title":"What is angles?","titles":["Angles"]},"34":{"title":"Implementation","titles":["Angles"]},"35":{"title":"Area and signed area","titles":[]},"36":{"title":"What is area? What is signed area?","titles":["Area and signed area"]},"37":{"title":"Implementation","titles":["Area and signed area"]},"38":{"title":"Barycentric coordinates","titles":[]},"39":{"title":"Example","titles":["Barycentric coordinates"]},"40":{"title":"Barycentric-coordinate API","titles":["Barycentric coordinates"]},"41":{"title":"Buffer","titles":[]},"42":{"title":"Centroid","titles":[]},"43":{"title":"What is the centroid?","titles":["Centroid"]},"44":{"title":"Implementation","titles":["Centroid"]},"45":{"title":"Polygon clipping helpers","titles":[]},"46":{"title":"What is coverage?","titles":[]},"47":{"title":"Implementation","titles":[]},"48":{"title":"Polygon cutting","titles":[]},"49":{"title":"What is cut?","titles":["Polygon cutting"]},"50":{"title":"Implementation","titles":["Polygon cutting"]},"51":{"title":"Difference Polygon Clipping","titles":[]},"52":{"title":"Helper functions for Differences with Greiner and Hormann Polygon Clipping","titles":[]},"53":{"title":"Geometry Intersection","titles":[]},"54":{"title":"Helper functions for Intersections with Greiner and Hormann Polygon Clipping","titles":[]},"55":{"title":"Union Polygon Clipping","titles":[]},"56":{"title":"Helper functions for Unions with Greiner and Hormann Polygon Clipping","titles":[]},"57":{"title":"If we want to inject adaptivity, we would do something like:","titles":[]},"58":{"title":"Distance and signed distance","titles":[]},"59":{"title":"What is distance? What is signed distance?","titles":["Distance and signed distance"]},"60":{"title":"Implementation","titles":["Distance and signed distance"]},"61":{"title":"Equals","titles":[]},"62":{"title":"What is equals?","titles":["Equals"]},"63":{"title":"Implementation","titles":["Equals"]},"64":{"title":"Contains","titles":[]},"65":{"title":"What is contains?","titles":["Contains"]},"66":{"title":"Implementation","titles":["Contains"]},"67":{"title":"CoveredBy","titles":[]},"68":{"title":"What is coveredby?","titles":["CoveredBy"]},"69":{"title":"Implementation","titles":["CoveredBy"]},"70":{"title":"Convert features to geometries","titles":[]},"71":{"title":"Points coveredby geometries","titles":[]},"72":{"title":"Lines coveredby geometries","titles":[]},"73":{"title":"Rings covered by geometries","titles":[]},"74":{"title":"Polygons covered by geometries","titles":[]},"75":{"title":"Geometries coveredby multi-geometry/geometry collections","titles":[]},"76":{"title":"Multi-geometry/geometry collections coveredby geometries","titles":[]},"77":{"title":"Covers","titles":[]},"78":{"title":"What is covers?","titles":["Covers"]},"79":{"title":"Implementation","titles":["Covers"]},"80":{"title":"Crossing checks","titles":[]},"81":{"title":"Disjoint","titles":[]},"82":{"title":"What is disjoint?","titles":["Disjoint"]},"83":{"title":"Implementation","titles":["Disjoint"]},"84":{"title":"Convert features to geometries","titles":[]},"85":{"title":"Point disjoint geometries","titles":[]},"86":{"title":"Lines disjoint geometries","titles":[]},"87":{"title":"Rings disjoint geometries","titles":[]},"88":{"title":"Polygon disjoint geometries","titles":[]},"89":{"title":"Geometries disjoint multi-geometry/geometry collections","titles":[]},"90":{"title":"Multi-geometry/geometry collections coveredby geometries","titles":[]},"91":{"title":"Line-curve interaction","titles":[]},"92":{"title":"Intersection checks","titles":[]},"93":{"title":"What is intersects?","titles":["Intersection checks"]},"94":{"title":"Implementation","titles":["Intersection checks"]},"95":{"title":"Overlaps","titles":[]},"96":{"title":"What is overlaps?","titles":["Overlaps"]},"97":{"title":"Implementation","titles":["Overlaps"]},"98":{"title":"Touches","titles":[]},"99":{"title":"What is touches?","titles":["Touches"]},"100":{"title":"Implementation","titles":["Touches"]},"101":{"title":"Convert features to geometries","titles":[]},"102":{"title":"Point touches geometries","titles":[]},"103":{"title":"Lines touching geometries","titles":[]},"104":{"title":"Rings touch geometries","titles":[]},"105":{"title":"Polygons touch geometries","titles":[]},"106":{"title":"Geometries touch multi-geometry/geometry collections","titles":[]},"107":{"title":"Multi-geometry/geometry collections cross geometries","titles":[]},"108":{"title":"Within","titles":[]},"109":{"title":"What is within?","titles":["Within"]},"110":{"title":"Implementation","titles":["Within"]},"111":{"title":"Convert features to geometries","titles":[]},"112":{"title":"Points within geometries","titles":[]},"113":{"title":"Lines within geometries","titles":[]},"114":{"title":"Rings covered by geometries","titles":[]},"115":{"title":"Polygons within geometries","titles":[]},"116":{"title":"Geometries within multi-geometry/geometry collections","titles":[]},"117":{"title":"Multi-geometry/geometry collections within geometries","titles":[]},"118":{"title":"Orientation","titles":[]},"119":{"title":"isclockwise","titles":["Orientation"]},"120":{"title":"isconcave","titles":["Orientation"]},"121":{"title":"Polygonizing raster data","titles":[]},"122":{"title":"Not implemented yet","titles":[]},"123":{"title":"Primitive functions","titles":[]},"124":{"title":"Docstrings","titles":["Primitive functions"]},"125":{"title":"Functions","titles":["Primitive functions","Docstrings"]},"126":{"title":"Types","titles":["Primitive functions"]},"127":{"title":"Implementation","titles":["Primitive functions"]},"128":{"title":"What is apply?","titles":["Primitive functions"]},"129":{"title":"Embedding:","titles":["Primitive functions"]},"130":{"title":"Threading","titles":["Primitive functions"]},"131":{"title":"Closed Rings","titles":[]},"132":{"title":"Example","titles":["Closed Rings"]},"133":{"title":"Implementation","titles":["Closed Rings"]},"134":{"title":"Geometry Corrections","titles":[]},"135":{"title":"Interface","titles":["Geometry Corrections"]},"136":{"title":"Available corrections","titles":["Geometry Corrections"]},"137":{"title":"Intersecting Polygons","titles":[]},"138":{"title":"Example","titles":["Intersecting Polygons"]},"139":{"title":"Implementation","titles":["Intersecting Polygons"]},"140":{"title":"Coordinate flipping","titles":[]},"141":{"title":"Extent embedding","titles":[]},"142":{"title":"Geometry reprojection","titles":[]},"143":{"title":"Method error handling","titles":["Geometry reprojection"]},"144":{"title":"Segmentize","titles":[]},"145":{"title":"Examples","titles":["Segmentize"]},"146":{"title":"Benchmark","titles":["Segmentize"]},"147":{"title":"Implementation","titles":["Segmentize"]},"148":{"title":"Geometry simplification","titles":[]},"149":{"title":"Examples","titles":["Geometry simplification"]},"150":{"title":"Benchmark","titles":["Geometry simplification"]},"151":{"title":"Simplify with RadialDistance Algorithm","titles":[]},"152":{"title":"Simplify with DouglasPeucker Algorithm","titles":[]},"153":{"title":"Simplify with VisvalingamWhyatt Algorithm","titles":[]},"154":{"title":"Shared utils","titles":[]},"155":{"title":"Tuple conversion","titles":[]},"156":{"title":"Types","titles":[]},"157":{"title":"TraitTarget","titles":["Types"]},"158":{"title":"BoolsAsTypes","titles":["Types"]},"159":{"title":"GEOS","titles":["Types"]},"160":{"title":"Pointwise transformation","titles":[]},"161":{"title":"Utility functions","titles":[]},"162":{"title":"Creating Geometry","titles":[]},"163":{"title":"Creating and plotting geometries","titles":["Creating Geometry"]},"164":{"title":"Plot geometries on a map using GeoMakie and coordinate reference system (CRS)","titles":["Creating Geometry"]},"165":{"title":"Create geospatial geometries with embedded coordinate reference system information","titles":["Creating Geometry"]},"166":{"title":"Creating a table with attributes and geometry","titles":["Creating Geometry"]},"167":{"title":"Saving your geospatial data","titles":["Creating Geometry"]},"168":{"title":"Spatial joins","titles":[]},"169":{"title":"Simple example","titles":["Spatial joins"]},"170":{"title":"Real-world example","titles":["Spatial joins"]},"171":{"title":"Enabling custom predicates","titles":["Spatial joins"]}},"dirtCount":0,"index":[["⋮",{"2":{"164":1}}],["θ",{"2":{"163":7,"164":3,"165":5}}],["☁",{"2":{"163":1}}],["✈",{"2":{"163":1}}],["÷",{"2":{"130":2}}],["ϵ",{"2":{"54":5}}],["∘",{"2":{"54":1,"97":2,"121":2,"135":1,"150":2,"171":2}}],["⊻",{"2":{"45":1,"52":2}}],["≥",{"2":{"45":1,"91":2,"139":1,"152":1}}],["α≈1",{"2":{"54":1}}],["α≈0",{"2":{"54":1}}],["α2",{"2":{"45":4,"54":2}}],["α",{"2":{"45":3,"54":28,"91":7}}],["α1",{"2":{"45":4,"54":2}}],["β2",{"2":{"45":4,"54":2}}],["β",{"2":{"45":4,"54":28,"91":7}}],["β1",{"2":{"45":4,"54":2}}],["≤",{"2":{"45":5,"47":14,"91":6,"152":1,"154":1,"161":4}}],["^",{"2":{"164":1}}],["^3",{"2":{"164":1}}],["^n",{"2":{"120":1}}],["^2",{"2":{"44":2,"60":2}}],["^hormannpresentation",{"2":{"40":2}}],["∑λ",{"2":{"40":2}}],["∑i=2n",{"2":{"10":1}}],["`$",{"2":{"159":1}}],["`libgeos",{"2":{"159":1}}],["`linearring`",{"2":{"147":1}}],["`linearsegments`",{"2":{"147":1}}],["`linestring`",{"2":{"147":1}}],["`linestringtrait`",{"2":{"135":1}}],["`line2`",{"2":{"120":1}}],["`line1`",{"2":{"120":1}}],["`line",{"2":{"53":4}}],["`equatorial",{"2":{"146":2}}],["`extents",{"2":{"141":1}}],["`inf`",{"2":{"142":1}}],["`intersects`",{"2":{"94":1}}],["`intersectingpolygons`",{"2":{"51":1,"53":1,"55":1}}],["`prefilter",{"2":{"150":1}}],["`proj",{"2":{"142":1,"146":2}}],["`polgontrait`",{"2":{"130":1}}],["`polygontrait`",{"2":{"130":1,"135":1}}],["`polygonize`",{"2":{"121":2}}],["`polygon`",{"2":{"40":3}}],["`polys`",{"2":{"52":1}}],["`poly",{"2":{"52":3,"54":1,"56":1}}],["`pointrait`",{"2":{"150":1}}],["`pointtrait`",{"2":{"130":3,"135":1}}],["`point",{"2":{"91":3}}],["`point`",{"2":{"40":4,"60":1}}],["`point2f`",{"2":{"39":1}}],["`douglaspeucker`",{"2":{"150":1}}],["`d`",{"2":{"142":1}}],["`difference`",{"2":{"139":1}}],["`disjoint`",{"2":{"94":1}}],["`obj`",{"2":{"130":1,"155":1,"160":1}}],["`op`",{"2":{"130":2}}],["`+`",{"2":{"130":1}}],["`alg",{"2":{"159":1}}],["`alg`",{"2":{"154":1}}],["`always",{"2":{"142":1}}],["`application",{"2":{"135":1}}],["`apply`",{"2":{"130":1,"157":1}}],["`abstractgeometrytrait`",{"2":{"130":1}}],["`abstractarray`",{"2":{"130":1}}],["`abstractmatrix`",{"2":{"121":1}}],["`calc",{"2":{"127":1}}],["`crs`",{"2":{"127":1}}],["`components`",{"2":{"130":1}}],["`collect`",{"2":{"130":1}}],["`covers`",{"2":{"69":1,"79":1}}],["`coveredby`",{"2":{"69":1,"79":1}}],["`contains`",{"2":{"66":1,"110":1}}],["`union",{"2":{"121":2}}],["`unionintersectingpolygons`",{"2":{"139":1}}],["`unionintersectingpolygons",{"2":{"51":1,"52":2,"53":1,"54":2,"55":1,"56":2}}],["`ys`",{"2":{"121":1}}],["`flattening`",{"2":{"146":1}}],["`flattening",{"2":{"146":1}}],["`flatten`",{"2":{"130":1}}],["`f",{"2":{"130":1}}],["`featurecollectiontrait`",{"2":{"130":2}}],["`featurecollection`",{"2":{"121":2}}],["`featuretrait`",{"2":{"130":3}}],["`feature`s",{"2":{"121":1}}],["`f`",{"2":{"121":5,"130":6,"159":1,"160":2}}],["`false`",{"2":{"120":1,"121":1,"127":4,"142":1}}],["`fix",{"2":{"51":2,"52":2,"53":2,"54":2,"55":2,"56":2}}],["`within`",{"2":{"66":1,"110":1}}],["`weight`",{"2":{"40":1}}],["`geos`",{"2":{"159":3}}],["`geodesic`",{"2":{"146":1}}],["`geodesicsegments`",{"2":{"145":1,"146":1,"147":1}}],["`geointerface`",{"2":{"135":1}}],["`geointerface",{"2":{"130":2,"142":2}}],["`geometrycorrection`",{"2":{"133":1,"135":1,"139":2}}],["`geometry`",{"2":{"130":1,"142":2}}],["`geometrybasics",{"2":{"40":3}}],["`geom`",{"2":{"60":3,"130":1,"147":1}}],["`gi",{"2":{"121":1}}],["`g1`",{"2":{"60":1}}],["`tuple",{"2":{"161":1}}],["`tuple`s",{"2":{"155":1}}],["`tuple`",{"2":{"121":1,"155":1}}],["`time`",{"2":{"142":1}}],["`transform`",{"2":{"142":1}}],["`true`",{"2":{"69":1,"80":1,"83":2,"100":1,"110":1,"120":2,"121":1,"127":2,"142":1}}],["`threaded==true`",{"2":{"130":1}}],["`threaded`",{"2":{"127":1}}],["`tol`",{"2":{"150":2,"151":3,"152":2,"153":3,"154":4}}],["`to",{"2":{"54":1}}],["`target",{"2":{"142":3}}],["`target`",{"2":{"53":1,"130":4,"157":1}}],["`tables",{"2":{"130":1}}],["`taget`",{"2":{"51":1,"55":1}}],["`method",{"2":{"147":1}}],["`method`",{"2":{"40":3,"147":1}}],["`max",{"2":{"146":4,"147":2,"159":1}}],["`makie",{"2":{"121":1}}],["`multipointtrait`",{"2":{"130":1,"150":1}}],["`multipolygontrait`",{"2":{"130":1}}],["`multipolygon`",{"2":{"121":3}}],["`multipolygon",{"2":{"52":3,"54":3,"56":2}}],["`multipoly",{"2":{"52":7,"54":3,"56":3}}],["`minpoints`",{"2":{"121":2}}],["`number`",{"2":{"150":2,"154":3}}],["`namedtuple`",{"2":{"130":1}}],["`nothing`",{"2":{"45":1,"127":1}}],["`next",{"2":{"45":1}}],["`bool`",{"2":{"121":2}}],["`buffer`",{"2":{"41":1}}],["`barycentric",{"2":{"40":3}}],["`radialdistance`",{"2":{"150":1}}],["`ratio`",{"2":{"150":2,"154":3}}],["`reproject`",{"2":{"143":1}}],["`rebuild`",{"2":{"130":1}}],["`r`",{"2":{"40":1}}],["`rᵢ`",{"2":{"40":1}}],["`svector`",{"2":{"160":3}}],["`segmentize`",{"2":{"159":1}}],["`simplifyalg`",{"2":{"150":2}}],["`simplify",{"2":{"150":1}}],["`simplify`",{"2":{"150":2}}],["`source",{"2":{"142":3}}],["`s`",{"2":{"40":1}}],["`sᵢ`",{"2":{"40":2}}],["`s2`",{"2":{"40":1}}],["`s1`",{"2":{"40":1}}],["`hcat`",{"2":{"40":1}}],["`x`",{"2":{"130":1}}],["`xs`",{"2":{"121":1}}],["`x1",{"2":{"40":1}}],["`x1`",{"2":{"40":2}}],["`x2`",{"2":{"40":1}}],["`visvalingamwhyatt`",{"2":{"150":1}}],["`vector",{"2":{"142":1}}],["`vector`",{"2":{"121":1,"130":1}}],["`vᵢ`",{"2":{"40":1}}],["`v`",{"2":{"40":1}}],["`values`",{"2":{"40":1,"121":1}}],["`λs`",{"2":{"40":2}}],["`",{"2":{"40":2,"51":1,"52":2,"53":1,"54":3,"55":1,"56":2,"121":3,"130":1,"135":2,"142":2,"147":1,"150":3,"159":2,"161":1}}],["```jldoctest",{"2":{"50":1,"51":1,"53":1,"54":1,"55":1,"63":1,"66":1,"69":1,"79":1,"83":1,"94":1,"97":1,"100":1,"110":1,"120":1,"150":1}}],["```julia",{"2":{"10":2,"40":1,"80":1,"120":1,"130":1,"157":1,"160":2}}],["```math",{"2":{"40":1,"120":1}}],["```",{"2":{"11":1,"40":3,"50":1,"51":1,"53":1,"55":1,"63":1,"66":1,"69":1,"79":1,"83":1,"94":1,"97":1,"100":1,"110":1,"120":3,"121":11,"130":1,"150":1,"160":2,"161":1}}],["λ₁",{"2":{"40":2}}],["λn",{"2":{"38":1}}],["λ3",{"2":{"38":1}}],["λ2",{"2":{"38":2}}],["λ1",{"2":{"38":2}}],["λs",{"2":{"9":3,"10":4,"40":27}}],["π",{"2":{"34":1,"150":1}}],["δbay",{"2":{"54":3}}],["δbax",{"2":{"54":3}}],["δby",{"2":{"54":5}}],["δbx",{"2":{"54":5}}],["δb",{"2":{"54":2}}],["δay",{"2":{"54":5}}],["δax",{"2":{"54":5}}],["δa",{"2":{"54":2}}],["δintrs",{"2":{"45":2}}],["δy2",{"2":{"120":2}}],["δy1",{"2":{"120":2}}],["δyl",{"2":{"97":4}}],["δy",{"2":{"34":8,"47":3,"91":7}}],["δys",{"2":{"34":1}}],["δx2",{"2":{"120":2}}],["δx1",{"2":{"120":2}}],["δxl",{"2":{"97":4}}],["δx",{"2":{"34":9,"47":3,"91":7}}],["∈",{"2":{"14":1}}],["~",{"2":{"14":3}}],["$ratio",{"2":{"154":1}}],["$rectangle",{"2":{"146":2}}],["$number",{"2":{"154":1}}],["$name",{"2":{"31":2}}],["$min",{"2":{"154":1}}],["$douglas",{"2":{"150":1,"152":1}}],["$simplify",{"2":{"150":1,"151":1,"153":1}}],["$lg",{"2":{"146":1}}],["$lin",{"2":{"146":2}}],["$geom",{"2":{"150":8}}],["$geo",{"2":{"146":1}}],["$apply",{"2":{"130":1,"140":1,"142":1,"150":1}}],["$calc",{"2":{"127":1}}],["$crs",{"2":{"127":1,"141":1}}],["$tol",{"2":{"154":1}}],["$threaded",{"2":{"127":1}}],["$t",{"2":{"63":1,"130":4}}],["$target",{"2":{"52":1,"54":1,"56":1,"130":3}}],["$trait",{"2":{"50":1,"52":2,"54":2,"56":2}}],["$",{"2":{"13":4,"14":1,"40":4,"45":2,"121":3,"135":4,"147":1,"150":12,"159":1}}],["qy",{"2":{"13":2,"14":2}}],["qx",{"2":{"13":2,"14":2}}],["q",{"2":{"13":13,"14":12,"45":4}}],["queue",{"2":{"152":41}}],["questions",{"2":{"54":1}}],["quite",{"2":{"132":1,"170":1}}],["quick",{"2":{"8":1,"10":1,"40":1,"141":1,"149":1}}],["quality",{"2":{"10":1,"150":1}}],["quantity",{"2":{"10":1,"146":1}}],["quot",{"2":{"5":4,"10":10,"20":2,"45":8,"59":2,"60":2,"63":2,"78":4,"91":10,"128":2,"130":8,"144":6,"163":2,"169":2}}],["|=",{"2":{"91":4,"97":1}}],["||",{"2":{"34":2,"45":13,"47":8,"50":1,"53":1,"54":5,"55":1,"63":18,"80":2,"91":8,"97":1,"102":1,"121":7,"152":1,"154":3}}],["|",{"2":{"11":4,"91":1}}],["|>",{"2":{"11":8,"13":2,"130":1,"145":1,"146":1,"150":3,"170":2}}],["↩︎",{"2":{"10":1}}],["ᵢᵢᵢ₊₁ᵢᵢ₊₁ᵢᵢ₊₁tᵢ=det",{"2":{"10":1}}],["⋅",{"2":{"10":1,"40":1}}],["zone",{"2":{"164":1}}],["zoom",{"2":{"14":1}}],["zs",{"2":{"121":5}}],["zip",{"2":{"13":1,"14":1,"163":4,"164":1,"165":1}}],["zeros",{"2":{"40":1,"47":1}}],["zero",{"2":{"8":6,"10":8,"37":11,"44":3,"45":4,"47":11,"54":22,"59":1,"60":3,"120":1,"130":1,"152":4}}],["z",{"2":{"8":1,"9":1,"10":2,"40":3,"63":3,"121":3,"140":1,"155":1,"160":1}}],["0e6",{"2":{"164":6}}],["0example",{"2":{"10":1}}],["097075198097933",{"2":{"165":1}}],["09707519809793252",{"2":{"165":2}}],["091887951911644",{"2":{"165":3}}],["0999933334666654",{"2":{"163":1}}],["09801605542096",{"2":{"163":1}}],["098016055420953",{"2":{"163":3}}],["09297443860091348",{"2":{"163":4}}],["09",{"2":{"39":1}}],["08506974233813636",{"2":{"165":2}}],["08",{"2":{"39":1}}],["062749678615475",{"2":{"165":1}}],["06274967861547665",{"2":{"165":2}}],["06592462566760626",{"2":{"163":1}}],["0650624499034016",{"2":{"163":4}}],["06",{"2":{"39":1}}],["02017324484778",{"2":{"165":1}}],["020173244847778715",{"2":{"165":2}}],["027886421973952302",{"2":{"163":4}}],["02",{"2":{"39":3}}],["04500741774392",{"2":{"165":1}}],["045007417743918",{"2":{"165":2}}],["049999166670833324",{"2":{"163":1}}],["0438052480035",{"2":{"163":1}}],["043805248003498",{"2":{"163":3}}],["04",{"2":{"39":6}}],["07518688541961",{"2":{"165":1}}],["075186885419612",{"2":{"165":2}}],["071",{"2":{"145":2,"146":2}}],["07",{"2":{"39":6,"145":6,"146":6}}],["009176636029576",{"2":{"165":1}}],["0091766360295773",{"2":{"165":2}}],["003135308800957",{"2":{"165":1}}],["0031353088009582475",{"2":{"165":2}}],["0035114210915891397",{"2":{"163":4}}],["006784125578492062",{"2":{"165":2}}],["0020133807972559925",{"2":{"165":2}}],["00839489109211",{"2":{"165":3}}],["008696",{"2":{"7":1,"10":3,"53":1,"54":1,"93":1,"94":1}}],["005465967083412071",{"2":{"163":4}}],["00111595449914",{"2":{"163":1}}],["001115954499138",{"2":{"163":3}}],["0010075412835199304",{"2":{"163":4}}],["001",{"2":{"150":1}}],["00085222666982",{"2":{"165":3}}],["000577332369005",{"2":{"165":1}}],["0005773323690041465",{"2":{"165":2}}],["000510363870095e6",{"2":{"164":2}}],["00025191811248184703",{"2":{"165":2}}],["000215611503127e6",{"2":{"164":2}}],["0007260527263e6",{"2":{"164":2}}],["000342160541625e6",{"2":{"164":2}}],["000124843834609e6",{"2":{"164":2}}],["000063948817746e6",{"2":{"164":2}}],["000026987852369e6",{"2":{"164":2}}],["000008144045314",{"2":{"165":1}}],["000007998400139e6",{"2":{"164":2}}],["000000999950001e6",{"2":{"164":2}}],["00001e6",{"2":{"164":1}}],["0004397316773170068",{"2":{"163":4}}],["000",{"2":{"150":1}}],["00",{"2":{"39":2}}],["053798628882221644",{"2":{"165":2}}],["05877989361332",{"2":{"163":1}}],["058779893613323",{"2":{"163":3}}],["05416726609360478",{"2":{"163":4}}],["05",{"2":{"39":1}}],["052704767595",{"2":{"15":1}}],["037564867762832",{"2":{"165":1}}],["03756486776283019",{"2":{"165":2}}],["031245035570328428",{"2":{"165":2}}],["033518309870985",{"2":{"165":3}}],["03503632062070827",{"2":{"163":4}}],["03",{"2":{"39":4}}],["01458815628695",{"2":{"165":3}}],["016044338630866517",{"2":{"165":2}}],["01592650896568995",{"2":{"163":1}}],["01597247419241532",{"2":{"163":4}}],["01908693278165",{"2":{"163":1}}],["019086932781654",{"2":{"163":3}}],["01098781325325",{"2":{"163":1}}],["010987813253244",{"2":{"163":3}}],["011814947665167774",{"2":{"163":4}}],["01362848005",{"2":{"15":1}}],["01",{"2":{"14":1,"39":1,"145":1,"146":1,"163":1,"164":1,"165":1}}],["0^",{"2":{"13":2,"14":2}}],["0+2",{"2":{"13":2,"14":2}}],["0",{"2":{"7":35,"8":12,"10":190,"11":1,"13":5,"14":8,"15":32,"33":20,"34":3,"36":9,"37":4,"39":155,"40":2,"43":6,"44":6,"45":49,"46":13,"47":5,"49":22,"50":49,"51":42,"53":2,"54":21,"55":46,"56":2,"59":20,"60":2,"62":13,"63":18,"65":16,"68":6,"69":6,"78":6,"79":12,"80":9,"82":15,"91":37,"96":13,"97":9,"99":12,"100":11,"109":16,"120":21,"121":7,"132":24,"138":64,"139":4,"145":16,"146":13,"147":1,"150":11,"152":7,"154":4,"161":2,"163":129,"164":2,"165":46,"169":13}}],[">=",{"2":{"40":6,"80":4,"97":1,"154":1}}],[">",{"2":{"5":1,"10":6,"11":2,"13":1,"15":2,"34":1,"40":1,"45":17,"47":3,"50":5,"51":1,"52":1,"54":2,"55":1,"56":3,"59":1,"63":1,"80":8,"91":10,"97":2,"120":4,"121":12,"130":5,"135":1,"139":3,"147":2,"150":1,"152":12,"154":3,"160":1,"161":1,"170":1}}],["914930257661865",{"2":{"165":1}}],["96875496442967",{"2":{"165":1}}],["961329",{"2":{"7":1,"10":3,"53":1,"54":1,"93":1,"94":1}}],["983955661369134",{"2":{"165":1}}],["9833",{"2":{"15":1}}],["9877550012664",{"2":{"163":1}}],["9840085315131",{"2":{"163":1}}],["98271048511609",{"2":{"163":1}}],["98661575256801",{"2":{"163":1}}],["99321587442151",{"2":{"165":1}}],["99375130197483",{"2":{"163":1}}],["997986619202745",{"2":{"165":1}}],["997750168744936",{"2":{"163":1}}],["997247091122496",{"2":{"163":1}}],["99600053330489",{"2":{"163":1}}],["991002699676024",{"2":{"163":1}}],["990022362600165",{"2":{"163":1}}],["99292997455441",{"2":{"163":1}}],["99533829767195",{"2":{"163":1}}],["99865616402829",{"2":{"163":1}}],["999999967681458e6",{"2":{"164":2}}],["999997707902938e6",{"2":{"164":2}}],["999987539891298e6",{"2":{"164":2}}],["999963474314044e6",{"2":{"164":2}}],["999919535736425e6",{"2":{"164":2}}],["999974634566875",{"2":{"163":1}}],["999849768598615e6",{"2":{"164":2}}],["999748081887518",{"2":{"165":1}}],["999748243174828e6",{"2":{"164":2}}],["999750002083324",{"2":{"163":1}}],["999609061508909e6",{"2":{"164":2}}],["999426363321033e6",{"2":{"164":2}}],["999194331880103e6",{"2":{"164":2}}],["99900003333289",{"2":{"163":1}}],["999565375483215",{"2":{"163":1}}],["9im",{"2":{"91":2,"168":1}}],["97976366505997",{"2":{"163":1}}],["9783069507679",{"2":{"163":1}}],["97",{"2":{"39":1}}],["946201371117777",{"2":{"165":1}}],["94",{"2":{"39":1}}],["92",{"2":{"39":1}}],["95770326033",{"2":{"15":1}}],["95",{"2":{"13":1,"14":1}}],["900",{"2":{"146":1}}],["90063612163",{"2":{"11":2}}],["90",{"2":{"33":9,"39":1}}],["909318372607",{"2":{"11":3}}],["9",{"2":{"5":1,"10":1,"91":2,"120":12,"145":1,"160":1}}],["873633668827033",{"2":{"165":1}}],["8135804051007",{"2":{"163":1}}],["813580405100698",{"2":{"163":3}}],["88",{"2":{"39":1}}],["86641841658641",{"2":{"163":1}}],["866418416586406",{"2":{"163":3}}],["86",{"2":{"39":1}}],["868447876892",{"2":{"15":2}}],["84",{"2":{"39":1}}],["821068835162155",{"2":{"165":1}}],["82",{"2":{"39":1}}],["800",{"2":{"39":1}}],["80000",{"2":{"15":5}}],["80",{"2":{"39":1}}],["80869813739",{"2":{"15":2}}],["856614689791036e",{"2":{"15":2}}],["83572303404496",{"2":{"10":2,"53":1,"54":1}}],["8",{"2":{"5":3,"10":9,"13":1,"14":1,"51":2,"55":4,"91":1,"121":3,"145":1,"160":3,"165":2}}],["+5000000",{"2":{"164":1}}],["+proj=natearth2",{"2":{"164":2}}],["+=",{"2":{"37":2,"40":11,"44":6,"45":17,"47":10,"50":1,"63":1,"80":1,"91":5,"120":1,"139":2,"152":4,"161":3}}],["+",{"2":{"5":1,"10":2,"13":1,"14":1,"34":4,"37":1,"40":20,"44":10,"45":15,"47":7,"50":1,"54":10,"60":3,"63":2,"80":2,"91":6,"120":6,"121":2,"139":3,"147":2,"152":3,"153":2,"154":2,"163":6,"164":1,"165":4}}],["yticklabelsvisible",{"2":{"164":1}}],["york",{"2":{"170":1}}],["yoffset",{"2":{"163":7,"165":2}}],["your",{"0":{"167":1},"2":{"18":1,"41":1,"121":1,"123":1,"143":1,"146":1,"166":1,"167":1,"171":2}}],["you",{"0":{"23":1},"2":{"2":1,"5":1,"8":1,"9":2,"10":10,"11":1,"17":1,"18":5,"23":1,"29":2,"34":1,"37":1,"40":8,"41":1,"44":1,"51":1,"53":1,"55":1,"123":1,"132":1,"138":1,"143":1,"145":1,"146":1,"147":1,"157":1,"160":1,"164":1,"166":2,"167":3,"169":2,"170":3,"171":4}}],["y=y",{"2":{"161":1}}],["yvec",{"2":{"121":4}}],["ybounds",{"2":{"121":4}}],["yhalf",{"2":{"121":3}}],["ylast",{"2":{"60":3}}],["yfirst",{"2":{"60":5}}],["y0",{"2":{"60":5}}],["yw",{"2":{"47":4}}],["yeild",{"2":{"54":1}}],["ye",{"2":{"47":4}}],["yet",{"0":{"122":1},"2":{"31":1,"40":1,"50":1,"52":1,"54":1,"56":1,"63":1,"121":1,"122":1,"135":2,"170":1}}],["y2",{"2":{"44":2,"47":18,"60":7,"80":10,"91":5,"97":4,"121":5,"147":6,"161":2}}],["y1",{"2":{"44":2,"47":22,"60":7,"80":11,"91":6,"97":5,"121":5,"147":7,"161":2}}],["yield",{"2":{"146":1}}],["yind+1",{"2":{"121":1}}],["yind",{"2":{"121":2}}],["yinterior",{"2":{"44":2}}],["yi+yi−1",{"2":{"10":1}}],["ycentroid",{"2":{"44":13}}],["yrange",{"2":{"39":3,"59":3}}],["yautolimits",{"2":{"39":2}}],["yp2",{"2":{"34":4}}],["ys",{"2":{"10":3,"121":30}}],["ymax",{"2":{"10":1,"46":2,"47":48}}],["ymin",{"2":{"10":1,"46":2,"47":49}}],["y",{"2":{"5":2,"8":1,"10":4,"13":9,"14":10,"34":8,"37":2,"39":8,"43":1,"44":10,"45":6,"46":1,"47":8,"52":6,"54":8,"59":2,"60":7,"63":3,"80":21,"91":16,"97":7,"120":10,"123":2,"130":1,"140":4,"142":1,"147":2,"154":1,"155":2,"160":2,"161":7,"163":8,"164":2,"165":2,"168":1}}],["75",{"2":{"59":2,"65":1,"82":1,"109":1}}],["78",{"2":{"39":1}}],["74",{"2":{"39":1}}],["72",{"2":{"39":1}}],["726711609794",{"2":{"15":1}}],["76",{"2":{"39":1}}],["76085",{"2":{"15":1}}],["768946",{"2":{"7":1,"10":3,"53":1,"54":1,"93":1,"94":1}}],["70440582002419",{"2":{"163":1}}],["704405820024185",{"2":{"163":3}}],["704377648755",{"2":{"15":2}}],["700",{"2":{"14":1}}],["700454",{"2":{"10":1,"149":1,"150":1}}],["701141",{"2":{"10":1,"149":1,"150":1}}],["70",{"2":{"10":20,"39":1,"149":20,"150":20,"163":20}}],["738281",{"2":{"7":1,"10":3,"53":1,"54":1,"93":1,"94":1}}],["7",{"2":{"5":5,"10":5,"91":1,"130":1,"145":4,"146":4,"160":4,"165":1}}],["65533525026046",{"2":{"163":1}}],["655335250260467",{"2":{"163":3}}],["659942",{"2":{"10":1,"149":1,"150":1}}],["6area",{"2":{"44":2}}],["66",{"2":{"39":1}}],["668869",{"2":{"10":1,"149":1,"150":1}}],["64744840486518",{"2":{"165":3}}],["64",{"2":{"39":1,"145":2,"146":2}}],["646209",{"2":{"10":1,"149":1,"150":1}}],["629",{"2":{"164":1}}],["62",{"2":{"39":1}}],["624923",{"2":{"10":1,"149":1,"150":1}}],["61366192682",{"2":{"15":1}}],["614624",{"2":{"10":1,"149":1,"150":1}}],["605000000000004",{"2":{"145":2}}],["60",{"2":{"39":1,"145":2}}],["60000",{"2":{"15":3}}],["609817",{"2":{"10":1,"149":1,"150":1}}],["603637",{"2":{"10":2,"149":2,"150":2}}],["68",{"2":{"39":1}}],["682601",{"2":{"10":1,"149":1,"150":1}}],["683975",{"2":{"10":1,"149":1,"150":1}}],["69159119078359",{"2":{"165":3}}],["694274",{"2":{"10":1,"149":1,"150":1}}],["697021",{"2":{"10":1,"149":1,"150":1}}],["639343",{"2":{"10":1,"149":1,"150":1}}],["6",{"2":{"5":12,"7":4,"10":23,"51":3,"55":3,"91":1,"97":4,"130":3,"150":1,"160":9,"165":2}}],["51695367760999",{"2":{"165":1}}],["516953677609987",{"2":{"165":2}}],["51030066635026",{"2":{"163":4}}],["5e6",{"2":{"164":2}}],["55715336218991",{"2":{"165":1}}],["557153362189904",{"2":{"165":2}}],["55",{"2":{"163":3}}],["55494217175954",{"2":{"163":4}}],["57",{"2":{"145":4,"146":4}}],["57725",{"2":{"15":2}}],["5x",{"2":{"130":1}}],["563198",{"2":{"54":1}}],["56",{"2":{"39":1}}],["54",{"2":{"39":1,"163":19}}],["50",{"2":{"39":1,"145":4,"146":4,"163":3}}],["500000",{"2":{"164":1}}],["50000",{"2":{"15":1}}],["500",{"2":{"14":1,"164":1}}],["5d",{"2":{"25":1,"27":1}}],["52",{"2":{"39":1}}],["52521",{"2":{"15":1}}],["52709",{"2":{"15":2}}],["594711",{"2":{"10":1,"149":1,"150":1}}],["590591",{"2":{"10":1,"149":1,"150":1}}],["595397",{"2":{"10":1,"149":1,"150":1}}],["535",{"2":{"145":4}}],["5355",{"2":{"145":2}}],["53333",{"2":{"15":4}}],["53",{"2":{"10":10,"145":2,"161":10}}],["58",{"2":{"39":1}}],["58059",{"2":{"15":2}}],["587158",{"2":{"10":2,"149":2,"150":2}}],["58375366067548",{"2":{"10":2,"53":1,"54":1}}],["584961",{"2":{"7":1,"10":3,"53":1,"54":1,"93":1,"94":1}}],["5",{"2":{"5":29,"7":4,"8":8,"10":84,"13":1,"39":1,"49":5,"50":8,"51":16,"55":18,"59":8,"63":8,"91":1,"97":4,"121":1,"130":2,"145":1,"146":1,"160":27,"163":32,"164":25,"171":1}}],["3585",{"2":{"145":1}}],["35",{"2":{"39":3}}],["354492",{"2":{"7":1,"10":3,"53":1,"54":1,"93":1,"94":1}}],["38042741557976",{"2":{"163":1}}],["380427415579764",{"2":{"163":3}}],["38",{"2":{"39":3}}],["3655999675063154",{"2":{"163":1}}],["36",{"2":{"39":2}}],["360",{"2":{"34":1}}],["36022",{"2":{"15":1}}],["327284472232776",{"2":{"165":3}}],["32610",{"2":{"164":3}}],["32",{"2":{"39":3}}],["37",{"2":{"39":5}}],["3497142366876638",{"2":{"163":1}}],["34",{"2":{"39":3}}],["31571636123306385",{"2":{"163":1}}],["31",{"2":{"39":2}}],["30151010318639",{"2":{"163":4}}],["30527612515520186",{"2":{"163":4}}],["300",{"2":{"59":1}}],["30",{"2":{"14":2,"39":3,"163":2}}],["3376428491230612",{"2":{"163":4}}],["3390",{"2":{"91":1}}],["33333333333",{"2":{"15":1}}],["333333333336",{"2":{"15":3}}],["33",{"2":{"10":20,"149":20,"150":20}}],["3d",{"2":{"8":1,"10":1,"40":2,"63":1,"130":1,"144":1}}],["3",{"2":{"5":13,"7":4,"9":1,"10":29,"14":2,"40":13,"43":6,"45":1,"51":6,"55":5,"62":1,"66":1,"79":1,"83":1,"91":2,"96":1,"110":1,"121":7,"130":3,"138":16,"145":4,"150":3,"152":2,"154":1,"160":11,"164":1,"165":1,"169":1}}],["39945867303846",{"2":{"165":3}}],["3995734698458635",{"2":{"163":1}}],["399918",{"2":{"10":2,"149":2,"150":2}}],["394759",{"2":{"10":1,"149":1,"150":1}}],["392466",{"2":{"10":1,"149":1,"150":1}}],["395332",{"2":{"10":1,"149":1,"150":1}}],["39",{"0":{"30":1},"2":{"0":1,"2":2,"4":1,"8":5,"10":20,"17":2,"18":1,"19":1,"23":1,"29":1,"34":1,"36":1,"37":1,"38":1,"39":3,"40":2,"43":6,"44":3,"45":28,"47":1,"49":1,"50":1,"52":1,"53":4,"54":1,"56":2,"60":4,"63":7,"68":1,"78":2,"85":2,"91":19,"97":1,"99":1,"102":2,"121":3,"123":2,"125":3,"126":1,"130":5,"136":6,"137":1,"145":6,"146":1,"148":1,"150":2,"157":2,"158":3,"159":6,"162":1,"163":6,"164":6,"165":4,"166":4,"167":5,"168":1,"170":1,"171":2}}],["1st",{"2":{"54":6}}],["198232937815632",{"2":{"165":1}}],["19823293781563178",{"2":{"165":2}}],["1999466709331708",{"2":{"163":1}}],["1998",{"2":{"51":1,"53":1,"55":1}}],["19",{"2":{"39":2,"91":2}}],["110m",{"2":{"164":2}}],["110",{"2":{"164":1}}],["11591614996189725",{"2":{"163":1}}],["11966707868197",{"2":{"163":1}}],["119667078681967",{"2":{"163":3}}],["11",{"2":{"15":2,"39":2,"91":1}}],["1145",{"2":{"51":1,"53":1,"55":1}}],["114",{"2":{"0":1}}],["16589608273778408",{"2":{"163":1}}],["165644",{"2":{"120":2}}],["16692537029320365",{"2":{"163":4}}],["166644",{"2":{"120":2}}],["163434",{"2":{"120":2}}],["169356",{"2":{"120":2}}],["164434",{"2":{"120":2}}],["16111",{"2":{"15":1}}],["16",{"2":{"13":1,"14":1,"39":2,"91":2}}],["180",{"2":{"34":1,"120":1}}],["18593721105",{"2":{"15":1}}],["18",{"2":{"13":1,"14":1,"39":3,"91":2}}],["1em",{"2":{"10":2}}],["1px",{"2":{"10":2}}],["13309630561615",{"2":{"165":3}}],["13401805979",{"2":{"15":2}}],["13",{"2":{"10":3,"39":1,"51":1,"55":2,"91":1}}],["10n",{"2":{"164":1}}],["10832215707812454",{"2":{"163":4}}],["10m",{"2":{"150":1}}],["10^9",{"2":{"13":1}}],["1000000",{"2":{"164":1}}],["1000",{"2":{"13":2,"145":2,"164":1,"169":2}}],["100",{"2":{"10":2,"14":3,"121":2}}],["10",{"2":{"10":14,"11":1,"36":1,"39":5,"49":4,"50":10,"51":2,"53":1,"55":2,"62":2,"91":3,"96":2,"146":1,"150":3,"163":1}}],["14182952335953",{"2":{"165":1}}],["14182952335952814",{"2":{"165":2}}],["14404531208901e",{"2":{"165":2}}],["1499775010124783",{"2":{"163":1}}],["1464721641710074",{"2":{"163":4}}],["14",{"2":{"7":1,"10":5,"39":2,"53":2,"54":2,"91":1,"93":1,"94":1,"145":2,"146":2}}],["15488729606723",{"2":{"165":3}}],["15",{"2":{"7":1,"10":4,"39":1,"49":1,"50":1,"53":1,"54":1,"91":1,"93":1,"94":1}}],["17893116483784577",{"2":{"165":2}}],["17289902010158",{"2":{"163":1}}],["172899020101585",{"2":{"163":3}}],["170356",{"2":{"120":2}}],["17",{"2":{"7":1,"10":3,"39":3,"53":1,"54":1,"91":2,"93":1,"94":1}}],["125",{"2":{"10":2,"53":1,"54":1}}],["127",{"2":{"7":1,"10":3,"53":1,"54":1,"93":1,"94":1,"164":1}}],["123",{"2":{"7":1,"10":3,"53":1,"54":1,"93":1,"94":1}}],["12636633117296836",{"2":{"165":2}}],["126",{"2":{"7":1,"10":3,"53":1,"54":1,"93":1,"94":1}}],["12",{"2":{"7":1,"10":3,"39":2,"53":1,"54":1,"91":1,"93":1,"94":1,"170":1}}],["124",{"2":{"7":1,"10":3,"53":1,"54":1,"93":1,"94":1}}],["1",{"2":{"5":8,"7":38,"10":63,"13":1,"14":4,"15":1,"33":4,"34":15,"36":7,"38":2,"39":11,"40":16,"43":4,"44":7,"45":72,"46":9,"47":15,"49":1,"50":10,"52":3,"54":9,"55":4,"56":11,"59":7,"60":6,"63":16,"65":2,"66":6,"68":2,"69":2,"78":2,"79":8,"80":12,"82":2,"83":5,"91":38,"97":6,"99":4,"100":5,"102":1,"109":2,"110":6,"120":16,"121":25,"130":10,"132":12,"133":2,"139":9,"146":1,"147":4,"150":8,"152":15,"153":3,"154":15,"160":6,"161":9,"163":8,"164":44,"165":12,"166":1,"169":8,"170":3}}],["=>",{"2":{"130":2}}],["=float64",{"2":{"44":3,"53":1,"55":1}}],["=false",{"2":{"34":1}}],["=",{"2":{"5":5,"7":17,"8":7,"9":2,"10":62,"11":1,"13":19,"14":33,"15":18,"31":4,"33":4,"34":56,"36":6,"37":25,"39":35,"40":110,"41":3,"43":6,"44":36,"45":324,"46":6,"47":96,"49":7,"50":29,"51":21,"52":30,"53":18,"54":143,"55":21,"56":78,"59":15,"60":52,"62":7,"63":40,"65":7,"66":3,"68":4,"69":23,"70":3,"71":7,"72":14,"73":14,"74":4,"75":2,"76":2,"78":5,"79":3,"80":57,"82":7,"83":18,"84":3,"85":11,"86":17,"87":9,"88":3,"89":2,"90":2,"91":189,"93":3,"94":3,"96":7,"97":40,"99":3,"100":22,"101":3,"102":9,"103":14,"104":10,"105":6,"106":2,"107":2,"109":7,"110":22,"111":3,"112":11,"113":14,"114":14,"115":4,"116":2,"117":2,"120":32,"121":106,"123":1,"127":4,"130":93,"132":2,"133":4,"135":9,"138":3,"139":30,"141":1,"143":2,"145":16,"146":21,"147":18,"148":2,"149":5,"150":60,"151":11,"152":49,"153":7,"154":43,"155":1,"157":6,"158":2,"159":3,"160":2,"161":44,"163":45,"164":19,"165":13,"166":3,"167":4,"169":12,"170":6,"171":2}}],["===",{"2":{"80":8,"120":4}}],["==",{"2":{"2":1,"19":1,"34":4,"37":2,"40":9,"41":2,"44":1,"45":34,"47":30,"52":1,"54":20,"55":2,"56":1,"59":1,"63":16,"91":44,"97":2,"120":3,"121":18,"130":1,"133":1,"135":1,"139":1,"143":1,"146":2,"150":1,"154":3}}],["utm",{"2":{"164":1}}],["utility",{"0":{"161":1},"2":{"40":1,"130":2}}],["utils",{"0":{"154":1},"2":{"31":1}}],["u2",{"2":{"91":4}}],["u1",{"2":{"91":4}}],["update",{"2":{"45":6,"121":10}}],["updated",{"2":{"45":6,"130":3}}],["updates",{"2":{"40":1}}],["up",{"2":{"45":2,"54":1,"91":1,"104":1,"128":1,"138":1,"152":2,"163":2}}],["upper",{"2":{"10":1,"121":1,"169":1}}],["uv",{"2":{"40":1}}],["u>",{"2":{"10":2}}],["u>geometryops",{"2":{"10":2}}],["usage",{"2":{"170":1}}],["usa",{"2":{"150":15,"170":3}}],["us",{"2":{"37":1,"164":1,"170":1}}],["ususally",{"2":{"10":1,"125":1,"130":1}}],["usually",{"2":{"26":2,"167":1}}],["usual",{"2":{"10":1,"133":1,"136":1}}],["usecases",{"2":{"25":1,"27":1}}],["uses",{"2":{"10":1,"91":1,"142":1,"146":1,"150":1,"167":1}}],["users",{"2":{"31":1,"123":1,"137":1}}],["user",{"2":{"10":12,"23":1,"44":1,"51":3,"53":3,"55":3,"151":1,"152":1,"153":1,"168":1}}],["useful",{"2":{"10":10,"40":1,"121":1,"144":1,"147":1,"150":2,"159":1}}],["used",{"2":{"5":1,"9":1,"10":8,"34":1,"37":1,"38":1,"40":1,"44":2,"45":7,"47":1,"50":1,"54":1,"59":1,"60":1,"63":1,"97":1,"121":2,"125":1,"130":3,"131":1,"147":1,"150":1,"152":2,"156":2,"157":1,"164":1,"167":1,"168":2,"169":1}}],["use",{"2":{"5":2,"8":1,"9":1,"10":9,"11":1,"20":1,"23":1,"26":1,"40":1,"45":1,"56":1,"80":2,"97":1,"121":1,"122":1,"127":1,"130":7,"133":1,"140":1,"145":1,"147":1,"150":1,"152":2,"159":3,"163":1,"167":1,"168":2,"171":2}}],["using",{"0":{"164":1},"2":{"5":4,"8":1,"9":3,"10":12,"11":4,"13":4,"14":1,"15":1,"31":7,"33":1,"34":1,"36":2,"37":2,"39":4,"40":7,"41":3,"43":2,"44":1,"45":5,"46":2,"47":1,"49":2,"50":1,"52":3,"54":4,"56":3,"57":1,"59":2,"60":2,"62":2,"63":1,"65":2,"66":1,"68":2,"69":1,"76":1,"78":2,"79":1,"80":1,"82":2,"83":1,"90":1,"91":1,"93":2,"94":1,"96":2,"97":1,"99":2,"100":1,"107":1,"109":2,"110":1,"117":1,"120":1,"121":5,"122":1,"123":2,"128":1,"130":4,"133":1,"136":1,"139":1,"140":1,"141":2,"142":1,"143":3,"145":1,"146":5,"147":1,"150":2,"152":1,"154":1,"155":2,"159":2,"160":4,"161":1,"162":4,"163":1,"165":1,"166":2,"168":1,"169":4,"170":2}}],["unnecessary",{"2":{"121":1}}],["unneeded",{"2":{"10":3,"45":1,"51":1,"53":1,"55":1}}],["until",{"2":{"121":3,"128":1,"152":1,"159":1}}],["uneeded",{"2":{"51":1,"53":1,"55":1}}],["uneccesary",{"2":{"10":3,"151":1,"152":1,"153":1}}],["unprocessed",{"2":{"45":1}}],["unknown",{"2":{"45":4,"47":15}}],["unknown=3",{"2":{"45":1}}],["unmatched",{"2":{"45":9,"47":26}}],["understand",{"2":{"156":1}}],["under",{"2":{"37":2,"167":1}}],["undergrad",{"2":{"2":1}}],["undef",{"2":{"34":2,"45":1,"151":1,"152":1,"154":2,"161":2}}],["unless",{"2":{"22":1,"45":1,"52":2,"54":2,"56":2}}],["unlike",{"2":{"18":1,"156":1}}],["unstable",{"2":{"13":1,"130":1,"158":1}}],["universal",{"2":{"164":1}}],["united",{"2":{"150":1}}],["unify",{"2":{"25":1,"27":1}}],["unique",{"2":{"10":2,"54":3,"136":2,"139":2}}],["unioning",{"2":{"56":1}}],["unionintersectingpolygons",{"2":{"4":1,"10":8,"51":1,"52":2,"53":1,"54":2,"55":1,"56":2,"136":2,"137":2,"138":1,"139":4}}],["unions",{"0":{"56":1},"2":{"18":1,"157":1}}],["union",{"0":{"55":1},"2":{"4":1,"5":2,"7":2,"8":4,"10":22,"11":3,"23":2,"31":1,"34":2,"37":1,"40":1,"44":4,"45":7,"47":1,"53":2,"55":18,"56":30,"60":1,"63":8,"71":2,"72":4,"73":1,"75":2,"76":1,"85":2,"86":6,"89":2,"90":1,"97":4,"102":2,"103":4,"104":1,"106":2,"107":1,"112":2,"113":4,"114":1,"116":2,"117":1,"120":1,"121":5,"123":1,"128":3,"130":6,"136":1,"137":1,"139":10,"147":4,"150":2,"151":3,"152":3,"153":3,"157":4,"161":1}}],["unchanged",{"2":{"5":1,"10":2,"130":1,"150":1}}],["unwrap",{"2":{"4":1,"10":3,"125":1,"130":16}}],["karnataka",{"2":{"170":1}}],["kbn",{"2":{"11":2}}],["k",{"2":{"10":1,"14":6,"40":1,"45":5,"91":5,"163":5,"165":5}}],["kernel",{"2":{"147":4}}],["keepat",{"2":{"55":1,"139":2}}],["keep",{"2":{"45":3,"121":1,"139":14,"145":1,"169":1}}],["keeping",{"2":{"10":1,"130":1,"140":1}}],["keys",{"2":{"121":4}}],["key",{"2":{"10":1,"121":4,"159":5}}],["keyword",{"2":{"10":8,"23":1,"51":1,"53":1,"55":1,"127":6,"130":1,"141":2,"146":2,"159":4,"164":1,"165":1}}],["keywords",{"2":{"5":2,"8":1,"10":10,"91":2,"121":1,"127":1,"130":1,"140":2,"141":1,"142":3,"150":8,"151":1,"152":1,"153":1,"154":1,"155":2}}],["known",{"2":{"47":2}}],["know",{"2":{"10":3,"34":2,"45":1,"47":1,"51":1,"53":1,"54":2,"55":1,"56":1,"130":1,"169":1}}],["kwargs",{"2":{"41":3,"47":1,"50":1,"51":3,"52":3,"53":4,"54":5,"55":3,"56":5,"135":2,"143":1,"146":1}}],["kwdef",{"2":{"31":1,"45":1,"146":1,"151":1,"152":1,"153":1}}],["kw",{"2":{"5":1,"10":11,"91":10,"121":20,"130":21,"140":3,"150":15,"153":1,"155":3,"159":6,"160":3}}],["kinds",{"2":{"23":1}}],["kind",{"2":{"2":1,"121":1}}],["json",{"2":{"167":3}}],["jstep",{"2":{"63":3}}],["jstart",{"2":{"63":7}}],["joined",{"2":{"169":4}}],["joins",{"0":{"168":1},"1":{"169":1,"170":1,"171":1},"2":{"168":3}}],["joinpath",{"2":{"150":2}}],["join",{"2":{"130":2,"168":4,"169":5,"171":1}}],["joining",{"2":{"10":2,"150":1,"168":1}}],["jpn",{"2":{"170":2}}],["jp",{"2":{"63":2}}],["jhole",{"2":{"63":2}}],["jh",{"2":{"56":5}}],["j+1",{"2":{"45":1,"121":1,"154":1}}],["j",{"2":{"45":24,"63":8,"80":9,"91":12,"120":2,"121":8,"154":2}}],["jet",{"2":{"39":1}}],["just",{"2":{"8":1,"10":1,"44":1,"45":2,"54":4,"56":1,"60":2,"121":1,"128":1,"130":3,"146":1,"168":1}}],["julialand",{"2":{"164":2}}],["julialines",{"2":{"36":1}}],["julialinearsegments",{"2":{"10":1}}],["juliahole",{"2":{"163":1}}],["juliaplot",{"2":{"164":2}}],["juliap1",{"2":{"163":1}}],["juliapoly",{"2":{"164":1}}],["juliapolygon3",{"2":{"164":1}}],["juliapolygon1",{"2":{"163":1}}],["juliapolygonize",{"2":{"10":1}}],["juliapolygon",{"2":{"10":1}}],["juliapoints",{"2":{"169":1}}],["juliapoint",{"2":{"163":1}}],["juliaxoffset",{"2":{"163":3,"165":1}}],["juliax",{"2":{"163":2}}],["juliaxrange",{"2":{"59":1}}],["julia$apply",{"2":{"155":1}}],["julia$threaded",{"2":{"141":1}}],["julia6",{"2":{"150":1}}],["julia```jldoctest",{"2":{"161":1}}],["julia```julia",{"2":{"121":1}}],["julia```",{"2":{"80":1,"157":1}}],["julia1",{"2":{"51":1,"53":1,"54":1,"55":1}}],["julia2",{"2":{"50":1}}],["juliabase",{"2":{"40":1,"60":4,"130":1,"159":1}}],["juliabarycentric",{"2":{"9":3,"10":3}}],["juliafig",{"2":{"163":1,"164":1}}],["juliafalse",{"2":{"120":1}}],["juliafunction",{"2":{"34":2,"40":3,"41":2,"44":1,"45":11,"47":2,"50":1,"52":1,"54":2,"56":1,"60":8,"91":6,"97":2,"102":1,"122":1,"130":5,"143":1,"146":1,"154":2}}],["juliafor",{"2":{"31":1,"130":2}}],["juliaflexijoins",{"2":{"171":1}}],["juliaflipped",{"2":{"123":1}}],["juliaflip",{"2":{"10":1}}],["juliaflatten",{"2":{"10":1,"125":1}}],["juliamy",{"2":{"171":1}}],["juliamultipoly",{"2":{"150":1}}],["juliamodule",{"2":{"31":1}}],["juliameanvalue",{"2":{"10":1}}],["juliagi",{"2":{"11":2}}],["juliago",{"2":{"11":1,"33":1,"36":1,"46":1,"62":1,"65":1,"68":1,"78":1,"82":1,"93":1,"96":1,"99":1,"109":1,"168":1}}],["juliageopoly1",{"2":{"165":1}}],["juliageointerface",{"2":{"161":1}}],["juliageo",{"2":{"10":2}}],["juliageodesicsegments",{"2":{"10":1}}],["juliageos",{"2":{"10":1}}],["juliaweighted",{"2":{"10":1}}],["juliawithin",{"2":{"7":1,"10":1}}],["juliaunwrap",{"2":{"10":1,"130":6}}],["juliaunion",{"2":{"10":1}}],["juliaunionintersectingpolygons",{"2":{"10":1,"136":1}}],["juliausing",{"2":{"10":1,"13":1,"14":1,"39":1,"145":2,"146":1,"149":1,"150":1,"166":1}}],["juliascatter",{"2":{"169":1}}],["juliasource",{"2":{"164":2}}],["juliasimplify",{"2":{"10":1,"150":3}}],["juliasigned",{"2":{"8":2,"10":2}}],["juliasegmentize",{"2":{"10":1}}],["julias1",{"2":{"10":1}}],["juliavisvalingamwhyatt",{"2":{"10":1}}],["juliaring3",{"2":{"164":1}}],["juliaring1",{"2":{"163":1}}],["juliar",{"2":{"163":2,"164":1,"165":1}}],["juliareconstruct",{"2":{"10":1,"125":1}}],["juliarebuild",{"2":{"10":1,"125":1}}],["juliareproject",{"2":{"5":1}}],["juliaradialdistance",{"2":{"10":1}}],["juliadf",{"2":{"166":1}}],["juliadestination",{"2":{"164":1}}],["juliadouglaspeucker",{"2":{"10":1}}],["juliadifference",{"2":{"10":1}}],["juliadiffintersectingpolygons",{"2":{"10":1,"136":1}}],["juliadistance",{"2":{"8":1,"10":1}}],["juliadisjoint",{"2":{"7":1,"10":1}}],["juliaexport",{"2":{"32":1,"35":1,"38":1,"42":1,"48":1,"51":1,"53":1,"55":1,"58":1,"61":1,"64":1,"67":1,"77":1,"81":1,"92":1,"95":1,"98":1,"108":1,"118":1,"121":1,"123":1,"131":1,"134":1,"137":1,"142":1,"144":1,"150":1,"156":1}}],["juliaend",{"2":{"60":1}}],["juliaenforce",{"2":{"10":1}}],["juliaenum",{"2":{"10":2}}],["juliaembed",{"2":{"8":1,"10":1}}],["juliaequals",{"2":{"8":15,"10":15,"45":1}}],["juliaaccuratearithmetic",{"2":{"11":2}}],["juliaabstract",{"2":{"10":3,"135":1,"136":1,"146":1,"158":1}}],["juliaangles",{"2":{"8":1,"10":1}}],["juliaarea",{"2":{"8":1,"10":1}}],["juliaapplyreduce",{"2":{"5":1,"10":1}}],["juliaapply",{"2":{"5":1,"10":1,"18":1}}],["juliacent",{"2":{"43":1}}],["juliacentroid",{"2":{"8":1,"10":3}}],["juliacut",{"2":{"10":1}}],["juliaclosedring",{"2":{"10":1,"136":1}}],["juliaconst",{"2":{"34":1,"37":1,"40":1,"45":1,"47":2,"60":1,"69":1,"83":1,"100":1,"110":1,"127":1}}],["juliacontains",{"2":{"7":1,"10":1}}],["juliacoverage",{"2":{"10":1}}],["juliacovers",{"2":{"7":1,"10":1}}],["juliacoveredby",{"2":{"7":1,"10":1}}],["juliatrue",{"2":{"63":1,"66":1,"69":1,"79":1,"83":1,"94":1,"97":1,"100":1,"110":1,"120":1}}],["juliatraittarget",{"2":{"10":2,"157":1}}],["juliatransform",{"2":{"5":1,"10":1}}],["juliatuples",{"2":{"10":1}}],["juliat",{"2":{"10":1}}],["juliatouches",{"2":{"7":1,"10":1}}],["juliaoverlaps",{"2":{"7":9,"10":9}}],["juliainnerjoin",{"2":{"170":1}}],["juliaintersection",{"2":{"10":2}}],["juliaintersects",{"2":{"7":1}}],["juliaisconcave",{"2":{"10":1}}],["juliaisclockwise",{"2":{"10":1}}],["juliaimport",{"2":{"5":1,"7":9,"8":1,"10":18,"11":1,"33":1,"36":1,"43":1,"46":1,"49":1,"59":1,"62":1,"65":1,"68":1,"78":1,"82":1,"93":1,"96":1,"99":1,"109":1,"132":2,"138":2,"145":1,"167":4,"169":1,"170":1}}],["julia>",{"2":{"5":5,"10":7,"120":3,"160":7}}],["juliajulia>",{"2":{"5":2,"10":3}}],["julia",{"2":{"2":1,"7":1,"10":4,"15":1,"25":1,"27":1,"31":1,"34":4,"37":10,"40":8,"44":19,"45":60,"47":18,"50":10,"51":6,"52":1,"53":5,"54":29,"55":6,"56":4,"59":1,"60":4,"63":15,"66":1,"70":1,"71":5,"72":1,"73":1,"74":2,"75":1,"76":1,"79":1,"80":3,"84":1,"85":3,"86":1,"87":1,"88":1,"89":1,"90":1,"91":50,"94":1,"97":7,"101":1,"102":3,"103":1,"104":1,"105":1,"106":1,"107":1,"111":1,"112":3,"113":1,"114":1,"115":2,"116":1,"117":1,"120":9,"121":40,"122":2,"130":64,"133":5,"135":1,"139":3,"140":1,"141":1,"142":1,"146":1,"147":2,"150":1,"151":2,"152":15,"153":3,"155":1,"156":1,"157":1,"159":4,"160":1,"161":1,"162":2,"164":2,"167":2,"168":1,"169":1}}],["jl`",{"2":{"142":1,"159":1}}],["jldoctest",{"2":{"10":1}}],["jl",{"0":{"25":1,"31":1},"2":{"3":2,"5":10,"8":1,"10":13,"11":1,"22":2,"25":2,"27":2,"31":41,"34":1,"37":1,"40":1,"41":3,"44":1,"45":1,"47":1,"50":1,"52":1,"54":1,"56":1,"57":1,"60":1,"63":1,"66":1,"76":1,"79":1,"80":1,"90":1,"91":1,"94":1,"97":1,"107":1,"117":1,"120":2,"121":1,"122":1,"125":1,"130":3,"133":1,"136":1,"139":1,"140":1,"141":2,"142":4,"143":3,"144":1,"146":3,"147":2,"150":2,"154":1,"155":2,"158":1,"159":2,"160":6,"161":1,"164":1,"168":1}}],["nselected",{"2":{"154":3}}],["nmax",{"2":{"154":2}}],["nice",{"2":{"152":1}}],["nvkelso",{"2":{"150":1}}],["null",{"2":{"146":1}}],["numeric",{"2":{"11":1}}],["number=6",{"2":{"10":1,"149":1,"150":1}}],["number",{"2":{"10":11,"40":1,"45":2,"50":1,"59":1,"63":2,"91":2,"144":1,"145":1,"147":1,"150":2,"151":4,"152":7,"153":4,"154":12}}],["numbers",{"2":{"0":1,"10":1,"38":2,"40":1,"146":1}}],["n+1",{"2":{"132":1}}],["nfeature",{"2":{"130":2}}],["nkeys",{"2":{"121":8}}],["nc",{"2":{"91":13}}],["ncoord",{"2":{"63":2}}],["nl",{"2":{"91":11}}],["nhole",{"2":{"45":2,"51":2,"53":2,"55":2,"56":1,"63":2}}],["nbpts",{"2":{"45":2}}],["nbsp",{"2":{"5":4,"7":9,"8":8,"9":3,"10":87,"125":3,"135":1,"136":4}}],["ngeom",{"2":{"44":1,"130":3,"161":1}}],["nt",{"2":{"159":2}}],["ntasks",{"2":{"130":6}}],["nthreads",{"2":{"130":3}}],["nthe",{"2":{"41":1,"143":1,"146":1}}],["ntuple",{"2":{"40":3,"147":1}}],["n2",{"2":{"40":8,"63":10}}],["n1",{"2":{"40":8,"63":9}}],["np2",{"2":{"80":4}}],["npolygon",{"2":{"52":1,"63":3,"139":2}}],["npoints",{"2":{"34":6,"45":5,"91":3,"146":6,"152":7}}],["npoint",{"2":{"10":1,"34":2,"36":1,"37":1,"47":2,"60":1,"63":6,"80":6,"91":6,"102":1,"120":2,"133":1,"146":3,"147":1,"150":14,"154":1,"161":13}}],["npts",{"2":{"45":6,"152":3}}],["np",{"2":{"37":2,"60":5}}],["naive",{"2":{"57":1}}],["napts",{"2":{"45":3}}],["navigate",{"0":{"26":1}}],["natearth2",{"2":{"164":1}}],["natural",{"2":{"150":2,"164":2,"168":1}}],["naturalearth",{"2":{"11":2,"164":1}}],["nature",{"2":{"121":1}}],["native",{"2":{"10":1,"122":1,"159":4,"167":1}}],["named",{"2":{"130":1}}],["namedtuple",{"2":{"22":2,"130":2,"159":2}}],["name",{"2":{"10":1,"31":2,"150":1,"159":1,"166":1,"167":2,"170":1}}],["names",{"2":{"10":1,"31":3,"130":6,"159":1}}],["nan",{"2":{"2":1}}],["noel0",{"2":{"164":1}}],["nodestatus",{"2":{"121":6}}],["nodes",{"2":{"45":1,"121":4}}],["node",{"2":{"45":26,"121":17}}],["north",{"2":{"47":12}}],["nor",{"2":{"41":1,"143":1,"146":1}}],["normalized",{"2":{"40":1}}],["normalize",{"2":{"40":1}}],["norm",{"2":{"10":1,"40":22}}],["now",{"2":{"10":1,"13":1,"25":1,"27":1,"36":1,"39":2,"40":4,"41":1,"45":1,"50":1,"56":1,"60":1,"120":1,"121":2,"138":1,"144":1,"145":3,"146":1,"150":1,"163":5,"164":6,"165":2,"166":1,"167":3,"169":2}}],["no",{"2":{"10":6,"34":1,"40":2,"45":4,"51":1,"52":1,"53":1,"54":14,"55":1,"63":2,"69":3,"83":3,"91":2,"100":2,"102":1,"104":1,"105":2,"110":2,"112":1,"113":3,"114":3,"115":1,"121":2,"122":1,"123":1,"130":3,"144":1,"146":2,"147":1,"150":1,"159":1,"167":1}}],["nonzero",{"2":{"147":1}}],["none",{"2":{"10":4,"45":1,"50":1,"51":1,"53":1,"55":1,"56":1,"80":4,"82":1}}],["nondimensional",{"2":{"10":1,"146":1}}],["nonintersecting",{"2":{"10":1,"23":1,"136":1,"139":1}}],["non",{"2":{"7":2,"10":2,"22":1,"38":2,"45":15,"51":2,"52":1,"53":1,"54":4,"55":1,"56":2,"59":1,"97":2,"104":1,"128":1,"158":1}}],["note",{"2":{"8":4,"10":10,"19":1,"29":1,"34":1,"37":2,"40":1,"43":2,"44":2,"45":3,"47":1,"50":2,"52":3,"54":5,"56":3,"60":1,"63":5,"91":1,"96":1,"97":1,"142":1,"147":1,"151":1,"152":2,"153":1,"158":1,"164":2,"165":1}}],["not",{"0":{"122":1},"2":{"5":2,"7":8,"8":1,"10":18,"18":1,"19":1,"22":1,"24":1,"31":1,"34":4,"37":1,"40":4,"41":1,"43":1,"45":18,"50":1,"53":1,"54":7,"56":3,"62":2,"63":4,"65":2,"66":1,"68":2,"69":2,"78":1,"79":2,"83":3,"85":5,"86":3,"87":2,"88":2,"91":5,"96":1,"97":2,"100":1,"109":2,"110":2,"112":1,"120":4,"121":2,"122":1,"128":1,"129":1,"130":11,"132":2,"135":2,"138":3,"140":1,"142":1,"143":1,"144":1,"146":2,"147":1,"156":1,"157":1,"158":1,"159":2,"164":1,"165":1,"168":1}}],["nothing`",{"2":{"52":2,"54":2,"56":2}}],["nothing",{"2":{"5":34,"8":1,"10":42,"15":3,"45":4,"50":1,"52":2,"53":1,"54":2,"56":2,"63":1,"91":1,"120":9,"121":3,"130":8,"132":24,"135":1,"138":60,"143":1,"147":1,"150":2,"151":6,"152":6,"153":6,"154":1,"160":32,"161":7,"163":252,"164":16,"165":20}}],["ne",{"2":{"150":1,"164":2}}],["net",{"2":{"135":2}}],["ness",{"2":{"130":1}}],["nesting",{"2":{"128":2}}],["nestedloopfast",{"2":{"171":1}}],["nested",{"2":{"5":2,"8":1,"10":5,"18":1,"34":1,"128":2,"130":4,"150":1,"155":1}}],["never",{"2":{"128":1,"151":1}}],["neumann",{"2":{"121":1}}],["neither",{"2":{"56":1}}],["neightbor",{"2":{"45":1}}],["neighborhood",{"2":{"121":2}}],["neighbor",{"2":{"45":26}}],["neighboring",{"2":{"10":6,"45":1,"150":1,"151":1,"152":1,"153":2}}],["nearly",{"2":{"167":1}}],["nearest",{"2":{"45":1,"54":2}}],["neatly",{"2":{"17":1}}],["nedge",{"2":{"45":2,"161":13}}],["nextnode",{"2":{"121":27}}],["nextnodes",{"2":{"121":6}}],["next",{"2":{"44":1,"45":81,"47":3,"50":4,"91":14,"121":3,"139":13,"152":5}}],["necessarily",{"2":{"10":1,"120":1,"140":1}}],["necessary",{"2":{"10":1,"128":1,"150":1}}],["newfeature",{"2":{"130":2}}],["newnodes",{"2":{"121":2}}],["new",{"2":{"10":1,"41":1,"45":58,"47":9,"51":3,"52":1,"56":16,"91":2,"121":4,"129":1,"130":18,"135":2,"136":1,"137":1,"139":19,"147":8,"151":1,"152":2,"153":1,"165":1,"166":1,"170":1}}],["negative",{"2":{"8":3,"10":3,"36":2,"37":1,"38":2,"59":2,"60":3}}],["needs",{"2":{"44":1}}],["needing",{"2":{"8":1,"10":1,"17":1,"141":1}}],["need",{"2":{"5":1,"7":1,"8":2,"9":1,"10":5,"40":2,"43":1,"45":2,"52":1,"63":4,"78":1,"79":1,"91":1,"121":2,"123":1,"130":1,"141":1,"154":1,"160":1,"164":1,"165":1,"171":2}}],["needed",{"2":{"5":2,"10":4,"34":1,"40":1,"45":4,"47":1,"51":1,"53":1,"55":1,"60":2,"91":5,"121":1,"130":2,"135":1,"142":3,"165":1}}],["n",{"2":{"2":1,"10":1,"38":2,"40":36,"41":2,"45":51,"50":10,"55":4,"56":4,"91":11,"102":2,"120":6,"121":5,"132":1,"139":25,"143":2,"146":2,"147":3,"150":2,"154":7,"161":32}}],["4983491639274692e6",{"2":{"164":2}}],["4986507085647392e6",{"2":{"164":2}}],["497205585568957e6",{"2":{"164":2}}],["4976022389592e6",{"2":{"164":2}}],["4957639801366436e6",{"2":{"164":2}}],["4940253560034204e6",{"2":{"164":2}}],["4946113281484335e6",{"2":{"164":2}}],["491990928929295e6",{"2":{"164":2}}],["4904357734399722e6",{"2":{"164":2}}],["4926709788709967e6",{"2":{"164":2}}],["4962554647802354e6",{"2":{"164":2}}],["499984780817334e6",{"2":{"164":2}}],["4997392479570867e6",{"2":{"164":2}}],["4991939151049731e6",{"2":{"164":2}}],["4994001399837343e6",{"2":{"164":2}}],["4998500087497458e6",{"2":{"164":2}}],["49",{"2":{"121":1}}],["43541888381864",{"2":{"165":3}}],["4326",{"2":{"164":2,"165":3}}],["43787",{"2":{"15":1}}],["439295815226",{"2":{"15":1}}],["434306",{"2":{"10":1,"149":1,"150":1}}],["4896621210021754e6",{"2":{"164":2}}],["489271",{"2":{"10":4,"161":4}}],["4870405593989636e6",{"2":{"164":2}}],["4879072738504685e6",{"2":{"164":2}}],["484003",{"2":{"120":4}}],["482551",{"2":{"120":4}}],["48268",{"2":{"15":1}}],["48",{"2":{"39":1}}],["48001",{"2":{"15":1}}],["45",{"2":{"39":2,"120":12,"163":2}}],["450",{"2":{"13":1}}],["458369",{"2":{"10":2,"149":2,"150":2}}],["42004014766201",{"2":{"163":1}}],["420040147662014",{"2":{"163":3}}],["4219350464667047e",{"2":{"163":4}}],["42",{"2":{"13":1,"14":1,"39":3}}],["426283",{"2":{"10":1,"149":1,"150":1}}],["400",{"2":{"39":3}}],["40000",{"2":{"15":1}}],["40",{"2":{"14":1,"39":3}}],["406224",{"2":{"10":1,"149":1,"150":1}}],["404504",{"2":{"10":1,"149":1,"150":1}}],["41544701408748197",{"2":{"163":1}}],["41",{"2":{"39":1,"165":20}}],["41878",{"2":{"15":1}}],["414248",{"2":{"10":1,"149":1,"150":1}}],["419406",{"2":{"10":1,"149":1,"150":1}}],["4493927459900552",{"2":{"163":1}}],["44121252392",{"2":{"15":1}}],["44",{"2":{"14":1,"39":2}}],["442901",{"2":{"10":1,"149":1,"150":1}}],["446339",{"2":{"10":1,"149":1,"150":1}}],["477985",{"2":{"120":4}}],["47",{"2":{"39":3}}],["473835",{"2":{"10":1,"149":1,"150":1}}],["472117",{"2":{"10":2,"149":2,"150":2}}],["46525251631344455",{"2":{"163":1}}],["465816",{"2":{"10":1,"149":1,"150":1}}],["46",{"2":{"39":3}}],["468107",{"2":{"10":1,"149":1,"150":1}}],["464547",{"2":{"10":6,"161":6}}],["4",{"2":{"2":2,"5":11,"7":4,"10":15,"13":2,"14":1,"33":1,"47":1,"66":1,"79":1,"83":1,"91":2,"110":1,"120":1,"130":3,"145":1,"152":1,"160":8,"164":20,"167":2}}],["gdal",{"2":{"167":1}}],["gml",{"2":{"167":1}}],["gpkg",{"2":{"167":3}}],["gadm",{"2":{"170":4}}],["ga",{"2":{"164":3}}],["gaps",{"2":{"121":1}}],["global",{"2":{"164":1}}],["gft",{"2":{"162":1,"164":2}}],["gc",{"2":{"135":6}}],["g",{"2":{"34":3,"37":3,"41":1,"44":3,"47":3,"60":6,"128":1,"130":6,"150":2,"161":2,"167":1}}],["gb",{"2":{"31":1,"130":10}}],["guarantee",{"2":{"19":1,"30":1}}],["guaranteed",{"2":{"5":1,"10":1,"34":1,"130":1}}],["grand",{"2":{"170":1}}],["grained",{"2":{"145":1}}],["graphics",{"2":{"10":1,"40":1}}],["great",{"2":{"163":1,"165":1,"167":1}}],["greater",{"2":{"10":1,"120":1,"147":1}}],["greiner",{"0":{"52":1,"54":1,"56":1},"2":{"45":3,"50":2,"51":1,"53":1,"55":1}}],["green",{"2":{"14":1,"164":1}}],["grouped",{"2":{"163":1}}],["groups",{"2":{"10":1,"121":1}}],["grouping",{"2":{"5":1,"10":1,"130":2}}],["grid",{"2":{"10":1,"39":1,"47":4}}],["g2",{"2":{"7":5,"10":5,"66":4,"69":12,"70":6,"71":9,"72":6,"73":6,"74":3,"75":4,"76":2,"79":3,"80":21,"83":10,"84":6,"85":10,"86":8,"87":4,"88":2,"89":4,"90":2,"100":10,"101":6,"102":10,"103":6,"104":5,"105":4,"106":4,"107":2,"110":10,"111":6,"112":9,"113":6,"114":6,"115":3,"116":4,"117":2}}],["g1",{"2":{"7":5,"8":1,"10":6,"66":4,"69":12,"70":6,"71":9,"72":6,"73":6,"74":3,"75":2,"76":4,"79":3,"80":21,"83":9,"84":6,"85":10,"86":8,"87":4,"88":2,"89":2,"90":4,"100":10,"101":6,"102":9,"103":6,"104":5,"105":4,"106":2,"107":4,"110":10,"111":6,"112":9,"113":6,"114":6,"115":3,"116":2,"117":4}}],["got",{"2":{"154":3}}],["goes",{"2":{"10":2,"120":2}}],["good",{"2":{"10":1,"40":1,"159":2,"165":1}}],["going",{"2":{"8":4,"10":5,"47":2,"63":5,"120":1,"121":1,"162":1}}],["go",{"2":{"5":5,"7":17,"8":2,"10":43,"11":9,"13":1,"14":1,"15":6,"18":1,"31":2,"33":1,"36":1,"40":1,"43":2,"46":1,"49":2,"50":2,"51":2,"53":2,"54":2,"55":2,"59":6,"62":1,"63":2,"65":2,"66":2,"68":1,"69":2,"78":2,"79":2,"80":1,"82":1,"83":2,"93":1,"94":2,"96":1,"97":2,"99":1,"100":2,"109":2,"110":2,"120":6,"121":2,"123":1,"125":1,"130":3,"132":3,"138":3,"145":7,"146":8,"149":2,"150":49,"159":1,"160":3,"161":2,"162":1,"163":3,"165":1,"167":1,"168":9,"169":2,"170":5,"171":1}}],["gif",{"2":{"152":1}}],["githack",{"2":{"150":1}}],["github",{"2":{"10":2}}],["gives",{"2":{"170":1}}],["give",{"2":{"91":1,"167":1}}],["given",{"2":{"8":7,"10":21,"18":2,"29":1,"33":1,"34":1,"37":2,"44":3,"45":8,"47":3,"50":5,"51":1,"52":2,"53":1,"54":2,"55":1,"56":2,"60":8,"63":4,"65":1,"66":1,"69":1,"78":1,"79":1,"83":1,"91":7,"93":1,"94":1,"100":1,"102":1,"110":1,"123":1,"135":4,"136":1,"138":1,"144":2,"146":2,"147":2,"153":1}}],["gis",{"2":{"9":1,"10":1,"25":1,"27":1,"40":1}}],["gi",{"2":{"5":13,"7":42,"8":31,"10":124,"11":8,"13":15,"14":15,"15":8,"18":2,"31":1,"33":3,"34":30,"36":5,"37":21,"39":1,"43":5,"44":38,"45":34,"46":5,"47":17,"49":6,"50":13,"51":19,"52":16,"53":25,"54":24,"55":17,"56":36,"59":8,"60":42,"62":7,"63":99,"65":7,"66":3,"68":3,"69":4,"70":6,"71":12,"72":10,"73":7,"74":4,"75":8,"76":6,"78":3,"79":3,"80":21,"82":7,"83":2,"84":3,"85":12,"86":14,"87":4,"88":2,"89":8,"90":6,"91":59,"93":5,"94":3,"96":7,"97":51,"99":5,"100":3,"101":6,"102":15,"103":10,"104":7,"105":4,"106":8,"107":6,"109":7,"110":2,"111":6,"112":12,"113":10,"114":7,"115":4,"116":8,"117":6,"120":32,"121":15,"123":4,"125":2,"130":116,"132":2,"133":10,"135":9,"138":3,"139":8,"140":5,"141":1,"145":6,"146":6,"147":12,"149":2,"150":34,"154":4,"155":5,"157":9,"160":9,"161":58,"162":1,"163":21,"164":2,"165":2,"169":5,"170":2}}],["gtrait",{"2":{"60":2}}],["gt",{"2":{"2":2,"3":1,"5":1,"10":2,"11":5,"45":3,"120":3}}],["generic",{"2":{"22":1}}],["generation",{"2":{"150":2}}],["generated",{"2":{"31":1,"34":1,"37":1,"40":1,"41":1,"44":1,"45":1,"47":1,"50":1,"52":1,"54":1,"56":1,"57":1,"60":1,"63":1,"66":1,"76":1,"79":1,"80":1,"90":1,"91":1,"94":1,"97":1,"107":1,"117":1,"120":1,"121":1,"122":1,"130":1,"133":1,"136":1,"139":1,"140":1,"141":1,"143":1,"147":1,"150":1,"154":1,"155":1,"159":1,"160":1,"161":1,"169":1}}],["generate",{"2":{"0":1,"13":2,"150":1,"169":2}}],["generalization",{"2":{"38":1}}],["generalized",{"2":{"10":1,"38":3,"40":1}}],["generalise",{"2":{"10":4,"150":1}}],["generally",{"2":{"10":2,"159":3}}],["general",{"0":{"6":1,"8":1},"1":{"7":1,"8":1},"2":{"18":1,"20":1,"25":1,"27":1,"123":1,"143":1}}],["getfeature",{"2":{"130":5,"161":5}}],["getcolumn",{"2":{"130":4}}],["getgeom",{"2":{"75":1,"76":1,"89":1,"90":1,"97":2,"106":1,"107":1,"116":1,"117":1,"130":8,"150":3,"161":6}}],["getring",{"2":{"45":1}}],["getindex",{"2":{"40":2}}],["gethole",{"2":{"34":1,"37":1,"44":1,"45":4,"47":1,"50":1,"51":2,"53":2,"56":6,"60":1,"63":2,"91":5,"133":1,"163":1}}],["getexterior",{"2":{"34":1,"37":1,"40":1,"44":1,"45":3,"47":1,"50":1,"51":2,"53":2,"55":3,"56":6,"60":1,"63":2,"91":5,"120":1,"121":1,"133":1,"163":1}}],["getpolygon",{"2":{"52":3,"54":2,"56":2,"63":3}}],["getpoint",{"2":{"33":1,"34":5,"36":2,"37":1,"40":1,"43":1,"44":6,"45":3,"46":2,"47":3,"49":3,"59":1,"60":6,"62":4,"63":13,"65":4,"68":1,"78":1,"80":7,"82":4,"91":28,"93":2,"96":4,"97":2,"99":2,"102":2,"109":4,"120":5,"133":3,"145":4,"147":2,"154":1,"161":3,"163":2}}],["getproperty",{"2":{"13":2,"14":1}}],["get",{"2":{"10":1,"13":1,"36":1,"41":1,"45":9,"51":1,"52":1,"53":1,"54":2,"55":2,"121":4,"130":4,"143":1,"146":3,"150":1,"151":1,"153":1,"154":2,"159":5,"161":1,"163":2,"170":2}}],["geoparquet",{"2":{"167":4}}],["geopoly1",{"2":{"165":1,"166":1}}],["geopoly2",{"2":{"165":1,"166":1}}],["geoaxis",{"2":{"164":4}}],["geographic",{"2":{"164":1,"167":1}}],["geographiclib",{"2":{"10":1,"146":1}}],["geointeface",{"2":{"128":1}}],["geointerace",{"2":{"22":1}}],["geointerfacemakie",{"2":{"149":1,"169":1,"170":1}}],["geointerface",{"0":{"30":1},"2":{"5":20,"7":9,"8":2,"10":41,"11":1,"13":1,"14":1,"15":1,"22":3,"25":1,"27":1,"30":1,"31":7,"33":1,"34":1,"36":1,"37":1,"40":23,"43":1,"44":1,"45":1,"46":1,"47":1,"49":1,"50":1,"51":1,"53":1,"54":1,"55":1,"59":1,"60":11,"62":1,"63":2,"65":1,"66":2,"68":1,"69":2,"78":1,"79":2,"80":1,"82":1,"83":3,"93":1,"94":2,"96":1,"97":2,"99":1,"100":2,"109":1,"110":2,"120":5,"121":1,"125":3,"128":3,"130":7,"132":9,"135":1,"136":1,"138":23,"141":1,"142":2,"145":1,"146":1,"149":1,"150":2,"155":1,"160":13,"161":1,"162":1,"163":122,"164":5,"165":9,"169":1,"170":1}}],["geo",{"2":{"121":1,"146":4,"164":2}}],["geotable",{"2":{"29":1}}],["geojson",{"2":{"11":1,"150":5,"162":1,"164":4,"167":3}}],["geodataframes",{"2":{"167":3}}],["geod",{"2":{"10":2,"146":3}}],["geodesic`",{"2":{"146":2}}],["geodesic",{"2":{"10":5,"31":1,"145":6,"146":8,"147":1}}],["geodesicsegments",{"2":{"4":1,"10":2,"144":1,"145":3,"146":6,"147":2}}],["geoformattypes",{"2":{"5":2,"142":2,"162":1,"164":2,"165":8}}],["geomakie",{"0":{"164":1},"2":{"162":2,"164":5}}],["geomfromgeos",{"2":{"146":1}}],["geomtype",{"2":{"130":3}}],["geoms",{"2":{"10":1,"91":1,"125":1,"130":20}}],["geometies",{"2":{"7":1,"10":1,"99":1,"100":1}}],["geometrie",{"2":{"86":1}}],["geometries",{"0":{"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"84":1,"85":1,"86":1,"87":1,"88":1,"89":1,"90":1,"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"107":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"163":1,"164":1,"165":1},"2":{"5":6,"7":8,"8":14,"10":61,"18":3,"20":1,"22":3,"25":2,"27":2,"29":4,"33":1,"34":3,"37":4,"44":1,"47":2,"50":1,"51":5,"53":5,"54":4,"55":5,"59":1,"60":4,"62":1,"63":7,"66":1,"68":1,"69":1,"80":2,"83":2,"91":1,"93":1,"94":1,"96":2,"97":3,"99":2,"100":2,"110":2,"112":1,"123":1,"125":4,"127":1,"129":2,"130":13,"141":1,"142":2,"144":3,"145":1,"146":4,"147":1,"148":1,"151":1,"152":1,"153":1,"155":1,"161":1,"162":5,"164":1,"165":2,"166":2,"167":1,"168":5,"169":1,"171":1}}],["geometrical",{"2":{"168":1}}],["geometric",{"2":{"25":2,"27":2,"43":1}}],["geometry=",{"2":{"166":1}}],["geometryof",{"2":{"130":1}}],["geometryopsprojext",{"2":{"142":1,"143":1,"146":1,"147":1}}],["geometryopslibgeosext",{"2":{"41":1}}],["geometryops",{"0":{"4":1,"25":1,"31":1},"1":{"5":1,"6":1,"7":1,"8":1,"9":1,"10":1},"2":{"0":2,"4":115,"5":6,"7":18,"8":9,"9":3,"10":112,"11":1,"13":1,"14":1,"15":1,"17":2,"25":1,"26":4,"27":1,"31":1,"33":1,"36":1,"39":5,"41":1,"43":1,"46":1,"49":1,"50":1,"51":1,"53":1,"54":1,"55":1,"59":1,"62":1,"63":1,"65":1,"66":2,"68":1,"69":2,"78":1,"79":2,"80":2,"82":1,"83":2,"93":1,"94":1,"96":1,"97":1,"99":1,"100":2,"109":1,"110":2,"120":3,"121":2,"125":4,"130":1,"132":1,"135":1,"136":4,"138":1,"143":1,"145":1,"146":2,"149":1,"150":2,"156":1,"159":2,"160":1,"161":1,"162":1,"163":3,"168":1,"169":2,"170":2}}],["geometrybasics",{"2":{"31":3,"39":2,"40":10,"59":1,"69":1,"100":1,"110":1}}],["geometrycolumns",{"2":{"130":3}}],["geometrycollections",{"2":{"168":1}}],["geometrycollection",{"2":{"23":1,"170":1}}],["geometrycollectiontrait",{"2":{"23":1,"75":1,"76":1,"89":1,"90":1,"106":1,"107":1,"116":1,"117":1}}],["geometrycorrections",{"2":{"135":1}}],["geometrycorrection",{"2":{"4":1,"10":11,"133":2,"134":2,"135":13,"136":11,"139":4}}],["geometry",{"0":{"6":1,"53":1,"75":2,"76":2,"89":2,"90":2,"106":2,"107":2,"116":2,"117":2,"134":1,"142":1,"148":1,"162":1,"166":1},"1":{"7":1,"8":1,"135":1,"136":1,"143":1,"149":1,"150":1,"163":1,"164":1,"165":1,"166":1,"167":1},"2":{"2":1,"5":10,"7":23,"8":12,"10":69,"11":2,"18":4,"20":1,"23":3,"29":1,"31":1,"34":7,"37":4,"41":4,"44":3,"46":1,"47":4,"50":4,"59":4,"60":6,"63":8,"65":5,"66":2,"68":4,"69":5,"70":4,"71":1,"75":3,"76":4,"78":4,"79":4,"80":3,"82":2,"83":5,"84":4,"85":2,"86":1,"89":3,"90":4,"91":2,"93":2,"97":3,"99":2,"100":3,"101":4,"102":2,"106":3,"107":4,"109":4,"110":5,"111":4,"116":3,"117":4,"119":1,"123":3,"125":2,"128":2,"130":42,"132":1,"133":1,"134":2,"135":23,"136":6,"140":1,"141":1,"142":6,"144":3,"145":1,"146":5,"147":8,"150":6,"161":6,"163":1,"164":1,"165":4,"166":2,"167":2,"168":1,"169":7,"170":4,"171":2}}],["geom2",{"2":{"7":8,"8":1,"10":9,"60":6,"63":1,"80":6,"83":1,"94":3,"97":6,"100":1,"110":2}}],["geom1",{"2":{"7":8,"8":1,"10":9,"60":6,"63":1,"80":4,"83":1,"94":3,"97":6,"100":1,"110":2}}],["geom",{"2":{"5":7,"8":21,"10":48,"18":3,"31":12,"34":25,"37":17,"44":28,"45":16,"47":6,"50":15,"51":8,"52":2,"53":12,"54":10,"55":9,"56":9,"60":28,"63":45,"69":4,"80":1,"83":4,"91":3,"97":1,"100":4,"110":4,"120":3,"121":1,"123":2,"125":3,"130":96,"139":11,"140":4,"147":13,"150":36,"154":3,"155":4,"160":7,"161":17,"170":6}}],["geospatial",{"0":{"165":1,"167":1},"2":{"162":5,"164":1,"165":3,"167":5}}],["geoscontext",{"2":{"146":1}}],["geosdensify",{"2":{"146":3}}],["geos",{"0":{"159":1},"2":{"4":1,"10":5,"41":4,"148":5,"150":2,"156":1,"159":12}}],["human",{"2":{"167":1}}],["hypot",{"2":{"147":1}}],["h2",{"2":{"91":6}}],["h1",{"2":{"91":11}}],["hm",{"2":{"39":2}}],["h",{"2":{"34":2,"45":2,"56":8}}],["high",{"2":{"167":1}}],["highest",{"2":{"165":1}}],["hit",{"2":{"45":1,"130":5}}],["hits",{"2":{"18":1}}],["hidedecorations",{"2":{"39":2}}],["hinter",{"2":{"31":3,"41":1,"143":1,"146":1}}],["hint",{"2":{"31":3,"41":1,"146":1}}],["hinge=2",{"2":{"53":1}}],["hinge`",{"2":{"53":1}}],["hinge",{"2":{"10":1,"45":1,"54":13,"91":15}}],["hist",{"2":{"13":1}}],["histogram",{"2":{"13":1}}],["href=",{"2":{"10":2}}],["https",{"2":{"10":2,"51":1,"53":1,"54":1,"55":1,"91":2,"150":1,"152":1}}],["hcat",{"2":{"10":1}}],["halign",{"2":{"150":1}}],["half",{"2":{"46":2}}],["hail",{"2":{"133":1}}],["handling",{"0":{"143":1},"2":{"123":1}}],["handler",{"2":{"41":1,"143":1}}],["handle",{"2":{"31":1,"120":1,"128":2,"130":1,"164":1}}],["handled",{"2":{"18":1}}],["hao",{"2":{"91":1}}],["had",{"2":{"51":1,"53":1,"63":1,"145":1,"158":1}}],["happens",{"2":{"45":1}}],["happen",{"2":{"24":1}}],["have",{"2":{"7":3,"8":9,"10":17,"19":1,"23":1,"34":2,"37":3,"40":6,"41":1,"45":4,"54":1,"59":1,"60":2,"63":10,"91":5,"96":1,"97":3,"99":1,"100":1,"121":1,"122":1,"123":2,"125":2,"129":1,"130":4,"150":1,"152":1,"158":1,"159":1,"163":1,"164":1,"168":1,"169":1,"170":3}}],["haskey",{"2":{"159":1}}],["hash",{"2":{"121":1}}],["hasn",{"2":{"121":1}}],["hassle",{"2":{"5":1,"10":1,"160":1}}],["has",{"2":{"5":4,"10":4,"33":1,"36":2,"40":2,"45":2,"52":2,"54":1,"56":1,"59":1,"60":1,"63":11,"102":1,"120":1,"130":4,"131":1,"145":2,"154":1,"164":1}}],["hours",{"2":{"170":1}}],["hood",{"2":{"167":1}}],["hook",{"2":{"10":1,"150":1}}],["home",{"2":{"164":1}}],["horizontal",{"2":{"47":1,"54":1,"121":1,"150":1}}],["hormann",{"0":{"52":1,"54":1,"56":1},"2":{"10":2,"40":2,"45":3,"50":2,"51":1,"53":1,"55":1}}],["how",{"0":{"26":1},"2":{"10":2,"26":2,"36":1,"40":1,"45":1,"54":1,"63":1,"121":2,"125":1,"130":1,"140":1,"150":1,"164":1,"167":1,"168":2,"169":2,"170":1,"171":1}}],["however",{"2":{"7":1,"10":2,"34":1,"40":1,"44":1,"45":1,"54":1,"59":1,"63":1,"65":1,"79":1,"137":1}}],["hole",{"2":{"34":1,"37":3,"39":2,"40":9,"44":4,"45":60,"47":3,"51":6,"53":2,"56":15,"60":3,"72":1,"73":1,"74":1,"91":33,"121":5,"133":2,"163":1}}],["holes=",{"2":{"45":1}}],["holes",{"2":{"2":2,"8":3,"9":1,"10":4,"34":2,"36":1,"40":2,"44":1,"45":19,"50":4,"51":2,"53":2,"55":6,"56":29,"60":3,"63":3,"88":1,"91":11,"112":1,"121":17,"133":2,"163":4}}],["holding",{"2":{"10":1,"121":1,"130":2}}],["holds",{"2":{"10":1,"45":1,"148":1,"157":2}}],["hold",{"2":{"10":1,"121":1,"150":1,"158":1,"167":1}}],["heavily",{"2":{"130":1}}],["heatmap",{"2":{"13":5,"14":6,"39":2,"59":2,"121":1}}],["help",{"2":{"158":1}}],["helpers",{"0":{"45":1},"2":{"80":1,"97":1}}],["helper",{"0":{"52":1,"54":1,"56":1},"2":{"44":1,"45":1,"50":1}}],["helps",{"2":{"30":1}}],["held",{"2":{"5":1,"10":1,"130":1}}],["here",{"2":{"2":1,"10":2,"13":1,"14":1,"20":1,"40":1,"54":1,"80":1,"121":2,"130":5,"132":1,"146":1,"164":2,"168":2,"169":3}}],["vw",{"2":{"150":3}}],["von",{"2":{"121":1}}],["v2",{"2":{"91":9}}],["v1",{"2":{"91":9}}],["v`",{"2":{"40":2}}],["vcat",{"2":{"34":1,"40":1,"130":1}}],["vararg",{"2":{"40":1}}],["vary",{"2":{"34":1}}],["variables",{"2":{"24":1,"40":8,"66":1,"79":1,"94":1}}],["variable",{"2":{"24":1,"52":2}}],["vals",{"2":{"152":9}}],["valign",{"2":{"150":1}}],["valid",{"2":{"5":1,"10":8,"44":1,"51":2,"53":2,"54":3,"55":2,"121":1,"131":3,"132":1,"137":1,"138":1,"154":1,"160":1}}],["validated",{"2":{"52":2,"54":2,"56":2}}],["validate",{"2":{"2":1}}],["val",{"2":{"34":2,"45":2,"54":8,"91":30,"97":4}}],["values=",{"2":{"121":2}}],["values=sort",{"2":{"121":1}}],["values",{"2":{"5":1,"9":3,"10":16,"34":2,"39":3,"40":40,"44":2,"45":5,"47":5,"54":1,"60":2,"91":4,"121":19,"130":2,"152":2,"154":1,"158":1}}],["value",{"2":{"4":1,"8":7,"9":2,"10":15,"14":1,"24":1,"34":1,"36":2,"37":4,"40":45,"45":5,"47":2,"54":7,"59":1,"60":3,"121":6,"152":11,"159":2,"168":1}}],["vs",{"0":{"15":1},"2":{"12":1,"54":2}}],["vᵢ",{"2":{"10":1}}],["v0",{"2":{"10":2}}],["v",{"2":{"9":2,"10":6,"14":4,"40":23,"60":8}}],["visvalingam",{"2":{"148":1}}],["visvalingamwhyatt",{"0":{"153":1},"2":{"4":1,"10":3,"150":4,"153":5}}],["visualized",{"2":{"132":1}}],["visualize",{"2":{"93":1,"164":1}}],["visa",{"2":{"45":1}}],["visited",{"2":{"45":4}}],["view",{"2":{"45":2,"121":1,"139":1,"152":3,"170":1}}],["viewport",{"2":{"14":1}}],["views",{"2":{"5":1,"45":1,"55":1,"142":1}}],["via",{"2":{"10":1,"41":1,"122":1,"143":1,"146":1,"159":2}}],["vect",{"2":{"130":2}}],["vectypes",{"2":{"40":5}}],["vector",{"2":{"5":12,"8":6,"9":1,"10":46,"18":1,"23":1,"29":1,"33":1,"34":10,"40":14,"45":7,"50":6,"51":4,"52":1,"53":2,"54":3,"55":4,"91":1,"97":2,"120":3,"121":4,"123":1,"130":6,"132":8,"133":1,"138":22,"144":1,"145":1,"147":1,"150":1,"151":1,"152":4,"153":1,"154":2,"160":10,"161":15,"163":18,"164":6,"165":9}}],["vectors",{"2":{"5":1,"8":2,"10":5,"22":1,"34":4,"40":3,"45":1,"60":1,"119":1,"121":1,"130":2,"150":1}}],["ve",{"2":{"17":1,"147":1}}],["version",{"2":{"159":1}}],["versa",{"2":{"45":1}}],["vert",{"2":{"154":21}}],["verts",{"2":{"150":2}}],["vertical",{"2":{"39":1,"47":1,"54":1,"121":1}}],["vertices",{"2":{"2":1,"10":7,"38":4,"40":5,"45":1,"50":2,"71":1,"73":5,"82":1,"85":3,"88":1,"91":1,"112":1,"132":1,"144":2,"145":1,"146":3,"147":3,"150":1,"153":1}}],["vertex",{"2":{"9":1,"10":2,"34":1,"38":2,"40":2,"45":19,"54":12,"71":2,"86":2,"87":1,"91":1,"112":3}}],["very",{"2":{"4":1,"145":1,"170":2}}],["vein",{"2":{"0":1}}],["psa",{"2":{"130":2}}],["pb",{"2":{"80":2}}],["p0",{"2":{"60":9}}],["p3",{"2":{"45":8,"153":4}}],["ptm",{"2":{"120":3}}],["ptj",{"2":{"120":5}}],["pti",{"2":{"120":3}}],["ptrait",{"2":{"60":2}}],["pts",{"2":{"45":22,"50":7}}],["pt",{"2":{"45":114,"50":2,"54":26,"91":8,"152":4}}],["pt2",{"2":{"45":14,"54":2}}],["pt1",{"2":{"45":18,"54":2}}],["pn",{"2":{"102":3}}],["pn2",{"2":{"45":4}}],["pn1",{"2":{"45":4}}],["pfirst",{"2":{"37":3}}],["pu",{"2":{"169":2}}],["purpose",{"2":{"130":1}}],["pure",{"2":{"121":1}}],["purely",{"2":{"10":1,"18":1,"146":1}}],["push",{"2":{"45":15,"50":5,"51":2,"53":2,"54":2,"55":4,"56":5,"121":3,"133":1,"147":3,"152":3}}],["pull",{"2":{"25":1,"27":1}}],["public",{"2":{"24":1}}],["pick",{"2":{"164":2}}],["piece",{"2":{"45":6,"139":6}}],["pieces",{"2":{"45":12,"50":1,"52":2,"55":4,"91":1,"139":9}}],["pi",{"2":{"13":2}}],["pixels",{"2":{"121":1}}],["pixel",{"2":{"10":2,"121":7}}],["pythagorean",{"2":{"60":1}}],["py",{"2":{"13":2,"14":2}}],["px",{"2":{"13":2,"14":2}}],["pl",{"2":{"169":2}}],["plt",{"2":{"163":1}}],["please",{"2":{"45":1}}],["plan",{"2":{"144":1}}],["plane",{"2":{"40":1}}],["place",{"2":{"54":1,"168":1}}],["placement",{"2":{"45":1}}],["plottable",{"2":{"121":1}}],["plotted",{"2":{"43":1}}],["plotting",{"0":{"163":1},"2":{"10":1,"121":1,"144":1,"147":1,"162":1,"163":4,"164":1}}],["plots",{"2":{"39":2}}],["plot",{"0":{"164":1},"2":{"13":1,"39":3,"62":1,"96":1,"121":1,"146":2,"150":4,"162":2,"163":9,"164":5,"165":1,"167":1,"169":1}}],["plus",{"2":{"9":1,"10":1,"40":1}}],["peucker",{"2":{"148":2,"150":3,"152":2}}],["peaks",{"2":{"121":2}}],["peculiarities",{"0":{"21":1},"1":{"22":1,"23":1,"24":1}}],["performed",{"2":{"169":1}}],["performs",{"2":{"40":1,"147":1}}],["perform",{"2":{"26":1,"39":1,"40":2,"45":1,"123":1,"168":3,"169":2,"171":1}}],["performing",{"2":{"10":3,"23":1,"40":1,"51":1,"53":1,"55":1,"169":1}}],["performance",{"2":{"8":1,"10":2,"22":1,"121":1,"137":1,"141":1,"150":1,"167":1}}],["per",{"2":{"9":2,"10":2,"39":1,"40":2,"45":5,"121":1,"130":4,"147":1}}],["people",{"2":{"2":1}}],["p2y",{"2":{"161":3}}],["p2x",{"2":{"161":3}}],["p2box",{"2":{"39":1}}],["p2",{"2":{"7":2,"8":2,"10":6,"15":12,"34":12,"37":9,"45":18,"47":19,"55":2,"60":15,"63":11,"69":2,"78":2,"91":12,"97":2,"120":3,"145":1,"153":4,"161":3,"163":2}}],["p1y",{"2":{"161":3}}],["p1x",{"2":{"161":3}}],["p1",{"2":{"7":3,"8":2,"10":7,"15":12,"34":21,"37":8,"39":4,"45":9,"47":25,"49":1,"55":2,"60":15,"63":14,"68":5,"69":3,"78":5,"91":4,"97":2,"102":3,"120":3,"153":4,"161":3,"163":1}}],["pay",{"2":{"130":1}}],["paper",{"2":{"91":2}}],["pa",{"2":{"80":2}}],["paths",{"2":{"158":1}}],["pathof",{"2":{"150":2}}],["path",{"2":{"36":3,"164":2}}],["padding",{"2":{"10":2}}],["parquet",{"2":{"167":3}}],["parent",{"2":{"158":1,"161":1}}],["parse",{"2":{"91":1,"97":1}}],["part",{"2":{"47":2,"56":2,"91":3,"129":1}}],["partition",{"2":{"130":4}}],["partialsort",{"2":{"154":1}}],["partial",{"2":{"47":4}}],["partially",{"2":{"45":2,"56":2}}],["particularly",{"2":{"40":1}}],["particular",{"2":{"30":1,"34":1,"121":1,"164":2}}],["parallel",{"2":{"91":1,"120":1}}],["paradigm",{"0":{"29":1}}],["paradigms",{"0":{"17":1},"1":{"18":1,"19":1,"20":1},"2":{"17":2,"20":1}}],["parameters",{"2":{"10":1,"130":1,"157":2}}],["parameter",{"2":{"10":2,"157":3}}],["params",{"2":{"10":2,"159":10}}],["parlance",{"2":{"9":1,"10":1,"40":1}}],["passes",{"2":{"47":2,"91":1}}],["passed",{"2":{"5":2,"10":7,"121":1,"125":1,"130":2,"142":1,"146":2,"159":2,"160":1,"171":1}}],["passable",{"2":{"40":18}}],["passing",{"2":{"18":1,"130":1,"148":1}}],["pass",{"2":{"9":1,"10":4,"18":1,"40":1,"66":1,"79":1,"91":2,"94":1,"146":1,"147":1,"150":1,"158":1}}],["pairs",{"2":{"54":1,"163":1}}],["pair",{"2":{"7":2,"10":2,"47":1,"97":2,"130":3}}],["packages",{"2":{"10":1,"25":1,"27":1,"125":1,"130":1,"131":1,"156":1,"162":3,"164":1,"167":1}}],["package",{"2":{"5":2,"22":1,"25":2,"27":2,"41":1,"121":1,"142":3,"143":1,"146":1,"164":1,"167":2}}],["page",{"2":{"2":1,"4":1,"26":1,"29":1,"31":1,"34":1,"37":1,"39":1,"40":1,"41":1,"44":1,"45":1,"47":1,"50":1,"52":1,"54":1,"56":1,"57":1,"60":1,"63":1,"66":1,"76":1,"79":1,"80":1,"90":1,"91":1,"94":1,"97":1,"107":1,"117":1,"120":1,"121":1,"122":1,"130":1,"133":1,"136":1,"139":1,"140":1,"141":1,"143":1,"147":1,"154":1,"155":1,"159":1,"160":1,"161":1}}],["p",{"2":{"5":5,"10":5,"13":13,"14":12,"15":2,"33":1,"36":1,"43":1,"45":5,"46":1,"47":5,"52":2,"55":2,"59":3,"62":1,"65":1,"68":1,"78":1,"80":4,"82":1,"91":20,"93":1,"96":1,"99":1,"109":1,"120":4,"121":3,"123":3,"130":5,"140":7,"145":1,"149":1,"150":1,"154":3,"155":7,"160":9,"161":11,"168":1,"169":1}}],["poylgon",{"2":{"54":1,"56":1,"91":1}}],["potential",{"2":{"47":1}}],["potentially",{"2":{"10":2,"45":1,"136":2,"139":2}}],["post",{"2":{"152":2}}],["postitive",{"2":{"59":1}}],["postive",{"2":{"36":1}}],["possibly",{"2":{"130":1}}],["possiblenodes",{"2":{"121":2}}],["possible",{"2":{"10":3,"51":1,"53":1,"55":1,"121":1,"130":2}}],["possibility",{"2":{"128":1}}],["possibilities",{"2":{"54":1}}],["position=",{"2":{"150":1}}],["position",{"2":{"10":1,"120":1,"145":1}}],["positive",{"2":{"8":4,"10":4,"36":2,"37":1,"59":2,"60":3,"147":1,"154":1}}],["polgons",{"2":{"121":1}}],["polgontrait",{"2":{"5":1,"10":1}}],["polar",{"2":{"10":1,"146":1}}],["polynodes",{"2":{"45":7,"51":1,"53":1,"55":1}}],["polynode",{"2":{"45":36}}],["polypoints",{"2":{"40":46}}],["polyogns",{"2":{"121":1}}],["polyogn",{"2":{"34":1}}],["polygns",{"2":{"45":1}}],["polygin",{"2":{"8":1,"10":1,"34":1}}],["polygon3",{"2":{"163":2,"164":1}}],["polygon2",{"2":{"163":6}}],["polygon1",{"2":{"163":4}}],["polygonization",{"2":{"121":1}}],["polygonizing",{"0":{"121":1}}],["polygonized",{"2":{"121":1}}],["polygonize",{"2":{"2":1,"4":1,"10":6,"31":1,"121":31}}],["polygon`",{"2":{"40":3}}],["polygontrait",{"2":{"5":1,"7":4,"8":6,"10":14,"15":3,"23":1,"34":2,"37":3,"40":3,"44":2,"45":2,"47":2,"50":1,"51":5,"52":5,"53":3,"54":5,"55":4,"56":8,"60":2,"63":10,"71":2,"72":1,"73":1,"74":3,"75":1,"80":4,"85":2,"86":2,"87":1,"88":2,"89":1,"97":8,"102":2,"103":1,"104":1,"105":3,"106":1,"112":2,"113":1,"114":1,"115":3,"116":1,"123":1,"128":2,"130":2,"133":2,"135":2,"136":1,"139":2,"150":2,"161":1}}],["polygon",{"0":{"45":1,"48":1,"51":1,"52":1,"54":1,"55":1,"56":1,"88":1},"1":{"49":1,"50":1},"2":{"2":2,"4":1,"5":4,"7":4,"8":20,"9":9,"10":62,"11":3,"15":4,"20":1,"23":1,"33":1,"34":3,"36":2,"37":5,"38":5,"39":16,"40":57,"43":2,"44":4,"45":39,"46":3,"47":4,"49":3,"50":10,"51":5,"52":7,"53":5,"54":5,"55":6,"56":33,"59":3,"60":14,"63":12,"69":1,"71":3,"72":3,"73":4,"74":8,"80":1,"85":3,"86":4,"87":4,"88":4,"91":66,"97":4,"100":1,"102":3,"103":4,"104":5,"105":7,"110":1,"112":3,"113":4,"114":4,"115":8,"120":5,"121":4,"130":1,"131":4,"132":8,"133":5,"134":1,"136":4,"137":3,"138":12,"139":7,"145":1,"146":4,"149":1,"150":9,"160":3,"161":6,"163":12,"164":5,"165":7,"166":2,"169":6}}],["polygons",{"0":{"74":1,"105":1,"115":1,"137":1},"1":{"138":1,"139":1},"2":{"2":1,"7":4,"8":3,"9":1,"10":18,"23":5,"31":1,"37":5,"38":1,"40":2,"43":1,"44":1,"45":13,"47":1,"50":2,"51":9,"52":5,"53":3,"54":8,"55":6,"56":19,"59":1,"60":1,"63":5,"74":1,"97":5,"115":1,"120":1,"121":18,"128":1,"132":2,"136":3,"137":2,"138":2,"139":10,"148":1,"150":1,"163":3,"164":1,"169":5,"170":3}}],["polys",{"2":{"10":2,"45":39,"49":3,"50":10,"51":14,"52":14,"53":9,"54":6,"55":14,"56":28,"139":26}}],["polys1",{"2":{"7":2,"10":2,"97":6}}],["polys2",{"2":{"7":2,"10":2,"97":6}}],["poly",{"2":{"7":2,"10":16,"15":2,"33":1,"36":1,"37":6,"39":2,"40":3,"43":1,"45":107,"46":2,"47":4,"49":4,"50":20,"51":22,"52":12,"53":15,"54":10,"55":19,"56":79,"59":1,"60":3,"63":4,"80":10,"91":21,"97":8,"120":5,"121":5,"139":18,"145":2,"149":2,"150":8,"161":8,"163":2,"169":5}}],["poly2",{"2":{"7":3,"8":2,"10":7,"51":2,"63":2,"91":19,"97":7}}],["poly1",{"2":{"7":3,"8":2,"10":7,"51":2,"63":2,"91":14,"97":7}}],["pointwise",{"0":{"160":1},"2":{"142":1}}],["point1",{"2":{"60":4}}],["point`",{"2":{"54":1}}],["pointedgeside",{"2":{"45":1}}],["point₂",{"2":{"44":13}}],["point₁",{"2":{"44":13}}],["point3s",{"2":{"40":10}}],["point3f",{"2":{"39":1}}],["pointrait",{"2":{"10":1}}],["point2f",{"2":{"39":4,"40":2,"59":1}}],["point2d",{"2":{"39":1}}],["point2",{"2":{"10":2,"40":5,"60":4}}],["pointtrait",{"2":{"5":1,"8":4,"10":9,"18":1,"34":2,"37":1,"40":3,"47":1,"53":2,"60":17,"63":8,"71":6,"75":1,"85":6,"89":1,"102":6,"106":1,"112":6,"116":1,"123":2,"128":1,"130":22,"135":2,"136":1,"140":2,"141":1,"150":2,"155":2,"157":2,"160":2,"161":1}}],["pointorientation",{"2":{"4":1,"10":2,"91":2}}],["points2",{"2":{"7":1,"10":1,"97":3}}],["points1",{"2":{"7":1,"10":1,"97":3}}],["points",{"0":{"71":1,"112":1},"2":{"2":3,"4":1,"5":3,"7":1,"8":11,"9":1,"10":52,"13":1,"34":2,"36":3,"37":3,"39":8,"40":32,"44":1,"45":55,"47":5,"50":3,"51":5,"52":1,"53":8,"54":28,"55":4,"56":1,"59":2,"60":8,"62":2,"63":13,"65":1,"69":6,"71":3,"72":4,"83":6,"85":1,"86":7,"87":3,"91":10,"97":5,"100":5,"102":1,"103":2,"104":4,"105":3,"109":1,"110":5,"112":3,"113":3,"114":3,"115":1,"119":1,"121":3,"130":3,"141":2,"142":1,"145":2,"146":2,"150":11,"151":11,"152":26,"153":10,"154":33,"155":2,"160":2,"161":25,"163":8,"164":1,"168":1,"169":11}}],["point",{"0":{"85":1,"102":1},"2":{"2":2,"5":4,"7":10,"8":37,"9":7,"10":83,"20":1,"34":12,"37":3,"38":3,"39":1,"40":126,"44":6,"45":97,"47":50,"50":13,"52":9,"53":1,"54":71,"56":9,"59":17,"60":73,"63":27,"66":3,"68":1,"69":2,"71":8,"80":21,"83":2,"85":10,"91":138,"93":1,"96":2,"97":21,"99":1,"100":3,"102":10,"103":1,"105":1,"110":4,"112":11,"120":1,"121":3,"130":1,"131":1,"132":2,"136":2,"137":1,"139":2,"142":1,"144":1,"150":2,"151":3,"152":9,"153":1,"160":2,"161":4,"163":111,"164":7,"165":8,"169":2}}],["practice",{"2":{"165":1}}],["pred",{"2":{"168":2,"169":1,"170":2,"171":1}}],["predicate",{"2":{"0":1,"80":1,"168":3,"169":1,"171":5}}],["predicates",{"0":{"12":1,"15":1,"171":1},"1":{"13":1,"14":1,"15":1,"16":1},"2":{"0":4,"12":1,"31":1,"45":5,"54":4,"57":3,"91":1,"168":1,"170":1}}],["pretty",{"2":{"142":1}}],["prettytime",{"2":{"13":2}}],["prevent",{"2":{"52":2,"54":2,"56":2}}],["prev^2",{"2":{"34":2}}],["prev",{"2":{"34":14,"45":69,"120":4}}],["previously",{"2":{"145":1}}],["previous",{"2":{"19":1,"34":1,"130":1,"151":3}}],["preparations",{"2":{"20":1}}],["prepared",{"2":{"20":1,"121":2}}],["prepare",{"0":{"20":1},"2":{"17":1,"20":1}}],["precision",{"2":{"11":1}}],["preserve",{"2":{"150":4,"152":3}}],["preserving",{"2":{"148":1}}],["presentation",{"2":{"10":1,"40":1}}],["present",{"2":{"10":1,"159":1}}],["presence",{"2":{"10":1,"159":1}}],["prescribes",{"2":{"20":1}}],["press",{"2":{"10":1,"40":1}}],["pre",{"2":{"10":1,"55":1,"150":1,"152":2}}],["prefilter",{"2":{"10":1,"150":7}}],["prints",{"2":{"143":1}}],["printstyled",{"2":{"41":1,"143":1,"146":1}}],["println",{"2":{"41":1,"143":1,"146":1,"150":2}}],["print",{"2":{"41":2,"143":2,"146":2}}],["primitives",{"2":{"31":1}}],["primitive",{"0":{"123":1},"1":{"124":1,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1},"2":{"29":1}}],["primarily",{"2":{"10":1,"25":2,"27":2,"157":1}}],["primary",{"2":{"7":2,"10":3,"69":1,"110":1,"150":1}}],["priority",{"2":{"5":1,"142":1}}],["protters",{"2":{"130":2}}],["progressively",{"2":{"128":1}}],["program",{"2":{"17":1}}],["programming",{"2":{"17":1,"26":1}}],["promote",{"2":{"40":5}}],["property",{"2":{"130":2}}],["properties=gi",{"2":{"130":1}}],["properties=namedtuple",{"2":{"130":1}}],["properties=",{"2":{"121":1}}],["properties",{"2":{"10":1,"130":9,"150":1,"154":1}}],["propagate",{"2":{"40":16,"60":4}}],["probably",{"2":{"37":1,"130":1}}],["prod",{"2":{"34":4}}],["product",{"2":{"34":1}}],["process",{"2":{"71":3,"72":3,"73":3,"74":1,"80":1,"85":3,"86":3,"87":2,"88":1,"91":11,"102":1,"103":3,"104":1,"105":1,"112":3,"113":3,"114":3,"115":1,"130":2,"152":1}}],["processed",{"2":{"45":6}}],["processors",{"2":{"31":1,"69":2,"83":2,"100":2,"110":2}}],["processor",{"2":{"31":1}}],["processing",{"2":{"23":1}}],["provides",{"2":{"164":1}}],["providers",{"2":{"132":1,"138":1}}],["provide",{"0":{"23":1},"2":{"10":6,"33":1,"36":1,"38":1,"43":1,"46":1,"49":1,"51":2,"53":2,"55":2,"59":1,"62":1,"65":1,"68":1,"78":1,"82":1,"91":2,"93":1,"96":1,"99":1,"109":1,"121":1,"154":1}}],["provided",{"2":{"8":1,"10":3,"11":1,"45":1,"60":1,"63":1,"138":1,"146":2,"159":1}}],["proj",{"2":{"5":2,"10":3,"142":2,"143":4,"145":1,"146":6,"162":1}}],["projecting",{"2":{"164":1}}],["projection",{"2":{"60":2,"162":1,"164":1}}],["project",{"2":{"2":1}}],["projects",{"2":{"2":1}}],["profile",{"2":{"2":1}}],["image",{"2":{"121":1}}],["impossible",{"2":{"50":1,"96":1}}],["important",{"2":{"145":1}}],["import",{"2":{"5":3,"10":5,"13":2,"14":2,"15":1,"31":5,"33":1,"36":1,"41":1,"43":1,"46":1,"50":1,"51":1,"53":1,"54":1,"55":1,"59":1,"62":1,"63":1,"65":1,"66":1,"68":1,"69":1,"78":1,"79":1,"80":1,"82":1,"83":1,"93":1,"94":1,"96":1,"97":1,"99":1,"100":1,"109":1,"110":1,"120":3,"130":2,"143":1,"146":2,"149":2,"150":3,"160":2,"161":1,"162":5}}],["implements",{"2":{"159":1}}],["implementing",{"2":{"10":1,"150":1}}],["implement",{"2":{"10":1,"17":1,"23":1,"34":1,"37":1,"40":1,"44":1,"47":1,"60":1,"63":1,"69":1,"83":1,"97":1,"100":1,"110":1,"123":1,"134":1,"135":3,"136":1}}],["implementation",{"0":{"34":1,"37":1,"44":1,"47":1,"50":1,"60":1,"63":1,"66":1,"69":1,"79":1,"83":1,"94":1,"97":1,"100":1,"110":1,"127":1,"133":1,"139":1,"147":1},"2":{"10":1,"34":3,"37":3,"40":1,"44":3,"47":3,"55":1,"60":3,"63":3,"66":1,"69":2,"79":1,"83":2,"94":1,"97":3,"100":2,"110":2,"121":2,"122":1,"142":1,"150":1,"159":1}}],["implementations",{"2":{"10":1,"69":1,"83":1,"100":1,"110":1,"122":1,"148":1,"159":3}}],["implemented",{"0":{"122":1},"2":{"5":1,"10":2,"31":1,"37":1,"40":3,"50":2,"52":2,"54":2,"56":2,"60":2,"122":1,"123":2,"135":2,"142":1,"148":1}}],["improve",{"2":{"8":1,"10":1,"141":1}}],["improvements",{"2":{"2":2,"3":1}}],["i=2",{"2":{"120":1}}],["ipoints",{"2":{"91":4}}],["ip",{"2":{"63":2}}],["ipt",{"2":{"45":8}}],["ihole",{"2":{"63":2}}],["ih",{"2":{"56":22}}],["i2",{"2":{"47":2}}],["i1",{"2":{"47":2}}],["ii",{"2":{"45":8}}],["io",{"2":{"41":5,"143":5,"146":5}}],["i+1",{"2":{"40":8,"121":1,"152":2,"154":1}}],["id",{"2":{"166":1}}],["identical",{"2":{"130":1,"138":1}}],["identity",{"2":{"121":4,"130":2,"141":1}}],["ideal",{"2":{"121":1}}],["idea",{"2":{"10":1,"20":1,"25":1,"27":1,"40":1,"123":1}}],["idx`",{"2":{"45":1}}],["idx",{"2":{"34":6,"45":167,"47":9,"50":23,"51":5,"53":5,"55":2,"139":34,"152":51}}],["id=",{"2":{"10":2}}],["ignored",{"2":{"10":1,"121":1}}],["ignore",{"2":{"10":1,"121":2}}],["i>",{"2":{"10":2}}],["i>method",{"2":{"10":2}}],["iff",{"2":{"130":1}}],["if",{"0":{"57":1},"2":{"5":5,"7":17,"8":19,"9":1,"10":73,"18":1,"22":2,"33":1,"34":15,"36":1,"37":6,"40":5,"41":3,"44":1,"45":95,"47":36,"50":8,"51":13,"52":12,"53":9,"54":44,"55":10,"56":22,"59":2,"60":8,"62":2,"63":35,"65":1,"66":1,"68":1,"69":2,"71":4,"72":3,"73":3,"74":2,"75":1,"76":1,"78":1,"79":1,"80":9,"82":1,"83":3,"85":5,"86":4,"87":2,"88":2,"89":1,"90":1,"91":132,"93":1,"94":1,"96":4,"97":16,"99":1,"100":2,"102":4,"103":3,"104":2,"105":2,"106":1,"107":1,"109":1,"110":2,"112":5,"113":3,"114":3,"115":1,"116":1,"117":1,"120":5,"121":35,"125":1,"128":1,"130":21,"133":1,"135":1,"136":2,"137":1,"139":12,"140":1,"141":1,"142":3,"143":2,"146":6,"147":2,"150":1,"152":12,"154":12,"155":1,"158":1,"159":2,"160":1,"164":1,"167":1,"169":2,"170":1}}],["i",{"2":{"2":1,"13":4,"22":1,"34":14,"37":1,"40":16,"45":28,"47":4,"52":2,"55":2,"56":4,"60":2,"63":8,"80":7,"91":28,"120":14,"121":17,"130":16,"147":2,"151":3,"152":12,"154":28,"161":2,"163":2,"164":1,"170":3}}],["itererable",{"2":{"161":1}}],["iter",{"2":{"130":31}}],["iterate",{"2":{"40":2,"128":1,"130":5}}],["iteration",{"2":{"37":1}}],["iterators",{"2":{"13":1,"40":1,"45":5,"47":3,"53":1,"56":2,"121":1,"130":11,"139":6,"147":1}}],["iterator",{"2":{"10":2,"45":4,"53":2,"125":2,"130":2}}],["iterabletype",{"2":{"130":10}}],["iterable",{"2":{"8":1,"10":3,"18":1,"37":1,"47":1,"125":1,"130":37,"163":1}}],["iterables",{"2":{"5":2,"10":2,"22":1,"130":6}}],["ith",{"2":{"45":3,"56":7}}],["itself",{"2":{"47":1,"120":1,"128":1}}],["its",{"2":{"9":1,"10":10,"18":1,"36":1,"40":1,"45":2,"47":4,"56":1,"72":1,"125":1,"130":1,"134":1,"150":1,"151":1,"152":1,"153":3,"168":1}}],["it",{"2":{"2":1,"5":4,"8":1,"10":19,"18":11,"19":2,"20":1,"22":1,"29":3,"30":1,"33":1,"34":1,"36":2,"37":3,"39":1,"41":1,"44":2,"45":2,"46":1,"47":2,"51":1,"52":1,"53":1,"54":4,"55":1,"56":3,"60":3,"63":1,"68":2,"71":3,"85":3,"91":14,"96":1,"97":1,"102":2,"112":3,"119":1,"120":2,"121":4,"123":3,"125":3,"128":3,"129":1,"130":15,"132":1,"133":1,"134":1,"136":1,"137":1,"142":5,"145":2,"146":1,"150":1,"152":1,"156":1,"157":2,"158":1,"159":7,"164":3,"165":3,"167":3,"170":2,"171":2}}],["isolate",{"2":{"150":1}}],["isodd",{"2":{"50":1}}],["istable",{"2":{"130":2}}],["isequal",{"2":{"121":1}}],["iseven",{"2":{"91":1}}],["isempty",{"2":{"37":1,"40":4,"47":1,"51":1,"52":2,"53":1,"121":1,"135":1,"152":1}}],["isparallel",{"2":{"91":1,"120":8}}],["is3d",{"2":{"63":1,"130":1,"140":1,"155":1,"160":1,"161":10}}],["issue",{"2":{"45":1}}],["issues",{"2":{"25":1,"27":1}}],["isa",{"2":{"18":1,"40":9,"130":4,"161":1}}],["isnothing",{"2":{"41":1,"45":9,"50":1,"52":2,"54":2,"56":2,"63":1,"121":1,"143":1,"146":1,"150":1,"151":1,"152":5,"153":1,"154":6}}],["isn",{"2":{"10":1,"37":1,"45":4,"47":1,"50":1,"52":1,"54":3,"56":2,"60":3,"63":1,"68":1,"91":9,"97":1,"150":1,"159":1}}],["isconcave",{"0":{"120":1},"2":{"4":1,"10":2,"118":1,"120":3}}],["isclockwise",{"0":{"119":1},"2":{"4":1,"10":2,"47":1,"118":1,"120":5,"121":2}}],["is",{"0":{"25":1,"33":1,"36":2,"43":1,"46":1,"49":1,"59":2,"62":1,"65":1,"68":1,"78":1,"82":1,"93":1,"96":1,"99":1,"109":1,"128":1},"2":{"2":3,"4":1,"5":10,"7":8,"8":43,"9":1,"10":105,"11":1,"13":1,"14":1,"18":3,"19":1,"20":1,"22":3,"23":2,"25":2,"27":2,"33":1,"34":19,"36":7,"37":19,"38":2,"39":2,"40":15,"41":3,"43":2,"44":5,"45":82,"46":3,"47":22,"49":1,"50":2,"51":4,"52":13,"53":4,"54":40,"55":7,"56":20,"59":8,"60":23,"63":13,"65":2,"66":3,"68":4,"69":4,"71":7,"72":3,"73":3,"74":1,"75":1,"76":1,"79":3,"80":3,"82":1,"83":5,"85":9,"86":4,"87":2,"88":1,"89":1,"90":1,"91":91,"94":2,"96":3,"97":12,"100":4,"102":2,"109":4,"110":5,"112":8,"113":3,"114":3,"115":1,"116":2,"117":1,"119":2,"120":7,"121":11,"122":1,"123":2,"125":1,"128":3,"129":1,"130":24,"131":7,"132":2,"133":1,"134":3,"135":2,"136":1,"137":4,"138":1,"139":2,"140":1,"142":7,"143":2,"144":3,"145":3,"146":9,"147":6,"149":1,"150":4,"151":1,"152":2,"153":1,"156":1,"157":1,"158":1,"159":3,"160":2,"163":4,"164":5,"165":3,"166":1,"167":3,"168":2,"169":5,"170":2}}],["innerjoin",{"2":{"169":1,"170":1}}],["inner",{"2":{"91":6,"130":5,"168":1}}],["innacurracies",{"2":{"54":1}}],["inline",{"2":{"91":4,"120":1,"130":22,"158":2}}],["inlcuding",{"2":{"54":1,"72":1,"73":1}}],["in=1",{"2":{"91":1}}],["in`",{"2":{"91":1}}],["inject",{"0":{"57":1},"2":{"143":1}}],["ind",{"2":{"170":2}}],["individual",{"2":{"165":1}}],["indicate",{"2":{"130":1}}],["indicates",{"2":{"20":1}}],["indicies",{"2":{"45":2}}],["indices",{"2":{"45":2,"130":4,"154":16}}],["indeed",{"2":{"132":1}}],["index",{"2":{"40":8,"45":11,"91":1,"130":1,"152":1}}],["inds",{"2":{"121":3}}],["inplace",{"2":{"40":1}}],["inputs",{"2":{"10":1,"45":1,"63":1,"66":1,"79":1,"94":1,"154":1}}],["input",{"2":{"10":12,"34":1,"50":1,"51":1,"53":1,"54":1,"55":1,"121":1,"123":1,"146":3,"147":2,"151":1,"152":1,"153":1,"164":1}}],["inbounds",{"2":{"40":16,"60":5,"91":1}}],["inspiration",{"2":{"50":1}}],["inspired",{"2":{"49":1,"50":2}}],["inside",{"2":{"34":3,"43":1,"45":3,"47":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":2,"59":3,"60":1,"71":1,"91":1,"109":1,"112":1,"121":2}}],["insertion",{"2":{"45":1}}],["insert",{"2":{"34":1,"152":1}}],["instability",{"2":{"24":2}}],["instantiating",{"2":{"20":1}}],["instead",{"2":{"18":1,"24":1}}],["instructs",{"2":{"10":1,"159":2}}],["investigate",{"2":{"121":1}}],["invalid",{"2":{"20":1,"52":2,"132":1,"137":1,"138":1}}],["invoke",{"2":{"20":1}}],["involved",{"2":{"123":1}}],["involve",{"2":{"20":1}}],["involving",{"2":{"10":3,"51":1,"53":1,"55":1}}],["invocation",{"2":{"18":1}}],["init=nothing",{"2":{"130":1}}],["init=typemax",{"2":{"60":2}}],["init=zero",{"2":{"37":1,"47":1}}],["initial",{"2":{"54":2,"146":1}}],["initially",{"2":{"45":1}}],["initialize",{"2":{"40":3,"44":2,"45":1,"54":1}}],["init",{"2":{"19":1,"31":1,"34":1,"44":2,"130":30,"146":4}}],["incorrect",{"2":{"131":1,"132":1}}],["increase",{"2":{"45":1,"91":1}}],["increasing",{"2":{"10":1,"150":1}}],["increment",{"2":{"40":5}}],["including",{"2":{"34":1,"45":2,"60":1,"71":1,"74":1,"91":2}}],["include",{"2":{"31":40,"34":1,"45":1,"60":2,"150":2,"158":1,"165":2,"166":1}}],["included",{"2":{"10":2,"56":2,"136":2,"139":2,"165":1}}],["includes",{"2":{"8":2,"10":2,"56":1,"60":2,"63":1,"91":1}}],["incircle",{"0":{"16":1}}],["ing",{"2":{"5":1,"10":2,"40":1,"160":1}}],["intr",{"2":{"45":28,"47":9,"50":16,"54":8}}],["intr2",{"2":{"45":2,"54":14}}],["intr1",{"2":{"45":3,"54":21,"91":2}}],["intrs",{"2":{"45":10,"54":5}}],["introduction",{"0":{"27":1},"1":{"28":1,"29":1,"30":1}}],["introducing",{"2":{"24":1}}],["introduces",{"2":{"24":1}}],["int",{"2":{"45":6,"56":7,"80":7,"147":1,"150":1,"152":5,"153":1,"154":1}}],["integrate",{"2":{"37":1}}],["integrating",{"2":{"37":1}}],["integrals",{"2":{"36":1}}],["integral",{"2":{"36":1}}],["intended",{"2":{"10":1,"135":2,"136":1}}],["intermediate",{"2":{"47":1}}],["inter2",{"2":{"47":15}}],["inter1",{"2":{"47":23}}],["interpreted",{"2":{"40":1}}],["interpolation",{"2":{"9":1,"10":1,"39":1,"40":2,"144":1}}],["interpolated",{"2":{"9":3,"10":3,"40":17,"144":1}}],["interpolate",{"2":{"4":2,"9":2,"10":4,"38":1,"39":2,"40":25}}],["interest",{"2":{"40":1,"60":1}}],["internal",{"2":{"39":1}}],["internals",{"2":{"24":1}}],["inter",{"2":{"10":3,"45":21,"50":1,"51":1,"53":5,"54":4}}],["interface",{"0":{"135":1},"2":{"10":2,"20":1,"130":1,"134":1,"135":4,"136":1,"150":1,"164":1}}],["interacted",{"2":{"91":1}}],["interaction",{"0":{"91":1},"2":{"91":2}}],["interactions",{"2":{"45":1,"56":3,"91":15}}],["interactive",{"2":{"13":1,"14":1}}],["interacting",{"2":{"10":1,"53":1,"91":2}}],["interacts",{"2":{"7":1,"10":1,"91":3,"99":1,"100":1,"103":3,"104":1,"105":1}}],["interact",{"2":{"7":2,"10":2,"55":1,"56":1,"82":1,"91":5,"94":1,"99":1,"100":1,"102":1,"103":2,"104":2,"105":1}}],["interior",{"2":{"7":6,"10":7,"34":9,"36":1,"40":7,"44":5,"45":1,"56":18,"65":1,"66":1,"68":1,"69":3,"72":5,"73":1,"74":2,"78":2,"79":1,"80":1,"83":2,"85":2,"86":6,"87":3,"91":15,"99":1,"100":3,"103":1,"104":2,"105":2,"109":1,"110":3,"115":2,"120":2,"133":1,"136":1}}],["interiors",{"2":{"7":6,"10":7,"40":20,"65":1,"66":1,"68":1,"78":1,"79":1,"82":1,"83":1,"88":1,"91":5,"93":1,"94":1,"99":1,"100":1,"102":1,"103":2,"104":1,"109":1,"110":1,"113":3,"114":3}}],["intersectingpolygons",{"2":{"10":3}}],["intersecting",{"0":{"137":1},"1":{"138":1,"139":1},"2":{"10":4,"31":1,"45":2,"56":2,"136":4,"137":1,"139":4}}],["intersections",{"0":{"54":1},"2":{"45":2,"47":2,"52":1,"53":2,"54":1,"56":1,"91":2}}],["intersection",{"0":{"53":1,"92":1},"1":{"93":1,"94":1},"2":{"2":1,"4":2,"7":3,"10":19,"15":4,"23":1,"31":1,"45":38,"47":6,"50":3,"51":4,"52":4,"53":15,"54":73,"55":2,"56":2,"80":2,"91":6,"93":1,"97":5}}],["intersect",{"2":{"7":8,"10":11,"45":4,"47":3,"51":2,"53":1,"54":1,"55":1,"56":5,"65":1,"66":2,"68":1,"69":1,"79":1,"83":1,"86":1,"88":1,"91":4,"93":2,"97":1,"109":1,"110":2,"113":3,"114":3,"138":1,"139":4}}],["intersects",{"0":{"93":1},"2":{"4":2,"7":3,"10":6,"31":1,"45":1,"54":2,"56":2,"80":2,"92":1,"93":4,"94":4,"97":5,"115":1,"139":2,"168":1}}],["into",{"2":{"9":1,"10":7,"17":1,"26":1,"34":1,"37":1,"40":1,"44":4,"45":2,"50":1,"51":1,"53":1,"91":1,"121":4,"125":1,"130":6,"139":1,"150":1,"157":1,"161":2,"163":2,"168":1}}],["int64",{"2":{"5":6,"10":6,"132":6,"151":1,"152":1,"154":1,"160":6,"163":14}}],["info",{"2":{"144":1}}],["information",{"0":{"165":1},"2":{"10":1,"29":1,"40":1,"45":2,"46":1,"54":1,"91":1,"162":1,"165":3,"167":2}}],["infinity",{"2":{"91":1,"97":1}}],["inf",{"2":{"2":1,"5":1,"50":2,"151":1,"154":3}}],["in",{"0":{"23":1},"2":{"0":1,"2":2,"5":6,"7":3,"8":1,"9":4,"10":49,"13":6,"14":2,"17":2,"18":4,"20":1,"23":3,"24":2,"25":1,"26":3,"27":1,"29":1,"30":1,"31":2,"34":7,"36":1,"37":3,"38":2,"40":22,"41":1,"43":2,"44":5,"45":72,"47":31,"50":6,"51":9,"52":3,"53":5,"54":29,"55":11,"56":28,"59":6,"60":6,"62":1,"63":17,"65":2,"66":1,"69":10,"72":1,"73":1,"74":1,"75":1,"76":1,"79":1,"80":7,"83":9,"85":1,"86":1,"87":1,"89":1,"90":1,"91":135,"93":2,"94":1,"96":1,"97":11,"99":1,"100":11,"104":1,"106":1,"107":1,"109":1,"110":10,"113":3,"114":3,"116":1,"117":1,"120":4,"121":10,"122":3,"123":1,"125":3,"128":2,"129":1,"130":12,"134":1,"135":1,"136":2,"137":1,"139":7,"140":2,"141":1,"142":3,"143":1,"144":2,"145":2,"146":14,"147":7,"148":1,"150":5,"151":2,"152":4,"153":1,"154":5,"155":1,"156":4,"157":1,"158":1,"159":4,"160":2,"161":8,"162":1,"163":2,"164":6,"167":2,"168":4,"169":3,"170":1,"171":1}}],["rd",{"2":{"150":3}}],["rdbu",{"2":{"59":1}}],["rhumb",{"2":{"120":2}}],["runner",{"2":{"164":1}}],["running",{"2":{"130":3}}],["run",{"2":{"130":8,"170":1}}],["runs",{"2":{"54":2,"119":1}}],["rule",{"2":{"45":1}}],["rules",{"2":{"45":1}}],["right=2",{"2":{"45":1}}],["right",{"2":{"40":1,"45":4,"50":1,"60":1,"120":1,"152":19,"154":5,"163":1,"168":1}}],["ring4",{"2":{"165":2}}],["ring3",{"2":{"164":1}}],["ring2",{"2":{"163":2}}],["ring1",{"2":{"163":2}}],["ring",{"2":{"2":1,"8":7,"10":13,"31":1,"34":3,"37":2,"40":1,"43":1,"44":4,"45":12,"47":13,"56":3,"60":5,"63":4,"71":1,"72":2,"73":5,"85":1,"87":1,"91":2,"102":1,"103":1,"104":3,"112":1,"113":2,"114":4,"120":3,"121":11,"131":2,"132":1,"133":14,"134":1,"163":1}}],["rings",{"0":{"73":1,"87":1,"104":1,"114":1,"131":1},"1":{"132":1,"133":1},"2":{"2":2,"8":4,"10":6,"37":1,"44":1,"45":3,"54":1,"63":7,"119":1,"121":5,"133":1,"136":1,"150":1}}],["rtrees",{"2":{"20":1}}],["r+y",{"2":{"13":2,"14":1}}],["r+x",{"2":{"13":2,"14":1}}],["ry",{"2":{"13":3,"14":3}}],["rx",{"2":{"13":3,"14":3}}],["round",{"2":{"150":1,"152":1,"154":1}}],["routines",{"2":{"11":1}}],["row",{"2":{"130":3}}],["rows",{"2":{"130":2}}],["robust",{"0":{"15":1}}],["rotate",{"2":{"47":1}}],["rotation",{"2":{"5":1,"10":1,"160":1}}],["rotations",{"2":{"5":3,"10":3,"160":3}}],["rotmatrix2d",{"2":{"150":1}}],["rotmatrix",{"2":{"5":1,"10":1,"160":1}}],["rᵢ₋₁",{"2":{"40":20}}],["rᵢ∗rᵢ₊₁+sᵢ⋅sᵢ₊₁",{"2":{"10":1}}],["rᵢ₊₁",{"2":{"10":1,"40":29}}],["rᵢ",{"2":{"10":2,"40":49}}],["ramer",{"2":{"152":1}}],["raster",{"0":{"121":1},"2":{"121":4}}],["ray",{"2":{"91":4}}],["rawcdn",{"2":{"150":1}}],["raw",{"2":{"18":1}}],["range",{"2":{"13":8,"14":4,"121":1,"130":4}}],["ranges",{"2":{"10":1,"121":2}}],["randomly",{"2":{"169":2}}],["random",{"2":{"150":2}}],["rand",{"2":{"10":1,"121":1,"169":2}}],["rather",{"2":{"10":1,"121":1,"138":1}}],["ratio",{"2":{"10":7,"54":1,"146":1,"150":1,"151":4,"152":6,"153":4,"154":11}}],["radii",{"2":{"10":1,"146":1}}],["radius`",{"2":{"146":1}}],["radius",{"2":{"10":7,"40":13,"146":4}}],["radialdistance",{"0":{"151":1},"2":{"4":1,"10":2,"148":1,"150":4,"151":4}}],["rrayscore",{"2":{"5":1,"10":1,"160":1}}],["rring",{"2":{"5":1,"10":1,"160":1}}],["rewrap",{"2":{"130":3}}],["req",{"2":{"91":44}}],["requirment",{"2":{"137":1}}],["requirments",{"2":{"91":5}}],["requirement",{"2":{"131":1}}],["required",{"2":{"69":3,"83":3,"100":3,"110":3,"145":1,"162":1}}],["require",{"2":{"68":2,"69":6,"83":3,"91":32,"100":3,"110":3}}],["requires",{"2":{"41":1,"63":1,"65":1,"69":2,"72":3,"73":3,"74":1,"83":1,"86":3,"87":2,"88":1,"100":1,"103":3,"104":1,"105":1,"109":1,"110":1,"113":3,"114":3,"115":1,"143":1,"146":1,"159":1}}],["requests",{"2":{"25":1,"27":1}}],["reflected",{"2":{"150":3}}],["ref",{"2":{"59":1}}],["referring",{"2":{"91":1}}],["refer",{"2":{"10":1,"121":1}}],["referece",{"2":{"5":2,"142":2}}],["references",{"2":{"10":1,"40":1}}],["reference",{"0":{"164":1,"165":1},"2":{"4":1,"162":2,"164":1}}],["reveal",{"2":{"56":1}}],["reveals",{"2":{"56":1}}],["reverse",{"2":{"36":1,"39":1,"40":1,"45":2,"163":2}}],["rev",{"2":{"55":1}}],["render",{"2":{"39":1}}],["rendering",{"2":{"39":3,"40":1}}],["rename",{"2":{"3":1}}],["regardless",{"2":{"54":1,"91":1}}],["regions",{"2":{"52":3,"54":5,"55":1,"56":3,"91":2,"170":1}}],["region",{"2":{"41":2,"54":3,"56":2,"170":1}}],["register",{"2":{"31":3,"40":3}}],["regular",{"0":{"15":1}}],["readable",{"2":{"167":1}}],["readability",{"2":{"45":1}}],["read",{"2":{"150":2,"164":2}}],["reached",{"2":{"130":4}}],["reaches",{"2":{"128":1}}],["reach",{"2":{"128":1}}],["reasons",{"2":{"159":1}}],["reason",{"2":{"24":1,"131":1,"137":1,"158":1}}],["real`",{"2":{"146":1,"147":1}}],["really",{"2":{"37":1,"91":1,"121":1,"158":1}}],["real=1",{"2":{"10":2,"146":2}}],["real=6378137`",{"2":{"146":1}}],["real=6378137",{"2":{"10":2,"146":1}}],["real",{"0":{"170":1},"2":{"9":1,"10":13,"34":1,"40":45,"44":2,"54":1,"146":3,"147":1,"154":5,"168":1}}],["related",{"2":{"123":1}}],["relation",{"2":{"45":2}}],["relations",{"2":{"31":10,"80":1,"97":1}}],["relationship",{"2":{"23":1,"168":2}}],["relative",{"2":{"40":3}}],["relevant",{"2":{"3":1}}],["reducing",{"2":{"130":1}}],["reduced",{"2":{"151":1,"152":1,"153":1}}],["reduces",{"2":{"19":1,"56":1}}],["reduce",{"2":{"5":1,"10":1,"121":1,"130":2,"135":1}}],["redundant",{"2":{"45":1}}],["red",{"2":{"14":1,"43":2,"59":1,"68":1,"78":1,"93":1,"163":1,"164":1,"169":2}}],["removal",{"2":{"45":1}}],["removes",{"2":{"45":1,"123":1}}],["removed",{"2":{"45":3,"52":5,"121":1}}],["remove",{"2":{"37":1,"45":33,"47":1,"50":2,"51":5,"53":5,"55":2,"139":2,"151":1,"152":3,"154":4}}],["removing",{"2":{"10":3,"45":1,"52":1,"151":1,"152":1,"153":1}}],["remainingnode",{"2":{"121":3}}],["remaining",{"2":{"45":1,"63":1,"91":2,"152":1}}],["remain",{"2":{"5":1,"10":9,"130":1,"150":2}}],["resolution",{"2":{"164":1}}],["resolved",{"2":{"121":1}}],["reset",{"2":{"45":1}}],["resize",{"2":{"13":1,"14":1,"45":2}}],["resampled",{"2":{"10":1,"147":1}}],["respectivly",{"2":{"97":1}}],["respectively",{"2":{"45":1,"130":1,"163":1}}],["respect",{"2":{"10":2,"53":1,"54":1,"91":6}}],["rest",{"2":{"10":1,"40":2,"55":1}}],["resulting",{"2":{"50":1,"56":1,"121":1,"169":1}}],["results",{"2":{"7":2,"10":2,"54":1,"80":1,"97":1,"130":2,"132":1,"152":25,"163":3}}],["result",{"2":{"5":2,"7":5,"8":5,"10":13,"19":1,"34":1,"37":2,"47":1,"54":15,"60":2,"66":1,"69":1,"79":1,"94":1,"110":1,"130":2,"146":3,"154":6}}],["recieves",{"2":{"130":2}}],["recucing",{"2":{"130":1}}],["recursive",{"2":{"128":1}}],["recursively",{"2":{"8":1,"10":1,"128":1,"141":1}}],["recalculate",{"2":{"129":1}}],["recent",{"2":{"45":1,"52":1,"54":1,"56":1}}],["rect",{"2":{"33":3,"36":5,"46":3,"59":7}}],["rectangle",{"2":{"33":2,"36":2,"39":2,"46":2,"47":1,"59":2,"145":5,"146":8,"169":2}}],["recommended",{"2":{"22":1}}],["reconstructing",{"2":{"150":1}}],["reconstructed",{"2":{"18":1}}],["reconstruct",{"2":{"4":2,"5":1,"10":3,"18":1,"125":2,"130":29}}],["re",{"2":{"5":1,"10":1,"17":1,"160":1,"162":1,"164":1}}],["retreivable",{"2":{"5":1,"142":1}}],["returnval",{"2":{"91":9}}],["returntype",{"2":{"19":1}}],["returning",{"2":{"18":1,"41":1,"52":2}}],["return",{"0":{"22":1},"2":{"5":1,"7":18,"8":2,"10":37,"13":3,"14":3,"23":2,"30":1,"34":5,"37":5,"40":20,"41":1,"44":4,"45":36,"47":12,"50":12,"51":5,"52":4,"53":4,"54":18,"55":6,"56":9,"60":8,"63":30,"66":1,"69":1,"75":2,"76":2,"79":1,"80":18,"83":2,"89":2,"90":2,"91":71,"93":1,"94":1,"97":28,"100":1,"102":2,"106":2,"107":2,"110":1,"116":2,"117":2,"120":10,"121":12,"130":27,"131":1,"133":4,"135":6,"136":2,"139":2,"140":2,"142":1,"147":4,"150":3,"151":1,"152":5,"153":3,"154":7,"155":2,"159":3,"160":2,"161":8}}],["returned",{"2":{"5":1,"10":10,"22":2,"23":1,"45":3,"50":1,"51":2,"53":2,"54":2,"55":2,"121":1,"125":1,"130":2,"142":1,"150":1,"158":1}}],["returns",{"2":{"5":1,"7":5,"8":4,"9":3,"10":23,"18":1,"22":2,"34":1,"37":2,"40":6,"44":3,"45":4,"47":6,"50":1,"51":1,"54":1,"55":1,"60":8,"62":1,"65":2,"66":1,"69":1,"78":2,"79":1,"82":1,"91":4,"94":1,"97":2,"110":1,"121":2,"130":2,"147":1,"155":1,"168":1}}],["rebuilt",{"2":{"5":1,"10":2,"125":1,"130":2}}],["rebuilding",{"2":{"130":1}}],["rebuild",{"2":{"4":2,"10":4,"125":4,"128":1,"130":10,"147":1,"150":2}}],["replace",{"2":{"45":1,"121":2,"152":1}}],["replaced",{"2":{"22":1}}],["repl",{"2":{"41":1,"143":1,"146":1}}],["repeat",{"2":{"44":1,"45":3,"63":6}}],["repeating",{"2":{"37":1,"56":1}}],["repeated",{"2":{"2":1,"8":3,"10":3,"34":2,"40":1,"45":2,"56":2,"60":2,"63":4,"91":1}}],["represented",{"2":{"169":1}}],["represent",{"2":{"17":1,"40":1,"45":4,"63":1}}],["representing",{"2":{"10":1,"52":1,"54":1,"56":1,"59":1,"63":1,"170":1}}],["represents",{"2":{"10":1,"135":2,"136":1}}],["reprojects",{"2":{"142":1}}],["reprojection",{"0":{"142":1},"1":{"143":1}}],["reproject",{"2":{"4":1,"5":4,"31":2,"123":1,"142":6,"143":2}}],["r",{"2":{"2":1,"10":1,"13":11,"14":12,"146":1,"154":2,"163":6,"164":2,"165":4}}],["o",{"2":{"130":24}}],["odd",{"2":{"91":1}}],["own",{"2":{"56":1,"123":2}}],["occur",{"2":{"54":1}}],["occurs",{"2":{"54":1}}],["occupied",{"2":{"36":1}}],["old",{"2":{"45":8,"130":3}}],["ourselves",{"2":{"146":1}}],["our",{"2":{"24":1,"146":1,"163":4,"164":3,"169":1}}],["out=3",{"2":{"91":1}}],["out=4",{"2":{"53":1}}],["out`",{"2":{"53":1,"91":1}}],["out",{"2":{"10":3,"45":12,"47":23,"54":6,"56":4,"59":5,"69":4,"80":1,"83":3,"91":102,"97":2,"100":4,"110":4,"120":1,"130":1,"147":1,"159":2}}],["outside",{"2":{"7":2,"8":1,"10":3,"45":3,"47":1,"52":2,"54":4,"56":3,"59":2,"60":1,"68":1,"79":1,"82":1,"91":12,"97":3,"115":1}}],["outputs",{"2":{"45":1}}],["output",{"2":{"7":8,"8":1,"10":18,"18":1,"23":1,"50":2,"51":1,"53":1,"54":1,"55":1,"56":2,"63":1,"66":1,"69":1,"79":1,"83":1,"94":1,"97":1,"100":1,"110":1,"120":2,"150":1,"154":1,"161":1}}],["outermost",{"2":{"130":1}}],["outer",{"2":{"5":1,"10":1,"128":1,"130":2,"168":1,"169":1}}],["omit",{"2":{"10":1,"146":1}}],["obtain",{"2":{"130":1}}],["obtained",{"2":{"23":1}}],["observable",{"2":{"14":2}}],["obs",{"2":{"14":10}}],["obviously",{"2":{"8":1,"10":1,"141":1}}],["objects",{"2":{"5":4,"8":1,"10":17,"125":3,"128":5,"130":8,"141":1,"144":1,"150":2,"155":1}}],["object",{"2":{"5":4,"8":1,"9":1,"10":8,"20":1,"40":1,"59":1,"91":4,"125":1,"128":5,"130":3,"141":1,"142":3,"146":1,"150":1,"155":1}}],["obj",{"2":{"5":4,"8":1,"10":17,"125":3,"130":10,"140":2,"141":1,"146":3,"150":3,"155":1,"160":1}}],["others",{"2":{"41":1,"139":1}}],["otherwise",{"2":{"8":2,"10":3,"41":1,"45":1,"52":1,"54":1,"60":2,"121":1,"140":1,"143":1,"146":1,"161":1}}],["other",{"0":{"8":1,"10":1},"2":{"7":4,"10":12,"34":1,"45":5,"51":1,"53":1,"54":1,"55":2,"56":3,"60":2,"63":2,"65":1,"71":1,"91":8,"93":1,"96":1,"97":4,"99":2,"100":2,"103":1,"112":1,"121":1,"125":1,"128":1,"130":1,"136":2,"137":1,"139":2,"150":2,"152":2,"156":1,"157":1,"159":1,"164":1,"168":1,"171":1}}],["ogc",{"0":{"7":1}}],["over=3",{"2":{"53":1}}],["over`",{"2":{"53":1}}],["overflow",{"2":{"50":1}}],["overhead",{"2":{"22":1,"130":2}}],["override",{"2":{"10":1,"40":1}}],["over",{"2":{"5":1,"10":3,"36":2,"37":1,"44":3,"45":5,"47":1,"53":1,"54":11,"56":1,"69":1,"80":1,"83":1,"91":15,"97":2,"100":1,"110":1,"130":22,"163":3}}],["overlapping",{"2":{"45":11,"54":4,"56":6}}],["overlaps",{"0":{"95":1,"96":1},"1":{"96":1,"97":1},"2":{"4":10,"7":5,"10":13,"31":1,"54":1,"95":1,"96":3,"97":30,"121":1,"168":1}}],["overlap",{"2":{"2":1,"7":4,"10":4,"45":2,"54":8,"56":2,"69":1,"78":1,"91":2,"96":5,"97":6,"110":1,"137":1}}],["ops",{"2":{"130":1}}],["optimisation",{"2":{"91":1}}],["optimise",{"2":{"80":1}}],["options",{"2":{"14":1,"45":1}}],["optional",{"2":{"8":5,"10":6,"34":1,"37":2,"47":1,"60":2}}],["open",{"2":{"45":1,"132":1,"164":1}}],["operates",{"2":{"130":1,"131":1,"137":1}}],["operate",{"2":{"18":1,"29":1,"130":1}}],["operations",{"0":{"23":1},"2":{"23":1,"26":1,"54":1,"56":1,"123":1}}],["operation",{"2":{"10":3,"45":1,"123":1,"136":2,"139":2,"159":2}}],["opposite",{"2":{"7":5,"10":5,"45":2,"52":1,"54":2,"56":1,"66":2,"69":1,"79":2,"94":2,"110":1}}],["op",{"2":{"5":3,"10":3,"19":2,"44":1,"130":35}}],["org",{"2":{"51":1,"53":1,"55":1,"91":2,"152":1}}],["organise",{"2":{"3":1}}],["orange",{"2":{"49":1,"59":1,"62":2,"65":2,"82":2,"96":2,"109":2}}],["oroginal",{"2":{"130":2}}],["oro",{"2":{"11":2}}],["originate",{"2":{"56":1}}],["originals",{"2":{"22":1}}],["original",{"2":{"10":4,"18":1,"22":1,"45":9,"50":5,"51":1,"53":1,"56":4,"128":1,"130":1,"135":1,"140":2,"147":1,"149":4,"150":1}}],["orignal",{"2":{"45":1}}],["orient",{"0":{"13":1},"1":{"14":1,"15":1},"2":{"13":7,"14":12,"45":15,"54":53}}],["orientation",{"0":{"118":1},"1":{"119":1,"120":1},"2":{"3":1,"10":2,"31":1,"37":1,"45":10,"47":2,"51":1,"53":2,"54":2,"55":1,"91":16,"119":1,"150":1}}],["ordered",{"2":{"36":1}}],["order",{"2":{"5":4,"7":1,"8":2,"10":6,"34":1,"36":1,"37":2,"40":1,"45":4,"54":1,"56":1,"60":2,"63":3,"66":1,"69":1,"79":1,"94":1,"130":2,"142":2,"150":1,"168":1}}],["or",{"0":{"24":1},"2":{"5":11,"7":3,"8":10,"10":53,"18":1,"20":1,"22":1,"23":1,"25":1,"27":1,"29":2,"31":1,"34":4,"37":1,"40":1,"41":1,"43":2,"44":4,"45":24,"46":1,"50":1,"51":1,"52":3,"53":2,"54":9,"55":1,"56":2,"59":2,"60":4,"63":3,"65":1,"69":1,"71":2,"72":1,"73":1,"74":1,"75":1,"76":1,"82":2,"85":2,"86":3,"87":2,"88":1,"89":1,"90":1,"91":26,"93":2,"94":1,"96":1,"97":2,"99":1,"100":1,"106":1,"107":1,"110":1,"112":2,"116":1,"117":1,"119":2,"120":3,"121":7,"123":3,"125":1,"127":2,"129":1,"130":9,"131":1,"133":1,"135":5,"136":2,"142":2,"143":1,"144":2,"146":2,"147":2,"148":1,"150":3,"152":2,"154":2,"155":1,"157":3,"161":2,"168":1,"170":2}}],["on=2",{"2":{"91":1}}],["on`",{"2":{"91":1}}],["once",{"2":{"80":1,"97":1,"121":1}}],["onto",{"2":{"60":1}}],["ones",{"2":{"138":1}}],["oneunit",{"2":{"40":1}}],["one",{"2":{"5":1,"7":9,"10":14,"23":1,"34":4,"37":2,"39":1,"40":1,"44":1,"45":5,"47":3,"51":1,"52":1,"53":1,"54":32,"55":2,"56":2,"59":2,"68":1,"75":1,"80":1,"82":1,"91":18,"96":1,"97":18,"99":2,"100":2,"103":3,"104":2,"105":2,"106":1,"107":1,"109":1,"110":1,"116":1,"120":1,"121":5,"130":1,"138":1,"142":1,"146":1,"154":1,"160":1,"164":1,"168":1}}],["only",{"2":{"4":1,"9":1,"10":10,"23":1,"37":2,"39":2,"40":1,"41":1,"44":2,"45":4,"47":3,"50":1,"51":1,"53":1,"54":1,"55":1,"60":2,"63":3,"96":3,"97":1,"99":1,"121":2,"130":2,"138":1,"144":1,"145":1,"147":2,"156":1,"159":2,"165":1,"170":1,"171":1}}],["on",{"0":{"164":1},"2":{"2":1,"5":2,"8":3,"10":11,"18":1,"20":1,"23":2,"25":3,"27":3,"29":2,"34":5,"37":3,"39":1,"40":2,"44":3,"45":28,"47":8,"50":1,"51":1,"52":5,"53":1,"54":4,"55":1,"56":2,"59":1,"60":3,"63":2,"68":1,"69":7,"71":2,"72":3,"73":3,"74":1,"80":4,"83":6,"85":4,"86":1,"87":1,"91":125,"97":9,"100":7,"102":2,"110":7,"112":2,"113":1,"114":1,"121":3,"123":1,"125":1,"130":15,"131":1,"133":1,"136":1,"137":1,"144":1,"146":1,"152":1,"158":2,"162":1,"164":3,"165":1,"167":1,"168":4,"169":1,"170":2,"171":2}}],["often",{"2":{"164":1}}],["offers",{"2":{"163":1}}],["offer",{"2":{"146":1}}],["offset",{"2":{"34":8,"63":1}}],["off",{"2":{"8":1,"10":1,"45":4,"63":1,"91":6,"130":1}}],["of",{"2":{"0":2,"2":4,"5":7,"7":29,"8":66,"9":5,"10":193,"17":3,"18":5,"19":1,"20":2,"22":1,"23":2,"24":2,"25":1,"26":1,"27":1,"29":3,"33":1,"34":38,"36":5,"37":28,"38":9,"39":1,"40":13,"41":1,"43":3,"44":12,"45":84,"46":5,"47":31,"50":5,"51":12,"52":13,"53":10,"54":48,"55":9,"56":20,"59":6,"60":18,"62":2,"63":19,"65":4,"66":5,"68":6,"69":18,"71":1,"72":5,"73":5,"74":1,"75":2,"76":1,"79":5,"80":1,"82":3,"83":14,"85":1,"86":1,"87":1,"89":2,"90":1,"91":85,"93":1,"94":3,"96":1,"97":13,"99":2,"100":15,"102":3,"103":7,"104":5,"105":1,"106":2,"107":1,"109":4,"110":18,"112":3,"113":6,"114":6,"115":4,"116":1,"117":1,"119":2,"120":3,"121":19,"122":2,"123":3,"125":1,"128":5,"129":2,"130":26,"131":1,"132":1,"136":2,"137":4,"139":4,"140":3,"142":1,"144":2,"145":2,"146":5,"147":2,"150":8,"152":4,"153":2,"154":1,"155":1,"157":2,"159":4,"161":2,"163":6,"164":4,"165":2,"166":1,"167":4,"168":3,"169":4,"170":2}}],["2pi",{"2":{"163":1,"164":1,"165":1}}],["2nd",{"2":{"54":6}}],["2335447787454",{"2":{"165":1}}],["233544778745394",{"2":{"165":2}}],["23",{"2":{"39":3,"91":1}}],["23699059147",{"2":{"15":1}}],["28",{"2":{"39":2}}],["28083",{"2":{"15":2}}],["2658011835867806",{"2":{"163":1}}],["26745668457025",{"2":{"163":1}}],["267456684570245",{"2":{"163":3}}],["26",{"2":{"39":5,"91":2}}],["24989584635339165",{"2":{"163":1}}],["24279488312757858",{"2":{"163":4}}],["24",{"2":{"39":7,"91":1,"165":9}}],["274364",{"2":{"51":1,"53":1,"55":1}}],["274363",{"2":{"51":1,"53":1,"55":1}}],["27",{"2":{"39":2}}],["275543",{"2":{"10":6,"161":6}}],["2d",{"2":{"25":1,"27":1,"144":1}}],["2^",{"2":{"14":1}}],["2158594260436434",{"2":{"163":1}}],["215118",{"2":{"10":4,"161":4}}],["21664550952386064",{"2":{"163":4}}],["21",{"2":{"39":4,"91":2,"165":40}}],["21427",{"2":{"11":5}}],["25",{"2":{"39":3,"65":1,"91":1,"109":1,"165":12}}],["258",{"2":{"11":1}}],["25px",{"2":{"10":2}}],["257223563`",{"2":{"146":1}}],["257223563",{"2":{"10":2,"146":1}}],["295828190107045",{"2":{"165":1}}],["29582819010705",{"2":{"165":2}}],["299820032397223",{"2":{"163":1}}],["29",{"2":{"39":3}}],["298",{"2":{"10":2,"146":2}}],["29th",{"0":{"1":1},"1":{"2":1,"3":1}}],["22",{"2":{"39":3,"91":1}}],["22168",{"2":{"7":1,"10":3,"53":1,"54":1,"93":1,"94":1}}],["224758",{"2":{"7":1,"10":3,"53":1,"54":1,"93":1,"94":1}}],["2",{"2":{"5":19,"7":9,"9":1,"10":49,"13":1,"14":1,"15":3,"25":2,"27":2,"34":3,"37":1,"39":6,"40":32,"43":2,"44":4,"45":10,"46":6,"47":7,"49":1,"50":2,"54":2,"55":1,"59":1,"60":3,"63":4,"66":2,"79":2,"80":2,"82":2,"83":3,"91":11,"110":2,"120":2,"121":23,"130":5,"139":1,"147":1,"150":5,"152":7,"153":7,"154":5,"160":18,"161":11,"163":7,"164":6,"165":10,"166":1}}],["20340",{"2":{"167":1}}],["20682326747054",{"2":{"165":1}}],["206823267470536",{"2":{"165":2}}],["20093817218219",{"2":{"163":1}}],["200938172182195",{"2":{"163":3}}],["2018",{"2":{"91":1}}],["2017",{"2":{"10":1,"40":1}}],["20",{"2":{"39":3,"91":2,"163":60,"165":1}}],["2024",{"0":{"0":1,"1":1},"1":{"2":1,"3":1}}],["20th",{"0":{"0":1}}],["xticklabelsvisible",{"2":{"164":1}}],["xticklabelrotation",{"2":{"13":2}}],["xoffset",{"2":{"163":4,"165":1}}],["x=x",{"2":{"161":1}}],["x`",{"2":{"130":1}}],["xvec",{"2":{"121":4}}],["xbounds",{"2":{"121":4}}],["xhalf",{"2":{"121":3}}],["xlast",{"2":{"60":3}}],["xfirst",{"2":{"60":5}}],["x0",{"2":{"60":5}}],["xn",{"2":{"47":4}}],["xind+1",{"2":{"121":1}}],["xind",{"2":{"121":2}}],["xinterior",{"2":{"44":2}}],["xi−xi−1",{"2":{"10":1}}],["xcentroid",{"2":{"44":13}}],["xrange",{"2":{"39":3,"59":2}}],["xautolimits",{"2":{"39":2}}],["xp2",{"2":{"34":5}}],["x2",{"2":{"10":3,"40":4,"44":2,"47":18,"60":8,"80":10,"91":5,"97":4,"121":5,"147":6,"161":2}}],["x26",{"2":{"10":4,"34":2,"37":6,"40":1,"41":4,"45":58,"47":36,"51":4,"52":4,"54":24,"56":2,"60":3,"63":14,"75":2,"76":2,"80":48,"89":2,"90":2,"91":170,"97":22,"102":2,"106":2,"107":2,"116":2,"117":2,"120":4,"121":12,"135":2,"139":6,"143":2,"146":2,"152":10,"153":2,"161":4,"168":1}}],["x1",{"2":{"10":4,"40":3,"44":2,"47":22,"60":8,"80":11,"91":6,"97":5,"121":5,"147":7,"161":2}}],["xs",{"2":{"10":3,"47":4,"121":30,"161":4}}],["xmax",{"2":{"10":1,"46":2,"47":48}}],["xmin",{"2":{"10":1,"46":2,"47":49}}],["x3c",{"2":{"9":1,"10":36,"31":1,"34":4,"37":2,"40":66,"45":17,"47":11,"50":3,"51":1,"53":1,"54":6,"55":1,"59":1,"60":13,"63":2,"80":33,"91":13,"97":10,"120":1,"121":4,"125":2,"130":20,"133":2,"136":3,"139":5,"146":2,"151":2,"152":6,"153":3,"154":9,"157":4,"158":2,"171":1}}],["xy`",{"2":{"142":1}}],["xy",{"2":{"5":4,"40":1,"142":3}}],["x",{"2":{"0":1,"2":5,"5":4,"8":1,"10":6,"11":6,"13":11,"14":10,"15":4,"34":9,"37":2,"39":8,"43":1,"44":10,"45":21,"46":1,"47":8,"50":6,"52":9,"54":18,"56":9,"59":2,"60":7,"63":3,"80":21,"91":16,"97":7,"120":11,"121":2,"123":2,"130":17,"135":2,"140":4,"141":2,"142":1,"147":2,"150":2,"152":2,"154":1,"155":2,"158":4,"160":2,"161":33,"163":6,"164":2,"165":2,"168":1,"170":2}}],["tnew",{"2":{"130":1}}],["ty",{"2":{"121":3}}],["typing",{"2":{"41":1,"143":1,"146":1}}],["typically",{"2":{"38":1,"166":1}}],["typemax",{"2":{"60":1,"121":9}}],["typeof",{"2":{"19":1,"40":3,"130":2,"157":1,"171":1}}],["type2",{"2":{"10":2,"63":4}}],["type1",{"2":{"10":2,"63":5}}],["types",{"0":{"126":1,"156":1},"1":{"157":1,"158":1,"159":1},"2":{"10":4,"23":1,"24":1,"31":1,"40":3,"47":1,"50":1,"91":3,"150":1,"156":3,"158":1,"168":1}}],["type",{"2":{"8":11,"9":1,"10":61,"11":1,"22":2,"23":1,"24":2,"30":2,"34":9,"37":11,"39":1,"40":8,"44":8,"45":21,"47":8,"50":6,"51":7,"52":6,"53":8,"54":19,"55":7,"56":5,"60":28,"63":2,"125":2,"130":42,"134":1,"135":6,"136":6,"140":1,"146":1,"147":1,"150":3,"155":1,"157":3,"158":5,"159":1,"161":3}}],["tx",{"2":{"121":3}}],["tᵢ",{"2":{"40":1}}],["tutorial",{"2":{"162":1,"168":1}}],["tutorials",{"2":{"26":2}}],["tups",{"2":{"133":4}}],["tuplepoint",{"2":{"31":3,"161":1}}],["tuple",{"0":{"155":1},"2":{"8":1,"10":19,"31":2,"40":2,"44":3,"45":5,"47":3,"50":1,"54":31,"91":17,"120":2,"121":5,"130":2,"132":6,"138":13,"145":1,"150":2,"152":1,"154":2,"161":6,"163":99,"169":2}}],["tuples",{"2":{"4":1,"10":2,"31":1,"41":1,"44":1,"45":1,"50":1,"51":3,"52":1,"53":2,"54":1,"55":4,"56":5,"133":2,"139":2,"150":2,"155":2,"170":2}}],["turf",{"2":{"120":1}}],["turned",{"2":{"121":1,"130":1}}],["turning",{"2":{"121":8}}],["turn",{"2":{"10":1,"121":1}}],["temporary",{"2":{"45":1}}],["term",{"2":{"37":1}}],["terms",{"2":{"10":1,"40":1}}],["teach",{"2":{"26":1}}],["technically",{"2":{"23":1,"131":1}}],["technique",{"2":{"11":1}}],["tell",{"2":{"18":1,"91":1,"158":1,"171":1}}],["test",{"2":{"45":1,"150":2,"159":1}}],["testing",{"0":{"15":1}}],["tests",{"2":{"2":2}}],["t2",{"2":{"10":5,"40":47,"70":1,"80":2,"101":1,"111":1}}],["t1",{"2":{"10":6,"40":51,"80":2}}],["t=float64",{"2":{"8":1,"10":3,"44":3}}],["two",{"2":{"7":5,"8":10,"10":23,"23":2,"34":2,"36":1,"40":1,"44":1,"45":6,"47":3,"51":2,"53":1,"54":14,"55":4,"56":3,"60":5,"62":3,"63":12,"65":2,"66":1,"68":1,"78":1,"79":1,"80":1,"82":1,"91":2,"93":2,"94":2,"96":4,"97":5,"99":3,"100":1,"109":2,"121":3,"135":2,"136":1,"138":2,"139":2,"145":1,"159":1,"163":1,"168":3,"169":3}}],["task",{"2":{"130":6}}],["tasks",{"2":{"130":10}}],["taskrange",{"2":{"130":10}}],["tags",{"2":{"45":4}}],["taget",{"2":{"10":2}}],["taylor",{"2":{"10":1,"40":1}}],["table2",{"2":{"168":1}}],["table1",{"2":{"168":3}}],["tables",{"2":{"22":4,"31":1,"130":11}}],["table",{"0":{"166":1},"2":{"10":1,"18":1,"29":2,"130":12,"150":1,"166":1,"167":1,"168":1}}],["taking",{"2":{"10":3,"44":1,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1,"137":1}}],["takes",{"2":{"45":3,"168":1}}],["taken",{"2":{"20":1,"39":1}}],["take",{"2":{"5":1,"10":2,"29":1,"45":3,"51":1,"52":1,"53":1,"54":1,"56":1,"120":2,"121":2,"123":1,"142":1}}],["target=nothing",{"2":{"51":1,"53":1,"55":1}}],["target=gi",{"2":{"45":1}}],["targets",{"2":{"23":1,"34":2,"37":3,"47":3,"60":3}}],["target",{"0":{"23":1},"2":{"5":14,"10":28,"15":3,"22":2,"23":2,"40":1,"44":2,"45":1,"51":5,"52":11,"53":6,"54":10,"55":4,"56":13,"121":1,"123":1,"125":4,"128":5,"129":1,"130":144,"139":2,"142":3,"150":2,"157":3}}],["tilted",{"2":{"47":1}}],["tie",{"2":{"34":1}}],["timings",{"2":{"13":5}}],["timing",{"2":{"13":2}}],["times",{"2":{"8":1,"10":1,"141":1}}],["time",{"2":{"5":5,"13":3,"24":1,"39":1,"121":1,"142":4,"159":1,"163":1,"164":1,"165":2,"169":1,"170":1}}],["title",{"2":{"13":2,"39":2,"121":1,"146":1,"150":2}}],["tip",{"2":{"5":1,"9":1,"10":1,"40":1,"142":1,"168":1}}],["tree",{"2":{"168":1}}],["treating",{"2":{"150":1}}],["treated",{"2":{"91":5,"163":1}}],["treats",{"2":{"37":1,"60":1}}],["trials",{"2":{"146":2,"150":2}}],["triangles",{"2":{"38":1}}],["triangle",{"2":{"10":1,"38":4,"153":4,"169":1}}],["trivially",{"2":{"123":1}}],["try",{"2":{"57":3,"121":1,"128":1,"130":9,"170":1}}],["tr",{"2":{"37":3}}],["trues",{"2":{"139":3}}],["true",{"0":{"24":1},"2":{"5":5,"7":25,"8":3,"10":42,"34":7,"37":1,"39":2,"41":1,"45":30,"47":6,"50":1,"51":1,"52":2,"53":1,"54":1,"55":2,"56":3,"60":4,"63":21,"65":1,"66":1,"68":2,"69":6,"71":1,"72":1,"73":4,"75":1,"76":1,"78":2,"79":1,"80":9,"82":2,"83":2,"85":1,"86":1,"87":3,"89":1,"90":1,"91":78,"93":3,"94":1,"96":2,"97":18,"99":2,"100":6,"103":1,"104":1,"106":1,"107":1,"109":2,"110":7,"112":1,"113":1,"114":4,"116":1,"117":1,"120":4,"121":5,"130":8,"139":1,"143":1,"146":1,"150":1,"158":2,"168":1,"171":1}}],["traditional",{"2":{"121":1}}],["traverse",{"2":{"45":1}}],["traced",{"2":{"45":1}}],["traces",{"2":{"45":1}}],["trace",{"2":{"45":2,"51":1,"53":1,"55":1}}],["track",{"2":{"45":3,"139":2}}],["tracing",{"2":{"10":1,"45":4,"47":1,"52":5,"54":2,"56":2}}],["transverse",{"2":{"164":1}}],["translate",{"2":{"39":2}}],["translation",{"2":{"5":2,"10":2,"150":2,"160":2,"163":3,"165":1}}],["transformations",{"2":{"31":10}}],["transformation",{"0":{"160":1},"2":{"10":1,"121":1,"134":1,"142":1,"162":1}}],["transform",{"2":{"4":2,"5":6,"10":3,"15":2,"31":1,"123":1,"142":2,"150":1,"160":4,"163":4,"165":1}}],["trait`",{"2":{"130":1}}],["trait2",{"2":{"60":10,"63":2,"85":2,"86":2,"97":2,"102":2,"104":2,"105":2}}],["trait1",{"2":{"60":12,"63":2,"85":2,"86":2,"97":2,"102":2,"104":2,"105":2}}],["traits",{"2":{"10":2,"18":1,"97":1,"128":2,"135":2,"150":2,"157":3}}],["trait",{"2":{"5":5,"7":2,"8":2,"10":17,"18":7,"20":1,"22":1,"31":1,"34":2,"37":5,"40":6,"44":7,"47":2,"50":3,"51":2,"52":2,"53":6,"54":4,"55":2,"56":2,"60":7,"63":11,"69":3,"80":2,"83":3,"91":4,"97":10,"100":3,"110":3,"120":1,"123":1,"125":2,"128":3,"130":51,"135":9,"136":1,"147":1,"150":2,"157":8,"161":7,"163":1}}],["traittarget",{"0":{"157":1},"2":{"4":1,"5":2,"10":8,"34":1,"37":1,"44":1,"47":1,"51":2,"52":4,"53":3,"54":4,"55":2,"56":4,"60":1,"123":2,"126":1,"130":11,"147":1,"150":1,"156":1,"157":20}}],["t",{"2":{"2":1,"4":1,"8":28,"10":56,"23":1,"31":8,"34":32,"37":41,"40":26,"44":38,"45":74,"47":44,"50":18,"51":12,"52":12,"53":12,"54":156,"55":10,"56":20,"60":87,"63":17,"68":1,"86":1,"91":24,"97":1,"99":1,"103":2,"104":1,"121":14,"130":10,"136":2,"139":2,"146":3,"147":5,"150":1,"155":7,"157":14,"158":2,"159":3,"161":10,"163":4,"170":1}}],["tokyo",{"2":{"170":1}}],["toy",{"2":{"168":1}}],["together",{"2":{"54":1,"56":1,"163":1,"169":1}}],["touching",{"0":{"103":1},"2":{"54":1,"56":1}}],["touch",{"0":{"104":1,"105":1,"106":1},"2":{"45":1,"99":1,"102":2,"104":1,"106":1}}],["touches",{"0":{"98":1,"99":1,"102":1},"1":{"99":1,"100":1},"2":{"4":2,"7":3,"10":3,"31":1,"98":1,"99":3,"100":11,"101":6,"102":11,"103":15,"104":9,"105":8,"106":3,"107":4,"168":1}}],["totally",{"2":{"55":1}}],["total",{"2":{"37":1,"40":2,"45":2,"47":1}}],["towards",{"2":{"25":1,"27":1}}],["topright",{"2":{"150":1}}],["topologypreserve",{"2":{"148":1}}],["topology",{"2":{"148":1}}],["top",{"2":{"20":1,"26":1,"45":1,"121":1}}],["took",{"2":{"170":1}}],["tools",{"2":{"17":1}}],["too",{"2":{"10":1,"54":1,"144":1,"147":1}}],["tol^2",{"2":{"151":1,"152":1}}],["tolerances",{"2":{"153":1,"154":29}}],["tolerance",{"2":{"151":1,"152":1,"153":1,"154":17}}],["tol",{"2":{"10":12,"146":2,"150":18,"151":7,"152":15,"153":8,"154":18}}],["todo",{"2":{"7":2,"10":2,"45":1,"54":1,"80":4,"97":1,"121":1,"130":1,"133":1,"150":1,"158":1}}],["to",{"0":{"2":1,"23":1,"26":1,"57":1,"70":1,"84":1,"101":1,"111":1},"2":{"0":2,"2":3,"3":2,"4":2,"5":22,"7":1,"8":33,"9":4,"10":141,"11":2,"13":1,"17":2,"18":9,"19":1,"20":2,"22":3,"23":4,"24":2,"25":3,"26":2,"27":3,"29":4,"30":1,"33":1,"34":8,"36":1,"37":4,"38":4,"39":1,"40":26,"41":2,"43":2,"44":5,"45":32,"46":1,"47":12,"49":1,"50":3,"51":8,"52":4,"53":8,"54":27,"55":7,"56":11,"59":6,"60":32,"62":2,"63":17,"65":1,"66":1,"68":2,"69":7,"78":3,"79":1,"80":2,"82":1,"83":7,"91":21,"93":2,"94":1,"96":3,"97":7,"99":1,"100":7,"102":1,"109":1,"110":7,"120":4,"121":16,"123":4,"125":4,"127":7,"128":6,"129":1,"130":52,"131":2,"132":3,"134":4,"135":8,"136":5,"137":3,"138":1,"139":4,"140":1,"141":3,"142":4,"143":1,"144":3,"145":3,"146":9,"147":7,"148":1,"150":4,"151":1,"152":15,"153":1,"154":2,"155":1,"156":2,"157":2,"158":6,"159":9,"160":4,"161":28,"162":4,"163":6,"164":10,"165":6,"166":7,"167":5,"168":7,"169":5,"170":2,"171":8}}],["thus",{"2":{"34":1,"37":1,"45":3,"52":1,"54":1,"56":1}}],["those",{"2":{"34":1,"45":1,"54":1,"71":1,"112":1}}],["though",{"2":{"20":1,"132":1}}],["three",{"2":{"26":1,"38":1,"54":1}}],["thread",{"2":{"130":6}}],["threading",{"0":{"130":1},"2":{"130":7,"158":1}}],["threads",{"2":{"5":1,"10":1,"130":10}}],["threaded=",{"2":{"130":9}}],["threaded=true",{"2":{"130":1}}],["threaded=false",{"2":{"37":1,"44":4,"47":2,"60":8,"130":2,"141":1,"150":1}}],["threaded==true",{"2":{"5":1,"10":1,"130":1}}],["threaded",{"2":{"5":3,"8":1,"10":7,"24":1,"34":2,"37":1,"44":3,"47":3,"60":5,"127":1,"130":49,"141":1,"147":6,"150":1,"158":2}}],["through",{"2":{"10":4,"34":1,"40":1,"45":3,"47":1,"49":1,"50":2,"69":1,"91":5,"110":1,"121":1,"128":1,"130":1,"136":2,"139":2,"152":1,"159":1,"163":1}}],["thrown",{"2":{"128":1}}],["throws",{"2":{"10":1,"159":1}}],["throw",{"2":{"8":1,"10":1,"56":1,"63":1,"121":1,"130":5}}],["than",{"2":{"5":1,"7":1,"10":11,"11":1,"45":2,"71":1,"80":1,"97":1,"112":1,"120":1,"121":2,"129":1,"130":1,"136":2,"137":1,"138":1,"139":2,"144":1,"146":2,"147":1,"151":1,"159":2}}],["that",{"2":{"2":1,"5":1,"7":3,"8":8,"10":43,"17":1,"18":4,"19":3,"20":1,"22":3,"25":1,"26":1,"27":1,"34":4,"36":2,"37":4,"40":4,"41":2,"43":2,"44":3,"45":17,"46":3,"47":5,"51":4,"52":5,"53":4,"54":14,"55":3,"56":5,"60":2,"62":1,"63":11,"65":4,"66":1,"68":2,"69":1,"79":1,"82":1,"83":1,"91":3,"93":1,"94":1,"96":2,"97":10,"99":2,"100":2,"102":2,"109":3,"110":1,"112":3,"120":1,"121":4,"123":1,"125":2,"130":4,"131":3,"132":2,"133":1,"134":3,"135":2,"136":4,"137":2,"138":3,"139":4,"142":1,"144":2,"145":2,"146":3,"147":2,"150":2,"152":1,"154":1,"157":1,"158":1,"159":1,"164":4,"165":1,"166":2,"167":3,"168":1,"169":2}}],["thing",{"0":{"30":1}}],["things",{"2":{"2":1}}],["this",{"0":{"30":1},"2":{"0":1,"4":1,"5":1,"7":1,"8":6,"9":1,"10":27,"18":1,"23":3,"24":2,"25":2,"27":2,"29":1,"31":1,"33":2,"34":6,"36":2,"37":9,"39":3,"40":11,"41":2,"43":1,"44":4,"45":26,"46":1,"47":4,"49":1,"50":5,"52":1,"54":5,"55":1,"56":2,"57":1,"59":4,"60":6,"63":4,"65":1,"66":2,"68":3,"69":3,"76":1,"78":1,"79":2,"80":1,"83":3,"90":1,"91":3,"94":2,"96":1,"97":4,"100":3,"107":1,"109":1,"110":3,"117":1,"119":1,"120":3,"121":8,"122":2,"123":2,"128":2,"130":17,"131":3,"133":3,"134":1,"135":6,"136":7,"137":4,"139":3,"140":2,"141":2,"142":4,"143":3,"144":3,"145":5,"146":5,"147":4,"148":2,"150":3,"154":9,"155":1,"156":3,"157":2,"158":3,"159":2,"160":1,"161":1,"162":1,"163":2,"164":4,"165":3,"166":3,"167":1,"168":3,"169":3,"170":3,"171":1}}],["theorem",{"2":{"60":1}}],["themselves",{"2":{"40":1}}],["them",{"2":{"10":1,"25":1,"27":1,"45":1,"121":2,"122":2,"125":1,"130":1,"132":2,"137":1,"138":1,"150":1,"163":1,"165":1,"167":3}}],["thereof",{"2":{"123":1}}],["therefore",{"2":{"59":1,"131":1}}],["there",{"2":{"10":3,"22":1,"34":1,"40":2,"41":1,"45":3,"47":1,"50":2,"52":1,"54":6,"56":1,"57":1,"91":1,"97":2,"121":3,"122":1,"123":1,"130":4,"132":1,"145":1,"154":1,"157":1,"159":1,"164":2,"167":3}}],["then",{"2":{"10":5,"18":1,"22":1,"29":1,"34":3,"40":2,"45":6,"47":1,"51":1,"53":2,"54":6,"55":2,"56":2,"57":2,"91":1,"121":2,"128":1,"130":3,"137":1,"146":2,"150":1,"164":1,"168":1,"169":1}}],["their",{"2":{"7":1,"8":1,"10":2,"40":1,"43":2,"56":1,"60":2,"88":1,"97":1,"99":1,"103":1,"104":1,"113":3,"114":3,"123":1,"130":1,"132":1,"138":1,"141":1}}],["they",{"2":{"7":3,"8":11,"10":25,"20":2,"22":1,"23":1,"24":1,"38":1,"44":2,"45":8,"47":2,"51":2,"53":1,"54":6,"55":2,"56":3,"62":3,"63":16,"69":1,"82":1,"86":2,"87":1,"88":1,"91":2,"93":1,"96":2,"97":4,"102":1,"104":1,"105":1,"113":1,"114":1,"121":6,"130":1,"131":1,"136":2,"139":2,"145":1,"154":1,"156":1,"169":1}}],["these",{"2":{"5":2,"10":5,"24":1,"34":1,"40":5,"45":3,"56":1,"62":1,"63":1,"65":1,"69":1,"78":1,"80":2,"82":1,"83":1,"93":1,"96":1,"97":1,"99":2,"100":1,"109":1,"110":1,"120":1,"121":3,"128":1,"130":2,"142":1,"146":1,"150":2,"159":1,"167":1,"168":1}}],["the",{"0":{"26":1,"29":1,"43":1},"2":{"0":5,"2":3,"3":1,"5":28,"7":64,"8":112,"9":12,"10":393,"11":3,"17":5,"18":10,"19":2,"20":4,"22":4,"23":5,"24":3,"25":3,"26":4,"27":3,"29":3,"33":1,"34":63,"36":12,"37":43,"38":15,"39":12,"40":71,"41":6,"43":6,"44":25,"45":116,"46":7,"47":47,"49":2,"50":7,"51":27,"52":23,"53":27,"54":82,"55":29,"56":70,"57":1,"59":11,"60":81,"62":5,"63":47,"65":9,"66":11,"68":8,"69":25,"72":8,"73":9,"74":3,"75":3,"76":2,"78":4,"79":11,"80":5,"82":2,"83":21,"85":8,"86":6,"87":4,"89":3,"90":2,"91":123,"93":5,"94":6,"96":5,"97":26,"99":5,"100":21,"102":6,"103":10,"104":7,"105":3,"106":3,"107":2,"109":7,"110":24,"112":2,"113":9,"114":9,"115":6,"116":2,"117":2,"119":1,"120":8,"121":47,"122":1,"123":8,"125":4,"127":2,"128":11,"130":84,"131":5,"132":5,"133":4,"134":2,"135":13,"136":10,"137":4,"138":8,"139":6,"140":5,"141":1,"142":14,"143":2,"144":3,"145":5,"146":26,"147":17,"148":3,"150":18,"151":3,"152":6,"153":3,"154":2,"155":1,"156":2,"158":5,"159":21,"160":3,"163":10,"164":11,"165":10,"166":2,"167":4,"168":10,"169":17,"170":3}}],["est",{"2":{"170":1}}],["essentially",{"2":{"157":1}}],["especially",{"2":{"10":1,"18":1,"23":1,"121":1}}],["effects",{"2":{"130":3}}],["efficiently",{"2":{"20":1}}],["efficient",{"2":{"10":1,"40":1,"51":2,"53":2,"55":2,"133":1}}],["e2",{"2":{"91":4}}],["e1",{"2":{"91":8}}],["euclid",{"2":{"47":2,"60":11,"91":1,"151":1}}],["euclidean",{"2":{"8":1,"10":1,"40":13,"60":6,"147":1}}],["everything",{"2":{"150":1}}],["every",{"2":{"45":1,"63":2,"128":1,"159":1}}],["evenly",{"2":{"169":1}}],["eventually",{"2":{"45":1}}],["even",{"2":{"37":2,"47":1,"54":1,"60":1,"63":1,"123":1,"132":1,"137":1}}],["evaluated",{"2":{"168":1}}],["eval",{"2":{"31":2,"130":2}}],["epsg",{"2":{"164":5,"165":8}}],["eps",{"2":{"34":2,"54":14}}],["eponymous",{"2":{"10":1,"146":1}}],["eltype",{"2":{"121":4}}],["elements",{"2":{"75":1,"76":1,"89":1,"90":1,"97":1,"106":1,"107":1,"116":1,"117":1}}],["element",{"2":{"10":6,"33":1,"45":4,"50":2,"51":1,"53":1,"54":1,"55":3,"145":1,"164":1}}],["elsewhere",{"2":{"50":1}}],["elseif",{"2":{"45":5,"47":7,"51":1,"53":1,"54":14,"55":2,"56":1,"80":3,"91":10,"120":1,"121":2,"139":1,"152":2,"154":2}}],["else",{"2":{"7":6,"10":6,"34":1,"40":2,"45":19,"47":9,"50":1,"52":2,"54":9,"55":1,"56":9,"80":2,"91":17,"97":8,"121":20,"130":8,"133":1,"140":1,"143":1,"150":2,"152":4,"154":2,"155":1,"159":1,"160":1}}],["etc",{"2":{"10":1,"20":2,"36":1,"157":1,"167":1}}],["emtpty",{"2":{"121":1}}],["empty",{"2":{"8":2,"10":6,"34":2,"45":2,"51":1,"53":1,"54":2,"55":1,"121":1}}],["embedding",{"0":{"129":1,"141":1}}],["embedded",{"0":{"165":1},"2":{"121":1,"129":3,"162":1,"165":1}}],["embed",{"2":{"4":2,"8":1,"10":1,"129":1,"141":2}}],["edgekeys",{"2":{"121":3}}],["edge",{"2":{"7":1,"8":3,"10":4,"20":1,"31":1,"37":1,"43":1,"45":25,"47":13,"51":1,"53":1,"54":6,"55":1,"60":4,"63":1,"71":2,"86":2,"87":1,"91":7,"97":21,"112":2,"113":1,"114":1,"121":7,"161":2}}],["edges`",{"2":{"54":1}}],["edges",{"2":{"4":1,"8":2,"10":9,"45":12,"47":8,"52":3,"54":10,"56":3,"60":3,"62":2,"63":1,"65":1,"71":1,"72":3,"73":7,"74":3,"82":1,"85":3,"88":1,"91":3,"97":20,"109":1,"112":1,"121":22,"161":29}}],["equatorial",{"2":{"10":6,"146":4}}],["equality",{"2":{"45":1,"54":1,"168":1}}],["equal",{"2":{"7":2,"8":16,"10":19,"34":6,"54":1,"59":1,"60":4,"62":3,"63":22,"71":1,"85":1,"91":15,"96":1,"97":2,"102":2,"112":1,"132":1}}],["equals",{"0":{"61":1,"62":1},"1":{"62":1,"63":1},"2":{"4":17,"8":3,"10":19,"31":1,"34":2,"45":4,"50":2,"54":8,"60":1,"61":1,"62":2,"63":50,"71":1,"85":1,"91":10,"97":2,"102":3,"112":1,"168":1}}],["equivalent",{"2":{"7":1,"8":4,"10":6,"37":1,"45":1,"54":1,"56":1,"63":5,"69":1,"91":1}}],["earlier",{"2":{"163":3}}],["earth",{"2":{"10":2,"25":1,"27":1,"146":2,"150":2,"164":2,"168":1}}],["easiest",{"2":{"166":1}}],["easier",{"2":{"156":1,"158":1}}],["easily",{"2":{"123":1}}],["east",{"2":{"47":9}}],["easy",{"2":{"5":1,"10":1,"137":1,"160":1}}],["eachindex",{"2":{"34":1,"120":1,"121":3,"130":2,"151":1,"154":1}}],["each",{"2":{"2":1,"7":2,"8":3,"10":6,"18":2,"20":1,"34":4,"37":2,"38":4,"40":1,"45":5,"47":1,"54":3,"60":1,"63":2,"69":1,"83":1,"91":6,"96":1,"97":3,"100":1,"110":1,"120":1,"121":1,"130":1,"137":2,"150":1,"166":1,"167":1,"169":2,"170":2,"171":1}}],["either",{"2":{"5":2,"7":1,"10":4,"22":1,"25":1,"27":1,"45":9,"51":1,"53":1,"54":2,"55":1,"56":1,"59":1,"69":1,"91":5,"93":1,"99":1,"100":1,"110":1,"121":1,"130":3,"135":1,"168":1}}],["enable",{"2":{"171":1}}],["enabled",{"2":{"168":1}}],["enabling",{"0":{"171":1}}],["enclosed",{"2":{"91":1}}],["encode",{"2":{"24":1}}],["encompasses",{"2":{"18":1,"91":1}}],["encounters",{"2":{"18":1}}],["en",{"2":{"91":1,"152":1}}],["envelope",{"2":{"54":2}}],["envelopes",{"2":{"54":2}}],["enough",{"2":{"45":1}}],["entirely",{"2":{"91":1}}],["entire",{"2":{"47":1,"91":4}}],["entry",{"2":{"45":11,"52":3,"54":4,"56":3,"121":1}}],["ent",{"2":{"45":19,"50":2}}],["enter",{"2":{"45":4}}],["ensuring",{"2":{"10":1,"144":1,"147":1}}],["ensure",{"2":{"10":3,"40":1,"51":1,"53":1,"55":1,"131":2,"134":1}}],["ensures",{"2":{"10":3,"133":1,"136":3,"139":2}}],["enumerate",{"2":{"13":2,"34":1,"45":10,"47":1,"50":1,"52":1,"56":2,"91":1,"121":2,"139":2,"154":1}}],["enum",{"2":{"10":2,"45":3,"53":3,"91":3}}],["enforce",{"2":{"4":1,"10":2,"159":3}}],["endpt",{"2":{"152":3}}],["endpoints",{"2":{"45":3,"47":1,"52":1,"54":6,"56":1,"60":2,"91":11,"97":2,"99":1}}],["endpoint=3",{"2":{"45":1}}],["endpointtype",{"2":{"45":2}}],["endpoint",{"2":{"7":1,"10":2,"45":27,"53":1,"54":16,"60":2,"68":1,"91":3,"97":2,"150":4,"152":4,"163":1}}],["ending",{"2":{"45":1,"47":1}}],["end",{"2":{"2":1,"5":1,"10":1,"13":4,"14":3,"31":4,"34":18,"37":8,"40":35,"41":3,"44":10,"45":130,"47":43,"50":9,"51":8,"52":12,"53":5,"54":31,"55":6,"56":24,"57":1,"60":19,"63":20,"75":2,"76":2,"80":20,"89":2,"90":2,"91":104,"97":21,"102":1,"106":2,"107":2,"112":1,"116":2,"117":2,"120":9,"121":44,"122":4,"123":1,"130":52,"131":1,"133":5,"135":3,"139":18,"140":4,"142":1,"143":2,"146":8,"147":8,"150":7,"151":6,"152":30,"153":3,"154":27,"155":4,"157":1,"158":3,"159":4,"160":4,"161":19}}],["e",{"2":{"2":1,"22":1,"41":1,"121":1,"128":1,"130":2,"163":2,"164":1,"167":1}}],["exits",{"2":{"45":1}}],["exit",{"2":{"45":32,"50":2,"52":3,"54":3,"56":2}}],["existingnodes",{"2":{"121":3}}],["existing",{"2":{"45":3,"55":1,"121":1,"164":2,"166":1}}],["exists",{"2":{"45":1,"47":1,"54":1}}],["exist",{"2":{"10":1,"45":1,"54":3,"159":1}}],["excluding",{"2":{"88":1,"91":1,"112":2}}],["exclude",{"2":{"80":9}}],["exclusively",{"2":{"104":1}}],["exclusive",{"2":{"47":1,"54":2}}],["exc",{"2":{"41":2,"143":2,"146":2}}],["excellent",{"2":{"23":1}}],["except",{"2":{"18":1,"19":1}}],["excess",{"2":{"9":1,"10":1,"40":1}}],["ext2",{"2":{"91":3}}],["ext1",{"2":{"91":3}}],["ext",{"2":{"39":15,"45":10,"47":2,"50":3,"51":8,"53":8,"54":18,"55":8,"56":14,"80":7,"91":7}}],["extrema",{"2":{"121":1,"161":1}}],["extreem",{"2":{"34":10}}],["extract",{"2":{"121":1,"130":3,"150":1}}],["extra",{"2":{"10":3,"45":1,"55":1,"144":1,"146":2,"147":1}}],["external",{"2":{"37":1,"91":2}}],["exterior",{"2":{"7":4,"8":2,"10":10,"34":1,"36":1,"37":1,"39":1,"40":36,"44":2,"45":4,"51":2,"55":3,"56":14,"60":1,"63":2,"65":1,"66":1,"69":3,"79":1,"83":2,"91":9,"100":2,"109":1,"110":3,"113":3,"114":3,"120":6,"121":6,"133":3,"134":1,"136":1,"141":1,"163":2}}],["exteriors",{"2":{"2":1,"53":2,"55":2,"121":1}}],["extending",{"2":{"97":1}}],["extended",{"2":{"60":1}}],["extensions",{"2":{"167":1}}],["extension",{"2":{"5":1,"10":1,"40":1,"41":1,"68":1,"122":1,"142":3,"143":2,"146":1,"147":1,"148":1,"167":1}}],["extent=geom",{"2":{"161":1}}],["extent=gi",{"2":{"121":3}}],["extent=true",{"2":{"141":1}}],["extent=nothing",{"2":{"130":1}}],["extent=",{"2":{"130":4}}],["extent=false",{"2":{"130":1,"150":1}}],["extent`",{"2":{"127":1,"141":1}}],["extents",{"2":{"8":3,"10":3,"31":5,"47":1,"54":3,"91":5,"97":1,"121":3,"130":2,"141":2,"161":2}}],["extent",{"0":{"141":1},"2":{"4":2,"5":4,"8":3,"10":11,"24":1,"31":2,"39":1,"46":1,"47":1,"54":10,"91":4,"97":2,"121":12,"127":3,"129":4,"130":31,"141":2,"150":1,"158":1,"161":8}}],["exp10",{"2":{"146":1,"150":2}}],["expressed",{"2":{"38":2}}],["express",{"2":{"38":1}}],["experimental",{"2":{"31":3}}],["expect",{"2":{"5":1,"93":1,"142":1}}],["explicity",{"2":{"63":1}}],["explicitly",{"2":{"10":1,"18":1,"24":1,"34":2,"37":1,"40":1,"41":1,"60":2,"143":1,"146":1,"147":1}}],["explain",{"2":{"26":1}}],["explanations",{"2":{"26":3}}],["export",{"2":{"38":1,"144":1,"165":1,"167":1}}],["exposes",{"2":{"17":1}}],["exponential",{"2":{"2":1}}],["examples",{"0":{"145":1,"149":1},"2":{"7":8,"8":1,"10":11,"26":2,"63":1,"66":1,"69":1,"79":1,"80":1,"83":1,"97":1,"100":1,"110":1,"120":2,"161":1}}],["example",{"0":{"39":1,"132":1,"138":1,"169":1,"170":1},"2":{"5":3,"7":2,"10":13,"11":1,"20":1,"23":2,"33":1,"36":1,"39":1,"43":1,"44":1,"46":1,"49":1,"50":1,"51":1,"53":1,"54":1,"55":1,"59":1,"62":1,"63":1,"65":1,"68":1,"78":1,"80":1,"82":1,"91":1,"93":1,"94":1,"96":1,"99":1,"109":1,"120":1,"121":8,"123":1,"130":2,"132":1,"134":1,"137":1,"138":1,"140":1,"149":1,"150":2,"159":1,"160":1,"169":1,"171":1}}],["exactly",{"2":{"154":1}}],["exactpredicates",{"2":{"0":1,"13":2,"14":2,"31":1}}],["exact",{"2":{"0":2,"7":5,"10":5,"12":1,"13":1,"45":36,"47":6,"50":7,"51":5,"53":5,"54":7,"55":5,"56":7,"57":1,"66":2,"69":3,"71":1,"72":3,"73":3,"74":1,"79":2,"80":1,"83":2,"85":1,"86":3,"87":2,"88":1,"91":24,"94":2,"97":3,"100":2,"102":1,"103":3,"104":1,"105":1,"110":3,"112":1,"113":3,"114":3,"115":1,"121":1,"138":1}}],["errors",{"2":{"31":1,"54":1,"147":1}}],["error",{"0":{"143":1},"2":{"0":1,"8":1,"10":4,"18":1,"31":6,"40":1,"41":4,"45":2,"54":2,"57":1,"63":2,"121":1,"128":1,"135":2,"143":3,"146":5,"154":4,"159":3,"161":1}}],["df",{"2":{"166":3,"167":4,"169":10,"170":12}}],["dp",{"2":{"150":3}}],["dy",{"2":{"120":2,"147":3}}],["dy2",{"2":{"120":2}}],["dy1",{"2":{"80":10,"120":2}}],["dyc",{"2":{"80":2}}],["dx",{"2":{"120":2,"147":3}}],["dx2",{"2":{"120":2}}],["dx1",{"2":{"80":10,"120":2}}],["dxc",{"2":{"80":2}}],["drop",{"2":{"56":1,"139":1,"147":1}}],["driven",{"2":{"25":1,"27":1}}],["driving",{"2":{"25":1,"27":1}}],["duplicated",{"2":{"54":2}}],["during",{"2":{"45":1}}],["due",{"2":{"44":1,"45":1,"54":3}}],["datas",{"2":{"171":1}}],["datasets",{"2":{"164":1,"168":1,"169":1}}],["dataset",{"2":{"164":1,"168":1}}],["datainterpolations",{"2":{"144":1}}],["dataframes",{"2":{"166":3,"169":2,"170":1}}],["dataframe",{"2":{"29":1,"166":1,"168":1,"169":5,"170":2}}],["data",{"0":{"121":1,"167":1},"2":{"23":1,"25":1,"27":1,"121":2,"150":10,"162":1,"164":2,"165":2,"166":2,"167":6,"169":1}}],["dataaspect",{"2":{"13":1,"14":1,"33":1,"36":1,"39":2,"43":1,"46":1,"59":2,"121":2,"145":1,"150":1}}],["dashboard",{"0":{"14":1},"2":{"13":1,"14":1}}],["d",{"2":{"5":2,"9":1,"10":1,"40":1,"142":1,"152":3}}],["dirname",{"2":{"150":4}}],["dirty",{"2":{"149":1}}],["directive",{"2":{"130":1}}],["direction",{"2":{"10":1,"45":1,"63":5,"121":3}}],["directly",{"2":{"10":1,"121":1,"146":1}}],["dig",{"2":{"130":1}}],["dict",{"2":{"121":5}}],["didn",{"2":{"56":1,"91":1,"158":1}}],["division",{"2":{"39":1}}],["divided",{"2":{"26":1}}],["div",{"2":{"10":2}}],["div>",{"2":{"10":2}}],["ditance",{"2":{"8":1,"10":1,"60":1}}],["dimensional",{"2":{"9":1,"10":1,"36":1,"40":1}}],["dimensions",{"2":{"7":1,"10":1,"97":2}}],["dimension",{"2":{"5":1,"7":4,"10":4,"80":2,"96":1,"97":4,"142":1}}],["discouraged",{"2":{"165":1}}],["discussion",{"2":{"25":1,"27":1,"50":1}}],["distributed",{"2":{"169":2}}],["distinct",{"2":{"54":1,"121":1}}],["dist",{"2":{"54":40,"60":19,"91":2,"146":8,"152":40}}],["distance`",{"2":{"146":3,"147":1,"159":1}}],["distances",{"2":{"54":1,"59":1,"146":1,"151":5}}],["distance",{"0":{"58":2,"59":2},"1":{"59":2,"60":2},"2":{"4":4,"8":26,"10":47,"31":1,"40":13,"41":3,"47":3,"54":32,"58":2,"59":17,"60":92,"91":1,"123":1,"144":1,"145":5,"146":13,"147":14,"150":1,"151":3,"152":6,"153":1,"171":2}}],["disagree",{"2":{"37":1}}],["disparate",{"2":{"25":1,"27":1}}],["dispatches",{"2":{"10":1,"34":1,"37":1,"40":1,"44":1,"47":1,"60":1,"63":1,"69":1,"83":1,"97":1,"100":1,"110":1}}],["dispatch",{"2":{"8":1,"10":5,"24":1,"40":1,"63":1,"125":1,"130":2,"157":1,"159":1}}],["displaying",{"2":{"164":1}}],["display",{"2":{"13":1,"39":1,"164":1}}],["disjoint",{"0":{"81":1,"82":1,"85":1,"86":1,"87":1,"88":1,"89":1},"1":{"82":1,"83":1},"2":{"4":2,"7":5,"10":7,"23":1,"31":1,"56":2,"81":1,"82":3,"83":11,"84":6,"85":15,"86":18,"87":10,"88":5,"89":4,"90":2,"91":16,"94":3,"136":2,"137":2,"139":7,"168":1}}],["diffs",{"2":{"34":4}}],["diff",{"2":{"10":2,"34":17,"51":5,"52":3,"97":3,"139":8}}],["differs",{"2":{"164":1}}],["differ",{"2":{"8":1,"10":1,"60":1}}],["differently",{"2":{"8":3,"10":4,"34":1,"37":2,"47":1}}],["different",{"2":{"7":1,"8":4,"10":6,"20":1,"23":1,"34":1,"37":4,"45":3,"47":1,"54":2,"97":3,"121":1,"128":1,"130":1,"137":2,"164":2,"167":1}}],["differences",{"0":{"52":1},"2":{"54":1,"152":1}}],["difference",{"0":{"51":1},"2":{"4":1,"10":7,"11":1,"23":1,"31":1,"45":3,"51":12,"52":14,"54":1,"55":1,"56":3,"136":1,"139":1,"146":1}}],["diffintersectingpolygons",{"2":{"4":1,"10":1,"136":1,"139":4}}],["deu",{"2":{"170":2}}],["demonstrates",{"2":{"169":1}}],["densify",{"2":{"146":3}}],["densifying",{"2":{"146":1}}],["densifies",{"2":{"144":1}}],["denoted",{"2":{"91":1}}],["denotes",{"2":{"45":1}}],["debug",{"2":{"135":1}}],["debugging",{"2":{"40":1,"45":1}}],["de",{"2":{"91":2,"168":1}}],["derivation",{"2":{"54":1}}],["dealing",{"2":{"47":1}}],["delete",{"2":{"80":1,"97":1,"121":1,"152":1}}],["deleteat",{"2":{"45":6,"152":1,"154":2}}],["delayed",{"2":{"45":10,"52":2,"54":2,"56":2}}],["delay",{"2":{"45":14,"51":2,"52":2,"53":2,"54":2,"55":2,"56":2}}],["depend",{"2":{"45":2}}],["depends",{"2":{"45":1,"50":1}}],["depending",{"2":{"5":1,"10":1,"23":1,"54":1,"130":1}}],["depth",{"2":{"40":2}}],["desktop",{"2":{"167":1}}],["dest",{"2":{"164":2}}],["destinaton",{"2":{"164":1}}],["destination",{"2":{"164":4}}],["desired",{"2":{"55":1,"167":1}}],["despite",{"2":{"34":1}}],["describe",{"2":{"17":1}}],["described",{"2":{"10":1,"40":1,"44":1,"45":1}}],["deconstruct",{"2":{"123":1}}],["decomposition",{"2":{"18":1,"123":1}}],["decomposing",{"2":{"18":1}}],["decompose",{"2":{"18":2,"29":1,"40":4,"131":1}}],["decide",{"2":{"121":1}}],["decision",{"2":{"24":1}}],["decrementing",{"2":{"121":1}}],["decrease",{"2":{"44":1}}],["decreaseing",{"2":{"10":1,"150":1}}],["degenerate",{"2":{"10":1,"40":1,"50":2}}],["degeneracies",{"2":{"2":1}}],["degrees",{"2":{"10":1,"33":1,"120":1,"146":1}}],["defauly",{"2":{"52":1}}],["default",{"2":{"5":2,"8":5,"10":13,"34":1,"37":2,"47":1,"51":1,"52":1,"53":1,"54":5,"55":1,"56":2,"60":2,"121":5,"125":1,"130":2,"142":2,"150":2}}],["defaults",{"2":{"5":6,"8":2,"10":14,"127":3,"130":1}}],["defines",{"2":{"45":1,"123":1,"134":1,"156":1}}],["define",{"2":{"39":1,"54":2,"62":1,"121":2,"123":1,"128":1,"130":1,"156":1,"171":2}}],["defined",{"2":{"0":1,"8":1,"9":1,"10":3,"22":1,"34":2,"40":1,"46":1,"47":4,"54":4,"60":2,"119":1,"130":1,"147":1,"156":1}}],["definitions",{"2":{"159":1}}],["definition",{"2":{"8":1,"10":3,"63":5,"68":1,"147":1}}],["defintion",{"2":{"8":3,"10":3,"63":3}}],["deeper",{"2":{"5":1,"10":1,"129":1,"130":2}}],["detrimental",{"2":{"137":1}}],["detection",{"2":{"121":1}}],["determined",{"2":{"45":1,"47":1}}],["determine",{"2":{"45":10,"47":3,"51":2,"53":2,"54":9,"55":2,"69":1,"83":1,"91":9,"97":1,"100":1,"110":1,"152":3,"168":1}}],["determines",{"2":{"37":1,"45":3,"54":1,"91":10}}],["determinant",{"2":{"10":1,"40":1}}],["details",{"2":{"125":3,"126":1,"145":2}}],["detail",{"2":{"26":1}}],["det",{"2":{"4":1,"10":2,"40":4}}],["doi",{"2":{"51":2,"53":2,"55":2,"91":1}}],["doing",{"2":{"17":1,"22":1,"130":1,"165":1}}],["dot",{"2":{"34":2,"40":1}}],["download",{"2":{"150":1,"164":1}}],["down",{"2":{"10":1,"18":1,"29":1,"40":1,"130":1}}],["doublets",{"2":{"170":2}}],["double",{"2":{"153":4}}],["doubled",{"2":{"10":1,"153":1}}],["douglas",{"2":{"148":2,"150":2,"152":1}}],["douglaspeucker",{"0":{"152":1},"2":{"4":1,"10":5,"148":1,"150":5,"152":6}}],["don",{"2":{"8":2,"10":3,"45":4,"51":1,"56":1,"63":6,"86":1,"91":1,"99":1,"103":1,"121":2,"130":3,"147":1,"159":1}}],["done",{"0":{"3":1},"2":{"13":1,"14":1,"91":2,"121":1,"123":1,"137":1,"163":1,"168":1}}],["documenter",{"2":{"125":3,"126":1,"145":2}}],["documentation",{"0":{"4":1},"1":{"5":1,"6":1,"7":1,"8":1,"9":1,"10":1},"2":{"4":1,"26":1,"39":1}}],["docstring",{"2":{"125":6,"126":2,"145":4}}],["docstrings",{"0":{"124":1},"1":{"125":1},"2":{"0":1}}],["docs",{"0":{"26":1},"2":{"26":1,"121":1}}],["doc",{"2":{"2":1,"3":1}}],["doable",{"2":{"2":1}}],["do",{"0":{"2":1,"23":1,"57":1},"2":{"5":1,"10":2,"14":1,"23":1,"31":1,"34":1,"37":2,"40":2,"41":1,"44":1,"47":1,"50":1,"56":3,"60":2,"62":1,"63":1,"78":1,"86":2,"87":1,"88":2,"91":1,"121":4,"123":1,"130":11,"132":1,"133":1,"138":1,"140":2,"143":1,"146":1,"150":1,"155":2,"160":2,"164":2,"165":2,"166":3,"169":1,"170":1}}],["doesn",{"2":{"8":1,"10":2,"37":1,"50":1,"63":1,"146":1,"159":1,"170":1}}],["does",{"0":{"22":1},"2":{"0":1,"19":1,"43":1,"54":2,"65":1,"68":3,"91":1}}],["cpu",{"2":{"170":1}}],["cy",{"2":{"120":2}}],["cyan",{"2":{"41":1,"143":1,"146":1}}],["cx",{"2":{"120":2}}],["cdot",{"2":{"120":1}}],["cs",{"2":{"91":9}}],["cshape",{"2":{"43":3}}],["cw",{"2":{"47":2}}],["cb",{"2":{"39":1,"121":1}}],["cgrad",{"2":{"39":1}}],["cgal",{"2":{"39":1}}],["c",{"2":{"37":1,"43":1,"47":4,"50":5,"57":3,"91":24,"146":1}}],["chunks",{"2":{"130":8}}],["chunk",{"2":{"130":12}}],["choose",{"2":{"121":2}}],["chose",{"2":{"24":1,"121":1}}],["changes",{"2":{"45":1}}],["changed",{"2":{"45":1}}],["change",{"2":{"24":1,"45":1}}],["chain=2",{"2":{"45":1}}],["chain=1",{"2":{"45":1}}],["chain",{"2":{"45":66,"52":3,"54":4,"56":4}}],["chains",{"2":{"20":1,"45":1}}],["chairmarks",{"2":{"13":1,"146":1,"150":1}}],["children",{"2":{"150":1}}],["child",{"2":{"10":2,"125":2,"130":7}}],["checkargs",{"2":{"151":1,"152":1,"153":1,"154":1}}],["checking",{"2":{"63":1,"152":1}}],["checks",{"0":{"80":1,"92":1},"1":{"93":1,"94":1},"2":{"41":1,"45":1,"54":1,"62":1,"65":1,"68":1,"78":1,"82":1,"91":5,"93":1,"96":1,"97":1,"99":1,"109":1,"169":1}}],["checked",{"2":{"8":1,"10":1,"45":1,"54":1,"91":1,"141":1}}],["check",{"2":{"0":1,"8":1,"10":1,"44":1,"45":8,"47":3,"50":1,"51":1,"54":4,"55":1,"57":1,"63":8,"91":11,"121":5,"125":3,"126":1,"138":1,"141":1,"145":2,"152":1,"154":1}}],["ceil",{"2":{"147":1}}],["ce",{"2":{"91":11}}],["certianly",{"2":{"54":1}}],["certain",{"2":{"17":1,"18":1,"26":1,"29":1}}],["central",{"2":{"45":1}}],["centroids",{"2":{"43":1,"44":1}}],["centroid",{"0":{"42":1,"43":1},"1":{"43":1,"44":1},"2":{"4":4,"8":2,"10":6,"31":1,"42":3,"43":4,"44":38,"123":1,"150":4}}],["cent",{"2":{"43":2}}],["centered",{"2":{"45":1}}],["center",{"2":{"10":1,"43":1,"121":1}}],["cells",{"2":{"121":1}}],["cell",{"2":{"10":4,"46":3,"47":28,"121":2}}],["c2",{"2":{"10":3,"15":2,"60":3,"63":14,"121":21}}],["c1",{"2":{"10":3,"15":2,"60":4,"63":13,"121":26}}],["ctor",{"2":{"5":1,"10":1,"160":1}}],["ca96624a56bd078437bca8184e78163e5039ad19",{"2":{"150":1}}],["caculated",{"2":{"54":1,"130":1}}],["cache",{"2":{"10":1,"40":1}}],["catagorize",{"2":{"50":1}}],["categorical",{"2":{"39":1}}],["came",{"2":{"50":1}}],["case",{"2":{"34":1,"38":2,"44":1,"45":1,"51":1,"54":2,"56":1,"91":16,"130":1,"171":1}}],["cases",{"2":{"10":1,"40":1,"50":2,"91":3,"128":1,"130":5}}],["cause",{"2":{"18":1,"23":1,"152":1}}],["careful",{"2":{"40":1,"128":1}}],["care",{"2":{"17":1}}],["carried",{"2":{"10":1,"159":1}}],["cairomakie",{"2":{"13":1,"33":1,"36":1,"39":2,"43":1,"46":1,"49":1,"59":1,"62":1,"65":1,"68":1,"78":1,"82":1,"93":1,"96":1,"99":1,"109":1,"145":1,"146":1,"150":1,"162":1,"169":1,"170":1}}],["california",{"2":{"170":1}}],["callable",{"2":{"121":4,"135":1}}],["calling",{"2":{"45":2,"130":1}}],["calls",{"2":{"45":1,"54":1,"56":1,"60":1,"69":1,"83":1,"100":1,"110":1,"128":1,"130":1,"147":1}}],["call",{"2":{"18":1,"24":1,"37":1,"44":1,"130":4,"148":1}}],["called",{"2":{"10":2,"44":3,"45":1,"130":1,"133":1,"135":1,"136":1,"159":1,"164":1}}],["calcualted",{"2":{"130":1}}],["calculation",{"2":{"54":1}}],["calculations",{"2":{"10":1,"25":2,"27":2,"54":1,"146":1}}],["calculating",{"2":{"8":1,"10":1,"18":1,"45":1,"141":1}}],["calculated",{"2":{"10":1,"43":2,"47":1,"54":1,"60":1,"130":2}}],["calculates",{"2":{"8":2,"10":6,"37":1,"40":2,"47":1,"54":2,"55":1,"60":2,"146":1,"153":1}}],["calculate",{"2":{"5":2,"9":1,"10":6,"11":1,"34":3,"40":3,"44":1,"47":1,"54":1,"91":1,"121":1,"127":1,"130":3}}],["calc",{"2":{"5":2,"10":4,"24":1,"34":4,"127":1,"129":1,"130":19,"141":1,"150":2,"158":1}}],["cant",{"2":{"63":1,"121":1,"161":1}}],["cannot",{"2":{"7":3,"8":2,"10":5,"37":1,"63":1,"71":1,"74":1,"97":2,"100":1,"102":2,"104":1,"115":1}}],["can",{"2":{"0":2,"2":1,"5":1,"8":2,"10":16,"13":1,"14":1,"24":1,"26":1,"31":1,"34":1,"37":1,"38":2,"39":1,"40":3,"41":1,"44":1,"45":3,"47":1,"51":3,"53":3,"54":1,"55":3,"56":1,"62":1,"63":3,"65":1,"68":1,"80":1,"82":1,"91":23,"93":2,"96":2,"97":3,"99":1,"103":1,"104":1,"109":1,"112":1,"113":1,"114":1,"121":1,"122":1,"123":1,"125":1,"129":1,"130":7,"132":2,"133":1,"136":1,"137":2,"138":1,"141":1,"143":1,"145":1,"146":2,"150":2,"159":1,"163":6,"164":1,"165":3,"167":3,"168":3,"169":3}}],["customize",{"2":{"130":2}}],["custom",{"0":{"171":1},"2":{"10":1,"40":1,"171":2}}],["curr^2",{"2":{"34":2}}],["curr",{"2":{"34":8,"45":116,"50":9,"56":3,"139":26}}],["currentnode",{"2":{"121":8}}],["current",{"2":{"34":1,"40":8,"45":3,"50":2,"52":1,"54":1,"56":6,"121":2,"139":3}}],["currently",{"2":{"9":1,"10":3,"23":1,"40":1,"45":1,"50":1,"52":2,"121":1,"130":1}}],["curve",{"0":{"91":1},"2":{"7":1,"8":7,"10":18,"34":6,"37":7,"45":5,"47":3,"53":7,"59":1,"60":22,"63":6,"69":2,"71":4,"72":9,"73":9,"83":1,"85":4,"86":6,"87":3,"91":152,"97":1,"100":1,"103":6,"105":3,"110":1,"112":4,"113":6,"114":6}}],["curves",{"2":{"4":1,"7":1,"10":5,"37":3,"47":3,"54":1,"59":1,"60":1,"63":13,"74":1,"91":1,"97":1,"115":1,"150":2}}],["cutpolygon",{"2":{"49":1}}],["cuts",{"2":{"49":1}}],["cutting",{"0":{"48":1},"1":{"49":1,"50":1},"2":{"45":1,"50":2}}],["cut",{"0":{"49":1},"2":{"4":1,"10":6,"31":1,"40":1,"48":1,"49":5,"50":22,"91":1}}],["clear",{"2":{"46":1}}],["clearly",{"2":{"33":1,"36":1,"59":1}}],["clamped",{"2":{"54":18}}],["clamp",{"2":{"34":1,"54":1}}],["classified",{"2":{"45":1}}],["classify",{"2":{"45":4}}],["class",{"2":{"10":1,"121":1}}],["closure",{"2":{"130":2}}],["closing",{"2":{"34":1}}],["close",{"2":{"34":5,"45":2,"47":1,"50":1,"54":1,"60":9,"121":1,"132":1,"133":4}}],["closest",{"2":{"8":3,"10":3,"54":2,"59":1,"60":6}}],["closed2",{"2":{"63":2}}],["closed1",{"2":{"63":2}}],["closedring",{"2":{"4":1,"10":1,"131":1,"132":1,"133":4,"134":1,"135":1,"136":1}}],["closed",{"0":{"131":1},"1":{"132":1,"133":1},"2":{"2":1,"8":4,"10":11,"31":1,"34":6,"37":3,"44":3,"45":1,"47":1,"54":1,"56":3,"63":21,"71":2,"72":5,"73":5,"85":2,"86":5,"87":3,"91":52,"103":5,"104":1,"112":3,"113":5,"114":5,"120":1,"121":1,"131":1,"132":1,"133":2,"134":1,"136":1,"163":1}}],["clockwise",{"2":{"2":1,"8":1,"10":4,"36":1,"37":1,"47":7,"119":2,"120":3,"121":1}}],["clipping",{"0":{"45":1,"51":1,"52":1,"54":1,"55":1,"56":1},"2":{"2":1,"10":1,"31":8,"45":9,"50":3,"51":1,"53":1,"55":1,"137":1}}],["cos",{"2":{"163":3,"164":1,"165":2}}],["copy",{"2":{"135":1,"154":1}}],["coors1",{"2":{"120":2}}],["coors2",{"2":{"120":3}}],["coord",{"2":{"147":6}}],["coords",{"2":{"50":9,"147":8}}],["coordiantes",{"2":{"46":1}}],["coordinatetransformations",{"2":{"5":2,"10":2,"150":1,"160":2,"162":1,"163":5,"165":2}}],["coordinate",{"0":{"40":1,"140":1,"164":1,"165":1},"2":{"5":4,"9":5,"10":7,"25":1,"27":1,"39":2,"40":10,"130":1,"142":4,"147":1,"162":3,"164":1}}],["coordinates",{"0":{"9":1,"38":1},"1":{"39":1,"40":1},"2":{"4":4,"5":1,"8":2,"9":7,"10":20,"37":2,"38":8,"40":25,"45":2,"50":2,"51":1,"53":1,"55":1,"60":1,"63":2,"123":1,"140":2,"142":1,"145":1,"146":3,"164":2}}],["co",{"2":{"91":2}}],["corner",{"2":{"47":4,"121":1}}],["corners",{"2":{"47":1}}],["correspondent",{"2":{"120":1}}],["correspond",{"2":{"45":1}}],["corresponding",{"2":{"34":3,"52":2}}],["correctly",{"2":{"145":1}}],["corrected",{"2":{"135":1}}],["correctness",{"2":{"131":1,"159":1}}],["correcting",{"2":{"20":1,"135":1}}],["corrections",{"0":{"134":1,"136":1},"1":{"135":1,"136":1},"2":{"132":1,"135":6,"138":1}}],["correction",{"2":{"10":10,"31":4,"51":1,"52":2,"53":1,"54":2,"55":1,"56":2,"131":1,"133":2,"134":2,"135":8,"136":7,"137":1,"139":2}}],["correct",{"2":{"10":3,"24":1,"34":1,"37":1,"44":1,"45":1,"47":1,"51":1,"53":1,"55":1,"60":1,"63":1,"69":1,"83":1,"97":1,"100":1,"110":1,"131":1,"132":2,"134":1}}],["cov",{"2":{"47":16}}],["cover",{"2":{"71":1,"75":1}}],["covering",{"2":{"10":2,"78":1,"136":2,"139":2}}],["covered",{"0":{"73":1,"74":1,"114":1},"2":{"7":1,"10":1,"52":1,"56":1,"68":1,"69":1,"73":2,"74":2,"75":1,"76":2,"78":1,"90":2,"91":3,"139":1}}],["coveredby",{"0":{"67":1,"68":1,"71":1,"72":1,"75":1,"76":1,"90":1},"1":{"68":1,"69":1},"2":{"4":2,"7":4,"10":4,"31":1,"45":1,"67":1,"68":3,"69":10,"70":6,"71":13,"72":15,"73":13,"74":5,"75":2,"76":2,"79":3,"168":1}}],["covers",{"0":{"77":1,"78":1},"1":{"78":1,"79":1},"2":{"4":2,"7":5,"10":5,"31":1,"77":1,"78":4,"79":5,"121":1,"168":1}}],["coverages",{"2":{"10":1,"47":1}}],["coverage",{"0":{"46":1},"2":{"4":1,"10":2,"31":1,"46":3,"47":16}}],["coarse",{"2":{"10":1,"144":1,"147":1}}],["commonly",{"2":{"167":1}}],["common",{"2":{"147":1,"162":1,"164":1,"165":1}}],["commen",{"2":{"62":1}}],["commented",{"2":{"120":1}}],["comments",{"2":{"91":1}}],["comment",{"2":{"30":1}}],["combos",{"2":{"52":1,"54":1,"56":1}}],["combines",{"2":{"44":1}}],["combine",{"2":{"44":2,"45":5,"139":1}}],["combined",{"2":{"10":1,"45":4,"56":1,"136":1,"139":2,"163":1}}],["combination",{"2":{"10":1,"45":1,"125":1,"130":1}}],["coming",{"2":{"47":1}}],["com",{"2":{"10":2,"54":1,"150":1}}],["compilation",{"2":{"158":1}}],["compiled",{"2":{"24":1}}],["compiler",{"2":{"24":1,"130":2,"158":2}}],["complex",{"2":{"123":1,"150":1,"168":1}}],["complexity",{"2":{"10":1,"123":1,"147":1}}],["completly",{"2":{"45":2,"52":1,"56":1,"65":2,"78":1,"91":1}}],["complete",{"2":{"37":1}}],["completely",{"2":{"5":1,"7":4,"10":5,"66":1,"69":1,"79":1,"110":1,"130":1}}],["component",{"2":{"10":1,"37":3,"44":11,"47":8,"54":1,"125":1,"130":3}}],["components",{"2":{"10":2,"43":1,"44":2,"125":2,"130":24}}],["composed",{"2":{"8":4,"10":5,"63":5,"163":2}}],["comprised",{"2":{"10":3,"51":1,"53":1,"55":1}}],["computing",{"2":{"41":1}}],["computational",{"2":{"10":1,"40":1}}],["computation",{"2":{"10":6,"40":1,"44":1,"51":1,"53":1,"55":1,"151":2,"152":2,"153":2}}],["computer",{"2":{"10":1,"40":1}}],["compute",{"2":{"8":1,"10":1,"37":1,"40":1,"147":1}}],["computed",{"2":{"8":4,"10":5,"34":1,"37":3,"40":3,"47":1}}],["compact",{"2":{"170":3}}],["comparisons",{"2":{"168":1}}],["comparing",{"2":{"56":1,"63":1}}],["compares",{"2":{"121":1}}],["compared",{"2":{"63":1}}],["compare",{"2":{"7":1,"8":1,"10":2,"34":1,"56":1,"63":2,"97":1}}],["compatibility",{"2":{"37":1}}],["compatible",{"2":{"5":3,"10":1,"22":1,"25":1,"27":1,"34":1,"37":1,"40":2,"44":1,"47":1,"60":1,"63":1,"66":1,"69":1,"79":1,"83":1,"94":1,"97":1,"100":1,"110":1,"128":1,"130":1,"142":2}}],["colname",{"2":{"130":3}}],["col",{"2":{"130":3}}],["collinear",{"2":{"45":5,"51":2,"53":2,"54":12,"55":2}}],["collect",{"2":{"11":3,"13":1,"33":1,"36":2,"40":1,"43":1,"46":2,"49":2,"59":1,"121":3,"130":3,"145":4,"161":2}}],["collections",{"0":{"75":1,"76":1,"89":1,"90":1,"106":1,"107":1,"116":1,"117":1},"2":{"5":2,"10":10,"22":1,"129":1,"130":7,"150":2,"167":1}}],["collection",{"2":{"5":1,"8":7,"10":13,"18":2,"29":2,"34":2,"37":3,"47":2,"60":2,"75":2,"76":2,"89":2,"90":2,"106":2,"107":2,"116":2,"117":2,"123":1,"130":3,"150":1,"155":1,"161":1}}],["column",{"2":{"22":1,"130":16,"166":2,"168":2}}],["colored",{"2":{"169":1}}],["colors",{"2":{"169":2}}],["color=",{"2":{"164":2}}],["colorrange",{"2":{"39":2,"59":1}}],["colorbar",{"2":{"39":1,"59":1,"121":1}}],["colormap",{"2":{"14":1,"39":3,"59":1}}],["color",{"2":{"10":3,"36":1,"39":2,"40":1,"41":1,"43":1,"49":3,"59":2,"62":4,"65":4,"68":1,"78":1,"82":4,"96":4,"109":4,"143":1,"146":1,"163":1,"164":1,"169":5}}],["colinear",{"2":{"7":1,"10":2,"53":1,"96":1,"97":2}}],["couple",{"2":{"166":1}}],["course",{"2":{"129":1}}],["country",{"2":{"170":8}}],["countries",{"2":{"11":1,"150":1}}],["counted",{"2":{"54":2}}],["counters",{"2":{"40":8}}],["counter",{"2":{"10":1,"45":7,"91":1,"119":1,"120":1}}],["counterclockwise",{"2":{"2":1,"8":1,"10":1,"36":2,"37":1}}],["count",{"2":{"45":16,"121":1,"154":1}}],["could",{"2":{"8":1,"10":1,"37":3,"54":4,"56":1,"60":1,"91":2,"142":1}}],["couldn",{"2":{"2":1,"158":1}}],["conditions",{"2":{"168":1}}],["conencting",{"2":{"152":1}}],["connected",{"2":{"91":5}}],["connect",{"2":{"47":11}}],["connecting",{"2":{"34":1,"163":2}}],["connections",{"2":{"10":2,"136":2,"139":2}}],["convention",{"2":{"43":1}}],["convenience",{"2":{"40":1,"159":1}}],["convexhull",{"2":{"122":1}}],["convex",{"2":{"34":3,"120":1}}],["conversely",{"2":{"45":1}}],["conversion",{"0":{"155":1},"2":{"22":1}}],["converted",{"2":{"22":1,"40":3}}],["converts",{"2":{"10":1,"161":1}}],["convert",{"0":{"70":1,"84":1,"101":1,"111":1},"2":{"10":3,"40":6,"59":1,"121":2,"146":1,"150":3,"155":1,"159":1,"161":1}}],["context",{"2":{"146":4,"164":2}}],["contents",{"2":{"130":1,"131":1}}],["contours",{"2":{"121":1}}],["contour",{"2":{"121":4}}],["continue",{"2":{"37":1,"45":7,"47":1,"52":2,"54":1,"91":1,"135":1,"139":3,"154":1,"170":1}}],["contributions",{"2":{"25":1,"27":1}}],["controlled",{"2":{"24":1}}],["control",{"2":{"23":1}}],["containing",{"2":{"46":1,"169":1}}],["contain",{"2":{"7":1,"10":1,"26":1,"56":1,"65":1,"97":1,"163":1}}],["contains",{"0":{"64":1,"65":1},"1":{"65":1,"66":1},"2":{"4":2,"7":4,"10":4,"26":1,"31":1,"45":1,"56":1,"64":1,"65":5,"66":4,"128":1,"138":1,"168":1,"169":1}}],["contained",{"2":{"2":1,"7":1,"10":1,"56":4,"66":1,"78":1,"96":1,"97":1,"130":1,"169":1}}],["consistent",{"2":{"45":1,"123":1}}],["consistency",{"2":{"22":1}}],["considered",{"2":{"34":1,"40":1}}],["consider",{"2":{"33":1,"36":1,"43":1,"46":1,"47":3,"49":1,"59":2,"62":1,"65":1,"68":1,"78":1,"82":1,"91":3,"93":1,"96":1,"99":1,"109":1}}],["constprop",{"2":{"80":1}}],["constants",{"2":{"45":1}}],["const",{"2":{"31":4,"45":1,"69":4,"83":3,"100":4,"110":4,"127":3,"130":1,"150":4}}],["constrained",{"2":{"10":3,"51":1,"53":1,"55":1}}],["constructing",{"2":{"165":1}}],["construct",{"2":{"157":1}}],["constructors",{"2":{"10":2,"157":2}}],["constructed",{"2":{"5":1,"20":1,"142":1}}],["concepts",{"0":{"28":1},"1":{"29":1,"30":1},"2":{"26":1}}],["concavehull",{"2":{"122":1}}],["concave",{"2":{"10":1,"34":2,"43":2,"120":2}}],["concieve",{"2":{"2":1}}],["code",{"2":{"0":1,"3":1,"26":5,"40":1,"69":1,"83":1,"91":1,"100":1,"110":1,"120":1,"156":1,"158":1,"170":1}}],["critetia",{"2":{"152":1}}],["criteria",{"2":{"69":2,"83":2,"100":2,"110":2,"152":2}}],["creation",{"2":{"163":1,"165":1}}],["creating",{"0":{"162":1,"163":1,"166":1},"1":{"163":1,"164":1,"165":1,"166":1,"167":1},"2":{"91":1}}],["create",{"0":{"165":1},"2":{"10":2,"13":2,"14":1,"45":1,"50":1,"54":2,"121":2,"130":1,"136":2,"137":3,"139":2,"162":2,"163":4,"164":5,"165":3,"166":1,"167":1,"169":1}}],["created",{"2":{"8":2,"10":2,"45":1,"60":3}}],["creates",{"2":{"0":1,"45":3}}],["cropping",{"2":{"39":2}}],["cross=1",{"2":{"53":1}}],["cross`",{"2":{"53":1}}],["crossings",{"2":{"45":3,"91":1}}],["crossing",{"0":{"80":1},"2":{"10":2,"45":81,"51":1,"52":7,"53":3,"54":7,"55":1,"56":6,"69":1,"80":1,"91":1,"110":1}}],["crosses",{"2":{"4":2,"7":2,"10":3,"31":1,"45":1,"50":1,"80":26,"91":2,"168":1}}],["cross",{"0":{"107":1},"2":{"2":1,"10":1,"34":3,"45":13,"50":14,"51":2,"52":1,"53":2,"54":10,"55":2,"56":1,"57":4,"69":1,"80":2,"83":1,"91":17,"97":2,"100":1,"110":1,"120":3}}],["crc",{"2":{"10":1,"40":1}}],["crs2",{"2":{"164":2}}],["crs1",{"2":{"164":2,"165":1}}],["crs`",{"2":{"142":6}}],["crs=geom",{"2":{"161":1}}],["crs=gi",{"2":{"130":8}}],["crs=nothing",{"2":{"130":1,"141":1,"150":1}}],["crs",{"0":{"164":1},"2":{"5":16,"8":2,"10":10,"121":10,"127":2,"129":3,"130":31,"141":1,"142":7,"150":1,"161":1,"162":1,"164":13,"165":7,"167":1}}],["fn",{"2":{"167":8}}],["fc",{"2":{"130":22,"150":3,"161":14}}],["fj",{"2":{"121":2}}],["f2",{"2":{"45":2}}],["f1",{"2":{"45":2}}],["f64",{"2":{"13":2,"14":2}}],["fra",{"2":{"170":2}}],["frame",{"2":{"166":1}}],["framework",{"2":{"123":4}}],["fracs",{"2":{"45":20,"50":1}}],["frac",{"2":{"40":1,"45":2,"54":17,"150":2}}],["fractional",{"2":{"45":1,"54":3}}],["fractions",{"2":{"45":1,"54":4}}],["fraction",{"2":{"10":4,"54":2,"60":1,"150":1}}],["front",{"2":{"34":1}}],["from",{"2":{"0":1,"5":3,"7":4,"8":16,"10":29,"11":1,"20":1,"22":1,"26":1,"31":1,"37":2,"39":1,"40":4,"41":1,"44":1,"45":6,"47":11,"50":1,"51":1,"52":3,"53":1,"54":11,"55":1,"56":6,"60":25,"83":2,"85":5,"86":4,"87":2,"88":1,"89":2,"91":6,"97":2,"120":2,"121":7,"125":3,"130":3,"139":1,"142":4,"144":1,"150":1,"151":1,"152":3,"153":1,"161":1,"162":1,"164":5,"167":1,"168":1,"169":1,"171":1}}],["footprint",{"2":{"165":1}}],["foldable",{"2":{"130":3}}],["follows",{"2":{"45":2,"69":1,"83":1,"100":1,"110":1,"121":1}}],["followed",{"2":{"26":1}}],["following",{"2":{"10":1,"40":1,"49":1,"132":1,"138":1,"150":1,"168":1}}],["focusing",{"2":{"25":1,"27":1}}],["foundational",{"2":{"17":1}}],["found",{"2":{"10":8,"26":1,"47":1,"50":1,"51":2,"53":2,"54":1,"55":2,"63":1,"121":5,"128":3,"130":7,"147":1}}],["forward",{"2":{"54":1}}],["forwards",{"2":{"45":1,"52":1,"56":1}}],["formats",{"2":{"162":1,"165":1,"167":3}}],["format",{"2":{"50":1,"167":3}}],["form",{"2":{"18":1,"45":3,"54":8,"56":3,"130":1}}],["formed",{"2":{"8":2,"10":3,"33":1,"34":4,"40":1,"45":8,"55":1,"56":1,"152":1}}],["formula",{"2":{"8":1,"10":1,"37":2,"47":1}}],["force",{"2":{"5":1,"130":2,"142":1,"150":1}}],["for",{"0":{"52":1,"54":1,"56":1},"2":{"0":4,"2":2,"4":2,"5":3,"7":1,"8":4,"9":3,"10":44,"13":5,"14":1,"18":1,"20":1,"22":1,"23":5,"25":3,"26":1,"27":3,"29":1,"31":1,"34":5,"37":8,"38":1,"39":1,"40":19,"41":3,"44":7,"45":35,"47":11,"50":5,"51":2,"52":3,"53":1,"54":7,"55":1,"56":9,"59":2,"60":7,"63":13,"69":3,"75":1,"76":1,"78":1,"80":6,"83":2,"89":1,"90":1,"91":22,"96":1,"97":11,"100":2,"106":1,"107":1,"110":3,"116":1,"117":1,"119":1,"120":5,"121":13,"122":1,"123":3,"125":6,"126":2,"130":6,"131":3,"132":2,"134":1,"135":5,"137":3,"138":1,"139":5,"141":1,"142":3,"144":4,"145":7,"146":6,"147":8,"148":4,"150":12,"151":2,"152":2,"153":1,"154":6,"157":1,"158":2,"159":5,"161":7,"162":1,"164":4,"165":1,"167":3,"168":1,"170":2,"171":1}}],["fancy",{"2":{"163":1}}],["fancis",{"2":{"10":1,"40":1}}],["fair",{"2":{"145":1}}],["fail",{"2":{"5":1,"10":2,"130":6,"146":1}}],["fallback",{"2":{"130":1}}],["falses",{"2":{"45":2,"50":1,"51":1,"53":1}}],["false",{"0":{"24":1},"2":{"5":29,"7":7,"8":3,"10":55,"34":2,"37":1,"39":5,"45":26,"47":5,"50":1,"51":1,"52":3,"54":1,"55":4,"60":2,"62":2,"63":27,"65":2,"69":8,"71":2,"72":4,"73":1,"74":1,"75":1,"76":1,"78":2,"80":11,"83":9,"85":1,"86":4,"89":1,"90":1,"91":39,"97":22,"100":8,"102":3,"103":4,"104":1,"106":1,"107":1,"109":1,"110":7,"112":2,"113":4,"114":1,"115":1,"116":1,"117":1,"120":10,"121":5,"130":20,"132":16,"138":44,"139":4,"147":2,"150":1,"154":2,"158":2,"160":20,"161":2,"163":242,"164":12,"165":18,"168":1}}],["fashion",{"2":{"36":1}}],["faster",{"2":{"40":1,"130":1}}],["fast",{"2":{"12":1}}],["few",{"2":{"132":1}}],["fetch",{"2":{"130":2}}],["fetched",{"2":{"121":1}}],["featurecollection",{"2":{"10":2,"11":1,"18":1,"121":4,"130":7,"164":2}}],["featurecollectiontrait",{"2":{"5":1,"10":2,"125":1,"128":1,"130":14,"161":5}}],["features",{"0":{"70":1,"84":1,"101":1,"111":1},"2":{"5":1,"10":2,"11":1,"22":1,"121":3,"129":1,"130":19,"164":1}}],["featuretrait",{"2":{"5":2,"10":3,"70":4,"80":2,"84":4,"101":4,"111":4,"125":1,"128":3,"130":15,"161":5}}],["feature",{"2":{"5":6,"8":1,"10":10,"18":2,"22":1,"37":1,"47":1,"121":2,"123":1,"129":1,"130":49,"150":2,"161":2,"167":1}}],["feb",{"0":{"1":1},"1":{"2":1,"3":1}}],["f",{"2":{"5":12,"10":25,"15":1,"18":3,"19":1,"22":2,"33":1,"36":2,"39":4,"41":1,"43":2,"45":19,"46":2,"49":2,"51":2,"52":2,"53":2,"54":2,"55":2,"56":2,"59":5,"62":2,"65":2,"68":2,"78":2,"82":2,"91":7,"93":2,"96":2,"99":2,"109":2,"121":30,"125":2,"128":2,"130":172,"143":1,"145":2,"146":1,"149":2,"150":1,"154":6,"159":5,"160":6,"161":16,"163":6,"165":2,"169":3}}],["flexijoins",{"2":{"168":1,"169":3,"170":1,"171":5}}],["flags",{"2":{"45":5}}],["flag",{"2":{"45":12,"50":1}}],["flat",{"2":{"10":1,"154":2,"161":1}}],["flattened",{"2":{"18":1}}],["flattening",{"2":{"10":4,"146":2}}],["flatten",{"2":{"4":2,"10":4,"11":3,"13":1,"18":1,"40":1,"45":2,"47":3,"53":1,"56":1,"80":1,"125":4,"130":27,"139":1}}],["floating",{"2":{"10":1,"45":1,"54":5,"121":2}}],["float",{"2":{"10":3,"51":1,"53":1,"55":1}}],["float64x2",{"2":{"13":6,"14":6,"15":2}}],["float64",{"2":{"5":6,"8":10,"10":30,"13":1,"33":1,"34":3,"37":6,"44":1,"47":4,"50":2,"51":2,"53":1,"54":3,"55":1,"60":12,"91":4,"97":2,"120":4,"132":6,"138":26,"145":2,"146":2,"147":1,"151":4,"152":9,"153":2,"154":6,"155":1,"160":6,"161":8,"163":190,"164":7,"165":10}}],["flipping",{"0":{"140":1},"2":{"140":1}}],["flipped",{"2":{"5":2,"10":2,"130":2}}],["flipaxis",{"2":{"39":1}}],["flip",{"2":{"4":1,"10":1,"31":1,"123":2,"130":1,"140":2}}],["fulfilled",{"2":{"152":1}}],["fully",{"2":{"10":1,"45":4,"50":1,"97":4}}],["full",{"0":{"4":1},"1":{"5":1,"6":1,"7":1,"8":1,"9":1,"10":1},"2":{"4":1,"47":5,"135":1,"170":4}}],["furthest",{"2":{"121":1}}],["further",{"2":{"43":1,"130":1}}],["furthermore",{"2":{"7":2,"10":5,"45":1,"51":1,"53":1,"55":1,"69":1,"110":1}}],["fun",{"2":{"163":1}}],["fundamental",{"2":{"26":1,"156":1}}],["func",{"2":{"13":5}}],["funcs",{"2":{"13":2,"14":3}}],["functionality",{"2":{"54":1,"123":1,"140":1,"142":1,"147":1,"159":1}}],["functionalities",{"2":{"45":1}}],["functionally",{"2":{"5":1,"10":1,"18":1,"29":1,"130":1}}],["functions",{"0":{"5":1,"52":1,"54":1,"56":1,"123":1,"125":1,"161":1},"1":{"124":1,"125":1,"126":1,"127":1,"128":1,"129":1,"130":1},"2":{"2":3,"10":1,"17":1,"26":1,"29":1,"37":1,"40":1,"44":1,"45":2,"47":1,"49":1,"91":1,"122":1,"123":2,"128":1,"135":2,"136":1}}],["function",{"2":{"0":2,"2":1,"5":8,"7":9,"8":9,"9":3,"10":12,"13":3,"14":2,"18":2,"29":1,"31":1,"34":5,"37":3,"40":13,"44":6,"45":18,"47":7,"49":2,"50":4,"51":3,"52":3,"53":2,"54":7,"55":2,"56":4,"57":1,"60":6,"62":1,"63":8,"65":1,"68":1,"69":1,"75":1,"76":1,"78":1,"80":5,"82":1,"83":1,"89":1,"90":1,"91":9,"93":1,"96":1,"97":7,"99":1,"100":1,"106":1,"107":1,"109":1,"110":1,"116":1,"117":1,"120":4,"121":16,"122":3,"125":3,"128":2,"130":30,"133":2,"135":7,"136":2,"139":2,"140":2,"142":1,"144":2,"146":2,"147":7,"150":3,"151":2,"152":3,"153":2,"154":7,"155":1,"159":6,"160":3,"161":12,"163":1,"168":1,"171":4}}],["future",{"2":{"23":1,"60":1,"144":2}}],["fi",{"2":{"121":2}}],["fine",{"2":{"145":1}}],["final",{"2":{"56":1,"135":4,"146":1}}],["finally",{"2":{"39":2,"54":1,"121":1,"130":3,"167":1}}],["findmin",{"2":{"154":1}}],["findmax",{"2":{"150":1,"152":1}}],["findall",{"2":{"135":1}}],["finding",{"2":{"54":1}}],["findfirst",{"2":{"45":6,"50":2,"150":1}}],["findnext",{"2":{"45":3}}],["findlast",{"2":{"45":2}}],["findprev",{"2":{"45":2}}],["finds",{"2":{"45":1,"47":1}}],["find",{"2":{"34":6,"37":1,"45":12,"47":3,"50":2,"51":4,"53":2,"54":8,"55":1,"60":3,"63":1,"91":7,"121":2,"152":5,"170":1}}],["finish",{"2":{"2":1}}],["fill",{"2":{"45":1,"121":1,"147":3}}],["filled",{"2":{"45":5,"47":3,"59":1,"60":2,"91":16}}],["files",{"2":{"156":1,"167":2}}],["file",{"2":{"26":1,"45":1,"69":3,"83":3,"100":3,"110":3,"121":1,"122":1,"123":1,"134":1,"142":1,"147":1,"148":1,"156":2,"162":1,"167":2}}],["filters",{"2":{"45":1}}],["filtering",{"2":{"10":1,"150":1}}],["filter",{"2":{"8":1,"10":2,"45":2,"130":3,"139":2,"141":1,"150":1}}],["fit",{"2":{"17":1}}],["field",{"2":{"13":2,"45":2}}],["figure",{"2":{"13":1,"14":1,"36":1,"39":2,"164":3}}],["fig",{"2":{"13":6,"14":6,"163":7,"164":4}}],["firstisright",{"2":{"121":2}}],["firstisleft",{"2":{"121":4}}],["firstisstraight",{"2":{"121":4}}],["firstnode",{"2":{"121":9}}],["first",{"2":{"7":9,"10":10,"34":14,"37":7,"39":1,"40":9,"41":1,"44":1,"45":17,"47":2,"50":1,"51":2,"53":1,"54":5,"55":3,"60":8,"63":4,"65":2,"66":2,"68":1,"69":2,"72":1,"73":1,"74":1,"79":2,"83":3,"91":22,"97":1,"100":2,"102":1,"109":1,"110":2,"113":1,"114":1,"115":2,"120":1,"121":16,"130":6,"132":1,"147":3,"151":1,"152":2,"161":2,"162":1,"163":1,"164":1,"165":1,"168":1,"169":1}}],["fix1",{"2":{"130":2,"147":1}}],["fixme",{"2":{"120":1}}],["fix2",{"2":{"45":2}}],["fixed",{"2":{"10":3,"51":1,"53":1,"55":1}}],["fix",{"0":{"20":1},"2":{"2":3,"10":9,"15":3,"17":1,"20":1,"51":1,"52":11,"53":1,"54":11,"55":1,"56":10,"132":1,"134":1,"135":1,"138":1}}],["bx",{"2":{"120":2}}],["b2y",{"2":{"54":4}}],["b2x",{"2":{"54":4}}],["b2",{"2":{"54":47,"60":3,"97":6}}],["b``",{"2":{"52":1}}],["b`",{"2":{"52":3,"54":4,"56":4}}],["bigger",{"2":{"45":1}}],["bit",{"2":{"25":1,"27":1,"154":8,"163":2}}],["b1y",{"2":{"54":7}}],["b1x",{"2":{"54":7}}],["b1",{"2":{"45":8,"54":63,"97":6}}],["building",{"2":{"163":1}}],["build",{"2":{"45":13,"50":1,"51":1,"53":1,"55":1,"125":3,"126":1,"145":2,"153":1,"154":1}}],["built",{"2":{"17":1,"20":1}}],["buffers",{"2":{"121":1}}],["buffered",{"2":{"41":2}}],["buffering",{"2":{"40":1,"41":1}}],["buffer",{"0":{"41":1},"2":{"31":2,"41":5,"44":2,"45":1,"122":1}}],["but",{"2":{"5":2,"7":5,"8":3,"10":15,"18":1,"22":1,"25":1,"27":1,"34":1,"36":1,"37":1,"47":1,"54":2,"56":2,"63":4,"68":2,"91":1,"96":1,"97":5,"99":1,"100":1,"103":2,"104":1,"109":1,"120":1,"121":1,"122":1,"125":1,"128":1,"130":16,"140":1,"142":1,"147":1,"150":1,"157":1,"159":2,"164":2,"165":2,"167":1,"168":1,"169":1,"170":2}}],["b>",{"2":{"10":4}}],["bloat",{"2":{"165":1}}],["block",{"2":{"163":1}}],["blob",{"2":{"10":2,"150":1}}],["blue",{"2":{"14":1,"49":1,"62":2,"65":2,"82":2,"96":2,"109":2,"169":2}}],["black",{"2":{"10":2,"49":1,"164":1}}],["breaks",{"2":{"139":1}}],["break",{"2":{"45":3,"47":1,"52":2,"63":4,"91":11,"97":1,"121":6,"139":2}}],["brevity",{"2":{"40":1}}],["br>",{"2":{"10":2}}],["broadcasting",{"2":{"10":1,"40":1}}],["broken",{"2":{"7":1,"10":1,"80":1}}],["balancing",{"2":{"130":2}}],["barrier",{"2":{"130":1}}],["barycentric",{"0":{"9":1,"38":1,"40":1},"1":{"39":1,"40":1},"2":{"2":1,"4":6,"9":10,"10":17,"31":1,"38":9,"39":4,"40":52}}],["basicsgeoms",{"2":{"130":1}}],["basic",{"2":{"121":1}}],["base",{"2":{"31":4,"40":15,"41":1,"45":2,"121":6,"130":5,"143":1,"146":2,"147":1,"157":1,"159":3}}],["based",{"2":{"8":2,"10":3,"19":1,"34":2,"37":2,"39":2,"44":1,"47":1,"60":2,"63":1,"69":1,"83":1,"91":2,"97":1,"100":1,"110":1,"157":1,"167":1,"168":1,"169":1}}],["backs",{"2":{"50":4}}],["backwards",{"2":{"45":1,"52":1,"54":1,"56":1}}],["backing",{"2":{"45":1}}],["backend",{"2":{"41":2,"159":1}}],["back",{"2":{"10":1,"18":1,"22":1,"23":1,"50":4,"159":1}}],["b",{"2":{"7":2,"8":7,"10":13,"45":206,"47":9,"51":26,"52":18,"53":26,"54":77,"55":27,"56":39,"57":3,"63":29,"91":2,"97":22,"166":1}}],["box",{"2":{"46":2,"47":3,"169":1}}],["bounaries",{"2":{"91":1}}],["bounce",{"2":{"45":8,"51":1,"52":1,"53":1,"54":1,"55":1,"56":1}}],["bouncings",{"2":{"45":1}}],["bouncing",{"2":{"45":13,"52":3,"54":4,"56":4}}],["bounday",{"2":{"91":2,"103":2,"104":2,"105":2}}],["boundaries",{"2":{"7":2,"10":2,"78":2,"82":1,"83":1,"91":1,"93":1,"94":1,"121":1}}],["boundary",{"2":{"7":7,"10":7,"59":1,"65":1,"66":1,"68":1,"69":3,"72":4,"79":2,"80":9,"83":2,"85":1,"86":6,"87":3,"91":16,"99":2,"100":4,"102":3,"103":3,"104":1,"105":1,"109":1,"110":3}}],["bound",{"2":{"57":1}}],["bounding",{"2":{"45":1,"46":2,"47":3}}],["boundscheck",{"2":{"40":14}}],["bounds",{"2":{"10":1,"121":4}}],["bold",{"2":{"41":1,"143":1,"146":1}}],["border",{"2":{"10":8}}],["both",{"2":{"7":5,"10":6,"45":2,"54":4,"55":1,"56":1,"59":1,"63":3,"66":1,"80":4,"83":1,"91":2,"97":1,"104":1,"110":1,"145":1,"147":1}}],["booltype",{"2":{"130":3,"147":1,"158":3}}],["booleans",{"2":{"45":1,"91":2}}],["boolean",{"2":{"24":2,"45":1,"52":1,"54":1,"56":1,"130":1,"158":1,"168":1}}],["bool",{"2":{"7":17,"8":14,"10":40,"45":3,"63":17,"66":1,"69":1,"79":2,"80":13,"83":1,"91":2,"94":1,"97":10,"100":2,"110":1,"120":7,"121":6,"147":2,"158":2,"161":5}}],["boolsastypes",{"0":{"24":1,"158":1},"2":{"147":2,"158":6}}],["bools",{"2":{"3":1}}],["bypred",{"2":{"171":1}}],["by",{"0":{"73":1,"74":1,"114":1},"2":{"0":1,"5":3,"7":2,"8":8,"10":30,"17":1,"18":2,"19":1,"22":1,"24":1,"25":1,"26":1,"27":1,"33":1,"34":6,"36":1,"37":1,"40":4,"41":1,"43":5,"44":4,"45":14,"46":1,"47":6,"49":1,"50":6,"51":1,"53":1,"54":5,"55":4,"56":3,"60":5,"63":8,"66":1,"68":1,"69":1,"73":2,"74":2,"75":1,"76":2,"78":1,"90":2,"91":10,"120":2,"121":4,"125":2,"130":7,"136":2,"137":1,"139":3,"140":1,"142":2,"143":1,"144":1,"146":3,"147":1,"148":1,"150":1,"151":1,"152":3,"153":1,"160":1,"163":1,"164":1,"165":1,"167":1,"168":2,"169":1,"170":2,"171":1}}],["berlin",{"2":{"170":1}}],["beed",{"2":{"165":1}}],["been",{"2":{"52":1,"121":1,"123":2,"158":1}}],["bearing",{"2":{"120":4}}],["beauty",{"2":{"2":1}}],["better",{"2":{"80":1,"130":2,"150":1}}],["between",{"2":{"8":4,"10":18,"23":1,"34":2,"40":13,"45":1,"47":18,"51":1,"52":4,"53":1,"54":11,"55":2,"56":4,"60":8,"63":1,"91":4,"97":4,"121":1,"146":3,"147":1,"151":2,"152":2,"153":1,"164":1,"168":2,"169":1}}],["because",{"2":{"45":1,"123":1,"156":1}}],["become",{"2":{"22":1}}],["being",{"2":{"34":1,"54":1,"91":1,"97":1,"137":1}}],["behind",{"2":{"25":1,"26":1,"27":1,"39":1,"123":1}}],["behaviour",{"2":{"10":1,"18":1,"23":1,"150":1}}],["best",{"2":{"19":1,"130":2,"150":1}}],["beware",{"2":{"18":1}}],["benchmarking",{"2":{"146":1,"150":1}}],["benchmarkgroup",{"2":{"146":2,"150":3}}],["benchmark",{"0":{"146":1,"150":1},"2":{"146":1,"150":1}}],["benchmarktools",{"2":{"13":1,"146":1,"150":1}}],["benchmarks",{"2":{"2":2}}],["before",{"2":{"10":4,"40":1,"51":1,"53":1,"54":1,"55":1,"150":1,"164":1}}],["below",{"2":{"10":2,"17":1,"41":1,"135":1,"152":1,"153":1,"154":1,"167":1}}],["beginning",{"2":{"47":1,"163":1}}],["begin+1",{"2":{"40":5}}],["begin",{"2":{"2":1,"40":7,"130":2,"151":1,"167":1}}],["be",{"2":{"0":1,"2":1,"5":7,"7":3,"8":11,"9":4,"10":65,"13":2,"20":3,"23":2,"24":1,"25":3,"26":1,"27":3,"34":8,"37":7,"38":2,"39":1,"40":10,"41":2,"43":1,"44":3,"45":14,"46":1,"47":2,"50":1,"51":7,"52":4,"53":7,"54":12,"55":6,"56":5,"59":2,"60":4,"63":15,"69":6,"78":2,"79":1,"83":6,"91":21,"97":2,"100":6,"110":6,"112":1,"113":1,"114":1,"115":1,"120":2,"121":1,"125":2,"128":2,"129":2,"130":12,"132":1,"133":1,"134":1,"135":3,"136":4,"137":2,"139":2,"141":1,"142":3,"143":1,"144":1,"146":8,"147":2,"150":10,"152":1,"154":3,"158":1,"159":2,"160":1,"163":2,"165":1,"168":4}}],["wgs84",{"2":{"164":1}}],["wglmakie",{"2":{"14":1}}],["wₜₒₜ",{"2":{"40":8}}],["wᵢ",{"2":{"40":18}}],["wt",{"2":{"40":3}}],["w",{"2":{"13":13,"14":7,"60":4,"121":1}}],["walk",{"2":{"50":1}}],["wall2",{"2":{"47":7}}],["wall1",{"2":{"47":12}}],["walls",{"2":{"47":3}}],["wall",{"2":{"47":69}}],["wachspress",{"2":{"40":1}}],["wasincreasing",{"2":{"121":10}}],["wasn",{"2":{"45":1}}],["was",{"2":{"31":1,"34":1,"37":1,"39":1,"40":4,"41":1,"44":1,"45":1,"47":1,"50":1,"51":1,"52":3,"53":1,"54":2,"55":1,"56":3,"57":1,"60":1,"63":1,"66":1,"76":1,"79":1,"80":1,"90":1,"91":1,"94":1,"97":1,"107":1,"117":1,"120":1,"121":1,"122":1,"128":1,"130":1,"133":1,"136":1,"139":1,"140":1,"141":1,"143":1,"145":1,"147":1,"154":1,"155":1,"159":2,"160":1,"161":1}}],["wanted",{"2":{"171":1}}],["wants",{"2":{"130":1}}],["want",{"0":{"23":1,"57":1},"2":{"13":1,"18":1,"23":1,"40":1,"45":1,"120":1,"164":2,"166":1,"170":1,"171":1}}],["ways",{"2":{"137":1}}],["way",{"2":{"10":1,"17":1,"18":1,"24":1,"29":1,"38":1,"123":1,"134":1,"147":1,"157":1,"159":2,"166":1}}],["warn",{"2":{"121":2}}],["warned",{"2":{"10":1,"159":1}}],["warning",{"2":{"4":1,"9":1,"10":2,"24":1,"40":1,"130":1,"146":1,"156":1,"170":1}}],["won",{"2":{"23":1,"45":1,"130":1}}],["wouldn",{"2":{"54":1}}],["would",{"0":{"57":1},"2":{"10":3,"23":1,"51":1,"53":1,"54":1,"55":1,"121":1,"158":2,"164":1,"170":1,"171":1}}],["world",{"0":{"170":1},"2":{"168":1}}],["worrying",{"2":{"24":1}}],["words",{"2":{"7":1,"10":1,"65":1,"93":1,"99":1,"100":1}}],["workflow",{"2":{"80":1,"97":1}}],["workflows",{"2":{"23":1,"25":1,"27":1}}],["works",{"2":{"26":1,"142":1,"144":1}}],["working",{"2":{"7":1,"10":1,"80":1,"164":1}}],["work",{"2":{"2":1,"5":3,"10":3,"34":1,"37":2,"44":1,"47":2,"50":2,"60":1,"63":1,"91":1,"97":1,"120":1,"130":2,"142":1,"160":1,"170":1}}],["wrong",{"2":{"137":1,"154":1}}],["writing",{"2":{"167":1}}],["written",{"2":{"63":1}}],["write",{"2":{"0":1,"30":1,"121":1,"167":7}}],["wrap",{"2":{"8":1,"10":1,"141":1,"146":1}}],["wrapped",{"2":{"22":1,"121":2,"128":1,"130":1}}],["wrapper",{"0":{"30":1},"2":{"30":1,"34":1,"37":1,"44":1,"47":1,"60":1,"63":1,"69":1,"83":1,"97":1,"100":1,"110":1}}],["wrappers`",{"2":{"130":1}}],["wrappers",{"2":{"5":10,"10":12,"22":1,"120":2,"121":1,"125":1,"132":8,"133":1,"138":22,"145":1,"146":1,"150":1,"160":10,"161":1,"163":121,"164":5,"165":9}}],["wrappergeometry`",{"2":{"142":1}}],["wrappergeometry",{"2":{"5":1}}],["wrapping",{"2":{"5":1,"10":1,"63":1,"142":1,"155":1}}],["widely",{"2":{"167":1}}],["widths",{"2":{"14":1}}],["width",{"2":{"10":2}}],["wiki",{"2":{"91":1,"152":1}}],["wikipedia",{"2":{"91":1,"152":2}}],["wind",{"2":{"8":1,"10":2,"37":1,"63":1}}],["winding",{"2":{"8":2,"10":2,"37":3,"45":7,"63":1,"121":1}}],["without",{"2":{"5":2,"10":1,"17":1,"24":1,"45":1,"82":1,"97":1,"130":3,"142":1,"160":1}}],["with",{"0":{"52":1,"54":1,"56":1,"151":1,"152":1,"153":1,"165":1,"166":1},"2":{"5":5,"7":5,"8":7,"10":27,"11":1,"20":1,"22":2,"23":1,"33":1,"34":2,"37":7,"38":4,"39":1,"40":2,"44":1,"45":14,"47":6,"52":8,"53":5,"54":15,"55":1,"56":12,"59":1,"60":2,"69":1,"82":1,"86":1,"91":28,"93":1,"96":2,"97":5,"99":1,"100":1,"103":3,"104":2,"105":2,"115":1,"121":7,"123":1,"125":2,"128":1,"130":17,"132":1,"137":1,"141":1,"142":1,"144":1,"147":2,"150":2,"152":2,"153":1,"158":1,"159":1,"160":1,"162":1,"163":4,"164":6,"165":2,"166":2,"167":2,"168":1,"169":1,"170":1}}],["within",{"0":{"108":1,"109":1,"112":1,"113":1,"115":1,"116":1,"117":1},"1":{"109":1,"110":1},"2":{"0":1,"2":1,"4":2,"7":9,"8":3,"9":1,"10":13,"31":1,"34":2,"37":1,"38":3,"40":1,"44":1,"45":9,"46":2,"47":5,"52":1,"54":2,"55":1,"56":6,"59":1,"60":5,"65":2,"66":3,"68":2,"85":1,"91":9,"96":1,"97":9,"108":1,"109":6,"110":11,"111":6,"112":14,"113":15,"114":15,"115":7,"116":4,"117":4,"123":1,"168":1,"169":4,"170":2}}],["will",{"2":{"5":8,"8":7,"9":1,"10":43,"11":1,"18":3,"23":2,"24":1,"34":4,"37":3,"40":2,"44":1,"45":5,"47":1,"50":1,"51":4,"52":4,"53":4,"54":4,"55":4,"56":4,"59":2,"60":4,"63":1,"80":1,"120":1,"121":2,"125":2,"128":1,"129":2,"130":8,"132":1,"136":2,"137":1,"139":2,"142":3,"144":2,"146":3,"150":2,"152":1,"154":1,"159":1,"160":2,"164":1,"167":1,"168":2,"170":1,"171":1}}],["wip",{"2":{"4":1}}],["whole",{"2":{"91":1}}],["whose",{"2":{"7":1,"10":1,"80":1}}],["white",{"2":{"39":1}}],["while",{"2":{"34":1,"43":1,"44":1,"45":5,"54":2,"59":1,"63":1,"80":1,"91":1,"121":3,"139":1,"152":1,"154":2,"169":1}}],["whichever",{"2":{"10":1,"150":1}}],["which",{"2":{"0":1,"5":1,"8":2,"9":1,"10":7,"11":1,"13":1,"14":1,"17":1,"18":4,"20":1,"23":2,"36":1,"37":1,"38":1,"39":2,"40":5,"41":1,"45":11,"47":2,"54":2,"63":2,"91":3,"121":3,"122":1,"123":1,"130":1,"131":2,"132":1,"135":1,"137":1,"138":1,"143":1,"144":1,"145":1,"146":3,"147":2,"150":1,"152":2,"157":1,"159":4,"160":1,"167":3,"168":3,"169":6,"171":1}}],["what",{"0":{"22":1,"25":1,"30":1,"33":1,"36":2,"43":1,"46":1,"49":1,"59":2,"62":1,"65":1,"68":1,"78":1,"82":1,"93":1,"96":1,"99":1,"109":1,"128":1},"2":{"13":1,"14":1,"24":1,"43":1,"120":1,"121":1,"145":1,"158":1,"164":1,"170":1}}],["whatever",{"2":{"5":1,"10":1,"22":1,"130":1}}],["wheel",{"2":{"17":1}}],["whether",{"2":{"5":4,"8":1,"10":10,"119":1,"120":1,"127":2,"131":1}}],["when",{"2":{"5":1,"8":2,"9":1,"10":5,"18":1,"20":1,"23":2,"24":1,"37":1,"40":3,"44":1,"45":2,"52":5,"54":6,"56":7,"91":1,"121":1,"128":3,"130":1,"132":1,"135":1,"141":2,"150":1,"164":1,"165":2,"167":1,"171":1}}],["wherever",{"2":{"10":1,"155":1}}],["where",{"2":{"5":2,"8":5,"10":11,"20":1,"31":2,"34":8,"37":12,"38":2,"40":24,"44":8,"45":14,"47":8,"50":5,"51":2,"52":5,"53":3,"54":18,"55":2,"56":9,"60":25,"63":1,"91":9,"121":3,"130":53,"137":1,"142":1,"145":1,"155":1,"156":1,"157":5,"161":3,"163":4}}],["whyatt",{"2":{"148":1}}],["why",{"0":{"22":1,"23":1},"2":{"2":1,"17":1,"30":1,"37":1}}],["web",{"2":{"167":1}}],["west",{"2":{"47":8}}],["were",{"2":{"45":1,"121":1,"169":1}}],["welcome",{"2":{"25":1,"27":1}}],["well",{"2":{"17":1,"45":1,"47":1,"144":1,"148":1,"158":1}}],["weighting",{"2":{"43":2,"44":1}}],["weights",{"2":{"38":4}}],["weight",{"2":{"10":5,"40":14,"44":1}}],["weighted",{"2":{"4":1,"10":2,"38":3,"40":4,"44":4}}],["we",{"0":{"57":2},"2":{"0":1,"11":1,"13":1,"17":3,"19":1,"23":3,"24":1,"25":2,"26":1,"27":2,"34":1,"36":2,"37":2,"39":4,"40":8,"41":2,"44":1,"45":7,"47":4,"52":8,"53":2,"54":3,"56":1,"60":1,"62":1,"63":5,"65":1,"66":1,"68":1,"69":1,"79":1,"82":1,"83":1,"91":2,"93":3,"94":1,"96":1,"97":2,"99":1,"100":1,"109":1,"110":1,"121":21,"122":1,"128":1,"130":21,"131":1,"143":1,"144":2,"145":2,"146":3,"147":1,"150":5,"154":2,"156":1,"158":4,"159":1,"162":2,"163":4,"164":6,"165":4,"166":1,"167":3,"168":3,"169":7}}],["my",{"2":{"170":1,"171":2}}],["moore",{"2":{"121":1}}],["moved",{"2":{"45":1,"142":1}}],["move",{"2":{"44":1,"91":1}}],["mode",{"2":{"171":3}}],["model",{"2":{"168":1}}],["modify",{"2":{"163":1}}],["modified",{"2":{"130":2}}],["module",{"2":{"142":1,"147":1}}],["modules",{"2":{"10":1,"40":1}}],["mod1",{"2":{"40":5}}],["mod",{"2":{"40":1,"45":1}}],["most",{"2":{"25":1,"27":1,"45":1,"52":1,"54":1,"56":1,"91":1,"150":1,"167":2}}],["monotone",{"2":{"20":1}}],["moment",{"2":{"10":1,"145":1,"147":1}}],["more",{"2":{"0":1,"2":1,"3":1,"10":3,"11":1,"23":1,"26":1,"29":1,"45":1,"51":1,"53":1,"55":1,"91":1,"97":1,"130":4,"133":1,"143":1,"145":1,"147":1,"163":2,"168":1}}],["mistakenly",{"2":{"137":1}}],["missing",{"2":{"125":6,"126":2,"145":4}}],["missed",{"2":{"121":1}}],["mid",{"2":{"47":2,"91":3}}],["midpoint",{"2":{"45":2}}],["middle",{"2":{"45":2}}],["mining",{"2":{"170":1}}],["minimal",{"2":{"170":1}}],["minimize",{"2":{"54":1}}],["minimum",{"2":{"8":7,"10":12,"46":1,"47":2,"60":12,"150":1,"151":1,"153":1}}],["mind",{"2":{"145":1,"169":1}}],["minmax",{"2":{"54":4}}],["min",{"2":{"47":1,"54":16,"60":15,"150":1,"152":3,"153":1,"154":28}}],["minus",{"2":{"36":1}}],["minpoints=0",{"2":{"121":1}}],["minpoints",{"2":{"10":2}}],["might",{"2":{"10":3,"25":1,"27":1,"37":1,"51":1,"53":1,"54":1,"55":1,"134":1,"152":1}}],["mixed",{"2":{"10":4,"150":1}}],["m",{"2":{"9":1,"10":1,"15":10,"40":2,"47":6,"120":2,"164":1}}],["mp",{"2":{"80":2}}],["mp1",{"2":{"8":2,"10":2,"63":7}}],["mp2",{"2":{"8":2,"10":2,"63":8}}],["mdash",{"2":{"5":4,"7":9,"8":8,"9":3,"10":87,"125":3,"135":1,"136":4}}],["mercator",{"2":{"164":1}}],["merge",{"2":{"130":1}}],["measure",{"2":{"130":1,"144":1}}],["meant",{"2":{"26":1}}],["meaning",{"2":{"7":3,"8":1,"10":4,"24":1,"37":1,"41":1,"97":4,"120":1}}],["means",{"2":{"7":1,"10":2,"36":1,"37":1,"41":1,"68":1,"91":3,"96":1,"97":1,"120":1,"128":1}}],["mean",{"2":{"4":1,"10":5,"17":1,"39":2,"40":5,"130":1}}],["meanvalue",{"2":{"4":1,"9":2,"10":3,"38":1,"39":2,"40":15}}],["meets",{"2":{"91":9,"97":1,"152":1}}],["meet",{"2":{"54":3,"68":1,"69":1,"83":1,"91":7,"100":1,"110":1}}],["memory",{"2":{"40":1,"165":1}}],["mesh",{"2":{"39":1,"130":1}}],["message",{"2":{"10":1,"159":1}}],["me",{"0":{"23":1}}],["mentioned",{"2":{"19":1}}],["mentions",{"2":{"10":1,"159":1}}],["menu",{"2":{"14":3}}],["median",{"2":{"13":4,"130":1}}],["mechanics",{"2":{"10":1,"40":1}}],["met",{"2":{"91":44}}],["meters",{"2":{"10":4,"145":1,"146":4,"164":1}}],["methoderror",{"2":{"31":3}}],["method",{"0":{"143":1},"2":{"5":1,"8":1,"9":10,"10":96,"24":1,"34":1,"37":1,"40":37,"41":2,"44":1,"47":1,"54":1,"56":1,"60":4,"63":1,"69":2,"83":2,"97":1,"100":2,"110":2,"121":1,"130":5,"142":1,"143":2,"145":2,"146":9,"147":14,"148":2,"158":1,"159":3,"168":1,"171":1}}],["methods",{"0":{"6":1,"7":1,"8":1,"10":1},"1":{"7":1,"8":1},"2":{"2":1,"5":1,"10":9,"25":1,"27":1,"31":26,"40":3,"69":1,"83":1,"100":1,"110":1,"121":1,"125":1,"128":1,"130":2,"145":1,"150":2,"157":1,"160":1,"163":1}}],["mutation",{"2":{"166":1}}],["mutlipolygon",{"2":{"8":1,"10":1,"44":1}}],["muladd",{"2":{"40":2}}],["multilinestringtrait",{"2":{"135":1}}],["multilinestring",{"2":{"10":1,"130":1,"161":2}}],["multi",{"0":{"75":1,"76":1,"89":1,"90":1,"106":1,"107":1,"116":1,"117":1},"2":{"8":2,"10":3,"34":1,"37":1,"47":1,"63":2,"75":1,"76":1,"89":1,"90":1,"106":1,"107":1,"116":1,"117":1}}],["multicurves",{"2":{"37":1,"47":1}}],["multicurve",{"2":{"8":1,"10":1,"37":1}}],["multigeometry",{"2":{"8":2,"10":2,"60":2}}],["multiplication",{"2":{"147":1}}],["multiplied",{"2":{"40":3}}],["multiple",{"2":{"8":1,"10":1,"40":1,"91":1,"141":1,"154":1,"163":1,"167":1}}],["multiply",{"2":{"5":1,"10":1,"160":1}}],["multipolys",{"2":{"56":3}}],["multipoly`",{"2":{"51":2,"53":2,"55":2}}],["multipoly",{"2":{"10":9,"15":3,"51":1,"52":27,"53":1,"54":26,"55":1,"56":24,"139":22,"150":9}}],["multipolygon`",{"2":{"121":1}}],["multipolygons",{"2":{"7":1,"8":1,"10":11,"44":1,"51":3,"53":3,"54":3,"55":3,"59":1,"63":1,"97":2,"138":1,"163":1,"164":1}}],["multipolygon",{"2":{"7":2,"8":5,"10":16,"37":2,"43":1,"51":1,"52":7,"53":1,"54":5,"55":1,"56":6,"63":4,"97":2,"121":7,"130":1,"136":2,"137":7,"138":8,"139":2,"150":3,"163":8,"164":1}}],["multipolygontrait",{"2":{"5":1,"7":4,"8":2,"10":7,"23":1,"52":4,"54":4,"56":4,"63":6,"75":1,"76":1,"89":1,"90":1,"97":8,"106":1,"107":1,"116":1,"117":1,"130":1,"135":1,"139":4}}],["multipoint",{"2":{"8":5,"10":5,"37":1,"63":5,"80":6,"130":4,"150":1,"163":5}}],["multipoints",{"2":{"7":2,"8":1,"10":3,"37":1,"47":1,"63":2,"97":2,"150":1,"163":1}}],["multipointtrait",{"2":{"5":1,"7":2,"8":4,"10":8,"34":2,"37":1,"47":1,"63":8,"75":1,"76":1,"80":4,"89":1,"90":1,"97":4,"106":1,"107":1,"116":1,"117":1,"128":1,"135":1,"150":2,"161":1}}],["multithreading",{"2":{"5":2,"8":1,"10":5,"127":1}}],["multifloats",{"2":{"13":1,"14":1,"15":1}}],["multifloat",{"2":{"0":1}}],["much",{"2":{"4":1,"10":3,"51":1,"53":1,"55":1}}],["must",{"2":{"2":1,"5":1,"7":8,"8":2,"9":1,"10":23,"34":1,"40":5,"41":1,"45":2,"47":3,"50":1,"54":2,"63":5,"66":2,"69":1,"78":1,"79":1,"83":1,"91":13,"97":1,"99":1,"100":1,"110":2,"121":1,"125":1,"130":1,"134":1,"135":3,"136":1,"142":1,"146":1,"147":1,"150":1,"154":4,"159":1}}],["manner",{"2":{"168":1}}],["manipulate",{"2":{"167":1}}],["manually",{"2":{"131":1}}],["many",{"2":{"8":1,"9":1,"10":2,"23":1,"26":1,"40":1,"45":1,"50":1,"52":1,"54":2,"56":1,"63":1,"132":1,"141":1}}],["mason",{"2":{"130":2}}],["markersize",{"2":{"163":2}}],["marker",{"2":{"163":2}}],["marked",{"2":{"45":6,"52":1,"54":1,"56":1}}],["marking",{"2":{"52":2,"54":2,"56":2}}],["mark",{"2":{"45":2}}],["marks",{"2":{"45":1}}],["mag",{"2":{"34":4}}],["making",{"2":{"45":1,"121":1,"128":1,"138":1,"163":1,"165":2}}],["makie",{"2":{"13":1,"14":1,"33":1,"36":1,"39":3,"43":1,"46":1,"49":4,"59":1,"62":1,"65":1,"68":1,"78":1,"82":1,"93":1,"96":1,"99":1,"109":1,"121":3,"149":1,"150":1}}],["makevalid",{"2":{"150":2}}],["makes",{"2":{"37":1,"45":1,"60":1,"130":1,"132":1,"137":1,"138":1}}],["make",{"2":{"2":1,"25":1,"27":1,"34":1,"45":3,"54":1,"60":1,"97":1,"121":2,"128":1,"133":1,"145":1,"154":1,"156":1,"163":2,"165":1}}],["mapped",{"2":{"167":1}}],["maptasks",{"2":{"130":7}}],["mapreducetasks",{"2":{"130":5}}],["mapreduce",{"2":{"52":1,"121":2,"130":8}}],["map",{"0":{"164":1},"2":{"10":1,"13":1,"18":3,"19":1,"29":1,"40":1,"45":1,"54":1,"97":2,"121":17,"130":25,"133":1,"150":1,"157":1,"162":1,"164":1,"165":1,"167":1}}],["maximal",{"2":{"54":1}}],["maximum",{"2":{"7":1,"10":4,"14":1,"46":1,"47":4,"80":1,"121":1,"146":1,"147":1,"152":4}}],["max",{"2":{"10":9,"34":2,"47":1,"121":1,"130":2,"145":5,"146":8,"147":7,"152":36,"154":1}}],["made",{"2":{"10":2,"44":1,"45":1,"54":1,"104":1,"128":1,"136":1,"139":1,"153":1}}],["matlab",{"2":{"49":1}}],["materializer`",{"2":{"130":1}}],["materializer",{"2":{"22":1,"130":1}}],["matches",{"2":{"63":1,"121":1}}],["match",{"2":{"10":1,"63":12,"97":3,"121":1,"125":1,"130":2}}],["matching",{"2":{"7":1,"10":1,"22":1,"63":3,"97":1,"128":2}}],["matrix",{"2":{"10":1,"14":2,"40":1}}],["mathrm",{"2":{"40":1}}],["mathematically",{"2":{"10":1,"120":1}}],["math",{"2":{"0":1}}],["maybe",{"2":{"10":1,"91":4,"125":1,"130":6}}],["may",{"2":{"5":1,"10":5,"23":2,"24":1,"40":2,"45":1,"54":1,"120":1,"122":1,"128":1,"130":4,"137":1,"138":1,"146":1,"157":1}}],["mainly",{"2":{"40":1,"59":1,"123":1}}],["maintain",{"2":{"37":1}}],["main",{"0":{"28":1},"1":{"29":1,"30":1},"2":{"0":1,"26":1,"45":1,"121":1,"130":1,"146":1}}],["snapped",{"2":{"121":1}}],["s3",{"2":{"45":3}}],["scratch",{"2":{"167":1}}],["sciences",{"2":{"164":1}}],["scalefactor",{"2":{"146":3}}],["scattered",{"2":{"169":1}}],["scatter",{"2":{"43":1,"59":2,"62":2,"65":2,"68":1,"78":1,"82":2,"96":2,"109":2,"169":1}}],["schema",{"2":{"130":6}}],["scheme",{"2":{"44":1}}],["scenario",{"2":{"91":2}}],["scene",{"2":{"14":1}}],["skipmissing",{"2":{"121":1}}],["skipped",{"2":{"121":1}}],["skip",{"2":{"37":1,"91":14,"121":1,"154":4}}],["skygering",{"2":{"0":1}}],["square",{"2":{"60":1,"151":1,"152":1}}],["squared",{"2":{"10":2,"47":2,"60":12,"151":2,"152":7}}],["sqrt",{"2":{"34":2,"44":1,"60":3}}],["sgn",{"2":{"34":5}}],["smallest",{"2":{"34":2,"54":1}}],["sᵢ₋₁",{"2":{"40":25}}],["sᵢ₊₁",{"2":{"10":2,"40":41}}],["sᵢ",{"2":{"10":4,"40":46}}],["src",{"2":{"10":2}}],["syntax",{"2":{"166":1}}],["symdifference",{"2":{"122":1}}],["sym10100477",{"2":{"91":1}}],["symbol=",{"2":{"80":1}}],["symbol",{"2":{"10":1,"159":2}}],["system",{"0":{"164":1,"165":1},"2":{"5":2,"142":2,"162":2,"164":1}}],["switches",{"2":{"54":1,"56":1}}],["switch",{"2":{"45":1,"56":1,"158":1}}],["switching",{"2":{"10":1,"47":1}}],["swap",{"2":{"10":1,"56":1,"60":2,"140":1}}],["swapped",{"2":{"7":1,"10":1,"66":1,"69":1,"79":1,"80":1,"94":1,"97":1}}],["swapping",{"2":{"5":1,"10":1,"130":1}}],["s2",{"2":{"10":4,"40":6,"45":3}}],["s1",{"2":{"10":3,"40":6,"45":3}}],["saving",{"0":{"167":1}}],["saved",{"2":{"63":1}}],["save",{"2":{"34":1,"162":1,"167":3}}],["samples",{"2":{"13":1}}],["sample",{"2":{"13":1}}],["same",{"2":{"7":2,"8":12,"10":23,"18":1,"34":3,"37":1,"45":15,"47":1,"50":1,"51":3,"53":1,"54":1,"55":1,"56":1,"59":1,"62":2,"63":30,"91":2,"96":1,"97":8,"125":1,"128":1,"130":6,"131":1,"136":2,"138":1,"139":2,"145":1,"163":1,"164":1,"167":1}}],["say",{"2":{"10":1,"40":1,"146":1}}],["span",{"2":{"169":1}}],["spatial",{"0":{"168":1},"1":{"169":1,"170":1,"171":1},"2":{"168":6,"169":3,"171":1}}],["spawn",{"2":{"130":5}}],["space",{"2":{"10":2,"25":1,"27":1,"34":1,"36":1,"91":1,"146":1,"147":1}}],["sp",{"2":{"91":2}}],["split",{"2":{"50":1}}],["specialized",{"2":{"25":1,"27":1}}],["specify",{"2":{"10":1,"125":1,"130":1,"164":1,"165":1,"168":1}}],["specification",{"2":{"132":1,"135":1,"137":1,"138":1}}],["specifically",{"2":{"10":2,"40":3,"148":1,"168":1}}],["specific",{"2":{"45":1,"69":1,"83":1,"100":1,"110":1,"130":5}}],["specified",{"2":{"7":1,"10":2,"45":1,"52":2,"54":2,"56":2,"97":1,"128":1,"150":1}}],["slow",{"2":{"170":1}}],["slower",{"2":{"10":1,"159":2}}],["slope2",{"2":{"120":2}}],["slope1",{"2":{"120":2}}],["slidergrid",{"2":{"14":1}}],["sliders",{"2":{"14":3}}],["slighly",{"2":{"8":1,"10":1,"37":1}}],["slightly",{"2":{"8":1,"10":1,"37":1}}],["sve",{"2":{"5":1,"10":1,"160":1}}],["svector",{"2":{"5":14,"10":14,"45":5,"51":1,"54":2,"56":6,"91":1,"121":1,"160":13,"163":6,"165":4}}],["suite",{"2":{"146":5,"150":13}}],["suggestion",{"2":{"143":1}}],["sun",{"2":{"91":1}}],["surrounds",{"2":{"91":1}}],["sure",{"2":{"2":1,"34":1,"45":2,"60":1,"97":1,"154":1}}],["suppose",{"2":{"170":1,"171":1}}],["support",{"2":{"41":1,"144":1,"171":1}}],["supports",{"2":{"39":1,"40":1,"167":1,"171":2}}],["supported",{"2":{"23":1,"167":1}}],["supertype",{"2":{"10":1,"40":1}}],["sukumar",{"2":{"10":1,"40":1}}],["such",{"2":{"8":1,"10":1,"36":1,"49":1,"128":1,"141":1}}],["sum=1",{"2":{"40":1}}],["sum",{"2":{"8":2,"10":3,"11":6,"36":1,"37":2,"38":2,"40":8,"47":1,"60":2,"120":5,"154":1,"161":4}}],["sublevel",{"2":{"170":1}}],["subsequent",{"2":{"163":1}}],["substituted",{"2":{"5":1,"10":1,"130":1}}],["subgeom1",{"2":{"130":2}}],["subgeom",{"2":{"130":3}}],["subject",{"2":{"45":1}}],["subtype",{"2":{"130":1}}],["subtypes",{"2":{"10":2,"40":2}}],["subtracted",{"2":{"120":1}}],["subtitle",{"2":{"13":1,"39":2,"146":1,"150":2}}],["sub",{"2":{"8":6,"10":7,"34":1,"37":3,"47":1,"52":6,"54":3,"56":4,"60":2,"75":2,"76":2,"89":2,"90":2,"106":2,"107":2,"116":2,"117":2,"130":3,"137":4,"138":2,"139":4}}],["sites",{"2":{"170":1}}],["sides",{"2":{"45":3,"132":1}}],["side",{"2":{"34":4,"45":26}}],["signals",{"2":{"129":1}}],["sign",{"2":{"13":2,"14":2,"34":7,"37":2,"120":3}}],["signed",{"0":{"35":1,"36":1,"58":1,"59":1},"1":{"36":1,"37":1,"59":1,"60":1},"2":{"4":4,"8":15,"10":18,"11":3,"35":1,"36":5,"37":23,"47":3,"58":1,"59":7,"60":19}}],["six",{"2":{"10":1,"150":1}}],["size=",{"2":{"164":1}}],["sizehint",{"2":{"45":2,"52":1,"147":1}}],["size",{"2":{"10":4,"13":2,"14":5,"39":1,"56":1,"121":2,"130":4,"150":1}}],["sin",{"2":{"163":3,"164":1,"165":2}}],["singed",{"2":{"60":1}}],["singular",{"2":{"54":1}}],["singlepoly",{"2":{"150":6}}],["single",{"2":{"8":6,"10":10,"23":1,"34":2,"37":1,"47":1,"63":5,"96":2,"121":2,"136":2,"137":1,"139":2,"163":3,"167":1}}],["since",{"2":{"5":1,"10":2,"26":1,"34":1,"37":1,"44":1,"47":2,"55":1,"60":1,"63":1,"91":1,"97":2,"104":1,"142":1,"158":1,"159":2,"170":1}}],["simulation",{"2":{"23":1}}],["simultaneously",{"2":{"20":1}}],["similarly",{"2":{"123":1}}],["similar",{"2":{"5":1,"10":3,"18":1,"25":1,"27":1,"29":1,"41":1,"121":2,"130":1,"146":2,"147":1,"155":1}}],["simplication",{"2":{"150":1}}],["simplifier",{"2":{"150":4}}],["simplified",{"2":{"23":1,"149":1}}],["simplifies",{"2":{"10":3,"151":1,"152":1,"153":1}}],["simplification",{"0":{"148":1},"1":{"149":1,"150":1},"2":{"10":2,"148":2,"150":2}}],["simplifying",{"2":{"148":1}}],["simplifyalgs",{"2":{"154":1}}],["simplifyalg",{"2":{"4":1,"10":8,"150":5,"151":2,"152":2,"153":2}}],["simplify",{"0":{"151":1,"152":1,"153":1},"2":{"2":1,"4":1,"10":15,"31":1,"45":1,"123":1,"149":1,"150":41,"151":1,"152":2,"153":1}}],["simple",{"0":{"169":1},"2":{"10":2,"40":1,"123":3,"140":1,"142":1,"149":2,"150":2,"158":1}}],["simpler",{"2":{"10":1,"121":1}}],["simply",{"2":{"0":1,"36":1,"41":1,"45":1,"54":1,"56":1,"66":1,"79":1,"94":1,"121":1,"134":1,"142":1,"143":1,"146":1,"163":1,"166":1}}],["step",{"2":{"45":7,"51":1,"52":3,"53":1,"54":3,"55":1,"56":3,"121":4,"161":1}}],["storing",{"2":{"167":1}}],["stored",{"2":{"45":2,"169":1}}],["stores",{"2":{"45":1}}],["store",{"2":{"40":1,"167":1}}],["stopping",{"2":{"152":2}}],["stops",{"2":{"128":1}}],["stop",{"2":{"18":2,"80":3,"91":4,"97":3}}],["style",{"2":{"10":2}}],["style=",{"2":{"10":2}}],["straightline",{"2":{"121":3}}],["straight",{"2":{"121":6}}],["strait",{"2":{"121":1}}],["structs",{"2":{"20":1,"135":1}}],["structures",{"2":{"123":1}}],["structure",{"2":{"10":2,"125":1,"130":1,"140":1}}],["struct",{"2":{"10":3,"40":2,"45":2,"133":1,"139":2,"146":2,"151":1,"152":1,"153":1,"157":3,"158":2,"159":4}}],["strings",{"2":{"10":1,"44":1,"54":1}}],["string",{"2":{"5":2,"14":1,"43":1,"44":1,"142":2}}],["standardized",{"2":{"91":1}}],["standards",{"2":{"91":1}}],["stay",{"2":{"56":1}}],["stackoverflow",{"2":{"54":1}}],["stack",{"2":{"50":1}}],["states",{"2":{"150":1}}],["state",{"2":{"55":1,"170":9}}],["status",{"2":{"45":31,"52":4,"54":5,"56":4,"121":1}}],["static",{"2":{"158":1}}],["staticarray",{"2":{"40":1}}],["staticarrays",{"2":{"31":1,"45":5,"51":1,"54":2,"56":6,"91":1,"121":1,"160":2}}],["staticarraysco",{"2":{"5":1,"10":1,"160":1}}],["staticarrayscore",{"2":{"5":10,"10":10,"40":1,"160":10,"163":6,"165":4}}],["statica",{"2":{"5":1,"10":1,"160":1}}],["statistics",{"2":{"13":2,"31":1}}],["stability",{"2":{"23":1,"30":1}}],["stable",{"2":{"13":1,"24":1,"147":1}}],["started",{"2":{"45":1}}],["starting",{"2":{"44":2,"45":1,"47":1,"54":1,"139":4}}],["startvalue",{"2":{"14":4}}],["start",{"2":{"10":1,"18":1,"34":7,"40":1,"45":76,"47":17,"52":4,"54":4,"56":5,"63":1,"80":4,"91":44,"97":3,"112":1,"121":2,"131":1,"152":16,"163":1}}],["stage",{"2":{"0":1}}],["still",{"2":{"4":1,"37":1,"44":1,"45":3,"68":1,"152":1}}],["solution",{"2":{"91":1}}],["solid",{"2":{"10":2}}],["south",{"2":{"47":7}}],["source",{"2":{"5":10,"7":19,"8":22,"9":3,"10":89,"26":4,"80":2,"125":3,"135":1,"136":4,"142":3,"164":13,"165":1}}],["sort",{"2":{"45":4,"50":2,"54":2,"55":2,"91":1,"97":2,"121":1,"152":1}}],["sorted",{"2":{"20":1,"45":1,"152":7,"168":1}}],["someone",{"2":{"159":1}}],["something",{"0":{"57":1},"2":{"3":1}}],["some",{"2":{"2":1,"7":1,"10":3,"17":1,"40":4,"63":1,"91":3,"97":1,"121":1,"122":1,"123":2,"128":2,"130":2,"134":1,"135":2,"136":1,"154":1,"156":2,"162":2,"168":1,"171":1}}],["so",{"2":{"2":1,"5":1,"8":4,"10":10,"17":1,"19":1,"25":1,"27":1,"31":1,"39":1,"40":1,"45":1,"46":1,"54":1,"55":2,"56":2,"59":1,"60":1,"62":1,"63":4,"65":1,"82":1,"91":2,"93":1,"109":1,"121":3,"125":1,"130":6,"144":1,"145":1,"146":3,"147":1,"154":1,"159":2,"160":1,"164":1,"165":1}}],["series",{"2":{"163":1}}],["serve",{"2":{"10":1,"40":1}}],["searchsortedfirst",{"2":{"152":1}}],["seg2",{"2":{"120":2}}],["seg1",{"2":{"120":3}}],["seg",{"2":{"91":23,"97":9}}],["segmentation",{"2":{"145":1}}],["segments",{"2":{"23":1,"31":1,"33":2,"34":1,"43":1,"44":2,"45":3,"47":1,"54":6,"91":18,"146":1,"147":3}}],["segmentization",{"2":{"144":1}}],["segmentizing",{"2":{"10":3,"145":1,"146":2,"147":1}}],["segmentized",{"2":{"145":1}}],["segmentizes",{"2":{"144":1}}],["segmentizemethod",{"2":{"10":1,"146":3,"147":2}}],["segmentize",{"0":{"144":1},"1":{"145":1,"146":1,"147":1},"2":{"4":1,"10":4,"31":1,"41":1,"123":1,"144":1,"145":5,"146":11,"147":13}}],["segment",{"2":{"8":4,"10":7,"34":1,"44":5,"45":6,"47":3,"49":1,"54":17,"60":2,"80":3,"91":43,"97":3,"120":2,"144":1,"146":2,"147":1}}],["separate",{"2":{"121":1,"130":1,"158":1,"167":1,"169":1}}],["separately",{"2":{"40":1,"121":1}}],["seperates",{"2":{"91":1}}],["seperate",{"2":{"45":1,"54":1}}],["sense",{"2":{"37":1,"60":1}}],["several",{"2":{"20":2,"37":1,"131":1,"139":1}}],["selected",{"2":{"121":1}}],["selectednode",{"2":{"121":3}}],["selection",{"2":{"14":1}}],["select",{"2":{"10":1,"157":1}}],["self",{"2":{"2":2}}],["setup=",{"2":{"69":1,"83":1,"100":1,"110":1}}],["sets",{"2":{"45":1}}],["setting",{"2":{"23":1}}],["set",{"0":{"23":1},"2":{"7":2,"8":7,"10":19,"23":1,"34":1,"38":2,"40":8,"45":3,"51":2,"53":2,"54":7,"55":2,"62":2,"63":10,"69":1,"80":1,"83":1,"91":2,"97":1,"100":1,"110":1,"120":1,"121":1,"136":2,"139":2,"152":2,"163":1,"167":1,"169":3}}],["section",{"2":{"26":1,"91":3,"96":1}}],["sections",{"2":{"3":1,"26":1}}],["seconds=1",{"2":{"146":3,"150":8}}],["secondisleft",{"2":{"121":4}}],["secondisstraight",{"2":{"121":7}}],["secondary",{"2":{"7":3,"10":3,"66":1,"69":1,"110":1}}],["second",{"2":{"7":8,"10":9,"45":1,"54":4,"63":1,"65":2,"66":1,"68":1,"69":1,"72":1,"73":1,"74":1,"79":2,"83":2,"91":2,"100":1,"109":1,"110":1,"113":1,"114":1,"115":2,"152":1,"165":1,"168":1}}],["seem",{"2":{"25":1,"27":1}}],["see",{"2":{"0":1,"10":3,"29":1,"43":1,"60":1,"62":1,"65":1,"68":1,"82":1,"91":5,"93":1,"96":1,"99":1,"109":1,"121":2,"132":1,"133":1,"135":1,"136":3,"138":1,"139":2,"145":2,"152":1,"169":2}}],["shp",{"2":{"167":1}}],["ships",{"2":{"164":1}}],["shifting",{"2":{"165":1}}],["shift",{"2":{"163":3}}],["sharing",{"2":{"82":1}}],["shares",{"2":{"54":1}}],["share",{"2":{"8":7,"10":8,"62":2,"63":8,"86":2,"87":1,"88":1,"97":1,"105":1}}],["shared",{"0":{"154":1},"2":{"7":1,"10":1,"45":2,"54":2,"97":3}}],["shapes",{"2":{"60":1,"167":7}}],["shape",{"2":{"43":1,"52":1,"54":1,"62":1,"138":1,"163":1}}],["shaped",{"2":{"39":1}}],["shapefiles",{"2":{"167":1}}],["shapefile",{"2":{"29":1,"167":4}}],["shallower",{"2":{"5":1,"10":1,"130":1}}],["short",{"2":{"130":1}}],["shoelace",{"2":{"8":1,"10":1,"37":2,"47":1}}],["shouldn",{"2":{"54":1}}],["should",{"2":{"5":1,"8":1,"10":14,"17":1,"18":1,"20":2,"25":1,"27":1,"34":3,"37":1,"44":1,"45":3,"46":1,"63":1,"91":4,"121":2,"125":1,"130":2,"132":1,"135":4,"136":2,"147":1,"150":2,"158":1}}],["show",{"2":{"2":1,"11":1,"13":1,"14":1,"39":1,"139":1,"164":1,"167":1,"168":2}}],["shewchuck",{"2":{"0":1}}],["s",{"0":{"30":1},"2":{"0":1,"2":1,"4":1,"10":9,"18":1,"19":1,"29":1,"34":1,"36":1,"37":4,"38":1,"39":2,"40":5,"43":3,"44":3,"45":3,"47":1,"49":1,"52":1,"54":2,"56":3,"60":1,"63":1,"78":2,"85":3,"86":4,"87":2,"91":9,"97":1,"105":1,"121":5,"123":2,"125":3,"126":1,"130":1,"133":1,"136":4,"137":1,"139":3,"145":4,"146":1,"148":1,"150":2,"154":4,"157":2,"158":1,"159":6,"163":6,"164":4,"165":4,"166":2,"167":5,"171":2}}],["automatically",{"2":{"164":1}}],["autmoatically",{"2":{"97":1}}],["ay",{"2":{"120":2}}],["azimuth",{"2":{"120":2}}],["against",{"2":{"63":1,"91":2,"146":1,"150":1}}],["again",{"2":{"54":1,"130":1}}],["a``",{"2":{"52":2}}],["a`",{"2":{"52":7,"54":3,"56":2}}],["away",{"2":{"41":1,"80":1,"171":1}}],["a2y",{"2":{"54":4}}],["a2x",{"2":{"54":4}}],["a2",{"2":{"39":4,"54":54,"97":6}}],["a1y",{"2":{"54":7}}],["a1x",{"2":{"54":7}}],["a1",{"2":{"39":2,"45":9,"54":66,"97":6}}],["america",{"2":{"150":1}}],["am",{"2":{"91":1}}],["ambiguity",{"2":{"60":2,"130":5}}],["amounts",{"2":{"167":1}}],["amount",{"2":{"36":1,"46":1}}],["amp",{"2":{"2":1,"10":1}}],["axes",{"2":{"121":6}}],["ax",{"2":{"13":3,"14":3,"120":2,"163":5}}],["axislegend",{"2":{"145":1,"149":1}}],["axis",{"2":{"13":2,"14":1,"33":1,"36":1,"39":4,"43":1,"46":1,"59":1,"121":2,"145":1,"150":1}}],["axs",{"2":{"13":2}}],["a>",{"2":{"10":2}}],["availible",{"2":{"44":1}}],["available",{"0":{"136":1},"2":{"10":3,"31":1,"135":3,"144":1,"145":1,"147":1,"150":1,"154":1,"157":1}}],["average",{"2":{"38":3,"44":4,"54":1}}],["avoid",{"2":{"9":1,"10":7,"40":1,"51":1,"53":1,"54":1,"55":1,"56":1,"121":2,"130":5,"147":1,"151":1,"152":1,"153":1,"163":3}}],["achieve",{"2":{"137":1}}],["across",{"2":{"128":1}}],["acos",{"2":{"34":1}}],["activate",{"2":{"145":1}}],["action",{"2":{"20":2}}],["actions",{"2":{"20":2}}],["actuall",{"2":{"5":1,"10":1,"160":1}}],["actually",{"2":{"2":1,"40":4,"54":1,"56":3,"91":1,"121":1,"167":1}}],["actual",{"2":{"3":1,"40":1,"120":1,"133":1,"142":1,"146":1}}],["access",{"2":{"164":1}}],["accessed",{"2":{"159":1}}],["acceptable",{"2":{"91":1}}],["accept",{"2":{"10":1,"159":1}}],["according",{"2":{"132":1,"137":1,"138":1,"169":1}}],["accordingly",{"2":{"45":1}}],["account",{"2":{"51":1,"53":1}}],["accurary",{"2":{"54":1}}],["accuratearithmetic",{"2":{"11":2}}],["accurate",{"0":{"11":1},"2":{"11":3,"145":1}}],["accumulators",{"2":{"40":1}}],["accumulator",{"2":{"40":1}}],["accumulate",{"2":{"37":1,"44":3}}],["accumulation",{"0":{"11":1},"2":{"40":1}}],["after",{"2":{"10":8,"34":1,"45":3,"130":1,"150":2}}],["ab",{"2":{"45":3,"51":1,"53":1,"54":5,"55":1}}],["able",{"2":{"20":1,"54":1}}],["ability",{"2":{"17":1}}],["about",{"2":{"10":1,"24":2,"30":1,"40":2,"91":1,"131":1}}],["above",{"2":{"8":1,"10":1,"34":1,"44":1,"45":1,"54":1,"56":1,"135":1}}],["abs",{"2":{"34":1,"37":4,"44":1,"47":2,"80":8,"97":2,"121":1,"153":1,"171":1}}],["absolute",{"2":{"8":1,"10":1,"36":1,"37":2}}],["abstractpolygon",{"2":{"130":1}}],["abstractpolygontrait",{"2":{"60":1}}],["abstractpoint",{"2":{"130":1}}],["abstractface",{"2":{"130":1}}],["abstractfloat",{"2":{"31":1,"34":1,"37":2,"45":1,"47":2,"50":1,"51":1,"53":1,"54":1,"55":1,"60":8}}],["abstractrange",{"2":{"121":6}}],["abstractmesh",{"2":{"130":1}}],["abstractmulticurvetrait",{"2":{"75":1,"76":1,"89":1,"90":1,"106":1,"107":1,"116":1,"117":1}}],["abstractmatrix",{"2":{"10":5,"121":13}}],["abstractcurvetrait",{"2":{"34":1,"37":1,"47":1,"71":1,"74":1,"75":1,"80":1,"85":1,"89":1,"102":1,"105":1,"106":1,"112":1,"115":1,"116":1,"120":1,"150":2,"161":3}}],["abstractarrays",{"2":{"128":1}}],["abstractarray",{"2":{"10":1,"125":1,"130":6,"161":2}}],["abstract",{"2":{"10":3,"40":3,"134":1,"135":4,"136":1,"150":3,"158":1}}],["abstractvector",{"2":{"9":1,"10":1,"40":26,"121":8}}],["abstractgeometrytrait`",{"2":{"135":1}}],["abstractgeometrytrait",{"2":{"10":3,"37":2,"47":1,"60":1,"76":1,"90":1,"107":1,"117":1,"125":1,"128":1,"135":4,"136":2,"161":5}}],["abstractgeometry",{"2":{"7":4,"10":4,"66":2,"79":2,"130":1}}],["abstracttrait",{"2":{"5":2,"7":2,"10":8,"50":1,"52":2,"54":4,"56":2,"97":4,"123":1,"125":2,"130":9,"157":3}}],["abstractbarycentriccoordinatemethod",{"2":{"4":1,"9":1,"10":7,"40":18}}],["arbitrarily",{"2":{"128":1}}],["arbitrary",{"2":{"38":1,"123":1,"163":1}}],["around",{"2":{"39":1,"40":2,"50":1,"59":1,"63":1,"121":1,"150":1,"169":1}}],["argmin",{"2":{"154":1}}],["argtypes",{"2":{"41":2,"143":1,"146":1}}],["args",{"2":{"13":2}}],["argumenterror",{"2":{"56":1,"121":1,"130":5}}],["argument",{"2":{"8":5,"10":10,"34":1,"37":2,"44":1,"47":1,"51":1,"53":1,"55":1,"60":2,"130":2,"159":2,"164":1,"165":1}}],["arguments",{"2":{"5":1,"7":1,"10":5,"45":1,"69":2,"83":1,"100":1,"110":1,"142":1,"146":2,"147":1,"159":1}}],["arithmetic",{"2":{"11":1}}],["archgdal",{"2":{"23":1}}],["arc",{"2":{"10":1,"146":1}}],["array",{"2":{"8":1,"10":2,"37":1,"47":1,"121":5,"130":7,"151":1,"154":1}}],["arrays",{"2":{"5":1,"10":2,"22":1,"121":1,"130":2}}],["aren",{"2":{"8":3,"10":5,"50":1,"52":1,"54":2,"56":4,"63":3,"136":2,"139":2}}],["area2",{"2":{"44":4}}],["area1",{"2":{"44":4}}],["areas",{"2":{"8":2,"10":2,"37":3,"153":2}}],["area",{"0":{"35":2,"36":2},"1":{"36":2,"37":2},"2":{"4":5,"8":15,"10":25,"11":6,"31":1,"35":2,"36":9,"37":61,"42":1,"43":3,"44":49,"46":2,"47":44,"55":2,"56":1,"97":1,"123":1,"136":2,"139":2,"150":2,"153":4,"164":1}}],["are",{"2":{"2":2,"5":1,"7":4,"8":18,"9":2,"10":50,"20":2,"22":3,"24":1,"25":1,"26":2,"27":1,"33":1,"34":8,"36":1,"37":2,"38":6,"40":11,"43":1,"44":3,"45":31,"47":6,"50":3,"51":3,"52":15,"53":2,"54":16,"55":5,"56":9,"59":1,"60":1,"62":3,"63":26,"65":1,"69":7,"71":1,"72":3,"73":3,"74":1,"76":1,"82":1,"83":5,"85":1,"86":1,"87":1,"89":1,"90":1,"91":12,"97":7,"100":5,"102":1,"104":2,"109":1,"110":5,"112":1,"113":3,"114":3,"115":1,"117":1,"120":1,"121":14,"122":1,"125":1,"128":1,"130":4,"131":1,"132":1,"133":1,"135":1,"136":3,"137":1,"138":1,"139":2,"141":1,"145":1,"146":1,"147":1,"150":4,"152":1,"154":2,"155":1,"156":2,"157":1,"159":1,"163":1,"166":2,"167":2,"168":3,"169":6,"170":1,"171":1}}],["alone",{"2":{"130":1}}],["along",{"2":{"8":4,"10":5,"45":3,"47":2,"54":4,"63":4,"91":1}}],["although",{"2":{"113":1,"114":1}}],["alternate",{"2":{"45":1}}],["alternative",{"2":{"45":1}}],["already",{"2":{"63":1,"91":2,"152":1}}],["almost",{"2":{"54":1}}],["alg=nothing",{"2":{"150":1}}],["alg`",{"2":{"150":1}}],["alg",{"2":{"10":4,"150":21,"151":3,"152":8,"153":3,"154":7,"159":9}}],["algorithms",{"2":{"10":3,"132":1,"147":1,"148":1,"150":4,"152":1,"154":1}}],["algorithm",{"0":{"151":1,"152":1,"153":1},"2":{"10":10,"39":1,"45":2,"47":1,"50":3,"51":1,"53":1,"55":1,"91":1,"148":1,"150":8,"151":1,"152":3,"153":1,"159":4}}],["always",{"2":{"5":7,"8":6,"10":10,"25":1,"27":1,"36":1,"37":4,"47":2,"59":1,"60":1,"63":1,"130":2,"142":4,"168":1}}],["also",{"2":{"5":2,"10":10,"23":1,"34":1,"37":2,"44":2,"45":3,"47":1,"51":1,"53":1,"54":2,"55":1,"59":1,"60":2,"63":3,"97":1,"121":1,"128":1,"130":1,"133":1,"136":3,"139":2,"143":1,"144":1,"145":1,"146":1,"148":1,"157":1,"160":1,"163":2,"166":1}}],["allocations",{"2":{"9":1,"10":1,"40":1}}],["allow=",{"2":{"91":1}}],["allows",{"2":{"11":1,"18":1,"23":1,"24":1,"29":1,"69":2,"71":3,"72":3,"73":3,"74":1,"83":2,"85":3,"86":3,"87":2,"88":1,"100":1,"103":1,"104":1,"105":1,"110":3,"112":3,"113":3,"114":3,"115":1,"123":1,"148":1,"164":1,"166":1,"168":1}}],["allowed",{"2":{"10":1,"69":3,"83":3,"91":6,"100":5,"102":1,"103":2,"110":3,"150":1}}],["allow",{"2":{"5":1,"10":1,"23":1,"54":1,"69":7,"80":3,"83":7,"91":73,"100":10,"110":10,"160":1}}],["all",{"2":{"2":1,"5":3,"7":2,"8":3,"10":14,"11":7,"22":1,"25":1,"27":1,"31":2,"34":5,"37":3,"40":1,"45":13,"47":3,"51":1,"52":3,"54":3,"56":5,"59":1,"63":2,"65":1,"72":3,"73":3,"76":1,"89":1,"90":1,"91":7,"97":4,"109":1,"117":1,"120":1,"121":3,"122":1,"125":1,"128":2,"129":1,"130":8,"133":1,"135":1,"137":1,"140":1,"141":1,"150":1,"155":1,"156":1,"160":2,"163":1,"165":1,"167":1,"168":1}}],["apart",{"2":{"139":1}}],["appears",{"2":{"132":1}}],["append",{"2":{"34":1,"45":5,"51":1,"52":2,"54":2,"55":1,"56":5,"139":2}}],["approximately",{"2":{"145":1}}],["approximatly",{"2":{"45":1}}],["approach",{"2":{"19":1}}],["appropriately",{"2":{"169":1}}],["appropriate",{"2":{"10":1,"159":2}}],["applies",{"2":{"128":2}}],["applied",{"2":{"10":3,"20":1,"125":1,"130":2,"134":2,"135":2,"136":1}}],["application",{"2":{"5":1,"10":3,"130":1,"133":1,"135":3,"136":1,"139":2,"144":1,"147":1}}],["apply`",{"2":{"130":1}}],["applys",{"2":{"37":1,"47":1}}],["applyreduce",{"0":{"19":1},"2":{"4":2,"5":1,"10":1,"17":1,"19":2,"29":1,"34":1,"37":1,"44":2,"47":1,"60":2,"123":3,"125":1,"130":39,"158":1}}],["apply",{"0":{"5":1,"18":1,"22":1,"29":1,"128":1},"1":{"19":1},"2":{"4":2,"5":4,"10":7,"17":1,"18":5,"20":1,"22":1,"24":1,"29":3,"123":5,"125":1,"127":1,"128":4,"129":1,"130":60,"135":4,"136":1,"140":3,"141":1,"142":1,"146":1,"147":1,"150":2,"155":2,"158":1,"160":3}}],["apis",{"2":{"17":1}}],["api",{"0":{"4":1,"40":1},"1":{"5":1,"6":1,"7":1,"8":1,"9":1,"10":1},"2":{"4":1,"10":3,"24":1,"40":1,"146":1,"150":1,"159":1}}],["april",{"0":{"0":1}}],["attribute",{"2":{"167":1}}],["attributed",{"2":{"166":1}}],["attributes",{"0":{"166":1},"2":{"162":1,"166":3}}],["attempts",{"2":{"91":1}}],["attach",{"2":{"5":2,"8":1,"10":5,"127":1}}],["at",{"2":{"2":1,"7":4,"9":1,"10":6,"18":1,"20":1,"24":1,"26":1,"34":2,"36":1,"37":1,"39":1,"40":2,"45":4,"47":2,"54":8,"56":2,"91":17,"97":6,"99":1,"100":1,"103":3,"104":2,"105":2,"106":1,"107":1,"110":1,"116":1,"120":1,"128":1,"130":1,"145":1,"147":1,"152":1,"154":1,"164":1,"165":2}}],["atomic",{"2":{"0":1}}],["annotation",{"2":{"158":1}}],["annotated",{"2":{"26":1}}],["angels",{"2":{"34":1}}],["angle",{"2":{"34":35,"120":1}}],["angles",{"0":{"32":1,"33":1},"1":{"33":1,"34":1},"2":{"4":2,"8":10,"10":10,"31":1,"32":1,"33":4,"34":42}}],["answers",{"2":{"137":1}}],["answer",{"2":{"10":3,"51":1,"53":1,"54":1,"55":1}}],["another",{"2":{"7":1,"10":1,"45":2,"54":1,"59":1,"65":1,"68":1,"71":1,"73":1,"74":1,"78":1,"82":1,"85":1,"86":1,"87":1,"88":1,"91":1,"93":1,"96":1,"97":1,"99":1,"102":1,"103":1,"104":1,"105":1,"109":1,"112":1,"113":1,"114":1,"115":1,"121":1,"142":1}}],["anonymous",{"2":{"5":1,"10":1,"160":1}}],["anything",{"2":{"39":1,"91":1}}],["any",{"2":{"5":3,"7":1,"8":2,"10":19,"18":1,"24":1,"25":1,"27":1,"29":1,"38":2,"44":1,"45":7,"47":1,"50":1,"52":1,"54":4,"56":1,"60":2,"70":2,"71":1,"74":1,"82":1,"84":2,"85":1,"86":2,"87":1,"88":2,"91":8,"97":2,"101":2,"111":2,"115":1,"121":2,"123":2,"125":1,"130":2,"133":1,"134":1,"135":3,"136":4,"139":4,"142":2,"144":1,"146":1,"147":1,"152":1,"161":1,"168":2,"169":2}}],["an",{"2":{"2":1,"5":3,"8":11,"9":1,"10":27,"13":1,"14":1,"18":1,"20":1,"23":2,"33":1,"34":4,"36":1,"37":2,"39":1,"40":3,"41":2,"43":1,"45":15,"46":2,"47":2,"49":1,"50":1,"51":2,"52":5,"53":2,"54":9,"55":2,"56":2,"59":2,"60":5,"62":1,"63":1,"65":1,"68":2,"71":2,"78":1,"82":1,"91":13,"93":1,"96":1,"97":1,"99":1,"109":1,"112":2,"113":1,"114":1,"121":3,"122":1,"125":1,"128":1,"129":1,"130":8,"133":1,"141":1,"142":1,"146":1,"159":3,"160":2,"161":1,"163":2,"164":2,"166":1,"169":1}}],["and",{"0":{"5":1,"20":1,"22":1,"24":1,"35":1,"52":1,"54":1,"56":1,"58":1,"163":1,"164":1,"166":1},"1":{"36":1,"37":1,"59":1,"60":1},"2":{"0":1,"2":2,"4":2,"5":8,"7":11,"8":18,"10":84,"17":4,"18":4,"20":2,"22":1,"23":2,"24":3,"25":2,"26":5,"27":2,"29":2,"30":1,"31":1,"34":13,"36":1,"37":7,"38":2,"39":2,"40":20,"41":1,"42":2,"43":1,"44":29,"45":71,"46":2,"47":18,"49":1,"50":4,"51":4,"52":16,"53":4,"54":38,"55":6,"56":15,"59":2,"60":13,"62":2,"63":13,"65":3,"66":2,"68":2,"69":3,"72":3,"73":4,"74":1,"78":2,"79":2,"80":1,"83":3,"86":3,"87":1,"88":1,"91":36,"93":1,"96":2,"97":3,"100":2,"104":2,"105":2,"109":3,"110":4,"112":2,"113":3,"114":3,"115":1,"120":2,"121":16,"123":8,"125":1,"128":2,"129":3,"130":22,"131":1,"132":2,"133":1,"134":1,"135":4,"136":2,"137":1,"140":2,"141":2,"142":2,"145":1,"146":5,"147":4,"148":2,"149":1,"150":8,"152":8,"153":1,"154":1,"157":1,"158":3,"159":4,"160":1,"162":3,"163":9,"164":7,"165":2,"167":5,"168":2,"169":4,"170":2}}],["a",{"0":{"23":1,"164":1,"166":1},"2":{"0":3,"2":1,"5":13,"7":5,"8":79,"9":1,"10":194,"11":1,"15":2,"17":1,"18":6,"20":3,"22":3,"23":4,"24":2,"25":2,"27":2,"29":2,"30":2,"33":3,"34":22,"36":11,"37":20,"38":13,"39":4,"40":11,"41":2,"43":5,"44":8,"45":281,"46":2,"47":17,"49":3,"50":4,"51":39,"52":30,"53":38,"54":91,"55":36,"56":45,"57":3,"59":15,"60":27,"62":2,"63":54,"65":2,"68":1,"69":3,"71":5,"72":3,"73":2,"75":2,"76":2,"78":2,"80":1,"82":1,"83":3,"85":4,"86":3,"87":1,"89":2,"90":2,"91":52,"93":2,"96":5,"97":27,"99":2,"100":4,"102":4,"103":2,"104":2,"105":1,"106":2,"107":2,"109":1,"110":3,"112":5,"113":2,"114":2,"116":2,"117":2,"119":1,"120":4,"121":79,"123":4,"125":2,"128":4,"130":36,"131":6,"132":2,"133":2,"134":5,"135":5,"136":9,"137":8,"139":6,"140":3,"141":2,"142":8,"143":3,"144":5,"145":4,"146":8,"147":10,"149":3,"150":5,"153":3,"154":1,"155":1,"157":6,"158":1,"159":12,"160":2,"161":2,"162":1,"163":21,"164":12,"165":5,"166":5,"167":11,"168":5,"169":8,"170":3,"171":3}}],["ask",{"2":{"23":1}}],["aspect",{"2":{"13":1,"14":1,"33":1,"36":1,"39":2,"43":1,"46":1,"59":2,"121":2,"145":1,"150":1}}],["assign",{"2":{"162":1}}],["assigned",{"2":{"45":1,"121":7,"169":1}}],["assets",{"2":{"164":1}}],["assetpath",{"2":{"164":1}}],["assemble",{"2":{"133":1}}],["assert",{"2":{"40":23,"44":1,"45":1,"50":1,"52":1,"54":1,"147":1,"161":1}}],["assume",{"2":{"97":2,"130":3,"132":1,"139":1}}],["assumed",{"2":{"37":1,"63":1,"91":1}}],["assumes",{"2":{"10":1,"45":1,"60":1,"146":1,"154":1}}],["associativity",{"2":{"19":1}}],["associated",{"0":{"5":1},"2":{"38":2}}],["as",{"2":{"0":1,"5":8,"7":18,"8":6,"9":1,"10":79,"11":2,"13":3,"14":3,"15":3,"17":2,"18":2,"20":1,"22":1,"23":2,"24":1,"25":1,"27":1,"33":2,"34":4,"36":2,"37":3,"38":4,"39":1,"40":4,"41":3,"43":2,"44":1,"45":15,"46":2,"47":5,"49":3,"50":5,"51":8,"52":2,"53":7,"54":8,"55":7,"56":5,"59":3,"60":1,"62":2,"63":2,"65":2,"66":2,"68":3,"69":3,"78":2,"79":2,"80":2,"82":2,"83":3,"91":7,"93":2,"94":2,"96":2,"97":2,"99":2,"100":3,"102":1,"109":2,"110":3,"120":8,"121":3,"123":3,"125":1,"128":2,"129":2,"130":15,"132":2,"133":2,"135":1,"136":1,"138":2,"141":1,"142":3,"144":2,"145":2,"146":3,"148":2,"149":2,"150":7,"152":2,"157":2,"158":2,"159":2,"160":3,"161":2,"162":3,"163":2,"164":1,"165":1,"167":3,"168":2,"169":3,"170":2}}],["adjust",{"2":{"54":1}}],["adjacent",{"2":{"45":1,"52":1,"54":1,"56":1}}],["adaptivity",{"0":{"57":1}}],["adaptive",{"2":{"0":1,"13":3,"14":2,"57":1}}],["adapted",{"2":{"51":1,"53":1,"55":1,"120":1}}],["advance",{"2":{"44":2}}],["advised",{"2":{"10":1,"157":1}}],["administrative",{"2":{"170":1}}],["admin",{"2":{"11":1,"150":2}}],["adm0",{"2":{"11":7}}],["additional",{"2":{"167":1}}],["additionally",{"2":{"45":3,"63":1}}],["addition",{"2":{"39":1,"56":1}}],["adding",{"2":{"0":1,"8":1,"10":4,"56":2,"121":1,"141":1,"144":1,"146":2,"147":1}}],["added",{"2":{"10":1,"34":1,"45":6,"47":1,"56":2,"125":1,"130":1,"139":2,"152":1}}],["add",{"2":{"0":2,"7":1,"10":1,"40":1,"41":1,"45":16,"47":1,"50":4,"51":3,"53":1,"54":2,"55":2,"56":9,"80":1,"121":4,"130":1,"144":1,"146":1,"152":10,"158":1,"164":1,"166":2,"168":1}}],["lj",{"2":{"121":2}}],["lrs",{"2":{"150":2}}],["lr",{"2":{"121":3,"130":3}}],["lp",{"2":{"91":2}}],["lstart",{"2":{"91":2}}],["ls",{"2":{"91":12}}],["ll",{"2":{"17":1,"39":1,"145":2,"150":1,"164":1,"166":1}}],["l",{"2":{"14":4,"40":6,"80":2,"91":32}}],["lgeos",{"2":{"150":1}}],["lg",{"2":{"13":1,"14":1,"15":2,"146":9,"150":17}}],["l305",{"2":{"10":1}}],["laptop",{"2":{"170":1}}],["land",{"2":{"164":8}}],["layers",{"2":{"128":1}}],["label",{"2":{"14":4,"15":2,"59":1,"121":3,"145":2,"149":2,"150":2}}],["labels",{"2":{"13":2,"121":1}}],["lazily",{"2":{"10":1,"125":1,"130":1}}],["latitude",{"2":{"164":2}}],["later",{"2":{"37":1,"121":1}}],["lat",{"2":{"10":3,"145":1,"146":3}}],["larger",{"2":{"45":1,"55":1,"154":1}}],["large",{"2":{"10":8,"40":1,"150":2,"167":1,"170":1}}],["lastindex",{"2":{"154":1}}],["last",{"2":{"2":1,"8":3,"10":3,"34":11,"37":2,"39":2,"45":9,"47":4,"60":7,"63":5,"91":20,"102":1,"121":8,"132":1,"139":2,"152":1}}],["lt",{"2":{"10":6,"54":4,"145":1}}],["l289",{"2":{"10":1}}],["l2",{"2":{"7":4,"8":4,"10":8,"62":4,"63":12,"65":8,"79":2,"82":5,"96":4,"99":3,"100":2,"109":8}}],["l195",{"2":{"10":1}}],["l177",{"2":{"10":1}}],["l1",{"2":{"7":6,"8":4,"10":10,"62":4,"63":12,"65":8,"68":4,"69":2,"78":4,"79":2,"82":5,"96":4,"99":3,"100":2,"109":8}}],["loudly",{"2":{"130":1}}],["log10",{"2":{"146":2,"150":4}}],["log",{"2":{"125":3,"126":1,"145":2}}],["location",{"2":{"45":1,"91":6}}],["local",{"2":{"34":3,"37":1,"45":4,"52":1,"56":1,"121":1}}],["loose",{"2":{"131":1}}],["lookup",{"2":{"121":1,"130":1}}],["looks",{"2":{"43":1}}],["look",{"2":{"36":2,"121":2,"132":1,"145":1}}],["looping",{"2":{"121":1}}],["loop",{"2":{"34":1,"40":2,"44":3,"45":8,"47":1,"54":1,"56":1,"91":5,"121":3,"152":1}}],["lon",{"2":{"10":2,"145":1,"146":2}}],["longitude",{"2":{"164":2}}],["long",{"2":{"10":1,"54":1,"146":1,"170":1}}],["longer",{"2":{"10":3,"144":1,"146":2,"147":1}}],["lots",{"2":{"164":1}}],["lot",{"2":{"10":1,"23":1,"34":1,"37":1,"44":1,"47":1,"60":1,"63":1,"97":1,"123":1,"145":1,"159":2}}],["load",{"2":{"130":2,"150":1,"162":2}}],["loading",{"2":{"41":1,"143":1,"146":1}}],["loads",{"2":{"9":1,"10":1,"40":1}}],["loaded",{"2":{"5":1,"41":3,"142":1,"143":2,"146":2}}],["lower",{"2":{"0":1,"10":1,"121":1,"169":1}}],["len",{"2":{"152":7}}],["length",{"2":{"2":1,"4":1,"9":1,"10":5,"18":1,"40":32,"42":1,"43":1,"44":22,"45":11,"47":1,"50":2,"51":2,"53":1,"54":1,"55":1,"56":1,"91":1,"121":10,"130":3,"139":2,"145":1,"151":1,"152":1,"153":1,"154":7}}],["legend",{"2":{"150":4}}],["le",{"2":{"91":10}}],["leaving",{"2":{"132":1}}],["leaf",{"2":{"130":4}}],["leading",{"2":{"163":1}}],["lead",{"2":{"54":1,"132":1}}],["least",{"2":{"7":4,"10":4,"45":1,"54":1,"56":2,"91":14,"97":6,"100":1,"103":3,"104":2,"105":2,"106":1,"107":1,"110":1,"116":1,"120":1}}],["leftover",{"2":{"45":1}}],["left=1",{"2":{"45":1}}],["left",{"2":{"40":1,"45":5,"120":1,"121":2,"152":17,"154":5,"168":1}}],["lets",{"2":{"37":1}}],["let",{"2":{"36":1,"43":1,"91":1,"121":3,"145":1,"163":6,"164":4,"165":3,"166":2,"167":2,"171":1}}],["less",{"2":{"7":1,"10":7,"34":1,"37":1,"40":1,"44":1,"47":1,"60":1,"63":1,"80":1,"97":1,"121":1,"150":1,"151":1}}],["levels",{"2":{"10":1,"121":1,"128":1,"157":1}}],["level",{"2":{"0":1,"2":1,"10":1,"18":2,"20":1,"29":1,"128":1,"130":2,"131":1,"133":1,"135":4,"136":1,"137":1,"139":2,"165":2}}],["li",{"2":{"121":2}}],["lie",{"2":{"54":1}}],["lies",{"2":{"45":3,"169":1}}],["limitations",{"2":{"54":1}}],["limits",{"2":{"39":1}}],["limited",{"2":{"10":1,"144":1,"147":1}}],["library",{"2":{"50":1,"167":1}}],["libraries",{"2":{"37":1,"137":1,"167":1}}],["libgeos",{"2":{"10":2,"13":1,"14":1,"15":1,"23":1,"37":1,"41":5,"122":1,"146":7,"150":4,"159":2}}],["little",{"2":{"26":1}}],["literate",{"2":{"26":1,"31":1,"34":1,"37":1,"40":1,"41":1,"44":1,"45":1,"47":1,"50":1,"52":1,"54":1,"56":1,"57":1,"60":1,"63":1,"66":1,"76":1,"79":1,"80":1,"90":1,"91":1,"94":1,"97":1,"107":1,"117":1,"120":1,"121":1,"122":1,"130":1,"133":1,"136":1,"139":1,"140":1,"141":1,"143":1,"147":1,"154":1,"155":1,"159":1,"160":1,"161":1}}],["lift",{"2":{"14":2}}],["lin",{"2":{"146":5}}],["linrange",{"2":{"13":2,"14":5,"39":2,"59":1,"121":2,"146":1,"150":2}}],["linering",{"2":{"164":1}}],["linewidth",{"2":{"36":1,"163":1}}],["linesegment",{"2":{"120":2,"147":1}}],["lines",{"0":{"72":1,"86":1,"103":1,"113":1},"2":{"7":1,"8":4,"10":5,"45":3,"49":1,"54":9,"59":1,"62":4,"63":4,"65":3,"68":1,"69":1,"78":2,"80":1,"82":3,"91":2,"93":3,"96":4,"97":2,"99":4,"109":3,"110":1,"121":3,"148":1,"163":4}}],["linestringtrait",{"2":{"7":2,"8":4,"10":9,"11":3,"34":1,"44":4,"53":2,"60":2,"63":8,"71":1,"72":4,"73":1,"80":6,"85":1,"86":5,"97":4,"102":1,"103":4,"104":1,"112":1,"113":4,"114":1,"128":1,"135":2,"136":1,"147":2,"157":2}}],["linestring",{"2":{"7":5,"8":6,"10":15,"18":1,"20":1,"34":2,"44":2,"60":4,"62":2,"63":2,"65":2,"66":1,"71":1,"72":3,"79":2,"82":2,"83":1,"85":1,"86":4,"91":2,"96":2,"102":1,"103":3,"104":1,"109":2,"110":1,"112":1,"113":4,"114":1,"120":7,"130":5,"161":4,"163":5}}],["linestrings",{"2":{"2":1,"8":2,"10":2,"63":2,"119":1,"131":1,"163":1}}],["linetrait",{"2":{"7":2,"8":4,"10":6,"34":1,"45":2,"50":2,"53":2,"60":2,"63":8,"71":1,"72":4,"73":1,"85":1,"86":5,"97":4,"102":1,"103":4,"104":1,"112":1,"113":4,"114":1}}],["line2",{"2":{"7":3,"10":7,"53":2,"54":2,"80":5,"93":3,"94":2,"97":3,"120":5}}],["line1",{"2":{"7":4,"10":8,"53":2,"54":2,"80":5,"93":3,"94":2,"97":5,"120":5}}],["linea",{"2":{"5":1,"10":1,"160":1}}],["linearmap",{"2":{"150":1}}],["linearalgebra",{"2":{"31":1}}],["linearr",{"2":{"5":1,"10":1,"160":1}}],["linearringtrait",{"2":{"8":4,"10":6,"11":3,"34":3,"37":2,"44":4,"45":4,"53":2,"60":2,"63":8,"71":1,"72":1,"73":4,"85":1,"86":2,"87":3,"102":1,"103":1,"104":4,"112":1,"113":1,"114":4,"135":1,"147":2,"150":1,"157":2}}],["linearring",{"2":{"5":10,"7":2,"8":1,"10":15,"34":2,"44":2,"45":2,"55":2,"56":1,"60":1,"71":1,"73":3,"85":1,"86":1,"87":2,"91":2,"97":4,"102":1,"103":1,"104":3,"112":1,"114":4,"120":1,"121":3,"130":7,"131":1,"132":6,"133":1,"138":13,"150":1,"160":8,"161":4,"163":24,"164":6,"165":8,"169":2}}],["linearrings",{"2":{"2":1,"87":1,"121":6,"131":1,"163":1}}],["linearsegments",{"2":{"4":1,"10":4,"144":1,"145":1,"146":3,"147":5}}],["linear",{"2":{"2":1,"8":7,"10":10,"37":2,"40":1,"43":1,"44":3,"47":1,"54":1,"60":5,"63":8,"73":1,"91":2,"103":1,"104":2,"113":1,"119":1,"130":2,"133":3,"145":5,"146":3,"147":4}}],["line",{"0":{"91":1},"2":{"4":1,"7":13,"8":9,"10":52,"23":1,"33":2,"34":7,"43":3,"44":10,"45":12,"47":8,"49":6,"50":18,"53":8,"54":67,"56":6,"60":11,"63":5,"66":2,"68":2,"69":1,"71":2,"72":11,"73":8,"78":1,"80":11,"83":2,"85":1,"86":9,"87":4,"91":141,"93":2,"94":2,"96":3,"97":12,"99":2,"100":2,"102":1,"103":10,"104":3,"110":2,"112":2,"113":10,"114":7,"120":6,"121":2,"147":1,"150":1,"151":1,"152":4,"153":1,"161":3,"163":3}}],["lineorientation",{"2":{"4":1,"10":2,"53":2}}],["likely",{"2":{"128":1}}],["like",{"0":{"57":1},"2":{"5":2,"10":9,"17":1,"18":2,"19":1,"20":1,"23":1,"24":1,"29":1,"37":1,"39":1,"40":1,"43":1,"47":1,"51":1,"53":1,"55":1,"59":1,"60":1,"63":1,"123":2,"130":2,"135":2,"136":1,"144":1,"145":1,"157":2,"164":2}}],["lists",{"2":{"20":1,"45":3,"97":1}}],["listed",{"2":{"10":1,"34":1,"150":1}}],["list",{"2":{"2":1,"10":16,"34":20,"45":233,"50":20,"51":14,"52":8,"53":13,"54":5,"55":13,"56":1,"170":2}}]],"serializationVersion":2}';export{e as default}; diff --git a/previews/PR135/assets/chunks/@localSearchIndexroot.DOIebHWk.js b/previews/PR135/assets/chunks/@localSearchIndexroot.DOIebHWk.js new file mode 100644 index 000000000..f99de26e5 --- /dev/null +++ b/previews/PR135/assets/chunks/@localSearchIndexroot.DOIebHWk.js @@ -0,0 +1 @@ +const e='{"documentCount":179,"nextId":179,"documentIds":{"0":"/GeometryOps.jl/previews/PR135/api#Full-GeometryOps-API-documentation","1":"/GeometryOps.jl/previews/PR135/api#apply-and-associated-functions","2":"/GeometryOps.jl/previews/PR135/api#General-geometry-methods","3":"/GeometryOps.jl/previews/PR135/api#OGC-methods","4":"/GeometryOps.jl/previews/PR135/api#Other-general-methods","5":"/GeometryOps.jl/previews/PR135/api#Barycentric-coordinates","6":"/GeometryOps.jl/previews/PR135/api#Other-methods","7":"/GeometryOps.jl/previews/PR135/call_notes#20th-April,-2024","8":"/GeometryOps.jl/previews/PR135/call_notes#29th-Feb,-2024","9":"/GeometryOps.jl/previews/PR135/call_notes#To-do","10":"/GeometryOps.jl/previews/PR135/call_notes#done","11":"/GeometryOps.jl/previews/PR135/experiments/accurate_accumulators#Accurate-accumulation","12":"/GeometryOps.jl/previews/PR135/experiments/predicates#predicates","13":"/GeometryOps.jl/previews/PR135/experiments/predicates#orient","14":"/GeometryOps.jl/previews/PR135/experiments/predicates#dashboard","15":"/GeometryOps.jl/previews/PR135/experiments/predicates#Testing-robust-vs-regular-predicates","16":"/GeometryOps.jl/previews/PR135/experiments/predicates#incircle","17":"/GeometryOps.jl/previews/PR135/explanations/paradigms#paradigms","18":"/GeometryOps.jl/previews/PR135/explanations/paradigms#apply","19":"/GeometryOps.jl/previews/PR135/explanations/paradigms#applyreduce","20":"/GeometryOps.jl/previews/PR135/explanations/paradigms#fix-and-prepare","21":"/GeometryOps.jl/previews/PR135/explanations/peculiarities#peculiarities","22":"/GeometryOps.jl/previews/PR135/explanations/peculiarities#What-does-apply-return-and-why?","23":"/GeometryOps.jl/previews/PR135/explanations/peculiarities#Why-do-you-want-me-to-provide-a-target-in-set-operations?","24":"/GeometryOps.jl/previews/PR135/explanations/peculiarities#_True-and-_False-(or-BoolsAsTypes)","25":"/GeometryOps.jl/previews/PR135/#what-is-geometryops-jl","26":"/GeometryOps.jl/previews/PR135/#how-to-navigate-the-docs","27":"/GeometryOps.jl/previews/PR135/introduction#introduction","28":"/GeometryOps.jl/previews/PR135/introduction#Main-concepts","29":"/GeometryOps.jl/previews/PR135/introduction#The-apply-paradigm","30":"/GeometryOps.jl/previews/PR135/introduction#What\'s-this-GeoInterface.Wrapper-thing?","31":"/GeometryOps.jl/previews/PR135/source/GeometryOps#geometryops-jl","32":"/GeometryOps.jl/previews/PR135/source/methods/angles#angles","33":"/GeometryOps.jl/previews/PR135/source/methods/angles#What-is-angles?","34":"/GeometryOps.jl/previews/PR135/source/methods/angles#implementation","35":"/GeometryOps.jl/previews/PR135/source/methods/area#Area-and-signed-area","36":"/GeometryOps.jl/previews/PR135/source/methods/area#What-is-area?-What-is-signed-area?","37":"/GeometryOps.jl/previews/PR135/source/methods/area#implementation","38":"/GeometryOps.jl/previews/PR135/source/methods/barycentric#Barycentric-coordinates","39":"/GeometryOps.jl/previews/PR135/source/methods/barycentric#example","40":"/GeometryOps.jl/previews/PR135/source/methods/barycentric#Barycentric-coordinate-API","41":"/GeometryOps.jl/previews/PR135/source/methods/buffer#buffer","42":"/GeometryOps.jl/previews/PR135/source/methods/centroid#centroid","43":"/GeometryOps.jl/previews/PR135/source/methods/centroid#What-is-the-centroid?","44":"/GeometryOps.jl/previews/PR135/source/methods/centroid#implementation","45":"/GeometryOps.jl/previews/PR135/source/methods/clipping/clipping_processor#Polygon-clipping-helpers","46":"/GeometryOps.jl/previews/PR135/source/methods/clipping/coverage#What-is-coverage?","47":"/GeometryOps.jl/previews/PR135/source/methods/clipping/coverage#implementation","48":"/GeometryOps.jl/previews/PR135/source/methods/clipping/cut#Polygon-cutting","49":"/GeometryOps.jl/previews/PR135/source/methods/clipping/cut#What-is-cut?","50":"/GeometryOps.jl/previews/PR135/source/methods/clipping/cut#implementation","51":"/GeometryOps.jl/previews/PR135/source/methods/clipping/difference#Difference-Polygon-Clipping","52":"/GeometryOps.jl/previews/PR135/source/methods/clipping/difference#Helper-functions-for-Differences-with-Greiner-and-Hormann-Polygon-Clipping","53":"/GeometryOps.jl/previews/PR135/source/methods/clipping/intersection#Geometry-Intersection","54":"/GeometryOps.jl/previews/PR135/source/methods/clipping/intersection#Helper-functions-for-Intersections-with-Greiner-and-Hormann-Polygon-Clipping","55":"/GeometryOps.jl/previews/PR135/source/methods/clipping/predicates#If-we-want-to-inject-adaptivity,-we-would-do-something-like:","56":"/GeometryOps.jl/previews/PR135/source/methods/convex_hull#Convex-hull","57":"/GeometryOps.jl/previews/PR135/source/methods/convex_hull#example","58":"/GeometryOps.jl/previews/PR135/source/methods/convex_hull#Simple-hull","59":"/GeometryOps.jl/previews/PR135/source/methods/convex_hull#Convex-hull-of-the-USA","60":"/GeometryOps.jl/previews/PR135/source/methods/convex_hull#Investigating-the-winding-order","61":"/GeometryOps.jl/previews/PR135/source/methods/convex_hull#implementation","62":"/GeometryOps.jl/previews/PR135/source/methods/clipping/union#Union-Polygon-Clipping","63":"/GeometryOps.jl/previews/PR135/source/methods/clipping/union#Helper-functions-for-Unions-with-Greiner-and-Hormann-Polygon-Clipping","64":"/GeometryOps.jl/previews/PR135/source/methods/distance#Distance-and-signed-distance","65":"/GeometryOps.jl/previews/PR135/source/methods/distance#What-is-distance?-What-is-signed-distance?","66":"/GeometryOps.jl/previews/PR135/source/methods/distance#implementation","67":"/GeometryOps.jl/previews/PR135/source/methods/equals#equals","68":"/GeometryOps.jl/previews/PR135/source/methods/equals#What-is-equals?","69":"/GeometryOps.jl/previews/PR135/source/methods/equals#implementation","70":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/coveredby#coveredby","71":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/coveredby#What-is-coveredby?","72":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/coveredby#implementation","73":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/coveredby#Convert-features-to-geometries","74":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/coveredby#Points-coveredby-geometries","75":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/coveredby#Lines-coveredby-geometries","76":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/coveredby#Rings-covered-by-geometries","77":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/coveredby#Polygons-covered-by-geometries","78":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/coveredby#Geometries-coveredby-multi-geometry/geometry-collections","79":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/coveredby#Multi-geometry/geometry-collections-coveredby-geometries","80":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/contains#contains","81":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/contains#What-is-contains?","82":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/contains#implementation","83":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/covers#covers","84":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/covers#What-is-covers?","85":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/covers#implementation","86":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/crosses#Crossing-checks","87":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/disjoint#disjoint","88":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/disjoint#What-is-disjoint?","89":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/disjoint#implementation","90":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/disjoint#Convert-features-to-geometries","91":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/disjoint#Point-disjoint-geometries","92":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/disjoint#Lines-disjoint-geometries","93":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/disjoint#Rings-disjoint-geometries","94":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/disjoint#Polygon-disjoint-geometries","95":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/disjoint#Geometries-disjoint-multi-geometry/geometry-collections","96":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/disjoint#Multi-geometry/geometry-collections-coveredby-geometries","97":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/intersects#Intersection-checks","98":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/intersects#What-is-intersects?","99":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/intersects#implementation","100":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/geom_geom_processors#Line-curve-interaction","101":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/overlaps#overlaps","102":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/overlaps#What-is-overlaps?","103":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/overlaps#implementation","104":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/touches#touches","105":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/touches#What-is-touches?","106":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/touches#implementation","107":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/touches#Convert-features-to-geometries","108":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/touches#Point-touches-geometries","109":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/touches#Lines-touching-geometries","110":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/touches#Rings-touch-geometries","111":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/touches#Polygons-touch-geometries","112":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/touches#Geometries-touch-multi-geometry/geometry-collections","113":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/touches#Multi-geometry/geometry-collections-cross-geometries","114":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/within#within","115":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/within#What-is-within?","116":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/within#implementation","117":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/within#Convert-features-to-geometries","118":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/within#Points-within-geometries","119":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/within#Lines-within-geometries","120":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/within#Rings-covered-by-geometries","121":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/within#Polygons-within-geometries","122":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/within#Geometries-within-multi-geometry/geometry-collections","123":"/GeometryOps.jl/previews/PR135/source/methods/geom_relations/within#Multi-geometry/geometry-collections-within-geometries","124":"/GeometryOps.jl/previews/PR135/source/methods/orientation#orientation","125":"/GeometryOps.jl/previews/PR135/source/methods/orientation#isclockwise","126":"/GeometryOps.jl/previews/PR135/source/methods/orientation#isconcave","127":"/GeometryOps.jl/previews/PR135/source/methods/polygonize#Polygonizing-raster-data","128":"/GeometryOps.jl/previews/PR135/source/not_implemented_yet#Not-implemented-yet","129":"/GeometryOps.jl/previews/PR135/source/primitives#Primitive-functions","130":"/GeometryOps.jl/previews/PR135/source/primitives#docstrings","131":"/GeometryOps.jl/previews/PR135/source/primitives#functions","132":"/GeometryOps.jl/previews/PR135/source/primitives#types","133":"/GeometryOps.jl/previews/PR135/source/primitives#implementation","134":"/GeometryOps.jl/previews/PR135/source/primitives#What-is-apply?","135":"/GeometryOps.jl/previews/PR135/source/primitives#embedding","136":"/GeometryOps.jl/previews/PR135/source/primitives#threading","137":"/GeometryOps.jl/previews/PR135/source/transformations/correction/closed_ring#Closed-Rings","138":"/GeometryOps.jl/previews/PR135/source/transformations/correction/closed_ring#example","139":"/GeometryOps.jl/previews/PR135/source/transformations/correction/closed_ring#implementation","140":"/GeometryOps.jl/previews/PR135/source/transformations/correction/geometry_correction#Geometry-Corrections","141":"/GeometryOps.jl/previews/PR135/source/transformations/correction/geometry_correction#interface","142":"/GeometryOps.jl/previews/PR135/source/transformations/correction/geometry_correction#Available-corrections","143":"/GeometryOps.jl/previews/PR135/source/transformations/correction/intersecting_polygons#Intersecting-Polygons","144":"/GeometryOps.jl/previews/PR135/source/transformations/correction/intersecting_polygons#example","145":"/GeometryOps.jl/previews/PR135/source/transformations/correction/intersecting_polygons#implementation","146":"/GeometryOps.jl/previews/PR135/source/transformations/extent#Extent-embedding","147":"/GeometryOps.jl/previews/PR135/source/transformations/flip#Coordinate-flipping","148":"/GeometryOps.jl/previews/PR135/source/transformations/reproject#Geometry-reprojection","149":"/GeometryOps.jl/previews/PR135/source/transformations/reproject#Method-error-handling","150":"/GeometryOps.jl/previews/PR135/source/transformations/segmentize#segmentize","151":"/GeometryOps.jl/previews/PR135/source/transformations/segmentize#examples","152":"/GeometryOps.jl/previews/PR135/source/transformations/segmentize#benchmark","153":"/GeometryOps.jl/previews/PR135/source/transformations/segmentize#implementation","154":"/GeometryOps.jl/previews/PR135/source/transformations/transform#Pointwise-transformation","155":"/GeometryOps.jl/previews/PR135/source/transformations/tuples#Tuple-conversion","156":"/GeometryOps.jl/previews/PR135/source/transformations/simplify#Geometry-simplification","157":"/GeometryOps.jl/previews/PR135/source/transformations/simplify#examples","158":"/GeometryOps.jl/previews/PR135/source/transformations/simplify#benchmark","159":"/GeometryOps.jl/previews/PR135/source/transformations/simplify#Simplify-with-RadialDistance-Algorithm","160":"/GeometryOps.jl/previews/PR135/source/transformations/simplify#Simplify-with-DouglasPeucker-Algorithm","161":"/GeometryOps.jl/previews/PR135/source/transformations/simplify#Simplify-with-VisvalingamWhyatt-Algorithm","162":"/GeometryOps.jl/previews/PR135/source/transformations/simplify#Shared-utils","163":"/GeometryOps.jl/previews/PR135/source/types#types","164":"/GeometryOps.jl/previews/PR135/source/types#TraitTarget","165":"/GeometryOps.jl/previews/PR135/source/types#BoolsAsTypes","166":"/GeometryOps.jl/previews/PR135/source/types#GEOS","167":"/GeometryOps.jl/previews/PR135/source/utils#Utility-functions","168":"/GeometryOps.jl/previews/PR135/tutorials/creating_geometry#Creating-Geometry","169":"/GeometryOps.jl/previews/PR135/tutorials/creating_geometry#creating-geometry","170":"/GeometryOps.jl/previews/PR135/tutorials/creating_geometry#plot-geometry","171":"/GeometryOps.jl/previews/PR135/tutorials/creating_geometry#geom-crs","172":"/GeometryOps.jl/previews/PR135/tutorials/creating_geometry#attributes","173":"/GeometryOps.jl/previews/PR135/tutorials/creating_geometry#save-geometry","174":"/GeometryOps.jl/previews/PR135/tutorials/geodesic_paths#Geodesic-paths","175":"/GeometryOps.jl/previews/PR135/tutorials/spatial_joins#Spatial-joins","176":"/GeometryOps.jl/previews/PR135/tutorials/spatial_joins#Simple-example","177":"/GeometryOps.jl/previews/PR135/tutorials/spatial_joins#Real-world-example","178":"/GeometryOps.jl/previews/PR135/tutorials/spatial_joins#Enabling-custom-predicates"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[4,1,91],"1":[4,4,248],"2":[3,4,1],"3":[2,7,208],"4":[3,7,258],"5":[2,4,84],"6":[2,4,1086],"7":[3,1,55],"8":[3,1,1],"9":[2,3,107],"10":[1,3,17],"11":[2,1,74],"12":[1,1,5],"13":[1,1,128],"14":[1,2,116],"15":[5,2,72],"16":[1,1,1],"17":[1,1,53],"18":[1,1,109],"19":[1,2,35],"20":[3,1,79],"21":[1,1,1],"22":[7,1,71],"23":[13,1,101],"24":[6,1,66],"25":[5,1,72],"26":[5,1,61],"27":[1,1,72],"28":[2,1,1],"29":[3,3,50],"30":[8,3,18],"31":[2,1,120],"32":[1,1,3],"33":[4,1,57],"34":[1,1,268],"35":[4,1,4],"36":[5,4,100],"37":[1,4,246],"38":[2,1,65],"39":[1,2,211],"40":[3,2,414],"41":[1,1,110],"42":[1,1,6],"43":[5,1,91],"44":[1,1,199],"45":[3,1,610],"46":[4,1,70],"47":[1,1,327],"48":[2,1,3],"49":[4,2,57],"50":[1,2,200],"51":[3,1,214],"52":[10,1,190],"53":[2,1,250],"54":[10,1,480],"55":[11,1,25],"56":[2,1,56],"57":[1,2,1],"58":[2,3,32],"59":[5,2,40],"60":[4,2,100],"61":[1,2,166],"62":[3,1,236],"63":[10,1,284],"64":[4,1,4],"65":[5,4,128],"66":[1,4,260],"67":[1,1,3],"68":[4,1,68],"69":[1,1,265],"70":[1,1,3],"71":[4,1,81],"72":[1,1,128],"73":[4,1,11],"74":[3,1,56],"75":[3,1,46],"76":[4,1,48],"77":[4,1,40],"78":[5,1,40],"79":[5,1,44],"80":[1,1,3],"81":[4,1,79],"82":[1,1,79],"83":[1,1,3],"84":[4,1,67],"85":[1,1,78],"86":[2,1,149],"87":[1,1,3],"88":[4,1,68],"89":[1,1,110],"90":[4,1,10],"91":[3,1,57],"92":[3,1,58],"93":[3,1,47],"94":[3,1,33],"95":[5,1,39],"96":[5,1,44],"97":[2,1,3],"98":[4,2,80],"99":[1,2,76],"100":[3,1,432],"101":[1,1,3],"102":[4,1,82],"103":[1,1,244],"104":[1,1,3],"105":[4,1,70],"106":[1,1,125],"107":[4,1,11],"108":[3,1,69],"109":[3,1,52],"110":[3,1,61],"111":[3,1,40],"112":[5,1,39],"113":[5,1,42],"114":[1,1,3],"115":[4,1,72],"116":[1,1,129],"117":[4,1,11],"118":[3,1,63],"119":[3,1,53],"120":[4,1,53],"121":[3,1,38],"122":[5,1,39],"123":[5,1,42],"124":[1,1,4],"125":[1,1,21],"126":[1,1,206],"127":[3,1,511],"128":[3,1,47],"129":[2,1,113],"130":[1,2,1],"131":[1,3,106],"132":[1,2,12],"133":[1,2,33],"134":[4,2,114],"135":[2,2,36],"136":[1,2,540],"137":[2,1,54],"138":[1,2,87],"139":[1,2,83],"140":[2,1,41],"141":[1,2,112],"142":[2,2,109],"143":[2,1,77],"144":[1,2,70],"145":[1,2,135],"146":[2,1,71],"147":[2,1,56],"148":[2,1,132],"149":[3,2,77],"150":[1,1,76],"151":[1,1,147],"152":[1,1,268],"153":[1,1,188],"154":[2,1,111],"155":[2,1,58],"156":[2,1,44],"157":[1,2,67],"158":[1,2,391],"159":[4,1,75],"160":[4,1,186],"161":[4,1,85],"162":[2,1,149],"163":[1,1,38],"164":[1,1,74],"165":[1,1,82],"166":[1,1,147],"167":[2,1,142],"168":[2,1,60],"169":[4,2,287],"170":[13,2,280],"171":[9,2,199],"172":[7,2,63],"173":[4,2,140],"174":[2,1,52],"175":[2,1,138],"176":[2,2,137],"177":[3,2,117],"178":[3,2,68]},"averageFieldLength":[2.860335195530726,1.4692737430167597,108.26815642458101],"storedFields":{"0":{"title":"Full GeometryOps API documentation","titles":[]},"1":{"title":"apply and associated functions","titles":["Full GeometryOps API documentation"]},"2":{"title":"General geometry methods","titles":["Full GeometryOps API documentation"]},"3":{"title":"OGC methods","titles":["Full GeometryOps API documentation","General geometry methods"]},"4":{"title":"Other general methods","titles":["Full GeometryOps API documentation","General geometry methods"]},"5":{"title":"Barycentric coordinates","titles":["Full GeometryOps API documentation"]},"6":{"title":"Other methods","titles":["Full GeometryOps API documentation"]},"7":{"title":"20th April, 2024","titles":[]},"8":{"title":"29th Feb, 2024","titles":[]},"9":{"title":"To do","titles":["29th Feb, 2024"]},"10":{"title":"Done","titles":["29th Feb, 2024"]},"11":{"title":"Accurate accumulation","titles":[]},"12":{"title":"Predicates","titles":[]},"13":{"title":"Orient","titles":["Predicates"]},"14":{"title":"Dashboard","titles":["Predicates","Orient"]},"15":{"title":"Testing robust vs regular predicates","titles":["Predicates","Orient"]},"16":{"title":"Incircle","titles":["Predicates"]},"17":{"title":"Paradigms","titles":[]},"18":{"title":"apply","titles":["Paradigms"]},"19":{"title":"applyreduce","titles":["Paradigms","apply"]},"20":{"title":"fix and prepare","titles":["Paradigms"]},"21":{"title":"Peculiarities","titles":[]},"22":{"title":"What does apply return and why?","titles":["Peculiarities"]},"23":{"title":"Why do you want me to provide a target in set operations?","titles":["Peculiarities"]},"24":{"title":"_True and _False (or BoolsAsTypes)","titles":["Peculiarities"]},"25":{"title":"What is GeometryOps.jl?","titles":[]},"26":{"title":"How to navigate the docs","titles":[]},"27":{"title":"Introduction","titles":[]},"28":{"title":"Main concepts","titles":["Introduction"]},"29":{"title":"The apply paradigm","titles":["Introduction","Main concepts"]},"30":{"title":"What's this GeoInterface.Wrapper thing?","titles":["Introduction","Main concepts"]},"31":{"title":"GeometryOps.jl","titles":[]},"32":{"title":"Angles","titles":[]},"33":{"title":"What is angles?","titles":["Angles"]},"34":{"title":"Implementation","titles":["Angles"]},"35":{"title":"Area and signed area","titles":[]},"36":{"title":"What is area? What is signed area?","titles":["Area and signed area"]},"37":{"title":"Implementation","titles":["Area and signed area"]},"38":{"title":"Barycentric coordinates","titles":[]},"39":{"title":"Example","titles":["Barycentric coordinates"]},"40":{"title":"Barycentric-coordinate API","titles":["Barycentric coordinates"]},"41":{"title":"Buffer","titles":[]},"42":{"title":"Centroid","titles":[]},"43":{"title":"What is the centroid?","titles":["Centroid"]},"44":{"title":"Implementation","titles":["Centroid"]},"45":{"title":"Polygon clipping helpers","titles":[]},"46":{"title":"What is coverage?","titles":[]},"47":{"title":"Implementation","titles":[]},"48":{"title":"Polygon cutting","titles":[]},"49":{"title":"What is cut?","titles":["Polygon cutting"]},"50":{"title":"Implementation","titles":["Polygon cutting"]},"51":{"title":"Difference Polygon Clipping","titles":[]},"52":{"title":"Helper functions for Differences with Greiner and Hormann Polygon Clipping","titles":[]},"53":{"title":"Geometry Intersection","titles":[]},"54":{"title":"Helper functions for Intersections with Greiner and Hormann Polygon Clipping","titles":[]},"55":{"title":"If we want to inject adaptivity, we would do something like:","titles":[]},"56":{"title":"Convex hull","titles":[]},"57":{"title":"Example","titles":["Convex hull"]},"58":{"title":"Simple hull","titles":["Convex hull","Example"]},"59":{"title":"Convex hull of the USA","titles":["Convex hull"]},"60":{"title":"Investigating the winding order","titles":["Convex hull"]},"61":{"title":"Implementation","titles":["Convex hull"]},"62":{"title":"Union Polygon Clipping","titles":[]},"63":{"title":"Helper functions for Unions with Greiner and Hormann Polygon Clipping","titles":[]},"64":{"title":"Distance and signed distance","titles":[]},"65":{"title":"What is distance? What is signed distance?","titles":["Distance and signed distance"]},"66":{"title":"Implementation","titles":["Distance and signed distance"]},"67":{"title":"Equals","titles":[]},"68":{"title":"What is equals?","titles":["Equals"]},"69":{"title":"Implementation","titles":["Equals"]},"70":{"title":"CoveredBy","titles":[]},"71":{"title":"What is coveredby?","titles":["CoveredBy"]},"72":{"title":"Implementation","titles":["CoveredBy"]},"73":{"title":"Convert features to geometries","titles":[]},"74":{"title":"Points coveredby geometries","titles":[]},"75":{"title":"Lines coveredby geometries","titles":[]},"76":{"title":"Rings covered by geometries","titles":[]},"77":{"title":"Polygons covered by geometries","titles":[]},"78":{"title":"Geometries coveredby multi-geometry/geometry collections","titles":[]},"79":{"title":"Multi-geometry/geometry collections coveredby geometries","titles":[]},"80":{"title":"Contains","titles":[]},"81":{"title":"What is contains?","titles":["Contains"]},"82":{"title":"Implementation","titles":["Contains"]},"83":{"title":"Covers","titles":[]},"84":{"title":"What is covers?","titles":["Covers"]},"85":{"title":"Implementation","titles":["Covers"]},"86":{"title":"Crossing checks","titles":[]},"87":{"title":"Disjoint","titles":[]},"88":{"title":"What is disjoint?","titles":["Disjoint"]},"89":{"title":"Implementation","titles":["Disjoint"]},"90":{"title":"Convert features to geometries","titles":[]},"91":{"title":"Point disjoint geometries","titles":[]},"92":{"title":"Lines disjoint geometries","titles":[]},"93":{"title":"Rings disjoint geometries","titles":[]},"94":{"title":"Polygon disjoint geometries","titles":[]},"95":{"title":"Geometries disjoint multi-geometry/geometry collections","titles":[]},"96":{"title":"Multi-geometry/geometry collections coveredby geometries","titles":[]},"97":{"title":"Intersection checks","titles":[]},"98":{"title":"What is intersects?","titles":["Intersection checks"]},"99":{"title":"Implementation","titles":["Intersection checks"]},"100":{"title":"Line-curve interaction","titles":[]},"101":{"title":"Overlaps","titles":[]},"102":{"title":"What is overlaps?","titles":["Overlaps"]},"103":{"title":"Implementation","titles":["Overlaps"]},"104":{"title":"Touches","titles":[]},"105":{"title":"What is touches?","titles":["Touches"]},"106":{"title":"Implementation","titles":["Touches"]},"107":{"title":"Convert features to geometries","titles":[]},"108":{"title":"Point touches geometries","titles":[]},"109":{"title":"Lines touching geometries","titles":[]},"110":{"title":"Rings touch geometries","titles":[]},"111":{"title":"Polygons touch geometries","titles":[]},"112":{"title":"Geometries touch multi-geometry/geometry collections","titles":[]},"113":{"title":"Multi-geometry/geometry collections cross geometries","titles":[]},"114":{"title":"Within","titles":[]},"115":{"title":"What is within?","titles":["Within"]},"116":{"title":"Implementation","titles":["Within"]},"117":{"title":"Convert features to geometries","titles":[]},"118":{"title":"Points within geometries","titles":[]},"119":{"title":"Lines within geometries","titles":[]},"120":{"title":"Rings covered by geometries","titles":[]},"121":{"title":"Polygons within geometries","titles":[]},"122":{"title":"Geometries within multi-geometry/geometry collections","titles":[]},"123":{"title":"Multi-geometry/geometry collections within geometries","titles":[]},"124":{"title":"Orientation","titles":[]},"125":{"title":"isclockwise","titles":["Orientation"]},"126":{"title":"isconcave","titles":["Orientation"]},"127":{"title":"Polygonizing raster data","titles":[]},"128":{"title":"Not implemented yet","titles":[]},"129":{"title":"Primitive functions","titles":[]},"130":{"title":"Docstrings","titles":["Primitive functions"]},"131":{"title":"Functions","titles":["Primitive functions","Docstrings"]},"132":{"title":"Types","titles":["Primitive functions"]},"133":{"title":"Implementation","titles":["Primitive functions"]},"134":{"title":"What is apply?","titles":["Primitive functions"]},"135":{"title":"Embedding:","titles":["Primitive functions"]},"136":{"title":"Threading","titles":["Primitive functions"]},"137":{"title":"Closed Rings","titles":[]},"138":{"title":"Example","titles":["Closed Rings"]},"139":{"title":"Implementation","titles":["Closed Rings"]},"140":{"title":"Geometry Corrections","titles":[]},"141":{"title":"Interface","titles":["Geometry Corrections"]},"142":{"title":"Available corrections","titles":["Geometry Corrections"]},"143":{"title":"Intersecting Polygons","titles":[]},"144":{"title":"Example","titles":["Intersecting Polygons"]},"145":{"title":"Implementation","titles":["Intersecting Polygons"]},"146":{"title":"Extent embedding","titles":[]},"147":{"title":"Coordinate flipping","titles":[]},"148":{"title":"Geometry reprojection","titles":[]},"149":{"title":"Method error handling","titles":["Geometry reprojection"]},"150":{"title":"Segmentize","titles":[]},"151":{"title":"Examples","titles":["Segmentize"]},"152":{"title":"Benchmark","titles":["Segmentize"]},"153":{"title":"Implementation","titles":["Segmentize"]},"154":{"title":"Pointwise transformation","titles":[]},"155":{"title":"Tuple conversion","titles":[]},"156":{"title":"Geometry simplification","titles":[]},"157":{"title":"Examples","titles":["Geometry simplification"]},"158":{"title":"Benchmark","titles":["Geometry simplification"]},"159":{"title":"Simplify with RadialDistance Algorithm","titles":[]},"160":{"title":"Simplify with DouglasPeucker Algorithm","titles":[]},"161":{"title":"Simplify with VisvalingamWhyatt Algorithm","titles":[]},"162":{"title":"Shared utils","titles":[]},"163":{"title":"Types","titles":[]},"164":{"title":"TraitTarget","titles":["Types"]},"165":{"title":"BoolsAsTypes","titles":["Types"]},"166":{"title":"GEOS","titles":["Types"]},"167":{"title":"Utility functions","titles":[]},"168":{"title":"Creating Geometry","titles":[]},"169":{"title":"Creating and plotting geometries","titles":["Creating Geometry"]},"170":{"title":"Plot geometries on a map using GeoMakie and coordinate reference system (CRS)","titles":["Creating Geometry"]},"171":{"title":"Create geospatial geometries with embedded coordinate reference system information","titles":["Creating Geometry"]},"172":{"title":"Creating a table with attributes and geometry","titles":["Creating Geometry"]},"173":{"title":"Saving your geospatial data","titles":["Creating Geometry"]},"174":{"title":"Geodesic paths","titles":[]},"175":{"title":"Spatial joins","titles":[]},"176":{"title":"Simple example","titles":["Spatial joins"]},"177":{"title":"Real-world example","titles":["Spatial joins"]},"178":{"title":"Enabling custom predicates","titles":["Spatial joins"]}},"dirtCount":0,"index":[["⋮",{"2":{"170":1}}],["θ",{"2":{"169":7,"170":3,"171":5}}],["☁",{"2":{"169":1}}],["✈",{"2":{"169":1}}],["÷",{"2":{"136":2}}],["ϵ",{"2":{"54":5}}],["∘",{"2":{"54":1,"103":2,"127":2,"141":1,"158":2,"178":2}}],["⊻",{"2":{"45":1,"52":2}}],["≥",{"2":{"45":1,"100":2,"145":1,"160":1}}],["α≈1",{"2":{"54":1}}],["α≈0",{"2":{"54":1}}],["α2",{"2":{"45":4,"54":2}}],["α",{"2":{"45":3,"54":28,"100":7}}],["α1",{"2":{"45":4,"54":2}}],["β2",{"2":{"45":4,"54":2}}],["β",{"2":{"45":4,"54":28,"100":7}}],["β1",{"2":{"45":4,"54":2}}],["≤",{"2":{"45":5,"47":14,"100":6,"160":1,"162":1,"167":4}}],["^",{"2":{"170":1}}],["^3",{"2":{"170":1}}],["^n",{"2":{"126":1}}],["^2",{"2":{"44":2,"66":2}}],["^hormannpresentation",{"2":{"40":2}}],["∑λ",{"2":{"40":2}}],["∑i=2n",{"2":{"6":1}}],["`$",{"2":{"166":1}}],["`libgeos",{"2":{"166":1}}],["`linearring`",{"2":{"153":1}}],["`linearsegments`",{"2":{"153":1}}],["`linestring`",{"2":{"153":1}}],["`linestringtrait`",{"2":{"141":1}}],["`line2`",{"2":{"126":1}}],["`line1`",{"2":{"126":1}}],["`line",{"2":{"53":4}}],["`equatorial",{"2":{"152":2}}],["`extents",{"2":{"146":1}}],["`inf`",{"2":{"148":1}}],["`intersects`",{"2":{"99":1}}],["`intersectingpolygons`",{"2":{"51":1,"53":1,"62":1}}],["`prefilter",{"2":{"158":1}}],["`proj",{"2":{"148":1,"152":2}}],["`polgontrait`",{"2":{"136":1}}],["`polygontrait`",{"2":{"136":1,"141":1}}],["`polygonize`",{"2":{"127":2}}],["`polygon`",{"2":{"40":3}}],["`polys`",{"2":{"52":1}}],["`poly",{"2":{"52":3,"54":1,"63":1}}],["`pointrait`",{"2":{"158":1}}],["`pointtrait`",{"2":{"136":3,"141":1}}],["`point",{"2":{"100":3}}],["`point`",{"2":{"40":4,"66":1}}],["`point2f`",{"2":{"39":1}}],["`obj`",{"2":{"136":1,"154":1,"155":1}}],["`op`",{"2":{"136":2}}],["`+`",{"2":{"136":1}}],["`alg",{"2":{"166":1}}],["`alg`",{"2":{"162":1}}],["`always",{"2":{"148":1}}],["`application",{"2":{"141":1}}],["`apply`",{"2":{"136":1,"164":1}}],["`abstractgeometrytrait`",{"2":{"136":1}}],["`abstractarray`",{"2":{"136":1}}],["`abstractmatrix`",{"2":{"127":1}}],["`calc",{"2":{"133":1}}],["`crs`",{"2":{"133":1}}],["`components`",{"2":{"136":1}}],["`collect`",{"2":{"136":1}}],["`contains`",{"2":{"82":1,"116":1}}],["`convex",{"2":{"61":2}}],["`covers`",{"2":{"72":1,"85":1}}],["`coveredby`",{"2":{"72":1,"85":1}}],["`union",{"2":{"127":2}}],["`unionintersectingpolygons`",{"2":{"145":1}}],["`unionintersectingpolygons",{"2":{"51":1,"52":2,"53":1,"54":2,"62":1,"63":2}}],["`ys`",{"2":{"127":1}}],["`flattening`",{"2":{"152":1}}],["`flattening",{"2":{"152":1}}],["`flatten`",{"2":{"136":1}}],["`f",{"2":{"136":1}}],["`featurecollectiontrait`",{"2":{"136":2}}],["`featurecollection`",{"2":{"127":2}}],["`featuretrait`",{"2":{"136":3}}],["`feature`s",{"2":{"127":1}}],["`f`",{"2":{"127":5,"136":6,"154":2,"166":1}}],["`false`",{"2":{"126":1,"127":1,"133":4,"148":1}}],["`fix",{"2":{"51":2,"52":2,"53":2,"54":2,"62":2,"63":2}}],["`douglaspeucker`",{"2":{"158":1}}],["`d`",{"2":{"148":1}}],["`difference`",{"2":{"145":1}}],["`disjoint`",{"2":{"99":1}}],["`delaunaytriangulation",{"2":{"61":1}}],["`within`",{"2":{"82":1,"116":1}}],["`weight`",{"2":{"40":1}}],["`geos`",{"2":{"166":3}}],["`geodesic`",{"2":{"152":1}}],["`geodesicsegments`",{"2":{"151":1,"152":1,"153":1}}],["`geointerface`",{"2":{"141":1}}],["`geointerface",{"2":{"136":2,"148":2}}],["`geom`",{"2":{"66":3,"136":1,"153":1}}],["`geometrycorrection`",{"2":{"139":1,"141":1,"145":2}}],["`geometry`",{"2":{"136":1,"148":2}}],["`geometrybasics",{"2":{"40":3}}],["`geometries`",{"2":{"61":1}}],["`g1`",{"2":{"66":1}}],["`gi",{"2":{"61":1,"127":1}}],["`tuple",{"2":{"167":1}}],["`tuple`s",{"2":{"155":1}}],["`tuple`",{"2":{"127":1,"155":1}}],["`time`",{"2":{"148":1}}],["`transform`",{"2":{"148":1}}],["`true`",{"2":{"72":1,"86":1,"89":2,"106":1,"116":1,"126":2,"127":1,"133":2,"148":1}}],["`threaded==true`",{"2":{"136":1}}],["`threaded`",{"2":{"133":1}}],["`tol`",{"2":{"158":2,"159":3,"160":2,"161":3,"162":4}}],["`to",{"2":{"54":1}}],["`target",{"2":{"148":3}}],["`target`",{"2":{"53":1,"136":4,"164":1}}],["`tables",{"2":{"136":1}}],["`taget`",{"2":{"51":1,"62":1}}],["`method",{"2":{"153":1}}],["`method`",{"2":{"40":3,"153":1}}],["`max",{"2":{"152":4,"153":2,"166":1}}],["`makie",{"2":{"127":1}}],["`multipointtrait`",{"2":{"136":1,"158":1}}],["`multipolygontrait`",{"2":{"136":1}}],["`multipolygon`",{"2":{"127":3}}],["`multipolygon",{"2":{"52":3,"54":3,"63":2}}],["`multipoly",{"2":{"52":7,"54":3,"63":3}}],["`minpoints`",{"2":{"127":2}}],["`number`",{"2":{"158":2,"162":3}}],["`namedtuple`",{"2":{"136":1}}],["`nothing`",{"2":{"45":1,"133":1}}],["`next",{"2":{"45":1}}],["`bool`",{"2":{"127":2}}],["`buffer`",{"2":{"41":1}}],["`barycentric",{"2":{"40":3}}],["`radialdistance`",{"2":{"158":1}}],["`ratio`",{"2":{"158":2,"162":3}}],["`reproject`",{"2":{"149":1}}],["`rebuild`",{"2":{"136":1}}],["`r`",{"2":{"40":1}}],["`rᵢ`",{"2":{"40":1}}],["`segmentize`",{"2":{"166":1}}],["`simplifyalg`",{"2":{"158":2}}],["`simplify",{"2":{"158":1}}],["`simplify`",{"2":{"158":2}}],["`svector`",{"2":{"154":3}}],["`source",{"2":{"148":3}}],["`s`",{"2":{"40":1}}],["`sᵢ`",{"2":{"40":2}}],["`s2`",{"2":{"40":1}}],["`s1`",{"2":{"40":1}}],["`hcat`",{"2":{"40":1}}],["`x`",{"2":{"136":1}}],["`xs`",{"2":{"127":1}}],["`x1",{"2":{"40":1}}],["`x1`",{"2":{"40":2}}],["`x2`",{"2":{"40":1}}],["`visvalingamwhyatt`",{"2":{"158":1}}],["`vector",{"2":{"148":1}}],["`vector`",{"2":{"127":1,"136":1}}],["`vᵢ`",{"2":{"40":1}}],["`v`",{"2":{"40":1}}],["`values`",{"2":{"40":1,"127":1}}],["`λs`",{"2":{"40":2}}],["`",{"2":{"40":2,"51":1,"52":2,"53":1,"54":3,"62":1,"63":2,"127":3,"136":1,"141":2,"148":2,"153":1,"158":3,"166":2,"167":1}}],["```jldoctest",{"2":{"50":1,"51":1,"53":1,"54":1,"62":1,"69":1,"72":1,"82":1,"85":1,"89":1,"99":1,"103":1,"106":1,"116":1,"126":1,"158":1}}],["```julia",{"2":{"6":2,"40":1,"86":1,"126":1,"136":1,"154":2,"164":1}}],["```math",{"2":{"40":1,"126":1}}],["```",{"2":{"11":1,"40":3,"50":1,"51":1,"53":1,"62":1,"69":1,"72":1,"82":1,"85":1,"89":1,"99":1,"103":1,"106":1,"116":1,"126":3,"127":11,"136":1,"154":2,"158":1,"167":1}}],["λ₁",{"2":{"40":2}}],["λn",{"2":{"38":1}}],["λ3",{"2":{"38":1}}],["λ2",{"2":{"38":2}}],["λ1",{"2":{"38":2}}],["λs",{"2":{"5":3,"6":4,"40":27}}],["π",{"2":{"34":1,"158":1}}],["δbay",{"2":{"54":3}}],["δbax",{"2":{"54":3}}],["δby",{"2":{"54":5}}],["δbx",{"2":{"54":5}}],["δb",{"2":{"54":2}}],["δay",{"2":{"54":5}}],["δax",{"2":{"54":5}}],["δa",{"2":{"54":2}}],["δintrs",{"2":{"45":2}}],["δy2",{"2":{"126":2}}],["δy1",{"2":{"126":2}}],["δyl",{"2":{"103":4}}],["δy",{"2":{"34":8,"47":3,"100":7}}],["δys",{"2":{"34":1}}],["δx2",{"2":{"126":2}}],["δx1",{"2":{"126":2}}],["δxl",{"2":{"103":4}}],["δx",{"2":{"34":9,"47":3,"100":7}}],["∈",{"2":{"14":1}}],["~",{"2":{"14":3}}],["$ratio",{"2":{"162":1}}],["$rectangle",{"2":{"152":2}}],["$number",{"2":{"162":1}}],["$name",{"2":{"31":2}}],["$min",{"2":{"162":1}}],["$douglas",{"2":{"158":1,"160":1}}],["$simplify",{"2":{"158":1,"159":1,"161":1}}],["$lg",{"2":{"152":1}}],["$lin",{"2":{"152":2}}],["$geom",{"2":{"158":8}}],["$geo",{"2":{"152":1}}],["$apply",{"2":{"136":1,"147":1,"148":1,"158":1}}],["$calc",{"2":{"133":1}}],["$crs",{"2":{"133":1,"146":1}}],["$tol",{"2":{"162":1}}],["$threaded",{"2":{"133":1}}],["$t",{"2":{"69":1,"136":4}}],["$target",{"2":{"52":1,"54":1,"63":1,"136":3}}],["$trait",{"2":{"50":1,"52":2,"54":2,"63":2}}],["$",{"2":{"13":4,"14":1,"40":4,"45":2,"127":3,"141":4,"153":1,"158":12,"166":1}}],["|=",{"2":{"100":4,"103":1}}],["||",{"2":{"34":2,"45":13,"47":8,"50":1,"53":1,"54":5,"62":1,"69":18,"86":2,"100":8,"103":1,"108":1,"127":7,"160":1,"162":3}}],["|",{"2":{"11":4,"100":1}}],["|>",{"2":{"11":8,"13":2,"136":1,"151":1,"152":1,"158":3,"177":2}}],["↩︎",{"2":{"6":1}}],["ᵢᵢᵢ₊₁ᵢᵢ₊₁ᵢᵢ₊₁tᵢ=det",{"2":{"6":1}}],["⋅",{"2":{"6":1,"40":1}}],["qy",{"2":{"13":2,"14":2}}],["qx",{"2":{"13":2,"14":2}}],["q",{"2":{"13":13,"14":12,"45":4}}],["qhull",{"2":{"6":1,"61":1}}],["queue",{"2":{"160":41}}],["questions",{"2":{"54":1}}],["quite",{"2":{"138":1,"177":1}}],["quickhull",{"2":{"6":1,"56":1,"61":2}}],["quick",{"2":{"4":1,"6":1,"40":1,"146":1,"157":1}}],["quality",{"2":{"6":1,"158":1}}],["quantity",{"2":{"6":1,"152":1}}],["quot",{"2":{"1":4,"6":10,"20":2,"45":8,"65":2,"66":2,"69":2,"84":4,"100":10,"134":2,"136":8,"150":6,"169":2,"176":2}}],["zone",{"2":{"170":1}}],["zoom",{"2":{"14":1}}],["zs",{"2":{"127":5}}],["zip",{"2":{"13":1,"14":1,"169":4,"170":1,"171":1}}],["zeros",{"2":{"40":1,"47":1}}],["zero",{"2":{"4":6,"6":8,"37":11,"44":3,"45":4,"47":11,"54":22,"65":1,"66":3,"126":1,"136":1,"160":4}}],["z",{"2":{"4":1,"5":1,"6":2,"40":3,"69":3,"127":3,"147":1,"154":1,"155":1}}],["0e6",{"2":{"170":6}}],["0example",{"2":{"6":1}}],["097075198097933",{"2":{"171":1}}],["09707519809793252",{"2":{"171":2}}],["091887951911644",{"2":{"171":3}}],["0999933334666654",{"2":{"169":1}}],["09801605542096",{"2":{"169":1}}],["098016055420953",{"2":{"169":3}}],["09297443860091348",{"2":{"169":4}}],["09",{"2":{"39":1}}],["08506974233813636",{"2":{"171":2}}],["08",{"2":{"39":1}}],["062749678615475",{"2":{"171":1}}],["06274967861547665",{"2":{"171":2}}],["06592462566760626",{"2":{"169":1}}],["0650624499034016",{"2":{"169":4}}],["06",{"2":{"39":1}}],["02017324484778",{"2":{"171":1}}],["020173244847778715",{"2":{"171":2}}],["027886421973952302",{"2":{"169":4}}],["02",{"2":{"39":3}}],["04500741774392",{"2":{"171":1}}],["045007417743918",{"2":{"171":2}}],["049999166670833324",{"2":{"169":1}}],["0438052480035",{"2":{"169":1}}],["043805248003498",{"2":{"169":3}}],["04",{"2":{"39":6}}],["07518688541961",{"2":{"171":1}}],["075186885419612",{"2":{"171":2}}],["071",{"2":{"151":2,"152":2}}],["07",{"2":{"39":6,"151":6,"152":6}}],["009176636029576",{"2":{"171":1}}],["0091766360295773",{"2":{"171":2}}],["003135308800957",{"2":{"171":1}}],["0031353088009582475",{"2":{"171":2}}],["0035114210915891397",{"2":{"169":4}}],["006784125578492062",{"2":{"171":2}}],["0020133807972559925",{"2":{"171":2}}],["00839489109211",{"2":{"171":3}}],["008696",{"2":{"3":1,"6":3,"53":1,"54":1,"98":1,"99":1}}],["005465967083412071",{"2":{"169":4}}],["00111595449914",{"2":{"169":1}}],["001115954499138",{"2":{"169":3}}],["0010075412835199304",{"2":{"169":4}}],["001",{"2":{"158":1}}],["00085222666982",{"2":{"171":3}}],["000577332369005",{"2":{"171":1}}],["0005773323690041465",{"2":{"171":2}}],["000510363870095e6",{"2":{"170":2}}],["00025191811248184703",{"2":{"171":2}}],["000215611503127e6",{"2":{"170":2}}],["0007260527263e6",{"2":{"170":2}}],["000342160541625e6",{"2":{"170":2}}],["000124843834609e6",{"2":{"170":2}}],["000063948817746e6",{"2":{"170":2}}],["000026987852369e6",{"2":{"170":2}}],["000008144045314",{"2":{"171":1}}],["000007998400139e6",{"2":{"170":2}}],["000000999950001e6",{"2":{"170":2}}],["00001e6",{"2":{"170":1}}],["0004397316773170068",{"2":{"169":4}}],["000",{"2":{"158":1,"174":1}}],["00",{"2":{"39":2}}],["053798628882221644",{"2":{"171":2}}],["05877989361332",{"2":{"169":1}}],["058779893613323",{"2":{"169":3}}],["05416726609360478",{"2":{"169":4}}],["05",{"2":{"39":1}}],["052704767595",{"2":{"15":1}}],["037564867762832",{"2":{"171":1}}],["03756486776283019",{"2":{"171":2}}],["031245035570328428",{"2":{"171":2}}],["033518309870985",{"2":{"171":3}}],["03503632062070827",{"2":{"169":4}}],["03",{"2":{"39":4}}],["01458815628695",{"2":{"171":3}}],["016044338630866517",{"2":{"171":2}}],["01592650896568995",{"2":{"169":1}}],["01597247419241532",{"2":{"169":4}}],["01908693278165",{"2":{"169":1}}],["019086932781654",{"2":{"169":3}}],["01098781325325",{"2":{"169":1}}],["010987813253244",{"2":{"169":3}}],["011814947665167774",{"2":{"169":4}}],["01362848005",{"2":{"15":1}}],["01",{"2":{"14":1,"39":1,"151":1,"152":1,"169":1,"170":1,"171":1}}],["0^",{"2":{"13":2,"14":2}}],["0+2",{"2":{"13":2,"14":2}}],["0",{"2":{"3":35,"4":12,"6":190,"11":1,"13":5,"14":8,"15":32,"33":20,"34":3,"36":9,"37":4,"39":155,"40":2,"43":6,"44":6,"45":49,"46":13,"47":5,"49":22,"50":49,"51":42,"53":2,"54":21,"59":1,"62":46,"63":2,"65":20,"66":2,"68":13,"69":18,"71":6,"72":6,"81":16,"84":6,"85":12,"86":9,"88":15,"100":37,"102":13,"103":9,"105":12,"106":11,"115":16,"126":21,"127":7,"138":24,"144":64,"145":4,"151":16,"152":13,"153":1,"158":11,"160":7,"162":4,"167":2,"169":129,"170":2,"171":46,"176":13}}],[">=",{"2":{"40":6,"86":4,"103":1,"162":1}}],[">",{"2":{"1":1,"6":6,"11":2,"13":1,"15":2,"34":1,"40":1,"45":17,"47":3,"50":5,"51":1,"52":1,"54":2,"62":1,"63":3,"65":1,"69":1,"86":8,"100":10,"103":2,"126":4,"127":12,"136":5,"141":1,"145":3,"153":2,"154":1,"158":1,"160":12,"162":3,"167":1,"177":1}}],["914930257661865",{"2":{"171":1}}],["96875496442967",{"2":{"171":1}}],["961329",{"2":{"3":1,"6":3,"53":1,"54":1,"98":1,"99":1}}],["983955661369134",{"2":{"171":1}}],["9833",{"2":{"15":1}}],["9877550012664",{"2":{"169":1}}],["9840085315131",{"2":{"169":1}}],["98271048511609",{"2":{"169":1}}],["98661575256801",{"2":{"169":1}}],["99321587442151",{"2":{"171":1}}],["99375130197483",{"2":{"169":1}}],["997986619202745",{"2":{"171":1}}],["997750168744936",{"2":{"169":1}}],["997247091122496",{"2":{"169":1}}],["99600053330489",{"2":{"169":1}}],["991002699676024",{"2":{"169":1}}],["990022362600165",{"2":{"169":1}}],["99292997455441",{"2":{"169":1}}],["99533829767195",{"2":{"169":1}}],["99865616402829",{"2":{"169":1}}],["999999967681458e6",{"2":{"170":2}}],["999997707902938e6",{"2":{"170":2}}],["999987539891298e6",{"2":{"170":2}}],["999963474314044e6",{"2":{"170":2}}],["999919535736425e6",{"2":{"170":2}}],["999974634566875",{"2":{"169":1}}],["999849768598615e6",{"2":{"170":2}}],["999748081887518",{"2":{"171":1}}],["999748243174828e6",{"2":{"170":2}}],["999750002083324",{"2":{"169":1}}],["999609061508909e6",{"2":{"170":2}}],["999426363321033e6",{"2":{"170":2}}],["999194331880103e6",{"2":{"170":2}}],["99900003333289",{"2":{"169":1}}],["999565375483215",{"2":{"169":1}}],["9im",{"2":{"100":2,"175":1}}],["97976366505997",{"2":{"169":1}}],["9783069507679",{"2":{"169":1}}],["97",{"2":{"39":1}}],["946201371117777",{"2":{"171":1}}],["94",{"2":{"39":1}}],["92",{"2":{"39":1}}],["95770326033",{"2":{"15":1}}],["95",{"2":{"13":1,"14":1,"174":1}}],["900",{"2":{"152":1}}],["90063612163",{"2":{"11":2}}],["90",{"2":{"33":9,"39":1}}],["909318372607",{"2":{"11":3}}],["9",{"2":{"1":1,"6":1,"100":2,"126":12,"151":1,"154":1}}],["897070",{"2":{"174":1}}],["873633668827033",{"2":{"171":1}}],["8135804051007",{"2":{"169":1}}],["813580405100698",{"2":{"169":3}}],["88",{"2":{"39":1}}],["86641841658641",{"2":{"169":1}}],["866418416586406",{"2":{"169":3}}],["86",{"2":{"39":1}}],["868447876892",{"2":{"15":2}}],["84",{"2":{"39":1}}],["821068835162155",{"2":{"171":1}}],["82",{"2":{"39":1}}],["800",{"2":{"39":1}}],["80000",{"2":{"15":5}}],["80",{"2":{"39":1}}],["80869813739",{"2":{"15":2}}],["856614689791036e",{"2":{"15":2}}],["83572303404496",{"2":{"6":2,"53":1,"54":1}}],["8",{"2":{"1":3,"6":9,"13":1,"14":1,"51":2,"62":4,"100":1,"127":3,"151":1,"154":3,"171":2}}],["karnataka",{"2":{"177":1}}],["kbn",{"2":{"11":2}}],["kinds",{"2":{"23":1}}],["kind",{"2":{"9":1,"127":1}}],["k",{"2":{"6":1,"14":6,"40":1,"45":5,"100":5,"169":5,"171":5}}],["kernel",{"2":{"153":4}}],["keepat",{"2":{"62":1,"145":2}}],["keep",{"2":{"45":3,"127":1,"145":14,"151":1,"176":1}}],["keeping",{"2":{"6":1,"136":1,"147":1}}],["keys",{"2":{"127":4}}],["key",{"2":{"6":1,"127":4,"166":5}}],["keyword",{"2":{"6":8,"23":1,"51":1,"53":1,"62":1,"133":6,"136":1,"146":2,"152":2,"166":4,"170":1,"171":1}}],["keywords",{"2":{"1":2,"4":1,"6":10,"100":2,"127":1,"133":1,"136":1,"146":1,"147":2,"148":3,"155":2,"158":8,"159":1,"160":1,"161":1,"162":1}}],["known",{"2":{"47":2}}],["know",{"2":{"6":3,"34":2,"45":1,"47":1,"51":1,"53":1,"54":2,"62":1,"63":1,"136":1,"176":1}}],["kwargs",{"2":{"41":3,"47":1,"50":1,"51":3,"52":3,"53":4,"54":5,"62":3,"63":5,"141":2,"149":1,"152":1}}],["kwdef",{"2":{"31":1,"45":1,"152":1,"159":1,"160":1,"161":1}}],["kw",{"2":{"1":1,"6":11,"100":10,"127":20,"136":21,"147":3,"154":3,"155":3,"158":15,"161":1,"166":6}}],["json",{"2":{"173":3}}],["jstep",{"2":{"69":3}}],["jstart",{"2":{"69":7}}],["joined",{"2":{"176":4}}],["joins",{"0":{"175":1},"1":{"176":1,"177":1,"178":1},"2":{"175":3}}],["joinpath",{"2":{"158":2}}],["join",{"2":{"136":2,"175":4,"176":5,"178":1}}],["joining",{"2":{"6":2,"158":1,"175":1}}],["jpn",{"2":{"177":2}}],["jp",{"2":{"69":2}}],["jhole",{"2":{"69":2}}],["jh",{"2":{"63":5}}],["j+1",{"2":{"45":1,"127":1,"162":1}}],["j",{"2":{"45":24,"69":8,"86":9,"100":12,"126":2,"127":8,"162":2}}],["jet",{"2":{"39":1}}],["just",{"2":{"4":1,"6":1,"44":1,"45":2,"54":4,"60":1,"63":1,"66":2,"127":1,"134":1,"136":3,"152":1,"175":1}}],["julialand",{"2":{"170":2}}],["julialines",{"2":{"36":1}}],["julialinearsegments",{"2":{"6":1}}],["juliahole",{"2":{"169":1}}],["juliaplot",{"2":{"170":2}}],["juliap1",{"2":{"169":1}}],["juliapoly",{"2":{"170":1}}],["juliapolygon3",{"2":{"170":1}}],["juliapolygon1",{"2":{"169":1}}],["juliapolygonize",{"2":{"6":1}}],["juliapolygon",{"2":{"6":1}}],["juliapoints",{"2":{"176":1}}],["juliapoint",{"2":{"169":1}}],["juliaxoffset",{"2":{"169":3,"171":1}}],["juliax",{"2":{"169":2}}],["juliaxrange",{"2":{"65":1}}],["julia6",{"2":{"158":1}}],["julia$apply",{"2":{"155":1}}],["julia$threaded",{"2":{"146":1}}],["julia```jldoctest",{"2":{"167":1}}],["julia```julia",{"2":{"127":1}}],["julia```",{"2":{"86":1,"164":1}}],["julia1",{"2":{"51":1,"53":1,"54":1,"62":1}}],["julia2",{"2":{"50":1}}],["juliabase",{"2":{"40":1,"66":4,"136":1,"166":1}}],["juliabarycentric",{"2":{"5":3,"6":3}}],["juliafig",{"2":{"169":1,"170":1}}],["juliafalse",{"2":{"126":1}}],["juliafunction",{"2":{"34":2,"40":3,"41":2,"44":1,"45":11,"47":2,"50":1,"52":1,"54":2,"61":1,"63":1,"66":8,"100":6,"103":2,"108":1,"128":1,"136":5,"149":1,"152":1,"162":2}}],["juliafor",{"2":{"31":1,"136":2}}],["juliaflexijoins",{"2":{"178":1}}],["juliaflipped",{"2":{"129":1}}],["juliaflip",{"2":{"6":1}}],["juliaflatten",{"2":{"6":1,"131":1}}],["juliagi",{"2":{"11":2}}],["juliago",{"2":{"11":1,"33":1,"36":1,"46":1,"68":1,"71":1,"81":1,"84":1,"88":1,"98":1,"102":1,"105":1,"115":1,"175":1}}],["juliageopoly1",{"2":{"171":1}}],["juliageointerface",{"2":{"167":1}}],["juliageometry",{"2":{"61":1}}],["juliageo",{"2":{"6":2}}],["juliageodesicsegments",{"2":{"6":1}}],["juliageos",{"2":{"6":1}}],["juliaweighted",{"2":{"6":1}}],["juliawithin",{"2":{"3":1,"6":1}}],["juliaunwrap",{"2":{"6":1,"136":6}}],["juliaunion",{"2":{"6":1}}],["juliaunionintersectingpolygons",{"2":{"6":1,"142":1}}],["juliausing",{"2":{"6":1,"13":1,"14":1,"39":1,"151":2,"152":1,"157":1,"158":1,"172":1}}],["juliascatter",{"2":{"176":1}}],["juliasource",{"2":{"170":2}}],["juliasimplify",{"2":{"6":1,"158":3}}],["juliasigned",{"2":{"4":2,"6":2}}],["juliasegmentize",{"2":{"6":1}}],["julias1",{"2":{"6":1}}],["juliavisvalingamwhyatt",{"2":{"6":1}}],["juliaring3",{"2":{"170":1}}],["juliaring1",{"2":{"169":1}}],["juliar",{"2":{"169":2,"170":1,"171":1}}],["juliareconstruct",{"2":{"6":1,"131":1}}],["juliarebuild",{"2":{"6":1,"131":1}}],["juliareproject",{"2":{"1":1}}],["juliaradialdistance",{"2":{"6":1}}],["juliamy",{"2":{"178":1}}],["juliamultipoly",{"2":{"158":1}}],["juliamodule",{"2":{"31":1}}],["juliamonotonechainmethod",{"2":{"6":1}}],["juliameanvalue",{"2":{"6":1}}],["juliadf",{"2":{"172":1}}],["juliadestination",{"2":{"170":1}}],["juliadouglaspeucker",{"2":{"6":1}}],["juliadifference",{"2":{"6":1}}],["juliadiffintersectingpolygons",{"2":{"6":1,"142":1}}],["juliadistance",{"2":{"4":1,"6":1}}],["juliadisjoint",{"2":{"3":1,"6":1}}],["juliaexport",{"2":{"32":1,"35":1,"38":1,"42":1,"48":1,"51":1,"53":1,"62":1,"64":1,"67":1,"70":1,"80":1,"83":1,"87":1,"97":1,"101":1,"104":1,"114":1,"124":1,"127":1,"129":1,"137":1,"140":1,"143":1,"148":1,"150":1,"158":1,"163":1}}],["juliaend",{"2":{"66":1}}],["juliaenforce",{"2":{"6":1}}],["juliaenum",{"2":{"6":2}}],["juliaembed",{"2":{"4":1,"6":1}}],["juliaequals",{"2":{"4":15,"6":15,"45":1}}],["juliaaccuratearithmetic",{"2":{"11":2}}],["juliaabstract",{"2":{"6":3,"141":1,"142":1,"152":1,"165":1}}],["juliaangles",{"2":{"4":1,"6":1}}],["juliaarea",{"2":{"4":1,"6":1}}],["juliaapplyreduce",{"2":{"1":1,"6":1}}],["juliaapply",{"2":{"1":1,"6":1,"18":1}}],["juliacent",{"2":{"43":1}}],["juliacentroid",{"2":{"4":1,"6":3}}],["juliacut",{"2":{"6":1}}],["juliaclosedring",{"2":{"6":1,"142":1}}],["juliaconst",{"2":{"34":1,"37":1,"40":1,"45":1,"47":2,"66":1,"72":1,"89":1,"106":1,"116":1,"133":1}}],["juliaconvex",{"2":{"6":1,"61":1}}],["juliacontains",{"2":{"3":1,"6":1}}],["juliacoverage",{"2":{"6":1}}],["juliacovers",{"2":{"3":1,"6":1}}],["juliacoveredby",{"2":{"3":1,"6":1}}],["juliatrue",{"2":{"69":1,"72":1,"82":1,"85":1,"89":1,"99":1,"103":1,"106":1,"116":1,"126":1}}],["juliatraittarget",{"2":{"6":2,"164":1}}],["juliatransform",{"2":{"1":1,"6":1}}],["juliatuples",{"2":{"6":1}}],["juliat",{"2":{"6":1}}],["juliatouches",{"2":{"3":1,"6":1}}],["juliaoverlaps",{"2":{"3":9,"6":9}}],["juliainnerjoin",{"2":{"177":1}}],["juliaintersection",{"2":{"6":2}}],["juliaintersects",{"2":{"3":1}}],["juliaisconcave",{"2":{"6":1}}],["juliaisclockwise",{"2":{"6":1}}],["juliaimport",{"2":{"1":1,"3":9,"4":1,"6":18,"11":1,"33":1,"36":1,"43":1,"46":1,"49":1,"58":1,"59":1,"60":1,"65":1,"68":1,"71":1,"81":1,"84":1,"88":1,"98":1,"102":1,"105":1,"115":1,"138":2,"144":2,"151":1,"173":4,"174":1,"176":1,"177":1}}],["julia",{"2":{"3":1,"6":5,"9":1,"15":1,"25":1,"27":1,"31":1,"34":4,"37":10,"40":8,"44":19,"45":60,"47":18,"50":10,"51":6,"52":1,"53":5,"54":29,"56":1,"61":5,"62":6,"63":4,"65":1,"66":4,"69":15,"73":1,"74":5,"75":1,"76":1,"77":2,"78":1,"79":1,"82":1,"85":1,"86":3,"90":1,"91":3,"92":1,"93":1,"94":1,"95":1,"96":1,"99":1,"100":50,"103":7,"107":1,"108":3,"109":1,"110":1,"111":1,"112":1,"113":1,"117":1,"118":3,"119":1,"120":1,"121":2,"122":1,"123":1,"126":9,"127":40,"128":2,"136":64,"139":5,"141":1,"145":3,"146":1,"147":1,"148":1,"152":1,"153":2,"154":1,"155":1,"158":1,"159":2,"160":15,"161":3,"163":1,"164":1,"166":4,"167":1,"168":2,"170":2,"173":2,"175":1,"176":1}}],["julia>",{"2":{"1":5,"6":7,"126":3,"154":7}}],["juliajulia>",{"2":{"1":2,"6":3}}],["jl`",{"2":{"61":1,"148":1,"166":1}}],["jldoctest",{"2":{"6":1}}],["jl",{"0":{"25":1,"31":1},"2":{"1":10,"4":1,"6":16,"10":2,"11":1,"22":2,"25":2,"27":2,"31":42,"34":1,"37":1,"40":1,"41":3,"44":1,"45":1,"47":1,"50":1,"52":1,"54":1,"55":1,"56":3,"61":6,"63":1,"66":1,"69":1,"79":1,"82":1,"85":1,"86":1,"96":1,"99":1,"100":1,"103":1,"113":1,"123":1,"126":2,"127":1,"128":1,"131":1,"136":3,"139":1,"142":1,"145":1,"146":2,"147":1,"148":4,"149":3,"150":1,"152":3,"153":2,"154":6,"155":2,"158":2,"162":1,"165":1,"166":2,"167":1,"170":1,"175":1}}],["+5000000",{"2":{"170":1}}],["+proj=natearth2",{"2":{"170":2}}],["+=",{"2":{"37":2,"40":11,"44":6,"45":17,"47":10,"50":1,"69":1,"86":1,"100":5,"126":1,"145":2,"160":4,"167":3}}],["+",{"2":{"1":1,"6":2,"13":1,"14":1,"34":4,"37":1,"40":20,"44":10,"45":15,"47":7,"50":1,"54":10,"66":3,"69":2,"86":2,"100":6,"126":6,"127":2,"145":3,"153":2,"160":3,"161":2,"162":2,"169":6,"170":1,"171":4}}],["yticklabelsvisible",{"2":{"170":1}}],["york",{"2":{"177":1}}],["yoffset",{"2":{"169":7,"171":2}}],["your",{"0":{"173":1},"2":{"18":1,"41":1,"127":1,"129":1,"149":1,"152":1,"172":1,"173":1,"178":2}}],["you",{"0":{"23":1},"2":{"1":1,"4":1,"5":2,"6":11,"9":1,"11":1,"17":1,"18":5,"23":1,"29":2,"34":1,"37":1,"40":8,"41":1,"44":1,"51":1,"53":1,"60":1,"61":1,"62":1,"129":1,"138":1,"144":1,"149":1,"151":1,"152":1,"153":1,"154":1,"164":1,"170":1,"172":2,"173":3,"176":2,"177":3,"178":4}}],["y=y",{"2":{"167":1}}],["yvec",{"2":{"127":4}}],["ybounds",{"2":{"127":4}}],["yhalf",{"2":{"127":3}}],["ylast",{"2":{"66":3}}],["yfirst",{"2":{"66":5}}],["y0",{"2":{"66":5}}],["yw",{"2":{"47":4}}],["ye",{"2":{"47":4}}],["yet",{"0":{"128":1},"2":{"31":1,"40":1,"50":1,"52":1,"54":1,"63":1,"69":1,"127":1,"128":1,"141":2,"177":1}}],["y2",{"2":{"44":2,"47":18,"66":7,"86":10,"100":5,"103":4,"127":5,"153":6,"167":2}}],["y1",{"2":{"44":2,"47":22,"66":7,"86":11,"100":6,"103":5,"127":5,"153":7,"167":2}}],["yind+1",{"2":{"127":1}}],["yind",{"2":{"127":2}}],["yinterior",{"2":{"44":2}}],["yield",{"2":{"54":1,"152":1}}],["yi+yi−1",{"2":{"6":1}}],["ycentroid",{"2":{"44":13}}],["yrange",{"2":{"39":3,"65":3}}],["yautolimits",{"2":{"39":2}}],["yp2",{"2":{"34":4}}],["ys",{"2":{"6":3,"127":30}}],["ymax",{"2":{"6":1,"46":2,"47":48}}],["ymin",{"2":{"6":1,"46":2,"47":49}}],["y",{"2":{"1":2,"4":1,"6":4,"13":9,"14":10,"34":8,"37":2,"39":8,"43":1,"44":10,"45":6,"46":1,"47":8,"52":6,"54":8,"65":2,"66":7,"69":3,"86":21,"100":16,"103":7,"126":10,"129":2,"136":1,"147":4,"148":1,"153":2,"154":2,"155":2,"162":1,"167":7,"169":8,"170":2,"171":2,"175":1}}],["75",{"2":{"65":2,"81":1,"88":1,"115":1}}],["78",{"2":{"39":1}}],["749907",{"2":{"174":1}}],["74",{"2":{"39":1}}],["72",{"2":{"39":1}}],["726711609794",{"2":{"15":1}}],["76",{"2":{"39":1}}],["76085",{"2":{"15":1}}],["768946",{"2":{"3":1,"6":3,"53":1,"54":1,"98":1,"99":1}}],["70440582002419",{"2":{"169":1}}],["704405820024185",{"2":{"169":3}}],["704377648755",{"2":{"15":2}}],["700",{"2":{"14":1}}],["700454",{"2":{"6":1,"157":1,"158":1}}],["701141",{"2":{"6":1,"157":1,"158":1}}],["70",{"2":{"6":20,"39":1,"157":20,"158":20,"169":20}}],["738281",{"2":{"3":1,"6":3,"53":1,"54":1,"98":1,"99":1}}],["7",{"2":{"1":5,"6":5,"100":1,"136":1,"151":4,"152":4,"154":4,"171":1}}],["65533525026046",{"2":{"169":1}}],["655335250260467",{"2":{"169":3}}],["659942",{"2":{"6":1,"157":1,"158":1}}],["6area",{"2":{"44":2}}],["66",{"2":{"39":1}}],["668869",{"2":{"6":1,"157":1,"158":1}}],["64744840486518",{"2":{"171":3}}],["64",{"2":{"39":1,"151":2,"152":2}}],["646209",{"2":{"6":1,"157":1,"158":1}}],["629",{"2":{"170":1}}],["62",{"2":{"39":1}}],["624923",{"2":{"6":1,"157":1,"158":1}}],["61366192682",{"2":{"15":1}}],["614624",{"2":{"6":1,"157":1,"158":1}}],["605000000000004",{"2":{"151":2}}],["60",{"2":{"39":1,"151":2}}],["60000",{"2":{"15":3}}],["609817",{"2":{"6":1,"157":1,"158":1}}],["603637",{"2":{"6":2,"157":2,"158":2}}],["68",{"2":{"39":1}}],["682601",{"2":{"6":1,"157":1,"158":1}}],["683975",{"2":{"6":1,"157":1,"158":1}}],["69159119078359",{"2":{"171":3}}],["694274",{"2":{"6":1,"157":1,"158":1}}],["697021",{"2":{"6":1,"157":1,"158":1}}],["639343",{"2":{"6":1,"157":1,"158":1}}],["6",{"2":{"1":12,"3":4,"6":23,"51":3,"62":3,"100":1,"103":4,"136":3,"154":9,"158":1,"171":2}}],["51695367760999",{"2":{"171":1}}],["516953677609987",{"2":{"171":2}}],["51030066635026",{"2":{"169":4}}],["5e6",{"2":{"170":2}}],["55715336218991",{"2":{"171":1}}],["557153362189904",{"2":{"171":2}}],["55",{"2":{"169":3}}],["55494217175954",{"2":{"169":4}}],["57",{"2":{"151":4,"152":4}}],["57725",{"2":{"15":2}}],["5x",{"2":{"136":1}}],["563198",{"2":{"54":1}}],["56",{"2":{"39":1}}],["54",{"2":{"39":1,"169":19}}],["50",{"2":{"39":1,"151":4,"152":4,"169":3}}],["500000",{"2":{"170":1}}],["50000",{"2":{"15":1}}],["500",{"2":{"14":1,"170":1}}],["5d",{"2":{"25":1,"27":1}}],["52",{"2":{"39":1,"174":1}}],["52521",{"2":{"15":1}}],["52709",{"2":{"15":2}}],["594711",{"2":{"6":1,"157":1,"158":1}}],["590591",{"2":{"6":1,"157":1,"158":1}}],["595397",{"2":{"6":1,"157":1,"158":1}}],["535",{"2":{"151":4}}],["5355",{"2":{"151":2}}],["53333",{"2":{"15":4}}],["53",{"2":{"6":10,"151":2,"167":10}}],["58",{"2":{"39":1}}],["58059",{"2":{"15":2}}],["587158",{"2":{"6":2,"157":2,"158":2}}],["58375366067548",{"2":{"6":2,"53":1,"54":1}}],["584961",{"2":{"3":1,"6":3,"53":1,"54":1,"98":1,"99":1}}],["5",{"2":{"1":29,"3":4,"4":8,"6":84,"13":1,"39":1,"49":5,"50":8,"51":16,"62":18,"65":8,"69":8,"100":1,"103":4,"127":1,"136":2,"151":1,"152":1,"154":27,"169":32,"170":25,"178":1}}],["4983491639274692e6",{"2":{"170":2}}],["4986507085647392e6",{"2":{"170":2}}],["497205585568957e6",{"2":{"170":2}}],["4976022389592e6",{"2":{"170":2}}],["4957639801366436e6",{"2":{"170":2}}],["4940253560034204e6",{"2":{"170":2}}],["4946113281484335e6",{"2":{"170":2}}],["491990928929295e6",{"2":{"170":2}}],["4904357734399722e6",{"2":{"170":2}}],["4926709788709967e6",{"2":{"170":2}}],["4962554647802354e6",{"2":{"170":2}}],["499984780817334e6",{"2":{"170":2}}],["4997392479570867e6",{"2":{"170":2}}],["4991939151049731e6",{"2":{"170":2}}],["4994001399837343e6",{"2":{"170":2}}],["4998500087497458e6",{"2":{"170":2}}],["49",{"2":{"127":1}}],["43541888381864",{"2":{"171":3}}],["4326",{"2":{"170":2,"171":3}}],["43787",{"2":{"15":1}}],["439295815226",{"2":{"15":1}}],["434306",{"2":{"6":1,"157":1,"158":1}}],["4896621210021754e6",{"2":{"170":2}}],["489271",{"2":{"6":4,"167":4}}],["4870405593989636e6",{"2":{"170":2}}],["4879072738504685e6",{"2":{"170":2}}],["484003",{"2":{"126":4}}],["482551",{"2":{"126":4}}],["48268",{"2":{"15":1}}],["48",{"2":{"39":1}}],["48001",{"2":{"15":1}}],["45",{"2":{"39":2,"126":12,"169":2}}],["450",{"2":{"13":1}}],["458369",{"2":{"6":2,"157":2,"158":2}}],["42004014766201",{"2":{"169":1}}],["420040147662014",{"2":{"169":3}}],["4219350464667047e",{"2":{"169":4}}],["42",{"2":{"13":1,"14":1,"39":3}}],["426283",{"2":{"6":1,"157":1,"158":1}}],["400",{"2":{"39":3}}],["40000",{"2":{"15":1}}],["40",{"2":{"14":1,"39":3}}],["406224",{"2":{"6":1,"157":1,"158":1}}],["404504",{"2":{"6":1,"157":1,"158":1}}],["41544701408748197",{"2":{"169":1}}],["41",{"2":{"39":1,"171":20}}],["41878",{"2":{"15":1}}],["414248",{"2":{"6":1,"157":1,"158":1}}],["419406",{"2":{"6":1,"157":1,"158":1}}],["4493927459900552",{"2":{"169":1}}],["44121252392",{"2":{"15":1}}],["44",{"2":{"14":1,"39":2}}],["442901",{"2":{"6":1,"157":1,"158":1}}],["446339",{"2":{"6":1,"157":1,"158":1}}],["477985",{"2":{"126":4}}],["47",{"2":{"39":3}}],["473835",{"2":{"6":1,"157":1,"158":1}}],["472117",{"2":{"6":2,"157":2,"158":2}}],["46525251631344455",{"2":{"169":1}}],["465816",{"2":{"6":1,"157":1,"158":1}}],["46",{"2":{"39":3}}],["468107",{"2":{"6":1,"157":1,"158":1}}],["464547",{"2":{"6":6,"167":6}}],["4",{"2":{"1":11,"3":4,"6":15,"9":2,"13":2,"14":1,"33":1,"47":1,"82":1,"85":1,"89":1,"100":2,"116":1,"126":1,"136":3,"151":1,"154":8,"160":1,"170":20,"173":2,"174":1}}],["358421",{"2":{"174":1}}],["3585",{"2":{"151":1}}],["35",{"2":{"39":3}}],["354492",{"2":{"3":1,"6":3,"53":1,"54":1,"98":1,"99":1}}],["38042741557976",{"2":{"169":1}}],["380427415579764",{"2":{"169":3}}],["38",{"2":{"39":3}}],["3655999675063154",{"2":{"169":1}}],["36",{"2":{"39":2}}],["360",{"2":{"34":1}}],["36022",{"2":{"15":1}}],["327284472232776",{"2":{"171":3}}],["32610",{"2":{"170":3}}],["32",{"2":{"39":3}}],["377956",{"2":{"174":1}}],["37",{"2":{"39":5}}],["3497142366876638",{"2":{"169":1}}],["34",{"2":{"39":3}}],["31571636123306385",{"2":{"169":1}}],["31",{"2":{"39":2}}],["30151010318639",{"2":{"169":4}}],["30527612515520186",{"2":{"169":4}}],["300",{"2":{"65":1}}],["30",{"2":{"14":2,"39":3,"169":2}}],["3376428491230612",{"2":{"169":4}}],["3390",{"2":{"100":1}}],["33333333333",{"2":{"15":1}}],["333333333336",{"2":{"15":3}}],["33",{"2":{"6":20,"157":20,"158":20}}],["3d",{"2":{"4":1,"6":1,"40":2,"69":1,"136":1,"150":1}}],["3",{"2":{"1":13,"3":4,"5":1,"6":29,"14":2,"40":13,"43":6,"45":1,"51":6,"62":5,"68":1,"82":1,"85":1,"89":1,"100":2,"102":1,"116":1,"127":7,"136":3,"144":16,"151":4,"154":11,"158":3,"160":2,"162":1,"170":1,"171":1,"176":1}}],["39945867303846",{"2":{"171":3}}],["3995734698458635",{"2":{"169":1}}],["399918",{"2":{"6":2,"157":2,"158":2}}],["394759",{"2":{"6":1,"157":1,"158":1}}],["392466",{"2":{"6":1,"157":1,"158":1}}],["395332",{"2":{"6":1,"157":1,"158":1}}],["39",{"0":{"30":1},"2":{"0":1,"3":1,"4":5,"6":21,"7":1,"9":2,"17":2,"18":1,"19":1,"23":1,"29":1,"34":1,"36":1,"37":1,"38":1,"39":3,"40":2,"43":6,"44":3,"45":28,"47":1,"49":1,"50":1,"52":1,"53":4,"54":1,"60":2,"63":2,"66":4,"69":7,"71":1,"84":2,"91":2,"100":19,"103":1,"105":2,"108":2,"127":3,"129":2,"131":3,"132":1,"136":5,"142":6,"143":1,"151":6,"152":1,"156":1,"158":2,"164":2,"165":3,"166":6,"168":1,"169":6,"170":6,"171":4,"172":4,"173":5,"175":1,"177":1,"178":2}}],["2upvc",{"2":{"170":1}}],["2pi",{"2":{"169":1,"170":1,"171":1}}],["2nd",{"2":{"54":6}}],["2335447787454",{"2":{"171":1}}],["233544778745394",{"2":{"171":2}}],["23",{"2":{"39":3,"100":1}}],["23699059147",{"2":{"15":1}}],["28",{"2":{"39":2}}],["28083",{"2":{"15":2}}],["2658011835867806",{"2":{"169":1}}],["26745668457025",{"2":{"169":1}}],["267456684570245",{"2":{"169":3}}],["26",{"2":{"39":5,"100":2}}],["24989584635339165",{"2":{"169":1}}],["24279488312757858",{"2":{"169":4}}],["24",{"2":{"39":7,"100":1,"171":9}}],["274364",{"2":{"51":1,"53":1,"62":1}}],["274363",{"2":{"51":1,"53":1,"62":1}}],["27",{"2":{"39":2}}],["275543",{"2":{"6":6,"167":6}}],["2d",{"2":{"25":1,"27":1,"150":1}}],["2^",{"2":{"14":1}}],["2158594260436434",{"2":{"169":1}}],["215118",{"2":{"6":4,"167":4}}],["21664550952386064",{"2":{"169":4}}],["21",{"2":{"39":4,"100":2,"171":40}}],["21427",{"2":{"11":5}}],["295828190107045",{"2":{"171":1}}],["29582819010705",{"2":{"171":2}}],["299820032397223",{"2":{"169":1}}],["29",{"2":{"39":3,"174":1}}],["29th",{"0":{"8":1},"1":{"9":1,"10":1}}],["298",{"2":{"6":2,"152":2}}],["20340",{"2":{"173":1}}],["20682326747054",{"2":{"171":1}}],["206823267470536",{"2":{"171":2}}],["20093817218219",{"2":{"169":1}}],["200938172182195",{"2":{"169":3}}],["2018",{"2":{"100":1}}],["2017",{"2":{"6":1,"40":1}}],["20",{"2":{"39":3,"100":2,"169":60,"171":1}}],["2024",{"0":{"7":1,"8":1},"1":{"9":1,"10":1}}],["20th",{"0":{"7":1}}],["25",{"2":{"39":3,"81":1,"100":1,"115":1,"171":12}}],["258",{"2":{"11":1}}],["25px",{"2":{"6":2}}],["257223563`",{"2":{"152":1}}],["257223563",{"2":{"6":2,"152":1}}],["22",{"2":{"39":3,"100":1}}],["22168",{"2":{"3":1,"6":3,"53":1,"54":1,"98":1,"99":1}}],["224758",{"2":{"3":1,"6":3,"53":1,"54":1,"98":1,"99":1}}],["2",{"2":{"1":19,"3":9,"5":1,"6":50,"13":1,"14":1,"15":3,"25":2,"27":2,"34":3,"37":1,"39":6,"40":32,"43":2,"44":4,"45":10,"46":6,"47":7,"49":1,"50":2,"54":2,"58":1,"59":1,"60":3,"61":1,"62":1,"65":1,"66":3,"69":4,"82":2,"85":2,"86":2,"88":2,"89":3,"100":11,"116":2,"126":2,"127":23,"136":5,"145":1,"153":1,"154":18,"158":5,"160":7,"161":7,"162":5,"167":11,"169":7,"170":6,"171":10,"172":1,"174":1}}],["1st",{"2":{"54":6}}],["198232937815632",{"2":{"171":1}}],["19823293781563178",{"2":{"171":2}}],["1999466709331708",{"2":{"169":1}}],["1998",{"2":{"51":1,"53":1,"62":1}}],["19",{"2":{"39":2,"100":2}}],["11591614996189725",{"2":{"169":1}}],["11966707868197",{"2":{"169":1}}],["119667078681967",{"2":{"169":3}}],["110m",{"2":{"170":2}}],["110",{"2":{"59":1,"170":1}}],["11",{"2":{"15":2,"39":2,"100":1}}],["1145",{"2":{"51":1,"53":1,"62":1}}],["114",{"2":{"7":1}}],["16589608273778408",{"2":{"169":1}}],["165644",{"2":{"126":2}}],["16692537029320365",{"2":{"169":4}}],["166644",{"2":{"126":2}}],["163434",{"2":{"126":2}}],["169356",{"2":{"126":2}}],["164434",{"2":{"126":2}}],["16111",{"2":{"15":1}}],["16",{"2":{"13":1,"14":1,"39":2,"100":2}}],["180",{"2":{"34":1,"126":1}}],["18593721105",{"2":{"15":1}}],["18",{"2":{"13":1,"14":1,"39":3,"100":2}}],["1em",{"2":{"6":2}}],["1px",{"2":{"6":2}}],["13309630561615",{"2":{"171":3}}],["13401805979",{"2":{"15":2}}],["13",{"2":{"6":3,"39":1,"51":1,"62":2,"100":1}}],["10n",{"2":{"170":1}}],["10832215707812454",{"2":{"169":4}}],["10^9",{"2":{"13":1}}],["1000000",{"2":{"170":1}}],["1000",{"2":{"13":2,"151":2,"170":1,"176":2}}],["100",{"2":{"6":2,"14":3,"58":1,"60":1,"127":2,"174":1}}],["10",{"2":{"6":14,"11":1,"36":1,"39":5,"49":4,"50":10,"51":2,"53":1,"62":2,"68":2,"100":3,"102":2,"152":1,"158":4,"169":1}}],["14182952335953",{"2":{"171":1}}],["14182952335952814",{"2":{"171":2}}],["14404531208901e",{"2":{"171":2}}],["1499775010124783",{"2":{"169":1}}],["1464721641710074",{"2":{"169":4}}],["14",{"2":{"3":1,"6":5,"39":2,"53":2,"54":2,"98":1,"99":1,"100":1,"151":2,"152":2}}],["15488729606723",{"2":{"171":3}}],["15",{"2":{"3":1,"6":4,"39":1,"49":1,"50":1,"53":1,"54":1,"98":1,"99":1,"100":1}}],["17893116483784577",{"2":{"171":2}}],["17289902010158",{"2":{"169":1}}],["172899020101585",{"2":{"169":3}}],["170356",{"2":{"126":2}}],["17",{"2":{"3":1,"6":3,"39":3,"53":1,"54":1,"98":1,"99":1,"100":2}}],["125",{"2":{"6":2,"53":1,"54":1}}],["127",{"2":{"3":1,"6":3,"53":1,"54":1,"98":1,"99":1,"170":1}}],["123",{"2":{"3":1,"6":3,"53":1,"54":1,"98":1,"99":1}}],["12636633117296836",{"2":{"171":2}}],["126",{"2":{"3":1,"6":3,"53":1,"54":1,"98":1,"99":1}}],["12",{"2":{"3":1,"6":3,"39":2,"53":1,"54":1,"98":1,"99":1,"100":1,"177":1}}],["124",{"2":{"3":1,"6":3,"53":1,"54":1,"98":1,"99":1}}],["1",{"2":{"1":8,"3":38,"6":63,"13":1,"14":4,"15":1,"33":4,"34":15,"36":7,"38":2,"39":11,"40":16,"43":4,"44":7,"45":72,"46":9,"47":15,"49":1,"50":10,"52":3,"54":9,"60":6,"62":4,"63":11,"65":7,"66":6,"69":16,"71":2,"72":2,"81":2,"82":6,"84":2,"85":8,"86":12,"88":2,"89":5,"100":38,"103":6,"105":4,"106":5,"108":1,"115":2,"116":6,"126":16,"127":25,"136":10,"138":12,"139":2,"145":9,"152":1,"153":4,"154":6,"158":8,"160":15,"161":3,"162":15,"167":9,"169":8,"170":44,"171":12,"172":1,"176":8,"177":3}}],["bx",{"2":{"126":2}}],["b2y",{"2":{"54":4}}],["b2x",{"2":{"54":4}}],["b2",{"2":{"54":47,"66":3,"103":6}}],["b``",{"2":{"52":1}}],["b`",{"2":{"52":3,"54":4,"63":4}}],["bigger",{"2":{"45":1}}],["bit",{"2":{"25":1,"27":1,"162":8,"169":2}}],["b1y",{"2":{"54":7}}],["b1x",{"2":{"54":7}}],["b1",{"2":{"45":8,"54":63,"103":6}}],["building",{"2":{"169":1}}],["build",{"2":{"45":13,"50":1,"51":1,"53":1,"62":1,"131":3,"132":1,"151":2,"161":1,"162":1}}],["built",{"2":{"17":1,"20":1}}],["buffers",{"2":{"127":1}}],["buffered",{"2":{"41":2}}],["buffering",{"2":{"40":1,"41":1}}],["buffer",{"0":{"41":1},"2":{"31":2,"41":5,"44":2,"45":1,"128":1}}],["but",{"2":{"1":2,"3":5,"4":3,"6":15,"18":1,"22":1,"25":1,"27":1,"34":1,"36":1,"37":1,"47":1,"54":2,"60":2,"61":2,"63":2,"69":4,"71":2,"100":1,"102":1,"103":5,"105":1,"106":1,"109":2,"110":1,"115":1,"126":1,"127":1,"128":1,"131":1,"134":1,"136":16,"147":1,"148":1,"153":1,"158":1,"164":1,"166":2,"170":2,"171":2,"173":1,"175":1,"176":1,"177":2}}],["b>",{"2":{"6":4}}],["bloat",{"2":{"171":1}}],["block",{"2":{"169":1}}],["blob",{"2":{"6":2,"158":1}}],["blue",{"2":{"14":1,"49":1,"68":2,"81":2,"88":2,"102":2,"115":2,"176":2}}],["black",{"2":{"6":2,"49":1,"170":1}}],["breaks",{"2":{"145":1}}],["break",{"2":{"45":3,"47":1,"52":2,"69":4,"100":11,"103":1,"127":6,"145":2}}],["brevity",{"2":{"40":1}}],["br>",{"2":{"6":2}}],["broadcasting",{"2":{"6":1,"40":1}}],["broken",{"2":{"3":1,"6":1,"86":1}}],["balancing",{"2":{"136":2}}],["barrier",{"2":{"136":1}}],["barycentric",{"0":{"5":1,"38":1,"40":1},"1":{"39":1,"40":1},"2":{"0":6,"5":10,"6":17,"9":1,"31":1,"38":9,"39":4,"40":52}}],["basicsgeoms",{"2":{"136":1}}],["basic",{"2":{"127":1}}],["base",{"2":{"31":4,"40":15,"41":1,"45":2,"127":6,"136":5,"149":1,"152":2,"153":1,"164":1,"166":3}}],["based",{"2":{"4":2,"6":3,"19":1,"34":2,"37":2,"39":2,"44":1,"47":1,"66":2,"69":1,"72":1,"89":1,"100":2,"103":1,"106":1,"116":1,"164":1,"173":1,"175":1,"176":1}}],["backs",{"2":{"50":4}}],["backwards",{"2":{"45":1,"52":1,"54":1,"63":1}}],["backing",{"2":{"45":1}}],["backend",{"2":{"41":2,"166":1}}],["back",{"2":{"6":1,"18":1,"22":1,"23":1,"50":4,"166":1}}],["b",{"2":{"3":2,"4":7,"6":13,"45":206,"47":9,"51":26,"52":18,"53":26,"54":77,"55":3,"62":27,"63":39,"69":29,"100":2,"103":22,"172":1}}],["box",{"2":{"46":2,"47":3,"176":1}}],["bounce",{"2":{"45":8,"51":1,"52":1,"53":1,"54":1,"62":1,"63":1}}],["bouncings",{"2":{"45":1}}],["bouncing",{"2":{"45":13,"52":3,"54":4,"63":4}}],["bound",{"2":{"55":1}}],["bounding",{"2":{"45":1,"46":2,"47":3}}],["boundscheck",{"2":{"40":14}}],["bounds",{"2":{"6":1,"127":4}}],["boundaries",{"2":{"3":2,"6":2,"84":2,"88":1,"89":1,"98":1,"99":1,"100":2,"127":1}}],["boundary",{"2":{"3":7,"6":7,"65":1,"71":1,"72":3,"75":4,"81":1,"82":1,"85":2,"86":9,"89":2,"91":1,"92":6,"93":3,"100":18,"105":2,"106":4,"108":3,"109":5,"110":3,"111":3,"115":1,"116":3}}],["bold",{"2":{"41":1,"149":1,"152":1}}],["border",{"2":{"6":8}}],["both",{"2":{"3":5,"6":6,"45":2,"54":4,"60":2,"62":1,"63":1,"65":1,"69":3,"82":1,"86":4,"89":1,"100":2,"103":1,"110":1,"116":1,"151":1,"153":1}}],["booltype",{"2":{"136":3,"153":1,"165":3}}],["booleans",{"2":{"45":1,"100":2}}],["boolean",{"2":{"24":2,"45":1,"52":1,"54":1,"63":1,"136":1,"165":1,"175":1}}],["boolsastypes",{"0":{"24":1,"165":1},"2":{"153":2,"165":6}}],["bools",{"2":{"10":1}}],["bool",{"2":{"3":17,"4":14,"6":40,"45":3,"69":17,"72":1,"82":1,"85":2,"86":13,"89":1,"99":1,"100":2,"103":10,"106":2,"116":1,"126":7,"127":6,"153":2,"165":2,"167":5}}],["bypred",{"2":{"178":1}}],["by",{"0":{"76":1,"77":1,"120":1},"2":{"1":3,"3":2,"4":8,"6":31,"7":1,"17":1,"18":2,"19":1,"22":1,"24":1,"25":1,"26":1,"27":1,"33":1,"34":6,"36":1,"37":1,"40":4,"41":1,"43":5,"44":4,"45":14,"46":1,"47":6,"49":1,"50":6,"51":1,"53":1,"54":5,"61":2,"62":4,"63":3,"66":5,"69":8,"71":1,"72":1,"76":2,"77":2,"78":1,"79":2,"82":1,"84":1,"96":2,"100":10,"126":2,"127":4,"131":2,"136":7,"142":2,"143":1,"145":3,"147":1,"148":2,"149":1,"150":1,"152":3,"153":1,"154":1,"156":1,"158":1,"159":1,"160":3,"161":1,"169":1,"170":1,"171":1,"173":1,"175":2,"176":1,"177":2,"178":1}}],["berlin",{"2":{"177":1}}],["bearing",{"2":{"126":4}}],["beauty",{"2":{"9":1}}],["better",{"2":{"86":1,"136":2,"158":1}}],["between",{"2":{"4":4,"6":18,"23":1,"34":2,"40":13,"45":1,"47":18,"51":1,"52":4,"53":1,"54":11,"62":2,"63":4,"66":8,"69":1,"100":4,"103":4,"127":1,"152":3,"153":1,"159":2,"160":2,"161":1,"170":1,"175":2,"176":1}}],["been",{"2":{"52":1,"127":1,"129":2,"165":1}}],["because",{"2":{"45":1,"61":1,"129":1,"163":1}}],["become",{"2":{"22":1}}],["being",{"2":{"34":1,"54":1,"100":1,"103":1,"143":1}}],["behind",{"2":{"25":1,"26":1,"27":1,"39":1,"129":1}}],["behaviour",{"2":{"6":1,"18":1,"23":1,"158":1}}],["best",{"2":{"19":1,"136":2,"158":1}}],["beware",{"2":{"18":1}}],["benchmarking",{"2":{"152":1,"158":1}}],["benchmarkgroup",{"2":{"152":2,"158":3}}],["benchmark",{"0":{"152":1,"158":1},"2":{"152":1,"158":1}}],["benchmarktools",{"2":{"13":1,"152":1,"158":1}}],["benchmarks",{"2":{"9":2}}],["beginning",{"2":{"47":1,"169":1}}],["begin+1",{"2":{"40":5}}],["begin",{"2":{"9":1,"40":7,"136":2,"159":1,"173":1}}],["before",{"2":{"6":4,"40":1,"51":1,"53":1,"54":1,"62":1,"158":1,"170":1}}],["below",{"2":{"6":2,"17":1,"41":1,"141":1,"160":1,"161":1,"162":1,"173":1}}],["be",{"2":{"1":7,"3":3,"4":11,"5":4,"6":66,"7":1,"9":1,"13":2,"20":3,"23":2,"24":1,"25":3,"26":1,"27":3,"34":8,"37":7,"38":2,"39":1,"40":10,"41":2,"43":1,"44":3,"45":14,"46":1,"47":2,"50":1,"51":7,"52":4,"53":7,"54":12,"61":6,"62":6,"63":5,"65":2,"66":4,"69":15,"72":6,"84":2,"85":1,"89":6,"100":21,"103":2,"106":6,"116":6,"118":1,"119":1,"120":1,"121":1,"126":2,"127":1,"131":2,"134":2,"135":2,"136":12,"138":1,"139":1,"140":1,"141":3,"142":4,"143":2,"145":2,"146":1,"148":3,"149":1,"150":1,"152":8,"153":2,"154":1,"158":10,"160":1,"162":3,"165":1,"166":2,"169":2,"171":1,"175":4}}],["human",{"2":{"173":1}}],["hull`",{"2":{"61":2}}],["hulls",{"2":{"6":1,"56":1,"61":1}}],["hull",{"0":{"56":1,"58":1,"59":1},"1":{"57":1,"58":1,"59":1,"60":1,"61":1},"2":{"0":1,"6":8,"31":2,"56":2,"58":4,"59":1,"60":10,"61":15}}],["hypot",{"2":{"153":1}}],["h2",{"2":{"100":6}}],["h1",{"2":{"100":11}}],["hm",{"2":{"39":2}}],["h",{"2":{"34":2,"45":2,"63":8}}],["href=",{"2":{"6":2}}],["https",{"2":{"6":2,"51":1,"53":1,"54":1,"61":1,"62":1,"100":2,"160":1}}],["high",{"2":{"173":1}}],["highest",{"2":{"171":1}}],["higher",{"2":{"6":1,"61":1}}],["hit",{"2":{"45":1,"136":5}}],["hits",{"2":{"18":1}}],["hidedecorations",{"2":{"39":2}}],["hinter",{"2":{"31":3,"41":1,"149":1,"152":1}}],["hint",{"2":{"31":3,"41":1,"152":1}}],["hinge=2",{"2":{"53":1}}],["hinge`",{"2":{"53":1}}],["hinge",{"2":{"6":1,"45":1,"54":13,"100":15}}],["hist",{"2":{"13":1}}],["histogram",{"2":{"13":1}}],["hcat",{"2":{"6":1}}],["heavily",{"2":{"136":1}}],["heatmap",{"2":{"13":5,"14":6,"39":2,"65":2,"127":1}}],["help",{"2":{"165":1}}],["helpers",{"0":{"45":1},"2":{"86":1,"103":1}}],["helper",{"0":{"52":1,"54":1,"63":1},"2":{"44":1,"45":1,"50":1}}],["helps",{"2":{"30":1}}],["held",{"2":{"1":1,"6":1,"136":1}}],["here",{"2":{"6":2,"9":1,"13":1,"14":1,"20":1,"40":1,"54":1,"61":2,"86":1,"127":2,"136":5,"138":1,"152":1,"170":2,"175":2,"176":3}}],["hours",{"2":{"177":1}}],["hood",{"2":{"173":1}}],["hook",{"2":{"6":1,"158":1}}],["home",{"2":{"170":1}}],["horizontal",{"2":{"47":1,"54":1,"127":1,"158":1}}],["hormann",{"0":{"52":1,"54":1,"63":1},"2":{"6":2,"40":2,"45":3,"50":2,"51":1,"53":1,"62":1}}],["how",{"0":{"26":1},"2":{"6":2,"26":2,"36":1,"40":1,"45":1,"54":1,"69":1,"127":2,"131":1,"136":1,"147":1,"158":1,"170":1,"173":1,"175":2,"176":2,"177":1,"178":1}}],["however",{"2":{"3":1,"6":2,"34":1,"40":1,"44":1,"45":1,"54":1,"60":1,"65":1,"69":1,"81":1,"85":1,"143":1}}],["hole",{"2":{"34":1,"37":3,"39":2,"40":9,"44":4,"45":60,"47":3,"51":6,"53":2,"63":15,"66":3,"75":1,"76":1,"77":1,"100":33,"127":5,"139":2,"169":1}}],["holes=",{"2":{"45":1}}],["holes",{"2":{"4":3,"5":1,"6":4,"9":2,"34":2,"36":1,"40":2,"44":1,"45":19,"50":4,"51":2,"53":2,"62":6,"63":29,"66":3,"69":3,"94":1,"100":11,"118":1,"127":17,"139":2,"169":4}}],["holding",{"2":{"6":1,"127":1,"136":2}}],["holds",{"2":{"6":1,"45":1,"156":1,"164":2}}],["hold",{"2":{"6":1,"127":1,"158":1,"165":1,"173":1}}],["halign",{"2":{"158":1}}],["half",{"2":{"46":2}}],["hail",{"2":{"139":1}}],["handling",{"0":{"149":1},"2":{"129":1}}],["handler",{"2":{"41":1,"149":1}}],["handle",{"2":{"31":1,"126":1,"134":2,"136":1,"170":1}}],["handled",{"2":{"18":1}}],["hao",{"2":{"100":1}}],["had",{"2":{"51":1,"53":1,"69":1,"151":1,"165":1}}],["happens",{"2":{"45":1}}],["happen",{"2":{"24":1}}],["have",{"2":{"3":3,"4":9,"6":17,"19":1,"23":1,"34":2,"37":3,"40":6,"41":1,"45":4,"54":1,"61":2,"65":1,"66":2,"69":10,"100":5,"102":1,"103":3,"105":1,"106":1,"127":1,"128":1,"129":2,"131":2,"135":1,"136":4,"158":1,"160":1,"165":1,"166":1,"169":1,"170":1,"175":1,"176":1,"177":3}}],["haskey",{"2":{"166":1}}],["hash",{"2":{"127":1}}],["hasn",{"2":{"127":1}}],["hassle",{"2":{"1":1,"6":1,"154":1}}],["has",{"2":{"1":4,"6":4,"33":1,"36":2,"40":2,"45":2,"52":2,"54":1,"63":1,"65":1,"66":1,"69":11,"108":1,"126":1,"136":4,"137":1,"151":2,"162":1,"170":1}}],["xticklabelsvisible",{"2":{"170":1}}],["xticklabelrotation",{"2":{"13":2}}],["xoffset",{"2":{"169":4,"171":1}}],["x=x",{"2":{"167":1}}],["x`",{"2":{"136":1}}],["xvec",{"2":{"127":4}}],["xbounds",{"2":{"127":4}}],["xhalf",{"2":{"127":3}}],["xlast",{"2":{"66":3}}],["xfirst",{"2":{"66":5}}],["x0",{"2":{"66":5}}],["xn",{"2":{"47":4}}],["xind+1",{"2":{"127":1}}],["xind",{"2":{"127":2}}],["xinterior",{"2":{"44":2}}],["xi−xi−1",{"2":{"6":1}}],["xcentroid",{"2":{"44":13}}],["xrange",{"2":{"39":3,"65":2}}],["xautolimits",{"2":{"39":2}}],["xp2",{"2":{"34":5}}],["x2",{"2":{"6":3,"40":4,"44":2,"47":18,"66":8,"86":10,"100":5,"103":4,"127":5,"153":6,"167":2}}],["x26",{"2":{"6":4,"34":2,"37":6,"40":1,"41":4,"45":58,"47":36,"51":4,"52":4,"54":24,"63":2,"66":3,"69":14,"78":2,"79":2,"86":48,"95":2,"96":2,"100":170,"103":22,"108":2,"112":2,"113":2,"122":2,"123":2,"126":4,"127":12,"141":2,"145":6,"149":2,"152":2,"160":10,"161":2,"167":4,"175":1}}],["x1",{"2":{"6":4,"40":3,"44":2,"47":22,"66":8,"86":11,"100":6,"103":5,"127":5,"153":7,"167":2}}],["xs",{"2":{"6":3,"47":4,"127":30,"167":4}}],["xmax",{"2":{"6":1,"46":2,"47":48}}],["xmin",{"2":{"6":1,"46":2,"47":49}}],["x3c",{"2":{"5":1,"6":36,"31":1,"34":4,"37":2,"40":66,"45":17,"47":11,"50":3,"51":1,"53":1,"54":6,"62":1,"65":1,"66":13,"69":2,"86":33,"100":13,"103":10,"126":1,"127":4,"131":2,"136":20,"139":2,"142":3,"145":5,"152":2,"159":2,"160":6,"161":3,"162":9,"164":4,"165":2,"178":1}}],["xy`",{"2":{"148":1}}],["xy",{"2":{"1":4,"40":1,"148":3}}],["x",{"2":{"1":4,"4":1,"6":6,"7":1,"9":5,"11":6,"13":11,"14":10,"15":4,"34":9,"37":2,"39":8,"43":1,"44":10,"45":21,"46":1,"47":8,"50":6,"52":9,"54":18,"63":9,"65":2,"66":7,"69":3,"86":21,"100":16,"103":7,"126":11,"127":2,"129":2,"136":17,"141":2,"146":2,"147":4,"148":1,"153":2,"154":2,"155":2,"158":2,"160":2,"162":1,"165":4,"167":33,"169":6,"170":2,"171":2,"175":1,"177":2}}],["=>",{"2":{"136":2}}],["=float64",{"2":{"44":3,"53":1,"62":1}}],["=false",{"2":{"34":1}}],["===",{"2":{"86":8,"126":4}}],["==",{"2":{"9":1,"19":1,"34":4,"37":2,"40":9,"41":2,"44":1,"45":34,"47":30,"52":1,"54":20,"59":1,"62":2,"63":1,"65":1,"69":16,"100":44,"103":2,"126":3,"127":18,"136":1,"139":1,"141":1,"145":1,"149":1,"152":2,"158":1,"162":3}}],["=",{"2":{"1":5,"3":17,"4":7,"5":2,"6":62,"11":1,"13":19,"14":33,"15":18,"31":4,"33":4,"34":56,"36":6,"37":25,"39":35,"40":110,"41":3,"43":6,"44":36,"45":324,"46":6,"47":96,"49":7,"50":29,"51":21,"52":30,"53":18,"54":143,"58":6,"59":4,"60":14,"61":4,"62":21,"63":78,"65":15,"66":52,"68":7,"69":40,"71":4,"72":23,"73":3,"74":7,"75":14,"76":14,"77":4,"78":2,"79":2,"81":7,"82":3,"84":5,"85":3,"86":57,"88":7,"89":18,"90":3,"91":11,"92":17,"93":9,"94":3,"95":2,"96":2,"98":3,"99":3,"100":189,"102":7,"103":40,"105":3,"106":22,"107":3,"108":9,"109":14,"110":10,"111":6,"112":2,"113":2,"115":7,"116":22,"117":3,"118":11,"119":14,"120":14,"121":4,"122":2,"123":2,"126":32,"127":106,"129":1,"133":4,"136":93,"138":2,"139":4,"141":9,"144":3,"145":30,"146":1,"149":2,"151":16,"152":21,"153":18,"154":2,"155":1,"156":2,"157":5,"158":60,"159":11,"160":49,"161":7,"162":43,"164":6,"165":2,"166":3,"167":44,"169":45,"170":19,"171":13,"172":3,"173":4,"174":7,"176":12,"177":6,"178":2}}],["utm",{"2":{"170":1}}],["utility",{"0":{"167":1},"2":{"40":1,"136":2}}],["utils",{"0":{"162":1},"2":{"31":1}}],["u2",{"2":{"100":4}}],["u1",{"2":{"100":4}}],["update",{"2":{"45":6,"127":10}}],["updated",{"2":{"45":6,"136":3}}],["updates",{"2":{"40":1}}],["up",{"2":{"45":2,"54":1,"100":1,"110":1,"134":1,"144":1,"160":2,"169":2}}],["upper",{"2":{"6":1,"127":1,"176":1}}],["uv",{"2":{"40":1}}],["u>",{"2":{"6":2}}],["u>geometryops",{"2":{"6":2}}],["usage",{"2":{"177":1}}],["usa",{"0":{"59":1},"2":{"59":4,"158":15,"177":3}}],["us",{"2":{"37":1,"61":1,"170":1,"177":1}}],["usually",{"2":{"6":1,"26":2,"56":1,"131":1,"136":1,"173":1}}],["usual",{"2":{"6":1,"139":1,"142":1}}],["usecases",{"2":{"25":1,"27":1}}],["uses",{"2":{"6":2,"56":1,"61":1,"100":1,"148":1,"152":1,"158":1,"173":1}}],["users",{"2":{"31":1,"129":1,"143":1}}],["user",{"2":{"6":12,"23":1,"44":1,"51":3,"53":3,"62":3,"159":1,"160":1,"161":1,"175":1}}],["useful",{"2":{"6":10,"40":1,"127":1,"150":1,"153":1,"158":2,"166":1}}],["used",{"2":{"1":1,"5":1,"6":8,"34":1,"37":1,"38":1,"40":1,"44":2,"45":7,"47":1,"50":1,"54":1,"65":1,"66":1,"69":1,"103":1,"127":2,"131":1,"136":3,"137":1,"153":1,"158":1,"160":2,"163":2,"164":1,"170":1,"173":1,"175":2,"176":1}}],["use",{"2":{"1":2,"4":1,"5":1,"6":10,"11":1,"20":1,"23":1,"26":1,"40":1,"45":1,"61":2,"63":1,"86":2,"103":1,"127":1,"128":1,"133":1,"136":7,"139":1,"147":1,"151":1,"153":1,"158":1,"160":2,"166":3,"169":1,"173":1,"175":2,"178":2}}],["using",{"0":{"170":1},"2":{"1":4,"4":1,"5":3,"6":12,"11":4,"13":4,"14":1,"15":1,"31":6,"33":1,"34":1,"36":2,"37":2,"39":4,"40":7,"41":3,"43":2,"44":1,"45":5,"46":2,"47":1,"49":2,"50":1,"52":3,"54":4,"55":1,"58":1,"59":2,"60":1,"61":2,"63":3,"65":2,"66":2,"68":2,"69":1,"71":2,"72":1,"79":1,"81":2,"82":1,"84":2,"85":1,"86":1,"88":2,"89":1,"96":1,"98":2,"99":1,"100":1,"102":2,"103":1,"105":2,"106":1,"113":1,"115":2,"116":1,"123":1,"126":1,"127":5,"128":1,"129":2,"134":1,"136":4,"139":1,"142":1,"145":1,"146":2,"147":1,"148":1,"149":3,"151":1,"152":5,"153":1,"154":4,"155":2,"158":3,"160":1,"162":1,"166":2,"167":1,"168":4,"169":1,"171":1,"172":2,"174":1,"175":1,"176":4,"177":2}}],["until",{"2":{"127":3,"134":1,"160":1,"166":1}}],["unprocessed",{"2":{"45":1}}],["unknown",{"2":{"45":4,"47":15}}],["unknown=3",{"2":{"45":1}}],["unmatched",{"2":{"45":9,"47":26}}],["understand",{"2":{"163":1}}],["under",{"2":{"37":2,"173":1}}],["undergrad",{"2":{"9":1}}],["undef",{"2":{"34":2,"45":1,"159":1,"160":1,"162":2,"167":2}}],["unless",{"2":{"22":1,"45":1,"52":2,"54":2,"63":2}}],["unlike",{"2":{"18":1,"163":1}}],["unstable",{"2":{"13":1,"136":1,"165":1}}],["unneeded",{"2":{"6":3,"45":1,"51":2,"53":2,"62":2}}],["unnecessary",{"2":{"6":3,"127":1,"159":1,"160":1,"161":1}}],["universal",{"2":{"170":1}}],["united",{"2":{"158":1}}],["unify",{"2":{"25":1,"27":1}}],["unique",{"2":{"6":2,"54":3,"142":2,"145":2}}],["unioning",{"2":{"63":1}}],["unionintersectingpolygons",{"2":{"0":1,"6":8,"51":1,"52":2,"53":1,"54":2,"62":1,"63":2,"142":2,"143":2,"144":1,"145":4}}],["unions",{"0":{"63":1},"2":{"18":1,"164":1}}],["union",{"0":{"62":1},"2":{"0":1,"1":2,"3":2,"4":4,"6":22,"11":3,"23":2,"31":1,"34":2,"37":1,"40":1,"44":4,"45":7,"47":1,"53":2,"62":18,"63":30,"66":1,"69":8,"74":2,"75":4,"76":1,"78":2,"79":1,"91":2,"92":6,"95":2,"96":1,"103":4,"108":2,"109":4,"110":1,"112":2,"113":1,"118":2,"119":4,"120":1,"122":2,"123":1,"126":1,"127":5,"129":1,"134":3,"136":6,"142":1,"143":1,"145":9,"153":4,"158":2,"159":3,"160":3,"161":3,"164":4,"167":1}}],["unchanged",{"2":{"1":1,"6":2,"136":1,"158":1}}],["unwrap",{"2":{"0":1,"6":3,"131":1,"136":16}}],["nselected",{"2":{"162":3}}],["nmax",{"2":{"162":2}}],["nice",{"2":{"160":1}}],["null",{"2":{"152":1}}],["numeric",{"2":{"11":1}}],["numbers",{"2":{"6":1,"7":1,"38":2,"40":1,"152":1}}],["number=6",{"2":{"6":1,"157":1,"158":1}}],["number",{"2":{"6":11,"40":1,"45":2,"50":1,"56":1,"60":1,"65":1,"69":2,"100":2,"150":1,"151":1,"153":1,"158":2,"159":4,"160":7,"161":4,"162":12}}],["n+1",{"2":{"138":1}}],["nfeature",{"2":{"136":2}}],["nkeys",{"2":{"127":8}}],["nc",{"2":{"100":13}}],["ncoord",{"2":{"69":2}}],["nl",{"2":{"100":11}}],["nhole",{"2":{"45":2,"51":2,"53":2,"62":2,"63":1,"69":2}}],["nbpts",{"2":{"45":2}}],["nbsp",{"2":{"1":4,"3":9,"4":8,"5":3,"6":89,"131":3,"141":1,"142":4}}],["ngeom",{"2":{"44":1,"136":3,"167":1}}],["nt",{"2":{"166":2}}],["ntasks",{"2":{"136":6}}],["nthreads",{"2":{"136":3}}],["nthe",{"2":{"41":1,"149":1,"152":1}}],["ntuple",{"2":{"40":3,"153":1}}],["n2",{"2":{"40":8,"69":10}}],["n1",{"2":{"40":8,"69":9}}],["np2",{"2":{"86":4}}],["npolygon",{"2":{"52":1,"69":3,"145":2}}],["npoints",{"2":{"34":6,"45":5,"100":3,"152":6,"160":7}}],["npoint",{"2":{"6":1,"34":2,"36":1,"37":1,"47":2,"60":2,"66":1,"69":6,"86":6,"100":6,"108":1,"126":2,"139":1,"152":3,"153":1,"158":14,"162":1,"167":13}}],["npts",{"2":{"45":6,"160":3}}],["np",{"2":{"37":2,"66":5}}],["n",{"2":{"6":1,"9":1,"38":2,"40":36,"41":2,"45":51,"50":10,"62":4,"63":4,"100":11,"108":2,"126":6,"127":5,"138":1,"145":25,"149":2,"152":2,"153":3,"158":2,"162":7,"167":32}}],["naive",{"2":{"55":1}}],["napts",{"2":{"45":3}}],["navigate",{"0":{"26":1}}],["natearth2",{"2":{"170":1}}],["natural",{"2":{"158":1,"170":2,"175":1}}],["naturalearth",{"2":{"11":2,"59":2,"158":3,"170":1}}],["nature",{"2":{"127":1}}],["native",{"2":{"6":1,"128":1,"166":4,"173":1}}],["nan",{"2":{"9":1}}],["named",{"2":{"136":1}}],["namedtuple",{"2":{"22":2,"136":2,"166":2}}],["name",{"2":{"6":1,"31":2,"158":1,"166":1,"172":1,"173":2,"177":1}}],["names",{"2":{"6":1,"31":3,"136":6,"166":1}}],["nodestatus",{"2":{"127":6}}],["nodes",{"2":{"45":1,"127":4}}],["node",{"2":{"45":26,"127":17}}],["north",{"2":{"47":12}}],["nor",{"2":{"41":1,"149":1,"152":1}}],["normalized",{"2":{"40":1}}],["normalize",{"2":{"40":1}}],["norm",{"2":{"6":1,"40":22}}],["now",{"2":{"6":1,"13":1,"25":1,"27":1,"36":1,"39":2,"40":4,"41":1,"45":1,"50":1,"56":1,"63":1,"66":1,"126":1,"127":2,"144":1,"150":1,"151":3,"152":1,"158":1,"169":5,"170":6,"171":2,"172":1,"173":3,"176":2}}],["no",{"2":{"6":6,"34":1,"40":2,"45":4,"51":1,"52":1,"53":1,"54":14,"62":1,"69":2,"72":3,"89":3,"100":2,"106":2,"108":1,"110":1,"111":2,"116":2,"118":1,"119":3,"120":3,"121":1,"127":2,"128":1,"129":1,"136":3,"150":1,"152":2,"153":1,"158":1,"166":1,"173":1}}],["nonzero",{"2":{"153":1}}],["none",{"2":{"6":4,"45":1,"50":1,"51":1,"53":1,"62":1,"63":1,"86":4,"88":1}}],["nondimensional",{"2":{"6":1,"152":1}}],["nonintersecting",{"2":{"6":1,"23":1,"142":1,"145":1}}],["non",{"2":{"3":2,"6":2,"22":1,"38":2,"45":15,"51":2,"52":1,"53":1,"54":4,"62":1,"63":2,"65":1,"103":2,"110":1,"134":1,"165":1}}],["note",{"2":{"4":4,"6":11,"19":1,"29":1,"34":1,"37":2,"40":1,"43":2,"44":2,"45":3,"47":1,"50":2,"52":3,"54":5,"61":1,"63":3,"66":1,"69":5,"100":1,"102":1,"103":1,"148":1,"153":1,"159":1,"160":2,"161":1,"165":1,"170":2,"171":1}}],["not",{"0":{"128":1},"2":{"1":2,"3":8,"4":1,"6":18,"18":1,"19":1,"22":1,"24":1,"31":1,"34":4,"37":1,"40":4,"41":1,"43":1,"45":18,"50":1,"53":1,"54":7,"60":1,"63":3,"68":2,"69":4,"71":2,"72":2,"81":2,"82":1,"84":1,"85":2,"89":3,"91":5,"92":3,"93":2,"94":2,"100":5,"102":1,"103":2,"106":1,"115":2,"116":2,"118":1,"126":4,"127":2,"128":1,"134":1,"135":1,"136":11,"138":2,"141":2,"144":3,"147":1,"148":1,"149":1,"150":1,"152":2,"153":1,"163":1,"164":1,"165":1,"166":2,"170":1,"171":1,"175":1}}],["nothing`",{"2":{"52":2,"54":2,"63":2}}],["nothing",{"2":{"1":34,"4":1,"6":42,"15":3,"45":4,"50":1,"52":2,"53":1,"54":2,"63":2,"69":1,"100":1,"126":9,"127":3,"136":8,"138":24,"141":1,"144":60,"149":1,"153":1,"154":32,"158":2,"159":6,"160":6,"161":6,"162":1,"167":7,"169":252,"170":16,"171":20}}],["ne",{"2":{"170":2}}],["net",{"2":{"141":2}}],["ness",{"2":{"136":1}}],["nesting",{"2":{"134":2}}],["nestedloopfast",{"2":{"178":1}}],["nested",{"2":{"1":2,"4":1,"6":5,"18":1,"34":1,"134":2,"136":4,"155":1,"158":1}}],["never",{"2":{"134":1,"159":1}}],["neumann",{"2":{"127":1}}],["neither",{"2":{"63":1}}],["neighborhood",{"2":{"127":2}}],["neighbor",{"2":{"45":27}}],["neighboring",{"2":{"6":6,"45":1,"158":1,"159":1,"160":1,"161":2}}],["nearly",{"2":{"173":1}}],["nearest",{"2":{"45":1,"54":2}}],["neatly",{"2":{"17":1}}],["nedge",{"2":{"45":2,"167":13}}],["nextnode",{"2":{"127":27}}],["nextnodes",{"2":{"127":6}}],["next",{"2":{"44":1,"45":81,"47":3,"50":4,"100":14,"127":3,"145":13,"160":5}}],["necessarily",{"2":{"6":1,"126":1,"147":1}}],["necessary",{"2":{"6":1,"134":1,"158":1}}],["newfeature",{"2":{"136":2}}],["newnodes",{"2":{"127":2}}],["new",{"2":{"6":1,"41":1,"45":58,"47":9,"51":3,"52":1,"63":16,"100":2,"127":4,"135":1,"136":19,"141":2,"142":1,"143":1,"145":19,"153":8,"159":1,"160":2,"161":1,"171":1,"172":1,"177":1}}],["negative",{"2":{"4":3,"6":3,"36":2,"37":1,"38":2,"65":2,"66":3}}],["needs",{"2":{"44":1}}],["needing",{"2":{"4":1,"6":1,"17":1,"146":1}}],["need",{"2":{"1":1,"3":1,"4":2,"5":1,"6":5,"40":2,"43":1,"45":2,"52":1,"60":1,"69":4,"84":1,"85":1,"100":1,"127":2,"129":1,"136":1,"146":1,"154":1,"162":1,"170":1,"171":2,"178":2}}],["needed",{"2":{"1":2,"6":4,"34":1,"40":1,"45":4,"47":1,"51":1,"53":1,"62":1,"66":2,"100":5,"127":1,"136":2,"141":1,"148":3,"171":1}}],["gdal",{"2":{"173":1}}],["gml",{"2":{"173":1}}],["gpkg",{"2":{"173":3}}],["gadm",{"2":{"177":4}}],["ga",{"2":{"170":3,"174":2}}],["gaps",{"2":{"127":1}}],["global",{"2":{"170":1}}],["gft",{"2":{"168":1,"170":2}}],["gc",{"2":{"141":6}}],["g",{"2":{"34":3,"37":3,"41":1,"44":3,"47":3,"66":6,"134":1,"136":6,"158":2,"167":2,"173":1}}],["gb",{"2":{"31":1,"136":10}}],["guarantee",{"2":{"19":1,"30":1}}],["guaranteed",{"2":{"1":1,"6":1,"34":1,"136":1}}],["grand",{"2":{"177":1}}],["grained",{"2":{"151":1}}],["grahamscanmethod",{"2":{"61":1}}],["graphics",{"2":{"6":1,"40":1}}],["great",{"2":{"169":1,"171":1,"173":1}}],["greater",{"2":{"6":1,"126":1,"153":1}}],["greiner",{"0":{"52":1,"54":1,"63":1},"2":{"45":3,"50":2,"51":1,"53":1,"62":1}}],["green",{"2":{"14":1,"170":1}}],["grouped",{"2":{"169":1}}],["groups",{"2":{"6":1,"127":1}}],["grouping",{"2":{"1":1,"6":1,"136":2}}],["grid",{"2":{"6":1,"39":1,"47":4}}],["g2",{"2":{"3":5,"6":5,"72":12,"73":6,"74":9,"75":6,"76":6,"77":3,"78":4,"79":2,"82":4,"85":3,"86":21,"89":10,"90":6,"91":10,"92":8,"93":4,"94":2,"95":4,"96":2,"106":10,"107":6,"108":10,"109":6,"110":5,"111":4,"112":4,"113":2,"116":10,"117":6,"118":9,"119":6,"120":6,"121":3,"122":4,"123":2}}],["g1",{"2":{"3":5,"4":1,"6":6,"72":12,"73":6,"74":9,"75":6,"76":6,"77":3,"78":2,"79":4,"82":4,"85":3,"86":21,"89":9,"90":6,"91":10,"92":8,"93":4,"94":2,"95":2,"96":4,"106":10,"107":6,"108":9,"109":6,"110":5,"111":4,"112":2,"113":4,"116":10,"117":6,"118":9,"119":6,"120":6,"121":3,"122":2,"123":4}}],["generic",{"2":{"22":1}}],["generation",{"2":{"158":2}}],["generated",{"2":{"31":1,"34":1,"37":1,"40":1,"41":1,"44":1,"45":1,"47":1,"50":1,"52":1,"54":1,"55":1,"61":1,"63":1,"66":1,"69":1,"79":1,"82":1,"85":1,"86":1,"96":1,"99":1,"100":1,"103":1,"113":1,"123":1,"126":1,"127":1,"128":1,"136":1,"139":1,"142":1,"145":1,"146":1,"147":1,"149":1,"153":1,"154":1,"155":1,"158":1,"162":1,"166":1,"167":1,"176":1}}],["generate",{"2":{"7":1,"13":2,"158":1,"176":2}}],["generalization",{"2":{"38":1}}],["generalized",{"2":{"6":1,"38":3,"40":1}}],["generalise",{"2":{"6":4,"158":1}}],["generally",{"2":{"6":2,"166":3}}],["general",{"0":{"2":1,"4":1},"1":{"3":1,"4":1},"2":{"18":1,"20":1,"25":1,"27":1,"129":1,"149":1}}],["getfeature",{"2":{"136":5,"167":5}}],["getcolumn",{"2":{"136":4}}],["getgeom",{"2":{"78":1,"79":1,"95":1,"96":1,"103":2,"112":1,"113":1,"122":1,"123":1,"136":8,"158":3,"167":6}}],["getring",{"2":{"45":1}}],["getindex",{"2":{"40":2}}],["gethole",{"2":{"34":1,"37":1,"44":1,"45":4,"47":1,"50":1,"51":2,"53":2,"63":6,"66":1,"69":2,"100":5,"139":1,"169":1}}],["getexterior",{"2":{"34":1,"37":1,"40":1,"44":1,"45":3,"47":1,"50":1,"51":2,"53":2,"62":3,"63":6,"66":1,"69":2,"100":5,"126":1,"127":1,"139":1,"169":1}}],["getpolygon",{"2":{"52":3,"54":2,"63":2,"69":3}}],["getpoint",{"2":{"33":1,"34":5,"36":2,"37":1,"40":1,"43":1,"44":6,"45":3,"46":2,"47":3,"49":3,"65":1,"66":6,"68":4,"69":13,"71":1,"81":4,"84":1,"86":7,"88":4,"98":2,"100":28,"102":4,"103":2,"105":2,"108":2,"115":4,"126":5,"139":3,"151":4,"153":2,"162":1,"167":3,"169":2}}],["getproperty",{"2":{"13":2,"14":1}}],["get",{"2":{"6":1,"13":1,"36":1,"41":1,"45":9,"51":1,"52":1,"53":1,"54":2,"61":2,"62":2,"127":4,"136":4,"149":1,"152":3,"158":1,"159":1,"161":1,"162":2,"166":5,"167":1,"169":2,"177":2}}],["geoparquet",{"2":{"173":4}}],["geopoly1",{"2":{"171":1,"172":1}}],["geopoly2",{"2":{"171":1,"172":1}}],["geoaxis",{"2":{"170":4,"174":1}}],["geographic",{"2":{"170":1,"173":1}}],["geographiclib",{"2":{"6":1,"152":1}}],["geointeface",{"2":{"134":1}}],["geointerace",{"2":{"22":1}}],["geointerfacemakie",{"2":{"157":1,"176":1,"177":1}}],["geointerface",{"0":{"30":1},"2":{"1":20,"3":9,"4":2,"6":41,"11":1,"13":1,"14":1,"15":1,"22":3,"25":1,"27":1,"30":1,"31":7,"33":1,"34":1,"36":1,"37":1,"40":23,"43":1,"44":1,"45":1,"46":1,"47":1,"49":1,"50":1,"51":1,"53":1,"54":1,"58":1,"59":1,"60":1,"62":1,"65":1,"66":11,"68":1,"69":2,"71":1,"72":2,"81":1,"82":2,"84":1,"85":2,"86":1,"88":1,"89":3,"98":1,"99":2,"102":1,"103":2,"105":1,"106":2,"115":1,"116":2,"126":5,"127":1,"131":3,"134":3,"136":7,"138":9,"141":1,"142":1,"144":23,"146":1,"148":2,"151":1,"152":1,"154":13,"155":1,"157":1,"158":2,"167":1,"168":1,"169":122,"170":5,"171":9,"174":1,"176":1,"177":1}}],["geo",{"2":{"127":1,"152":4,"170":2}}],["geotable",{"2":{"29":1}}],["geojson",{"2":{"11":1,"158":2,"168":1,"170":4,"173":3}}],["geodataframes",{"2":{"173":3}}],["geod",{"2":{"6":2,"152":3}}],["geodesic`",{"2":{"152":2}}],["geodesic",{"0":{"174":1},"2":{"6":5,"31":1,"151":6,"152":8,"153":1,"174":1}}],["geodesicsegments",{"2":{"0":1,"6":2,"150":1,"151":3,"152":6,"153":2,"174":1}}],["geoformattypes",{"2":{"1":2,"148":2,"168":1,"170":2,"171":8}}],["geomakie",{"0":{"170":1},"2":{"168":2,"170":5,"174":2}}],["geomfromgeos",{"2":{"152":1}}],["geomtype",{"2":{"136":3}}],["geoms",{"2":{"6":1,"61":1,"100":1,"131":1,"136":20}}],["geom2",{"2":{"3":8,"4":1,"6":9,"66":6,"69":1,"86":6,"89":1,"99":3,"103":6,"106":1,"116":2}}],["geom1",{"2":{"3":8,"4":1,"6":9,"66":6,"69":1,"86":4,"89":1,"99":3,"103":6,"106":1,"116":2}}],["geometrical",{"2":{"175":1}}],["geometric",{"2":{"25":2,"27":2,"43":1}}],["geometries",{"0":{"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"90":1,"91":1,"92":1,"93":1,"94":1,"95":1,"96":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"117":1,"118":1,"119":1,"120":1,"121":1,"122":1,"123":1,"169":1,"170":1,"171":1},"2":{"1":6,"3":8,"4":14,"6":63,"18":3,"20":1,"22":3,"25":2,"27":2,"29":4,"33":1,"34":3,"37":4,"44":1,"47":2,"50":1,"51":5,"53":5,"54":4,"61":6,"62":5,"65":1,"66":4,"68":1,"69":7,"71":1,"72":1,"82":1,"86":2,"89":2,"98":1,"99":1,"100":1,"102":2,"103":3,"105":2,"106":2,"116":2,"118":1,"129":1,"131":4,"133":1,"135":2,"136":13,"146":1,"148":2,"150":3,"151":1,"152":4,"153":1,"155":1,"156":1,"159":1,"160":1,"161":1,"167":1,"168":5,"170":1,"171":2,"172":2,"173":1,"175":5,"176":1,"178":1}}],["geometry=",{"2":{"172":1}}],["geometrybasics",{"2":{"31":3,"39":2,"40":10,"61":1,"65":1,"72":1,"106":1,"116":1}}],["geometrycolumns",{"2":{"136":3}}],["geometrycollections",{"2":{"175":1}}],["geometrycollection",{"2":{"23":1,"177":1}}],["geometrycollectiontrait",{"2":{"23":1,"78":1,"79":1,"95":1,"96":1,"112":1,"113":1,"122":1,"123":1}}],["geometrycorrections",{"2":{"141":1}}],["geometrycorrection",{"2":{"0":1,"6":11,"139":2,"140":2,"141":13,"142":11,"145":4}}],["geometry",{"0":{"2":1,"53":1,"78":2,"79":2,"95":2,"96":2,"112":2,"113":2,"122":2,"123":2,"140":1,"148":1,"156":1,"168":1,"172":1},"1":{"3":1,"4":1,"141":1,"142":1,"149":1,"157":1,"158":1,"169":1,"170":1,"171":1,"172":1,"173":1},"2":{"1":10,"3":24,"4":12,"6":70,"9":1,"11":2,"18":4,"20":1,"23":3,"29":1,"31":1,"34":7,"37":4,"41":4,"44":3,"46":1,"47":4,"50":4,"59":1,"65":4,"66":6,"69":8,"71":4,"72":5,"73":4,"74":1,"78":3,"79":4,"81":5,"82":2,"84":4,"85":4,"86":3,"88":2,"89":5,"90":4,"91":2,"92":2,"95":3,"96":4,"98":2,"100":2,"103":3,"105":3,"106":4,"107":4,"108":2,"112":3,"113":4,"115":4,"116":5,"117":4,"122":3,"123":4,"125":1,"129":3,"131":2,"134":2,"136":43,"138":1,"139":1,"140":2,"141":23,"142":6,"146":1,"147":1,"148":6,"150":3,"151":1,"152":5,"153":8,"158":6,"167":6,"169":1,"170":1,"171":4,"172":2,"173":2,"175":1,"176":7,"177":4,"178":2}}],["geometryopsprojext",{"2":{"148":1,"149":1,"152":1,"153":1}}],["geometryopslibgeosext",{"2":{"41":1}}],["geometryops",{"0":{"0":1,"25":1,"31":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"2":{"0":117,"1":6,"3":18,"4":9,"5":3,"6":114,"7":2,"11":1,"13":1,"14":1,"15":1,"17":2,"25":1,"26":4,"27":1,"31":1,"33":1,"36":1,"39":5,"41":1,"43":1,"46":1,"49":1,"50":1,"51":1,"53":1,"54":1,"56":1,"58":1,"59":1,"60":3,"62":1,"65":1,"68":1,"69":1,"71":1,"72":2,"81":1,"82":2,"84":1,"85":2,"86":2,"88":1,"89":2,"98":1,"99":1,"102":1,"103":1,"105":1,"106":2,"115":1,"116":2,"126":3,"127":2,"131":4,"136":1,"138":1,"141":1,"142":4,"144":1,"149":1,"151":1,"152":2,"154":1,"157":1,"158":2,"163":1,"166":2,"167":1,"168":1,"169":3,"174":1,"175":1,"176":2,"177":2}}],["geom",{"2":{"1":7,"4":21,"6":48,"18":3,"31":12,"34":25,"37":17,"44":28,"45":16,"47":6,"50":15,"51":8,"52":2,"53":12,"54":10,"62":9,"63":9,"66":28,"69":45,"72":4,"86":1,"89":4,"100":3,"103":1,"106":4,"116":4,"126":3,"127":1,"129":2,"131":3,"136":96,"145":11,"147":4,"153":13,"154":7,"155":4,"158":36,"162":3,"167":17,"177":6}}],["geospatial",{"0":{"171":1,"173":1},"2":{"168":5,"170":1,"171":3,"173":5}}],["geoscontext",{"2":{"152":1}}],["geosdensify",{"2":{"152":3}}],["geos",{"0":{"166":1},"2":{"0":1,"6":6,"41":4,"56":1,"60":4,"61":1,"156":5,"158":2,"163":1,"166":12}}],["got",{"2":{"162":3}}],["goes",{"2":{"6":2,"126":2}}],["good",{"2":{"6":1,"40":1,"166":2,"171":1}}],["going",{"2":{"4":4,"6":5,"47":2,"60":1,"69":5,"126":1,"127":1,"168":1}}],["go",{"2":{"1":5,"3":17,"4":2,"6":43,"11":9,"13":1,"14":1,"15":6,"18":1,"31":2,"33":1,"36":1,"40":1,"43":2,"46":1,"49":2,"50":2,"51":2,"53":2,"54":2,"58":3,"59":2,"60":8,"61":2,"62":2,"65":6,"68":1,"69":2,"71":1,"72":2,"81":2,"82":2,"84":2,"85":2,"86":1,"88":1,"89":2,"98":1,"99":2,"102":1,"103":2,"105":1,"106":2,"115":2,"116":2,"126":6,"127":2,"129":1,"131":1,"136":3,"138":3,"144":3,"151":7,"152":8,"154":3,"157":2,"158":49,"166":1,"167":2,"168":1,"169":3,"171":1,"173":1,"174":3,"175":9,"176":2,"177":5,"178":1}}],["gtrait",{"2":{"66":2}}],["gt",{"2":{"1":1,"6":2,"9":2,"10":1,"11":5,"45":3,"126":3}}],["gif",{"2":{"160":1}}],["gives",{"2":{"177":1}}],["give",{"2":{"100":1,"173":1}}],["given",{"2":{"4":7,"6":21,"18":2,"29":1,"33":1,"34":1,"37":2,"44":3,"45":8,"47":3,"50":5,"51":1,"52":2,"53":1,"54":2,"62":1,"63":2,"66":8,"69":4,"72":1,"81":1,"82":1,"84":1,"85":1,"89":1,"98":1,"99":1,"100":7,"106":1,"108":1,"116":1,"129":1,"141":4,"142":1,"144":1,"150":2,"152":2,"153":2,"161":1}}],["github",{"2":{"6":2,"61":1}}],["gis",{"2":{"5":1,"6":1,"25":1,"27":1,"40":1}}],["gi",{"2":{"1":13,"3":42,"4":31,"6":125,"11":8,"13":15,"14":15,"15":8,"18":2,"31":1,"33":3,"34":30,"36":5,"37":21,"39":1,"43":5,"44":38,"45":34,"46":5,"47":17,"49":6,"50":13,"51":19,"52":16,"53":25,"54":24,"58":1,"59":1,"60":3,"61":4,"62":17,"63":36,"65":8,"66":42,"68":7,"69":99,"71":3,"72":4,"73":6,"74":12,"75":10,"76":7,"77":4,"78":8,"79":6,"81":7,"82":3,"84":3,"85":3,"86":21,"88":7,"89":2,"90":3,"91":12,"92":14,"93":4,"94":2,"95":8,"96":6,"98":5,"99":3,"100":59,"102":7,"103":51,"105":5,"106":3,"107":6,"108":15,"109":10,"110":7,"111":4,"112":8,"113":6,"115":7,"116":2,"117":6,"118":12,"119":10,"120":7,"121":4,"122":8,"123":6,"126":32,"127":15,"129":4,"131":2,"136":116,"138":2,"139":10,"141":9,"144":3,"145":8,"146":1,"147":5,"151":6,"152":6,"153":12,"154":9,"155":5,"157":2,"158":34,"162":4,"164":9,"167":58,"168":1,"169":21,"170":2,"171":2,"174":2,"176":5,"177":2}}],["o",{"2":{"136":24}}],["odd",{"2":{"100":1}}],["own",{"2":{"63":1,"129":2}}],["occur",{"2":{"54":1}}],["occurs",{"2":{"54":1}}],["occupied",{"2":{"36":1}}],["old",{"2":{"45":8,"136":3}}],["ourselves",{"2":{"152":1}}],["our",{"2":{"24":1,"152":1,"169":4,"170":3,"176":1}}],["out=3",{"2":{"100":1}}],["out=4",{"2":{"53":1}}],["out`",{"2":{"53":1,"100":1}}],["out",{"2":{"6":3,"45":12,"47":23,"54":6,"61":1,"63":4,"65":5,"72":4,"86":1,"89":3,"100":102,"103":2,"106":4,"116":4,"126":1,"136":1,"153":1,"166":2}}],["outside",{"2":{"3":2,"4":1,"6":3,"45":3,"47":1,"52":2,"54":4,"63":3,"65":2,"66":1,"71":1,"85":1,"88":1,"100":12,"103":3,"121":1}}],["outputs",{"2":{"45":1}}],["output",{"2":{"3":8,"4":1,"6":18,"18":1,"23":1,"50":2,"51":1,"53":1,"54":1,"62":1,"63":2,"69":1,"72":1,"82":1,"85":1,"89":1,"99":1,"103":1,"106":1,"116":1,"126":2,"158":1,"162":1,"167":1}}],["outermost",{"2":{"136":1}}],["outer",{"2":{"1":1,"6":1,"134":1,"136":2,"175":1,"176":1}}],["omit",{"2":{"6":1,"152":1}}],["obtain",{"2":{"136":1}}],["obtained",{"2":{"23":1}}],["observable",{"2":{"14":2}}],["obs",{"2":{"14":10}}],["obviously",{"2":{"4":1,"6":1,"146":1}}],["objects",{"2":{"1":4,"4":1,"6":17,"131":3,"134":5,"136":8,"146":1,"150":1,"155":1,"158":2}}],["object",{"2":{"1":4,"4":1,"5":1,"6":8,"20":1,"40":1,"65":1,"100":4,"131":1,"134":5,"136":3,"146":1,"148":3,"152":1,"155":1,"158":1}}],["obj",{"2":{"1":4,"4":1,"6":17,"131":3,"136":10,"146":1,"147":2,"152":3,"154":1,"155":1,"158":3}}],["others",{"2":{"41":1,"145":1}}],["otherwise",{"2":{"4":2,"6":3,"41":1,"45":1,"52":1,"54":1,"66":2,"127":1,"147":1,"149":1,"152":1,"167":1}}],["other",{"0":{"4":1,"6":1},"2":{"3":4,"6":12,"34":1,"45":5,"51":1,"53":1,"54":1,"56":2,"62":2,"63":3,"66":2,"69":2,"74":1,"81":1,"98":1,"100":8,"102":1,"103":4,"105":2,"106":2,"109":1,"118":1,"127":1,"131":1,"134":1,"136":1,"142":2,"143":1,"145":2,"158":2,"160":2,"163":1,"164":1,"166":1,"170":1,"175":1,"178":1}}],["ogc",{"0":{"3":1}}],["over=3",{"2":{"53":1}}],["over`",{"2":{"53":1}}],["overflow",{"2":{"50":1}}],["overhead",{"2":{"22":1,"136":2}}],["override",{"2":{"6":1,"40":1}}],["overlapping",{"2":{"45":11,"54":4,"63":6}}],["overlap",{"2":{"3":4,"6":4,"9":1,"45":2,"54":8,"63":2,"72":1,"84":1,"100":2,"102":5,"103":6,"116":1,"143":1}}],["overlaps",{"0":{"101":1,"102":1},"1":{"102":1,"103":1},"2":{"0":10,"3":5,"6":13,"31":1,"54":1,"101":1,"102":3,"103":30,"127":1,"175":1}}],["over",{"2":{"1":1,"6":3,"36":2,"37":1,"44":3,"45":5,"47":1,"53":1,"54":11,"60":1,"63":1,"72":1,"86":1,"89":1,"100":15,"103":2,"106":1,"116":1,"136":22,"169":3}}],["opposed",{"2":{"174":1}}],["opposite",{"2":{"3":5,"6":5,"45":2,"52":1,"54":2,"63":1,"72":1,"82":2,"85":2,"99":2,"116":1}}],["ops",{"2":{"136":1}}],["open",{"2":{"45":1,"138":1,"170":1}}],["operates",{"2":{"136":1,"137":1,"143":1}}],["operate",{"2":{"18":1,"29":1,"136":1}}],["operations",{"0":{"23":1},"2":{"23":1,"26":1,"54":1,"63":1,"129":1}}],["operation",{"2":{"6":3,"45":1,"129":1,"142":2,"145":2,"166":2}}],["optimisation",{"2":{"100":1}}],["optimise",{"2":{"86":1}}],["optimal",{"2":{"6":1,"61":1}}],["options",{"2":{"14":1,"45":1}}],["optional",{"2":{"4":5,"6":6,"34":1,"37":2,"47":1,"66":2}}],["op",{"2":{"1":3,"6":3,"19":2,"44":1,"136":35}}],["on=2",{"2":{"100":1}}],["on`",{"2":{"100":1}}],["once",{"2":{"86":1,"103":1,"127":1}}],["onto",{"2":{"66":1}}],["ones",{"2":{"144":1}}],["oneunit",{"2":{"40":1}}],["one",{"2":{"1":1,"3":9,"6":14,"23":1,"34":4,"37":2,"39":1,"40":1,"44":1,"45":5,"47":3,"51":1,"52":1,"53":1,"54":32,"56":1,"62":2,"63":2,"65":2,"71":1,"78":1,"86":1,"88":1,"100":18,"102":1,"103":18,"105":2,"106":2,"109":3,"110":2,"111":2,"112":1,"113":1,"115":1,"116":1,"122":1,"126":1,"127":5,"136":1,"144":1,"148":1,"152":1,"154":1,"162":1,"170":1,"175":1}}],["on",{"0":{"170":1},"2":{"1":2,"4":3,"6":11,"9":1,"18":1,"20":1,"23":2,"25":3,"27":3,"29":2,"34":5,"37":3,"39":1,"40":2,"44":3,"45":28,"47":8,"50":1,"51":1,"52":5,"53":1,"54":4,"61":1,"62":1,"63":2,"65":1,"66":3,"69":2,"71":1,"72":7,"74":2,"75":3,"76":3,"77":1,"86":4,"89":6,"91":4,"92":1,"93":1,"100":125,"103":9,"106":7,"108":2,"116":7,"118":2,"119":1,"120":1,"127":3,"129":1,"131":1,"136":15,"137":1,"139":1,"142":1,"143":1,"150":1,"152":1,"160":1,"165":2,"168":1,"170":3,"171":1,"173":1,"174":1,"175":4,"176":1,"177":2,"178":2}}],["only",{"2":{"0":1,"5":1,"6":11,"23":1,"37":2,"39":2,"40":1,"41":1,"44":2,"45":4,"47":3,"50":1,"51":1,"53":1,"54":1,"61":3,"62":1,"66":2,"69":3,"102":3,"103":1,"105":1,"127":2,"136":2,"144":1,"150":1,"151":1,"153":2,"163":1,"166":2,"171":1,"177":1,"178":1}}],["often",{"2":{"170":1}}],["offers",{"2":{"169":1}}],["offer",{"2":{"152":1}}],["offset",{"2":{"34":8,"69":1}}],["off",{"2":{"4":1,"6":1,"45":4,"69":1,"100":6,"136":1}}],["of",{"0":{"59":1},"2":{"1":7,"3":29,"4":66,"5":5,"6":194,"7":2,"9":4,"17":3,"18":5,"19":1,"20":2,"22":1,"23":2,"24":2,"25":1,"26":1,"27":1,"29":3,"33":1,"34":38,"36":5,"37":28,"38":9,"39":1,"40":13,"41":1,"43":3,"44":12,"45":84,"46":5,"47":31,"50":5,"51":12,"52":13,"53":10,"54":48,"56":5,"60":3,"61":3,"62":9,"63":20,"65":6,"66":18,"68":2,"69":19,"71":6,"72":18,"74":1,"75":5,"76":5,"77":1,"78":2,"79":1,"81":4,"82":5,"85":5,"86":1,"88":3,"89":14,"91":1,"92":1,"93":1,"95":2,"96":1,"98":1,"99":3,"100":85,"102":1,"103":13,"105":2,"106":15,"108":3,"109":7,"110":5,"111":1,"112":2,"113":1,"115":4,"116":18,"118":3,"119":6,"120":6,"121":4,"122":1,"123":1,"125":2,"126":3,"127":19,"128":2,"129":3,"131":1,"134":5,"135":2,"136":27,"137":1,"138":1,"142":2,"143":4,"145":4,"147":3,"148":1,"150":2,"151":2,"152":5,"153":2,"155":1,"158":8,"160":4,"161":2,"162":1,"164":2,"166":4,"167":2,"169":6,"170":4,"171":2,"172":1,"173":4,"175":3,"176":4,"177":2}}],["org",{"2":{"51":1,"53":1,"62":1,"100":2,"160":1}}],["organise",{"2":{"10":1}}],["orange",{"2":{"49":1,"65":1,"68":2,"81":2,"88":2,"102":2,"115":2}}],["oro",{"2":{"11":2}}],["originate",{"2":{"63":1}}],["originals",{"2":{"22":1}}],["original",{"2":{"6":4,"18":1,"22":1,"45":10,"50":5,"51":1,"53":1,"63":4,"134":1,"136":3,"141":1,"147":2,"153":1,"157":4,"158":1}}],["orient",{"0":{"13":1},"1":{"14":1,"15":1},"2":{"13":7,"14":12,"45":15,"54":53}}],["orientation",{"0":{"124":1},"1":{"125":1,"126":1},"2":{"6":2,"10":1,"31":1,"37":1,"45":10,"47":2,"51":1,"53":2,"54":2,"62":1,"100":16,"125":1,"158":1}}],["ordered",{"2":{"36":1}}],["order",{"0":{"60":1},"2":{"1":4,"3":1,"4":2,"6":7,"34":1,"36":1,"37":2,"40":1,"45":4,"54":1,"60":4,"61":1,"63":1,"66":2,"69":3,"72":1,"82":1,"85":1,"99":1,"136":2,"148":2,"158":1,"175":1}}],["or",{"0":{"24":1},"2":{"1":11,"3":3,"4":10,"6":54,"18":1,"20":1,"22":1,"23":1,"25":1,"27":1,"29":2,"31":1,"34":4,"37":1,"40":1,"41":1,"43":2,"44":4,"45":24,"46":1,"50":1,"51":1,"52":3,"53":2,"54":9,"56":1,"61":1,"62":1,"63":2,"65":2,"66":4,"69":3,"72":1,"74":2,"75":1,"76":1,"77":1,"78":1,"79":1,"81":1,"88":2,"91":2,"92":3,"93":2,"94":1,"95":1,"96":1,"98":2,"99":1,"100":26,"102":1,"103":2,"105":1,"106":1,"112":1,"113":1,"116":1,"118":2,"122":1,"123":1,"125":2,"126":3,"127":7,"129":3,"131":1,"133":2,"135":1,"136":9,"137":1,"139":1,"141":5,"142":2,"148":2,"149":1,"150":2,"152":2,"153":2,"155":1,"156":1,"158":3,"160":2,"162":2,"164":3,"167":2,"175":1,"177":2}}],["est",{"2":{"177":1}}],["essentially",{"2":{"164":1}}],["especially",{"2":{"6":1,"18":1,"23":1,"127":1}}],["effects",{"2":{"136":3}}],["efficiently",{"2":{"20":1}}],["efficient",{"2":{"6":1,"40":1,"51":2,"53":2,"61":1,"62":2,"139":1}}],["e2",{"2":{"100":4}}],["e1",{"2":{"100":8}}],["euclid",{"2":{"47":2,"66":11,"100":1,"159":1}}],["euclidean",{"2":{"4":1,"6":1,"40":13,"66":6,"153":1}}],["everything",{"2":{"158":1}}],["every",{"2":{"45":1,"69":2,"134":1,"166":1}}],["evenly",{"2":{"176":1}}],["eventually",{"2":{"45":1}}],["even",{"2":{"37":2,"47":1,"54":1,"66":1,"69":1,"129":1,"138":1,"143":1}}],["evaluated",{"2":{"175":1}}],["eval",{"2":{"31":2,"136":2}}],["epsg",{"2":{"170":5,"171":8}}],["eps",{"2":{"34":2,"54":14}}],["eponymous",{"2":{"6":1,"152":1}}],["e",{"2":{"9":1,"22":1,"41":1,"127":1,"134":1,"136":2,"169":2,"170":1,"173":1}}],["ellipsoid",{"2":{"174":1}}],["eltype",{"2":{"127":4}}],["elements",{"2":{"78":1,"79":1,"95":1,"96":1,"103":1,"112":1,"113":1,"122":1,"123":1}}],["element",{"2":{"6":6,"33":1,"45":4,"50":2,"51":1,"53":1,"54":1,"62":3,"151":1,"170":1}}],["elsewhere",{"2":{"50":1}}],["elseif",{"2":{"45":5,"47":7,"51":1,"53":1,"54":14,"62":2,"63":1,"86":3,"100":10,"126":1,"127":2,"145":1,"160":2,"162":2}}],["else",{"2":{"3":6,"6":6,"34":1,"40":2,"45":19,"47":9,"50":1,"52":2,"54":9,"62":1,"63":9,"86":2,"100":17,"103":8,"127":20,"136":8,"139":1,"147":1,"149":1,"154":1,"155":1,"158":2,"160":4,"162":2,"166":1}}],["etc",{"2":{"6":1,"20":2,"36":1,"61":1,"164":1,"173":1}}],["empty",{"2":{"4":2,"6":6,"34":2,"45":2,"51":1,"53":1,"54":2,"62":1,"127":2}}],["embedding",{"0":{"135":1,"146":1}}],["embedded",{"0":{"171":1},"2":{"127":1,"135":3,"168":1,"171":1}}],["embed",{"2":{"0":2,"4":1,"6":1,"135":1,"146":2}}],["errors",{"2":{"31":1,"54":1,"153":1}}],["error",{"0":{"149":1},"2":{"4":1,"6":4,"7":1,"18":1,"31":6,"40":1,"41":4,"45":2,"54":2,"55":1,"69":2,"127":1,"134":1,"141":2,"149":3,"152":5,"162":4,"166":3,"167":1}}],["edgekeys",{"2":{"127":3}}],["edge",{"2":{"3":1,"4":3,"6":4,"20":1,"31":1,"37":1,"43":1,"45":25,"47":13,"51":1,"53":1,"54":6,"62":1,"66":4,"69":1,"74":2,"92":2,"93":1,"100":7,"103":21,"118":2,"119":1,"120":1,"127":7,"167":2}}],["edges`",{"2":{"54":1}}],["edges",{"2":{"0":1,"4":2,"6":9,"45":12,"47":8,"52":3,"54":10,"63":3,"66":3,"68":2,"69":1,"74":1,"75":3,"76":7,"77":3,"81":1,"88":1,"91":3,"94":1,"100":3,"103":20,"115":1,"118":1,"127":22,"167":29}}],["earlier",{"2":{"169":3}}],["earth",{"2":{"6":2,"25":1,"27":1,"152":2,"158":1,"170":2,"175":1}}],["easiest",{"2":{"172":1}}],["easier",{"2":{"163":1,"165":1}}],["easily",{"2":{"129":1}}],["east",{"2":{"47":9}}],["easy",{"2":{"1":1,"6":1,"143":1,"154":1}}],["eachindex",{"2":{"34":1,"126":1,"127":3,"136":2,"159":1,"162":1}}],["each",{"2":{"3":2,"4":3,"6":6,"9":1,"18":2,"20":1,"34":4,"37":2,"38":4,"40":1,"45":5,"47":1,"54":3,"66":1,"69":2,"72":1,"89":1,"100":6,"102":1,"103":3,"106":1,"116":1,"126":1,"127":1,"136":1,"143":2,"158":1,"172":1,"173":1,"176":2,"177":2,"178":1}}],["equatorial",{"2":{"6":6,"152":4}}],["equality",{"2":{"45":1,"54":1,"175":1}}],["equal",{"2":{"3":2,"4":16,"6":19,"34":6,"54":1,"65":1,"66":4,"68":3,"69":22,"74":1,"91":1,"100":15,"102":1,"103":2,"108":2,"118":1,"138":1}}],["equals",{"0":{"67":1,"68":1},"1":{"68":1,"69":1},"2":{"0":17,"4":3,"6":19,"31":1,"34":2,"45":4,"50":2,"54":8,"66":1,"67":1,"68":2,"69":50,"74":1,"91":1,"100":10,"103":2,"108":3,"118":1,"175":1}}],["equivalent",{"2":{"3":1,"4":4,"6":6,"37":1,"45":1,"54":1,"63":1,"69":5,"72":1,"100":1}}],["enable",{"2":{"178":1}}],["enabled",{"2":{"175":1}}],["enabling",{"0":{"178":1}}],["enclosed",{"2":{"100":1}}],["encode",{"2":{"24":1}}],["encompasses",{"2":{"18":1,"100":1}}],["encounters",{"2":{"18":1}}],["en",{"2":{"100":1,"160":1}}],["envelope",{"2":{"54":2}}],["envelopes",{"2":{"54":2}}],["enough",{"2":{"45":1}}],["entirely",{"2":{"100":1}}],["entire",{"2":{"47":1,"100":4}}],["entry",{"2":{"45":11,"52":3,"54":4,"63":3,"127":1}}],["ent",{"2":{"45":19,"50":2}}],["enter",{"2":{"45":4}}],["ensuring",{"2":{"6":1,"150":1,"153":1}}],["ensure",{"2":{"6":3,"40":1,"51":1,"53":1,"62":1,"137":2,"140":1}}],["ensures",{"2":{"6":3,"139":1,"142":3,"145":2}}],["enumerate",{"2":{"13":2,"34":1,"45":10,"47":1,"50":1,"52":1,"63":2,"100":1,"127":2,"145":2,"162":1}}],["enum",{"2":{"6":2,"45":3,"53":3,"100":3}}],["endpt",{"2":{"160":3}}],["endpoints",{"2":{"45":3,"47":1,"52":1,"54":6,"63":1,"66":2,"100":11,"103":2,"105":1}}],["endpoint=3",{"2":{"45":1}}],["endpointtype",{"2":{"45":2}}],["endpoint",{"2":{"3":1,"6":2,"45":27,"53":1,"54":16,"66":2,"71":1,"100":3,"103":2,"158":4,"160":4,"169":1}}],["ending",{"2":{"45":1,"47":1}}],["end",{"2":{"1":1,"6":1,"9":1,"13":4,"14":3,"31":4,"34":18,"37":8,"40":35,"41":3,"44":10,"45":130,"47":43,"50":9,"51":8,"52":12,"53":5,"54":31,"55":1,"61":3,"62":6,"63":24,"66":19,"69":20,"78":2,"79":2,"86":20,"95":2,"96":2,"100":104,"103":21,"108":1,"112":2,"113":2,"118":1,"122":2,"123":2,"126":9,"127":44,"128":4,"129":1,"136":52,"137":1,"139":5,"141":3,"145":18,"147":4,"148":1,"149":2,"152":8,"153":8,"154":4,"155":4,"158":7,"159":6,"160":30,"161":3,"162":27,"164":1,"165":3,"166":4,"167":19}}],["enforce",{"2":{"0":1,"6":2,"166":3}}],["exits",{"2":{"45":1}}],["exit",{"2":{"45":32,"50":2,"52":3,"54":3,"63":2}}],["existingnodes",{"2":{"127":3}}],["existing",{"2":{"45":3,"62":1,"127":1,"170":2,"172":1}}],["exists",{"2":{"45":1,"47":1,"54":1}}],["exist",{"2":{"6":1,"45":1,"54":3,"166":1}}],["excluding",{"2":{"94":1,"100":1,"118":2}}],["exclude",{"2":{"86":9}}],["exclusively",{"2":{"110":1}}],["exclusive",{"2":{"47":1,"54":2}}],["exc",{"2":{"41":2,"149":2,"152":2}}],["excellent",{"2":{"23":1}}],["except",{"2":{"18":1,"19":1}}],["excess",{"2":{"5":1,"6":1,"40":1}}],["exp10",{"2":{"152":1,"158":2}}],["expressed",{"2":{"38":2}}],["express",{"2":{"38":1}}],["experimental",{"2":{"31":3}}],["expect",{"2":{"1":1,"98":1,"148":1}}],["explain",{"2":{"26":1}}],["explanations",{"2":{"26":3}}],["explicitly",{"2":{"6":1,"18":1,"24":1,"34":2,"37":1,"40":1,"41":1,"66":2,"69":1,"149":1,"152":1,"153":1}}],["expose",{"2":{"56":1}}],["exposes",{"2":{"17":1}}],["export",{"2":{"38":1,"150":1,"171":1,"173":1}}],["exponential",{"2":{"9":1}}],["ext2",{"2":{"100":3}}],["ext1",{"2":{"100":3}}],["ext",{"2":{"39":15,"45":10,"47":2,"50":3,"51":8,"53":8,"54":18,"62":8,"63":14,"86":7,"100":7}}],["extrema",{"2":{"127":1,"167":1}}],["extreem",{"2":{"34":10}}],["extracts",{"2":{"61":1}}],["extract",{"2":{"61":1,"127":1,"136":3,"158":1}}],["extra",{"2":{"6":3,"45":1,"62":1,"150":1,"152":2,"153":1}}],["external",{"2":{"37":1,"100":2}}],["exteriors",{"2":{"9":1,"53":2,"62":2,"127":1}}],["exterior",{"2":{"3":4,"4":2,"6":10,"34":1,"36":1,"37":1,"39":1,"40":36,"44":2,"45":4,"51":2,"62":3,"63":14,"66":1,"69":2,"72":3,"81":1,"82":1,"85":1,"89":2,"100":9,"106":2,"115":1,"116":3,"119":3,"120":3,"126":6,"127":6,"139":3,"140":1,"142":1,"146":1,"169":2}}],["extending",{"2":{"103":1}}],["extended",{"2":{"66":1}}],["extensions",{"2":{"56":1,"173":1}}],["extension",{"2":{"1":1,"6":1,"40":1,"41":1,"61":1,"71":1,"128":1,"148":3,"149":2,"152":1,"153":1,"156":1,"173":1}}],["extent=geom",{"2":{"167":1}}],["extent=gi",{"2":{"127":3}}],["extent=true",{"2":{"146":1}}],["extent=nothing",{"2":{"136":1}}],["extent=",{"2":{"136":4}}],["extent=false",{"2":{"136":1,"158":1}}],["extent`",{"2":{"133":1,"146":1}}],["extents",{"2":{"4":3,"6":3,"31":5,"47":1,"54":3,"100":5,"103":1,"127":3,"136":2,"146":2,"167":2}}],["extent",{"0":{"146":1},"2":{"0":2,"1":4,"4":3,"6":11,"24":1,"31":2,"39":1,"46":1,"47":1,"54":10,"100":4,"103":2,"127":12,"133":3,"135":4,"136":31,"146":2,"158":1,"165":1,"167":8}}],["exactly",{"2":{"162":1}}],["exactpredicates",{"2":{"7":1,"13":2,"14":2,"31":1}}],["exact",{"2":{"3":5,"6":5,"7":2,"12":1,"13":1,"45":36,"47":6,"50":7,"51":5,"53":5,"54":7,"55":1,"62":5,"63":7,"72":3,"74":1,"75":3,"76":3,"77":1,"82":2,"85":2,"86":1,"89":2,"91":1,"92":3,"93":2,"94":1,"99":2,"100":24,"103":3,"106":2,"108":1,"109":3,"110":1,"111":1,"116":3,"118":1,"119":3,"120":3,"121":1,"127":1,"144":1}}],["examples",{"0":{"151":1,"157":1},"2":{"3":8,"4":1,"6":11,"26":2,"69":1,"72":1,"82":1,"85":1,"86":1,"89":1,"103":1,"106":1,"116":1,"126":2,"167":1}}],["example",{"0":{"39":1,"57":1,"138":1,"144":1,"176":1,"177":1},"1":{"58":1},"2":{"1":3,"3":2,"6":13,"11":1,"20":1,"23":2,"33":1,"36":1,"39":1,"43":1,"44":1,"46":1,"49":1,"50":1,"51":1,"53":1,"54":1,"62":1,"65":1,"68":1,"69":1,"71":1,"81":1,"84":1,"86":1,"88":1,"98":1,"99":1,"100":1,"102":1,"105":1,"115":1,"126":1,"127":8,"129":1,"136":2,"138":1,"140":1,"143":1,"144":1,"147":1,"154":1,"157":1,"158":2,"166":1,"176":1,"178":1}}],["either",{"2":{"1":2,"3":1,"6":4,"22":1,"25":1,"27":1,"45":9,"51":1,"53":1,"54":2,"62":1,"63":1,"65":1,"72":1,"98":1,"100":5,"105":1,"106":1,"116":1,"127":1,"136":3,"141":1,"175":1}}],["lj",{"2":{"127":2}}],["lrs",{"2":{"158":2}}],["lr",{"2":{"127":3,"136":3}}],["lp",{"2":{"100":2}}],["lstart",{"2":{"100":2}}],["ls",{"2":{"100":12}}],["ll",{"2":{"17":1,"39":1,"151":2,"158":1,"170":1,"172":1}}],["l",{"2":{"14":4,"40":6,"86":2,"100":32}}],["lgeos",{"2":{"158":1}}],["lg",{"2":{"13":1,"14":1,"15":2,"60":4,"152":9,"158":17}}],["l305",{"2":{"6":1}}],["loudly",{"2":{"136":1}}],["log10",{"2":{"152":2,"158":4}}],["log",{"2":{"131":3,"132":1,"151":2}}],["location",{"2":{"45":1,"100":6}}],["local",{"2":{"34":3,"37":1,"45":4,"52":1,"63":1,"127":1}}],["loose",{"2":{"137":1}}],["lookup",{"2":{"127":1,"136":1}}],["looks",{"2":{"43":1}}],["look",{"2":{"36":2,"127":2,"138":1,"151":1}}],["looping",{"2":{"127":1}}],["loop",{"2":{"34":1,"40":2,"44":3,"45":8,"47":1,"54":1,"63":1,"100":5,"127":3,"160":1}}],["lower",{"2":{"6":1,"7":1,"127":1,"176":1}}],["lon",{"2":{"6":2,"151":1,"152":2}}],["longitude",{"2":{"170":2}}],["long",{"2":{"6":1,"54":1,"152":1,"177":1}}],["longer",{"2":{"6":3,"150":1,"152":2,"153":1}}],["lots",{"2":{"170":1}}],["lot",{"2":{"6":1,"23":1,"34":1,"37":1,"44":1,"47":1,"66":1,"69":1,"103":1,"129":1,"151":1,"166":2}}],["load",{"2":{"136":2,"158":1,"168":2}}],["loading",{"2":{"41":1,"149":1,"152":1}}],["loads",{"2":{"5":1,"6":1,"40":1}}],["loaded",{"2":{"1":1,"41":3,"148":1,"149":2,"152":2}}],["laptop",{"2":{"177":1}}],["land",{"2":{"170":8}}],["layers",{"2":{"134":1}}],["label",{"2":{"14":4,"15":2,"58":2,"60":1,"65":1,"127":3,"151":2,"157":2,"158":2}}],["labels",{"2":{"13":2,"127":1}}],["lazily",{"2":{"6":1,"131":1,"136":1}}],["latitude",{"2":{"170":2}}],["later",{"2":{"37":1,"60":1,"127":1}}],["lat",{"2":{"6":3,"151":1,"152":3}}],["larger",{"2":{"45":1,"62":1,"162":1}}],["large",{"2":{"6":8,"40":1,"158":2,"173":1,"177":1}}],["lastindex",{"2":{"162":1}}],["last",{"2":{"4":3,"6":3,"9":1,"34":11,"37":2,"39":2,"45":9,"47":4,"66":7,"69":5,"100":20,"108":1,"127":8,"138":1,"145":2,"160":1}}],["lt",{"2":{"6":6,"54":4,"151":1}}],["len",{"2":{"160":7}}],["length",{"2":{"0":1,"5":1,"6":5,"9":1,"18":1,"40":32,"42":1,"43":1,"44":22,"45":11,"47":1,"50":2,"51":2,"53":1,"54":1,"62":1,"63":1,"100":1,"127":10,"136":3,"145":2,"151":1,"159":1,"160":1,"161":1,"162":7}}],["legend",{"2":{"158":4}}],["le",{"2":{"100":10}}],["leaving",{"2":{"138":1}}],["leaf",{"2":{"136":4}}],["leading",{"2":{"169":1}}],["lead",{"2":{"54":1,"138":1}}],["least",{"2":{"3":4,"6":4,"45":1,"54":1,"63":2,"100":14,"103":6,"106":1,"109":3,"110":2,"111":2,"112":1,"113":1,"116":1,"122":1,"126":1}}],["leftover",{"2":{"45":1}}],["left=1",{"2":{"45":1}}],["left",{"2":{"40":1,"45":5,"126":1,"127":2,"160":17,"162":5,"175":1}}],["lets",{"2":{"37":1}}],["let",{"2":{"36":1,"43":1,"100":1,"127":3,"151":1,"169":6,"170":4,"171":3,"172":2,"173":2,"178":1}}],["levels",{"2":{"6":1,"127":1,"134":1,"164":1}}],["level",{"2":{"6":1,"7":1,"9":1,"18":2,"20":1,"29":1,"134":1,"136":2,"137":1,"139":1,"141":4,"142":1,"143":1,"145":2,"171":2}}],["less",{"2":{"3":1,"6":7,"34":1,"37":1,"40":1,"44":1,"47":1,"66":1,"69":1,"86":1,"103":1,"127":1,"158":1,"159":1}}],["l289",{"2":{"6":1}}],["l2",{"2":{"3":4,"4":4,"6":8,"68":4,"69":12,"81":8,"85":2,"88":5,"102":4,"105":3,"106":2,"115":8}}],["l195",{"2":{"6":1}}],["l177",{"2":{"6":1}}],["l1",{"2":{"3":6,"4":4,"6":10,"68":4,"69":12,"71":4,"72":2,"81":8,"84":4,"85":2,"88":5,"102":4,"105":3,"106":2,"115":8}}],["li",{"2":{"127":2}}],["lie",{"2":{"54":1}}],["lies",{"2":{"45":3,"176":1}}],["limitations",{"2":{"54":1}}],["limits",{"2":{"39":1}}],["limited",{"2":{"6":1,"150":1,"153":1}}],["library",{"2":{"50":1,"173":1}}],["libraries",{"2":{"37":1,"143":1,"173":1}}],["libgeos",{"2":{"6":2,"13":1,"14":1,"15":1,"23":1,"37":1,"41":5,"60":1,"128":1,"152":7,"158":4,"166":2}}],["little",{"2":{"26":1}}],["literate",{"2":{"26":1,"31":1,"34":1,"37":1,"40":1,"41":1,"44":1,"45":1,"47":1,"50":1,"52":1,"54":1,"55":1,"61":1,"63":1,"66":1,"69":1,"79":1,"82":1,"85":1,"86":1,"96":1,"99":1,"100":1,"103":1,"113":1,"123":1,"126":1,"127":1,"128":1,"136":1,"139":1,"142":1,"145":1,"146":1,"147":1,"149":1,"153":1,"154":1,"155":1,"162":1,"166":1,"167":1}}],["lift",{"2":{"14":2}}],["lin",{"2":{"152":5}}],["linked",{"2":{"56":1}}],["linrange",{"2":{"13":2,"14":5,"39":2,"65":1,"127":2,"152":1,"158":2}}],["linering",{"2":{"170":1}}],["linewidth",{"2":{"36":1,"169":1}}],["linesegment",{"2":{"126":2,"153":1}}],["lines",{"0":{"75":1,"92":1,"109":1,"119":1},"2":{"3":1,"4":4,"6":5,"45":3,"49":1,"54":9,"58":1,"59":2,"60":2,"65":1,"68":4,"69":4,"71":1,"72":1,"81":3,"84":2,"86":1,"88":3,"98":3,"100":2,"102":4,"103":2,"105":4,"115":3,"116":1,"127":3,"156":1,"169":4,"174":2}}],["linestrings",{"2":{"4":2,"6":2,"9":1,"69":2,"125":1,"137":1,"169":1}}],["linestringtrait",{"2":{"3":2,"4":4,"6":9,"11":3,"34":1,"44":4,"53":2,"66":2,"69":8,"74":1,"75":4,"76":1,"86":6,"91":1,"92":5,"103":4,"108":1,"109":4,"110":1,"118":1,"119":4,"120":1,"134":1,"141":2,"142":1,"153":2,"164":2}}],["linestring",{"2":{"3":5,"4":6,"6":15,"18":1,"20":1,"34":2,"44":2,"66":4,"68":2,"69":2,"74":1,"75":3,"81":2,"82":1,"85":2,"88":2,"89":1,"91":1,"92":4,"100":2,"102":2,"108":1,"109":3,"110":1,"115":2,"116":1,"118":1,"119":4,"120":1,"126":7,"136":5,"167":4,"169":5,"174":1}}],["linetrait",{"2":{"3":2,"4":4,"6":6,"34":1,"45":2,"50":2,"53":2,"66":2,"69":8,"74":1,"75":4,"76":1,"91":1,"92":5,"103":4,"108":1,"109":4,"110":1,"118":1,"119":4,"120":1}}],["line2",{"2":{"3":3,"6":7,"53":2,"54":2,"86":5,"98":3,"99":2,"103":3,"126":5}}],["line1",{"2":{"3":4,"6":8,"53":2,"54":2,"86":5,"98":3,"99":2,"103":5,"126":5}}],["linea",{"2":{"1":1,"6":1,"154":1}}],["linearmap",{"2":{"158":1}}],["linearalgebra",{"2":{"31":1}}],["linear",{"2":{"4":7,"6":10,"9":1,"37":2,"40":1,"43":1,"44":3,"47":1,"54":1,"66":5,"69":8,"76":1,"100":2,"109":1,"110":2,"119":1,"125":1,"136":2,"139":3,"151":5,"152":3,"153":4}}],["linearr",{"2":{"1":1,"6":1,"154":1}}],["linearrings",{"2":{"9":1,"93":1,"127":6,"137":1,"169":1}}],["linearringtrait",{"2":{"4":4,"6":6,"11":3,"34":3,"37":2,"44":4,"45":4,"53":2,"66":2,"69":8,"74":1,"75":1,"76":4,"91":1,"92":2,"93":3,"108":1,"109":1,"110":4,"118":1,"119":1,"120":4,"141":1,"153":2,"158":1,"164":2}}],["linearring",{"2":{"1":10,"3":2,"4":1,"6":15,"34":2,"44":2,"45":2,"61":1,"62":2,"63":1,"66":1,"74":1,"76":3,"91":1,"92":1,"93":2,"100":2,"103":4,"108":1,"109":1,"110":3,"118":1,"120":4,"126":1,"127":3,"136":7,"137":1,"138":6,"139":1,"144":13,"154":8,"158":1,"167":4,"169":24,"170":6,"171":8,"176":2}}],["linearsegments",{"2":{"0":1,"6":4,"150":1,"151":1,"152":3,"153":5}}],["line",{"0":{"100":1},"2":{"0":1,"3":13,"4":9,"6":52,"23":1,"33":2,"34":7,"43":3,"44":10,"45":12,"47":8,"49":6,"50":18,"53":8,"54":67,"63":6,"66":11,"69":5,"71":2,"72":1,"74":2,"75":11,"76":8,"82":2,"84":1,"86":11,"89":2,"91":1,"92":9,"93":4,"98":2,"99":2,"100":141,"102":3,"103":12,"105":2,"106":2,"108":1,"109":10,"110":3,"116":2,"118":2,"119":10,"120":7,"126":6,"127":2,"153":1,"158":1,"159":1,"160":4,"161":1,"167":3,"169":3}}],["lineorientation",{"2":{"0":1,"6":2,"53":2}}],["lists",{"2":{"20":1,"45":3,"103":1}}],["listed",{"2":{"6":1,"34":1,"158":1}}],["list",{"2":{"6":16,"9":1,"34":20,"45":233,"50":20,"51":14,"52":8,"53":13,"54":5,"62":13,"63":1,"177":2}}],["likely",{"2":{"134":1}}],["like",{"0":{"55":1},"2":{"1":2,"6":9,"17":1,"18":2,"19":1,"20":1,"23":1,"24":1,"29":1,"37":1,"39":1,"40":1,"43":1,"47":1,"51":1,"53":1,"61":1,"62":1,"65":1,"66":1,"69":1,"129":2,"136":2,"141":2,"142":1,"150":1,"151":1,"164":2,"170":2}}],["iah",{"2":{"174":2}}],["image",{"2":{"127":1}}],["impossible",{"2":{"50":1,"102":1}}],["important",{"2":{"151":1}}],["import",{"2":{"1":3,"6":5,"13":2,"14":2,"15":1,"31":7,"33":1,"36":1,"41":1,"43":1,"46":1,"50":1,"51":1,"53":1,"54":1,"62":1,"65":1,"68":1,"69":1,"71":1,"72":1,"81":1,"82":1,"84":1,"85":1,"86":1,"88":1,"89":1,"98":1,"99":1,"102":1,"103":1,"105":1,"106":1,"115":1,"116":1,"126":3,"136":2,"149":1,"152":2,"154":2,"157":2,"158":3,"167":1,"168":5}}],["implements",{"2":{"166":1}}],["implementing",{"2":{"6":1,"158":1}}],["implement",{"2":{"6":1,"17":1,"23":1,"34":1,"37":1,"40":1,"44":1,"47":1,"61":1,"66":1,"69":1,"72":1,"89":1,"103":1,"106":1,"116":1,"129":1,"140":1,"141":3,"142":1}}],["implementation",{"0":{"34":1,"37":1,"44":1,"47":1,"50":1,"61":1,"66":1,"69":1,"72":1,"82":1,"85":1,"89":1,"99":1,"103":1,"106":1,"116":1,"133":1,"139":1,"145":1,"153":1},"2":{"6":1,"34":3,"37":3,"40":1,"44":3,"47":3,"62":1,"66":3,"69":3,"72":2,"82":1,"85":1,"89":2,"99":1,"103":3,"106":2,"116":2,"127":2,"128":1,"148":1,"158":1,"166":1}}],["implementations",{"2":{"6":1,"72":1,"89":1,"106":1,"116":1,"128":1,"156":1,"166":3}}],["implemented",{"0":{"128":1},"2":{"1":1,"6":2,"31":1,"37":1,"40":3,"50":2,"52":2,"54":2,"61":1,"63":2,"66":2,"128":1,"129":2,"141":2,"148":1,"156":1}}],["improvements",{"2":{"9":2,"10":1}}],["improve",{"2":{"4":1,"6":1,"146":1}}],["i=2",{"2":{"126":1}}],["ipoints",{"2":{"100":4}}],["ip",{"2":{"69":2}}],["ipt",{"2":{"45":8}}],["ihole",{"2":{"69":2}}],["ih",{"2":{"63":22}}],["i2",{"2":{"47":2}}],["i1",{"2":{"47":2}}],["ii",{"2":{"45":8}}],["io",{"2":{"41":5,"149":5,"152":5}}],["i+1",{"2":{"40":8,"127":1,"160":2,"162":1}}],["i",{"2":{"9":1,"13":4,"22":1,"34":14,"37":1,"40":16,"45":28,"47":4,"52":2,"62":2,"63":4,"66":2,"69":8,"86":7,"100":28,"126":14,"127":17,"136":16,"153":2,"159":3,"160":12,"162":28,"167":2,"169":2,"170":1,"177":3}}],["id",{"2":{"172":1}}],["identical",{"2":{"136":1,"144":1}}],["identity",{"2":{"127":4,"136":2,"146":1}}],["ideal",{"2":{"127":1}}],["idea",{"2":{"6":1,"20":1,"25":1,"27":1,"40":1,"129":1}}],["idx`",{"2":{"45":1}}],["idx",{"2":{"34":6,"45":167,"47":9,"50":23,"51":5,"53":5,"62":2,"145":34,"160":51}}],["id=",{"2":{"6":2}}],["ignored",{"2":{"6":1,"127":1}}],["ignore",{"2":{"6":1,"127":2}}],["i>",{"2":{"6":2}}],["i>method",{"2":{"6":2}}],["innerjoin",{"2":{"176":1,"177":1}}],["inner",{"2":{"100":6,"136":5,"175":1}}],["inline",{"2":{"100":4,"126":1,"136":22,"165":2}}],["in=1",{"2":{"100":1}}],["in`",{"2":{"100":1}}],["inject",{"0":{"55":1},"2":{"149":1}}],["inaccuracies",{"2":{"54":1}}],["ind",{"2":{"177":2}}],["individual",{"2":{"171":1}}],["indicate",{"2":{"136":1}}],["indicates",{"2":{"20":1}}],["indices",{"2":{"45":4,"136":4,"162":16}}],["indeed",{"2":{"138":1}}],["index",{"2":{"40":8,"45":11,"100":1,"136":1,"160":1}}],["inds",{"2":{"127":3}}],["inplace",{"2":{"40":1}}],["inputs",{"2":{"6":1,"45":1,"69":1,"82":1,"85":1,"99":1,"162":1}}],["input",{"2":{"6":12,"34":1,"50":1,"51":1,"53":1,"54":1,"62":1,"127":1,"129":1,"152":3,"153":2,"159":1,"160":1,"161":1,"170":1}}],["inbounds",{"2":{"40":16,"66":5,"100":1}}],["inspiration",{"2":{"50":1}}],["inspired",{"2":{"49":1,"50":2}}],["inside",{"2":{"34":3,"43":1,"45":3,"47":1,"51":1,"52":1,"53":1,"54":1,"62":1,"63":2,"65":3,"66":1,"74":1,"100":1,"115":1,"118":1,"127":2}}],["insertion",{"2":{"45":1}}],["insert",{"2":{"34":1,"160":1}}],["instability",{"2":{"24":2}}],["instantiating",{"2":{"20":1}}],["instead",{"2":{"18":1,"24":1}}],["instructs",{"2":{"6":1,"166":2}}],["init=nothing",{"2":{"136":1}}],["init=typemax",{"2":{"66":2}}],["init=zero",{"2":{"37":1,"47":1}}],["initial",{"2":{"54":2,"152":1}}],["initially",{"2":{"45":1}}],["initialize",{"2":{"40":3,"44":2,"45":1,"54":1}}],["init",{"2":{"19":1,"31":1,"34":1,"44":2,"136":30,"152":4}}],["incorrect",{"2":{"137":1,"138":1}}],["increase",{"2":{"45":1,"100":1}}],["increasing",{"2":{"6":1,"158":1}}],["increment",{"2":{"40":5}}],["including",{"2":{"34":1,"45":2,"54":1,"66":1,"74":1,"75":1,"76":1,"77":1,"100":2}}],["include",{"2":{"31":41,"34":1,"45":1,"56":1,"66":2,"158":2,"165":1,"171":2,"172":1}}],["included",{"2":{"6":2,"63":2,"142":2,"145":2,"171":1}}],["includes",{"2":{"4":2,"6":2,"63":1,"66":2,"69":1,"100":1}}],["incircle",{"0":{"16":1}}],["investigate",{"2":{"127":1}}],["investigating",{"0":{"60":1}}],["inverted",{"2":{"6":1,"61":1}}],["invalid",{"2":{"20":1,"52":2,"138":1,"143":1,"144":1}}],["invoke",{"2":{"20":1}}],["involved",{"2":{"129":1}}],["involve",{"2":{"20":1}}],["involving",{"2":{"6":3,"51":1,"53":1,"62":1}}],["invocation",{"2":{"18":1}}],["ing",{"2":{"1":1,"6":2,"40":1,"154":1}}],["intr",{"2":{"45":28,"47":9,"50":16,"54":8}}],["intr2",{"2":{"45":2,"54":14}}],["intr1",{"2":{"45":3,"54":21,"100":2}}],["intrs",{"2":{"45":10,"54":5}}],["introduction",{"0":{"27":1},"1":{"28":1,"29":1,"30":1}}],["introducing",{"2":{"24":1}}],["introduces",{"2":{"24":1}}],["int",{"2":{"45":6,"63":7,"86":7,"153":1,"158":1,"160":5,"161":1,"162":1}}],["integrate",{"2":{"37":1}}],["integrating",{"2":{"37":1}}],["integrals",{"2":{"36":1}}],["integral",{"2":{"36":1}}],["intended",{"2":{"6":1,"141":2,"142":1}}],["intermediate",{"2":{"47":1}}],["inter2",{"2":{"47":15}}],["inter1",{"2":{"47":23}}],["interpreted",{"2":{"40":1}}],["interpolation",{"2":{"5":1,"6":1,"39":1,"40":2,"150":1}}],["interpolated",{"2":{"5":3,"6":3,"40":17,"150":1}}],["interpolate",{"2":{"0":2,"5":2,"6":4,"38":1,"39":2,"40":25}}],["interest",{"2":{"40":1,"66":1}}],["internal",{"2":{"39":1}}],["internals",{"2":{"24":1}}],["inter",{"2":{"6":3,"45":21,"50":1,"51":1,"53":5,"54":4}}],["interface",{"0":{"141":1},"2":{"6":3,"20":1,"56":1,"61":1,"136":1,"140":1,"141":4,"142":1,"158":1,"170":1}}],["interacted",{"2":{"100":1}}],["interaction",{"0":{"100":1},"2":{"100":2}}],["interactions",{"2":{"45":1,"63":3,"100":15}}],["interactive",{"2":{"13":1,"14":1}}],["interacting",{"2":{"6":1,"53":1,"100":2}}],["interacts",{"2":{"3":1,"6":1,"100":3,"105":1,"106":1,"109":3,"110":1,"111":1}}],["interact",{"2":{"3":2,"6":2,"62":1,"63":1,"88":1,"99":1,"100":5,"105":1,"106":1,"108":1,"109":2,"110":2,"111":1}}],["interior",{"2":{"3":6,"6":7,"34":9,"36":1,"40":7,"44":5,"45":1,"63":18,"71":1,"72":3,"75":5,"76":1,"77":2,"81":1,"82":1,"84":2,"85":1,"86":1,"89":2,"91":2,"92":6,"93":3,"100":15,"105":1,"106":3,"109":1,"110":2,"111":2,"115":1,"116":3,"121":2,"126":2,"139":1,"142":1}}],["interiors",{"2":{"3":6,"6":7,"40":20,"71":1,"81":1,"82":1,"84":1,"85":1,"88":1,"89":1,"94":1,"98":1,"99":1,"100":5,"105":1,"106":1,"108":1,"109":2,"110":1,"115":1,"116":1,"119":3,"120":3}}],["intersectingpolygons",{"2":{"6":3}}],["intersecting",{"0":{"143":1},"1":{"144":1,"145":1},"2":{"6":4,"31":1,"45":2,"63":2,"142":4,"143":1,"145":4}}],["intersections",{"0":{"54":1},"2":{"45":2,"47":2,"52":1,"53":2,"54":1,"63":1,"100":2}}],["intersection",{"0":{"53":1,"97":1},"1":{"98":1,"99":1},"2":{"0":2,"3":3,"6":19,"9":1,"15":4,"23":1,"31":1,"45":38,"47":6,"50":3,"51":4,"52":4,"53":15,"54":73,"62":2,"63":2,"86":2,"98":1,"100":6,"103":5}}],["intersect",{"2":{"3":8,"6":11,"45":4,"47":3,"51":2,"53":1,"54":1,"62":1,"63":5,"71":1,"72":1,"81":1,"82":2,"85":1,"89":1,"92":1,"94":1,"98":2,"100":4,"103":1,"115":1,"116":2,"119":3,"120":3,"144":1,"145":4}}],["intersects",{"0":{"98":1},"2":{"0":2,"3":3,"6":6,"31":1,"45":1,"54":2,"63":2,"86":2,"97":1,"98":4,"99":4,"103":5,"121":1,"145":2,"175":1}}],["into",{"2":{"5":1,"6":7,"17":1,"26":1,"34":1,"37":1,"40":1,"44":4,"45":2,"50":1,"51":1,"53":1,"100":1,"127":4,"131":1,"136":6,"145":1,"158":1,"164":1,"167":2,"169":2,"175":1}}],["int64",{"2":{"1":6,"6":6,"138":6,"154":6,"159":1,"160":1,"162":1,"169":14}}],["info",{"2":{"150":1}}],["information",{"0":{"171":1},"2":{"6":1,"29":1,"40":1,"45":2,"46":1,"54":1,"61":1,"100":1,"168":1,"171":3,"173":2}}],["infinity",{"2":{"100":1,"103":1}}],["inf",{"2":{"1":1,"9":1,"50":2,"159":1,"162":3}}],["in",{"0":{"23":1},"2":{"1":6,"3":3,"4":1,"5":4,"6":51,"7":1,"9":2,"13":6,"14":2,"17":2,"18":4,"20":1,"23":3,"24":2,"25":1,"26":3,"27":1,"29":1,"30":1,"31":2,"34":7,"36":1,"37":3,"38":2,"40":22,"41":1,"43":2,"44":5,"45":72,"47":31,"50":6,"51":9,"52":3,"53":5,"54":29,"60":1,"61":3,"62":11,"63":28,"65":6,"66":6,"68":1,"69":17,"72":10,"75":1,"76":1,"77":1,"78":1,"79":1,"81":2,"82":1,"85":1,"86":7,"89":9,"91":1,"92":1,"93":1,"95":1,"96":1,"98":2,"99":1,"100":135,"102":1,"103":11,"105":1,"106":11,"110":1,"112":1,"113":1,"115":1,"116":10,"119":3,"120":3,"122":1,"123":1,"126":4,"127":10,"128":3,"129":1,"131":3,"134":2,"135":1,"136":12,"140":1,"141":1,"142":2,"143":1,"145":7,"146":1,"147":2,"148":3,"149":1,"150":2,"151":2,"152":14,"153":7,"154":2,"155":1,"156":1,"158":5,"159":2,"160":4,"161":1,"162":5,"163":4,"164":1,"165":1,"166":4,"167":8,"168":1,"169":2,"170":6,"173":2,"175":4,"176":3,"177":1,"178":1}}],["itererable",{"2":{"167":1}}],["iter",{"2":{"136":31}}],["iterate",{"2":{"40":2,"134":1,"136":5}}],["iteration",{"2":{"37":1}}],["iterators",{"2":{"13":1,"40":1,"45":5,"47":3,"53":1,"63":2,"127":1,"136":11,"145":6,"153":1}}],["iterator",{"2":{"6":2,"45":4,"53":2,"131":2,"136":2}}],["iterabletype",{"2":{"136":10}}],["iterable",{"2":{"4":1,"6":3,"18":1,"37":1,"47":1,"61":1,"131":1,"136":37,"169":1}}],["iterables",{"2":{"1":2,"6":2,"22":1,"136":6}}],["ith",{"2":{"45":3,"63":7}}],["itself",{"2":{"47":1,"126":1,"134":1}}],["its",{"2":{"5":1,"6":10,"18":1,"36":1,"40":1,"45":2,"47":4,"63":1,"75":1,"131":1,"136":1,"140":1,"158":1,"159":1,"160":1,"161":3,"175":1}}],["it",{"2":{"1":4,"4":1,"6":19,"9":1,"18":11,"19":2,"20":1,"22":1,"29":3,"30":1,"33":1,"34":1,"36":2,"37":3,"39":1,"41":1,"44":2,"45":2,"46":1,"47":2,"51":1,"52":1,"53":1,"54":4,"60":2,"61":2,"62":1,"63":3,"66":3,"69":1,"71":2,"74":3,"91":3,"100":14,"102":1,"103":1,"108":2,"118":3,"125":1,"126":2,"127":4,"129":3,"131":3,"134":3,"135":1,"136":15,"138":1,"139":1,"140":1,"142":1,"143":1,"148":5,"151":2,"152":1,"158":1,"160":1,"163":1,"164":2,"165":1,"166":7,"170":3,"171":3,"173":3,"177":2,"178":2}}],["iff",{"2":{"136":1}}],["if",{"0":{"55":1},"2":{"1":5,"3":17,"4":19,"5":1,"6":74,"18":1,"22":2,"33":1,"34":15,"36":1,"37":6,"40":5,"41":3,"44":1,"45":95,"47":36,"50":8,"51":13,"52":12,"53":9,"54":44,"61":3,"62":10,"63":22,"65":2,"66":8,"68":2,"69":35,"71":1,"72":2,"74":4,"75":3,"76":3,"77":2,"78":1,"79":1,"81":1,"82":1,"84":1,"85":1,"86":9,"88":1,"89":3,"91":5,"92":4,"93":2,"94":2,"95":1,"96":1,"98":1,"99":1,"100":132,"102":4,"103":16,"105":1,"106":2,"108":4,"109":3,"110":2,"111":2,"112":1,"113":1,"115":1,"116":2,"118":5,"119":3,"120":3,"121":1,"122":1,"123":1,"126":5,"127":35,"131":1,"134":1,"136":21,"139":1,"141":1,"142":2,"143":1,"145":12,"146":1,"147":1,"148":3,"149":2,"152":6,"153":2,"154":1,"155":1,"158":1,"160":12,"162":12,"165":1,"166":2,"170":1,"173":1,"176":2,"177":1}}],["isolate",{"2":{"158":1}}],["isodd",{"2":{"50":1}}],["istable",{"2":{"136":2}}],["isequal",{"2":{"127":1}}],["iseven",{"2":{"100":1}}],["isempty",{"2":{"37":1,"40":4,"47":1,"51":1,"52":2,"53":1,"127":1,"141":1,"160":1}}],["isparallel",{"2":{"100":1,"126":8}}],["is3d",{"2":{"69":1,"136":1,"147":1,"154":1,"155":1,"167":10}}],["issue",{"2":{"45":1}}],["issues",{"2":{"25":1,"27":1}}],["isa",{"2":{"18":1,"40":9,"136":4,"167":1}}],["isnothing",{"2":{"41":1,"45":9,"50":1,"52":2,"54":2,"63":2,"69":1,"127":1,"149":1,"152":1,"158":1,"159":1,"160":5,"161":1,"162":6}}],["isn",{"2":{"6":1,"37":1,"45":4,"47":1,"50":1,"52":1,"54":3,"63":2,"66":3,"69":1,"71":1,"100":9,"103":1,"158":1,"166":1}}],["isconcave",{"0":{"126":1},"2":{"0":1,"6":2,"60":1,"124":1,"126":3}}],["isclockwise",{"0":{"125":1},"2":{"0":1,"6":2,"47":1,"124":1,"126":5,"127":2}}],["is",{"0":{"25":1,"33":1,"36":2,"43":1,"46":1,"49":1,"65":2,"68":1,"71":1,"81":1,"84":1,"88":1,"98":1,"102":1,"105":1,"115":1,"134":1},"2":{"0":1,"1":10,"3":8,"4":43,"5":1,"6":108,"9":3,"11":1,"13":1,"14":1,"18":3,"19":1,"20":1,"22":3,"23":2,"25":2,"27":2,"33":1,"34":19,"36":7,"37":19,"38":2,"39":2,"40":15,"41":3,"43":2,"44":5,"45":82,"46":3,"47":22,"49":1,"50":2,"51":4,"52":13,"53":4,"54":40,"56":1,"60":5,"61":4,"62":7,"63":20,"65":8,"66":23,"69":13,"71":4,"72":4,"74":7,"75":3,"76":3,"77":1,"78":1,"79":1,"81":2,"82":3,"85":3,"86":3,"88":1,"89":5,"91":9,"92":4,"93":2,"94":1,"95":1,"96":1,"99":2,"100":91,"102":3,"103":12,"106":4,"108":2,"115":4,"116":5,"118":8,"119":3,"120":3,"121":1,"122":2,"123":1,"125":2,"126":7,"127":11,"128":1,"129":2,"131":1,"134":3,"135":1,"136":24,"137":7,"138":2,"139":1,"140":3,"141":2,"142":1,"143":4,"144":1,"145":2,"147":1,"148":7,"149":2,"150":3,"151":3,"152":9,"153":6,"154":2,"157":1,"158":4,"159":1,"160":2,"161":1,"163":1,"164":1,"165":1,"166":3,"169":4,"170":5,"171":3,"172":1,"173":3,"175":2,"176":5,"177":2}}],["cpu",{"2":{"177":1}}],["cp",{"2":{"174":1}}],["cy",{"2":{"126":2}}],["cyan",{"2":{"41":1,"149":1,"152":1}}],["cx",{"2":{"126":2}}],["cdot",{"2":{"126":1}}],["cs",{"2":{"100":9}}],["cshape",{"2":{"43":3}}],["cw",{"2":{"47":2}}],["cb",{"2":{"39":1,"60":1,"127":1}}],["cgrad",{"2":{"39":1}}],["cgal",{"2":{"39":1}}],["c",{"2":{"37":1,"43":1,"47":4,"50":5,"55":3,"100":24,"152":1}}],["cleaner",{"2":{"61":1}}],["cleanest",{"2":{"61":1}}],["clear",{"2":{"46":1}}],["clearly",{"2":{"33":1,"36":1,"65":1}}],["clamped",{"2":{"54":18}}],["clamp",{"2":{"34":1,"54":1}}],["classified",{"2":{"45":1}}],["classify",{"2":{"45":4}}],["class",{"2":{"6":1,"127":1}}],["clipping",{"0":{"45":1,"51":1,"52":1,"54":1,"62":1,"63":1},"2":{"6":1,"9":1,"31":8,"45":9,"50":3,"51":1,"53":1,"62":1,"143":1}}],["closure",{"2":{"136":2}}],["closing",{"2":{"34":1}}],["close",{"2":{"34":5,"45":2,"47":1,"50":1,"54":1,"66":9,"127":1,"138":1,"139":4}}],["closest",{"2":{"4":3,"6":3,"54":2,"65":1,"66":6}}],["closed2",{"2":{"69":2}}],["closed1",{"2":{"69":2}}],["closed",{"0":{"137":1},"1":{"138":1,"139":1},"2":{"4":4,"6":11,"9":1,"31":1,"34":6,"37":3,"44":3,"45":1,"47":1,"54":1,"63":3,"69":21,"74":2,"75":5,"76":5,"91":2,"92":5,"93":3,"100":52,"109":5,"110":1,"118":3,"119":5,"120":5,"126":1,"127":1,"137":1,"138":1,"139":2,"140":1,"142":1,"169":1}}],["closedring",{"2":{"0":1,"6":1,"137":1,"138":1,"139":4,"140":1,"141":1,"142":1}}],["clockwise",{"2":{"4":1,"6":4,"9":1,"36":1,"37":1,"47":7,"60":1,"125":2,"126":3,"127":1}}],["ceil",{"2":{"153":1}}],["ce",{"2":{"100":11}}],["certainly",{"2":{"54":1}}],["certain",{"2":{"17":1,"18":1,"26":1,"29":1}}],["central",{"2":{"45":1}}],["centroids",{"2":{"43":1,"44":1}}],["centroid",{"0":{"42":1,"43":1},"1":{"43":1,"44":1},"2":{"0":4,"4":2,"6":6,"31":1,"42":3,"43":4,"44":38,"129":1,"158":4}}],["cent",{"2":{"43":2}}],["centered",{"2":{"45":1}}],["center",{"2":{"6":1,"43":1,"127":1}}],["cells",{"2":{"127":1}}],["cell",{"2":{"6":4,"46":3,"47":28,"127":2}}],["chunks",{"2":{"136":8}}],["chunk",{"2":{"136":12}}],["chose",{"2":{"24":1,"127":1}}],["choose",{"2":{"6":1,"61":1,"127":2}}],["changes",{"2":{"45":1}}],["changed",{"2":{"45":1}}],["change",{"2":{"24":1,"45":1,"60":1}}],["chain=2",{"2":{"45":1}}],["chain=1",{"2":{"45":1}}],["chain",{"2":{"45":66,"52":3,"54":4,"60":2,"63":4}}],["chains",{"2":{"20":1,"45":1}}],["chairmarks",{"2":{"13":1,"152":1,"158":1}}],["children",{"2":{"158":1}}],["child",{"2":{"6":2,"131":2,"136":7}}],["checkargs",{"2":{"159":1,"160":1,"161":1,"162":1}}],["checking",{"2":{"69":1,"160":1}}],["checks",{"0":{"86":1,"97":1},"1":{"98":1,"99":1},"2":{"41":1,"45":1,"54":1,"68":1,"71":1,"81":1,"84":1,"88":1,"98":1,"100":5,"102":1,"103":1,"105":1,"115":1,"176":1}}],["check",{"2":{"4":1,"6":1,"7":1,"44":1,"45":8,"47":3,"50":1,"51":1,"54":4,"55":1,"62":1,"69":8,"100":11,"127":5,"131":3,"132":1,"144":1,"146":1,"151":2,"160":1,"162":1}}],["checked",{"2":{"4":1,"6":1,"45":1,"54":1,"60":1,"100":1,"146":1}}],["c2",{"2":{"6":3,"15":2,"66":3,"69":14,"127":21}}],["c1",{"2":{"6":3,"15":2,"66":4,"69":13,"127":26}}],["ctor",{"2":{"1":1,"6":1,"154":1}}],["categorize",{"2":{"50":1}}],["categorical",{"2":{"39":1}}],["came",{"2":{"50":1}}],["case",{"2":{"34":1,"38":2,"44":1,"45":1,"51":1,"54":2,"63":1,"100":16,"136":1,"178":1}}],["cases",{"2":{"6":1,"40":1,"50":2,"100":3,"134":1,"136":5}}],["cause",{"2":{"18":1,"23":1,"160":1}}],["careful",{"2":{"40":1,"134":1}}],["care",{"2":{"17":1}}],["carried",{"2":{"6":1,"166":1}}],["cairomakie",{"2":{"13":1,"33":1,"36":1,"39":2,"43":1,"46":1,"49":1,"58":1,"59":1,"60":1,"65":1,"68":1,"71":1,"81":1,"84":1,"88":1,"98":1,"102":1,"105":1,"115":1,"151":1,"152":1,"158":1,"168":1,"174":1,"176":1,"177":1}}],["california",{"2":{"177":1}}],["callable",{"2":{"127":4,"141":1}}],["calling",{"2":{"45":2,"136":1}}],["calls",{"2":{"45":1,"54":1,"63":1,"66":1,"72":1,"89":1,"106":1,"116":1,"134":1,"136":1,"153":1}}],["call",{"2":{"18":1,"24":1,"37":1,"44":1,"136":4,"156":1}}],["called",{"2":{"6":2,"44":3,"45":1,"136":1,"139":1,"141":1,"142":1,"166":1,"170":1}}],["calculation",{"2":{"54":1}}],["calculations",{"2":{"6":1,"25":2,"27":2,"54":1,"152":1}}],["calculating",{"2":{"4":1,"6":1,"18":1,"45":1,"146":1}}],["calculated",{"2":{"6":1,"43":2,"47":1,"54":2,"66":1,"136":4}}],["calculates",{"2":{"4":2,"6":6,"37":1,"40":2,"47":1,"54":2,"62":1,"66":2,"152":1,"161":1}}],["calculate",{"2":{"1":2,"5":1,"6":6,"11":1,"34":3,"40":3,"44":1,"47":1,"54":1,"100":1,"127":1,"133":1,"136":3}}],["calc",{"2":{"1":2,"6":4,"24":1,"34":4,"133":1,"135":1,"136":19,"146":1,"158":2,"165":1}}],["cache",{"2":{"6":1,"40":1}}],["cant",{"2":{"69":1,"127":1,"167":1}}],["cannot",{"2":{"3":3,"4":2,"6":5,"37":1,"69":1,"74":1,"77":1,"103":2,"106":1,"108":2,"110":1,"121":1}}],["can",{"2":{"1":1,"4":2,"6":16,"7":2,"9":1,"13":1,"14":1,"24":1,"26":1,"31":1,"34":1,"37":1,"38":2,"39":1,"40":3,"41":1,"44":1,"45":3,"47":1,"51":3,"53":3,"54":1,"60":1,"61":2,"62":3,"63":1,"68":1,"69":3,"71":1,"81":1,"86":1,"88":1,"98":2,"100":23,"102":2,"103":3,"105":1,"109":1,"110":1,"115":1,"118":1,"119":1,"120":1,"127":1,"128":1,"129":1,"131":1,"135":1,"136":7,"138":2,"139":1,"142":1,"143":2,"144":1,"146":1,"149":1,"151":1,"152":2,"158":2,"166":1,"169":6,"170":1,"171":3,"173":3,"175":3,"176":3}}],["creation",{"2":{"169":1,"171":1}}],["creating",{"0":{"168":1,"169":1,"172":1},"1":{"169":1,"170":1,"171":1,"172":1,"173":1},"2":{"100":1}}],["creates",{"2":{"7":1,"45":3}}],["create",{"0":{"171":1},"2":{"6":2,"13":2,"14":1,"45":1,"50":1,"54":2,"61":1,"127":2,"136":1,"142":2,"143":3,"145":2,"168":2,"169":4,"170":5,"171":3,"172":1,"173":1,"176":1}}],["created",{"2":{"4":2,"6":2,"45":1,"66":3}}],["criteria",{"2":{"72":2,"89":2,"106":2,"116":2,"160":3}}],["cropping",{"2":{"39":2}}],["cross=1",{"2":{"53":1}}],["cross`",{"2":{"53":1}}],["crossings",{"2":{"45":3,"100":1}}],["crossing",{"0":{"86":1},"2":{"6":2,"45":81,"51":1,"52":7,"53":3,"54":7,"62":1,"63":6,"72":1,"86":1,"100":1,"116":1}}],["cross",{"0":{"113":1},"2":{"6":1,"9":1,"34":3,"45":13,"50":14,"51":2,"52":1,"53":2,"54":10,"55":4,"62":2,"63":1,"72":1,"86":2,"89":1,"100":17,"103":2,"106":1,"116":1,"126":3}}],["crosses",{"2":{"0":2,"3":2,"6":3,"31":1,"45":1,"50":1,"86":26,"100":2,"175":1}}],["crc",{"2":{"6":1,"40":1}}],["crs2",{"2":{"170":2}}],["crs1",{"2":{"170":2,"171":1}}],["crs`",{"2":{"148":6}}],["crs=geom",{"2":{"167":1}}],["crs=gi",{"2":{"136":8}}],["crs=nothing",{"2":{"136":1,"146":1,"158":1}}],["crs",{"0":{"170":1},"2":{"1":16,"4":2,"6":10,"61":1,"127":10,"133":2,"135":3,"136":31,"146":1,"148":7,"158":1,"167":1,"168":1,"170":13,"171":7,"173":1}}],["customize",{"2":{"136":2}}],["custom",{"0":{"178":1},"2":{"6":1,"40":1,"178":2}}],["curr^2",{"2":{"34":2}}],["curr",{"2":{"34":8,"45":116,"50":9,"63":3,"145":26}}],["currentnode",{"2":{"127":8}}],["current",{"2":{"34":1,"40":8,"45":3,"50":2,"52":1,"54":1,"63":6,"127":2,"145":3}}],["currently",{"2":{"5":1,"6":3,"23":1,"40":1,"45":1,"50":1,"52":2,"127":1,"136":1}}],["curve",{"0":{"100":1},"2":{"3":1,"4":7,"6":18,"34":6,"37":7,"45":5,"47":3,"53":7,"65":1,"66":22,"69":6,"72":2,"74":4,"75":9,"76":9,"89":1,"91":4,"92":6,"93":3,"100":152,"103":1,"106":1,"109":6,"111":3,"116":1,"118":4,"119":6,"120":6}}],["curves",{"2":{"0":1,"3":1,"6":5,"37":3,"47":3,"54":1,"65":1,"66":1,"69":13,"77":1,"100":1,"103":1,"121":1,"158":2}}],["cutpolygon",{"2":{"49":1}}],["cuts",{"2":{"49":1}}],["cutting",{"0":{"48":1},"1":{"49":1,"50":1},"2":{"45":1,"50":2}}],["cut",{"0":{"49":1},"2":{"0":1,"6":6,"31":1,"40":1,"48":1,"49":5,"50":22,"100":1}}],["coastlines",{"2":{"174":1}}],["coarse",{"2":{"6":1,"150":1,"153":1}}],["cos",{"2":{"169":3,"170":1,"171":2}}],["copy",{"2":{"141":1,"162":1}}],["coors1",{"2":{"126":2}}],["coors2",{"2":{"126":3}}],["coord",{"2":{"153":6}}],["coords",{"2":{"50":9,"153":8}}],["coordinatetransformations",{"2":{"1":2,"6":2,"154":2,"158":1,"168":1,"169":5,"171":2}}],["coordinate",{"0":{"40":1,"147":1,"170":1,"171":1},"2":{"1":4,"5":5,"6":7,"25":1,"27":1,"39":2,"40":10,"136":1,"148":4,"153":1,"168":3,"170":1}}],["coordinates",{"0":{"5":1,"38":1},"1":{"39":1,"40":1},"2":{"0":4,"1":1,"4":2,"5":7,"6":20,"37":2,"38":8,"40":25,"45":2,"46":1,"50":2,"51":1,"53":1,"62":1,"66":1,"69":2,"129":1,"147":2,"148":1,"151":1,"152":3,"170":2}}],["co",{"2":{"100":2}}],["corner",{"2":{"47":4,"127":1}}],["corners",{"2":{"47":1}}],["correspondent",{"2":{"126":1}}],["correspond",{"2":{"45":1}}],["corresponding",{"2":{"34":3,"52":2}}],["correctly",{"2":{"151":1}}],["corrected",{"2":{"141":1}}],["correctness",{"2":{"137":1,"166":1}}],["correcting",{"2":{"20":1,"141":1}}],["corrections",{"0":{"140":1,"142":1},"1":{"141":1,"142":1},"2":{"138":1,"141":6,"144":1}}],["correction",{"2":{"6":10,"31":4,"51":1,"52":2,"53":1,"54":2,"62":1,"63":2,"137":1,"139":2,"140":2,"141":8,"142":7,"143":1,"145":2}}],["correct",{"2":{"6":3,"24":1,"34":1,"37":1,"44":1,"45":1,"47":1,"51":1,"53":1,"62":1,"66":1,"69":1,"72":1,"89":1,"103":1,"106":1,"116":1,"137":1,"138":2,"140":1}}],["cov",{"2":{"47":16}}],["cover",{"2":{"74":1,"78":1}}],["covering",{"2":{"6":2,"84":1,"142":2,"145":2}}],["covered",{"0":{"76":1,"77":1,"120":1},"2":{"3":1,"6":1,"52":1,"63":1,"71":1,"72":1,"76":2,"77":2,"78":1,"79":2,"84":1,"96":2,"100":3,"145":1}}],["coveredby",{"0":{"70":1,"71":1,"74":1,"75":1,"78":1,"79":1,"96":1},"1":{"71":1,"72":1},"2":{"0":2,"3":4,"6":4,"31":1,"45":1,"70":1,"71":3,"72":10,"73":6,"74":13,"75":15,"76":13,"77":5,"78":2,"79":2,"85":3,"175":1}}],["covers",{"0":{"83":1,"84":1},"1":{"84":1,"85":1},"2":{"0":2,"3":5,"6":5,"31":1,"83":1,"84":4,"85":5,"127":1,"175":1}}],["coverages",{"2":{"6":1,"47":1}}],["coverage",{"0":{"46":1},"2":{"0":1,"6":2,"31":1,"46":3,"47":16}}],["code",{"2":{"7":1,"10":1,"26":5,"40":1,"72":1,"89":1,"100":1,"106":1,"116":1,"126":1,"163":1,"165":1,"177":1}}],["colname",{"2":{"136":3}}],["col",{"2":{"136":3}}],["column",{"2":{"22":1,"136":16,"172":2,"175":2}}],["colored",{"2":{"176":1}}],["color=",{"2":{"170":2}}],["colors",{"2":{"58":1,"59":1,"174":1,"176":2}}],["colorrange",{"2":{"39":2,"65":1}}],["colorbar",{"2":{"39":1,"60":1,"65":1,"127":1}}],["colormap",{"2":{"14":1,"39":3,"65":1}}],["color",{"2":{"6":3,"36":1,"39":2,"40":1,"41":1,"43":1,"49":3,"58":1,"59":1,"60":2,"65":2,"68":4,"71":1,"81":4,"84":1,"88":4,"102":4,"115":4,"149":1,"152":1,"169":1,"170":1,"174":1,"176":5}}],["collect",{"2":{"11":3,"13":1,"33":1,"36":2,"40":1,"43":1,"46":2,"49":2,"61":2,"65":1,"127":3,"136":3,"151":4,"167":2}}],["collections",{"0":{"78":1,"79":1,"95":1,"96":1,"112":1,"113":1,"122":1,"123":1},"2":{"1":2,"6":10,"22":1,"135":1,"136":7,"158":2,"173":1}}],["collection",{"2":{"1":1,"4":7,"6":13,"18":2,"29":2,"34":2,"37":3,"47":2,"66":2,"78":2,"79":2,"95":2,"96":2,"112":2,"113":2,"122":2,"123":2,"129":1,"136":3,"155":1,"158":1,"167":1}}],["collinear",{"2":{"3":1,"6":2,"45":5,"51":2,"53":3,"54":12,"62":2,"102":1,"103":2}}],["commonly",{"2":{"173":1}}],["common",{"2":{"68":1,"153":1,"168":1,"170":1,"171":1}}],["commented",{"2":{"126":1}}],["comments",{"2":{"100":1}}],["comment",{"2":{"30":1}}],["combos",{"2":{"52":1,"54":1,"63":1}}],["combines",{"2":{"44":1}}],["combine",{"2":{"44":2,"45":5,"145":1}}],["combined",{"2":{"6":1,"45":4,"63":1,"142":1,"145":2,"169":1}}],["combination",{"2":{"6":1,"45":1,"131":1,"136":1}}],["coming",{"2":{"47":1}}],["com",{"2":{"6":2,"54":1,"61":1}}],["compilation",{"2":{"165":1}}],["compiled",{"2":{"24":1}}],["compiler",{"2":{"24":1,"136":2,"165":2}}],["complex",{"2":{"129":1,"158":1,"175":1}}],["complexity",{"2":{"6":1,"129":1,"153":1}}],["complete",{"2":{"37":1}}],["completely",{"2":{"1":1,"3":4,"6":5,"45":2,"52":1,"63":1,"72":1,"81":2,"82":1,"84":1,"85":1,"100":1,"116":1,"136":1}}],["component",{"2":{"6":1,"37":3,"44":11,"47":8,"54":1,"131":1,"136":3}}],["components",{"2":{"6":2,"43":1,"44":2,"131":2,"136":24}}],["composed",{"2":{"4":4,"6":5,"69":5,"169":2}}],["comprised",{"2":{"6":3,"51":1,"53":1,"62":1}}],["computing",{"2":{"41":1,"56":1}}],["computational",{"2":{"6":1,"40":1}}],["computation",{"2":{"6":6,"40":1,"44":1,"51":1,"53":1,"62":1,"159":2,"160":2,"161":2}}],["computer",{"2":{"6":1,"40":1}}],["computes",{"2":{"6":1,"61":1}}],["compute",{"2":{"4":1,"6":3,"37":1,"40":1,"61":3,"153":1}}],["computed",{"2":{"4":4,"6":5,"34":1,"37":3,"40":3,"47":1,"174":1}}],["compact",{"2":{"177":3}}],["comparisons",{"2":{"175":1}}],["comparing",{"2":{"63":1,"69":1}}],["compares",{"2":{"127":1}}],["compared",{"2":{"69":1}}],["compare",{"2":{"3":1,"4":1,"6":2,"34":1,"63":1,"69":2,"103":1}}],["compatibility",{"2":{"37":1}}],["compatible",{"2":{"1":3,"6":1,"22":1,"25":1,"27":1,"34":1,"37":1,"40":2,"44":1,"47":1,"66":1,"69":1,"72":1,"82":1,"85":1,"89":1,"99":1,"103":1,"106":1,"116":1,"134":1,"136":1,"148":2}}],["couple",{"2":{"172":1}}],["course",{"2":{"135":1}}],["country",{"2":{"177":8}}],["countries",{"2":{"11":1,"59":1,"158":1}}],["counted",{"2":{"54":2}}],["counters",{"2":{"40":8}}],["counter",{"2":{"6":1,"45":7,"100":1,"125":1,"126":1}}],["counterclockwise",{"2":{"4":1,"6":2,"9":1,"36":2,"37":1,"60":1,"61":1}}],["count",{"2":{"45":16,"127":1,"162":1}}],["couldn",{"2":{"9":1,"165":1}}],["could",{"2":{"4":1,"6":1,"37":3,"54":4,"56":1,"63":1,"66":1,"100":2,"148":1}}],["conditions",{"2":{"175":1}}],["connected",{"2":{"100":5}}],["connect",{"2":{"47":11}}],["connecting",{"2":{"34":1,"160":1,"169":2}}],["connections",{"2":{"6":2,"142":2,"145":2}}],["context",{"2":{"152":4,"170":2}}],["contents",{"2":{"136":1,"137":1}}],["contours",{"2":{"127":1}}],["contour",{"2":{"127":4}}],["continue",{"2":{"37":1,"45":7,"47":1,"52":2,"54":1,"100":1,"141":1,"145":3,"162":1,"177":1}}],["contributions",{"2":{"25":1,"27":1}}],["controlled",{"2":{"24":1}}],["control",{"2":{"23":1}}],["containing",{"2":{"46":1,"176":1}}],["contain",{"2":{"3":1,"6":1,"26":1,"63":1,"81":1,"103":1,"169":1}}],["contained",{"2":{"3":1,"6":1,"9":1,"63":4,"82":1,"84":1,"102":1,"103":1,"136":1,"176":1}}],["contains",{"0":{"80":1,"81":1},"1":{"81":1,"82":1},"2":{"0":2,"3":4,"6":4,"26":1,"31":1,"45":1,"56":1,"63":1,"80":1,"81":5,"82":4,"134":1,"144":1,"175":1,"176":1}}],["consistent",{"2":{"45":1,"129":1}}],["consistency",{"2":{"22":1}}],["considered",{"2":{"34":1,"40":1}}],["consider",{"2":{"33":1,"36":1,"43":1,"46":1,"47":3,"49":1,"65":2,"68":1,"71":1,"81":1,"84":1,"88":1,"98":1,"100":3,"102":1,"105":1,"115":1}}],["constprop",{"2":{"86":1}}],["constants",{"2":{"45":1}}],["const",{"2":{"31":4,"45":1,"72":4,"89":3,"106":4,"116":4,"133":3,"136":1,"158":4}}],["constrained",{"2":{"6":3,"51":1,"53":1,"62":1}}],["constructing",{"2":{"171":1}}],["construct",{"2":{"164":1}}],["constructors",{"2":{"6":2,"164":2}}],["constructed",{"2":{"1":1,"20":1,"148":1}}],["concepts",{"0":{"28":1},"1":{"29":1,"30":1},"2":{"26":1}}],["concieve",{"2":{"9":1}}],["concavehull",{"2":{"128":1}}],["concave",{"2":{"6":1,"34":2,"43":2,"126":2}}],["convention",{"2":{"43":1}}],["convenience",{"2":{"40":1,"166":1}}],["conversely",{"2":{"45":1}}],["conversion",{"0":{"155":1},"2":{"22":1}}],["converted",{"2":{"22":1,"40":3}}],["converts",{"2":{"6":1,"167":1}}],["convert",{"0":{"73":1,"90":1,"107":1,"117":1},"2":{"6":3,"40":6,"61":1,"65":1,"127":2,"152":1,"155":1,"158":3,"166":1,"167":1}}],["convexhull",{"2":{"128":1}}],["convexity",{"2":{"60":2}}],["convex",{"0":{"56":1,"59":1},"1":{"57":1,"58":1,"59":1,"60":1,"61":1},"2":{"0":1,"6":7,"31":2,"34":3,"56":4,"58":2,"59":1,"60":4,"61":11,"126":1}}],["vw",{"2":{"158":3}}],["von",{"2":{"127":1}}],["v2",{"2":{"100":9}}],["v1",{"2":{"100":9}}],["v`",{"2":{"40":2}}],["vcat",{"2":{"34":1,"40":1,"136":1}}],["vararg",{"2":{"40":1}}],["vary",{"2":{"34":1}}],["variables",{"2":{"24":1,"40":8,"82":1,"85":1,"99":1}}],["variable",{"2":{"24":1,"52":2}}],["vals",{"2":{"160":9}}],["valign",{"2":{"158":1}}],["validated",{"2":{"52":2,"54":2,"63":2}}],["validate",{"2":{"9":1}}],["valid",{"2":{"1":1,"6":8,"44":1,"51":2,"53":2,"54":3,"62":2,"127":1,"137":3,"138":1,"143":1,"144":1,"154":1,"162":1}}],["val",{"2":{"34":2,"45":2,"54":8,"100":30,"103":4}}],["values=",{"2":{"127":2}}],["values=sort",{"2":{"127":1}}],["values",{"2":{"1":1,"5":3,"6":16,"34":2,"39":3,"40":40,"44":2,"45":5,"47":5,"54":1,"66":2,"100":4,"127":19,"136":2,"160":2,"162":1,"165":1}}],["value",{"2":{"0":1,"4":7,"5":2,"6":15,"14":1,"24":1,"34":1,"36":2,"37":4,"40":45,"45":5,"47":2,"54":7,"65":1,"66":3,"127":6,"160":11,"166":2,"175":1}}],["vs",{"0":{"15":1},"2":{"12":1,"54":2}}],["vᵢ",{"2":{"6":1}}],["v0",{"2":{"6":2}}],["v",{"2":{"5":2,"6":6,"14":4,"40":23,"66":8}}],["visvalingam",{"2":{"156":1}}],["visvalingamwhyatt",{"0":{"161":1},"2":{"0":1,"6":3,"158":4,"161":5}}],["visualized",{"2":{"138":1}}],["visualize",{"2":{"98":1,"170":1}}],["visa",{"2":{"45":1}}],["visited",{"2":{"45":4}}],["view",{"2":{"45":2,"61":1,"127":1,"145":1,"160":3,"177":1}}],["viewport",{"2":{"14":1}}],["views",{"2":{"1":1,"45":1,"62":1,"148":1}}],["via",{"2":{"6":1,"41":1,"56":1,"128":1,"149":1,"152":1,"166":2}}],["vec",{"2":{"61":2}}],["vect",{"2":{"136":2}}],["vectypes",{"2":{"40":5}}],["vector",{"2":{"1":12,"4":6,"5":1,"6":46,"18":1,"23":1,"29":1,"33":1,"34":10,"40":14,"45":7,"50":6,"51":4,"52":1,"53":2,"54":3,"62":4,"100":1,"103":2,"126":3,"127":4,"129":1,"136":6,"138":8,"139":1,"144":22,"150":1,"151":1,"153":1,"154":10,"159":1,"160":4,"161":1,"162":2,"167":15,"169":18,"170":6,"171":9}}],["vectors",{"2":{"1":1,"4":2,"6":5,"22":1,"34":4,"40":3,"45":1,"61":1,"66":1,"125":1,"127":1,"136":2,"158":1}}],["ve",{"2":{"17":1,"153":1}}],["vein",{"2":{"7":1}}],["version",{"2":{"166":1}}],["versa",{"2":{"45":1}}],["vert",{"2":{"162":21}}],["verts",{"2":{"158":2}}],["vertical",{"2":{"39":1,"47":1,"54":1,"127":1}}],["vertices",{"2":{"6":7,"9":1,"38":4,"40":5,"45":1,"50":2,"61":1,"74":1,"76":5,"88":1,"91":3,"94":1,"100":1,"118":1,"138":1,"150":2,"151":1,"152":3,"153":3,"158":1,"161":1}}],["vertex",{"2":{"5":1,"6":2,"34":1,"38":2,"40":2,"45":19,"54":12,"60":1,"74":2,"92":2,"93":1,"100":1,"118":3}}],["very",{"2":{"0":1,"151":1,"177":2}}],["ty",{"2":{"127":3}}],["typing",{"2":{"41":1,"149":1,"152":1}}],["typically",{"2":{"38":1,"172":1}}],["typemax",{"2":{"66":1,"127":9}}],["typeof",{"2":{"19":1,"40":3,"136":2,"164":1,"178":1}}],["type2",{"2":{"6":2,"69":4}}],["type1",{"2":{"6":2,"69":5}}],["types",{"0":{"132":1,"163":1},"1":{"164":1,"165":1,"166":1},"2":{"6":4,"23":1,"24":1,"31":1,"40":3,"47":1,"50":1,"100":3,"158":1,"163":3,"165":1,"175":1}}],["type",{"2":{"4":11,"5":1,"6":62,"11":1,"22":2,"23":1,"24":2,"30":2,"34":9,"37":11,"39":1,"40":8,"44":8,"45":21,"47":8,"50":6,"51":7,"52":6,"53":8,"54":19,"62":7,"63":5,"66":28,"69":2,"131":2,"136":42,"140":1,"141":6,"142":6,"147":1,"152":1,"153":1,"155":1,"158":3,"164":3,"165":5,"166":1,"167":3,"174":1}}],["tx",{"2":{"127":3}}],["tᵢ",{"2":{"40":1}}],["temporary",{"2":{"45":1}}],["term",{"2":{"37":1}}],["terms",{"2":{"6":1,"40":1}}],["teach",{"2":{"26":1}}],["technically",{"2":{"23":1,"137":1}}],["technique",{"2":{"11":1}}],["tell",{"2":{"18":1,"100":1,"165":1,"178":1}}],["test",{"2":{"45":1,"158":2,"166":1}}],["testing",{"0":{"15":1}}],["tests",{"2":{"9":2}}],["tutorial",{"2":{"168":1,"175":1}}],["tutorials",{"2":{"26":2}}],["tups",{"2":{"139":4}}],["tuplepoint",{"2":{"31":3,"167":1}}],["tuple",{"0":{"155":1},"2":{"4":1,"6":19,"31":2,"40":2,"44":3,"45":5,"47":3,"50":1,"54":31,"100":17,"126":2,"127":5,"136":2,"138":6,"144":13,"151":1,"158":2,"160":1,"162":2,"167":6,"169":99,"176":2}}],["tuples",{"2":{"0":1,"6":2,"31":1,"41":1,"44":1,"45":1,"50":1,"51":3,"52":1,"53":2,"54":1,"61":2,"62":4,"63":5,"139":2,"145":2,"155":2,"158":2,"177":2}}],["turf",{"2":{"126":1}}],["turned",{"2":{"127":1,"136":1}}],["turning",{"2":{"127":8}}],["turn",{"2":{"6":1,"127":1}}],["t2",{"2":{"6":5,"40":47,"73":1,"86":2,"107":1,"117":1}}],["t1",{"2":{"6":6,"40":51,"86":2}}],["t=float64",{"2":{"4":1,"6":3,"44":3}}],["two",{"2":{"3":5,"4":10,"6":23,"23":2,"34":2,"36":1,"40":1,"44":1,"45":6,"47":3,"51":2,"53":1,"54":14,"62":4,"63":3,"66":5,"68":3,"69":12,"71":1,"81":2,"82":1,"84":1,"85":1,"86":1,"88":1,"98":2,"99":2,"100":2,"102":4,"103":5,"105":3,"106":1,"115":2,"127":3,"141":2,"142":1,"144":2,"145":2,"151":1,"166":1,"169":1,"175":3,"176":3}}],["task",{"2":{"136":6}}],["tasks",{"2":{"136":10}}],["taskrange",{"2":{"136":10}}],["tags",{"2":{"45":4}}],["taget",{"2":{"6":2}}],["taylor",{"2":{"6":1,"40":1}}],["table2",{"2":{"175":1}}],["table1",{"2":{"175":3}}],["tables",{"2":{"22":4,"31":1,"136":11}}],["table",{"0":{"172":1},"2":{"6":1,"18":1,"29":2,"136":12,"158":1,"172":1,"173":1,"175":1}}],["taking",{"2":{"6":3,"44":1,"51":1,"52":1,"53":1,"54":1,"62":1,"63":1,"143":1}}],["takes",{"2":{"45":3,"175":1}}],["taken",{"2":{"20":1,"39":1}}],["take",{"2":{"1":1,"6":2,"29":1,"45":3,"51":1,"52":1,"53":1,"54":1,"63":1,"126":2,"127":2,"129":1,"148":1}}],["target=nothing",{"2":{"51":1,"53":1,"62":1}}],["target=gi",{"2":{"45":1}}],["targets",{"2":{"23":1,"34":2,"37":3,"47":3,"66":3}}],["target",{"0":{"23":1},"2":{"1":14,"6":28,"15":3,"22":2,"23":2,"40":1,"44":2,"45":1,"51":5,"52":11,"53":6,"54":10,"62":4,"63":13,"127":1,"129":1,"131":4,"134":5,"135":1,"136":144,"145":2,"148":3,"158":2,"164":3}}],["tilted",{"2":{"47":1}}],["tie",{"2":{"34":1}}],["timings",{"2":{"13":5}}],["timing",{"2":{"13":2}}],["times",{"2":{"4":1,"6":1,"146":1}}],["time",{"2":{"1":5,"13":3,"24":1,"39":1,"127":1,"148":4,"166":1,"169":1,"170":1,"171":2,"176":1,"177":1}}],["title",{"2":{"13":2,"39":2,"60":2,"127":1,"152":1,"158":2}}],["tip",{"2":{"1":1,"5":1,"6":1,"40":1,"148":1,"175":1}}],["tree",{"2":{"175":1}}],["treating",{"2":{"158":1}}],["treated",{"2":{"100":5,"169":1}}],["treats",{"2":{"37":1,"66":1}}],["trials",{"2":{"152":2,"158":2}}],["triangles",{"2":{"38":1}}],["triangle",{"2":{"6":1,"38":4,"161":4,"176":1}}],["triangulation",{"2":{"6":1,"31":1,"61":1}}],["trivially",{"2":{"129":1}}],["try",{"2":{"55":3,"127":1,"134":1,"136":9,"177":1}}],["tr",{"2":{"37":3}}],["trues",{"2":{"145":3}}],["true",{"0":{"24":1},"2":{"1":5,"3":25,"4":3,"6":42,"34":7,"37":1,"39":2,"41":1,"45":30,"47":6,"50":1,"51":1,"52":2,"53":1,"54":1,"62":2,"63":3,"66":4,"69":21,"71":2,"72":6,"74":1,"75":1,"76":4,"78":1,"79":1,"81":1,"82":1,"84":2,"85":1,"86":9,"88":2,"89":2,"91":1,"92":1,"93":3,"95":1,"96":1,"98":3,"99":1,"100":78,"102":2,"103":18,"105":2,"106":6,"109":1,"110":1,"112":1,"113":1,"115":2,"116":7,"118":1,"119":1,"120":4,"122":1,"123":1,"126":4,"127":5,"136":8,"145":1,"149":1,"152":1,"158":1,"165":2,"175":1,"178":1}}],["traditional",{"2":{"127":1}}],["traverse",{"2":{"45":1}}],["traced",{"2":{"45":1}}],["traces",{"2":{"45":1}}],["trace",{"2":{"45":2,"51":1,"53":1,"62":1}}],["track",{"2":{"45":3,"145":2}}],["tracing",{"2":{"6":1,"45":4,"47":1,"52":5,"54":2,"63":2}}],["transverse",{"2":{"170":1}}],["translate",{"2":{"39":2}}],["translation",{"2":{"1":2,"6":2,"154":2,"158":2,"169":3,"171":1}}],["transformations",{"2":{"31":10}}],["transformation",{"0":{"154":1},"2":{"6":1,"127":1,"140":1,"148":1,"168":1}}],["transform",{"2":{"0":2,"1":6,"6":3,"15":2,"31":1,"129":1,"148":2,"154":4,"158":1,"169":4,"171":1}}],["trait`",{"2":{"136":1}}],["trait2",{"2":{"66":10,"69":2,"91":2,"92":2,"103":2,"108":2,"110":2,"111":2}}],["trait1",{"2":{"66":12,"69":2,"91":2,"92":2,"103":2,"108":2,"110":2,"111":2}}],["traits",{"2":{"6":2,"18":1,"103":1,"134":2,"141":2,"158":2,"164":3}}],["trait",{"2":{"1":5,"3":2,"4":2,"6":17,"18":7,"20":1,"22":1,"31":1,"34":2,"37":5,"40":6,"44":7,"47":2,"50":3,"51":2,"52":2,"53":6,"54":4,"62":2,"63":2,"66":7,"69":11,"72":3,"86":2,"89":3,"100":4,"103":10,"106":3,"116":3,"126":1,"129":1,"131":2,"134":3,"136":51,"141":9,"142":1,"153":1,"158":2,"164":8,"167":7,"169":1}}],["traittarget",{"0":{"164":1},"2":{"0":1,"1":2,"6":8,"34":1,"37":1,"44":1,"47":1,"51":2,"52":4,"53":3,"54":4,"62":2,"63":4,"66":1,"129":2,"132":1,"136":11,"153":1,"158":1,"163":1,"164":20}}],["thus",{"2":{"34":1,"37":1,"45":3,"52":1,"54":1,"63":1}}],["those",{"2":{"34":1,"45":1,"54":1,"74":1,"118":1}}],["though",{"2":{"20":1,"138":1}}],["thing",{"0":{"30":1}}],["things",{"2":{"9":1}}],["this",{"0":{"30":1},"2":{"0":1,"1":1,"3":1,"4":6,"5":1,"6":30,"7":1,"18":1,"23":3,"24":2,"25":2,"27":2,"29":1,"31":1,"33":2,"34":6,"36":2,"37":9,"39":3,"40":11,"41":2,"43":1,"44":4,"45":26,"46":1,"47":4,"49":1,"50":5,"52":1,"54":5,"55":1,"61":5,"62":1,"63":2,"65":4,"66":6,"69":4,"71":3,"72":3,"79":1,"81":1,"82":2,"84":1,"85":2,"86":1,"89":3,"96":1,"99":2,"100":3,"102":1,"103":4,"106":3,"113":1,"115":1,"116":3,"123":1,"125":1,"126":3,"127":8,"128":2,"129":2,"134":2,"136":17,"137":3,"139":3,"140":1,"141":6,"142":7,"143":4,"145":3,"146":2,"147":2,"148":4,"149":3,"150":3,"151":5,"152":5,"153":4,"154":1,"155":1,"156":2,"158":3,"162":9,"163":3,"164":2,"165":3,"166":2,"167":1,"168":1,"169":2,"170":4,"171":3,"172":3,"173":1,"175":3,"176":3,"177":3,"178":1}}],["three",{"2":{"26":1,"38":1,"54":1}}],["thread",{"2":{"136":6}}],["threading",{"0":{"136":1},"2":{"136":7,"165":1}}],["threads",{"2":{"1":1,"6":1,"136":10}}],["threaded=",{"2":{"136":9}}],["threaded=true",{"2":{"136":1}}],["threaded=false",{"2":{"37":1,"44":4,"47":2,"66":8,"136":2,"146":1,"158":1}}],["threaded==true",{"2":{"1":1,"6":1,"136":1}}],["threaded",{"2":{"1":3,"4":1,"6":7,"24":1,"34":2,"37":1,"44":3,"47":3,"66":5,"133":1,"136":49,"146":1,"153":6,"158":1,"165":2}}],["through",{"2":{"6":4,"34":1,"40":1,"45":3,"47":1,"49":1,"50":2,"61":1,"72":1,"100":5,"116":1,"127":1,"134":1,"136":1,"142":2,"145":2,"160":1,"166":1,"169":1}}],["thrown",{"2":{"134":1}}],["throws",{"2":{"6":1,"166":1}}],["throw",{"2":{"4":1,"6":1,"63":1,"69":1,"127":1,"136":5}}],["than",{"2":{"1":1,"3":1,"6":11,"11":1,"45":2,"74":1,"86":1,"103":1,"118":1,"126":1,"127":2,"135":1,"136":1,"142":2,"143":1,"144":1,"145":2,"150":1,"152":2,"153":1,"159":1,"166":2}}],["that",{"2":{"1":1,"3":3,"4":8,"6":44,"9":1,"17":1,"18":4,"19":3,"20":1,"22":3,"25":1,"26":1,"27":1,"34":4,"36":2,"37":4,"40":4,"41":2,"43":2,"44":3,"45":17,"46":3,"47":5,"51":4,"52":5,"53":4,"54":14,"56":1,"60":3,"61":4,"62":3,"63":5,"66":2,"68":1,"69":11,"71":2,"72":1,"81":4,"82":1,"85":1,"88":1,"89":1,"98":1,"99":1,"100":3,"102":2,"103":10,"105":2,"106":2,"108":2,"115":3,"116":1,"118":3,"126":1,"127":4,"129":1,"131":2,"136":4,"137":3,"138":2,"139":1,"140":3,"141":2,"142":4,"143":2,"144":3,"145":4,"148":1,"150":2,"151":2,"152":3,"153":2,"158":2,"160":1,"162":1,"164":1,"165":1,"166":1,"170":4,"171":1,"172":2,"173":3,"175":1,"176":2}}],["theorem",{"2":{"66":1}}],["themselves",{"2":{"40":1}}],["them",{"2":{"6":1,"25":1,"27":1,"45":1,"127":2,"128":2,"131":1,"136":1,"138":2,"143":1,"144":1,"158":1,"169":1,"171":1,"173":3}}],["thereof",{"2":{"129":1}}],["therefore",{"2":{"65":1,"137":1}}],["there",{"2":{"6":3,"22":1,"34":1,"40":2,"41":1,"45":3,"47":1,"50":2,"52":1,"54":6,"55":1,"63":1,"100":1,"103":2,"127":3,"128":1,"129":1,"136":4,"138":1,"151":1,"162":1,"164":1,"166":1,"170":2,"173":3}}],["then",{"2":{"6":5,"18":1,"22":1,"29":1,"34":3,"40":2,"45":6,"47":1,"51":1,"53":2,"54":6,"55":2,"61":1,"62":2,"63":2,"100":1,"127":2,"134":1,"136":3,"143":1,"152":2,"158":1,"170":1,"175":1,"176":1}}],["their",{"2":{"3":1,"4":1,"6":2,"40":1,"43":2,"63":1,"66":2,"94":1,"103":1,"105":1,"109":1,"110":1,"119":3,"120":3,"129":1,"136":1,"138":1,"144":1,"146":1}}],["they",{"2":{"3":3,"4":11,"6":25,"20":2,"22":1,"23":1,"24":1,"38":1,"44":2,"45":8,"47":2,"51":2,"53":1,"54":6,"60":1,"62":2,"63":3,"68":3,"69":16,"72":1,"88":1,"92":2,"93":1,"94":1,"98":1,"100":2,"102":2,"103":4,"108":1,"110":1,"111":1,"119":1,"120":1,"127":6,"136":1,"137":1,"142":2,"145":2,"151":1,"162":1,"163":1,"176":1}}],["these",{"2":{"1":2,"6":5,"24":1,"34":1,"40":5,"45":3,"63":1,"68":1,"69":1,"72":1,"81":1,"84":1,"86":2,"88":1,"89":1,"98":1,"102":1,"103":1,"105":2,"106":1,"115":1,"116":1,"126":1,"127":3,"134":1,"136":2,"148":1,"152":1,"158":2,"166":1,"173":1,"175":1}}],["the",{"0":{"26":1,"29":1,"43":1,"59":1,"60":1},"2":{"1":28,"3":64,"4":112,"5":12,"6":403,"7":5,"9":3,"10":1,"11":3,"17":5,"18":10,"19":2,"20":4,"22":4,"23":5,"24":3,"25":3,"26":4,"27":3,"29":3,"33":1,"34":63,"36":12,"37":43,"38":15,"39":12,"40":71,"41":6,"43":6,"44":25,"45":116,"46":7,"47":47,"49":2,"50":7,"51":27,"52":23,"53":27,"54":82,"55":1,"56":6,"60":11,"61":16,"62":29,"63":70,"65":11,"66":81,"68":5,"69":47,"71":8,"72":25,"75":8,"76":9,"77":3,"78":3,"79":2,"81":9,"82":11,"84":4,"85":11,"86":5,"88":2,"89":21,"91":8,"92":6,"93":4,"95":3,"96":2,"98":5,"99":6,"100":123,"102":5,"103":26,"105":5,"106":21,"108":6,"109":10,"110":7,"111":3,"112":3,"113":2,"115":7,"116":24,"118":2,"119":9,"120":9,"121":6,"122":2,"123":2,"125":1,"126":8,"127":47,"128":1,"129":8,"131":4,"133":2,"134":11,"136":85,"137":5,"138":5,"139":4,"140":2,"141":13,"142":10,"143":4,"144":8,"145":6,"146":1,"147":5,"148":14,"149":2,"150":3,"151":5,"152":26,"153":17,"154":3,"155":1,"156":3,"158":18,"159":3,"160":6,"161":3,"162":2,"163":2,"165":5,"166":21,"169":10,"170":11,"171":10,"172":2,"173":4,"175":10,"176":17,"177":3}}],["t",{"2":{"0":1,"4":28,"6":56,"9":1,"23":1,"31":8,"34":32,"37":41,"40":26,"44":38,"45":74,"47":44,"50":18,"51":12,"52":12,"53":12,"54":156,"62":10,"63":20,"66":87,"69":17,"71":1,"92":1,"100":24,"103":1,"105":1,"109":2,"110":1,"127":14,"136":10,"142":2,"145":2,"152":3,"153":5,"155":7,"158":1,"164":14,"165":2,"166":3,"167":10,"169":4,"177":1}}],["tokyo",{"2":{"177":1}}],["toy",{"2":{"175":1}}],["together",{"2":{"54":1,"63":1,"169":1,"176":1}}],["touching",{"0":{"109":1},"2":{"54":1,"63":1}}],["touch",{"0":{"110":1,"111":1,"112":1},"2":{"45":1,"105":1,"108":2,"110":1,"112":1}}],["touches",{"0":{"104":1,"105":1,"108":1},"1":{"105":1,"106":1},"2":{"0":2,"3":3,"6":3,"31":1,"104":1,"105":3,"106":11,"107":6,"108":11,"109":15,"110":9,"111":8,"112":3,"113":4,"175":1}}],["totally",{"2":{"62":1}}],["total",{"2":{"37":1,"40":2,"45":2,"47":1}}],["towards",{"2":{"25":1,"27":1}}],["topright",{"2":{"158":1}}],["topologypreserve",{"2":{"156":1}}],["topology",{"2":{"156":1}}],["top",{"2":{"20":1,"26":1,"45":1,"127":1}}],["took",{"2":{"177":1}}],["tools",{"2":{"17":1}}],["too",{"2":{"6":1,"54":1,"150":1,"153":1}}],["tol^2",{"2":{"159":1,"160":1}}],["tolerances",{"2":{"161":1,"162":29}}],["tolerance",{"2":{"159":1,"160":1,"161":1,"162":17}}],["tol",{"2":{"6":12,"152":2,"158":18,"159":7,"160":15,"161":8,"162":18}}],["todo",{"2":{"3":2,"6":2,"45":1,"54":1,"61":2,"86":4,"103":1,"127":1,"136":1,"139":1,"158":1,"165":1}}],["to",{"0":{"9":1,"23":1,"26":1,"55":1,"73":1,"90":1,"107":1,"117":1},"2":{"0":2,"1":22,"3":1,"4":33,"5":4,"6":142,"7":2,"9":3,"10":2,"11":2,"13":1,"17":2,"18":9,"19":1,"20":2,"22":3,"23":4,"24":2,"25":3,"26":2,"27":3,"29":4,"30":1,"33":1,"34":8,"36":1,"37":4,"38":4,"39":1,"40":26,"41":2,"43":2,"44":5,"45":32,"46":1,"47":12,"49":1,"50":3,"51":8,"52":4,"53":8,"54":27,"56":1,"58":1,"59":1,"60":4,"61":6,"62":7,"63":11,"65":6,"66":32,"68":2,"69":17,"71":2,"72":7,"81":1,"82":1,"84":3,"85":1,"86":2,"88":1,"89":7,"98":2,"99":1,"100":21,"102":3,"103":7,"105":1,"106":7,"108":1,"115":1,"116":7,"126":4,"127":16,"129":4,"131":4,"133":7,"134":6,"135":1,"136":52,"137":2,"138":3,"140":4,"141":8,"142":5,"143":3,"144":1,"145":4,"146":3,"147":1,"148":4,"149":1,"150":3,"151":3,"152":9,"153":7,"154":4,"155":1,"156":1,"158":4,"159":1,"160":15,"161":1,"162":2,"163":2,"164":2,"165":6,"166":9,"167":28,"168":4,"169":6,"170":10,"171":6,"172":7,"173":5,"174":1,"175":7,"176":5,"177":2,"178":8}}],["rd",{"2":{"158":3}}],["rdbu",{"2":{"65":1}}],["rhumb",{"2":{"126":2}}],["runner",{"2":{"170":1}}],["running",{"2":{"136":3}}],["run",{"2":{"136":8,"177":1}}],["runs",{"2":{"54":2,"125":1}}],["rule",{"2":{"45":1}}],["rules",{"2":{"45":1}}],["right=2",{"2":{"45":1}}],["right",{"2":{"40":1,"45":4,"50":1,"66":1,"126":1,"160":19,"162":5,"169":1,"175":1}}],["ring4",{"2":{"171":2}}],["ring3",{"2":{"170":1}}],["ring2",{"2":{"169":2}}],["ring1",{"2":{"169":2}}],["rings",{"0":{"76":1,"93":1,"110":1,"120":1,"137":1},"1":{"138":1,"139":1},"2":{"4":4,"6":6,"9":2,"37":1,"44":1,"45":3,"54":1,"69":7,"125":1,"127":5,"139":1,"142":1,"158":1}}],["ring",{"2":{"4":7,"6":13,"9":1,"31":1,"34":3,"37":2,"40":1,"43":1,"44":4,"45":12,"47":13,"63":3,"66":5,"69":4,"74":1,"75":2,"76":5,"91":1,"93":1,"100":2,"108":1,"109":1,"110":3,"118":1,"119":2,"120":4,"126":3,"127":11,"137":2,"138":1,"139":14,"140":1,"169":1}}],["rtrees",{"2":{"20":1}}],["r+y",{"2":{"13":2,"14":1}}],["r+x",{"2":{"13":2,"14":1}}],["ry",{"2":{"13":3,"14":3}}],["rx",{"2":{"13":3,"14":3}}],["round",{"2":{"158":1,"160":1,"162":1}}],["routines",{"2":{"11":1}}],["row",{"2":{"136":3}}],["rows",{"2":{"136":2}}],["robust",{"0":{"15":1},"2":{"60":1}}],["rotate",{"2":{"47":1}}],["rotation",{"2":{"1":1,"6":1,"154":1}}],["rotations",{"2":{"1":3,"6":3,"154":3}}],["rotmatrix2d",{"2":{"158":1}}],["rotmatrix",{"2":{"1":1,"6":1,"154":1}}],["r",{"2":{"6":1,"9":1,"13":11,"14":12,"152":1,"162":2,"169":6,"170":2,"171":4}}],["rᵢ₋₁",{"2":{"40":20}}],["rᵢ∗rᵢ₊₁+sᵢ⋅sᵢ₊₁",{"2":{"6":1}}],["rᵢ₊₁",{"2":{"6":1,"40":29}}],["rᵢ",{"2":{"6":2,"40":49}}],["ramer",{"2":{"160":1}}],["raster",{"0":{"127":1},"2":{"127":4}}],["ray",{"2":{"100":4}}],["raw",{"2":{"18":1}}],["range",{"2":{"13":8,"14":4,"127":1,"136":4}}],["ranges",{"2":{"6":1,"127":2}}],["randomly",{"2":{"176":2}}],["random",{"2":{"158":2}}],["randn",{"2":{"58":1}}],["rand",{"2":{"6":1,"60":1,"127":1,"176":2}}],["rather",{"2":{"6":1,"127":1,"144":1}}],["ratio",{"2":{"6":7,"54":1,"152":1,"158":1,"159":4,"160":6,"161":4,"162":11}}],["radii",{"2":{"6":1,"152":1}}],["radius`",{"2":{"152":1}}],["radius",{"2":{"6":7,"40":13,"152":4}}],["radialdistance",{"0":{"159":1},"2":{"0":1,"6":2,"156":1,"158":4,"159":4}}],["rrayscore",{"2":{"1":1,"6":1,"154":1}}],["rring",{"2":{"1":1,"6":1,"154":1}}],["rewrap",{"2":{"136":3}}],["req",{"2":{"100":44}}],["requirement",{"2":{"137":1,"143":1}}],["requirements",{"2":{"100":5}}],["required",{"2":{"61":1,"72":3,"89":3,"106":3,"116":3,"151":1,"168":1}}],["require",{"2":{"61":1,"71":2,"72":6,"89":3,"100":32,"106":3,"116":3}}],["requires",{"2":{"41":1,"69":1,"72":2,"75":3,"76":3,"77":1,"81":1,"89":1,"92":3,"93":2,"94":1,"106":1,"109":3,"110":1,"111":1,"115":1,"116":1,"119":3,"120":3,"121":1,"149":1,"152":1,"166":1}}],["requests",{"2":{"25":1,"27":1}}],["reflected",{"2":{"158":3}}],["ref",{"2":{"65":1}}],["referring",{"2":{"100":1}}],["refer",{"2":{"6":1,"127":1}}],["references",{"2":{"6":1,"40":1}}],["reference",{"0":{"170":1,"171":1},"2":{"0":1,"1":2,"148":2,"168":2,"170":1}}],["reveal",{"2":{"63":1}}],["reveals",{"2":{"63":1}}],["reverse",{"2":{"36":1,"39":1,"40":1,"45":2,"169":2}}],["rev",{"2":{"62":1}}],["render",{"2":{"39":1}}],["rendering",{"2":{"39":3,"40":1}}],["rename",{"2":{"10":1}}],["regardless",{"2":{"54":1,"100":1}}],["regions",{"2":{"52":3,"54":5,"62":1,"63":3,"100":2,"177":1}}],["region",{"2":{"41":2,"54":3,"63":2,"177":1}}],["register",{"2":{"31":3,"40":3}}],["regular",{"0":{"15":1}}],["readable",{"2":{"173":1}}],["readability",{"2":{"45":1}}],["read",{"2":{"170":2}}],["reached",{"2":{"136":4}}],["reaches",{"2":{"134":1}}],["reach",{"2":{"134":1}}],["reasons",{"2":{"166":1}}],["reason",{"2":{"24":1,"137":1,"143":1,"165":1}}],["real`",{"2":{"152":1,"153":1}}],["reality",{"2":{"60":1}}],["really",{"2":{"37":1,"100":1,"127":1,"165":1}}],["real=1",{"2":{"6":2,"152":2}}],["real=6378137`",{"2":{"152":1}}],["real=6378137",{"2":{"6":2,"152":1}}],["real",{"0":{"177":1},"2":{"5":1,"6":13,"34":1,"40":45,"44":2,"54":1,"152":3,"153":1,"162":5,"175":1}}],["related",{"2":{"129":1}}],["relation",{"2":{"45":2}}],["relations",{"2":{"31":10,"86":1,"103":1}}],["relationship",{"2":{"23":1,"175":2}}],["relative",{"2":{"40":3}}],["relevant",{"2":{"6":1,"10":1,"61":1}}],["reducing",{"2":{"136":2}}],["reduced",{"2":{"159":1,"160":1,"161":1}}],["reduces",{"2":{"19":1,"63":1}}],["reduce",{"2":{"1":1,"6":1,"127":1,"136":2,"141":1}}],["redundant",{"2":{"45":1}}],["red",{"2":{"14":1,"43":2,"65":1,"71":1,"84":1,"98":1,"169":1,"170":1,"176":2}}],["removal",{"2":{"45":1}}],["removes",{"2":{"45":1,"129":1}}],["removed",{"2":{"45":3,"52":5,"127":1}}],["remove",{"2":{"37":1,"45":33,"47":1,"50":2,"51":5,"53":5,"62":2,"145":2,"159":1,"160":3,"162":4}}],["removing",{"2":{"6":3,"45":1,"52":1,"159":1,"160":1,"161":1}}],["remainingnode",{"2":{"127":3}}],["remaining",{"2":{"45":1,"69":1,"100":2,"160":1}}],["remain",{"2":{"1":1,"6":9,"136":1,"158":2}}],["resolution",{"2":{"170":1}}],["resolved",{"2":{"127":1}}],["reset",{"2":{"45":1}}],["resize",{"2":{"13":1,"14":1,"45":2}}],["resampled",{"2":{"6":1,"153":1}}],["respectively",{"2":{"45":1,"103":1,"136":1,"169":1}}],["respect",{"2":{"6":2,"53":1,"54":1,"61":1,"100":6}}],["rest",{"2":{"6":1,"40":2,"62":1}}],["resulting",{"2":{"50":1,"63":1,"127":1,"176":1}}],["results",{"2":{"3":2,"6":2,"54":1,"86":1,"103":1,"136":2,"138":1,"160":25,"169":3}}],["result",{"2":{"1":2,"3":5,"4":5,"6":13,"19":1,"34":1,"37":2,"47":1,"54":15,"61":1,"66":2,"72":1,"82":1,"85":1,"99":1,"116":1,"136":2,"152":3,"162":6}}],["receives",{"2":{"136":2}}],["recent",{"2":{"45":1,"52":1,"54":1,"63":1}}],["recalculate",{"2":{"135":1}}],["recursive",{"2":{"134":1}}],["recursively",{"2":{"4":1,"6":1,"134":1,"146":1}}],["rect",{"2":{"33":3,"36":5,"46":3,"65":7}}],["rectangle",{"2":{"33":2,"36":2,"39":2,"46":2,"47":1,"65":2,"151":5,"152":8,"176":2}}],["recommended",{"2":{"22":1}}],["reconstructing",{"2":{"158":1}}],["reconstructed",{"2":{"18":1}}],["reconstruct",{"2":{"0":2,"1":1,"6":3,"18":1,"131":2,"136":29}}],["replace",{"2":{"45":1,"127":2,"160":1}}],["replaced",{"2":{"22":1}}],["repl",{"2":{"41":1,"149":1,"152":1}}],["repeat",{"2":{"44":1,"45":3,"69":6}}],["repeating",{"2":{"37":1,"63":1}}],["repeated",{"2":{"4":3,"6":3,"9":1,"34":2,"40":1,"45":2,"63":2,"66":2,"69":4,"100":1}}],["represented",{"2":{"176":1}}],["represent",{"2":{"17":1,"40":1,"45":4,"69":1}}],["representing",{"2":{"6":2,"52":1,"54":1,"61":1,"63":1,"65":1,"69":1,"177":1}}],["represents",{"2":{"6":1,"141":2,"142":1}}],["reprojects",{"2":{"148":1}}],["reprojection",{"0":{"148":1},"1":{"149":1}}],["reproject",{"2":{"0":1,"1":4,"31":2,"129":1,"148":6,"149":2}}],["re",{"2":{"1":1,"6":1,"17":1,"61":1,"154":1,"168":1,"170":1}}],["retrievable",{"2":{"1":1,"148":1}}],["returnval",{"2":{"100":9}}],["returntype",{"2":{"19":1}}],["returning",{"2":{"18":1,"41":1,"52":2}}],["return",{"0":{"22":1},"2":{"1":1,"3":18,"4":2,"6":37,"13":3,"14":3,"23":2,"30":1,"34":5,"37":5,"40":20,"41":1,"44":4,"45":36,"47":12,"50":12,"51":5,"52":4,"53":4,"54":18,"61":2,"62":6,"63":9,"66":8,"69":30,"72":1,"78":2,"79":2,"82":1,"85":1,"86":18,"89":2,"95":2,"96":2,"98":1,"99":1,"100":71,"103":28,"106":1,"108":2,"112":2,"113":2,"116":1,"122":2,"123":2,"126":10,"127":12,"136":27,"137":1,"139":4,"141":6,"142":2,"145":2,"147":2,"148":1,"153":4,"154":2,"155":2,"158":3,"159":1,"160":5,"161":3,"162":7,"166":3,"167":8}}],["returned",{"2":{"1":1,"6":11,"22":2,"23":1,"45":3,"50":1,"51":2,"53":2,"54":2,"60":1,"61":1,"62":2,"127":1,"131":1,"136":2,"148":1,"158":1,"165":1}}],["returns",{"2":{"1":1,"3":5,"4":4,"5":3,"6":24,"18":1,"22":2,"34":1,"37":2,"40":6,"44":3,"45":4,"47":6,"50":1,"51":1,"54":1,"61":1,"62":1,"66":8,"68":1,"72":1,"81":2,"82":1,"84":2,"85":1,"88":1,"99":1,"100":4,"103":2,"116":1,"127":2,"136":2,"153":1,"155":1,"175":1}}],["rebuilt",{"2":{"1":1,"6":2,"131":1,"136":2}}],["rebuilding",{"2":{"136":1}}],["rebuild",{"2":{"0":2,"6":4,"131":4,"134":1,"136":10,"153":1,"158":2}}],["psa",{"2":{"136":2}}],["pb",{"2":{"86":2}}],["p0",{"2":{"66":9}}],["p3",{"2":{"45":8,"161":4}}],["ptm",{"2":{"126":3}}],["ptj",{"2":{"126":5}}],["pti",{"2":{"126":3}}],["ptrait",{"2":{"66":2}}],["pts",{"2":{"45":22,"50":7}}],["pt",{"2":{"45":114,"50":2,"54":26,"100":8,"160":4}}],["pt2",{"2":{"45":14,"54":2}}],["pt1",{"2":{"45":18,"54":2}}],["pn",{"2":{"108":3}}],["pn2",{"2":{"45":4}}],["pn1",{"2":{"45":4}}],["pfirst",{"2":{"37":3}}],["pu",{"2":{"176":2}}],["purpose",{"2":{"136":1}}],["pure",{"2":{"6":1,"61":1,"127":1}}],["purely",{"2":{"6":1,"18":1,"152":1}}],["push",{"2":{"45":15,"50":5,"51":2,"53":2,"54":2,"62":4,"63":5,"127":3,"139":1,"153":3,"160":3}}],["pulling",{"2":{"61":1}}],["pull",{"2":{"25":1,"27":1}}],["public",{"2":{"24":1}}],["pick",{"2":{"170":2}}],["piece",{"2":{"45":6,"145":6}}],["pieces",{"2":{"45":12,"50":1,"52":2,"62":4,"100":1,"145":9}}],["pi",{"2":{"13":2}}],["pixels",{"2":{"127":1}}],["pixel",{"2":{"6":2,"127":7}}],["pythagorean",{"2":{"66":1}}],["py",{"2":{"13":2,"14":2}}],["px",{"2":{"13":2,"14":2}}],["peucker",{"2":{"156":2,"158":3,"160":2}}],["peaks",{"2":{"127":2}}],["peculiarities",{"0":{"21":1},"1":{"22":1,"23":1,"24":1}}],["people",{"2":{"9":1}}],["performed",{"2":{"176":1}}],["performs",{"2":{"40":1,"153":1}}],["perform",{"2":{"26":1,"39":1,"40":2,"45":1,"129":1,"175":3,"176":2,"178":1}}],["performing",{"2":{"6":3,"23":1,"40":1,"51":1,"53":1,"62":1,"176":1}}],["performance",{"2":{"4":1,"6":2,"22":1,"127":1,"143":1,"146":1,"158":1,"173":1}}],["per",{"2":{"5":2,"6":2,"39":1,"40":2,"45":5,"127":1,"136":4,"153":1}}],["pl",{"2":{"176":2}}],["plt",{"2":{"169":1}}],["please",{"2":{"45":1}}],["plan",{"2":{"150":1}}],["plane",{"2":{"40":1,"174":1}}],["place",{"2":{"54":1,"175":1}}],["placement",{"2":{"45":1}}],["plottable",{"2":{"127":1}}],["plotted",{"2":{"43":1}}],["plotting",{"0":{"169":1},"2":{"6":1,"127":1,"150":1,"153":1,"168":1,"169":4,"170":1}}],["plots",{"2":{"39":2}}],["plot",{"0":{"170":1},"2":{"13":1,"39":3,"58":2,"59":1,"60":1,"68":1,"102":1,"127":1,"152":2,"158":4,"168":2,"169":9,"170":5,"171":1,"173":1,"176":1}}],["plus",{"2":{"5":1,"6":1,"40":1}}],["p2y",{"2":{"167":3}}],["p2x",{"2":{"167":3}}],["p2box",{"2":{"39":1}}],["p2",{"2":{"3":2,"4":2,"6":6,"15":12,"34":12,"37":9,"45":18,"47":19,"60":1,"62":2,"66":15,"69":11,"72":2,"84":2,"100":12,"103":2,"126":3,"151":1,"161":4,"167":3,"169":2}}],["p1y",{"2":{"167":3}}],["p1x",{"2":{"167":3}}],["p1",{"2":{"3":3,"4":2,"6":7,"15":12,"34":21,"37":8,"39":4,"45":9,"47":25,"49":1,"60":2,"62":2,"66":15,"69":14,"71":5,"72":3,"84":5,"100":4,"103":2,"108":3,"126":3,"161":4,"167":3,"169":1}}],["practice",{"2":{"171":1}}],["pred",{"2":{"175":2,"176":1,"177":2,"178":1}}],["predicate",{"2":{"7":1,"86":1,"175":3,"176":1,"178":5}}],["predicates",{"0":{"12":1,"15":1,"178":1},"1":{"13":1,"14":1,"15":1,"16":1},"2":{"7":4,"12":1,"31":1,"45":5,"54":4,"55":3,"100":1,"175":1,"177":1}}],["pretty",{"2":{"148":1}}],["prettytime",{"2":{"13":2}}],["prevent",{"2":{"52":2,"54":2,"63":2}}],["prev^2",{"2":{"34":2}}],["prev",{"2":{"34":14,"45":69,"126":4}}],["previously",{"2":{"151":1}}],["previous",{"2":{"19":1,"34":1,"136":1,"159":3}}],["preparations",{"2":{"20":1}}],["prepared",{"2":{"20":1,"127":2}}],["prepare",{"0":{"20":1},"2":{"17":1,"20":1}}],["precision",{"2":{"11":1}}],["preserve",{"2":{"158":4,"160":3}}],["preserving",{"2":{"156":1}}],["presentation",{"2":{"6":1,"40":1}}],["present",{"2":{"6":1,"166":1}}],["presence",{"2":{"6":1,"166":1}}],["prescribes",{"2":{"20":1}}],["press",{"2":{"6":1,"40":1}}],["pre",{"2":{"6":1,"62":1,"158":1,"160":2}}],["prefilter",{"2":{"6":1,"158":7}}],["protters",{"2":{"136":2}}],["progressively",{"2":{"134":1}}],["program",{"2":{"17":1}}],["programming",{"2":{"17":1,"26":1}}],["promote",{"2":{"40":5}}],["property",{"2":{"136":2}}],["properties=gi",{"2":{"136":1}}],["properties=namedtuple",{"2":{"136":1}}],["properties=",{"2":{"127":1}}],["properties",{"2":{"6":1,"136":9,"158":1,"162":1}}],["propagate",{"2":{"40":16,"66":4}}],["probably",{"2":{"37":1,"136":1}}],["prod",{"2":{"34":4}}],["product",{"2":{"34":1}}],["process",{"2":{"74":3,"75":3,"76":3,"77":1,"86":1,"91":3,"92":3,"93":2,"94":1,"100":11,"108":1,"109":3,"110":1,"111":1,"118":3,"119":3,"120":3,"121":1,"136":2,"160":1}}],["processed",{"2":{"45":6}}],["processors",{"2":{"31":1,"72":2,"89":2,"106":2,"116":2}}],["processor",{"2":{"31":1}}],["processing",{"2":{"23":1}}],["profile",{"2":{"9":1}}],["providers",{"2":{"138":1,"144":1}}],["provide",{"0":{"23":1},"2":{"6":6,"33":1,"36":1,"38":1,"43":1,"46":1,"49":1,"51":2,"53":2,"62":2,"65":1,"68":1,"71":1,"81":1,"84":1,"88":1,"98":1,"100":2,"102":1,"105":1,"115":1,"127":1,"162":1}}],["provides",{"2":{"6":1,"56":1,"61":1,"170":1}}],["provided",{"2":{"4":1,"6":3,"11":1,"45":1,"66":1,"69":1,"144":1,"152":2,"166":1}}],["projecting",{"2":{"170":1}}],["projection",{"2":{"66":2,"168":1,"170":1}}],["project",{"2":{"9":1}}],["projects",{"2":{"9":1}}],["proj",{"2":{"1":2,"6":3,"148":2,"149":4,"151":1,"152":6,"168":1}}],["prints",{"2":{"149":1}}],["printstyled",{"2":{"41":1,"149":1,"152":1}}],["println",{"2":{"41":1,"149":1,"152":1,"158":2}}],["print",{"2":{"41":2,"149":2,"152":2}}],["primitives",{"2":{"31":1}}],["primitive",{"0":{"129":1},"1":{"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1},"2":{"29":1}}],["primarily",{"2":{"6":1,"25":2,"27":2,"164":1}}],["primary",{"2":{"3":2,"6":3,"72":1,"116":1,"158":1}}],["priority",{"2":{"1":1,"148":1}}],["pay",{"2":{"136":1}}],["paper",{"2":{"100":2}}],["pa",{"2":{"86":2}}],["paths",{"0":{"174":1},"2":{"165":1,"174":2}}],["pathof",{"2":{"158":2}}],["path",{"2":{"36":3,"170":2}}],["padding",{"2":{"6":2}}],["parquet",{"2":{"173":3}}],["parent",{"2":{"165":1,"167":1}}],["parse",{"2":{"100":1,"103":1}}],["part",{"2":{"47":2,"63":2,"100":3,"135":1}}],["partition",{"2":{"136":4}}],["partialsort",{"2":{"162":1}}],["partial",{"2":{"47":4}}],["partially",{"2":{"45":2,"63":2}}],["particularly",{"2":{"40":1}}],["particular",{"2":{"30":1,"34":1,"127":1,"170":2}}],["parallel",{"2":{"100":1,"126":1}}],["paradigm",{"0":{"29":1}}],["paradigms",{"0":{"17":1},"1":{"18":1,"19":1,"20":1},"2":{"17":2,"20":1}}],["parameters",{"2":{"6":1,"136":1,"164":2}}],["parameter",{"2":{"6":2,"164":3}}],["params",{"2":{"6":2,"166":10}}],["parlance",{"2":{"5":1,"6":1,"40":1}}],["passes",{"2":{"47":2,"100":1}}],["passed",{"2":{"1":2,"6":7,"61":1,"127":1,"131":1,"136":2,"148":1,"152":2,"154":1,"166":2,"178":1}}],["passable",{"2":{"40":18}}],["passing",{"2":{"18":1,"136":1,"156":1}}],["pass",{"2":{"5":1,"6":4,"18":1,"40":1,"82":1,"85":1,"99":1,"100":2,"152":1,"153":1,"158":1,"165":1}}],["pairs",{"2":{"54":1,"169":1}}],["pair",{"2":{"3":2,"6":2,"47":1,"103":2,"136":3}}],["packages",{"2":{"6":1,"25":1,"27":1,"56":1,"131":1,"136":1,"137":1,"163":1,"168":3,"170":1,"173":1}}],["package",{"2":{"1":2,"6":1,"22":1,"25":2,"27":2,"41":1,"56":2,"61":1,"127":1,"148":3,"149":1,"152":1,"170":1,"173":2}}],["page",{"2":{"0":1,"9":1,"26":1,"29":1,"31":1,"34":1,"37":1,"39":1,"40":1,"41":1,"44":1,"45":1,"47":1,"50":1,"52":1,"54":1,"55":1,"61":1,"63":1,"66":1,"69":1,"79":1,"82":1,"85":1,"86":1,"96":1,"99":1,"100":1,"103":1,"113":1,"123":1,"126":1,"127":1,"128":1,"136":1,"139":1,"142":1,"145":1,"146":1,"147":1,"149":1,"153":1,"154":1,"155":1,"162":1,"166":1,"167":1}}],["p",{"2":{"1":5,"6":5,"13":13,"14":12,"15":2,"33":1,"36":1,"43":1,"45":5,"46":1,"47":5,"52":2,"58":1,"59":1,"62":2,"65":3,"68":1,"71":1,"81":1,"84":1,"86":4,"88":1,"98":1,"100":20,"102":1,"105":1,"115":1,"126":4,"127":3,"129":3,"136":5,"147":7,"151":1,"154":9,"155":7,"157":1,"158":1,"162":3,"167":11,"175":1,"176":1}}],["poylgon",{"2":{"100":1}}],["potential",{"2":{"47":1}}],["potentially",{"2":{"6":2,"45":1,"142":2,"145":2}}],["post",{"2":{"160":2}}],["possibly",{"2":{"136":1}}],["possiblenodes",{"2":{"127":2}}],["possible",{"2":{"6":3,"51":1,"53":1,"62":1,"127":1,"136":2}}],["possibility",{"2":{"134":1}}],["possibilities",{"2":{"54":1}}],["position=",{"2":{"158":1}}],["position",{"2":{"6":1,"126":1,"151":1}}],["positive",{"2":{"4":4,"6":4,"36":3,"37":1,"65":3,"66":3,"153":1,"162":1}}],["polgons",{"2":{"127":1}}],["polgontrait",{"2":{"1":1,"6":1}}],["polar",{"2":{"6":1,"152":1}}],["polynodes",{"2":{"45":7,"51":1,"53":1,"62":1}}],["polynode",{"2":{"45":36}}],["polypoints",{"2":{"40":46}}],["polys",{"2":{"6":2,"45":39,"49":3,"50":10,"51":14,"52":14,"53":9,"54":6,"62":14,"63":28,"145":26}}],["polys1",{"2":{"3":2,"6":2,"103":6}}],["polys2",{"2":{"3":2,"6":2,"103":6}}],["poly",{"2":{"3":2,"6":16,"15":2,"33":1,"36":1,"37":6,"39":2,"40":3,"43":1,"45":107,"46":2,"47":4,"49":4,"50":20,"51":22,"52":12,"53":15,"54":10,"58":2,"62":19,"63":79,"65":1,"66":3,"69":4,"86":10,"100":21,"103":8,"126":5,"127":5,"145":18,"151":2,"157":2,"158":8,"167":8,"169":2,"176":5}}],["poly2",{"2":{"3":3,"4":2,"6":7,"51":2,"69":2,"100":19,"103":7}}],["poly1",{"2":{"3":3,"4":2,"6":7,"51":2,"69":2,"100":14,"103":7}}],["polygon3",{"2":{"169":2,"170":1}}],["polygon2",{"2":{"169":6}}],["polygon1",{"2":{"169":4}}],["polygonization",{"2":{"127":1}}],["polygonizing",{"0":{"127":1}}],["polygonized",{"2":{"127":1}}],["polygonize",{"2":{"0":1,"6":6,"9":1,"31":1,"127":31}}],["polygon`",{"2":{"40":3,"61":1}}],["polygons",{"0":{"77":1,"111":1,"121":1,"143":1},"1":{"144":1,"145":1},"2":{"3":4,"4":3,"5":1,"6":18,"9":1,"23":5,"31":1,"37":5,"38":1,"40":2,"43":1,"44":1,"45":14,"47":1,"50":2,"51":9,"52":5,"53":3,"54":8,"62":6,"63":19,"65":1,"66":1,"69":5,"77":1,"103":5,"121":1,"126":1,"127":19,"134":1,"138":2,"142":3,"143":2,"144":2,"145":10,"156":1,"158":1,"169":3,"170":1,"176":5,"177":3}}],["polygontrait",{"2":{"1":1,"3":4,"4":6,"6":14,"15":3,"23":1,"34":2,"37":3,"40":3,"44":2,"45":2,"47":2,"50":1,"51":5,"52":5,"53":3,"54":5,"62":4,"63":8,"66":2,"69":10,"74":2,"75":1,"76":1,"77":3,"78":1,"86":4,"91":2,"92":2,"93":1,"94":2,"95":1,"103":8,"108":2,"109":1,"110":1,"111":3,"112":1,"118":2,"119":1,"120":1,"121":3,"122":1,"129":1,"134":2,"136":2,"139":2,"141":2,"142":1,"145":2,"158":2,"167":1}}],["polygon",{"0":{"45":1,"48":1,"51":1,"52":1,"54":1,"62":1,"63":1,"94":1},"1":{"49":1,"50":1},"2":{"0":1,"1":4,"3":4,"4":21,"5":9,"6":65,"9":2,"11":3,"15":4,"20":1,"23":1,"33":1,"34":5,"36":2,"37":5,"38":5,"39":16,"40":57,"43":2,"44":4,"45":39,"46":3,"47":4,"49":3,"50":10,"51":5,"52":7,"53":5,"54":6,"56":1,"60":1,"61":3,"62":6,"63":34,"65":3,"66":14,"69":12,"72":1,"74":3,"75":3,"76":4,"77":8,"86":1,"91":3,"92":4,"93":4,"94":4,"100":66,"103":4,"106":1,"108":3,"109":4,"110":5,"111":7,"116":1,"118":3,"119":4,"120":4,"121":8,"126":5,"127":4,"136":1,"137":4,"138":8,"139":5,"140":1,"142":4,"143":3,"144":12,"145":7,"151":1,"152":4,"154":3,"157":1,"158":9,"167":6,"169":12,"170":5,"171":7,"172":2,"176":6}}],["pointwise",{"0":{"154":1},"2":{"148":1}}],["point1",{"2":{"66":4}}],["point`",{"2":{"54":1}}],["pointedgeside",{"2":{"45":1}}],["point₂",{"2":{"44":13}}],["point₁",{"2":{"44":13}}],["point3s",{"2":{"40":10}}],["point3f",{"2":{"39":1}}],["pointrait",{"2":{"6":1}}],["point2f",{"2":{"39":4,"40":2,"58":1,"65":1}}],["point2d",{"2":{"39":1}}],["point2",{"2":{"6":2,"40":5,"60":1,"66":4}}],["pointtrait",{"2":{"1":1,"4":4,"6":9,"18":1,"34":2,"37":1,"40":3,"47":1,"53":2,"61":1,"66":17,"69":8,"74":6,"78":1,"91":6,"95":1,"108":6,"112":1,"118":6,"122":1,"129":2,"134":1,"136":22,"141":2,"142":1,"146":1,"147":2,"154":2,"155":2,"158":2,"164":2,"167":1}}],["point",{"0":{"91":1,"108":1},"2":{"1":4,"3":10,"4":37,"5":7,"6":83,"9":2,"20":1,"34":12,"37":3,"38":3,"39":1,"40":126,"44":6,"45":97,"47":50,"50":13,"52":9,"53":1,"54":71,"61":3,"63":9,"65":17,"66":73,"69":27,"71":1,"72":2,"74":8,"82":3,"86":21,"89":2,"91":10,"98":1,"100":138,"102":2,"103":21,"105":1,"106":3,"108":10,"109":1,"111":1,"116":4,"118":11,"126":1,"127":3,"136":1,"137":1,"138":2,"142":2,"143":1,"145":2,"148":1,"150":1,"154":2,"158":2,"159":3,"160":9,"161":1,"167":4,"169":111,"170":7,"171":8,"176":2}}],["points2",{"2":{"3":1,"6":1,"103":3}}],["points1",{"2":{"3":1,"6":1,"103":3}}],["points",{"0":{"74":1,"118":1},"2":{"0":1,"1":3,"3":1,"4":11,"5":1,"6":53,"9":3,"13":1,"34":2,"36":3,"37":3,"39":8,"40":32,"44":1,"45":55,"47":5,"50":3,"51":5,"52":1,"53":8,"54":28,"56":3,"58":4,"60":4,"61":6,"62":4,"63":1,"65":2,"66":8,"68":2,"69":13,"72":6,"74":3,"75":4,"81":1,"89":6,"91":1,"92":7,"93":3,"100":10,"103":5,"106":5,"108":1,"109":2,"110":4,"111":3,"115":1,"116":5,"118":3,"119":3,"120":3,"121":1,"125":1,"127":3,"136":3,"146":2,"148":1,"151":2,"152":2,"154":2,"155":2,"158":11,"159":11,"160":26,"161":10,"162":33,"167":25,"169":8,"170":1,"175":1,"176":11}}],["pointorientation",{"2":{"0":1,"6":2,"100":2}}],["my",{"2":{"177":1,"178":2}}],["moore",{"2":{"127":1}}],["moved",{"2":{"45":1,"148":1}}],["move",{"2":{"44":1,"100":1}}],["mode",{"2":{"178":3}}],["model",{"2":{"175":1}}],["modify",{"2":{"169":1}}],["modified",{"2":{"136":2}}],["module",{"2":{"148":1,"153":1}}],["modules",{"2":{"6":1,"40":1}}],["mod1",{"2":{"40":5}}],["mod",{"2":{"40":1,"45":1}}],["most",{"2":{"25":1,"27":1,"45":1,"52":1,"54":1,"60":1,"63":1,"100":1,"158":1,"173":2}}],["monotone",{"2":{"20":1,"60":2}}],["monotonechainmethod",{"2":{"0":1,"6":1,"56":1,"60":2,"61":4}}],["moment",{"2":{"6":1,"151":1,"153":1}}],["more",{"2":{"6":3,"7":1,"9":1,"10":1,"11":1,"23":1,"26":1,"29":1,"45":1,"51":1,"53":1,"61":1,"62":1,"100":1,"103":1,"136":4,"139":1,"149":1,"151":1,"153":1,"169":2,"175":1}}],["mistakenly",{"2":{"143":1}}],["missing",{"2":{"131":6,"132":2,"151":4}}],["missed",{"2":{"127":1}}],["mid",{"2":{"47":2,"100":3}}],["midpoint",{"2":{"45":2}}],["middle",{"2":{"45":2}}],["mining",{"2":{"177":1}}],["minimal",{"2":{"177":1}}],["minimize",{"2":{"54":1}}],["minimum",{"2":{"4":7,"6":12,"46":1,"47":2,"66":12,"158":1,"159":1,"161":1}}],["mind",{"2":{"151":1,"176":1}}],["minmax",{"2":{"54":4}}],["min",{"2":{"47":1,"54":16,"66":15,"158":1,"160":3,"161":1,"162":28}}],["minus",{"2":{"36":1}}],["minpoints=0",{"2":{"127":1}}],["minpoints",{"2":{"6":2}}],["might",{"2":{"6":3,"25":1,"27":1,"37":1,"51":1,"53":1,"54":1,"62":1,"140":1,"160":1}}],["mixed",{"2":{"6":4,"158":1}}],["m",{"2":{"5":1,"6":1,"15":10,"40":2,"47":6,"126":2,"170":1}}],["mp",{"2":{"86":2}}],["mp1",{"2":{"4":2,"6":2,"69":7}}],["mp2",{"2":{"4":2,"6":2,"69":8}}],["manner",{"2":{"175":1}}],["manipulate",{"2":{"173":1}}],["manually",{"2":{"137":1}}],["many",{"2":{"4":1,"5":1,"6":2,"23":1,"26":1,"40":1,"45":1,"50":1,"52":1,"54":2,"63":1,"69":1,"138":1,"146":1}}],["mason",{"2":{"136":2}}],["markersize",{"2":{"169":2}}],["marker",{"2":{"169":2}}],["marked",{"2":{"45":6,"52":1,"54":1,"63":1}}],["marking",{"2":{"52":2,"54":2,"63":2}}],["mark",{"2":{"45":2}}],["marks",{"2":{"45":1}}],["mag",{"2":{"34":4}}],["making",{"2":{"45":1,"127":1,"134":1,"144":1,"169":1,"171":2}}],["makie",{"2":{"13":1,"14":1,"33":1,"36":1,"39":3,"43":1,"46":1,"49":4,"58":1,"59":1,"65":1,"68":1,"71":1,"81":1,"84":1,"88":1,"98":1,"102":1,"105":1,"115":1,"127":3,"157":1,"158":1,"174":1}}],["makevalid",{"2":{"158":2}}],["makes",{"2":{"37":1,"45":1,"66":1,"136":1,"138":1,"143":1,"144":1}}],["make",{"2":{"9":1,"25":1,"27":1,"34":1,"45":3,"54":1,"66":1,"103":1,"127":2,"134":1,"139":1,"151":1,"162":1,"163":1,"169":2,"171":1}}],["mainly",{"2":{"40":1,"65":1,"129":1}}],["maintain",{"2":{"37":1}}],["main",{"0":{"28":1},"1":{"29":1,"30":1},"2":{"7":1,"26":1,"45":1,"127":1,"136":1,"152":1}}],["mapped",{"2":{"173":1}}],["maptasks",{"2":{"136":7}}],["mapreducetasks",{"2":{"136":5}}],["mapreduce",{"2":{"52":1,"127":2,"136":8}}],["map",{"0":{"170":1},"2":{"6":1,"13":1,"18":3,"19":1,"29":1,"40":1,"45":1,"54":1,"103":2,"127":17,"136":25,"139":1,"158":1,"164":1,"168":1,"170":1,"171":1,"173":1}}],["matlab",{"2":{"49":1}}],["materializer`",{"2":{"136":1}}],["materializer",{"2":{"22":1,"136":1}}],["mathrm",{"2":{"40":1}}],["math",{"2":{"7":1}}],["mathematically",{"2":{"6":1,"126":1}}],["matches",{"2":{"69":1,"127":1}}],["match",{"2":{"6":1,"69":12,"103":3,"127":1,"131":1,"136":2}}],["matching",{"2":{"3":1,"6":1,"22":1,"69":3,"103":1,"134":2}}],["matrix",{"2":{"6":1,"14":2,"40":1}}],["maximal",{"2":{"54":1}}],["maximum",{"2":{"3":1,"6":4,"14":1,"46":1,"47":4,"86":1,"127":1,"152":1,"153":1,"160":4}}],["max",{"2":{"6":9,"34":2,"47":1,"127":1,"136":2,"151":5,"152":8,"153":7,"160":36,"162":1,"174":1}}],["made",{"2":{"6":2,"44":1,"45":1,"54":1,"110":1,"134":1,"142":1,"145":1,"161":1}}],["maybe",{"2":{"6":1,"100":4,"131":1,"136":6}}],["may",{"2":{"1":1,"6":5,"23":2,"24":1,"40":2,"45":1,"54":1,"60":1,"126":1,"128":1,"134":1,"136":4,"143":1,"144":1,"152":1,"164":1}}],["mercator",{"2":{"170":1}}],["merge",{"2":{"136":1}}],["measure",{"2":{"136":1,"150":1}}],["meant",{"2":{"26":1}}],["meaning",{"2":{"3":3,"4":1,"6":4,"24":1,"37":1,"41":1,"103":4,"126":1}}],["means",{"2":{"3":1,"6":2,"36":1,"37":1,"41":1,"71":1,"100":3,"102":1,"103":1,"126":1,"134":1}}],["mean",{"2":{"0":1,"6":5,"17":1,"39":2,"40":5,"136":1}}],["meanvalue",{"2":{"0":1,"5":2,"6":3,"38":1,"39":2,"40":15}}],["meets",{"2":{"100":9,"103":1,"160":1}}],["meet",{"2":{"54":3,"71":1,"72":1,"89":1,"100":7,"106":1,"116":1}}],["memory",{"2":{"40":1,"171":1}}],["mesh",{"2":{"39":1,"136":1}}],["message",{"2":{"6":1,"166":1}}],["me",{"0":{"23":1}}],["mentioned",{"2":{"19":1}}],["mentions",{"2":{"6":1,"166":1}}],["menu",{"2":{"14":3}}],["median",{"2":{"13":4,"136":1}}],["mechanics",{"2":{"6":1,"40":1}}],["met",{"2":{"100":44}}],["meters",{"2":{"6":4,"151":1,"152":4,"170":1}}],["methoderror",{"2":{"31":3}}],["methods",{"0":{"2":1,"3":1,"4":1,"6":1},"1":{"3":1,"4":1},"2":{"1":1,"6":9,"9":1,"25":1,"27":1,"31":27,"40":3,"56":1,"72":1,"89":1,"106":1,"116":1,"127":1,"131":1,"134":1,"136":2,"151":1,"154":1,"158":2,"164":1,"169":1}}],["method",{"0":{"149":1},"2":{"1":1,"4":1,"5":10,"6":97,"24":1,"34":1,"37":1,"40":37,"41":2,"44":1,"47":1,"54":1,"60":3,"61":2,"63":1,"66":4,"69":1,"72":2,"89":2,"103":1,"106":2,"116":2,"127":1,"136":5,"148":1,"149":2,"151":2,"152":9,"153":14,"156":2,"165":1,"166":3,"175":1,"178":1}}],["mutation",{"2":{"172":1}}],["mutlipolygon",{"2":{"4":1,"6":1,"44":1}}],["muladd",{"2":{"40":2}}],["multifloats",{"2":{"13":1,"14":1,"15":1}}],["multifloat",{"2":{"7":1}}],["multilinestringtrait",{"2":{"141":1}}],["multilinestring",{"2":{"6":1,"136":1,"167":2}}],["multi",{"0":{"78":1,"79":1,"95":1,"96":1,"112":1,"113":1,"122":1,"123":1},"2":{"4":2,"6":3,"34":1,"37":1,"47":1,"69":2,"78":1,"79":1,"95":1,"96":1,"112":1,"113":1,"122":1,"123":1}}],["multicurves",{"2":{"37":1,"47":1}}],["multicurve",{"2":{"4":1,"6":1,"37":1}}],["multigeometry",{"2":{"4":2,"6":2,"66":2}}],["multiplication",{"2":{"153":1}}],["multiplied",{"2":{"40":3}}],["multiple",{"2":{"4":1,"6":1,"40":1,"100":1,"146":1,"162":1,"169":1,"173":1}}],["multiply",{"2":{"1":1,"6":1,"154":1}}],["multipolys",{"2":{"63":3}}],["multipoly`",{"2":{"51":2,"53":2,"62":2}}],["multipoly",{"2":{"6":9,"15":3,"51":1,"52":27,"53":1,"54":26,"62":1,"63":24,"145":21,"158":9}}],["multipolygon`",{"2":{"127":1}}],["multipolygons",{"2":{"3":1,"4":1,"6":11,"44":1,"51":3,"53":3,"54":3,"62":3,"65":1,"69":1,"103":2,"144":1,"169":1,"170":1}}],["multipolygon",{"2":{"3":2,"4":5,"6":16,"37":2,"43":1,"51":1,"52":7,"53":1,"54":5,"62":1,"63":6,"69":4,"103":2,"127":7,"136":1,"142":2,"143":7,"144":8,"145":2,"158":3,"169":8,"170":1}}],["multipolygontrait",{"2":{"1":1,"3":4,"4":2,"6":7,"23":1,"52":4,"54":4,"63":4,"69":6,"78":1,"79":1,"95":1,"96":1,"103":8,"112":1,"113":1,"122":1,"123":1,"136":1,"141":1,"145":4}}],["multipoint",{"2":{"4":5,"6":5,"37":1,"69":5,"86":6,"136":4,"158":1,"169":5}}],["multipoints",{"2":{"3":2,"4":1,"6":3,"37":1,"47":1,"69":2,"103":2,"158":1,"169":1}}],["multipointtrait",{"2":{"1":1,"3":2,"4":4,"6":8,"34":2,"37":1,"47":1,"69":8,"78":1,"79":1,"86":4,"95":1,"96":1,"103":4,"112":1,"113":1,"122":1,"123":1,"134":1,"141":1,"158":2,"167":1}}],["multithreading",{"2":{"1":2,"4":1,"6":5,"133":1}}],["must",{"2":{"1":1,"3":8,"4":2,"5":1,"6":23,"9":1,"34":1,"40":5,"41":1,"45":2,"47":3,"50":1,"54":2,"69":5,"72":1,"82":2,"84":1,"85":1,"89":1,"100":13,"103":1,"105":1,"106":1,"116":2,"127":1,"131":1,"136":1,"140":1,"141":3,"142":1,"148":1,"152":1,"153":1,"158":1,"162":4,"166":1}}],["much",{"2":{"0":1,"6":3,"51":1,"53":1,"62":1}}],["mdash",{"2":{"1":4,"3":9,"4":8,"5":3,"6":89,"131":3,"141":1,"142":4}}],["df",{"2":{"172":3,"173":4,"176":10,"177":12}}],["dp",{"2":{"158":3}}],["dy",{"2":{"126":2,"153":3}}],["dy2",{"2":{"126":2}}],["dy1",{"2":{"86":10,"126":2}}],["dyc",{"2":{"86":2}}],["dx",{"2":{"126":2,"153":3}}],["dx2",{"2":{"126":2}}],["dx1",{"2":{"86":10,"126":2}}],["dxc",{"2":{"86":2}}],["drop",{"2":{"63":1,"145":1,"153":1}}],["driven",{"2":{"25":1,"27":1}}],["driving",{"2":{"25":1,"27":1}}],["duplicated",{"2":{"54":2}}],["during",{"2":{"45":1}}],["due",{"2":{"44":1,"45":1,"54":3}}],["date",{"2":{"60":1}}],["datas",{"2":{"178":1}}],["datasets",{"2":{"170":1,"175":1,"176":1}}],["dataset",{"2":{"170":1,"175":1}}],["datainterpolations",{"2":{"150":1}}],["dataframes",{"2":{"172":3,"176":2,"177":1}}],["dataframe",{"2":{"29":1,"172":1,"175":1,"176":5,"177":2}}],["data",{"0":{"127":1,"173":1},"2":{"23":1,"25":1,"27":1,"59":1,"127":2,"158":10,"168":1,"170":2,"171":2,"172":2,"173":6,"176":1}}],["dataaspect",{"2":{"13":1,"14":1,"33":1,"36":1,"39":2,"43":1,"46":1,"65":2,"127":2,"151":1,"158":1}}],["dashboard",{"0":{"14":1},"2":{"13":1,"14":1}}],["d",{"2":{"1":2,"5":1,"6":1,"40":1,"148":1,"160":3}}],["deu",{"2":{"177":2}}],["demonstrates",{"2":{"176":1}}],["densify",{"2":{"152":3}}],["densifying",{"2":{"152":1}}],["densifies",{"2":{"150":1}}],["denoted",{"2":{"100":1}}],["denotes",{"2":{"45":1}}],["debug",{"2":{"141":1}}],["debugging",{"2":{"40":1,"45":1}}],["de",{"2":{"100":2,"175":1}}],["derivation",{"2":{"54":1}}],["dealing",{"2":{"47":1}}],["delete",{"2":{"86":1,"103":1,"127":1,"160":1}}],["deleteat",{"2":{"45":6,"160":1,"162":2}}],["deltri",{"2":{"61":1}}],["delayed",{"2":{"45":10,"52":2,"54":2,"63":2}}],["delay",{"2":{"45":14,"51":2,"52":2,"53":2,"54":2,"62":2,"63":2}}],["delaunay",{"2":{"6":1,"61":1}}],["delaunaytriangulation",{"2":{"6":1,"31":1,"56":1,"61":6}}],["depend",{"2":{"45":2}}],["depends",{"2":{"45":1,"50":1}}],["depending",{"2":{"1":1,"6":1,"23":1,"54":1,"136":1}}],["depth",{"2":{"40":2}}],["desktop",{"2":{"173":1}}],["dest",{"2":{"170":2}}],["destination",{"2":{"170":5}}],["desired",{"2":{"62":1,"173":1}}],["despite",{"2":{"34":1}}],["describe",{"2":{"17":1}}],["described",{"2":{"6":1,"40":1,"44":1,"45":1}}],["deconstruct",{"2":{"129":1}}],["decomposition",{"2":{"18":1,"129":1}}],["decomposing",{"2":{"18":1}}],["decompose",{"2":{"18":2,"29":1,"40":4,"137":1}}],["decrementing",{"2":{"127":1}}],["decrease",{"2":{"44":1}}],["decreasing",{"2":{"6":1,"158":1}}],["decide",{"2":{"60":1,"127":1}}],["decision",{"2":{"24":1}}],["degeneracies",{"2":{"9":1}}],["degenerate",{"2":{"6":1,"40":1,"50":2}}],["degrees",{"2":{"6":1,"33":1,"126":1,"152":1}}],["defines",{"2":{"45":1,"129":1,"140":1,"163":1}}],["define",{"2":{"39":1,"54":2,"68":1,"127":2,"129":1,"134":1,"136":1,"163":1,"178":2}}],["defined",{"2":{"4":1,"5":1,"6":3,"7":1,"22":1,"34":2,"40":1,"46":1,"47":4,"54":4,"66":2,"125":1,"136":1,"153":1,"163":1}}],["definitions",{"2":{"166":1}}],["definition",{"2":{"4":4,"6":6,"69":8,"71":1,"153":1}}],["default",{"2":{"1":2,"4":5,"6":14,"34":1,"37":2,"47":1,"51":1,"52":2,"53":1,"54":5,"61":1,"62":1,"63":2,"66":2,"127":5,"131":1,"136":2,"148":2,"158":2}}],["defaults",{"2":{"1":6,"4":2,"6":14,"133":3,"136":1}}],["deeper",{"2":{"1":1,"6":1,"135":1,"136":2}}],["detrimental",{"2":{"143":1}}],["detector",{"2":{"60":1}}],["detection",{"2":{"60":1,"127":1}}],["determined",{"2":{"45":1,"47":1}}],["determine",{"2":{"45":10,"47":3,"51":2,"53":2,"54":9,"62":2,"72":1,"89":1,"100":9,"103":1,"106":1,"116":1,"160":3,"175":1}}],["determines",{"2":{"37":1,"45":3,"54":1,"100":10}}],["determinant",{"2":{"6":1,"40":1}}],["details",{"2":{"131":3,"132":1,"151":2}}],["detail",{"2":{"26":1}}],["det",{"2":{"0":1,"6":2,"40":4}}],["dirname",{"2":{"158":4}}],["dirty",{"2":{"157":1}}],["directive",{"2":{"136":1}}],["direction",{"2":{"6":1,"45":1,"69":5,"127":3}}],["directly",{"2":{"6":1,"61":3,"127":1,"152":1}}],["dig",{"2":{"136":1}}],["dict",{"2":{"127":5}}],["didn",{"2":{"63":1,"100":1,"165":1}}],["division",{"2":{"39":1}}],["divided",{"2":{"26":1}}],["div",{"2":{"6":2}}],["div>",{"2":{"6":2}}],["ditance",{"2":{"4":1,"6":1,"66":1}}],["dimensional",{"2":{"5":1,"6":3,"36":1,"40":1,"61":2}}],["dimensions",{"2":{"3":1,"6":1,"103":2}}],["dimension",{"2":{"1":1,"3":4,"6":4,"86":2,"102":1,"103":4,"148":1}}],["discouraged",{"2":{"171":1}}],["discussion",{"2":{"25":1,"27":1,"50":1}}],["distributed",{"2":{"176":2}}],["distinct",{"2":{"54":1,"127":1}}],["dist",{"2":{"54":40,"66":19,"100":2,"152":8,"160":40}}],["distance`",{"2":{"152":3,"153":1,"166":1}}],["distances",{"2":{"54":1,"65":1,"152":1,"159":5}}],["distance",{"0":{"64":2,"65":2},"1":{"65":2,"66":2},"2":{"0":4,"4":26,"6":47,"31":1,"40":13,"41":3,"47":3,"54":32,"64":2,"65":17,"66":92,"100":1,"129":1,"150":1,"151":5,"152":13,"153":14,"158":1,"159":3,"160":6,"161":1,"174":1,"178":2}}],["disagree",{"2":{"37":1}}],["disparate",{"2":{"25":1,"27":1}}],["dispatches",{"2":{"6":1,"34":1,"37":1,"40":1,"44":1,"47":1,"66":1,"69":1,"72":1,"89":1,"103":1,"106":1,"116":1}}],["dispatch",{"2":{"4":1,"6":5,"24":1,"40":1,"69":1,"131":1,"136":2,"164":1,"166":1}}],["displaying",{"2":{"170":1}}],["display",{"2":{"13":1,"39":1,"170":1}}],["disjoint",{"0":{"87":1,"88":1,"91":1,"92":1,"93":1,"94":1,"95":1},"1":{"88":1,"89":1},"2":{"0":2,"3":5,"6":7,"23":1,"31":1,"63":2,"87":1,"88":3,"89":11,"90":6,"91":15,"92":18,"93":10,"94":5,"95":4,"96":2,"99":3,"100":16,"142":2,"143":2,"145":7,"175":1}}],["diffs",{"2":{"34":4}}],["diff",{"2":{"6":2,"34":17,"51":5,"52":3,"103":3,"145":8}}],["differs",{"2":{"170":1}}],["differ",{"2":{"4":1,"6":1,"66":1}}],["differently",{"2":{"4":3,"6":4,"34":1,"37":2,"47":1}}],["different",{"2":{"3":1,"4":4,"6":6,"20":1,"23":1,"34":1,"37":4,"45":3,"47":1,"54":2,"60":1,"103":3,"127":1,"134":1,"136":1,"143":2,"170":2,"173":1}}],["differences",{"0":{"52":1},"2":{"54":1,"160":1}}],["difference",{"0":{"51":1},"2":{"0":1,"6":7,"11":1,"23":1,"31":1,"45":3,"51":12,"52":14,"54":1,"62":1,"63":3,"142":1,"145":1,"152":1}}],["diffintersectingpolygons",{"2":{"0":1,"6":1,"142":1,"145":4}}],["doi",{"2":{"51":2,"53":2,"62":2,"100":1}}],["doing",{"2":{"17":1,"22":1,"136":1,"171":1}}],["dot",{"2":{"34":2,"40":1}}],["doable",{"2":{"9":1}}],["documenter",{"2":{"131":3,"132":1,"151":2}}],["documentation",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"2":{"0":1,"26":1,"39":1}}],["docstring",{"2":{"131":6,"132":2,"151":4}}],["docstrings",{"0":{"130":1},"1":{"131":1},"2":{"7":1}}],["docs",{"0":{"26":1},"2":{"26":1,"127":1}}],["doc",{"2":{"9":1,"10":1}}],["does",{"0":{"22":1},"2":{"7":1,"19":1,"43":1,"54":2,"71":3,"81":1,"100":1}}],["doesn",{"2":{"4":1,"6":2,"37":1,"50":1,"69":1,"152":1,"166":1,"177":1}}],["download",{"2":{"170":1}}],["down",{"2":{"6":1,"18":1,"29":1,"40":1,"136":1}}],["doublets",{"2":{"177":2}}],["double",{"2":{"161":4}}],["doubled",{"2":{"6":1,"161":1}}],["douglas",{"2":{"156":2,"158":2,"160":1}}],["douglaspeucker",{"0":{"160":1},"2":{"0":1,"6":5,"156":1,"158":5,"160":6}}],["done",{"0":{"10":1},"2":{"13":1,"14":1,"100":2,"127":1,"129":1,"143":1,"169":1,"175":1}}],["don",{"2":{"4":2,"6":3,"45":4,"51":1,"63":1,"69":6,"92":1,"100":1,"105":1,"109":1,"127":2,"136":3,"153":1,"166":1}}],["do",{"0":{"9":1,"23":1,"55":1},"2":{"1":1,"6":2,"14":1,"23":1,"31":1,"34":1,"37":2,"40":2,"41":1,"44":1,"47":1,"50":1,"63":3,"66":2,"68":1,"69":1,"84":1,"92":2,"93":1,"94":2,"100":1,"127":4,"129":1,"136":11,"138":1,"139":1,"144":1,"147":2,"149":1,"152":1,"154":2,"155":2,"158":1,"170":2,"171":2,"172":3,"176":1,"177":1}}],["ay",{"2":{"126":2}}],["azimuth",{"2":{"126":2}}],["automatically",{"2":{"103":1,"170":1}}],["a3",{"2":{"59":1}}],["against",{"2":{"69":1,"100":2,"152":1,"158":1}}],["again",{"2":{"54":1,"136":1}}],["a``",{"2":{"52":2}}],["a`",{"2":{"52":7,"54":3,"63":2}}],["away",{"2":{"41":1,"86":1,"178":1}}],["a2y",{"2":{"54":4}}],["a2x",{"2":{"54":4}}],["a2",{"2":{"39":4,"54":54,"60":1,"103":6}}],["a1y",{"2":{"54":7}}],["a1x",{"2":{"54":7}}],["a1",{"2":{"39":2,"45":9,"54":66,"60":1,"103":6}}],["ams",{"2":{"174":2}}],["america",{"2":{"158":1}}],["am",{"2":{"100":1}}],["ambiguity",{"2":{"66":2,"136":5}}],["amounts",{"2":{"173":1}}],["amount",{"2":{"36":1,"46":1}}],["amp",{"2":{"6":1,"9":1}}],["axes",{"2":{"127":6}}],["ax",{"2":{"13":3,"14":3,"126":2,"169":5}}],["axislegend",{"2":{"58":1,"151":1,"157":1}}],["axis",{"2":{"13":2,"14":1,"33":1,"36":1,"39":4,"43":1,"46":1,"60":2,"65":1,"127":2,"151":1,"158":1,"174":1}}],["axs",{"2":{"13":2}}],["a>",{"2":{"6":2}}],["adjust",{"2":{"54":1}}],["adjacent",{"2":{"45":1,"52":1,"54":1,"63":1}}],["adaptivity",{"0":{"55":1}}],["adaptive",{"2":{"7":1,"13":3,"14":2,"55":1}}],["adapted",{"2":{"51":1,"53":1,"62":1,"126":1}}],["advance",{"2":{"44":2}}],["advised",{"2":{"6":1,"164":1}}],["administrative",{"2":{"177":1}}],["admin",{"2":{"11":1,"59":1,"158":2}}],["adm0",{"2":{"11":7,"59":4}}],["additional",{"2":{"173":1}}],["additionally",{"2":{"45":3,"69":1}}],["addition",{"2":{"39":1,"63":1}}],["adding",{"2":{"4":1,"6":4,"7":1,"63":2,"127":1,"146":1,"150":1,"152":2,"153":1}}],["added",{"2":{"6":1,"34":1,"45":6,"47":1,"63":2,"131":1,"136":1,"145":2,"160":1}}],["add",{"2":{"3":1,"6":1,"7":2,"40":1,"41":1,"45":16,"47":1,"50":4,"51":3,"53":1,"54":2,"61":1,"62":2,"63":9,"86":1,"127":4,"136":1,"150":1,"152":1,"160":10,"165":1,"170":1,"172":2,"175":1}}],["average",{"2":{"38":3,"44":4,"54":1}}],["available",{"0":{"142":1},"2":{"6":3,"31":1,"44":1,"141":3,"150":1,"151":1,"153":1,"158":1,"162":1,"164":1}}],["avoid",{"2":{"5":1,"6":7,"40":1,"51":1,"53":1,"54":1,"62":1,"63":1,"127":2,"136":5,"153":1,"159":1,"160":1,"161":1,"169":3}}],["achieve",{"2":{"143":1}}],["across",{"2":{"134":1}}],["acos",{"2":{"34":1}}],["activate",{"2":{"151":1}}],["action",{"2":{"20":2}}],["actions",{"2":{"20":2}}],["actual",{"2":{"10":1,"40":1,"126":1,"139":1,"148":1,"152":1}}],["actually",{"2":{"1":1,"6":1,"9":1,"40":4,"54":1,"63":3,"100":1,"127":1,"154":1,"173":1}}],["access",{"2":{"170":1}}],["accessed",{"2":{"166":1}}],["acceptable",{"2":{"100":1}}],["accepts",{"2":{"61":1}}],["accept",{"2":{"6":1,"166":1}}],["according",{"2":{"138":1,"143":1,"144":1,"176":1}}],["accordingly",{"2":{"45":1}}],["account",{"2":{"51":1,"53":1}}],["accurary",{"2":{"54":1}}],["accuratearithmetic",{"2":{"11":2}}],["accurate",{"0":{"11":1},"2":{"11":3,"151":1}}],["accumulators",{"2":{"40":1}}],["accumulator",{"2":{"40":1}}],["accumulate",{"2":{"37":1,"44":3}}],["accumulation",{"0":{"11":1},"2":{"40":1}}],["after",{"2":{"6":8,"34":1,"45":3,"136":1,"158":2}}],["ab",{"2":{"45":3,"51":1,"53":1,"54":5,"62":1}}],["able",{"2":{"20":1,"54":1}}],["ability",{"2":{"17":1}}],["about",{"2":{"6":1,"24":2,"30":1,"40":2,"100":1,"137":1}}],["above",{"2":{"4":1,"6":1,"34":1,"44":1,"45":1,"54":1,"63":1,"141":1}}],["abs",{"2":{"34":1,"37":4,"44":1,"47":2,"86":8,"103":2,"127":1,"161":1,"178":1}}],["absolute",{"2":{"4":1,"6":1,"36":1,"37":2}}],["abstractpolygon",{"2":{"136":1}}],["abstractpolygontrait",{"2":{"66":1}}],["abstractpoint",{"2":{"136":1}}],["abstractface",{"2":{"136":1}}],["abstractfloat",{"2":{"31":1,"34":1,"37":2,"45":1,"47":2,"50":1,"51":1,"53":1,"54":1,"62":1,"66":8}}],["abstractrange",{"2":{"127":6}}],["abstractmesh",{"2":{"136":1}}],["abstractmulticurvetrait",{"2":{"78":1,"79":1,"95":1,"96":1,"112":1,"113":1,"122":1,"123":1}}],["abstractmatrix",{"2":{"6":5,"127":13}}],["abstractcurvetrait",{"2":{"34":1,"37":1,"47":1,"74":1,"77":1,"78":1,"86":1,"91":1,"95":1,"108":1,"111":1,"112":1,"118":1,"121":1,"122":1,"126":1,"158":2,"167":3}}],["abstractarrays",{"2":{"134":1}}],["abstractarray",{"2":{"6":1,"131":1,"136":6,"167":2}}],["abstract",{"2":{"6":3,"40":3,"140":1,"141":4,"142":1,"158":3,"165":1}}],["abstractvector",{"2":{"5":1,"6":1,"40":26,"127":8}}],["abstractgeometrytrait`",{"2":{"141":1}}],["abstractgeometrytrait",{"2":{"6":3,"37":2,"47":1,"66":1,"79":1,"96":1,"113":1,"123":1,"131":1,"134":1,"141":4,"142":2,"167":5}}],["abstractgeometry",{"2":{"3":4,"6":4,"82":2,"85":2,"136":1}}],["abstracttrait",{"2":{"1":2,"3":2,"6":8,"50":1,"52":2,"54":4,"63":2,"103":4,"129":1,"131":2,"136":9,"164":3}}],["abstractbarycentriccoordinatemethod",{"2":{"0":1,"5":1,"6":7,"40":18}}],["attribute",{"2":{"173":1}}],["attributed",{"2":{"172":1}}],["attributes",{"0":{"172":1},"2":{"168":1,"172":3}}],["attempts",{"2":{"100":1}}],["attach",{"2":{"1":2,"4":1,"6":5,"133":1}}],["atomic",{"2":{"7":1}}],["at",{"2":{"3":4,"5":1,"6":6,"9":1,"18":1,"20":1,"24":1,"26":1,"34":2,"36":1,"37":1,"39":1,"40":2,"45":4,"47":2,"54":8,"60":1,"63":2,"100":17,"103":6,"105":1,"106":1,"109":3,"110":2,"111":2,"112":1,"113":1,"116":1,"122":1,"126":1,"134":1,"136":1,"151":1,"153":1,"160":1,"162":1,"170":1,"171":2}}],["arbitrarily",{"2":{"134":1}}],["arbitrary",{"2":{"38":1,"129":1,"169":1}}],["around",{"2":{"39":1,"40":2,"50":1,"65":1,"69":1,"127":1,"158":1,"176":1}}],["argmin",{"2":{"162":1}}],["argtypes",{"2":{"41":2,"149":1,"152":1}}],["args",{"2":{"13":2}}],["argumenterror",{"2":{"63":1,"127":1,"136":5}}],["argument",{"2":{"4":5,"6":10,"34":1,"37":2,"44":1,"47":1,"51":1,"53":1,"62":1,"66":2,"136":2,"166":2,"170":1,"171":1}}],["arguments",{"2":{"1":1,"3":1,"6":5,"45":1,"72":2,"89":1,"106":1,"116":1,"148":1,"152":2,"153":1,"166":1}}],["arithmetic",{"2":{"11":1}}],["archgdal",{"2":{"23":1}}],["arc",{"2":{"6":1,"152":1}}],["array",{"2":{"4":1,"6":2,"37":1,"47":1,"127":5,"136":7,"159":1,"162":1}}],["arrays",{"2":{"1":1,"6":2,"22":1,"127":1,"136":2}}],["aren",{"2":{"4":3,"6":5,"50":1,"52":1,"54":2,"63":4,"69":3,"142":2,"145":2}}],["are",{"2":{"1":1,"3":4,"4":18,"5":2,"6":50,"9":2,"20":2,"22":3,"24":1,"25":1,"26":2,"27":1,"33":1,"34":8,"36":1,"37":2,"38":6,"40":11,"43":1,"44":3,"45":31,"47":6,"50":3,"51":3,"52":15,"53":2,"54":16,"60":3,"62":5,"63":9,"65":1,"66":1,"68":3,"69":26,"72":7,"74":1,"75":3,"76":3,"77":1,"79":1,"81":1,"88":1,"89":5,"91":1,"92":1,"93":1,"95":1,"96":1,"100":12,"103":7,"106":5,"108":1,"110":2,"115":1,"116":5,"118":1,"119":3,"120":3,"121":1,"123":1,"126":1,"127":14,"128":1,"131":1,"134":1,"136":4,"137":1,"138":1,"139":1,"141":1,"142":3,"143":1,"144":1,"145":2,"146":1,"151":1,"152":1,"153":1,"155":1,"158":4,"160":1,"162":2,"163":2,"164":1,"166":1,"169":1,"172":2,"173":2,"174":1,"175":3,"176":6,"177":1,"178":1}}],["area2",{"2":{"44":4}}],["area1",{"2":{"44":4}}],["areas",{"2":{"4":2,"6":2,"37":3,"161":2}}],["area",{"0":{"35":2,"36":2},"1":{"36":2,"37":2},"2":{"0":5,"4":15,"6":25,"11":6,"31":1,"35":2,"36":9,"37":61,"42":1,"43":3,"44":49,"46":2,"47":44,"62":2,"63":1,"103":1,"129":1,"142":2,"145":2,"158":2,"161":4,"170":1}}],["ask",{"2":{"23":1}}],["aspect",{"2":{"13":1,"14":1,"33":1,"36":1,"39":2,"43":1,"46":1,"65":2,"127":2,"151":1,"158":1}}],["assign",{"2":{"168":1}}],["assigned",{"2":{"45":1,"127":7,"176":1}}],["assets",{"2":{"170":1}}],["assetpath",{"2":{"170":1}}],["assemble",{"2":{"139":1}}],["assert",{"2":{"40":23,"44":1,"45":1,"50":1,"52":1,"54":1,"153":1,"167":1}}],["assume",{"2":{"103":2,"136":3,"138":1,"145":1}}],["assumed",{"2":{"37":1,"69":1,"100":1}}],["assumes",{"2":{"6":1,"45":1,"66":1,"152":1,"162":1}}],["associativity",{"2":{"19":1}}],["associated",{"0":{"1":1},"2":{"38":2}}],["as",{"2":{"1":8,"3":18,"4":6,"5":1,"6":80,"7":1,"11":2,"13":3,"14":3,"15":3,"17":2,"18":2,"20":1,"22":1,"23":2,"24":1,"25":1,"27":1,"33":2,"34":4,"36":2,"37":3,"38":4,"39":1,"40":4,"41":3,"43":2,"44":1,"45":15,"46":2,"47":5,"49":3,"50":5,"51":8,"52":2,"53":7,"54":8,"56":1,"58":2,"59":2,"60":3,"61":3,"62":7,"63":5,"65":3,"66":1,"68":2,"69":2,"71":3,"72":3,"81":2,"82":2,"84":2,"85":2,"86":2,"88":2,"89":3,"98":2,"99":2,"100":7,"102":2,"103":2,"105":2,"106":3,"108":1,"115":2,"116":3,"126":8,"127":3,"129":3,"131":1,"134":2,"135":2,"136":15,"138":2,"139":2,"141":1,"142":1,"144":2,"146":1,"148":3,"150":2,"151":2,"152":3,"154":3,"156":2,"157":2,"158":7,"160":2,"164":2,"165":2,"166":2,"167":2,"168":3,"169":2,"170":1,"171":1,"173":3,"174":3,"175":2,"176":3,"177":2}}],["alone",{"2":{"136":1}}],["along",{"2":{"4":4,"6":5,"45":3,"47":2,"54":4,"69":4,"100":1}}],["although",{"2":{"119":1,"120":1}}],["alternate",{"2":{"45":1}}],["alternative",{"2":{"45":1}}],["already",{"2":{"69":1,"100":2,"160":1}}],["almost",{"2":{"54":1}}],["alg=nothing",{"2":{"158":1}}],["alg`",{"2":{"158":1}}],["alg",{"2":{"6":4,"158":21,"159":3,"160":8,"161":3,"162":7,"166":9}}],["algorithms",{"2":{"6":3,"56":1,"60":1,"138":1,"153":1,"156":1,"158":4,"160":1,"162":1}}],["algorithm",{"0":{"159":1,"160":1,"161":1},"2":{"6":12,"39":1,"45":2,"47":1,"50":3,"51":1,"53":1,"56":1,"61":4,"62":1,"100":1,"156":1,"158":8,"159":1,"160":3,"161":1,"166":4}}],["allocating",{"2":{"61":1}}],["allocations",{"2":{"5":1,"6":1,"40":1}}],["allocate",{"2":{"61":1}}],["allow=",{"2":{"100":1}}],["allows",{"2":{"11":1,"18":1,"23":1,"24":1,"29":1,"72":2,"74":3,"75":3,"76":3,"77":1,"89":2,"91":3,"92":3,"93":2,"94":1,"106":1,"109":1,"110":1,"111":1,"116":3,"118":3,"119":3,"120":3,"121":1,"129":1,"156":1,"170":1,"172":1,"175":1}}],["allowed",{"2":{"6":1,"72":3,"89":3,"100":6,"106":5,"108":1,"109":2,"116":3,"158":1}}],["allow",{"2":{"1":1,"6":1,"23":1,"54":1,"72":7,"86":3,"89":7,"100":73,"106":10,"116":10,"154":1}}],["all",{"2":{"1":3,"3":2,"4":3,"6":14,"9":1,"11":7,"22":1,"25":1,"27":1,"31":2,"34":5,"37":3,"40":1,"45":13,"47":3,"51":1,"52":3,"54":3,"56":1,"59":3,"61":1,"63":5,"65":1,"69":2,"75":3,"76":3,"79":1,"81":1,"95":1,"96":1,"100":7,"103":4,"115":1,"123":1,"126":1,"127":3,"128":1,"131":1,"134":2,"135":1,"136":8,"139":1,"141":1,"143":1,"146":1,"147":1,"154":2,"155":1,"158":1,"163":1,"169":1,"171":1,"173":1,"175":1}}],["always",{"2":{"1":7,"4":6,"6":10,"25":1,"27":1,"36":1,"37":4,"47":2,"60":1,"65":1,"66":1,"69":1,"136":2,"148":4,"175":1}}],["also",{"2":{"1":2,"6":11,"23":1,"34":1,"37":2,"44":2,"45":3,"47":1,"51":1,"53":1,"54":2,"56":1,"60":1,"61":1,"62":1,"65":1,"66":2,"69":3,"103":1,"127":1,"134":1,"136":1,"139":1,"142":3,"145":2,"149":1,"150":1,"151":1,"152":1,"154":1,"156":1,"164":1,"169":2,"172":1}}],["a",{"0":{"23":1,"170":1,"172":1},"2":{"1":13,"3":5,"4":79,"5":1,"6":196,"7":3,"9":1,"11":1,"15":2,"17":1,"18":6,"20":3,"22":3,"23":4,"24":2,"25":2,"27":2,"29":2,"30":2,"33":3,"34":22,"36":11,"37":20,"38":13,"39":4,"40":11,"41":2,"43":5,"44":8,"45":281,"46":2,"47":17,"49":3,"50":4,"51":39,"52":30,"53":38,"54":91,"55":3,"56":3,"58":3,"59":2,"60":1,"61":4,"62":36,"63":45,"65":15,"66":27,"68":2,"69":54,"71":1,"72":3,"74":5,"75":3,"76":2,"78":2,"79":2,"81":2,"84":2,"86":1,"88":1,"89":3,"91":4,"92":3,"93":1,"95":2,"96":2,"98":2,"100":52,"102":5,"103":27,"105":2,"106":4,"108":4,"109":2,"110":2,"111":1,"112":2,"113":2,"115":1,"116":3,"118":5,"119":2,"120":2,"122":2,"123":2,"125":1,"126":4,"127":79,"129":4,"131":2,"134":4,"136":36,"137":6,"138":2,"139":2,"140":5,"141":5,"142":9,"143":8,"145":6,"146":2,"147":3,"148":8,"149":3,"150":5,"151":4,"152":8,"153":10,"154":2,"155":1,"157":3,"158":5,"161":3,"162":1,"164":6,"165":1,"166":12,"167":2,"168":1,"169":21,"170":12,"171":5,"172":5,"173":11,"174":1,"175":5,"176":8,"177":3,"178":3}}],["annotation",{"2":{"165":1}}],["annotated",{"2":{"26":1}}],["angels",{"2":{"34":1}}],["angle",{"2":{"34":35,"126":1}}],["angles",{"0":{"32":1,"33":1},"1":{"33":1,"34":1},"2":{"0":2,"4":10,"6":10,"31":1,"32":1,"33":4,"34":42}}],["answers",{"2":{"143":1}}],["answer",{"2":{"6":3,"51":1,"53":1,"54":1,"62":1}}],["another",{"2":{"3":1,"6":1,"45":2,"54":1,"61":1,"65":1,"71":1,"74":1,"76":1,"77":1,"81":1,"84":1,"88":1,"91":1,"92":1,"93":1,"94":1,"98":1,"100":1,"102":1,"103":1,"105":1,"108":1,"109":1,"110":1,"111":1,"115":1,"118":1,"119":1,"120":1,"121":1,"127":1,"148":1}}],["anonymous",{"2":{"1":1,"6":1,"154":1}}],["an",{"2":{"1":3,"4":11,"5":1,"6":29,"9":1,"13":1,"14":1,"18":1,"20":1,"23":2,"33":1,"34":4,"36":1,"37":2,"39":1,"40":3,"41":2,"43":1,"45":15,"46":2,"47":2,"49":1,"50":1,"51":2,"52":5,"53":2,"54":9,"61":3,"62":2,"63":2,"65":2,"66":5,"68":1,"69":1,"71":2,"74":2,"81":1,"84":1,"88":1,"98":1,"100":13,"102":1,"103":1,"105":1,"115":1,"118":2,"119":1,"120":1,"127":3,"128":1,"131":1,"134":1,"135":1,"136":8,"139":1,"146":1,"148":1,"152":1,"154":2,"166":3,"167":1,"169":2,"170":2,"172":1,"174":1,"176":1}}],["anything",{"2":{"39":1,"100":1}}],["any",{"2":{"1":3,"3":1,"4":2,"6":19,"18":1,"24":1,"25":1,"27":1,"29":1,"38":2,"44":1,"45":7,"47":1,"50":1,"52":1,"54":4,"63":1,"66":2,"73":2,"74":1,"77":1,"88":1,"90":2,"91":1,"92":2,"93":1,"94":2,"100":8,"103":2,"107":2,"117":2,"121":1,"127":2,"129":2,"131":1,"136":2,"139":1,"140":1,"141":3,"142":4,"145":4,"148":2,"150":1,"152":1,"153":1,"160":1,"167":1,"175":2,"176":2}}],["and",{"0":{"1":1,"20":1,"22":1,"24":1,"35":1,"52":1,"54":1,"63":1,"64":1,"169":1,"170":1,"172":1},"1":{"36":1,"37":1,"65":1,"66":1},"2":{"0":2,"1":8,"3":11,"4":18,"6":84,"7":1,"9":2,"17":4,"18":4,"20":2,"22":1,"23":2,"24":3,"25":2,"26":5,"27":2,"29":2,"30":1,"31":2,"34":13,"36":1,"37":7,"38":2,"39":2,"40":20,"41":1,"42":2,"43":1,"44":29,"45":71,"46":2,"47":18,"49":1,"50":4,"51":4,"52":16,"53":4,"54":38,"60":1,"61":2,"62":6,"63":15,"65":2,"66":13,"68":2,"69":13,"71":2,"72":3,"75":3,"76":4,"77":1,"81":3,"82":2,"84":2,"85":2,"86":1,"89":3,"92":3,"93":1,"94":1,"98":1,"100":36,"102":2,"103":3,"106":2,"110":2,"111":2,"115":3,"116":4,"118":2,"119":3,"120":3,"121":1,"126":2,"127":16,"129":8,"131":1,"134":2,"135":3,"136":22,"137":1,"138":2,"139":1,"140":1,"141":4,"142":2,"143":1,"146":2,"147":2,"148":2,"151":1,"152":5,"153":4,"154":1,"156":2,"157":1,"158":8,"160":8,"161":1,"162":1,"164":1,"165":3,"166":4,"168":3,"169":9,"170":7,"171":2,"173":5,"175":2,"176":4,"177":2}}],["apart",{"2":{"145":1}}],["april",{"0":{"7":1}}],["appears",{"2":{"138":1}}],["append",{"2":{"34":1,"45":5,"51":1,"52":2,"54":2,"62":1,"63":5,"145":2}}],["approximately",{"2":{"45":1,"151":1}}],["approach",{"2":{"19":1}}],["appropriately",{"2":{"176":1}}],["appropriate",{"2":{"6":1,"166":2}}],["applies",{"2":{"134":2}}],["applied",{"2":{"6":3,"20":1,"131":1,"136":2,"140":2,"141":2,"142":1}}],["application",{"2":{"1":1,"6":3,"136":1,"139":1,"141":3,"142":1,"145":2,"150":1,"153":1}}],["apply`",{"2":{"136":1}}],["applys",{"2":{"37":1,"47":1}}],["applyreduce",{"0":{"19":1},"2":{"0":2,"1":1,"6":1,"17":1,"19":2,"29":1,"34":1,"37":1,"44":2,"47":1,"66":2,"129":3,"131":1,"136":39,"165":1}}],["apply",{"0":{"1":1,"18":1,"22":1,"29":1,"134":1},"1":{"19":1},"2":{"0":2,"1":4,"6":7,"17":1,"18":5,"20":1,"22":1,"24":1,"29":3,"129":5,"131":1,"133":1,"134":4,"135":1,"136":60,"141":4,"142":1,"146":1,"147":3,"148":1,"152":1,"153":1,"154":3,"155":2,"158":2,"165":1}}],["apis",{"2":{"17":1}}],["api",{"0":{"0":1,"40":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"2":{"0":1,"6":3,"24":1,"40":1,"152":1,"158":1,"166":1}}],["snapped",{"2":{"127":1}}],["s3",{"2":{"45":3}}],["scratch",{"2":{"173":1}}],["sciences",{"2":{"170":1}}],["scalefactor",{"2":{"152":3}}],["scattered",{"2":{"176":1}}],["scatter",{"2":{"43":1,"65":2,"68":2,"71":1,"81":2,"84":1,"88":2,"102":2,"115":2,"176":1}}],["schema",{"2":{"136":6}}],["scheme",{"2":{"44":1}}],["scenario",{"2":{"100":2}}],["scene",{"2":{"14":1}}],["skipmissing",{"2":{"127":1}}],["skipped",{"2":{"127":1}}],["skip",{"2":{"37":1,"100":14,"127":1,"162":4}}],["skygering",{"2":{"7":1}}],["square",{"2":{"66":1,"159":1,"160":1}}],["squared",{"2":{"6":2,"47":2,"66":12,"159":2,"160":7}}],["sqrt",{"2":{"34":2,"44":1,"66":3}}],["sgn",{"2":{"34":5}}],["smallest",{"2":{"34":2,"54":1,"56":1}}],["sᵢ₋₁",{"2":{"40":25}}],["sᵢ₊₁",{"2":{"6":2,"40":41}}],["sᵢ",{"2":{"6":4,"40":46}}],["src",{"2":{"6":2}}],["syntax",{"2":{"172":1}}],["symdifference",{"2":{"128":1}}],["sym10100477",{"2":{"100":1}}],["symbol=",{"2":{"86":1}}],["symbol",{"2":{"6":1,"166":2}}],["system",{"0":{"170":1,"171":1},"2":{"1":2,"148":2,"168":2,"170":1}}],["switches",{"2":{"54":1,"63":1}}],["switch",{"2":{"45":1,"63":1,"165":1}}],["switching",{"2":{"6":1,"47":1}}],["swap",{"2":{"6":1,"63":1,"66":2,"147":1}}],["swapped",{"2":{"3":1,"6":1,"72":1,"82":1,"85":1,"86":1,"99":1,"103":1}}],["swapping",{"2":{"1":1,"6":1,"136":1}}],["s2",{"2":{"6":4,"40":6,"45":3}}],["s1",{"2":{"6":3,"40":6,"45":3}}],["saving",{"0":{"173":1}}],["saved",{"2":{"69":1}}],["save",{"2":{"34":1,"168":1,"173":3}}],["samples",{"2":{"13":1}}],["sample",{"2":{"13":1}}],["same",{"2":{"3":2,"4":12,"6":23,"18":1,"34":3,"37":1,"45":15,"47":1,"50":1,"51":3,"53":1,"54":1,"60":1,"62":1,"63":1,"65":1,"68":2,"69":30,"100":2,"102":1,"103":8,"131":1,"134":1,"136":6,"137":1,"142":2,"144":1,"145":2,"151":1,"169":1,"170":1,"173":1}}],["says",{"2":{"60":1}}],["say",{"2":{"6":1,"40":1,"152":1}}],["span",{"2":{"176":1}}],["spatial",{"0":{"175":1},"1":{"176":1,"177":1,"178":1},"2":{"175":6,"176":3,"178":1}}],["spawn",{"2":{"136":5}}],["space",{"2":{"6":2,"25":1,"27":1,"34":1,"36":1,"100":1,"152":1,"153":1}}],["sp",{"2":{"100":2}}],["split",{"2":{"50":1}}],["specialized",{"2":{"25":1,"27":1,"61":1}}],["specify",{"2":{"6":1,"131":1,"136":1,"170":1,"171":1,"175":1}}],["specification",{"2":{"138":1,"141":1,"143":1,"144":1}}],["specifically",{"2":{"6":2,"40":3,"156":1,"175":1}}],["specific",{"2":{"45":1,"72":1,"89":1,"106":1,"116":1,"136":5}}],["specified",{"2":{"3":1,"6":2,"45":1,"52":2,"54":2,"63":2,"103":1,"134":1,"158":1}}],["slow",{"2":{"177":1}}],["slower",{"2":{"6":1,"166":2}}],["slope2",{"2":{"126":2}}],["slope1",{"2":{"126":2}}],["slidergrid",{"2":{"14":1}}],["sliders",{"2":{"14":3}}],["slightly",{"2":{"4":2,"6":2,"37":2}}],["suite",{"2":{"152":5,"158":13}}],["suggestion",{"2":{"149":1}}],["sun",{"2":{"100":1}}],["surrounds",{"2":{"100":1}}],["sure",{"2":{"9":1,"34":1,"45":2,"66":1,"103":1,"162":1}}],["suppose",{"2":{"177":1,"178":1}}],["support",{"2":{"41":1,"150":1,"178":1}}],["supports",{"2":{"39":1,"40":1,"56":1,"173":1,"178":2}}],["supported",{"2":{"23":1,"173":1}}],["supertype",{"2":{"6":1,"40":1}}],["sukumar",{"2":{"6":1,"40":1}}],["such",{"2":{"4":1,"6":1,"36":1,"49":1,"56":1,"134":1,"146":1}}],["sum=1",{"2":{"40":1}}],["sum",{"2":{"4":2,"6":3,"11":6,"36":1,"37":2,"38":2,"40":8,"47":1,"66":2,"126":5,"162":1,"167":4}}],["sublevel",{"2":{"177":1}}],["subsequent",{"2":{"169":1}}],["substituted",{"2":{"1":1,"6":1,"136":1}}],["subgeom1",{"2":{"136":2}}],["subgeom",{"2":{"136":3}}],["subject",{"2":{"45":1}}],["subtype",{"2":{"136":1}}],["subtypes",{"2":{"6":2,"40":2}}],["subtracted",{"2":{"126":1}}],["subtitle",{"2":{"13":1,"39":2,"152":1,"158":2}}],["sub",{"2":{"4":6,"6":7,"34":1,"37":3,"47":1,"52":6,"54":3,"63":4,"66":2,"78":2,"79":2,"95":2,"96":2,"112":2,"113":2,"122":2,"123":2,"136":3,"143":4,"144":2,"145":4}}],["series",{"2":{"169":1}}],["serve",{"2":{"6":1,"40":1}}],["searchsortedfirst",{"2":{"160":1}}],["seg2",{"2":{"126":2}}],["seg1",{"2":{"126":3}}],["seg",{"2":{"100":23,"103":9}}],["segmentation",{"2":{"151":1}}],["segments",{"2":{"23":1,"31":1,"33":2,"34":1,"43":1,"44":2,"45":3,"47":1,"54":6,"100":18,"152":1,"153":3}}],["segmentization",{"2":{"150":1}}],["segmentizing",{"2":{"6":3,"151":1,"152":2,"153":1}}],["segmentized",{"2":{"151":1}}],["segmentizes",{"2":{"150":1}}],["segmentizemethod",{"2":{"6":1,"152":3,"153":2}}],["segmentize",{"0":{"150":1},"1":{"151":1,"152":1,"153":1},"2":{"0":1,"6":4,"31":1,"41":1,"129":1,"150":1,"151":5,"152":11,"153":13,"174":1}}],["segment",{"2":{"4":4,"6":7,"34":1,"44":5,"45":6,"47":3,"49":1,"54":17,"66":2,"86":3,"100":43,"103":3,"126":2,"150":1,"152":2,"153":1}}],["seperate",{"2":{"54":1}}],["separates",{"2":{"100":1}}],["separate",{"2":{"45":1,"127":1,"136":1,"165":1,"173":1,"176":1}}],["separately",{"2":{"40":1,"127":1}}],["sense",{"2":{"37":1,"66":1}}],["several",{"2":{"20":2,"37":1,"137":1,"145":1}}],["section",{"2":{"26":1,"100":3,"102":1}}],["sections",{"2":{"10":1,"26":1}}],["seconds=1",{"2":{"152":3,"158":8}}],["secondisleft",{"2":{"127":4}}],["secondisstraight",{"2":{"127":7}}],["secondary",{"2":{"3":3,"6":3,"72":1,"82":1,"116":1}}],["second",{"2":{"3":8,"6":9,"45":1,"54":4,"69":1,"71":1,"72":1,"75":1,"76":1,"77":1,"81":2,"82":1,"85":2,"89":2,"100":2,"106":1,"115":1,"116":1,"119":1,"120":1,"121":2,"160":1,"171":1,"175":1}}],["self",{"2":{"9":2}}],["selected",{"2":{"127":1}}],["selectednode",{"2":{"127":3}}],["selection",{"2":{"14":1}}],["select",{"2":{"6":1,"164":1}}],["seem",{"2":{"25":1,"27":1}}],["see",{"2":{"6":4,"7":1,"29":1,"43":1,"61":1,"66":1,"68":1,"71":1,"81":1,"88":1,"98":1,"100":5,"102":1,"105":1,"115":1,"127":2,"138":1,"139":1,"141":1,"142":3,"144":1,"145":2,"151":2,"160":1,"176":2}}],["setup=",{"2":{"72":1,"89":1,"106":1,"116":1}}],["sets",{"2":{"45":1,"60":1}}],["setting",{"2":{"23":1}}],["set",{"0":{"23":1},"2":{"3":2,"4":7,"6":19,"23":1,"34":1,"38":2,"40":8,"45":3,"51":2,"53":2,"54":7,"56":2,"62":2,"68":2,"69":10,"72":1,"86":1,"89":1,"100":2,"103":1,"106":1,"116":1,"126":1,"127":1,"142":2,"145":2,"160":2,"169":1,"173":1,"176":3}}],["sve",{"2":{"1":1,"6":1,"154":1}}],["svector",{"2":{"1":14,"6":14,"45":5,"51":1,"54":2,"63":6,"100":1,"127":1,"154":13,"169":6,"171":4}}],["solution",{"2":{"100":1}}],["solid",{"2":{"6":2}}],["south",{"2":{"47":7}}],["source",{"2":{"1":10,"3":19,"4":22,"5":3,"6":91,"26":4,"86":2,"131":3,"141":1,"142":4,"148":3,"170":13,"171":1}}],["sort",{"2":{"45":4,"50":2,"54":2,"62":2,"100":1,"103":2,"127":1,"160":1}}],["sorted",{"2":{"20":1,"45":1,"160":7,"175":1}}],["someone",{"2":{"61":1,"166":1}}],["something",{"0":{"55":1},"2":{"10":1}}],["some",{"2":{"3":1,"6":3,"9":1,"17":1,"40":4,"69":1,"100":3,"103":1,"127":1,"128":1,"129":2,"134":2,"136":2,"140":1,"141":2,"142":1,"162":1,"163":2,"168":2,"175":1,"178":1}}],["so",{"2":{"1":1,"4":4,"6":10,"9":1,"17":1,"19":1,"25":1,"27":1,"31":1,"39":1,"40":1,"45":1,"46":1,"54":1,"62":2,"63":2,"65":1,"66":1,"68":1,"69":4,"81":1,"88":1,"98":1,"100":2,"115":1,"127":3,"131":1,"136":6,"150":1,"151":1,"152":3,"153":1,"154":1,"162":1,"166":2,"170":1,"171":1}}],["step",{"2":{"45":7,"51":1,"52":3,"53":1,"54":3,"62":1,"63":3,"127":4,"167":1}}],["storing",{"2":{"173":1}}],["stored",{"2":{"45":2,"176":1}}],["stores",{"2":{"45":1}}],["store",{"2":{"40":1,"173":1}}],["stopping",{"2":{"160":2}}],["stops",{"2":{"134":1}}],["stop",{"2":{"18":2,"86":3,"100":4,"103":3}}],["style",{"2":{"6":2}}],["style=",{"2":{"6":2}}],["stay",{"2":{"63":1}}],["stackoverflow",{"2":{"54":1}}],["stack",{"2":{"50":1}}],["states",{"2":{"158":1}}],["state",{"2":{"62":1,"177":9}}],["status",{"2":{"45":31,"52":4,"54":5,"63":4,"127":1}}],["static",{"2":{"165":1}}],["staticarray",{"2":{"40":1}}],["staticarrays",{"2":{"31":1,"45":5,"51":1,"54":2,"63":6,"100":1,"127":1,"154":2}}],["staticarraysco",{"2":{"1":1,"6":1,"154":1}}],["staticarrayscore",{"2":{"1":10,"6":10,"40":1,"154":10,"169":6,"171":4}}],["statica",{"2":{"1":1,"6":1,"154":1}}],["statistics",{"2":{"13":2,"31":1}}],["stability",{"2":{"23":1,"30":1}}],["stable",{"2":{"13":1,"24":1,"153":1}}],["stage",{"2":{"7":1}}],["standardized",{"2":{"100":1}}],["standards",{"2":{"100":1}}],["standard",{"2":{"6":1,"61":1}}],["started",{"2":{"45":1}}],["starting",{"2":{"44":2,"45":1,"47":1,"54":1,"145":4}}],["startvalue",{"2":{"14":4}}],["start",{"2":{"6":1,"18":1,"34":7,"40":1,"45":76,"47":17,"52":4,"54":4,"63":5,"69":1,"86":4,"100":44,"103":3,"118":1,"127":2,"137":1,"160":16,"169":1}}],["straightline",{"2":{"127":3}}],["straight",{"2":{"127":6}}],["strait",{"2":{"127":1}}],["structs",{"2":{"20":1,"141":1}}],["structures",{"2":{"129":1}}],["structure",{"2":{"6":2,"131":1,"136":1,"147":1}}],["struct",{"2":{"6":3,"40":2,"45":2,"61":1,"139":1,"145":2,"152":2,"159":1,"160":1,"161":1,"164":3,"165":2,"166":4}}],["strings",{"2":{"6":1,"44":1,"54":1}}],["string",{"2":{"1":2,"14":1,"43":1,"44":1,"148":2}}],["still",{"2":{"0":1,"37":1,"44":1,"45":3,"71":1,"160":1}}],["shp",{"2":{"173":1}}],["ships",{"2":{"170":1}}],["shifting",{"2":{"171":1}}],["shift",{"2":{"169":3}}],["shewchuck",{"2":{"7":1}}],["short",{"2":{"136":1}}],["shorthand",{"2":{"61":1}}],["show",{"2":{"9":1,"11":1,"13":1,"14":1,"39":1,"170":1,"173":1,"175":2}}],["shoelace",{"2":{"4":1,"6":1,"37":2,"47":1}}],["shouldn",{"2":{"54":1}}],["should",{"2":{"1":1,"4":1,"6":14,"17":1,"18":1,"20":2,"25":1,"27":1,"34":3,"37":1,"44":1,"45":3,"46":1,"69":1,"100":4,"127":2,"131":1,"136":2,"138":1,"141":4,"142":2,"153":1,"158":2,"165":1}}],["sharing",{"2":{"88":1}}],["shares",{"2":{"54":1}}],["share",{"2":{"4":7,"6":8,"68":2,"69":8,"92":2,"93":1,"94":1,"103":1,"111":1}}],["shared",{"0":{"162":1},"2":{"3":1,"6":1,"45":2,"54":2,"103":3}}],["shapes",{"2":{"66":1,"173":7}}],["shape",{"2":{"43":1,"52":1,"54":1,"68":1,"144":1,"169":1}}],["shaped",{"2":{"39":1}}],["shapefiles",{"2":{"173":1}}],["shapefile",{"2":{"29":1,"173":4}}],["shallower",{"2":{"1":1,"6":1,"136":1}}],["sites",{"2":{"177":1}}],["sides",{"2":{"45":3,"138":1}}],["side",{"2":{"34":4,"45":26}}],["signals",{"2":{"135":1}}],["sign",{"2":{"13":2,"14":2,"34":7,"37":2,"126":3}}],["signed",{"0":{"35":1,"36":1,"64":1,"65":1},"1":{"36":1,"37":1,"65":1,"66":1},"2":{"0":4,"4":15,"6":18,"11":3,"35":1,"36":5,"37":23,"47":3,"64":1,"65":7,"66":19}}],["six",{"2":{"6":1,"158":1}}],["size=",{"2":{"170":1}}],["sizehint",{"2":{"45":2,"52":1,"153":1}}],["size",{"2":{"6":4,"13":2,"14":5,"39":1,"63":1,"127":2,"136":4,"158":1}}],["sin",{"2":{"169":3,"170":1,"171":2}}],["singed",{"2":{"66":1}}],["singular",{"2":{"54":1}}],["singlepoly",{"2":{"158":6}}],["single",{"2":{"4":6,"6":10,"23":1,"34":2,"37":1,"47":1,"69":5,"102":2,"127":2,"142":2,"143":1,"145":2,"169":3,"173":1}}],["since",{"2":{"1":1,"6":2,"26":1,"34":1,"37":1,"44":1,"47":2,"62":1,"66":1,"69":1,"100":1,"103":2,"110":1,"148":1,"165":1,"166":2,"177":1}}],["simulation",{"2":{"23":1}}],["simultaneously",{"2":{"20":1}}],["simply",{"2":{"7":1,"36":1,"41":1,"45":1,"54":1,"63":1,"82":1,"85":1,"99":1,"127":1,"140":1,"148":1,"149":1,"152":1,"169":1,"172":1}}],["simpler",{"2":{"6":1,"127":1}}],["simple",{"0":{"58":1,"176":1},"2":{"6":3,"40":1,"61":1,"129":3,"147":1,"148":1,"157":2,"158":2,"165":1}}],["simplifier",{"2":{"158":4}}],["simplified",{"2":{"23":1,"157":1}}],["simplifies",{"2":{"6":3,"159":1,"160":1,"161":1}}],["simplification",{"0":{"156":1},"1":{"157":1,"158":1},"2":{"6":2,"156":2,"158":3}}],["simplifying",{"2":{"156":1}}],["simplify",{"0":{"159":1,"160":1,"161":1},"2":{"0":1,"6":15,"9":1,"31":1,"45":1,"129":1,"157":1,"158":41,"159":1,"160":2,"161":1}}],["simplifyalgs",{"2":{"162":1}}],["simplifyalg",{"2":{"0":1,"6":8,"158":5,"159":2,"160":2,"161":2}}],["similarly",{"2":{"129":1}}],["similar",{"2":{"1":1,"6":4,"18":1,"25":1,"27":1,"29":1,"41":1,"56":1,"61":1,"127":2,"136":1,"152":2,"153":1,"155":1}}],["s",{"0":{"30":1},"2":{"0":1,"3":1,"6":10,"7":1,"9":1,"18":1,"19":1,"29":1,"34":1,"36":1,"37":4,"38":1,"39":2,"40":5,"43":3,"44":3,"45":3,"47":1,"49":1,"52":1,"54":2,"60":1,"63":3,"66":1,"69":1,"84":2,"91":3,"92":4,"93":2,"100":9,"103":1,"105":1,"106":1,"111":1,"127":5,"129":2,"131":3,"132":1,"136":1,"139":1,"142":4,"143":1,"145":3,"151":4,"152":1,"156":1,"158":2,"162":4,"164":2,"165":1,"166":6,"169":6,"170":4,"171":4,"172":2,"173":5,"178":2}}],["fn",{"2":{"173":8}}],["fc",{"2":{"136":22,"158":3,"167":14}}],["fj",{"2":{"127":2}}],["f2",{"2":{"45":2}}],["f1",{"2":{"45":2}}],["f64",{"2":{"13":2,"14":2}}],["few",{"2":{"138":1}}],["fetch",{"2":{"136":2}}],["fetched",{"2":{"127":1}}],["feb",{"0":{"8":1},"1":{"9":1,"10":1}}],["featurecollection",{"2":{"6":2,"11":1,"18":1,"127":4,"136":7,"170":2}}],["featurecollectiontrait",{"2":{"1":1,"6":2,"131":1,"134":1,"136":14,"167":5}}],["features",{"0":{"73":1,"90":1,"107":1,"117":1},"2":{"1":1,"6":3,"11":1,"22":1,"61":1,"127":3,"135":1,"136":19,"170":1}}],["featuretrait",{"2":{"1":2,"6":3,"73":4,"86":2,"90":4,"107":4,"117":4,"131":1,"134":3,"136":15,"167":5}}],["feature",{"2":{"1":6,"4":1,"6":10,"18":2,"22":1,"37":1,"47":1,"127":2,"129":1,"135":1,"136":49,"158":2,"167":2,"173":1}}],["fra",{"2":{"177":2}}],["frame",{"2":{"172":1}}],["framework",{"2":{"129":4}}],["fracs",{"2":{"45":20,"50":1}}],["frac",{"2":{"40":1,"45":2,"54":17,"158":2}}],["fractional",{"2":{"45":1,"54":3}}],["fractions",{"2":{"45":1,"54":4}}],["fraction",{"2":{"6":4,"54":2,"66":1,"158":1}}],["front",{"2":{"34":1}}],["from",{"2":{"1":3,"3":4,"4":16,"6":29,"7":1,"11":1,"20":1,"22":1,"26":1,"31":1,"37":2,"39":1,"40":4,"41":1,"44":1,"45":6,"47":11,"50":1,"51":1,"52":3,"53":1,"54":11,"61":1,"62":1,"63":6,"66":25,"89":2,"91":5,"92":4,"93":2,"94":1,"95":2,"100":6,"103":2,"126":2,"127":7,"131":3,"136":3,"145":1,"148":4,"150":1,"158":1,"159":1,"160":3,"161":1,"167":1,"168":1,"170":5,"173":1,"175":1,"176":1,"178":1}}],["footprint",{"2":{"171":1}}],["foldable",{"2":{"136":3}}],["follows",{"2":{"45":2,"72":1,"89":1,"106":1,"116":1,"127":1}}],["followed",{"2":{"26":1}}],["following",{"2":{"6":1,"40":1,"49":1,"138":1,"144":1,"158":1,"175":1}}],["focusing",{"2":{"25":1,"27":1}}],["foundational",{"2":{"17":1}}],["found",{"2":{"6":8,"26":1,"47":1,"50":1,"51":2,"53":2,"54":1,"62":2,"69":1,"127":5,"134":3,"136":7,"153":1}}],["forward",{"2":{"54":1}}],["forwards",{"2":{"45":1,"52":1,"63":1}}],["formats",{"2":{"168":1,"171":1,"173":3}}],["format",{"2":{"50":1,"173":3}}],["form",{"2":{"18":1,"45":3,"54":8,"63":3,"136":1}}],["formed",{"2":{"4":2,"6":3,"33":1,"34":4,"40":1,"45":8,"62":1,"63":1,"160":1}}],["formula",{"2":{"4":1,"6":1,"37":2,"47":1}}],["force",{"2":{"1":1,"136":2,"148":1,"158":1}}],["for",{"0":{"52":1,"54":1,"63":1},"2":{"0":2,"1":3,"3":1,"4":4,"5":3,"6":46,"7":4,"9":2,"13":5,"14":1,"18":1,"20":1,"22":1,"23":5,"25":3,"26":1,"27":3,"29":1,"31":2,"34":5,"37":8,"38":1,"39":1,"40":19,"41":3,"44":7,"45":35,"47":11,"50":5,"51":2,"52":3,"53":1,"54":7,"56":2,"59":1,"61":3,"62":1,"63":9,"65":2,"66":7,"69":13,"72":3,"78":1,"79":1,"84":1,"86":6,"89":2,"95":1,"96":1,"100":22,"102":1,"103":11,"106":2,"112":1,"113":1,"116":3,"122":1,"123":1,"125":1,"126":5,"127":13,"128":1,"129":3,"131":6,"132":2,"136":6,"137":3,"138":2,"140":1,"141":5,"143":3,"144":1,"145":5,"146":1,"148":3,"150":4,"151":7,"152":6,"153":8,"156":4,"158":12,"159":2,"160":2,"161":1,"162":6,"164":1,"165":2,"166":5,"167":7,"168":1,"170":4,"171":1,"173":3,"175":1,"177":2,"178":1}}],["fi",{"2":{"127":2}}],["fine",{"2":{"151":1}}],["final",{"2":{"63":1,"141":4,"152":1}}],["finally",{"2":{"39":2,"54":1,"127":1,"136":3,"173":1}}],["findmin",{"2":{"162":1}}],["findmax",{"2":{"158":1,"160":1}}],["findall",{"2":{"141":1}}],["finding",{"2":{"54":1}}],["findfirst",{"2":{"45":6,"50":2,"59":1,"158":1}}],["findnext",{"2":{"45":3}}],["findlast",{"2":{"45":2}}],["findprev",{"2":{"45":2}}],["finds",{"2":{"45":1,"47":1}}],["find",{"2":{"34":6,"37":1,"45":12,"47":3,"50":2,"51":4,"53":2,"54":8,"62":1,"66":3,"69":1,"100":7,"127":2,"160":5,"177":1}}],["finish",{"2":{"9":1}}],["fill",{"2":{"45":1,"127":1,"153":3}}],["filled",{"2":{"45":5,"47":3,"65":1,"66":2,"100":16}}],["files",{"2":{"163":1,"173":2}}],["file",{"2":{"26":1,"45":1,"72":3,"89":3,"106":3,"116":3,"127":1,"128":1,"129":1,"140":1,"148":1,"153":1,"156":1,"163":2,"168":1,"173":2}}],["filters",{"2":{"45":1}}],["filtering",{"2":{"6":1,"158":1}}],["filter",{"2":{"4":1,"6":2,"45":2,"136":3,"145":2,"146":1,"158":1}}],["fit",{"2":{"17":1}}],["field",{"2":{"13":2,"45":2}}],["figure",{"2":{"13":1,"14":1,"36":1,"39":2,"60":1,"170":3}}],["fig",{"2":{"13":6,"14":6,"60":5,"169":7,"170":4,"174":2}}],["fix1",{"2":{"136":2,"153":1}}],["fixme",{"2":{"126":1}}],["fix2",{"2":{"45":2}}],["fixed",{"2":{"6":3,"51":1,"53":1,"62":1}}],["fix",{"0":{"20":1},"2":{"6":9,"9":3,"15":3,"17":1,"20":1,"51":1,"52":11,"53":1,"54":11,"60":2,"62":1,"63":10,"138":1,"140":1,"141":1,"144":1}}],["firstisright",{"2":{"127":2}}],["firstisleft",{"2":{"127":4}}],["firstisstraight",{"2":{"127":4}}],["firstnode",{"2":{"127":9}}],["first",{"2":{"3":9,"6":10,"34":14,"37":7,"39":1,"40":9,"41":1,"44":1,"45":17,"47":2,"50":1,"51":2,"53":1,"54":5,"62":3,"66":8,"69":4,"71":1,"72":2,"75":1,"76":1,"77":1,"81":2,"82":2,"85":2,"89":3,"100":22,"103":1,"106":2,"108":1,"115":1,"116":2,"119":1,"120":1,"121":2,"126":1,"127":16,"136":6,"138":1,"153":3,"159":1,"160":2,"167":2,"168":1,"169":1,"170":1,"171":1,"175":1,"176":1}}],["fancy",{"2":{"169":1}}],["fancis",{"2":{"6":1,"40":1}}],["fair",{"2":{"151":1}}],["fail",{"2":{"1":1,"6":2,"136":6,"152":1}}],["fallback",{"2":{"136":1}}],["falses",{"2":{"45":2,"50":1,"51":1,"53":1}}],["false",{"0":{"24":1},"2":{"1":29,"3":7,"4":3,"6":55,"34":2,"37":1,"39":5,"45":26,"47":5,"50":1,"51":1,"52":3,"54":1,"62":4,"66":2,"68":2,"69":27,"72":8,"74":2,"75":4,"76":1,"77":1,"78":1,"79":1,"81":2,"84":2,"86":11,"89":9,"91":1,"92":4,"95":1,"96":1,"100":39,"103":22,"106":8,"108":3,"109":4,"110":1,"112":1,"113":1,"115":1,"116":7,"118":2,"119":4,"120":1,"121":1,"122":1,"123":1,"126":10,"127":5,"136":20,"138":16,"144":44,"145":4,"153":2,"154":20,"158":1,"162":2,"165":2,"167":2,"169":242,"170":12,"171":18,"175":1}}],["fashion",{"2":{"36":1}}],["faster",{"2":{"40":1,"136":1}}],["fast",{"2":{"12":1}}],["f",{"2":{"1":12,"6":25,"15":1,"18":3,"19":1,"22":2,"33":1,"36":2,"39":4,"41":1,"43":2,"45":19,"46":2,"49":2,"51":2,"52":2,"53":2,"54":2,"58":2,"59":2,"62":2,"63":2,"65":5,"68":2,"71":2,"81":2,"84":2,"88":2,"98":2,"100":7,"102":2,"105":2,"115":2,"127":30,"131":2,"134":2,"136":172,"149":1,"151":2,"152":1,"154":6,"157":2,"158":1,"162":6,"166":5,"167":16,"169":6,"171":2,"176":3}}],["fulfilled",{"2":{"160":1}}],["fully",{"2":{"6":1,"45":4,"50":1,"103":4}}],["full",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1},"2":{"0":1,"47":5,"141":1,"177":4}}],["furthest",{"2":{"127":1}}],["further",{"2":{"43":1,"136":1}}],["furthermore",{"2":{"3":2,"6":5,"45":1,"51":1,"53":1,"62":1,"72":1,"116":1}}],["fun",{"2":{"169":1}}],["fundamental",{"2":{"26":1,"163":1}}],["func",{"2":{"13":5}}],["funcs",{"2":{"13":2,"14":3}}],["functionality",{"2":{"54":1,"129":1,"147":1,"148":1,"153":1,"166":1}}],["functionalities",{"2":{"45":1}}],["functionally",{"2":{"1":1,"6":1,"18":1,"29":1,"136":1}}],["function",{"2":{"1":8,"3":9,"4":9,"5":3,"6":14,"7":2,"9":1,"13":3,"14":2,"18":2,"29":1,"31":1,"34":5,"37":3,"40":13,"44":6,"45":18,"47":7,"49":2,"50":4,"51":3,"52":3,"53":2,"54":7,"55":1,"61":2,"62":2,"63":4,"66":6,"68":1,"69":8,"71":1,"72":1,"78":1,"79":1,"81":1,"84":1,"86":5,"88":1,"89":1,"95":1,"96":1,"98":1,"100":9,"102":1,"103":7,"105":1,"106":1,"112":1,"113":1,"115":1,"116":1,"122":1,"123":1,"126":4,"127":16,"128":3,"131":3,"134":2,"136":30,"139":2,"141":7,"142":2,"145":2,"147":2,"148":1,"150":2,"152":2,"153":7,"154":3,"155":1,"158":3,"159":2,"160":3,"161":2,"162":7,"166":6,"167":12,"169":1,"175":1,"178":4}}],["functions",{"0":{"1":1,"52":1,"54":1,"63":1,"129":1,"131":1,"167":1},"1":{"130":1,"131":1,"132":1,"133":1,"134":1,"135":1,"136":1},"2":{"6":1,"9":3,"17":1,"26":1,"29":1,"37":1,"40":1,"44":1,"45":2,"47":1,"49":1,"100":1,"128":1,"129":2,"134":1,"141":2,"142":1}}],["future",{"2":{"23":1,"56":1,"66":1,"150":2}}],["flexijoins",{"2":{"175":1,"176":3,"177":1,"178":5}}],["flags",{"2":{"45":5}}],["flag",{"2":{"45":12,"50":1}}],["flat",{"2":{"6":1,"162":2,"167":1}}],["flattened",{"2":{"18":1}}],["flattening",{"2":{"6":4,"152":2}}],["flatten",{"2":{"0":2,"6":4,"11":3,"13":1,"18":1,"40":1,"45":2,"47":3,"53":1,"61":2,"63":1,"86":1,"131":4,"136":27,"145":1}}],["floating",{"2":{"6":1,"45":1,"54":5,"127":2}}],["float",{"2":{"6":3,"51":1,"53":1,"62":1}}],["float64x2",{"2":{"13":6,"14":6,"15":2}}],["float64",{"2":{"1":6,"4":10,"6":30,"13":1,"33":1,"34":3,"37":6,"44":1,"47":4,"50":2,"51":2,"53":1,"54":3,"60":1,"62":1,"66":12,"100":4,"103":2,"126":4,"138":6,"144":26,"151":2,"152":2,"153":1,"154":6,"155":1,"159":4,"160":9,"161":2,"162":6,"167":8,"169":190,"170":7,"171":10}}],["flipping",{"0":{"147":1},"2":{"147":1}}],["flipped",{"2":{"1":2,"6":2,"136":2}}],["flipaxis",{"2":{"39":1}}],["flip",{"2":{"0":1,"6":1,"31":1,"129":2,"136":1,"147":2}}],["wgs84",{"2":{"170":1}}],["wglmakie",{"2":{"14":1}}],["wₜₒₜ",{"2":{"40":8}}],["wᵢ",{"2":{"40":18}}],["wt",{"2":{"40":3}}],["w",{"2":{"13":13,"14":7,"66":4,"127":1}}],["wrong",{"2":{"143":1,"162":1}}],["writing",{"2":{"173":1}}],["written",{"2":{"69":1}}],["write",{"2":{"7":1,"30":1,"127":1,"173":7}}],["wrap",{"2":{"4":1,"6":1,"146":1,"152":1}}],["wrapped",{"2":{"22":1,"127":2,"134":1,"136":1}}],["wrapper",{"0":{"30":1},"2":{"30":1,"34":1,"37":1,"44":1,"47":1,"66":1,"69":1,"72":1,"89":1,"103":1,"106":1,"116":1}}],["wrappers`",{"2":{"136":1}}],["wrappers",{"2":{"1":10,"6":12,"22":1,"126":2,"127":1,"131":1,"138":8,"139":1,"144":22,"151":1,"152":1,"154":10,"158":1,"167":1,"169":121,"170":5,"171":9}}],["wrappergeometry`",{"2":{"148":1}}],["wrappergeometry",{"2":{"1":1}}],["wrapping",{"2":{"1":1,"6":1,"69":1,"148":1,"155":1}}],["web",{"2":{"173":1}}],["west",{"2":{"47":8}}],["were",{"2":{"45":1,"127":1,"176":1}}],["welcome",{"2":{"25":1,"27":1}}],["well",{"2":{"17":1,"45":1,"47":1,"61":1,"150":1,"156":1,"165":1}}],["we",{"0":{"55":2},"2":{"7":1,"11":1,"13":1,"17":3,"19":1,"23":3,"24":1,"25":2,"26":1,"27":2,"34":1,"36":2,"37":2,"39":4,"40":8,"41":2,"44":1,"45":7,"47":4,"52":8,"53":2,"54":3,"56":1,"60":3,"61":2,"63":1,"66":1,"68":1,"69":5,"71":1,"72":1,"81":1,"82":1,"85":1,"88":1,"89":1,"98":3,"99":1,"100":2,"102":1,"103":2,"105":1,"106":1,"115":1,"116":1,"127":21,"128":1,"134":1,"136":21,"137":1,"149":1,"150":2,"151":2,"152":3,"153":1,"158":5,"162":2,"163":1,"165":4,"166":1,"168":2,"169":4,"170":6,"171":4,"172":1,"173":3,"175":3,"176":7}}],["weighting",{"2":{"43":2,"44":1}}],["weights",{"2":{"38":4}}],["weight",{"2":{"6":5,"40":14,"44":1}}],["weighted",{"2":{"0":1,"6":2,"38":3,"40":4,"44":4}}],["walk",{"2":{"50":1}}],["wall2",{"2":{"47":7}}],["wall1",{"2":{"47":12}}],["walls",{"2":{"47":3}}],["wall",{"2":{"47":69}}],["wachspress",{"2":{"40":1}}],["wasincreasing",{"2":{"127":10}}],["wasn",{"2":{"45":1}}],["was",{"2":{"31":1,"34":1,"37":1,"39":1,"40":4,"41":1,"44":1,"45":1,"47":1,"50":1,"51":1,"52":3,"53":1,"54":2,"55":1,"61":1,"62":1,"63":3,"66":1,"69":1,"79":1,"82":1,"85":1,"86":1,"96":1,"99":1,"100":1,"103":1,"113":1,"123":1,"126":1,"127":1,"128":1,"134":1,"136":1,"139":1,"142":1,"145":1,"146":1,"147":1,"149":1,"151":1,"153":1,"154":1,"155":1,"162":1,"166":2,"167":1}}],["wanted",{"2":{"178":1}}],["wants",{"2":{"61":1,"136":1}}],["want",{"0":{"23":1,"55":1},"2":{"13":1,"18":1,"23":1,"40":1,"45":1,"126":1,"170":2,"172":1,"177":1,"178":1}}],["ways",{"2":{"143":1}}],["way",{"2":{"6":1,"17":1,"18":1,"24":1,"29":1,"38":1,"129":1,"140":1,"153":1,"164":1,"166":2,"172":1}}],["warn",{"2":{"127":2}}],["warned",{"2":{"6":1,"166":1}}],["warning",{"2":{"0":1,"5":1,"6":3,"24":1,"40":1,"61":1,"136":1,"152":1,"163":1,"177":1}}],["wong",{"2":{"58":1,"59":1,"174":1}}],["won",{"2":{"23":1,"45":1,"136":1}}],["wouldn",{"2":{"54":1}}],["would",{"0":{"55":1},"2":{"6":3,"23":1,"51":1,"53":1,"54":1,"61":4,"62":1,"127":1,"165":2,"170":1,"177":1,"178":1}}],["wound",{"2":{"6":1,"61":1}}],["world",{"0":{"177":1},"2":{"175":1}}],["worrying",{"2":{"24":1}}],["words",{"2":{"3":1,"6":1,"81":1,"98":1,"105":1,"106":1}}],["workflow",{"2":{"86":1,"103":1}}],["workflows",{"2":{"23":1,"25":1,"27":1}}],["works",{"2":{"26":1,"148":1,"150":1}}],["working",{"2":{"3":1,"6":1,"86":1,"170":1}}],["work",{"2":{"1":3,"6":3,"9":1,"34":1,"37":2,"44":1,"47":2,"50":2,"56":1,"66":1,"69":1,"100":1,"103":1,"126":1,"136":2,"148":1,"154":1,"177":1}}],["whole",{"2":{"100":1}}],["whose",{"2":{"3":1,"6":1,"86":1}}],["white",{"2":{"39":1}}],["while",{"2":{"34":1,"43":1,"44":1,"45":5,"54":2,"60":2,"65":1,"69":1,"86":1,"100":1,"127":3,"145":1,"160":1,"162":2,"176":1}}],["whichever",{"2":{"6":1,"158":1}}],["which",{"2":{"1":1,"4":2,"5":1,"6":8,"7":1,"11":1,"13":1,"14":1,"17":1,"18":4,"20":1,"23":2,"36":1,"37":1,"38":1,"39":2,"40":5,"41":1,"45":11,"47":2,"54":2,"56":1,"61":1,"69":2,"100":3,"127":3,"128":1,"129":1,"136":1,"137":2,"138":1,"141":1,"143":1,"144":1,"149":1,"150":1,"151":1,"152":3,"153":2,"154":1,"158":1,"160":2,"164":1,"166":4,"173":3,"175":3,"176":6,"178":1}}],["what",{"0":{"22":1,"25":1,"30":1,"33":1,"36":2,"43":1,"46":1,"49":1,"65":2,"68":1,"71":1,"81":1,"84":1,"88":1,"98":1,"102":1,"105":1,"115":1,"134":1},"2":{"13":1,"14":1,"24":1,"43":1,"126":1,"127":1,"151":1,"165":1,"170":1,"177":1}}],["whatever",{"2":{"1":1,"6":1,"22":1,"136":1}}],["whyatt",{"2":{"156":1}}],["why",{"0":{"22":1,"23":1},"2":{"9":1,"17":1,"30":1,"37":1}}],["wheel",{"2":{"17":1}}],["whether",{"2":{"1":4,"4":1,"6":10,"125":1,"126":1,"133":2,"137":1}}],["when",{"2":{"1":1,"4":2,"5":1,"6":5,"18":1,"20":1,"23":2,"24":1,"37":1,"40":3,"44":1,"45":2,"52":5,"54":6,"63":7,"100":1,"127":1,"134":3,"136":1,"138":1,"141":1,"146":2,"158":1,"170":1,"171":2,"173":1,"178":1}}],["wherever",{"2":{"6":1,"155":1}}],["where",{"2":{"1":2,"4":5,"6":11,"20":1,"31":2,"34":8,"37":12,"38":2,"40":24,"44":8,"45":14,"47":8,"50":5,"51":2,"52":5,"53":3,"54":18,"62":2,"63":9,"66":25,"69":1,"100":9,"127":3,"136":53,"143":1,"148":1,"151":1,"155":1,"163":1,"164":5,"167":3,"169":4}}],["widely",{"2":{"173":1}}],["widths",{"2":{"14":1}}],["width",{"2":{"6":2}}],["wiki",{"2":{"100":1,"160":1}}],["wikipedia",{"2":{"100":1,"160":2}}],["wind",{"2":{"4":1,"6":2,"37":1,"69":1}}],["winding",{"0":{"60":1},"2":{"4":2,"6":3,"37":3,"45":7,"60":4,"61":1,"69":1,"127":1}}],["without",{"2":{"1":2,"6":1,"17":1,"24":1,"45":1,"88":1,"103":1,"136":3,"148":1,"154":1}}],["with",{"0":{"52":1,"54":1,"63":1,"159":1,"160":1,"161":1,"171":1,"172":1},"2":{"1":5,"3":5,"4":7,"6":27,"11":1,"20":1,"22":2,"23":1,"33":1,"34":2,"37":7,"38":4,"39":1,"40":2,"44":1,"45":14,"47":6,"52":8,"53":5,"54":15,"62":1,"63":12,"65":1,"66":2,"72":1,"88":1,"92":1,"98":1,"100":28,"102":2,"103":5,"105":1,"106":1,"109":3,"110":2,"111":2,"121":1,"127":7,"129":1,"131":2,"134":1,"136":17,"138":1,"143":1,"146":1,"148":1,"150":1,"153":2,"154":1,"158":2,"160":2,"161":1,"165":1,"166":1,"168":1,"169":4,"170":6,"171":2,"172":2,"173":2,"175":1,"176":1,"177":1}}],["within",{"0":{"114":1,"115":1,"118":1,"119":1,"121":1,"122":1,"123":1},"1":{"115":1,"116":1},"2":{"0":2,"3":9,"4":3,"5":1,"6":13,"7":1,"9":1,"31":1,"34":2,"37":1,"38":3,"40":1,"44":1,"45":9,"46":2,"47":5,"52":1,"54":2,"62":1,"63":6,"65":1,"66":5,"71":2,"81":2,"82":3,"91":1,"100":9,"102":1,"103":9,"114":1,"115":6,"116":11,"117":6,"118":14,"119":15,"120":15,"121":7,"122":4,"123":4,"129":1,"175":1,"176":4,"177":2}}],["will",{"2":{"1":8,"4":7,"5":1,"6":44,"11":1,"18":3,"23":2,"24":1,"34":4,"37":3,"40":2,"44":1,"45":5,"47":1,"50":1,"51":4,"52":4,"53":4,"54":4,"61":1,"62":4,"63":4,"65":2,"66":4,"69":1,"86":1,"126":1,"127":2,"131":2,"134":1,"135":2,"136":8,"138":1,"142":2,"143":1,"145":2,"148":3,"150":2,"152":3,"154":2,"158":2,"160":1,"162":1,"166":1,"170":1,"173":1,"175":2,"177":1,"178":1}}],["wip",{"2":{"0":1}}]],"serializationVersion":2}';export{e as default}; diff --git a/previews/PR135/assets/chunks/VPLocalSearchBox.CqCoAOXo.js b/previews/PR135/assets/chunks/VPLocalSearchBox.CqCoAOXo.js deleted file mode 100644 index fc64a8764..000000000 --- a/previews/PR135/assets/chunks/VPLocalSearchBox.CqCoAOXo.js +++ /dev/null @@ -1,7 +0,0 @@ -var Ct=Object.defineProperty;var It=(o,e,t)=>e in o?Ct(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var Oe=(o,e,t)=>It(o,typeof e!="symbol"?e+"":e,t);import{X as Dt,s as oe,v as $e,al as kt,am as Ot,d as Rt,G as xe,an as tt,h as Fe,ao as _t,ap as Mt,x as Lt,aq as zt,y as Re,R as de,Q as Ee,ar as Pt,as as Bt,Y as Vt,U as $t,a1 as Wt,o as ee,b as Kt,j as k,a2 as Jt,k as j,at as Ut,au as jt,av as Gt,c as re,n as rt,e as Se,E as at,F as nt,a as ve,t as pe,aw as Qt,p as qt,l as Ht,ax as it,ay as Yt,ab as Zt,ah as Xt,az as er,_ as tr}from"./framework.k41oUgTf.js";import{u as rr,c as ar}from"./theme.BCxq1kHm.js";const nr={root:()=>Dt(()=>import("./@localSearchIndexroot.BBdiXmf3.js"),[])};/*! -* tabbable 6.2.0 -* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE -*/var yt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Ne=yt.join(","),mt=typeof Element>"u",ue=mt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Ce=!mt&&Element.prototype.getRootNode?function(o){var e;return o==null||(e=o.getRootNode)===null||e===void 0?void 0:e.call(o)}:function(o){return o==null?void 0:o.ownerDocument},Ie=function o(e,t){var r;t===void 0&&(t=!0);var n=e==null||(r=e.getAttribute)===null||r===void 0?void 0:r.call(e,"inert"),a=n===""||n==="true",i=a||t&&e&&o(e.parentNode);return i},ir=function(e){var t,r=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return r===""||r==="true"},gt=function(e,t,r){if(Ie(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Ne));return t&&ue.call(e,Ne)&&n.unshift(e),n=n.filter(r),n},bt=function o(e,t,r){for(var n=[],a=Array.from(e);a.length;){var i=a.shift();if(!Ie(i,!1))if(i.tagName==="SLOT"){var s=i.assignedElements(),u=s.length?s:i.children,l=o(u,!0,r);r.flatten?n.push.apply(n,l):n.push({scopeParent:i,candidates:l})}else{var h=ue.call(i,Ne);h&&r.filter(i)&&(t||!e.includes(i))&&n.push(i);var d=i.shadowRoot||typeof r.getShadowRoot=="function"&&r.getShadowRoot(i),v=!Ie(d,!1)&&(!r.shadowRootFilter||r.shadowRootFilter(i));if(d&&v){var y=o(d===!0?i.children:d.children,!0,r);r.flatten?n.push.apply(n,y):n.push({scopeParent:i,candidates:y})}else a.unshift.apply(a,i.children)}}return n},wt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},se=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||ir(e))&&!wt(e)?0:e.tabIndex},or=function(e,t){var r=se(e);return r<0&&t&&!wt(e)?0:r},sr=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},xt=function(e){return e.tagName==="INPUT"},ur=function(e){return xt(e)&&e.type==="hidden"},lr=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(r){return r.tagName==="SUMMARY"});return t},cr=function(e,t){for(var r=0;rsummary:first-of-type"),i=a?e.parentElement:e;if(ue.call(i,"details:not([open]) *"))return!0;if(!r||r==="full"||r==="legacy-full"){if(typeof n=="function"){for(var s=e;e;){var u=e.parentElement,l=Ce(e);if(u&&!u.shadowRoot&&n(u)===!0)return ot(e);e.assignedSlot?e=e.assignedSlot:!u&&l!==e.ownerDocument?e=l.host:e=u}e=s}if(vr(e))return!e.getClientRects().length;if(r!=="legacy-full")return!0}else if(r==="non-zero-area")return ot(e);return!1},yr=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var r=0;r=0)},gr=function o(e){var t=[],r=[];return e.forEach(function(n,a){var i=!!n.scopeParent,s=i?n.scopeParent:n,u=or(s,i),l=i?o(n.candidates):s;u===0?i?t.push.apply(t,l):t.push(s):r.push({documentOrder:a,tabIndex:u,item:n,isScope:i,content:l})}),r.sort(sr).reduce(function(n,a){return a.isScope?n.push.apply(n,a.content):n.push(a.content),n},[]).concat(t)},br=function(e,t){t=t||{};var r;return t.getShadowRoot?r=bt([e],t.includeContainer,{filter:We.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:mr}):r=gt(e,t.includeContainer,We.bind(null,t)),gr(r)},wr=function(e,t){t=t||{};var r;return t.getShadowRoot?r=bt([e],t.includeContainer,{filter:De.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):r=gt(e,t.includeContainer,De.bind(null,t)),r},le=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ue.call(e,Ne)===!1?!1:We(t,e)},xr=yt.concat("iframe").join(","),_e=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ue.call(e,xr)===!1?!1:De(t,e)};/*! -* focus-trap 7.5.4 -* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE -*/function st(o,e){var t=Object.keys(o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(o);e&&(r=r.filter(function(n){return Object.getOwnPropertyDescriptor(o,n).enumerable})),t.push.apply(t,r)}return t}function ut(o){for(var e=1;e0){var r=e[e.length-1];r!==t&&r.pause()}var n=e.indexOf(t);n===-1||e.splice(n,1),e.push(t)},deactivateTrap:function(e,t){var r=e.indexOf(t);r!==-1&&e.splice(r,1),e.length>0&&e[e.length-1].unpause()}},Ar=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},Tr=function(e){return(e==null?void 0:e.key)==="Escape"||(e==null?void 0:e.key)==="Esc"||(e==null?void 0:e.keyCode)===27},ge=function(e){return(e==null?void 0:e.key)==="Tab"||(e==null?void 0:e.keyCode)===9},Nr=function(e){return ge(e)&&!e.shiftKey},Cr=function(e){return ge(e)&&e.shiftKey},ct=function(e){return setTimeout(e,0)},ft=function(e,t){var r=-1;return e.every(function(n,a){return t(n)?(r=a,!1):!0}),r},ye=function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n1?p-1:0),I=1;I=0)c=r.activeElement;else{var f=i.tabbableGroups[0],p=f&&f.firstTabbableNode;c=p||h("fallbackFocus")}if(!c)throw new Error("Your focus-trap needs to have at least one focusable element");return c},v=function(){if(i.containerGroups=i.containers.map(function(c){var f=br(c,a.tabbableOptions),p=wr(c,a.tabbableOptions),C=f.length>0?f[0]:void 0,I=f.length>0?f[f.length-1]:void 0,M=p.find(function(m){return le(m)}),z=p.slice().reverse().find(function(m){return le(m)}),P=!!f.find(function(m){return se(m)>0});return{container:c,tabbableNodes:f,focusableNodes:p,posTabIndexesFound:P,firstTabbableNode:C,lastTabbableNode:I,firstDomTabbableNode:M,lastDomTabbableNode:z,nextTabbableNode:function(x){var $=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,K=f.indexOf(x);return K<0?$?p.slice(p.indexOf(x)+1).find(function(Q){return le(Q)}):p.slice(0,p.indexOf(x)).reverse().find(function(Q){return le(Q)}):f[K+($?1:-1)]}}}),i.tabbableGroups=i.containerGroups.filter(function(c){return c.tabbableNodes.length>0}),i.tabbableGroups.length<=0&&!h("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(i.containerGroups.find(function(c){return c.posTabIndexesFound})&&i.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},y=function w(c){var f=c.activeElement;if(f)return f.shadowRoot&&f.shadowRoot.activeElement!==null?w(f.shadowRoot):f},b=function w(c){if(c!==!1&&c!==y(document)){if(!c||!c.focus){w(d());return}c.focus({preventScroll:!!a.preventScroll}),i.mostRecentlyFocusedNode=c,Ar(c)&&c.select()}},E=function(c){var f=h("setReturnFocus",c);return f||(f===!1?!1:c)},g=function(c){var f=c.target,p=c.event,C=c.isBackward,I=C===void 0?!1:C;f=f||Ae(p),v();var M=null;if(i.tabbableGroups.length>0){var z=l(f,p),P=z>=0?i.containerGroups[z]:void 0;if(z<0)I?M=i.tabbableGroups[i.tabbableGroups.length-1].lastTabbableNode:M=i.tabbableGroups[0].firstTabbableNode;else if(I){var m=ft(i.tabbableGroups,function(B){var U=B.firstTabbableNode;return f===U});if(m<0&&(P.container===f||_e(f,a.tabbableOptions)&&!le(f,a.tabbableOptions)&&!P.nextTabbableNode(f,!1))&&(m=z),m>=0){var x=m===0?i.tabbableGroups.length-1:m-1,$=i.tabbableGroups[x];M=se(f)>=0?$.lastTabbableNode:$.lastDomTabbableNode}else ge(p)||(M=P.nextTabbableNode(f,!1))}else{var K=ft(i.tabbableGroups,function(B){var U=B.lastTabbableNode;return f===U});if(K<0&&(P.container===f||_e(f,a.tabbableOptions)&&!le(f,a.tabbableOptions)&&!P.nextTabbableNode(f))&&(K=z),K>=0){var Q=K===i.tabbableGroups.length-1?0:K+1,q=i.tabbableGroups[Q];M=se(f)>=0?q.firstTabbableNode:q.firstDomTabbableNode}else ge(p)||(M=P.nextTabbableNode(f))}}else M=h("fallbackFocus");return M},S=function(c){var f=Ae(c);if(!(l(f,c)>=0)){if(ye(a.clickOutsideDeactivates,c)){s.deactivate({returnFocus:a.returnFocusOnDeactivate});return}ye(a.allowOutsideClick,c)||c.preventDefault()}},T=function(c){var f=Ae(c),p=l(f,c)>=0;if(p||f instanceof Document)p&&(i.mostRecentlyFocusedNode=f);else{c.stopImmediatePropagation();var C,I=!0;if(i.mostRecentlyFocusedNode)if(se(i.mostRecentlyFocusedNode)>0){var M=l(i.mostRecentlyFocusedNode),z=i.containerGroups[M].tabbableNodes;if(z.length>0){var P=z.findIndex(function(m){return m===i.mostRecentlyFocusedNode});P>=0&&(a.isKeyForward(i.recentNavEvent)?P+1=0&&(C=z[P-1],I=!1))}}else i.containerGroups.some(function(m){return m.tabbableNodes.some(function(x){return se(x)>0})})||(I=!1);else I=!1;I&&(C=g({target:i.mostRecentlyFocusedNode,isBackward:a.isKeyBackward(i.recentNavEvent)})),b(C||i.mostRecentlyFocusedNode||d())}i.recentNavEvent=void 0},F=function(c){var f=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;i.recentNavEvent=c;var p=g({event:c,isBackward:f});p&&(ge(c)&&c.preventDefault(),b(p))},L=function(c){if(Tr(c)&&ye(a.escapeDeactivates,c)!==!1){c.preventDefault(),s.deactivate();return}(a.isKeyForward(c)||a.isKeyBackward(c))&&F(c,a.isKeyBackward(c))},_=function(c){var f=Ae(c);l(f,c)>=0||ye(a.clickOutsideDeactivates,c)||ye(a.allowOutsideClick,c)||(c.preventDefault(),c.stopImmediatePropagation())},V=function(){if(i.active)return lt.activateTrap(n,s),i.delayInitialFocusTimer=a.delayInitialFocus?ct(function(){b(d())}):b(d()),r.addEventListener("focusin",T,!0),r.addEventListener("mousedown",S,{capture:!0,passive:!1}),r.addEventListener("touchstart",S,{capture:!0,passive:!1}),r.addEventListener("click",_,{capture:!0,passive:!1}),r.addEventListener("keydown",L,{capture:!0,passive:!1}),s},N=function(){if(i.active)return r.removeEventListener("focusin",T,!0),r.removeEventListener("mousedown",S,!0),r.removeEventListener("touchstart",S,!0),r.removeEventListener("click",_,!0),r.removeEventListener("keydown",L,!0),s},R=function(c){var f=c.some(function(p){var C=Array.from(p.removedNodes);return C.some(function(I){return I===i.mostRecentlyFocusedNode})});f&&b(d())},A=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(R):void 0,O=function(){A&&(A.disconnect(),i.active&&!i.paused&&i.containers.map(function(c){A.observe(c,{subtree:!0,childList:!0})}))};return s={get active(){return i.active},get paused(){return i.paused},activate:function(c){if(i.active)return this;var f=u(c,"onActivate"),p=u(c,"onPostActivate"),C=u(c,"checkCanFocusTrap");C||v(),i.active=!0,i.paused=!1,i.nodeFocusedBeforeActivation=r.activeElement,f==null||f();var I=function(){C&&v(),V(),O(),p==null||p()};return C?(C(i.containers.concat()).then(I,I),this):(I(),this)},deactivate:function(c){if(!i.active)return this;var f=ut({onDeactivate:a.onDeactivate,onPostDeactivate:a.onPostDeactivate,checkCanReturnFocus:a.checkCanReturnFocus},c);clearTimeout(i.delayInitialFocusTimer),i.delayInitialFocusTimer=void 0,N(),i.active=!1,i.paused=!1,O(),lt.deactivateTrap(n,s);var p=u(f,"onDeactivate"),C=u(f,"onPostDeactivate"),I=u(f,"checkCanReturnFocus"),M=u(f,"returnFocus","returnFocusOnDeactivate");p==null||p();var z=function(){ct(function(){M&&b(E(i.nodeFocusedBeforeActivation)),C==null||C()})};return M&&I?(I(E(i.nodeFocusedBeforeActivation)).then(z,z),this):(z(),this)},pause:function(c){if(i.paused||!i.active)return this;var f=u(c,"onPause"),p=u(c,"onPostPause");return i.paused=!0,f==null||f(),N(),O(),p==null||p(),this},unpause:function(c){if(!i.paused||!i.active)return this;var f=u(c,"onUnpause"),p=u(c,"onPostUnpause");return i.paused=!1,f==null||f(),v(),V(),O(),p==null||p(),this},updateContainerElements:function(c){var f=[].concat(c).filter(Boolean);return i.containers=f.map(function(p){return typeof p=="string"?r.querySelector(p):p}),i.active&&v(),O(),this}},s.updateContainerElements(e),s};function kr(o,e={}){let t;const{immediate:r,...n}=e,a=oe(!1),i=oe(!1),s=d=>t&&t.activate(d),u=d=>t&&t.deactivate(d),l=()=>{t&&(t.pause(),i.value=!0)},h=()=>{t&&(t.unpause(),i.value=!1)};return $e(()=>kt(o),d=>{d&&(t=Dr(d,{...n,onActivate(){a.value=!0,e.onActivate&&e.onActivate()},onDeactivate(){a.value=!1,e.onDeactivate&&e.onDeactivate()}}),r&&s())},{flush:"post"}),Ot(()=>u()),{hasFocus:a,isPaused:i,activate:s,deactivate:u,pause:l,unpause:h}}class fe{constructor(e,t=!0,r=[],n=5e3){this.ctx=e,this.iframes=t,this.exclude=r,this.iframesTimeout=n}static matches(e,t){const r=typeof t=="string"?[t]:t,n=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(n){let a=!1;return r.every(i=>n.call(e,i)?(a=!0,!1):!0),a}else return!1}getContexts(){let e,t=[];return typeof this.ctx>"u"||!this.ctx?e=[]:NodeList.prototype.isPrototypeOf(this.ctx)?e=Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?e=this.ctx:typeof this.ctx=="string"?e=Array.prototype.slice.call(document.querySelectorAll(this.ctx)):e=[this.ctx],e.forEach(r=>{const n=t.filter(a=>a.contains(r)).length>0;t.indexOf(r)===-1&&!n&&t.push(r)}),t}getIframeContents(e,t,r=()=>{}){let n;try{const a=e.contentWindow;if(n=a.document,!a||!n)throw new Error("iframe inaccessible")}catch{r()}n&&t(n)}isIframeBlank(e){const t="about:blank",r=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&r!==t&&r}observeIframeLoad(e,t,r){let n=!1,a=null;const i=()=>{if(!n){n=!0,clearTimeout(a);try{this.isIframeBlank(e)||(e.removeEventListener("load",i),this.getIframeContents(e,t,r))}catch{r()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}onIframeReady(e,t,r){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,r):this.getIframeContents(e,t,r):this.observeIframeLoad(e,t,r)}catch{r()}}waitForIframes(e,t){let r=0;this.forEachIframe(e,()=>!0,n=>{r++,this.waitForIframes(n.querySelector("html"),()=>{--r||t()})},n=>{n||t()})}forEachIframe(e,t,r,n=()=>{}){let a=e.querySelectorAll("iframe"),i=a.length,s=0;a=Array.prototype.slice.call(a);const u=()=>{--i<=0&&n(s)};i||u(),a.forEach(l=>{fe.matches(l,this.exclude)?u():this.onIframeReady(l,h=>{t(l)&&(s++,r(h)),u()},u)})}createIterator(e,t,r){return document.createNodeIterator(e,t,r,!1)}createInstanceOnIframe(e){return new fe(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,r){const n=e.compareDocumentPosition(r),a=Node.DOCUMENT_POSITION_PRECEDING;if(n&a)if(t!==null){const i=t.compareDocumentPosition(r),s=Node.DOCUMENT_POSITION_FOLLOWING;if(i&s)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let r;return t===null?r=e.nextNode():r=e.nextNode()&&e.nextNode(),{prevNode:t,node:r}}checkIframeFilter(e,t,r,n){let a=!1,i=!1;return n.forEach((s,u)=>{s.val===r&&(a=u,i=s.handled)}),this.compareNodeIframe(e,t,r)?(a===!1&&!i?n.push({val:r,handled:!0}):a!==!1&&!i&&(n[a].handled=!0),!0):(a===!1&&n.push({val:r,handled:!1}),!1)}handleOpenIframes(e,t,r,n){e.forEach(a=>{a.handled||this.getIframeContents(a.val,i=>{this.createInstanceOnIframe(i).forEachNode(t,r,n)})})}iterateThroughNodes(e,t,r,n,a){const i=this.createIterator(t,e,n);let s=[],u=[],l,h,d=()=>({prevNode:h,node:l}=this.getIteratorNode(i),l);for(;d();)this.iframes&&this.forEachIframe(t,v=>this.checkIframeFilter(l,h,v,s),v=>{this.createInstanceOnIframe(v).forEachNode(e,y=>u.push(y),n)}),u.push(l);u.forEach(v=>{r(v)}),this.iframes&&this.handleOpenIframes(s,e,r,n),a()}forEachNode(e,t,r,n=()=>{}){const a=this.getContexts();let i=a.length;i||n(),a.forEach(s=>{const u=()=>{this.iterateThroughNodes(e,s,t,r,()=>{--i<=0&&n()})};this.iframes?this.waitForIframes(s,u):u()})}}let Or=class{constructor(e){this.ctx=e,this.ie=!1;const t=window.navigator.userAgent;(t.indexOf("MSIE")>-1||t.indexOf("Trident")>-1)&&(this.ie=!0)}set opt(e){this._opt=Object.assign({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:()=>{},noMatch:()=>{},filter:()=>!0,done:()=>{},debug:!1,log:window.console},e)}get opt(){return this._opt}get iterator(){return new fe(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const r=this.opt.log;this.opt.debug&&typeof r=="object"&&typeof r[t]=="function"&&r[t](`mark.js: ${e}`)}escapeStr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}createRegExp(e){return this.opt.wildcards!=="disabled"&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),this.opt.wildcards!=="disabled"&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),e}createSynonymsRegExp(e){const t=this.opt.synonyms,r=this.opt.caseSensitive?"":"i",n=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let a in t)if(t.hasOwnProperty(a)){const i=t[a],s=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(a):this.escapeStr(a),u=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(i):this.escapeStr(i);s!==""&&u!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(s)}|${this.escapeStr(u)})`,`gm${r}`),n+`(${this.processSynomyms(s)}|${this.processSynomyms(u)})`+n))}return e}processSynomyms(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}setupWildcardsRegExp(e){return e=e.replace(/(?:\\)*\?/g,t=>t.charAt(0)==="\\"?"?":""),e.replace(/(?:\\)*\*/g,t=>t.charAt(0)==="\\"?"*":"")}createWildcardsRegExp(e){let t=this.opt.wildcards==="withSpaces";return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}setupIgnoreJoinersRegExp(e){return e.replace(/[^(|)\\]/g,(t,r,n)=>{let a=n.charAt(r+1);return/[(|)\\]/.test(a)||a===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const r=this.opt.ignorePunctuation;return Array.isArray(r)&&r.length&&t.push(this.escapeStr(r.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join(`[${t.join("")}]*`):e}createDiacriticsRegExp(e){const t=this.opt.caseSensitive?"":"i",r=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"];let n=[];return e.split("").forEach(a=>{r.every(i=>{if(i.indexOf(a)!==-1){if(n.indexOf(i)>-1)return!1;e=e.replace(new RegExp(`[${i}]`,`gm${t}`),`[${i}]`),n.push(i)}return!0})}),e}createMergedBlanksRegExp(e){return e.replace(/[\s]+/gmi,"[\\s]+")}createAccuracyRegExp(e){const t="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿";let r=this.opt.accuracy,n=typeof r=="string"?r:r.value,a=typeof r=="string"?[]:r.limiters,i="";switch(a.forEach(s=>{i+=`|${this.escapeStr(s)}`}),n){case"partially":default:return`()(${e})`;case"complementary":return i="\\s"+(i||this.escapeStr(t)),`()([^${i}]*${e}[^${i}]*)`;case"exactly":return`(^|\\s${i})(${e})(?=$|\\s${i})`}}getSeparatedKeywords(e){let t=[];return e.forEach(r=>{this.opt.separateWordSearch?r.split(" ").forEach(n=>{n.trim()&&t.indexOf(n)===-1&&t.push(n)}):r.trim()&&t.indexOf(r)===-1&&t.push(r)}),{keywords:t.sort((r,n)=>n.length-r.length),length:t.length}}isNumeric(e){return Number(parseFloat(e))==e}checkRanges(e){if(!Array.isArray(e)||Object.prototype.toString.call(e[0])!=="[object Object]")return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];const t=[];let r=0;return e.sort((n,a)=>n.start-a.start).forEach(n=>{let{start:a,end:i,valid:s}=this.callNoMatchOnInvalidRanges(n,r);s&&(n.start=a,n.length=i-a,t.push(n),r=i)}),t}callNoMatchOnInvalidRanges(e,t){let r,n,a=!1;return e&&typeof e.start<"u"?(r=parseInt(e.start,10),n=r+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&n-t>0&&n-r>0?a=!0:(this.log(`Ignoring invalid or overlapping range: ${JSON.stringify(e)}`),this.opt.noMatch(e))):(this.log(`Ignoring invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)),{start:r,end:n,valid:a}}checkWhitespaceRanges(e,t,r){let n,a=!0,i=r.length,s=t-i,u=parseInt(e.start,10)-s;return u=u>i?i:u,n=u+parseInt(e.length,10),n>i&&(n=i,this.log(`End range automatically set to the max value of ${i}`)),u<0||n-u<0||u>i||n>i?(a=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):r.substring(u,n).replace(/\s+/g,"")===""&&(a=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:u,end:n,valid:a}}getTextNodes(e){let t="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,n=>{r.push({start:t.length,end:(t+=n.textContent).length,node:n})},n=>this.matchesExclude(n.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,()=>{e({value:t,nodes:r})})}matchesExclude(e){return fe.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,r){const n=this.opt.element?this.opt.element:"mark",a=e.splitText(t),i=a.splitText(r-t);let s=document.createElement(n);return s.setAttribute("data-markjs","true"),this.opt.className&&s.setAttribute("class",this.opt.className),s.textContent=a.textContent,a.parentNode.replaceChild(s,a),i}wrapRangeInMappedTextNode(e,t,r,n,a){e.nodes.every((i,s)=>{const u=e.nodes[s+1];if(typeof u>"u"||u.start>t){if(!n(i.node))return!1;const l=t-i.start,h=(r>i.end?i.end:r)-i.start,d=e.value.substr(0,i.start),v=e.value.substr(h+i.start);if(i.node=this.wrapRangeInTextNode(i.node,l,h),e.value=d+v,e.nodes.forEach((y,b)=>{b>=s&&(e.nodes[b].start>0&&b!==s&&(e.nodes[b].start-=h),e.nodes[b].end-=h)}),r-=h,a(i.node.previousSibling,i.start),r>i.end)t=i.end;else return!1}return!0})}wrapMatches(e,t,r,n,a){const i=t===0?0:t+1;this.getTextNodes(s=>{s.nodes.forEach(u=>{u=u.node;let l;for(;(l=e.exec(u.textContent))!==null&&l[i]!=="";){if(!r(l[i],u))continue;let h=l.index;if(i!==0)for(let d=1;d{let u;for(;(u=e.exec(s.value))!==null&&u[i]!=="";){let l=u.index;if(i!==0)for(let d=1;dr(u[i],d),(d,v)=>{e.lastIndex=v,n(d)})}a()})}wrapRangeFromIndex(e,t,r,n){this.getTextNodes(a=>{const i=a.value.length;e.forEach((s,u)=>{let{start:l,end:h,valid:d}=this.checkWhitespaceRanges(s,i,a.value);d&&this.wrapRangeInMappedTextNode(a,l,h,v=>t(v,s,a.value.substring(l,h),u),v=>{r(v,s)})}),n()})}unwrapMatches(e){const t=e.parentNode;let r=document.createDocumentFragment();for(;e.firstChild;)r.appendChild(e.removeChild(e.firstChild));t.replaceChild(r,e),this.ie?this.normalizeTextNode(t):t.normalize()}normalizeTextNode(e){if(e){if(e.nodeType===3)for(;e.nextSibling&&e.nextSibling.nodeType===3;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}markRegExp(e,t){this.opt=t,this.log(`Searching with expression "${e}"`);let r=0,n="wrapMatches";const a=i=>{r++,this.opt.each(i)};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),this[n](e,this.opt.ignoreGroups,(i,s)=>this.opt.filter(s,i,r),a,()=>{r===0&&this.opt.noMatch(e),this.opt.done(r)})}mark(e,t){this.opt=t;let r=0,n="wrapMatches";const{keywords:a,length:i}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),s=this.opt.caseSensitive?"":"i",u=l=>{let h=new RegExp(this.createRegExp(l),`gm${s}`),d=0;this.log(`Searching with expression "${h}"`),this[n](h,1,(v,y)=>this.opt.filter(y,l,r,d),v=>{d++,r++,this.opt.each(v)},()=>{d===0&&this.opt.noMatch(l),a[i-1]===l?this.opt.done(r):u(a[a.indexOf(l)+1])})};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),i===0?this.opt.done(r):u(a[0])}markRanges(e,t){this.opt=t;let r=0,n=this.checkRanges(e);n&&n.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(n)),this.wrapRangeFromIndex(n,(a,i,s,u)=>this.opt.filter(a,i,s,u),(a,i)=>{r++,this.opt.each(a,i)},()=>{this.opt.done(r)})):this.opt.done(r)}unmark(e){this.opt=e;let t=this.opt.element?this.opt.element:"*";t+="[data-markjs]",this.opt.className&&(t+=`.${this.opt.className}`),this.log(`Removal selector "${t}"`),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,r=>{this.unwrapMatches(r)},r=>{const n=fe.matches(r,t),a=this.matchesExclude(r);return!n||a?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function Rr(o){const e=new Or(o);return this.mark=(t,r)=>(e.mark(t,r),this),this.markRegExp=(t,r)=>(e.markRegExp(t,r),this),this.markRanges=(t,r)=>(e.markRanges(t,r),this),this.unmark=t=>(e.unmark(t),this),this}var W=function(){return W=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&a[a.length-1])&&(l[0]===6||l[0]===2)){t=0;continue}if(l[0]===3&&(!a||l[1]>a[0]&&l[1]=o.length&&(o=void 0),{value:o&&o[r++],done:!o}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function J(o,e){var t=typeof Symbol=="function"&&o[Symbol.iterator];if(!t)return o;var r=t.call(o),n,a=[],i;try{for(;(e===void 0||e-- >0)&&!(n=r.next()).done;)a.push(n.value)}catch(s){i={error:s}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(i)throw i.error}}return a}var Lr="ENTRIES",Ft="KEYS",Et="VALUES",G="",Me=function(){function o(e,t){var r=e._tree,n=Array.from(r.keys());this.set=e,this._type=t,this._path=n.length>0?[{node:r,keys:n}]:[]}return o.prototype.next=function(){var e=this.dive();return this.backtrack(),e},o.prototype.dive=function(){if(this._path.length===0)return{done:!0,value:void 0};var e=ce(this._path),t=e.node,r=e.keys;if(ce(r)===G)return{done:!1,value:this.result()};var n=t.get(ce(r));return this._path.push({node:n,keys:Array.from(n.keys())}),this.dive()},o.prototype.backtrack=function(){if(this._path.length!==0){var e=ce(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}},o.prototype.key=function(){return this.set._prefix+this._path.map(function(e){var t=e.keys;return ce(t)}).filter(function(e){return e!==G}).join("")},o.prototype.value=function(){return ce(this._path).node.get(G)},o.prototype.result=function(){switch(this._type){case Et:return this.value();case Ft:return this.key();default:return[this.key(),this.value()]}},o.prototype[Symbol.iterator]=function(){return this},o}(),ce=function(o){return o[o.length-1]},zr=function(o,e,t){var r=new Map;if(e===void 0)return r;for(var n=e.length+1,a=n+t,i=new Uint8Array(a*n).fill(t+1),s=0;st)continue e}St(o.get(y),e,t,r,n,E,i,s+y)}}}catch(f){u={error:f}}finally{try{v&&!v.done&&(l=d.return)&&l.call(d)}finally{if(u)throw u.error}}},Le=function(){function o(e,t){e===void 0&&(e=new Map),t===void 0&&(t=""),this._size=void 0,this._tree=e,this._prefix=t}return o.prototype.atPrefix=function(e){var t,r;if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");var n=J(ke(this._tree,e.slice(this._prefix.length)),2),a=n[0],i=n[1];if(a===void 0){var s=J(je(i),2),u=s[0],l=s[1];try{for(var h=D(u.keys()),d=h.next();!d.done;d=h.next()){var v=d.value;if(v!==G&&v.startsWith(l)){var y=new Map;return y.set(v.slice(l.length),u.get(v)),new o(y,e)}}}catch(b){t={error:b}}finally{try{d&&!d.done&&(r=h.return)&&r.call(h)}finally{if(t)throw t.error}}}return new o(a,e)},o.prototype.clear=function(){this._size=void 0,this._tree.clear()},o.prototype.delete=function(e){return this._size=void 0,Pr(this._tree,e)},o.prototype.entries=function(){return new Me(this,Lr)},o.prototype.forEach=function(e){var t,r;try{for(var n=D(this),a=n.next();!a.done;a=n.next()){var i=J(a.value,2),s=i[0],u=i[1];e(s,u,this)}}catch(l){t={error:l}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},o.prototype.fuzzyGet=function(e,t){return zr(this._tree,e,t)},o.prototype.get=function(e){var t=Ke(this._tree,e);return t!==void 0?t.get(G):void 0},o.prototype.has=function(e){var t=Ke(this._tree,e);return t!==void 0&&t.has(G)},o.prototype.keys=function(){return new Me(this,Ft)},o.prototype.set=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=ze(this._tree,e);return r.set(G,t),this},Object.defineProperty(o.prototype,"size",{get:function(){if(this._size)return this._size;this._size=0;for(var e=this.entries();!e.next().done;)this._size+=1;return this._size},enumerable:!1,configurable:!0}),o.prototype.update=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=ze(this._tree,e);return r.set(G,t(r.get(G))),this},o.prototype.fetch=function(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;var r=ze(this._tree,e),n=r.get(G);return n===void 0&&r.set(G,n=t()),n},o.prototype.values=function(){return new Me(this,Et)},o.prototype[Symbol.iterator]=function(){return this.entries()},o.from=function(e){var t,r,n=new o;try{for(var a=D(e),i=a.next();!i.done;i=a.next()){var s=J(i.value,2),u=s[0],l=s[1];n.set(u,l)}}catch(h){t={error:h}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}return n},o.fromObject=function(e){return o.from(Object.entries(e))},o}(),ke=function(o,e,t){var r,n;if(t===void 0&&(t=[]),e.length===0||o==null)return[o,t];try{for(var a=D(o.keys()),i=a.next();!i.done;i=a.next()){var s=i.value;if(s!==G&&e.startsWith(s))return t.push([o,s]),ke(o.get(s),e.slice(s.length),t)}}catch(u){r={error:u}}finally{try{i&&!i.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return t.push([o,e]),ke(void 0,"",t)},Ke=function(o,e){var t,r;if(e.length===0||o==null)return o;try{for(var n=D(o.keys()),a=n.next();!a.done;a=n.next()){var i=a.value;if(i!==G&&e.startsWith(i))return Ke(o.get(i),e.slice(i.length))}}catch(s){t={error:s}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},ze=function(o,e){var t,r,n=e.length;e:for(var a=0;o&&a0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new Le,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}},o.prototype.discard=function(e){var t=this,r=this._idToShortId.get(e);if(r==null)throw new Error("MiniSearch: cannot discard document with ID ".concat(e,": it is not in the index"));this._idToShortId.delete(e),this._documentIds.delete(r),this._storedFields.delete(r),(this._fieldLength.get(r)||[]).forEach(function(n,a){t.removeFieldLength(r,a,t._documentCount,n)}),this._fieldLength.delete(r),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()},o.prototype.maybeAutoVacuum=function(){if(this._options.autoVacuum!==!1){var e=this._options.autoVacuum,t=e.minDirtFactor,r=e.minDirtCount,n=e.batchSize,a=e.batchWait;this.conditionalVacuum({batchSize:n,batchWait:a},{minDirtCount:r,minDirtFactor:t})}},o.prototype.discardAll=function(e){var t,r,n=this._options.autoVacuum;try{this._options.autoVacuum=!1;try{for(var a=D(e),i=a.next();!i.done;i=a.next()){var s=i.value;this.discard(s)}}catch(u){t={error:u}}finally{try{i&&!i.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}}finally{this._options.autoVacuum=n}this.maybeAutoVacuum()},o.prototype.replace=function(e){var t=this._options,r=t.idField,n=t.extractField,a=n(e,r);this.discard(a),this.add(e)},o.prototype.vacuum=function(e){return e===void 0&&(e={}),this.conditionalVacuum(e)},o.prototype.conditionalVacuum=function(e,t){var r=this;return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(function(){var n=r._enqueuedVacuumConditions;return r._enqueuedVacuumConditions=Ue,r.performVacuuming(e,n)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)},o.prototype.performVacuuming=function(e,t){return _r(this,void 0,void 0,function(){var r,n,a,i,s,u,l,h,d,v,y,b,E,g,S,T,F,L,_,V,N,R,A,O,w;return Mr(this,function(c){switch(c.label){case 0:if(r=this._dirtCount,!this.vacuumConditionsMet(t))return[3,10];n=e.batchSize||Je.batchSize,a=e.batchWait||Je.batchWait,i=1,c.label=1;case 1:c.trys.push([1,7,8,9]),s=D(this._index),u=s.next(),c.label=2;case 2:if(u.done)return[3,6];l=J(u.value,2),h=l[0],d=l[1];try{for(v=(R=void 0,D(d)),y=v.next();!y.done;y=v.next()){b=J(y.value,2),E=b[0],g=b[1];try{for(S=(O=void 0,D(g)),T=S.next();!T.done;T=S.next())F=J(T.value,1),L=F[0],!this._documentIds.has(L)&&(g.size<=1?d.delete(E):g.delete(L))}catch(f){O={error:f}}finally{try{T&&!T.done&&(w=S.return)&&w.call(S)}finally{if(O)throw O.error}}}}catch(f){R={error:f}}finally{try{y&&!y.done&&(A=v.return)&&A.call(v)}finally{if(R)throw R.error}}return this._index.get(h).size===0&&this._index.delete(h),i%n!==0?[3,4]:[4,new Promise(function(f){return setTimeout(f,a)})];case 3:c.sent(),c.label=4;case 4:i+=1,c.label=5;case 5:return u=s.next(),[3,2];case 6:return[3,9];case 7:return _=c.sent(),V={error:_},[3,9];case 8:try{u&&!u.done&&(N=s.return)&&N.call(s)}finally{if(V)throw V.error}return[7];case 9:this._dirtCount-=r,c.label=10;case 10:return[4,null];case 11:return c.sent(),this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null,[2]}})})},o.prototype.vacuumConditionsMet=function(e){if(e==null)return!0;var t=e.minDirtCount,r=e.minDirtFactor;return t=t||Ve.minDirtCount,r=r||Ve.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=r},Object.defineProperty(o.prototype,"isVacuuming",{get:function(){return this._currentVacuum!=null},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"dirtCount",{get:function(){return this._dirtCount},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"dirtFactor",{get:function(){return this._dirtCount/(1+this._documentCount+this._dirtCount)},enumerable:!1,configurable:!0}),o.prototype.has=function(e){return this._idToShortId.has(e)},o.prototype.getStoredFields=function(e){var t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)},o.prototype.search=function(e,t){var r,n;t===void 0&&(t={});var a=this.executeQuery(e,t),i=[];try{for(var s=D(a),u=s.next();!u.done;u=s.next()){var l=J(u.value,2),h=l[0],d=l[1],v=d.score,y=d.terms,b=d.match,E=y.length||1,g={id:this._documentIds.get(h),score:v*E,terms:Object.keys(b),queryTerms:y,match:b};Object.assign(g,this._storedFields.get(h)),(t.filter==null||t.filter(g))&&i.push(g)}}catch(S){r={error:S}}finally{try{u&&!u.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}return e===o.wildcard&&t.boostDocument==null&&this._options.searchOptions.boostDocument==null||i.sort(vt),i},o.prototype.autoSuggest=function(e,t){var r,n,a,i;t===void 0&&(t={}),t=W(W({},this._options.autoSuggestOptions),t);var s=new Map;try{for(var u=D(this.search(e,t)),l=u.next();!l.done;l=u.next()){var h=l.value,d=h.score,v=h.terms,y=v.join(" "),b=s.get(y);b!=null?(b.score+=d,b.count+=1):s.set(y,{score:d,terms:v,count:1})}}catch(_){r={error:_}}finally{try{l&&!l.done&&(n=u.return)&&n.call(u)}finally{if(r)throw r.error}}var E=[];try{for(var g=D(s),S=g.next();!S.done;S=g.next()){var T=J(S.value,2),b=T[0],F=T[1],d=F.score,v=F.terms,L=F.count;E.push({suggestion:b,terms:v,score:d/L})}}catch(_){a={error:_}}finally{try{S&&!S.done&&(i=g.return)&&i.call(g)}finally{if(a)throw a.error}}return E.sort(vt),E},Object.defineProperty(o.prototype,"documentCount",{get:function(){return this._documentCount},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"termCount",{get:function(){return this._index.size},enumerable:!1,configurable:!0}),o.loadJSON=function(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(e),t)},o.getDefault=function(e){if(Be.hasOwnProperty(e))return Pe(Be,e);throw new Error('MiniSearch: unknown option "'.concat(e,'"'))},o.loadJS=function(e,t){var r,n,a,i,s,u,l=e.index,h=e.documentCount,d=e.nextId,v=e.documentIds,y=e.fieldIds,b=e.fieldLength,E=e.averageFieldLength,g=e.storedFields,S=e.dirtCount,T=e.serializationVersion;if(T!==1&&T!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");var F=new o(t);F._documentCount=h,F._nextId=d,F._documentIds=Te(v),F._idToShortId=new Map,F._fieldIds=y,F._fieldLength=Te(b),F._avgFieldLength=E,F._storedFields=Te(g),F._dirtCount=S||0,F._index=new Le;try{for(var L=D(F._documentIds),_=L.next();!_.done;_=L.next()){var V=J(_.value,2),N=V[0],R=V[1];F._idToShortId.set(R,N)}}catch(P){r={error:P}}finally{try{_&&!_.done&&(n=L.return)&&n.call(L)}finally{if(r)throw r.error}}try{for(var A=D(l),O=A.next();!O.done;O=A.next()){var w=J(O.value,2),c=w[0],f=w[1],p=new Map;try{for(var C=(s=void 0,D(Object.keys(f))),I=C.next();!I.done;I=C.next()){var M=I.value,z=f[M];T===1&&(z=z.ds),p.set(parseInt(M,10),Te(z))}}catch(P){s={error:P}}finally{try{I&&!I.done&&(u=C.return)&&u.call(C)}finally{if(s)throw s.error}}F._index.set(c,p)}}catch(P){a={error:P}}finally{try{O&&!O.done&&(i=A.return)&&i.call(A)}finally{if(a)throw a.error}}return F},o.prototype.executeQuery=function(e,t){var r=this;if(t===void 0&&(t={}),e===o.wildcard)return this.executeWildcardQuery(t);if(typeof e!="string"){var n=W(W(W({},t),e),{queries:void 0}),a=e.queries.map(function(g){return r.executeQuery(g,n)});return this.combineResults(a,n.combineWith)}var i=this._options,s=i.tokenize,u=i.processTerm,l=i.searchOptions,h=W(W({tokenize:s,processTerm:u},l),t),d=h.tokenize,v=h.processTerm,y=d(e).flatMap(function(g){return v(g)}).filter(function(g){return!!g}),b=y.map(Jr(h)),E=b.map(function(g){return r.executeQuerySpec(g,h)});return this.combineResults(E,h.combineWith)},o.prototype.executeQuerySpec=function(e,t){var r,n,a,i,s=W(W({},this._options.searchOptions),t),u=(s.fields||this._options.fields).reduce(function(M,z){var P;return W(W({},M),(P={},P[z]=Pe(s.boost,z)||1,P))},{}),l=s.boostDocument,h=s.weights,d=s.maxFuzzy,v=s.bm25,y=W(W({},ht.weights),h),b=y.fuzzy,E=y.prefix,g=this._index.get(e.term),S=this.termResults(e.term,e.term,1,g,u,l,v),T,F;if(e.prefix&&(T=this._index.atPrefix(e.term)),e.fuzzy){var L=e.fuzzy===!0?.2:e.fuzzy,_=L<1?Math.min(d,Math.round(e.term.length*L)):L;_&&(F=this._index.fuzzyGet(e.term,_))}if(T)try{for(var V=D(T),N=V.next();!N.done;N=V.next()){var R=J(N.value,2),A=R[0],O=R[1],w=A.length-e.term.length;if(w){F==null||F.delete(A);var c=E*A.length/(A.length+.3*w);this.termResults(e.term,A,c,O,u,l,v,S)}}}catch(M){r={error:M}}finally{try{N&&!N.done&&(n=V.return)&&n.call(V)}finally{if(r)throw r.error}}if(F)try{for(var f=D(F.keys()),p=f.next();!p.done;p=f.next()){var A=p.value,C=J(F.get(A),2),I=C[0],w=C[1];if(w){var c=b*A.length/(A.length+w);this.termResults(e.term,A,c,I,u,l,v,S)}}}catch(M){a={error:M}}finally{try{p&&!p.done&&(i=f.return)&&i.call(f)}finally{if(a)throw a.error}}return S},o.prototype.executeWildcardQuery=function(e){var t,r,n=new Map,a=W(W({},this._options.searchOptions),e);try{for(var i=D(this._documentIds),s=i.next();!s.done;s=i.next()){var u=J(s.value,2),l=u[0],h=u[1],d=a.boostDocument?a.boostDocument(h,"",this._storedFields.get(l)):1;n.set(l,{score:d,terms:[],match:{}})}}catch(v){t={error:v}}finally{try{s&&!s.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}return n},o.prototype.combineResults=function(e,t){if(t===void 0&&(t=Ge),e.length===0)return new Map;var r=t.toLowerCase();return e.reduce($r[r])||new Map},o.prototype.toJSON=function(){var e,t,r,n,a=[];try{for(var i=D(this._index),s=i.next();!s.done;s=i.next()){var u=J(s.value,2),l=u[0],h=u[1],d={};try{for(var v=(r=void 0,D(h)),y=v.next();!y.done;y=v.next()){var b=J(y.value,2),E=b[0],g=b[1];d[E]=Object.fromEntries(g)}}catch(S){r={error:S}}finally{try{y&&!y.done&&(n=v.return)&&n.call(v)}finally{if(r)throw r.error}}a.push([l,d])}}catch(S){e={error:S}}finally{try{s&&!s.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:a,serializationVersion:2}},o.prototype.termResults=function(e,t,r,n,a,i,s,u){var l,h,d,v,y;if(u===void 0&&(u=new Map),n==null)return u;try{for(var b=D(Object.keys(a)),E=b.next();!E.done;E=b.next()){var g=E.value,S=a[g],T=this._fieldIds[g],F=n.get(T);if(F!=null){var L=F.size,_=this._avgFieldLength[T];try{for(var V=(d=void 0,D(F.keys())),N=V.next();!N.done;N=V.next()){var R=N.value;if(!this._documentIds.has(R)){this.removeTerm(T,R,t),L-=1;continue}var A=i?i(this._documentIds.get(R),t,this._storedFields.get(R)):1;if(A){var O=F.get(R),w=this._fieldLength.get(R)[T],c=Kr(O,L,this._documentCount,w,_,s),f=r*S*A*c,p=u.get(R);if(p){p.score+=f,jr(p.terms,e);var C=Pe(p.match,t);C?C.push(g):p.match[t]=[g]}else u.set(R,{score:f,terms:[e],match:(y={},y[t]=[g],y)})}}}catch(I){d={error:I}}finally{try{N&&!N.done&&(v=V.return)&&v.call(V)}finally{if(d)throw d.error}}}}}catch(I){l={error:I}}finally{try{E&&!E.done&&(h=b.return)&&h.call(b)}finally{if(l)throw l.error}}return u},o.prototype.addTerm=function(e,t,r){var n=this._index.fetch(r,pt),a=n.get(e);if(a==null)a=new Map,a.set(t,1),n.set(e,a);else{var i=a.get(t);a.set(t,(i||0)+1)}},o.prototype.removeTerm=function(e,t,r){if(!this._index.has(r)){this.warnDocumentChanged(t,e,r);return}var n=this._index.fetch(r,pt),a=n.get(e);a==null||a.get(t)==null?this.warnDocumentChanged(t,e,r):a.get(t)<=1?a.size<=1?n.delete(e):a.delete(t):a.set(t,a.get(t)-1),this._index.get(r).size===0&&this._index.delete(r)},o.prototype.warnDocumentChanged=function(e,t,r){var n,a;try{for(var i=D(Object.keys(this._fieldIds)),s=i.next();!s.done;s=i.next()){var u=s.value;if(this._fieldIds[u]===t){this._options.logger("warn","MiniSearch: document with ID ".concat(this._documentIds.get(e),' has changed before removal: term "').concat(r,'" was not present in field "').concat(u,'". Removing a document after it has changed can corrupt the index!'),"version_conflict");return}}}catch(l){n={error:l}}finally{try{s&&!s.done&&(a=i.return)&&a.call(i)}finally{if(n)throw n.error}}},o.prototype.addDocumentId=function(e){var t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t},o.prototype.addFields=function(e){for(var t=0;t(qt("data-v-f4c4f812"),o=o(),Ht(),o),qr=["aria-owns"],Hr={class:"shell"},Yr=["title"],Zr=Y(()=>k("span",{"aria-hidden":"true",class:"vpi-search search-icon local-search-icon"},null,-1)),Xr=[Zr],ea={class:"search-actions before"},ta=["title"],ra=Y(()=>k("span",{class:"vpi-arrow-left local-search-icon"},null,-1)),aa=[ra],na=["placeholder"],ia={class:"search-actions"},oa=["title"],sa=Y(()=>k("span",{class:"vpi-layout-list local-search-icon"},null,-1)),ua=[sa],la=["disabled","title"],ca=Y(()=>k("span",{class:"vpi-delete local-search-icon"},null,-1)),fa=[ca],ha=["id","role","aria-labelledby"],da=["aria-selected"],va=["href","aria-label","onMouseenter","onFocusin"],pa={class:"titles"},ya=Y(()=>k("span",{class:"title-icon"},"#",-1)),ma=["innerHTML"],ga=Y(()=>k("span",{class:"vpi-chevron-right local-search-icon"},null,-1)),ba={class:"title main"},wa=["innerHTML"],xa={key:0,class:"excerpt-wrapper"},Fa={key:0,class:"excerpt",inert:""},Ea=["innerHTML"],Sa=Y(()=>k("div",{class:"excerpt-gradient-bottom"},null,-1)),Aa=Y(()=>k("div",{class:"excerpt-gradient-top"},null,-1)),Ta={key:0,class:"no-results"},Na={class:"search-keyboard-shortcuts"},Ca=["aria-label"],Ia=Y(()=>k("span",{class:"vpi-arrow-up navigate-icon"},null,-1)),Da=[Ia],ka=["aria-label"],Oa=Y(()=>k("span",{class:"vpi-arrow-down navigate-icon"},null,-1)),Ra=[Oa],_a=["aria-label"],Ma=Y(()=>k("span",{class:"vpi-corner-down-left navigate-icon"},null,-1)),La=[Ma],za=["aria-label"],Pa=Rt({__name:"VPLocalSearchBox",emits:["close"],setup(o,{emit:e}){var z,P;const t=e,r=xe(),n=xe(),a=xe(nr),i=rr(),{activate:s}=kr(r,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:u,theme:l}=i,h=tt(async()=>{var m,x,$,K,Q,q,B,U,Z;return it(Vr.loadJSON(($=await((x=(m=a.value)[u.value])==null?void 0:x.call(m)))==null?void 0:$.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1},...((K=l.value.search)==null?void 0:K.provider)==="local"&&((q=(Q=l.value.search.options)==null?void 0:Q.miniSearch)==null?void 0:q.searchOptions)},...((B=l.value.search)==null?void 0:B.provider)==="local"&&((Z=(U=l.value.search.options)==null?void 0:U.miniSearch)==null?void 0:Z.options)}))}),v=Fe(()=>{var m,x;return((m=l.value.search)==null?void 0:m.provider)==="local"&&((x=l.value.search.options)==null?void 0:x.disableQueryPersistence)===!0}).value?oe(""):_t("vitepress:local-search-filter",""),y=Mt("vitepress:local-search-detailed-list",((z=l.value.search)==null?void 0:z.provider)==="local"&&((P=l.value.search.options)==null?void 0:P.detailedView)===!0),b=Fe(()=>{var m,x,$;return((m=l.value.search)==null?void 0:m.provider)==="local"&&(((x=l.value.search.options)==null?void 0:x.disableDetailedView)===!0||(($=l.value.search.options)==null?void 0:$.detailedView)===!1)}),E=Fe(()=>{var x,$,K,Q,q,B,U;const m=((x=l.value.search)==null?void 0:x.options)??l.value.algolia;return((q=(Q=(K=($=m==null?void 0:m.locales)==null?void 0:$[u.value])==null?void 0:K.translations)==null?void 0:Q.button)==null?void 0:q.buttonText)||((U=(B=m==null?void 0:m.translations)==null?void 0:B.button)==null?void 0:U.buttonText)||"Search"});Lt(()=>{b.value&&(y.value=!1)});const g=xe([]),S=oe(!1);$e(v,()=>{S.value=!1});const T=tt(async()=>{if(n.value)return it(new Rr(n.value))},null),F=new Qr(16);zt(()=>[h.value,v.value,y.value],async([m,x,$],K,Q)=>{var be,Qe,qe,He;(K==null?void 0:K[0])!==m&&F.clear();let q=!1;if(Q(()=>{q=!0}),!m)return;g.value=m.search(x).slice(0,16),S.value=!0;const B=$?await Promise.all(g.value.map(H=>L(H.id))):[];if(q)return;for(const{id:H,mod:ae}of B){const ne=H.slice(0,H.indexOf("#"));let te=F.get(ne);if(te)continue;te=new Map,F.set(ne,te);const X=ae.default??ae;if(X!=null&&X.render||X!=null&&X.setup){const ie=Yt(X);ie.config.warnHandler=()=>{},ie.provide(Zt,i),Object.defineProperties(ie.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}});const Ye=document.createElement("div");ie.mount(Ye),Ye.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(he=>{var et;const we=(et=he.querySelector("a"))==null?void 0:et.getAttribute("href"),Ze=(we==null?void 0:we.startsWith("#"))&&we.slice(1);if(!Ze)return;let Xe="";for(;(he=he.nextElementSibling)&&!/^h[1-6]$/i.test(he.tagName);)Xe+=he.outerHTML;te.set(Ze,Xe)}),ie.unmount()}if(q)return}const U=new Set;if(g.value=g.value.map(H=>{const[ae,ne]=H.id.split("#"),te=F.get(ae),X=(te==null?void 0:te.get(ne))??"";for(const ie in H.match)U.add(ie);return{...H,text:X}}),await de(),q)return;await new Promise(H=>{var ae;(ae=T.value)==null||ae.unmark({done:()=>{var ne;(ne=T.value)==null||ne.markRegExp(M(U),{done:H})}})});const Z=((be=r.value)==null?void 0:be.querySelectorAll(".result .excerpt"))??[];for(const H of Z)(Qe=H.querySelector('mark[data-markjs="true"]'))==null||Qe.scrollIntoView({block:"center"});(He=(qe=n.value)==null?void 0:qe.firstElementChild)==null||He.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function L(m){const x=Xt(m.slice(0,m.indexOf("#")));try{if(!x)throw new Error(`Cannot find file for id: ${m}`);return{id:m,mod:await import(x)}}catch($){return console.error($),{id:m,mod:{}}}}const _=oe(),V=Fe(()=>{var m;return((m=v.value)==null?void 0:m.length)<=0});function N(m=!0){var x,$;(x=_.value)==null||x.focus(),m&&(($=_.value)==null||$.select())}Re(()=>{N()});function R(m){m.pointerType==="mouse"&&N()}const A=oe(-1),O=oe(!1);$e(g,m=>{A.value=m.length?0:-1,w()});function w(){de(()=>{const m=document.querySelector(".result.selected");m==null||m.scrollIntoView({block:"nearest"})})}Ee("ArrowUp",m=>{m.preventDefault(),A.value--,A.value<0&&(A.value=g.value.length-1),O.value=!0,w()}),Ee("ArrowDown",m=>{m.preventDefault(),A.value++,A.value>=g.value.length&&(A.value=0),O.value=!0,w()});const c=Pt();Ee("Enter",m=>{if(m.isComposing||m.target instanceof HTMLButtonElement&&m.target.type!=="submit")return;const x=g.value[A.value];if(m.target instanceof HTMLInputElement&&!x){m.preventDefault();return}x&&(c.go(x.id),t("close"))}),Ee("Escape",()=>{t("close")});const p=ar({modal:{displayDetails:"Display detailed list",resetButtonTitle:"Reset search",backButtonTitle:"Close search",noResultsText:"No results for",footer:{selectText:"to select",selectKeyAriaLabel:"enter",navigateText:"to navigate",navigateUpKeyAriaLabel:"up arrow",navigateDownKeyAriaLabel:"down arrow",closeText:"to close",closeKeyAriaLabel:"escape"}}});Re(()=>{window.history.pushState(null,"",null)}),Bt("popstate",m=>{m.preventDefault(),t("close")});const C=Vt($t?document.body:null);Re(()=>{de(()=>{C.value=!0,de().then(()=>s())})}),Wt(()=>{C.value=!1});function I(){v.value="",de().then(()=>N(!1))}function M(m){return new RegExp([...m].sort((x,$)=>$.length-x.length).map(x=>`(${er(x)})`).join("|"),"gi")}return(m,x)=>{var $,K,Q,q;return ee(),Kt(Qt,{to:"body"},[k("div",{ref_key:"el",ref:r,role:"button","aria-owns":($=g.value)!=null&&$.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[k("div",{class:"backdrop",onClick:x[0]||(x[0]=B=>m.$emit("close"))}),k("div",Hr,[k("form",{class:"search-bar",onPointerup:x[4]||(x[4]=B=>R(B)),onSubmit:x[5]||(x[5]=Jt(()=>{},["prevent"]))},[k("label",{title:E.value,id:"localsearch-label",for:"localsearch-input"},Xr,8,Yr),k("div",ea,[k("button",{class:"back-button",title:j(p)("modal.backButtonTitle"),onClick:x[1]||(x[1]=B=>m.$emit("close"))},aa,8,ta)]),Ut(k("input",{ref_key:"searchInput",ref:_,"onUpdate:modelValue":x[2]||(x[2]=B=>Gt(v)?v.value=B:null),placeholder:E.value,id:"localsearch-input","aria-labelledby":"localsearch-label",class:"search-input"},null,8,na),[[jt,j(v)]]),k("div",ia,[b.value?Se("",!0):(ee(),re("button",{key:0,class:rt(["toggle-layout-button",{"detailed-list":j(y)}]),type:"button",title:j(p)("modal.displayDetails"),onClick:x[3]||(x[3]=B=>A.value>-1&&(y.value=!j(y)))},ua,10,oa)),k("button",{class:"clear-button",type:"reset",disabled:V.value,title:j(p)("modal.resetButtonTitle"),onClick:I},fa,8,la)])],32),k("ul",{ref_key:"resultsEl",ref:n,id:(K=g.value)!=null&&K.length?"localsearch-list":void 0,role:(Q=g.value)!=null&&Q.length?"listbox":void 0,"aria-labelledby":(q=g.value)!=null&&q.length?"localsearch-label":void 0,class:"results",onMousemove:x[7]||(x[7]=B=>O.value=!1)},[(ee(!0),re(nt,null,at(g.value,(B,U)=>(ee(),re("li",{key:B.id,role:"option","aria-selected":A.value===U?"true":"false"},[k("a",{href:B.id,class:rt(["result",{selected:A.value===U}]),"aria-label":[...B.titles,B.title].join(" > "),onMouseenter:Z=>!O.value&&(A.value=U),onFocusin:Z=>A.value=U,onClick:x[6]||(x[6]=Z=>m.$emit("close"))},[k("div",null,[k("div",pa,[ya,(ee(!0),re(nt,null,at(B.titles,(Z,be)=>(ee(),re("span",{key:be,class:"title"},[k("span",{class:"text",innerHTML:Z},null,8,ma),ga]))),128)),k("span",ba,[k("span",{class:"text",innerHTML:B.title},null,8,wa)])]),j(y)?(ee(),re("div",xa,[B.text?(ee(),re("div",Fa,[k("div",{class:"vp-doc",innerHTML:B.text},null,8,Ea)])):Se("",!0),Sa,Aa])):Se("",!0)])],42,va)],8,da))),128)),j(v)&&!g.value.length&&S.value?(ee(),re("li",Ta,[ve(pe(j(p)("modal.noResultsText"))+' "',1),k("strong",null,pe(j(v)),1),ve('" ')])):Se("",!0)],40,ha),k("div",Na,[k("span",null,[k("kbd",{"aria-label":j(p)("modal.footer.navigateUpKeyAriaLabel")},Da,8,Ca),k("kbd",{"aria-label":j(p)("modal.footer.navigateDownKeyAriaLabel")},Ra,8,ka),ve(" "+pe(j(p)("modal.footer.navigateText")),1)]),k("span",null,[k("kbd",{"aria-label":j(p)("modal.footer.selectKeyAriaLabel")},La,8,_a),ve(" "+pe(j(p)("modal.footer.selectText")),1)]),k("span",null,[k("kbd",{"aria-label":j(p)("modal.footer.closeKeyAriaLabel")},"esc",8,za),ve(" "+pe(j(p)("modal.footer.closeText")),1)])])])],8,qr)])}}}),Ja=tr(Pa,[["__scopeId","data-v-f4c4f812"]]);export{Ja as default}; diff --git a/previews/PR135/assets/chunks/VPLocalSearchBox.DLn4sKrv.js b/previews/PR135/assets/chunks/VPLocalSearchBox.DLn4sKrv.js new file mode 100644 index 000000000..119949926 --- /dev/null +++ b/previews/PR135/assets/chunks/VPLocalSearchBox.DLn4sKrv.js @@ -0,0 +1,7 @@ +var kt=Object.defineProperty;var Ft=(a,e,t)=>e in a?kt(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var Ce=(a,e,t)=>Ft(a,typeof e!="symbol"?e+"":e,t);import{X as Ot,s as ne,v as Ve,al as Rt,am as Ct,d as Mt,G as be,an as et,h as ye,ao as At,ap as Lt,x as Dt,aq as zt,y as Me,R as de,Q as we,ar as Pt,as as jt,Y as Vt,U as $t,a1 as Bt,o as Q,b as Wt,j as x,a2 as Kt,k as D,at as Jt,au as Ut,av as qt,c as Z,n as tt,e as _e,E as st,F as nt,a as he,t as fe,aw as Gt,p as Qt,l as Ht,ax as it,ay as Yt,ab as Zt,ah as Xt,az as es,_ as ts}from"./framework.CONf0Rze.js";import{u as ss,c as ns}from"./theme.D6VlRy8Q.js";const is={root:()=>Ot(()=>import("./@localSearchIndexroot.DOIebHWk.js"),[])};/*! +* tabbable 6.2.0 +* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE +*/var vt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Ie=vt.join(","),mt=typeof Element>"u",re=mt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Ne=!mt&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a==null?void 0:a.ownerDocument},ke=function a(e,t){var s;t===void 0&&(t=!0);var n=e==null||(s=e.getAttribute)===null||s===void 0?void 0:s.call(e,"inert"),r=n===""||n==="true",i=r||t&&e&&a(e.parentNode);return i},rs=function(e){var t,s=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return s===""||s==="true"},gt=function(e,t,s){if(ke(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Ie));return t&&re.call(e,Ie)&&n.unshift(e),n=n.filter(s),n},bt=function a(e,t,s){for(var n=[],r=Array.from(e);r.length;){var i=r.shift();if(!ke(i,!1))if(i.tagName==="SLOT"){var o=i.assignedElements(),c=o.length?o:i.children,l=a(c,!0,s);s.flatten?n.push.apply(n,l):n.push({scopeParent:i,candidates:l})}else{var h=re.call(i,Ie);h&&s.filter(i)&&(t||!e.includes(i))&&n.push(i);var f=i.shadowRoot||typeof s.getShadowRoot=="function"&&s.getShadowRoot(i),v=!ke(f,!1)&&(!s.shadowRootFilter||s.shadowRootFilter(i));if(f&&v){var b=a(f===!0?i.children:f.children,!0,s);s.flatten?n.push.apply(n,b):n.push({scopeParent:i,candidates:b})}else r.unshift.apply(r,i.children)}}return n},yt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},ie=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||rs(e))&&!yt(e)?0:e.tabIndex},as=function(e,t){var s=ie(e);return s<0&&t&&!yt(e)?0:s},os=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},wt=function(e){return e.tagName==="INPUT"},cs=function(e){return wt(e)&&e.type==="hidden"},ls=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(s){return s.tagName==="SUMMARY"});return t},us=function(e,t){for(var s=0;ssummary:first-of-type"),i=r?e.parentElement:e;if(re.call(i,"details:not([open]) *"))return!0;if(!s||s==="full"||s==="legacy-full"){if(typeof n=="function"){for(var o=e;e;){var c=e.parentElement,l=Ne(e);if(c&&!c.shadowRoot&&n(c)===!0)return rt(e);e.assignedSlot?e=e.assignedSlot:!c&&l!==e.ownerDocument?e=l.host:e=c}e=o}if(ps(e))return!e.getClientRects().length;if(s!=="legacy-full")return!0}else if(s==="non-zero-area")return rt(e);return!1},ms=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var s=0;s=0)},bs=function a(e){var t=[],s=[];return e.forEach(function(n,r){var i=!!n.scopeParent,o=i?n.scopeParent:n,c=as(o,i),l=i?a(n.candidates):o;c===0?i?t.push.apply(t,l):t.push(o):s.push({documentOrder:r,tabIndex:c,item:n,isScope:i,content:l})}),s.sort(os).reduce(function(n,r){return r.isScope?n.push.apply(n,r.content):n.push(r.content),n},[]).concat(t)},ys=function(e,t){t=t||{};var s;return t.getShadowRoot?s=bt([e],t.includeContainer,{filter:$e.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:gs}):s=gt(e,t.includeContainer,$e.bind(null,t)),bs(s)},ws=function(e,t){t=t||{};var s;return t.getShadowRoot?s=bt([e],t.includeContainer,{filter:Fe.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):s=gt(e,t.includeContainer,Fe.bind(null,t)),s},ae=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return re.call(e,Ie)===!1?!1:$e(t,e)},_s=vt.concat("iframe").join(","),Ae=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return re.call(e,_s)===!1?!1:Fe(t,e)};/*! +* focus-trap 7.5.4 +* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE +*/function at(a,e){var t=Object.keys(a);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(a);e&&(s=s.filter(function(n){return Object.getOwnPropertyDescriptor(a,n).enumerable})),t.push.apply(t,s)}return t}function ot(a){for(var e=1;e0){var s=e[e.length-1];s!==t&&s.pause()}var n=e.indexOf(t);n===-1||e.splice(n,1),e.push(t)},deactivateTrap:function(e,t){var s=e.indexOf(t);s!==-1&&e.splice(s,1),e.length>0&&e[e.length-1].unpause()}},Ts=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},Is=function(e){return(e==null?void 0:e.key)==="Escape"||(e==null?void 0:e.key)==="Esc"||(e==null?void 0:e.keyCode)===27},ve=function(e){return(e==null?void 0:e.key)==="Tab"||(e==null?void 0:e.keyCode)===9},Ns=function(e){return ve(e)&&!e.shiftKey},ks=function(e){return ve(e)&&e.shiftKey},lt=function(e){return setTimeout(e,0)},ut=function(e,t){var s=-1;return e.every(function(n,r){return t(n)?(s=r,!1):!0}),s},pe=function(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),n=1;n1?m-1:0),E=1;E=0)u=s.activeElement;else{var d=i.tabbableGroups[0],m=d&&d.firstTabbableNode;u=m||h("fallbackFocus")}if(!u)throw new Error("Your focus-trap needs to have at least one focusable element");return u},v=function(){if(i.containerGroups=i.containers.map(function(u){var d=ys(u,r.tabbableOptions),m=ws(u,r.tabbableOptions),S=d.length>0?d[0]:void 0,E=d.length>0?d[d.length-1]:void 0,k=m.find(function(p){return ae(p)}),F=m.slice().reverse().find(function(p){return ae(p)}),M=!!d.find(function(p){return ie(p)>0});return{container:u,tabbableNodes:d,focusableNodes:m,posTabIndexesFound:M,firstTabbableNode:S,lastTabbableNode:E,firstDomTabbableNode:k,lastDomTabbableNode:F,nextTabbableNode:function(g){var N=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,O=d.indexOf(g);return O<0?N?m.slice(m.indexOf(g)+1).find(function(P){return ae(P)}):m.slice(0,m.indexOf(g)).reverse().find(function(P){return ae(P)}):d[O+(N?1:-1)]}}}),i.tabbableGroups=i.containerGroups.filter(function(u){return u.tabbableNodes.length>0}),i.tabbableGroups.length<=0&&!h("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(i.containerGroups.find(function(u){return u.posTabIndexesFound})&&i.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},b=function T(u){var d=u.activeElement;if(d)return d.shadowRoot&&d.shadowRoot.activeElement!==null?T(d.shadowRoot):d},w=function T(u){if(u!==!1&&u!==b(document)){if(!u||!u.focus){T(f());return}u.focus({preventScroll:!!r.preventScroll}),i.mostRecentlyFocusedNode=u,Ts(u)&&u.select()}},_=function(u){var d=h("setReturnFocus",u);return d||(d===!1?!1:u)},y=function(u){var d=u.target,m=u.event,S=u.isBackward,E=S===void 0?!1:S;d=d||xe(m),v();var k=null;if(i.tabbableGroups.length>0){var F=l(d,m),M=F>=0?i.containerGroups[F]:void 0;if(F<0)E?k=i.tabbableGroups[i.tabbableGroups.length-1].lastTabbableNode:k=i.tabbableGroups[0].firstTabbableNode;else if(E){var p=ut(i.tabbableGroups,function(I){var L=I.firstTabbableNode;return d===L});if(p<0&&(M.container===d||Ae(d,r.tabbableOptions)&&!ae(d,r.tabbableOptions)&&!M.nextTabbableNode(d,!1))&&(p=F),p>=0){var g=p===0?i.tabbableGroups.length-1:p-1,N=i.tabbableGroups[g];k=ie(d)>=0?N.lastTabbableNode:N.lastDomTabbableNode}else ve(m)||(k=M.nextTabbableNode(d,!1))}else{var O=ut(i.tabbableGroups,function(I){var L=I.lastTabbableNode;return d===L});if(O<0&&(M.container===d||Ae(d,r.tabbableOptions)&&!ae(d,r.tabbableOptions)&&!M.nextTabbableNode(d))&&(O=F),O>=0){var P=O===i.tabbableGroups.length-1?0:O+1,j=i.tabbableGroups[P];k=ie(d)>=0?j.firstTabbableNode:j.firstDomTabbableNode}else ve(m)||(k=M.nextTabbableNode(d))}}else k=h("fallbackFocus");return k},R=function(u){var d=xe(u);if(!(l(d,u)>=0)){if(pe(r.clickOutsideDeactivates,u)){o.deactivate({returnFocus:r.returnFocusOnDeactivate});return}pe(r.allowOutsideClick,u)||u.preventDefault()}},C=function(u){var d=xe(u),m=l(d,u)>=0;if(m||d instanceof Document)m&&(i.mostRecentlyFocusedNode=d);else{u.stopImmediatePropagation();var S,E=!0;if(i.mostRecentlyFocusedNode)if(ie(i.mostRecentlyFocusedNode)>0){var k=l(i.mostRecentlyFocusedNode),F=i.containerGroups[k].tabbableNodes;if(F.length>0){var M=F.findIndex(function(p){return p===i.mostRecentlyFocusedNode});M>=0&&(r.isKeyForward(i.recentNavEvent)?M+1=0&&(S=F[M-1],E=!1))}}else i.containerGroups.some(function(p){return p.tabbableNodes.some(function(g){return ie(g)>0})})||(E=!1);else E=!1;E&&(S=y({target:i.mostRecentlyFocusedNode,isBackward:r.isKeyBackward(i.recentNavEvent)})),w(S||i.mostRecentlyFocusedNode||f())}i.recentNavEvent=void 0},J=function(u){var d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;i.recentNavEvent=u;var m=y({event:u,isBackward:d});m&&(ve(u)&&u.preventDefault(),w(m))},H=function(u){if(Is(u)&&pe(r.escapeDeactivates,u)!==!1){u.preventDefault(),o.deactivate();return}(r.isKeyForward(u)||r.isKeyBackward(u))&&J(u,r.isKeyBackward(u))},W=function(u){var d=xe(u);l(d,u)>=0||pe(r.clickOutsideDeactivates,u)||pe(r.allowOutsideClick,u)||(u.preventDefault(),u.stopImmediatePropagation())},V=function(){if(i.active)return ct.activateTrap(n,o),i.delayInitialFocusTimer=r.delayInitialFocus?lt(function(){w(f())}):w(f()),s.addEventListener("focusin",C,!0),s.addEventListener("mousedown",R,{capture:!0,passive:!1}),s.addEventListener("touchstart",R,{capture:!0,passive:!1}),s.addEventListener("click",W,{capture:!0,passive:!1}),s.addEventListener("keydown",H,{capture:!0,passive:!1}),o},$=function(){if(i.active)return s.removeEventListener("focusin",C,!0),s.removeEventListener("mousedown",R,!0),s.removeEventListener("touchstart",R,!0),s.removeEventListener("click",W,!0),s.removeEventListener("keydown",H,!0),o},Re=function(u){var d=u.some(function(m){var S=Array.from(m.removedNodes);return S.some(function(E){return E===i.mostRecentlyFocusedNode})});d&&w(f())},A=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(Re):void 0,U=function(){A&&(A.disconnect(),i.active&&!i.paused&&i.containers.map(function(u){A.observe(u,{subtree:!0,childList:!0})}))};return o={get active(){return i.active},get paused(){return i.paused},activate:function(u){if(i.active)return this;var d=c(u,"onActivate"),m=c(u,"onPostActivate"),S=c(u,"checkCanFocusTrap");S||v(),i.active=!0,i.paused=!1,i.nodeFocusedBeforeActivation=s.activeElement,d==null||d();var E=function(){S&&v(),V(),U(),m==null||m()};return S?(S(i.containers.concat()).then(E,E),this):(E(),this)},deactivate:function(u){if(!i.active)return this;var d=ot({onDeactivate:r.onDeactivate,onPostDeactivate:r.onPostDeactivate,checkCanReturnFocus:r.checkCanReturnFocus},u);clearTimeout(i.delayInitialFocusTimer),i.delayInitialFocusTimer=void 0,$(),i.active=!1,i.paused=!1,U(),ct.deactivateTrap(n,o);var m=c(d,"onDeactivate"),S=c(d,"onPostDeactivate"),E=c(d,"checkCanReturnFocus"),k=c(d,"returnFocus","returnFocusOnDeactivate");m==null||m();var F=function(){lt(function(){k&&w(_(i.nodeFocusedBeforeActivation)),S==null||S()})};return k&&E?(E(_(i.nodeFocusedBeforeActivation)).then(F,F),this):(F(),this)},pause:function(u){if(i.paused||!i.active)return this;var d=c(u,"onPause"),m=c(u,"onPostPause");return i.paused=!0,d==null||d(),$(),U(),m==null||m(),this},unpause:function(u){if(!i.paused||!i.active)return this;var d=c(u,"onUnpause"),m=c(u,"onPostUnpause");return i.paused=!1,d==null||d(),v(),V(),U(),m==null||m(),this},updateContainerElements:function(u){var d=[].concat(u).filter(Boolean);return i.containers=d.map(function(m){return typeof m=="string"?s.querySelector(m):m}),i.active&&v(),U(),this}},o.updateContainerElements(e),o};function Rs(a,e={}){let t;const{immediate:s,...n}=e,r=ne(!1),i=ne(!1),o=f=>t&&t.activate(f),c=f=>t&&t.deactivate(f),l=()=>{t&&(t.pause(),i.value=!0)},h=()=>{t&&(t.unpause(),i.value=!1)};return Ve(()=>Rt(a),f=>{f&&(t=Os(f,{...n,onActivate(){r.value=!0,e.onActivate&&e.onActivate()},onDeactivate(){r.value=!1,e.onDeactivate&&e.onDeactivate()}}),s&&o())},{flush:"post"}),Ct(()=>c()),{hasFocus:r,isPaused:i,activate:o,deactivate:c,pause:l,unpause:h}}class ce{constructor(e,t=!0,s=[],n=5e3){this.ctx=e,this.iframes=t,this.exclude=s,this.iframesTimeout=n}static matches(e,t){const s=typeof t=="string"?[t]:t,n=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(n){let r=!1;return s.every(i=>n.call(e,i)?(r=!0,!1):!0),r}else return!1}getContexts(){let e,t=[];return typeof this.ctx>"u"||!this.ctx?e=[]:NodeList.prototype.isPrototypeOf(this.ctx)?e=Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?e=this.ctx:typeof this.ctx=="string"?e=Array.prototype.slice.call(document.querySelectorAll(this.ctx)):e=[this.ctx],e.forEach(s=>{const n=t.filter(r=>r.contains(s)).length>0;t.indexOf(s)===-1&&!n&&t.push(s)}),t}getIframeContents(e,t,s=()=>{}){let n;try{const r=e.contentWindow;if(n=r.document,!r||!n)throw new Error("iframe inaccessible")}catch{s()}n&&t(n)}isIframeBlank(e){const t="about:blank",s=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&s!==t&&s}observeIframeLoad(e,t,s){let n=!1,r=null;const i=()=>{if(!n){n=!0,clearTimeout(r);try{this.isIframeBlank(e)||(e.removeEventListener("load",i),this.getIframeContents(e,t,s))}catch{s()}}};e.addEventListener("load",i),r=setTimeout(i,this.iframesTimeout)}onIframeReady(e,t,s){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,s):this.getIframeContents(e,t,s):this.observeIframeLoad(e,t,s)}catch{s()}}waitForIframes(e,t){let s=0;this.forEachIframe(e,()=>!0,n=>{s++,this.waitForIframes(n.querySelector("html"),()=>{--s||t()})},n=>{n||t()})}forEachIframe(e,t,s,n=()=>{}){let r=e.querySelectorAll("iframe"),i=r.length,o=0;r=Array.prototype.slice.call(r);const c=()=>{--i<=0&&n(o)};i||c(),r.forEach(l=>{ce.matches(l,this.exclude)?c():this.onIframeReady(l,h=>{t(l)&&(o++,s(h)),c()},c)})}createIterator(e,t,s){return document.createNodeIterator(e,t,s,!1)}createInstanceOnIframe(e){return new ce(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,s){const n=e.compareDocumentPosition(s),r=Node.DOCUMENT_POSITION_PRECEDING;if(n&r)if(t!==null){const i=t.compareDocumentPosition(s),o=Node.DOCUMENT_POSITION_FOLLOWING;if(i&o)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let s;return t===null?s=e.nextNode():s=e.nextNode()&&e.nextNode(),{prevNode:t,node:s}}checkIframeFilter(e,t,s,n){let r=!1,i=!1;return n.forEach((o,c)=>{o.val===s&&(r=c,i=o.handled)}),this.compareNodeIframe(e,t,s)?(r===!1&&!i?n.push({val:s,handled:!0}):r!==!1&&!i&&(n[r].handled=!0),!0):(r===!1&&n.push({val:s,handled:!1}),!1)}handleOpenIframes(e,t,s,n){e.forEach(r=>{r.handled||this.getIframeContents(r.val,i=>{this.createInstanceOnIframe(i).forEachNode(t,s,n)})})}iterateThroughNodes(e,t,s,n,r){const i=this.createIterator(t,e,n);let o=[],c=[],l,h,f=()=>({prevNode:h,node:l}=this.getIteratorNode(i),l);for(;f();)this.iframes&&this.forEachIframe(t,v=>this.checkIframeFilter(l,h,v,o),v=>{this.createInstanceOnIframe(v).forEachNode(e,b=>c.push(b),n)}),c.push(l);c.forEach(v=>{s(v)}),this.iframes&&this.handleOpenIframes(o,e,s,n),r()}forEachNode(e,t,s,n=()=>{}){const r=this.getContexts();let i=r.length;i||n(),r.forEach(o=>{const c=()=>{this.iterateThroughNodes(e,o,t,s,()=>{--i<=0&&n()})};this.iframes?this.waitForIframes(o,c):c()})}}let Cs=class{constructor(e){this.ctx=e,this.ie=!1;const t=window.navigator.userAgent;(t.indexOf("MSIE")>-1||t.indexOf("Trident")>-1)&&(this.ie=!0)}set opt(e){this._opt=Object.assign({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:()=>{},noMatch:()=>{},filter:()=>!0,done:()=>{},debug:!1,log:window.console},e)}get opt(){return this._opt}get iterator(){return new ce(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const s=this.opt.log;this.opt.debug&&typeof s=="object"&&typeof s[t]=="function"&&s[t](`mark.js: ${e}`)}escapeStr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}createRegExp(e){return this.opt.wildcards!=="disabled"&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),this.opt.wildcards!=="disabled"&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),e}createSynonymsRegExp(e){const t=this.opt.synonyms,s=this.opt.caseSensitive?"":"i",n=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let r in t)if(t.hasOwnProperty(r)){const i=t[r],o=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(r):this.escapeStr(r),c=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(i):this.escapeStr(i);o!==""&&c!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(o)}|${this.escapeStr(c)})`,`gm${s}`),n+`(${this.processSynomyms(o)}|${this.processSynomyms(c)})`+n))}return e}processSynomyms(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}setupWildcardsRegExp(e){return e=e.replace(/(?:\\)*\?/g,t=>t.charAt(0)==="\\"?"?":""),e.replace(/(?:\\)*\*/g,t=>t.charAt(0)==="\\"?"*":"")}createWildcardsRegExp(e){let t=this.opt.wildcards==="withSpaces";return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}setupIgnoreJoinersRegExp(e){return e.replace(/[^(|)\\]/g,(t,s,n)=>{let r=n.charAt(s+1);return/[(|)\\]/.test(r)||r===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const s=this.opt.ignorePunctuation;return Array.isArray(s)&&s.length&&t.push(this.escapeStr(s.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join(`[${t.join("")}]*`):e}createDiacriticsRegExp(e){const t=this.opt.caseSensitive?"":"i",s=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"];let n=[];return e.split("").forEach(r=>{s.every(i=>{if(i.indexOf(r)!==-1){if(n.indexOf(i)>-1)return!1;e=e.replace(new RegExp(`[${i}]`,`gm${t}`),`[${i}]`),n.push(i)}return!0})}),e}createMergedBlanksRegExp(e){return e.replace(/[\s]+/gmi,"[\\s]+")}createAccuracyRegExp(e){const t="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿";let s=this.opt.accuracy,n=typeof s=="string"?s:s.value,r=typeof s=="string"?[]:s.limiters,i="";switch(r.forEach(o=>{i+=`|${this.escapeStr(o)}`}),n){case"partially":default:return`()(${e})`;case"complementary":return i="\\s"+(i||this.escapeStr(t)),`()([^${i}]*${e}[^${i}]*)`;case"exactly":return`(^|\\s${i})(${e})(?=$|\\s${i})`}}getSeparatedKeywords(e){let t=[];return e.forEach(s=>{this.opt.separateWordSearch?s.split(" ").forEach(n=>{n.trim()&&t.indexOf(n)===-1&&t.push(n)}):s.trim()&&t.indexOf(s)===-1&&t.push(s)}),{keywords:t.sort((s,n)=>n.length-s.length),length:t.length}}isNumeric(e){return Number(parseFloat(e))==e}checkRanges(e){if(!Array.isArray(e)||Object.prototype.toString.call(e[0])!=="[object Object]")return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];const t=[];let s=0;return e.sort((n,r)=>n.start-r.start).forEach(n=>{let{start:r,end:i,valid:o}=this.callNoMatchOnInvalidRanges(n,s);o&&(n.start=r,n.length=i-r,t.push(n),s=i)}),t}callNoMatchOnInvalidRanges(e,t){let s,n,r=!1;return e&&typeof e.start<"u"?(s=parseInt(e.start,10),n=s+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&n-t>0&&n-s>0?r=!0:(this.log(`Ignoring invalid or overlapping range: ${JSON.stringify(e)}`),this.opt.noMatch(e))):(this.log(`Ignoring invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)),{start:s,end:n,valid:r}}checkWhitespaceRanges(e,t,s){let n,r=!0,i=s.length,o=t-i,c=parseInt(e.start,10)-o;return c=c>i?i:c,n=c+parseInt(e.length,10),n>i&&(n=i,this.log(`End range automatically set to the max value of ${i}`)),c<0||n-c<0||c>i||n>i?(r=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):s.substring(c,n).replace(/\s+/g,"")===""&&(r=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:c,end:n,valid:r}}getTextNodes(e){let t="",s=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,n=>{s.push({start:t.length,end:(t+=n.textContent).length,node:n})},n=>this.matchesExclude(n.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,()=>{e({value:t,nodes:s})})}matchesExclude(e){return ce.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,s){const n=this.opt.element?this.opt.element:"mark",r=e.splitText(t),i=r.splitText(s-t);let o=document.createElement(n);return o.setAttribute("data-markjs","true"),this.opt.className&&o.setAttribute("class",this.opt.className),o.textContent=r.textContent,r.parentNode.replaceChild(o,r),i}wrapRangeInMappedTextNode(e,t,s,n,r){e.nodes.every((i,o)=>{const c=e.nodes[o+1];if(typeof c>"u"||c.start>t){if(!n(i.node))return!1;const l=t-i.start,h=(s>i.end?i.end:s)-i.start,f=e.value.substr(0,i.start),v=e.value.substr(h+i.start);if(i.node=this.wrapRangeInTextNode(i.node,l,h),e.value=f+v,e.nodes.forEach((b,w)=>{w>=o&&(e.nodes[w].start>0&&w!==o&&(e.nodes[w].start-=h),e.nodes[w].end-=h)}),s-=h,r(i.node.previousSibling,i.start),s>i.end)t=i.end;else return!1}return!0})}wrapMatches(e,t,s,n,r){const i=t===0?0:t+1;this.getTextNodes(o=>{o.nodes.forEach(c=>{c=c.node;let l;for(;(l=e.exec(c.textContent))!==null&&l[i]!=="";){if(!s(l[i],c))continue;let h=l.index;if(i!==0)for(let f=1;f{let c;for(;(c=e.exec(o.value))!==null&&c[i]!=="";){let l=c.index;if(i!==0)for(let f=1;fs(c[i],f),(f,v)=>{e.lastIndex=v,n(f)})}r()})}wrapRangeFromIndex(e,t,s,n){this.getTextNodes(r=>{const i=r.value.length;e.forEach((o,c)=>{let{start:l,end:h,valid:f}=this.checkWhitespaceRanges(o,i,r.value);f&&this.wrapRangeInMappedTextNode(r,l,h,v=>t(v,o,r.value.substring(l,h),c),v=>{s(v,o)})}),n()})}unwrapMatches(e){const t=e.parentNode;let s=document.createDocumentFragment();for(;e.firstChild;)s.appendChild(e.removeChild(e.firstChild));t.replaceChild(s,e),this.ie?this.normalizeTextNode(t):t.normalize()}normalizeTextNode(e){if(e){if(e.nodeType===3)for(;e.nextSibling&&e.nextSibling.nodeType===3;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}markRegExp(e,t){this.opt=t,this.log(`Searching with expression "${e}"`);let s=0,n="wrapMatches";const r=i=>{s++,this.opt.each(i)};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),this[n](e,this.opt.ignoreGroups,(i,o)=>this.opt.filter(o,i,s),r,()=>{s===0&&this.opt.noMatch(e),this.opt.done(s)})}mark(e,t){this.opt=t;let s=0,n="wrapMatches";const{keywords:r,length:i}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),o=this.opt.caseSensitive?"":"i",c=l=>{let h=new RegExp(this.createRegExp(l),`gm${o}`),f=0;this.log(`Searching with expression "${h}"`),this[n](h,1,(v,b)=>this.opt.filter(b,l,s,f),v=>{f++,s++,this.opt.each(v)},()=>{f===0&&this.opt.noMatch(l),r[i-1]===l?this.opt.done(s):c(r[r.indexOf(l)+1])})};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),i===0?this.opt.done(s):c(r[0])}markRanges(e,t){this.opt=t;let s=0,n=this.checkRanges(e);n&&n.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(n)),this.wrapRangeFromIndex(n,(r,i,o,c)=>this.opt.filter(r,i,o,c),(r,i)=>{s++,this.opt.each(r,i)},()=>{this.opt.done(s)})):this.opt.done(s)}unmark(e){this.opt=e;let t=this.opt.element?this.opt.element:"*";t+="[data-markjs]",this.opt.className&&(t+=`.${this.opt.className}`),this.log(`Removal selector "${t}"`),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,s=>{this.unwrapMatches(s)},s=>{const n=ce.matches(s,t),r=this.matchesExclude(s);return!n||r?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function Ms(a){const e=new Cs(a);return this.mark=(t,s)=>(e.mark(t,s),this),this.markRegExp=(t,s)=>(e.markRegExp(t,s),this),this.markRanges=(t,s)=>(e.markRanges(t,s),this),this.unmark=t=>(e.unmark(t),this),this}function Te(a,e,t,s){function n(r){return r instanceof t?r:new t(function(i){i(r)})}return new(t||(t=Promise))(function(r,i){function o(h){try{l(s.next(h))}catch(f){i(f)}}function c(h){try{l(s.throw(h))}catch(f){i(f)}}function l(h){h.done?r(h.value):n(h.value).then(o,c)}l((s=s.apply(a,[])).next())})}const As="ENTRIES",_t="KEYS",xt="VALUES",z="";class Le{constructor(e,t){const s=e._tree,n=Array.from(s.keys());this.set=e,this._type=t,this._path=n.length>0?[{node:s,keys:n}]:[]}next(){const e=this.dive();return this.backtrack(),e}dive(){if(this._path.length===0)return{done:!0,value:void 0};const{node:e,keys:t}=oe(this._path);if(oe(t)===z)return{done:!1,value:this.result()};const s=e.get(oe(t));return this._path.push({node:s,keys:Array.from(s.keys())}),this.dive()}backtrack(){if(this._path.length===0)return;const e=oe(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}key(){return this.set._prefix+this._path.map(({keys:e})=>oe(e)).filter(e=>e!==z).join("")}value(){return oe(this._path).node.get(z)}result(){switch(this._type){case xt:return this.value();case _t:return this.key();default:return[this.key(),this.value()]}}[Symbol.iterator](){return this}}const oe=a=>a[a.length-1],Ls=(a,e,t)=>{const s=new Map;if(e===void 0)return s;const n=e.length+1,r=n+t,i=new Uint8Array(r*n).fill(t+1);for(let o=0;o{const c=r*i;e:for(const l of a.keys())if(l===z){const h=n[c-1];h<=t&&s.set(o,[a.get(l),h])}else{let h=r;for(let f=0;ft)continue e}St(a.get(l),e,t,s,n,h,i,o+l)}};class X{constructor(e=new Map,t=""){this._size=void 0,this._tree=e,this._prefix=t}atPrefix(e){if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");const[t,s]=Oe(this._tree,e.slice(this._prefix.length));if(t===void 0){const[n,r]=Je(s);for(const i of n.keys())if(i!==z&&i.startsWith(r)){const o=new Map;return o.set(i.slice(r.length),n.get(i)),new X(o,e)}}return new X(t,e)}clear(){this._size=void 0,this._tree.clear()}delete(e){return this._size=void 0,Ds(this._tree,e)}entries(){return new Le(this,As)}forEach(e){for(const[t,s]of this)e(t,s,this)}fuzzyGet(e,t){return Ls(this._tree,e,t)}get(e){const t=Be(this._tree,e);return t!==void 0?t.get(z):void 0}has(e){const t=Be(this._tree,e);return t!==void 0&&t.has(z)}keys(){return new Le(this,_t)}set(e,t){if(typeof e!="string")throw new Error("key must be a string");return this._size=void 0,De(this._tree,e).set(z,t),this}get size(){if(this._size)return this._size;this._size=0;const e=this.entries();for(;!e.next().done;)this._size+=1;return this._size}update(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const s=De(this._tree,e);return s.set(z,t(s.get(z))),this}fetch(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const s=De(this._tree,e);let n=s.get(z);return n===void 0&&s.set(z,n=t()),n}values(){return new Le(this,xt)}[Symbol.iterator](){return this.entries()}static from(e){const t=new X;for(const[s,n]of e)t.set(s,n);return t}static fromObject(e){return X.from(Object.entries(e))}}const Oe=(a,e,t=[])=>{if(e.length===0||a==null)return[a,t];for(const s of a.keys())if(s!==z&&e.startsWith(s))return t.push([a,s]),Oe(a.get(s),e.slice(s.length),t);return t.push([a,e]),Oe(void 0,"",t)},Be=(a,e)=>{if(e.length===0||a==null)return a;for(const t of a.keys())if(t!==z&&e.startsWith(t))return Be(a.get(t),e.slice(t.length))},De=(a,e)=>{const t=e.length;e:for(let s=0;a&&s{const[t,s]=Oe(a,e);if(t!==void 0){if(t.delete(z),t.size===0)Et(s);else if(t.size===1){const[n,r]=t.entries().next().value;Tt(s,n,r)}}},Et=a=>{if(a.length===0)return;const[e,t]=Je(a);if(e.delete(t),e.size===0)Et(a.slice(0,-1));else if(e.size===1){const[s,n]=e.entries().next().value;s!==z&&Tt(a.slice(0,-1),s,n)}},Tt=(a,e,t)=>{if(a.length===0)return;const[s,n]=Je(a);s.set(n+e,t),s.delete(n)},Je=a=>a[a.length-1],Ue="or",It="and",zs="and_not";class le{constructor(e){if((e==null?void 0:e.fields)==null)throw new Error('MiniSearch: option "fields" must be provided');const t=e.autoVacuum==null||e.autoVacuum===!0?je:e.autoVacuum;this._options=Object.assign(Object.assign(Object.assign({},Pe),e),{autoVacuum:t,searchOptions:Object.assign(Object.assign({},dt),e.searchOptions||{}),autoSuggestOptions:Object.assign(Object.assign({},Bs),e.autoSuggestOptions||{})}),this._index=new X,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldIds={},this._fieldLength=new Map,this._avgFieldLength=[],this._nextId=0,this._storedFields=new Map,this._dirtCount=0,this._currentVacuum=null,this._enqueuedVacuum=null,this._enqueuedVacuumConditions=Ke,this.addFields(this._options.fields)}add(e){const{extractField:t,tokenize:s,processTerm:n,fields:r,idField:i}=this._options,o=t(e,i);if(o==null)throw new Error(`MiniSearch: document does not have ID field "${i}"`);if(this._idToShortId.has(o))throw new Error(`MiniSearch: duplicate ID ${o}`);const c=this.addDocumentId(o);this.saveStoredFields(c,e);for(const l of r){const h=t(e,l);if(h==null)continue;const f=s(h.toString(),l),v=this._fieldIds[l],b=new Set(f).size;this.addFieldLength(c,v,this._documentCount-1,b);for(const w of f){const _=n(w,l);if(Array.isArray(_))for(const y of _)this.addTerm(v,c,y);else _&&this.addTerm(v,c,_)}}}addAll(e){for(const t of e)this.add(t)}addAllAsync(e,t={}){const{chunkSize:s=10}=t,n={chunk:[],promise:Promise.resolve()},{chunk:r,promise:i}=e.reduce(({chunk:o,promise:c},l,h)=>(o.push(l),(h+1)%s===0?{chunk:[],promise:c.then(()=>new Promise(f=>setTimeout(f,0))).then(()=>this.addAll(o))}:{chunk:o,promise:c}),n);return i.then(()=>this.addAll(r))}remove(e){const{tokenize:t,processTerm:s,extractField:n,fields:r,idField:i}=this._options,o=n(e,i);if(o==null)throw new Error(`MiniSearch: document does not have ID field "${i}"`);const c=this._idToShortId.get(o);if(c==null)throw new Error(`MiniSearch: cannot remove document with ID ${o}: it is not in the index`);for(const l of r){const h=n(e,l);if(h==null)continue;const f=t(h.toString(),l),v=this._fieldIds[l],b=new Set(f).size;this.removeFieldLength(c,v,this._documentCount,b);for(const w of f){const _=s(w,l);if(Array.isArray(_))for(const y of _)this.removeTerm(v,c,y);else _&&this.removeTerm(v,c,_)}}this._storedFields.delete(c),this._documentIds.delete(c),this._idToShortId.delete(o),this._fieldLength.delete(c),this._documentCount-=1}removeAll(e){if(e)for(const t of e)this.remove(t);else{if(arguments.length>0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new X,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}}discard(e){const t=this._idToShortId.get(e);if(t==null)throw new Error(`MiniSearch: cannot discard document with ID ${e}: it is not in the index`);this._idToShortId.delete(e),this._documentIds.delete(t),this._storedFields.delete(t),(this._fieldLength.get(t)||[]).forEach((s,n)=>{this.removeFieldLength(t,n,this._documentCount,s)}),this._fieldLength.delete(t),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()}maybeAutoVacuum(){if(this._options.autoVacuum===!1)return;const{minDirtFactor:e,minDirtCount:t,batchSize:s,batchWait:n}=this._options.autoVacuum;this.conditionalVacuum({batchSize:s,batchWait:n},{minDirtCount:t,minDirtFactor:e})}discardAll(e){const t=this._options.autoVacuum;try{this._options.autoVacuum=!1;for(const s of e)this.discard(s)}finally{this._options.autoVacuum=t}this.maybeAutoVacuum()}replace(e){const{idField:t,extractField:s}=this._options,n=s(e,t);this.discard(n),this.add(e)}vacuum(e={}){return this.conditionalVacuum(e)}conditionalVacuum(e,t){return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(()=>{const s=this._enqueuedVacuumConditions;return this._enqueuedVacuumConditions=Ke,this.performVacuuming(e,s)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)}performVacuuming(e,t){return Te(this,void 0,void 0,function*(){const s=this._dirtCount;if(this.vacuumConditionsMet(t)){const n=e.batchSize||We.batchSize,r=e.batchWait||We.batchWait;let i=1;for(const[o,c]of this._index){for(const[l,h]of c)for(const[f]of h)this._documentIds.has(f)||(h.size<=1?c.delete(l):h.delete(f));this._index.get(o).size===0&&this._index.delete(o),i%n===0&&(yield new Promise(l=>setTimeout(l,r))),i+=1}this._dirtCount-=s}yield null,this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null})}vacuumConditionsMet(e){if(e==null)return!0;let{minDirtCount:t,minDirtFactor:s}=e;return t=t||je.minDirtCount,s=s||je.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=s}get isVacuuming(){return this._currentVacuum!=null}get dirtCount(){return this._dirtCount}get dirtFactor(){return this._dirtCount/(1+this._documentCount+this._dirtCount)}has(e){return this._idToShortId.has(e)}getStoredFields(e){const t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)}search(e,t={}){const s=this.executeQuery(e,t),n=[];for(const[r,{score:i,terms:o,match:c}]of s){const l=o.length||1,h={id:this._documentIds.get(r),score:i*l,terms:Object.keys(c),queryTerms:o,match:c};Object.assign(h,this._storedFields.get(r)),(t.filter==null||t.filter(h))&&n.push(h)}return e===le.wildcard&&t.boostDocument==null&&this._options.searchOptions.boostDocument==null||n.sort(ft),n}autoSuggest(e,t={}){t=Object.assign(Object.assign({},this._options.autoSuggestOptions),t);const s=new Map;for(const{score:r,terms:i}of this.search(e,t)){const o=i.join(" "),c=s.get(o);c!=null?(c.score+=r,c.count+=1):s.set(o,{score:r,terms:i,count:1})}const n=[];for(const[r,{score:i,terms:o,count:c}]of s)n.push({suggestion:r,terms:o,score:i/c});return n.sort(ft),n}get documentCount(){return this._documentCount}get termCount(){return this._index.size}static loadJSON(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(e),t)}static loadJSONAsync(e,t){return Te(this,void 0,void 0,function*(){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJSAsync(JSON.parse(e),t)})}static getDefault(e){if(Pe.hasOwnProperty(e))return ze(Pe,e);throw new Error(`MiniSearch: unknown option "${e}"`)}static loadJS(e,t){const{index:s,documentIds:n,fieldLength:r,storedFields:i,serializationVersion:o}=e,c=this.instantiateMiniSearch(e,t);c._documentIds=Se(n),c._fieldLength=Se(r),c._storedFields=Se(i);for(const[l,h]of c._documentIds)c._idToShortId.set(h,l);for(const[l,h]of s){const f=new Map;for(const v of Object.keys(h)){let b=h[v];o===1&&(b=b.ds),f.set(parseInt(v,10),Se(b))}c._index.set(l,f)}return c}static loadJSAsync(e,t){return Te(this,void 0,void 0,function*(){const{index:s,documentIds:n,fieldLength:r,storedFields:i,serializationVersion:o}=e,c=this.instantiateMiniSearch(e,t);c._documentIds=yield Ee(n),c._fieldLength=yield Ee(r),c._storedFields=yield Ee(i);for(const[h,f]of c._documentIds)c._idToShortId.set(f,h);let l=0;for(const[h,f]of s){const v=new Map;for(const b of Object.keys(f)){let w=f[b];o===1&&(w=w.ds),v.set(parseInt(b,10),yield Ee(w))}++l%1e3===0&&(yield Nt(0)),c._index.set(h,v)}return c})}static instantiateMiniSearch(e,t){const{documentCount:s,nextId:n,fieldIds:r,averageFieldLength:i,dirtCount:o,serializationVersion:c}=e;if(c!==1&&c!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");const l=new le(t);return l._documentCount=s,l._nextId=n,l._idToShortId=new Map,l._fieldIds=r,l._avgFieldLength=i,l._dirtCount=o||0,l._index=new X,l}executeQuery(e,t={}){if(e===le.wildcard)return this.executeWildcardQuery(t);if(typeof e!="string"){const v=Object.assign(Object.assign(Object.assign({},t),e),{queries:void 0}),b=e.queries.map(w=>this.executeQuery(w,v));return this.combineResults(b,v.combineWith)}const{tokenize:s,processTerm:n,searchOptions:r}=this._options,i=Object.assign(Object.assign({tokenize:s,processTerm:n},r),t),{tokenize:o,processTerm:c}=i,f=o(e).flatMap(v=>c(v)).filter(v=>!!v).map($s(i)).map(v=>this.executeQuerySpec(v,i));return this.combineResults(f,i.combineWith)}executeQuerySpec(e,t){const s=Object.assign(Object.assign({},this._options.searchOptions),t),n=(s.fields||this._options.fields).reduce((_,y)=>Object.assign(Object.assign({},_),{[y]:ze(s.boost,y)||1}),{}),{boostDocument:r,weights:i,maxFuzzy:o,bm25:c}=s,{fuzzy:l,prefix:h}=Object.assign(Object.assign({},dt.weights),i),f=this._index.get(e.term),v=this.termResults(e.term,e.term,1,e.termBoost,f,n,r,c);let b,w;if(e.prefix&&(b=this._index.atPrefix(e.term)),e.fuzzy){const _=e.fuzzy===!0?.2:e.fuzzy,y=_<1?Math.min(o,Math.round(e.term.length*_)):_;y&&(w=this._index.fuzzyGet(e.term,y))}if(b)for(const[_,y]of b){const R=_.length-e.term.length;if(!R)continue;w==null||w.delete(_);const C=h*_.length/(_.length+.3*R);this.termResults(e.term,_,C,e.termBoost,y,n,r,c,v)}if(w)for(const _ of w.keys()){const[y,R]=w.get(_);if(!R)continue;const C=l*_.length/(_.length+R);this.termResults(e.term,_,C,e.termBoost,y,n,r,c,v)}return v}executeWildcardQuery(e){const t=new Map,s=Object.assign(Object.assign({},this._options.searchOptions),e);for(const[n,r]of this._documentIds){const i=s.boostDocument?s.boostDocument(r,"",this._storedFields.get(n)):1;t.set(n,{score:i,terms:[],match:{}})}return t}combineResults(e,t=Ue){if(e.length===0)return new Map;const s=t.toLowerCase(),n=Ps[s];if(!n)throw new Error(`Invalid combination operator: ${t}`);return e.reduce(n)||new Map}toJSON(){const e=[];for(const[t,s]of this._index){const n={};for(const[r,i]of s)n[r]=Object.fromEntries(i);e.push([t,n])}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:e,serializationVersion:2}}termResults(e,t,s,n,r,i,o,c,l=new Map){if(r==null)return l;for(const h of Object.keys(i)){const f=i[h],v=this._fieldIds[h],b=r.get(v);if(b==null)continue;let w=b.size;const _=this._avgFieldLength[v];for(const y of b.keys()){if(!this._documentIds.has(y)){this.removeTerm(v,y,t),w-=1;continue}const R=o?o(this._documentIds.get(y),t,this._storedFields.get(y)):1;if(!R)continue;const C=b.get(y),J=this._fieldLength.get(y)[v],H=Vs(C,w,this._documentCount,J,_,c),W=s*n*f*R*H,V=l.get(y);if(V){V.score+=W,Ws(V.terms,e);const $=ze(V.match,t);$?$.push(h):V.match[t]=[h]}else l.set(y,{score:W,terms:[e],match:{[t]:[h]}})}}return l}addTerm(e,t,s){const n=this._index.fetch(s,pt);let r=n.get(e);if(r==null)r=new Map,r.set(t,1),n.set(e,r);else{const i=r.get(t);r.set(t,(i||0)+1)}}removeTerm(e,t,s){if(!this._index.has(s)){this.warnDocumentChanged(t,e,s);return}const n=this._index.fetch(s,pt),r=n.get(e);r==null||r.get(t)==null?this.warnDocumentChanged(t,e,s):r.get(t)<=1?r.size<=1?n.delete(e):r.delete(t):r.set(t,r.get(t)-1),this._index.get(s).size===0&&this._index.delete(s)}warnDocumentChanged(e,t,s){for(const n of Object.keys(this._fieldIds))if(this._fieldIds[n]===t){this._options.logger("warn",`MiniSearch: document with ID ${this._documentIds.get(e)} has changed before removal: term "${s}" was not present in field "${n}". Removing a document after it has changed can corrupt the index!`,"version_conflict");return}}addDocumentId(e){const t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t}addFields(e){for(let t=0;tObject.prototype.hasOwnProperty.call(a,e)?a[e]:void 0,Ps={[Ue]:(a,e)=>{for(const t of e.keys()){const s=a.get(t);if(s==null)a.set(t,e.get(t));else{const{score:n,terms:r,match:i}=e.get(t);s.score=s.score+n,s.match=Object.assign(s.match,i),ht(s.terms,r)}}return a},[It]:(a,e)=>{const t=new Map;for(const s of e.keys()){const n=a.get(s);if(n==null)continue;const{score:r,terms:i,match:o}=e.get(s);ht(n.terms,i),t.set(s,{score:n.score+r,terms:n.terms,match:Object.assign(n.match,o)})}return t},[zs]:(a,e)=>{for(const t of e.keys())a.delete(t);return a}},js={k:1.2,b:.7,d:.5},Vs=(a,e,t,s,n,r)=>{const{k:i,b:o,d:c}=r;return Math.log(1+(t-e+.5)/(e+.5))*(c+a*(i+1)/(a+i*(1-o+o*s/n)))},$s=a=>(e,t,s)=>{const n=typeof a.fuzzy=="function"?a.fuzzy(e,t,s):a.fuzzy||!1,r=typeof a.prefix=="function"?a.prefix(e,t,s):a.prefix===!0,i=typeof a.boostTerm=="function"?a.boostTerm(e,t,s):1;return{term:e,fuzzy:n,prefix:r,termBoost:i}},Pe={idField:"id",extractField:(a,e)=>a[e],tokenize:a=>a.split(Ks),processTerm:a=>a.toLowerCase(),fields:void 0,searchOptions:void 0,storeFields:[],logger:(a,e)=>{typeof(console==null?void 0:console[a])=="function"&&console[a](e)},autoVacuum:!0},dt={combineWith:Ue,prefix:!1,fuzzy:!1,maxFuzzy:6,boost:{},weights:{fuzzy:.45,prefix:.375},bm25:js},Bs={combineWith:It,prefix:(a,e,t)=>e===t.length-1},We={batchSize:1e3,batchWait:10},Ke={minDirtFactor:.1,minDirtCount:20},je=Object.assign(Object.assign({},We),Ke),Ws=(a,e)=>{a.includes(e)||a.push(e)},ht=(a,e)=>{for(const t of e)a.includes(t)||a.push(t)},ft=({score:a},{score:e})=>e-a,pt=()=>new Map,Se=a=>{const e=new Map;for(const t of Object.keys(a))e.set(parseInt(t,10),a[t]);return e},Ee=a=>Te(void 0,void 0,void 0,function*(){const e=new Map;let t=0;for(const s of Object.keys(a))e.set(parseInt(s,10),a[s]),++t%1e3===0&&(yield Nt(0));return e}),Nt=a=>new Promise(e=>setTimeout(e,a)),Ks=/[\n\r\p{Z}\p{P}]+/u;class Js{constructor(e=10){Ce(this,"max");Ce(this,"cache");this.max=e,this.cache=new Map}get(e){let t=this.cache.get(e);return t!==void 0&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size===this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}first(){return this.cache.keys().next().value}clear(){this.cache.clear()}}const K=a=>(Qt("data-v-f4c4f812"),a=a(),Ht(),a),Us=["aria-owns"],qs={class:"shell"},Gs=["title"],Qs=K(()=>x("span",{"aria-hidden":"true",class:"vpi-search search-icon local-search-icon"},null,-1)),Hs=[Qs],Ys={class:"search-actions before"},Zs=["title"],Xs=K(()=>x("span",{class:"vpi-arrow-left local-search-icon"},null,-1)),en=[Xs],tn=["placeholder"],sn={class:"search-actions"},nn=["title"],rn=K(()=>x("span",{class:"vpi-layout-list local-search-icon"},null,-1)),an=[rn],on=["disabled","title"],cn=K(()=>x("span",{class:"vpi-delete local-search-icon"},null,-1)),ln=[cn],un=["id","role","aria-labelledby"],dn=["aria-selected"],hn=["href","aria-label","onMouseenter","onFocusin"],fn={class:"titles"},pn=K(()=>x("span",{class:"title-icon"},"#",-1)),vn=["innerHTML"],mn=K(()=>x("span",{class:"vpi-chevron-right local-search-icon"},null,-1)),gn={class:"title main"},bn=["innerHTML"],yn={key:0,class:"excerpt-wrapper"},wn={key:0,class:"excerpt",inert:""},_n=["innerHTML"],xn=K(()=>x("div",{class:"excerpt-gradient-bottom"},null,-1)),Sn=K(()=>x("div",{class:"excerpt-gradient-top"},null,-1)),En={key:0,class:"no-results"},Tn={class:"search-keyboard-shortcuts"},In=["aria-label"],Nn=K(()=>x("span",{class:"vpi-arrow-up navigate-icon"},null,-1)),kn=[Nn],Fn=["aria-label"],On=K(()=>x("span",{class:"vpi-arrow-down navigate-icon"},null,-1)),Rn=[On],Cn=["aria-label"],Mn=K(()=>x("span",{class:"vpi-corner-down-left navigate-icon"},null,-1)),An=[Mn],Ln=["aria-label"],Dn=Mt({__name:"VPLocalSearchBox",emits:["close"],setup(a,{emit:e}){var F,M;const t=e,s=be(),n=be(),r=be(is),i=ss(),{activate:o}=Rs(s,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:c,theme:l}=i,h=et(async()=>{var p,g,N,O,P,j,I,L,q;return it(le.loadJSON((N=await((g=(p=r.value)[c.value])==null?void 0:g.call(p)))==null?void 0:N.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1},...((O=l.value.search)==null?void 0:O.provider)==="local"&&((j=(P=l.value.search.options)==null?void 0:P.miniSearch)==null?void 0:j.searchOptions)},...((I=l.value.search)==null?void 0:I.provider)==="local"&&((q=(L=l.value.search.options)==null?void 0:L.miniSearch)==null?void 0:q.options)}))}),v=ye(()=>{var p,g;return((p=l.value.search)==null?void 0:p.provider)==="local"&&((g=l.value.search.options)==null?void 0:g.disableQueryPersistence)===!0}).value?ne(""):At("vitepress:local-search-filter",""),b=Lt("vitepress:local-search-detailed-list",((F=l.value.search)==null?void 0:F.provider)==="local"&&((M=l.value.search.options)==null?void 0:M.detailedView)===!0),w=ye(()=>{var p,g,N;return((p=l.value.search)==null?void 0:p.provider)==="local"&&(((g=l.value.search.options)==null?void 0:g.disableDetailedView)===!0||((N=l.value.search.options)==null?void 0:N.detailedView)===!1)}),_=ye(()=>{var g,N,O,P,j,I,L;const p=((g=l.value.search)==null?void 0:g.options)??l.value.algolia;return((j=(P=(O=(N=p==null?void 0:p.locales)==null?void 0:N[c.value])==null?void 0:O.translations)==null?void 0:P.button)==null?void 0:j.buttonText)||((L=(I=p==null?void 0:p.translations)==null?void 0:I.button)==null?void 0:L.buttonText)||"Search"});Dt(()=>{w.value&&(b.value=!1)});const y=be([]),R=ne(!1);Ve(v,()=>{R.value=!1});const C=et(async()=>{if(n.value)return it(new Ms(n.value))},null),J=new Js(16);zt(()=>[h.value,v.value,b.value],async([p,g,N],O,P)=>{var me,qe,Ge,Qe;(O==null?void 0:O[0])!==p&&J.clear();let j=!1;if(P(()=>{j=!0}),!p)return;y.value=p.search(g).slice(0,16),R.value=!0;const I=N?await Promise.all(y.value.map(B=>H(B.id))):[];if(j)return;for(const{id:B,mod:ee}of I){const te=B.slice(0,B.indexOf("#"));let Y=J.get(te);if(Y)continue;Y=new Map,J.set(te,Y);const G=ee.default??ee;if(G!=null&&G.render||G!=null&&G.setup){const se=Yt(G);se.config.warnHandler=()=>{},se.provide(Zt,i),Object.defineProperties(se.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}});const He=document.createElement("div");se.mount(He),He.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(ue=>{var Xe;const ge=(Xe=ue.querySelector("a"))==null?void 0:Xe.getAttribute("href"),Ye=(ge==null?void 0:ge.startsWith("#"))&&ge.slice(1);if(!Ye)return;let Ze="";for(;(ue=ue.nextElementSibling)&&!/^h[1-6]$/i.test(ue.tagName);)Ze+=ue.outerHTML;Y.set(Ye,Ze)}),se.unmount()}if(j)return}const L=new Set;if(y.value=y.value.map(B=>{const[ee,te]=B.id.split("#"),Y=J.get(ee),G=(Y==null?void 0:Y.get(te))??"";for(const se in B.match)L.add(se);return{...B,text:G}}),await de(),j)return;await new Promise(B=>{var ee;(ee=C.value)==null||ee.unmark({done:()=>{var te;(te=C.value)==null||te.markRegExp(k(L),{done:B})}})});const q=((me=s.value)==null?void 0:me.querySelectorAll(".result .excerpt"))??[];for(const B of q)(qe=B.querySelector('mark[data-markjs="true"]'))==null||qe.scrollIntoView({block:"center"});(Qe=(Ge=n.value)==null?void 0:Ge.firstElementChild)==null||Qe.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function H(p){const g=Xt(p.slice(0,p.indexOf("#")));try{if(!g)throw new Error(`Cannot find file for id: ${p}`);return{id:p,mod:await import(g)}}catch(N){return console.error(N),{id:p,mod:{}}}}const W=ne(),V=ye(()=>{var p;return((p=v.value)==null?void 0:p.length)<=0});function $(p=!0){var g,N;(g=W.value)==null||g.focus(),p&&((N=W.value)==null||N.select())}Me(()=>{$()});function Re(p){p.pointerType==="mouse"&&$()}const A=ne(-1),U=ne(!1);Ve(y,p=>{A.value=p.length?0:-1,T()});function T(){de(()=>{const p=document.querySelector(".result.selected");p==null||p.scrollIntoView({block:"nearest"})})}we("ArrowUp",p=>{p.preventDefault(),A.value--,A.value<0&&(A.value=y.value.length-1),U.value=!0,T()}),we("ArrowDown",p=>{p.preventDefault(),A.value++,A.value>=y.value.length&&(A.value=0),U.value=!0,T()});const u=Pt();we("Enter",p=>{if(p.isComposing||p.target instanceof HTMLButtonElement&&p.target.type!=="submit")return;const g=y.value[A.value];if(p.target instanceof HTMLInputElement&&!g){p.preventDefault();return}g&&(u.go(g.id),t("close"))}),we("Escape",()=>{t("close")});const m=ns({modal:{displayDetails:"Display detailed list",resetButtonTitle:"Reset search",backButtonTitle:"Close search",noResultsText:"No results for",footer:{selectText:"to select",selectKeyAriaLabel:"enter",navigateText:"to navigate",navigateUpKeyAriaLabel:"up arrow",navigateDownKeyAriaLabel:"down arrow",closeText:"to close",closeKeyAriaLabel:"escape"}}});Me(()=>{window.history.pushState(null,"",null)}),jt("popstate",p=>{p.preventDefault(),t("close")});const S=Vt($t?document.body:null);Me(()=>{de(()=>{S.value=!0,de().then(()=>o())})}),Bt(()=>{S.value=!1});function E(){v.value="",de().then(()=>$(!1))}function k(p){return new RegExp([...p].sort((g,N)=>N.length-g.length).map(g=>`(${es(g)})`).join("|"),"gi")}return(p,g)=>{var N,O,P,j;return Q(),Wt(Gt,{to:"body"},[x("div",{ref_key:"el",ref:s,role:"button","aria-owns":(N=y.value)!=null&&N.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[x("div",{class:"backdrop",onClick:g[0]||(g[0]=I=>p.$emit("close"))}),x("div",qs,[x("form",{class:"search-bar",onPointerup:g[4]||(g[4]=I=>Re(I)),onSubmit:g[5]||(g[5]=Kt(()=>{},["prevent"]))},[x("label",{title:_.value,id:"localsearch-label",for:"localsearch-input"},Hs,8,Gs),x("div",Ys,[x("button",{class:"back-button",title:D(m)("modal.backButtonTitle"),onClick:g[1]||(g[1]=I=>p.$emit("close"))},en,8,Zs)]),Jt(x("input",{ref_key:"searchInput",ref:W,"onUpdate:modelValue":g[2]||(g[2]=I=>qt(v)?v.value=I:null),placeholder:_.value,id:"localsearch-input","aria-labelledby":"localsearch-label",class:"search-input"},null,8,tn),[[Ut,D(v)]]),x("div",sn,[w.value?_e("",!0):(Q(),Z("button",{key:0,class:tt(["toggle-layout-button",{"detailed-list":D(b)}]),type:"button",title:D(m)("modal.displayDetails"),onClick:g[3]||(g[3]=I=>A.value>-1&&(b.value=!D(b)))},an,10,nn)),x("button",{class:"clear-button",type:"reset",disabled:V.value,title:D(m)("modal.resetButtonTitle"),onClick:E},ln,8,on)])],32),x("ul",{ref_key:"resultsEl",ref:n,id:(O=y.value)!=null&&O.length?"localsearch-list":void 0,role:(P=y.value)!=null&&P.length?"listbox":void 0,"aria-labelledby":(j=y.value)!=null&&j.length?"localsearch-label":void 0,class:"results",onMousemove:g[7]||(g[7]=I=>U.value=!1)},[(Q(!0),Z(nt,null,st(y.value,(I,L)=>(Q(),Z("li",{key:I.id,role:"option","aria-selected":A.value===L?"true":"false"},[x("a",{href:I.id,class:tt(["result",{selected:A.value===L}]),"aria-label":[...I.titles,I.title].join(" > "),onMouseenter:q=>!U.value&&(A.value=L),onFocusin:q=>A.value=L,onClick:g[6]||(g[6]=q=>p.$emit("close"))},[x("div",null,[x("div",fn,[pn,(Q(!0),Z(nt,null,st(I.titles,(q,me)=>(Q(),Z("span",{key:me,class:"title"},[x("span",{class:"text",innerHTML:q},null,8,vn),mn]))),128)),x("span",gn,[x("span",{class:"text",innerHTML:I.title},null,8,bn)])]),D(b)?(Q(),Z("div",yn,[I.text?(Q(),Z("div",wn,[x("div",{class:"vp-doc",innerHTML:I.text},null,8,_n)])):_e("",!0),xn,Sn])):_e("",!0)])],42,hn)],8,dn))),128)),D(v)&&!y.value.length&&R.value?(Q(),Z("li",En,[he(fe(D(m)("modal.noResultsText"))+' "',1),x("strong",null,fe(D(v)),1),he('" ')])):_e("",!0)],40,un),x("div",Tn,[x("span",null,[x("kbd",{"aria-label":D(m)("modal.footer.navigateUpKeyAriaLabel")},kn,8,In),x("kbd",{"aria-label":D(m)("modal.footer.navigateDownKeyAriaLabel")},Rn,8,Fn),he(" "+fe(D(m)("modal.footer.navigateText")),1)]),x("span",null,[x("kbd",{"aria-label":D(m)("modal.footer.selectKeyAriaLabel")},An,8,Cn),he(" "+fe(D(m)("modal.footer.selectText")),1)]),x("span",null,[x("kbd",{"aria-label":D(m)("modal.footer.closeKeyAriaLabel")},"esc",8,Ln),he(" "+fe(D(m)("modal.footer.closeText")),1)])])])],8,Us)])}}}),Bn=ts(Dn,[["__scopeId","data-v-f4c4f812"]]);export{Bn as default}; diff --git a/previews/PR135/assets/chunks/framework.CONf0Rze.js b/previews/PR135/assets/chunks/framework.CONf0Rze.js new file mode 100644 index 000000000..23197ec46 --- /dev/null +++ b/previews/PR135/assets/chunks/framework.CONf0Rze.js @@ -0,0 +1,17 @@ +/** +* @vue/shared v3.4.35 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**//*! #__NO_SIDE_EFFECTS__ */function wr(e,t){const n=new Set(e.split(","));return r=>n.has(r)}const ne={},yt=[],Te=()=>{},Mi=()=>!1,Kt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Er=e=>e.startsWith("onUpdate:"),fe=Object.assign,Cr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ii=Object.prototype.hasOwnProperty,z=(e,t)=>Ii.call(e,t),k=Array.isArray,_t=e=>xn(e)==="[object Map]",Gs=e=>xn(e)==="[object Set]",W=e=>typeof e=="function",ie=e=>typeof e=="string",Qe=e=>typeof e=="symbol",Z=e=>e!==null&&typeof e=="object",Xs=e=>(Z(e)||W(e))&&W(e.then)&&W(e.catch),Ys=Object.prototype.toString,xn=e=>Ys.call(e),Pi=e=>xn(e).slice(8,-1),zs=e=>xn(e)==="[object Object]",Sr=e=>ie(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,bt=wr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Tn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Ni=/-(\w)/g,Oe=Tn(e=>e.replace(Ni,(t,n)=>n?n.toUpperCase():"")),Fi=/\B([A-Z])/g,Ze=Tn(e=>e.replace(Fi,"-$1").toLowerCase()),An=Tn(e=>e.charAt(0).toUpperCase()+e.slice(1)),fn=Tn(e=>e?`on${An(e)}`:""),ze=(e,t)=>!Object.is(e,t),dn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},cr=e=>{const t=parseFloat(e);return isNaN(t)?e:t},$i=e=>{const t=ie(e)?Number(e):NaN;return isNaN(t)?e:t};let Jr;const Qs=()=>Jr||(Jr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function xr(e){if(k(e)){const t={};for(let n=0;n{if(n){const r=n.split(ji);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function Tr(e){let t="";if(ie(e))t=e;else if(k(e))for(let n=0;n!!(e&&e.__v_isRef===!0),ki=e=>ie(e)?e:e==null?"":k(e)||Z(e)&&(e.toString===Ys||!W(e.toString))?eo(e)?ki(e.value):JSON.stringify(e,to,2):String(e),to=(e,t)=>eo(t)?to(e,t.value):_t(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,s],o)=>(n[kn(r,o)+" =>"]=s,n),{})}:Gs(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>kn(n))}:Qe(t)?kn(t):Z(t)&&!k(t)&&!zs(t)?String(t):t,kn=(e,t="")=>{var n;return Qe(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +* @vue/reactivity v3.4.35 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/let we;class Ki{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=we,!t&&we&&(this.index=(we.scopes||(we.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=we;try{return we=this,t()}finally{we=n}}}on(){we=this}off(){we=this.parent}stop(t){if(this._active){let n,r;for(n=0,r=this.effects.length;n=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),tt()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=Xe,n=ct;try{return Xe=!0,ct=this,this._runnings++,Qr(this),this.fn()}finally{Zr(this),this._runnings--,ct=n,Xe=t}}stop(){this.active&&(Qr(this),Zr(this),this.onStop&&this.onStop(),this.active=!1)}}function Gi(e){return e.value}function Qr(e){e._trackId++,e._depsLength=0}function Zr(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},yn=new WeakMap,at=Symbol(""),fr=Symbol("");function be(e,t,n){if(Xe&&ct){let r=yn.get(e);r||yn.set(e,r=new Map);let s=r.get(n);s||r.set(n,s=lo(()=>r.delete(n))),oo(ct,s)}}function Ve(e,t,n,r,s,o){const i=yn.get(e);if(!i)return;let l=[];if(t==="clear")l=[...i.values()];else if(n==="length"&&k(e)){const c=Number(r);i.forEach((u,f)=>{(f==="length"||!Qe(f)&&f>=c)&&l.push(u)})}else switch(n!==void 0&&l.push(i.get(n)),t){case"add":k(e)?Sr(n)&&l.push(i.get("length")):(l.push(i.get(at)),_t(e)&&l.push(i.get(fr)));break;case"delete":k(e)||(l.push(i.get(at)),_t(e)&&l.push(i.get(fr)));break;case"set":_t(e)&&l.push(i.get(at));break}Rr();for(const c of l)c&&io(c,4);Or()}function Xi(e,t){const n=yn.get(e);return n&&n.get(t)}const Yi=wr("__proto__,__v_isRef,__isVue"),co=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Qe)),es=zi();function zi(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=J(this);for(let o=0,i=this.length;o{e[t]=function(...n){et(),Rr();const r=J(this)[t].apply(this,n);return Or(),tt(),r}}),e}function Ji(e){Qe(e)||(e=String(e));const t=J(this);return be(t,"has",e),t.hasOwnProperty(e)}class ao{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){const s=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return o;if(n==="__v_raw")return r===(s?o?ul:po:o?ho:fo).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const i=k(t);if(!s){if(i&&z(es,n))return Reflect.get(es,n,r);if(n==="hasOwnProperty")return Ji}const l=Reflect.get(t,n,r);return(Qe(n)?co.has(n):Yi(n))||(s||be(t,"get",n),o)?l:de(l)?i&&Sr(n)?l:l.value:Z(l)?s?Ln(l):On(l):l}}class uo extends ao{constructor(t=!1){super(!1,t)}set(t,n,r,s){let o=t[n];if(!this._isShallow){const c=dt(o);if(!St(r)&&!dt(r)&&(o=J(o),r=J(r)),!k(t)&&de(o)&&!de(r))return c?!1:(o.value=r,!0)}const i=k(t)&&Sr(n)?Number(n)e,Rn=e=>Reflect.getPrototypeOf(e);function Jt(e,t,n=!1,r=!1){e=e.__v_raw;const s=J(e),o=J(t);n||(ze(t,o)&&be(s,"get",t),be(s,"get",o));const{has:i}=Rn(s),l=r?Lr:n?Pr:jt;if(i.call(s,t))return l(e.get(t));if(i.call(s,o))return l(e.get(o));e!==s&&e.get(t)}function Qt(e,t=!1){const n=this.__v_raw,r=J(n),s=J(e);return t||(ze(e,s)&&be(r,"has",e),be(r,"has",s)),e===s?n.has(e):n.has(e)||n.has(s)}function Zt(e,t=!1){return e=e.__v_raw,!t&&be(J(e),"iterate",at),Reflect.get(e,"size",e)}function ts(e,t=!1){!t&&!St(e)&&!dt(e)&&(e=J(e));const n=J(this);return Rn(n).has.call(n,e)||(n.add(e),Ve(n,"add",e,e)),this}function ns(e,t,n=!1){!n&&!St(t)&&!dt(t)&&(t=J(t));const r=J(this),{has:s,get:o}=Rn(r);let i=s.call(r,e);i||(e=J(e),i=s.call(r,e));const l=o.call(r,e);return r.set(e,t),i?ze(t,l)&&Ve(r,"set",e,t):Ve(r,"add",e,t),this}function rs(e){const t=J(this),{has:n,get:r}=Rn(t);let s=n.call(t,e);s||(e=J(e),s=n.call(t,e)),r&&r.call(t,e);const o=t.delete(e);return s&&Ve(t,"delete",e,void 0),o}function ss(){const e=J(this),t=e.size!==0,n=e.clear();return t&&Ve(e,"clear",void 0,void 0),n}function en(e,t){return function(r,s){const o=this,i=o.__v_raw,l=J(i),c=t?Lr:e?Pr:jt;return!e&&be(l,"iterate",at),i.forEach((u,f)=>r.call(s,c(u),c(f),o))}}function tn(e,t,n){return function(...r){const s=this.__v_raw,o=J(s),i=_t(o),l=e==="entries"||e===Symbol.iterator&&i,c=e==="keys"&&i,u=s[e](...r),f=n?Lr:t?Pr:jt;return!t&&be(o,"iterate",c?fr:at),{next(){const{value:h,done:m}=u.next();return m?{value:h,done:m}:{value:l?[f(h[0]),f(h[1])]:f(h),done:m}},[Symbol.iterator](){return this}}}}function Ue(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function nl(){const e={get(o){return Jt(this,o)},get size(){return Zt(this)},has:Qt,add:ts,set:ns,delete:rs,clear:ss,forEach:en(!1,!1)},t={get(o){return Jt(this,o,!1,!0)},get size(){return Zt(this)},has:Qt,add(o){return ts.call(this,o,!0)},set(o,i){return ns.call(this,o,i,!0)},delete:rs,clear:ss,forEach:en(!1,!0)},n={get(o){return Jt(this,o,!0)},get size(){return Zt(this,!0)},has(o){return Qt.call(this,o,!0)},add:Ue("add"),set:Ue("set"),delete:Ue("delete"),clear:Ue("clear"),forEach:en(!0,!1)},r={get(o){return Jt(this,o,!0,!0)},get size(){return Zt(this,!0)},has(o){return Qt.call(this,o,!0)},add:Ue("add"),set:Ue("set"),delete:Ue("delete"),clear:Ue("clear"),forEach:en(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=tn(o,!1,!1),n[o]=tn(o,!0,!1),t[o]=tn(o,!1,!0),r[o]=tn(o,!0,!0)}),[e,n,t,r]}const[rl,sl,ol,il]=nl();function Mr(e,t){const n=t?e?il:ol:e?sl:rl;return(r,s,o)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?r:Reflect.get(z(n,s)&&s in r?n:r,s,o)}const ll={get:Mr(!1,!1)},cl={get:Mr(!1,!0)},al={get:Mr(!0,!1)};const fo=new WeakMap,ho=new WeakMap,po=new WeakMap,ul=new WeakMap;function fl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function dl(e){return e.__v_skip||!Object.isExtensible(e)?0:fl(Pi(e))}function On(e){return dt(e)?e:Ir(e,!1,Zi,ll,fo)}function hl(e){return Ir(e,!1,tl,cl,ho)}function Ln(e){return Ir(e,!0,el,al,po)}function Ir(e,t,n,r,s){if(!Z(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=s.get(e);if(o)return o;const i=dl(e);if(i===0)return e;const l=new Proxy(e,i===2?r:n);return s.set(e,l),l}function vt(e){return dt(e)?vt(e.__v_raw):!!(e&&e.__v_isReactive)}function dt(e){return!!(e&&e.__v_isReadonly)}function St(e){return!!(e&&e.__v_isShallow)}function go(e){return e?!!e.__v_raw:!1}function J(e){const t=e&&e.__v_raw;return t?J(t):e}function hn(e){return Object.isExtensible(e)&&Js(e,"__v_skip",!0),e}const jt=e=>Z(e)?On(e):e,Pr=e=>Z(e)?Ln(e):e;class mo{constructor(t,n,r,s){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new Ar(()=>t(this._value),()=>Mt(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!s,this.__v_isReadonly=r}get value(){const t=J(this);return(!t._cacheable||t.effect.dirty)&&ze(t._value,t._value=t.effect.run())&&Mt(t,4),Nr(t),t.effect._dirtyLevel>=2&&Mt(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function pl(e,t,n=!1){let r,s;const o=W(e);return o?(r=e,s=Te):(r=e.get,s=e.set),new mo(r,s,o||!s,n)}function Nr(e){var t;Xe&&ct&&(e=J(e),oo(ct,(t=e.dep)!=null?t:e.dep=lo(()=>e.dep=void 0,e instanceof mo?e:void 0)))}function Mt(e,t=4,n,r){e=J(e);const s=e.dep;s&&io(s,t)}function de(e){return!!(e&&e.__v_isRef===!0)}function oe(e){return yo(e,!1)}function Fr(e){return yo(e,!0)}function yo(e,t){return de(e)?e:new gl(e,t)}class gl{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:J(t),this._value=n?t:jt(t)}get value(){return Nr(this),this._value}set value(t){const n=this.__v_isShallow||St(t)||dt(t);t=n?t:J(t),ze(t,this._rawValue)&&(this._rawValue,this._rawValue=t,this._value=n?t:jt(t),Mt(this,4))}}function _o(e){return de(e)?e.value:e}const ml={get:(e,t,n)=>_o(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const s=e[t];return de(s)&&!de(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function bo(e){return vt(e)?e:new Proxy(e,ml)}class yl{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>Nr(this),()=>Mt(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function _l(e){return new yl(e)}class bl{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Xi(J(this._object),this._key)}}class vl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function wl(e,t,n){return de(e)?e:W(e)?new vl(e):Z(e)&&arguments.length>1?El(e,t,n):oe(e)}function El(e,t,n){const r=e[t];return de(r)?r:new bl(e,t,n)}/** +* @vue/runtime-core v3.4.35 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/function Ye(e,t,n,r){try{return r?e(...r):e()}catch(s){Wt(s,t,n)}}function Ae(e,t,n,r){if(W(e)){const s=Ye(e,t,n,r);return s&&Xs(s)&&s.catch(o=>{Wt(o,t,n)}),s}if(k(e)){const s=[];for(let o=0;o>>1,s=pe[r],o=Dt(s);oNe&&pe.splice(t,1)}function Tl(e){k(e)?wt.push(...e):(!Ke||!Ke.includes(e,e.allowRecurse?it+1:it))&&wt.push(e),wo()}function os(e,t,n=Vt?Ne+1:0){for(;nDt(n)-Dt(r));if(wt.length=0,Ke){Ke.push(...t);return}for(Ke=t,it=0;ite.id==null?1/0:e.id,Al=(e,t)=>{const n=Dt(e)-Dt(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function Eo(e){dr=!1,Vt=!0,pe.sort(Al);try{for(Ne=0;Ne{r._d&&_s(-1);const o=bn(t);let i;try{i=e(...s)}finally{bn(o),r._d&&_s(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function cu(e,t){if(ue===null)return e;const n=Vn(ue),r=e.dirs||(e.dirs=[]);for(let s=0;s{e.isMounted=!0}),Ro(()=>{e.isUnmounting=!0}),e}const Ce=[Function,Array],Co={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ce,onEnter:Ce,onAfterEnter:Ce,onEnterCancelled:Ce,onBeforeLeave:Ce,onLeave:Ce,onAfterLeave:Ce,onLeaveCancelled:Ce,onBeforeAppear:Ce,onAppear:Ce,onAfterAppear:Ce,onAppearCancelled:Ce},So=e=>{const t=e.subTree;return t.component?So(t.component):t},Ll={name:"BaseTransition",props:Co,setup(e,{slots:t}){const n=jn(),r=Ol();return()=>{const s=t.default&&To(t.default(),!0);if(!s||!s.length)return;let o=s[0];if(s.length>1){for(const m of s)if(m.type!==me){o=m;break}}const i=J(e),{mode:l}=i;if(r.isLeaving)return Kn(o);const c=is(o);if(!c)return Kn(o);let u=hr(c,i,r,n,m=>u=m);vn(c,u);const f=n.subTree,h=f&&is(f);if(h&&h.type!==me&&!lt(c,h)&&So(n).type!==me){const m=hr(h,i,r,n);if(vn(h,m),l==="out-in"&&c.type!==me)return r.isLeaving=!0,m.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},Kn(o);l==="in-out"&&c.type!==me&&(m.delayLeave=(_,w,O)=>{const B=xo(r,h);B[String(h.key)]=h,_[We]=()=>{w(),_[We]=void 0,delete u.delayedLeave},u.delayedLeave=O})}return o}}},Ml=Ll;function xo(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function hr(e,t,n,r,s){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:c,onEnter:u,onAfterEnter:f,onEnterCancelled:h,onBeforeLeave:m,onLeave:_,onAfterLeave:w,onLeaveCancelled:O,onBeforeAppear:B,onAppear:K,onAfterAppear:H,onAppearCancelled:p}=t,y=String(e.key),I=xo(n,e),T=(M,b)=>{M&&Ae(M,r,9,b)},F=(M,b)=>{const N=b[1];T(M,b),k(M)?M.every(x=>x.length<=1)&&N():M.length<=1&&N()},j={mode:i,persisted:l,beforeEnter(M){let b=c;if(!n.isMounted)if(o)b=B||c;else return;M[We]&&M[We](!0);const N=I[y];N&<(e,N)&&N.el[We]&&N.el[We](),T(b,[M])},enter(M){let b=u,N=f,x=h;if(!n.isMounted)if(o)b=K||u,N=H||f,x=p||h;else return;let G=!1;const ee=M[nn]=re=>{G||(G=!0,re?T(x,[M]):T(N,[M]),j.delayedLeave&&j.delayedLeave(),M[nn]=void 0)};b?F(b,[M,ee]):ee()},leave(M,b){const N=String(e.key);if(M[nn]&&M[nn](!0),n.isUnmounting)return b();T(m,[M]);let x=!1;const G=M[We]=ee=>{x||(x=!0,b(),ee?T(O,[M]):T(w,[M]),M[We]=void 0,I[N]===e&&delete I[N])};I[N]=e,_?F(_,[M,G]):G()},clone(M){const b=hr(M,t,n,r,s);return s&&s(b),b}};return j}function Kn(e){if(qt(e))return e=Je(e),e.children=null,e}function is(e){if(!qt(e))return e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&W(n.default))return n.default()}}function vn(e,t){e.shapeFlag&6&&e.component?vn(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function To(e,t=!1,n){let r=[],s=0;for(let o=0;o1)for(let o=0;o!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function au(e){W(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:s=200,timeout:o,suspensible:i=!0,onError:l}=e;let c=null,u,f=0;const h=()=>(f++,c=null,m()),m=()=>{let _;return c||(_=c=t().catch(w=>{if(w=w instanceof Error?w:new Error(String(w)),l)return new Promise((O,B)=>{l(w,()=>O(h()),()=>B(w),f+1)});throw w}).then(w=>_!==c&&c?c:(w&&(w.__esModule||w[Symbol.toStringTag]==="Module")&&(w=w.default),u=w,w)))};return Hr({name:"AsyncComponentWrapper",__asyncLoader:m,get __asyncResolved(){return u},setup(){const _=ae;if(u)return()=>Wn(u,_);const w=H=>{c=null,Wt(H,_,13,!r)};if(i&&_.suspense||Xt)return m().then(H=>()=>Wn(H,_)).catch(H=>(w(H),()=>r?le(r,{error:H}):null));const O=oe(!1),B=oe(),K=oe(!!s);return s&&setTimeout(()=>{K.value=!1},s),o!=null&&setTimeout(()=>{if(!O.value&&!B.value){const H=new Error(`Async component timed out after ${o}ms.`);w(H),B.value=H}},o),m().then(()=>{O.value=!0,_.parent&&qt(_.parent.vnode)&&(_.parent.effect.dirty=!0,In(_.parent.update))}).catch(H=>{w(H),B.value=H}),()=>{if(O.value&&u)return Wn(u,_);if(B.value&&r)return le(r,{error:B.value});if(n&&!K.value)return le(n)}}})}function Wn(e,t){const{ref:n,props:r,children:s,ce:o}=t.vnode,i=le(e,r,s);return i.ref=n,i.ce=o,delete t.vnode.ce,i}const qt=e=>e.type.__isKeepAlive;function Il(e,t){Ao(e,"a",t)}function Pl(e,t){Ao(e,"da",t)}function Ao(e,t,n=ae){const r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(Nn(t,r,n),n){let s=n.parent;for(;s&&s.parent;)qt(s.parent.vnode)&&Nl(r,t,n,s),s=s.parent}}function Nl(e,t,n,r){const s=Nn(t,e,r,!0);Fn(()=>{Cr(r[t],s)},n)}function Nn(e,t,n=ae,r=!1){if(n){const s=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{et();const l=Gt(n),c=Ae(t,n,e,i);return l(),tt(),c});return r?s.unshift(o):s.push(o),o}}const De=e=>(t,n=ae)=>{(!Xt||e==="sp")&&Nn(e,(...r)=>t(...r),n)},Fl=De("bm"),Tt=De("m"),$l=De("bu"),Hl=De("u"),Ro=De("bum"),Fn=De("um"),jl=De("sp"),Vl=De("rtg"),Dl=De("rtc");function Ul(e,t=ae){Nn("ec",e,t)}const Oo="components";function uu(e,t){return Mo(Oo,e,!0,t)||e}const Lo=Symbol.for("v-ndc");function fu(e){return ie(e)?Mo(Oo,e,!1)||e:e||Lo}function Mo(e,t,n=!0,r=!1){const s=ue||ae;if(s){const o=s.type;{const l=Pc(o,!1);if(l&&(l===t||l===Oe(t)||l===An(Oe(t))))return o}const i=ls(s[e]||o[e],t)||ls(s.appContext[e],t);return!i&&r?o:i}}function ls(e,t){return e&&(e[t]||e[Oe(t)]||e[An(Oe(t))])}function du(e,t,n,r){let s;const o=n;if(k(e)||ie(e)){s=new Array(e.length);for(let i=0,l=e.length;it(i,l,void 0,o));else{const i=Object.keys(e);s=new Array(i.length);for(let l=0,c=i.length;lCn(t)?!(t.type===me||t.type===_e&&!Io(t.children)):!0)?e:null}function pu(e,t){const n={};for(const r in e)n[/[A-Z]/.test(r)?`on:${r}`:fn(r)]=e[r];return n}const pr=e=>e?oi(e)?Vn(e):pr(e.parent):null,It=fe(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>pr(e.parent),$root:e=>pr(e.root),$emit:e=>e.emit,$options:e=>jr(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,In(e.update)}),$nextTick:e=>e.n||(e.n=Mn.bind(e.proxy)),$watch:e=>gc.bind(e)}),qn=(e,t)=>e!==ne&&!e.__isScriptSetup&&z(e,t),Bl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:s,props:o,accessCache:i,type:l,appContext:c}=e;let u;if(t[0]!=="$"){const _=i[t];if(_!==void 0)switch(_){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return o[t]}else{if(qn(r,t))return i[t]=1,r[t];if(s!==ne&&z(s,t))return i[t]=2,s[t];if((u=e.propsOptions[0])&&z(u,t))return i[t]=3,o[t];if(n!==ne&&z(n,t))return i[t]=4,n[t];gr&&(i[t]=0)}}const f=It[t];let h,m;if(f)return t==="$attrs"&&be(e.attrs,"get",""),f(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==ne&&z(n,t))return i[t]=4,n[t];if(m=c.config.globalProperties,z(m,t))return m[t]},set({_:e},t,n){const{data:r,setupState:s,ctx:o}=e;return qn(s,t)?(s[t]=n,!0):r!==ne&&z(r,t)?(r[t]=n,!0):z(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:s,propsOptions:o}},i){let l;return!!n[i]||e!==ne&&z(e,i)||qn(t,i)||(l=o[0])&&z(l,i)||z(r,i)||z(It,i)||z(s.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:z(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function gu(){return kl().slots}function kl(){const e=jn();return e.setupContext||(e.setupContext=li(e))}function cs(e){return k(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let gr=!0;function Kl(e){const t=jr(e),n=e.proxy,r=e.ctx;gr=!1,t.beforeCreate&&as(t.beforeCreate,e,"bc");const{data:s,computed:o,methods:i,watch:l,provide:c,inject:u,created:f,beforeMount:h,mounted:m,beforeUpdate:_,updated:w,activated:O,deactivated:B,beforeDestroy:K,beforeUnmount:H,destroyed:p,unmounted:y,render:I,renderTracked:T,renderTriggered:F,errorCaptured:j,serverPrefetch:M,expose:b,inheritAttrs:N,components:x,directives:G,filters:ee}=t;if(u&&Wl(u,r,null),i)for(const Y in i){const V=i[Y];W(V)&&(r[Y]=V.bind(n))}if(s){const Y=s.call(n,n);Z(Y)&&(e.data=On(Y))}if(gr=!0,o)for(const Y in o){const V=o[Y],He=W(V)?V.bind(n,n):W(V.get)?V.get.bind(n,n):Te,Yt=!W(V)&&W(V.set)?V.set.bind(n):Te,nt=se({get:He,set:Yt});Object.defineProperty(r,Y,{enumerable:!0,configurable:!0,get:()=>nt.value,set:Me=>nt.value=Me})}if(l)for(const Y in l)Po(l[Y],r,n,Y);if(c){const Y=W(c)?c.call(n):c;Reflect.ownKeys(Y).forEach(V=>{Jl(V,Y[V])})}f&&as(f,e,"c");function U(Y,V){k(V)?V.forEach(He=>Y(He.bind(n))):V&&Y(V.bind(n))}if(U(Fl,h),U(Tt,m),U($l,_),U(Hl,w),U(Il,O),U(Pl,B),U(Ul,j),U(Dl,T),U(Vl,F),U(Ro,H),U(Fn,y),U(jl,M),k(b))if(b.length){const Y=e.exposed||(e.exposed={});b.forEach(V=>{Object.defineProperty(Y,V,{get:()=>n[V],set:He=>n[V]=He})})}else e.exposed||(e.exposed={});I&&e.render===Te&&(e.render=I),N!=null&&(e.inheritAttrs=N),x&&(e.components=x),G&&(e.directives=G)}function Wl(e,t,n=Te){k(e)&&(e=mr(e));for(const r in e){const s=e[r];let o;Z(s)?"default"in s?o=Ct(s.from||r,s.default,!0):o=Ct(s.from||r):o=Ct(s),de(o)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[r]=o}}function as(e,t,n){Ae(k(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Po(e,t,n,r){const s=r.includes(".")?zo(n,r):()=>n[r];if(ie(e)){const o=t[e];W(o)&&Fe(s,o)}else if(W(e))Fe(s,e.bind(n));else if(Z(e))if(k(e))e.forEach(o=>Po(o,t,n,r));else{const o=W(e.handler)?e.handler.bind(n):t[e.handler];W(o)&&Fe(s,o,e)}}function jr(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:s,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let c;return l?c=l:!s.length&&!n&&!r?c=t:(c={},s.length&&s.forEach(u=>wn(c,u,i,!0)),wn(c,t,i)),Z(t)&&o.set(t,c),c}function wn(e,t,n,r=!1){const{mixins:s,extends:o}=t;o&&wn(e,o,n,!0),s&&s.forEach(i=>wn(e,i,n,!0));for(const i in t)if(!(r&&i==="expose")){const l=ql[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const ql={data:us,props:fs,emits:fs,methods:Lt,computed:Lt,beforeCreate:ge,created:ge,beforeMount:ge,mounted:ge,beforeUpdate:ge,updated:ge,beforeDestroy:ge,beforeUnmount:ge,destroyed:ge,unmounted:ge,activated:ge,deactivated:ge,errorCaptured:ge,serverPrefetch:ge,components:Lt,directives:Lt,watch:Xl,provide:us,inject:Gl};function us(e,t){return t?e?function(){return fe(W(e)?e.call(this,this):e,W(t)?t.call(this,this):t)}:t:e}function Gl(e,t){return Lt(mr(e),mr(t))}function mr(e){if(k(e)){const t={};for(let n=0;n1)return n&&W(t)?t.call(r&&r.proxy):t}}const Fo={},$o=()=>Object.create(Fo),Ho=e=>Object.getPrototypeOf(e)===Fo;function Ql(e,t,n,r=!1){const s={},o=$o();e.propsDefaults=Object.create(null),jo(e,t,s,o);for(const i in e.propsOptions[0])i in s||(s[i]=void 0);n?e.props=r?s:hl(s):e.type.props?e.props=s:e.props=o,e.attrs=o}function Zl(e,t,n,r){const{props:s,attrs:o,vnode:{patchFlag:i}}=e,l=J(s),[c]=e.propsOptions;let u=!1;if((r||i>0)&&!(i&16)){if(i&8){const f=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[m,_]=Vo(h,t,!0);fe(i,m),_&&l.push(..._)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!o&&!c)return Z(e)&&r.set(e,yt),yt;if(k(o))for(let f=0;fe[0]==="_"||e==="$stable",Vr=e=>k(e)?e.map(xe):[xe(e)],tc=(e,t,n)=>{if(t._n)return t;const r=Rl((...s)=>Vr(t(...s)),n);return r._c=!1,r},Uo=(e,t,n)=>{const r=e._ctx;for(const s in e){if(Do(s))continue;const o=e[s];if(W(o))t[s]=tc(s,o,r);else if(o!=null){const i=Vr(o);t[s]=()=>i}}},Bo=(e,t)=>{const n=Vr(t);e.slots.default=()=>n},ko=(e,t,n)=>{for(const r in t)(n||r!=="_")&&(e[r]=t[r])},nc=(e,t,n)=>{const r=e.slots=$o();if(e.vnode.shapeFlag&32){const s=t._;s?(ko(r,t,n),n&&Js(r,"_",s,!0)):Uo(t,r)}else t&&Bo(e,t)},rc=(e,t,n)=>{const{vnode:r,slots:s}=e;let o=!0,i=ne;if(r.shapeFlag&32){const l=t._;l?n&&l===1?o=!1:ko(s,t,n):(o=!t.$stable,Uo(t,s)),i=t}else t&&(Bo(e,t),i={default:1});if(o)for(const l in s)!Do(l)&&i[l]==null&&delete s[l]};function En(e,t,n,r,s=!1){if(k(e)){e.forEach((m,_)=>En(m,t&&(k(t)?t[_]:t),n,r,s));return}if(Et(r)&&!s)return;const o=r.shapeFlag&4?Vn(r.component):r.el,i=s?null:o,{i:l,r:c}=e,u=t&&t.r,f=l.refs===ne?l.refs={}:l.refs,h=l.setupState;if(u!=null&&u!==c&&(ie(u)?(f[u]=null,z(h,u)&&(h[u]=null)):de(u)&&(u.value=null)),W(c))Ye(c,l,12,[i,f]);else{const m=ie(c),_=de(c);if(m||_){const w=()=>{if(e.f){const O=m?z(h,c)?h[c]:f[c]:c.value;s?k(O)&&Cr(O,o):k(O)?O.includes(o)||O.push(o):m?(f[c]=[o],z(h,c)&&(h[c]=f[c])):(c.value=[o],e.k&&(f[e.k]=c.value))}else m?(f[c]=i,z(h,c)&&(h[c]=i)):_&&(c.value=i,e.k&&(f[e.k]=i))};i?(w.id=-1,ye(w,n)):w()}}}const Ko=Symbol("_vte"),sc=e=>e.__isTeleport,Nt=e=>e&&(e.disabled||e.disabled===""),hs=e=>typeof SVGElement<"u"&&e instanceof SVGElement,ps=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,_r=(e,t)=>{const n=e&&e.to;return ie(n)?t?t(n):null:n},oc={name:"Teleport",__isTeleport:!0,process(e,t,n,r,s,o,i,l,c,u){const{mc:f,pc:h,pbc:m,o:{insert:_,querySelector:w,createText:O,createComment:B}}=u,K=Nt(t.props);let{shapeFlag:H,children:p,dynamicChildren:y}=t;if(e==null){const I=t.el=O(""),T=t.anchor=O("");_(I,n,r),_(T,n,r);const F=t.target=_r(t.props,w),j=qo(F,t,O,_);F&&(i==="svg"||hs(F)?i="svg":(i==="mathml"||ps(F))&&(i="mathml"));const M=(b,N)=>{H&16&&f(p,b,N,s,o,i,l,c)};K?M(n,T):F&&M(F,j)}else{t.el=e.el,t.targetStart=e.targetStart;const I=t.anchor=e.anchor,T=t.target=e.target,F=t.targetAnchor=e.targetAnchor,j=Nt(e.props),M=j?n:T,b=j?I:F;if(i==="svg"||hs(T)?i="svg":(i==="mathml"||ps(T))&&(i="mathml"),y?(m(e.dynamicChildren,y,M,s,o,i,l),Dr(e,t,!0)):c||h(e,t,M,b,s,o,i,l,!1),K)j?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):rn(t,n,I,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const N=t.target=_r(t.props,w);N&&rn(t,N,null,u,0)}else j&&rn(t,T,F,u,1)}Wo(t)},remove(e,t,n,{um:r,o:{remove:s}},o){const{shapeFlag:i,children:l,anchor:c,targetStart:u,targetAnchor:f,target:h,props:m}=e;if(h&&(s(u),s(f)),o&&s(c),i&16){const _=o||!Nt(m);for(let w=0;w{gs||(console.error("Hydration completed but contains mismatches."),gs=!0)},lc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",cc=e=>e.namespaceURI.includes("MathML"),sn=e=>{if(lc(e))return"svg";if(cc(e))return"mathml"},on=e=>e.nodeType===8;function ac(e){const{mt:t,p:n,o:{patchProp:r,createText:s,nextSibling:o,parentNode:i,remove:l,insert:c,createComment:u}}=e,f=(p,y)=>{if(!y.hasChildNodes()){n(null,p,y),_n(),y._vnode=p;return}h(y.firstChild,p,null,null,null),_n(),y._vnode=p},h=(p,y,I,T,F,j=!1)=>{j=j||!!y.dynamicChildren;const M=on(p)&&p.data==="[",b=()=>O(p,y,I,T,F,M),{type:N,ref:x,shapeFlag:G,patchFlag:ee}=y;let re=p.nodeType;y.el=p,ee===-2&&(j=!1,y.dynamicChildren=null);let U=null;switch(N){case ut:re!==3?y.children===""?(c(y.el=s(""),i(p),p),U=p):U=b():(p.data!==y.children&&(gt(),p.data=y.children),U=o(p));break;case me:H(p)?(U=o(p),K(y.el=p.content.firstChild,p,I)):re!==8||M?U=b():U=o(p);break;case Ft:if(M&&(p=o(p),re=p.nodeType),re===1||re===3){U=p;const Y=!y.children.length;for(let V=0;V{j=j||!!y.dynamicChildren;const{type:M,props:b,patchFlag:N,shapeFlag:x,dirs:G,transition:ee}=y,re=M==="input"||M==="option";if(re||N!==-1){G&&Pe(y,null,I,"created");let U=!1;if(H(p)){U=Xo(T,ee)&&I&&I.vnode.props&&I.vnode.props.appear;const V=p.content.firstChild;U&&ee.beforeEnter(V),K(V,p,I),y.el=p=V}if(x&16&&!(b&&(b.innerHTML||b.textContent))){let V=_(p.firstChild,y,p,I,T,F,j);for(;V;){gt();const He=V;V=V.nextSibling,l(He)}}else x&8&&p.textContent!==y.children&&(gt(),p.textContent=y.children);if(b){if(re||!j||N&48)for(const V in b)(re&&(V.endsWith("value")||V==="indeterminate")||Kt(V)&&!bt(V)||V[0]===".")&&r(p,V,null,b[V],void 0,I);else if(b.onClick)r(p,"onClick",null,b.onClick,void 0,I);else if(N&4&&vt(b.style))for(const V in b.style)b.style[V]}let Y;(Y=b&&b.onVnodeBeforeMount)&&Se(Y,I,y),G&&Pe(y,null,I,"beforeMount"),((Y=b&&b.onVnodeMounted)||G||U)&&Qo(()=>{Y&&Se(Y,I,y),U&&ee.enter(p),G&&Pe(y,null,I,"mounted")},T)}return p.nextSibling},_=(p,y,I,T,F,j,M)=>{M=M||!!y.dynamicChildren;const b=y.children,N=b.length;for(let x=0;x{const{slotScopeIds:M}=y;M&&(F=F?F.concat(M):M);const b=i(p),N=_(o(p),y,b,I,T,F,j);return N&&on(N)&&N.data==="]"?o(y.anchor=N):(gt(),c(y.anchor=u("]"),b,N),N)},O=(p,y,I,T,F,j)=>{if(gt(),y.el=null,j){const N=B(p);for(;;){const x=o(p);if(x&&x!==N)l(x);else break}}const M=o(p),b=i(p);return l(p),n(null,y,b,M,I,T,sn(b),F),M},B=(p,y="[",I="]")=>{let T=0;for(;p;)if(p=o(p),p&&on(p)&&(p.data===y&&T++,p.data===I)){if(T===0)return o(p);T--}return p},K=(p,y,I)=>{const T=y.parentNode;T&&T.replaceChild(p,y);let F=I;for(;F;)F.vnode.el===y&&(F.vnode.el=F.subTree.el=p),F=F.parent},H=p=>p.nodeType===1&&p.tagName.toLowerCase()==="template";return[f,h]}const ye=Qo;function uc(e){return Go(e)}function fc(e){return Go(e,ac)}function Go(e,t){const n=Qs();n.__VUE__=!0;const{insert:r,remove:s,patchProp:o,createElement:i,createText:l,createComment:c,setText:u,setElementText:f,parentNode:h,nextSibling:m,setScopeId:_=Te,insertStaticContent:w}=e,O=(a,d,g,C=null,v=null,S=null,L=void 0,A=null,R=!!d.dynamicChildren)=>{if(a===d)return;a&&!lt(a,d)&&(C=zt(a),Me(a,v,S,!0),a=null),d.patchFlag===-2&&(R=!1,d.dynamicChildren=null);const{type:E,ref:P,shapeFlag:D}=d;switch(E){case ut:B(a,d,g,C);break;case me:K(a,d,g,C);break;case Ft:a==null&&H(d,g,C,L);break;case _e:x(a,d,g,C,v,S,L,A,R);break;default:D&1?I(a,d,g,C,v,S,L,A,R):D&6?G(a,d,g,C,v,S,L,A,R):(D&64||D&128)&&E.process(a,d,g,C,v,S,L,A,R,ht)}P!=null&&v&&En(P,a&&a.ref,S,d||a,!d)},B=(a,d,g,C)=>{if(a==null)r(d.el=l(d.children),g,C);else{const v=d.el=a.el;d.children!==a.children&&u(v,d.children)}},K=(a,d,g,C)=>{a==null?r(d.el=c(d.children||""),g,C):d.el=a.el},H=(a,d,g,C)=>{[a.el,a.anchor]=w(a.children,d,g,C,a.el,a.anchor)},p=({el:a,anchor:d},g,C)=>{let v;for(;a&&a!==d;)v=m(a),r(a,g,C),a=v;r(d,g,C)},y=({el:a,anchor:d})=>{let g;for(;a&&a!==d;)g=m(a),s(a),a=g;s(d)},I=(a,d,g,C,v,S,L,A,R)=>{d.type==="svg"?L="svg":d.type==="math"&&(L="mathml"),a==null?T(d,g,C,v,S,L,A,R):M(a,d,v,S,L,A,R)},T=(a,d,g,C,v,S,L,A)=>{let R,E;const{props:P,shapeFlag:D,transition:$,dirs:q}=a;if(R=a.el=i(a.type,S,P&&P.is,P),D&8?f(R,a.children):D&16&&j(a.children,R,null,C,v,Gn(a,S),L,A),q&&Pe(a,null,C,"created"),F(R,a,a.scopeId,L,C),P){for(const te in P)te!=="value"&&!bt(te)&&o(R,te,null,P[te],S,C);"value"in P&&o(R,"value",null,P.value,S),(E=P.onVnodeBeforeMount)&&Se(E,C,a)}q&&Pe(a,null,C,"beforeMount");const X=Xo(v,$);X&&$.beforeEnter(R),r(R,d,g),((E=P&&P.onVnodeMounted)||X||q)&&ye(()=>{E&&Se(E,C,a),X&&$.enter(R),q&&Pe(a,null,C,"mounted")},v)},F=(a,d,g,C,v)=>{if(g&&_(a,g),C)for(let S=0;S{for(let E=R;E{const A=d.el=a.el;let{patchFlag:R,dynamicChildren:E,dirs:P}=d;R|=a.patchFlag&16;const D=a.props||ne,$=d.props||ne;let q;if(g&&rt(g,!1),(q=$.onVnodeBeforeUpdate)&&Se(q,g,d,a),P&&Pe(d,a,g,"beforeUpdate"),g&&rt(g,!0),(D.innerHTML&&$.innerHTML==null||D.textContent&&$.textContent==null)&&f(A,""),E?b(a.dynamicChildren,E,A,g,C,Gn(d,v),S):L||V(a,d,A,null,g,C,Gn(d,v),S,!1),R>0){if(R&16)N(A,D,$,g,v);else if(R&2&&D.class!==$.class&&o(A,"class",null,$.class,v),R&4&&o(A,"style",D.style,$.style,v),R&8){const X=d.dynamicProps;for(let te=0;te{q&&Se(q,g,d,a),P&&Pe(d,a,g,"updated")},C)},b=(a,d,g,C,v,S,L)=>{for(let A=0;A{if(d!==g){if(d!==ne)for(const S in d)!bt(S)&&!(S in g)&&o(a,S,d[S],null,v,C);for(const S in g){if(bt(S))continue;const L=g[S],A=d[S];L!==A&&S!=="value"&&o(a,S,A,L,v,C)}"value"in g&&o(a,"value",d.value,g.value,v)}},x=(a,d,g,C,v,S,L,A,R)=>{const E=d.el=a?a.el:l(""),P=d.anchor=a?a.anchor:l("");let{patchFlag:D,dynamicChildren:$,slotScopeIds:q}=d;q&&(A=A?A.concat(q):q),a==null?(r(E,g,C),r(P,g,C),j(d.children||[],g,P,v,S,L,A,R)):D>0&&D&64&&$&&a.dynamicChildren?(b(a.dynamicChildren,$,g,v,S,L,A),(d.key!=null||v&&d===v.subTree)&&Dr(a,d,!0)):V(a,d,g,P,v,S,L,A,R)},G=(a,d,g,C,v,S,L,A,R)=>{d.slotScopeIds=A,a==null?d.shapeFlag&512?v.ctx.activate(d,g,C,L,R):ee(d,g,C,v,S,L,R):re(a,d,R)},ee=(a,d,g,C,v,S,L)=>{const A=a.component=Oc(a,C,v);if(qt(a)&&(A.ctx.renderer=ht),Lc(A,!1,L),A.asyncDep){if(v&&v.registerDep(A,U,L),!a.el){const R=A.subTree=le(me);K(null,R,d,g)}}else U(A,a,d,g,v,S,L)},re=(a,d,g)=>{const C=d.component=a.component;if(vc(a,d,g))if(C.asyncDep&&!C.asyncResolved){Y(C,d,g);return}else C.next=d,xl(C.update),C.effect.dirty=!0,C.update();else d.el=a.el,C.vnode=d},U=(a,d,g,C,v,S,L)=>{const A=()=>{if(a.isMounted){let{next:P,bu:D,u:$,parent:q,vnode:X}=a;{const pt=Yo(a);if(pt){P&&(P.el=X.el,Y(a,P,L)),pt.asyncDep.then(()=>{a.isUnmounted||A()});return}}let te=P,Q;rt(a,!1),P?(P.el=X.el,Y(a,P,L)):P=X,D&&dn(D),(Q=P.props&&P.props.onVnodeBeforeUpdate)&&Se(Q,q,P,X),rt(a,!0);const ce=Xn(a),Re=a.subTree;a.subTree=ce,O(Re,ce,h(Re.el),zt(Re),a,v,S),P.el=ce.el,te===null&&wc(a,ce.el),$&&ye($,v),(Q=P.props&&P.props.onVnodeUpdated)&&ye(()=>Se(Q,q,P,X),v)}else{let P;const{el:D,props:$}=d,{bm:q,m:X,parent:te}=a,Q=Et(d);if(rt(a,!1),q&&dn(q),!Q&&(P=$&&$.onVnodeBeforeMount)&&Se(P,te,d),rt(a,!0),D&&Bn){const ce=()=>{a.subTree=Xn(a),Bn(D,a.subTree,a,v,null)};Q?d.type.__asyncLoader().then(()=>!a.isUnmounted&&ce()):ce()}else{const ce=a.subTree=Xn(a);O(null,ce,g,C,a,v,S),d.el=ce.el}if(X&&ye(X,v),!Q&&(P=$&&$.onVnodeMounted)){const ce=d;ye(()=>Se(P,te,ce),v)}(d.shapeFlag&256||te&&Et(te.vnode)&&te.vnode.shapeFlag&256)&&a.a&&ye(a.a,v),a.isMounted=!0,d=g=C=null}},R=a.effect=new Ar(A,Te,()=>In(E),a.scope),E=a.update=()=>{R.dirty&&R.run()};E.i=a,E.id=a.uid,rt(a,!0),E()},Y=(a,d,g)=>{d.component=a;const C=a.vnode.props;a.vnode=d,a.next=null,Zl(a,d.props,C,g),rc(a,d.children,g),et(),os(a),tt()},V=(a,d,g,C,v,S,L,A,R=!1)=>{const E=a&&a.children,P=a?a.shapeFlag:0,D=d.children,{patchFlag:$,shapeFlag:q}=d;if($>0){if($&128){Yt(E,D,g,C,v,S,L,A,R);return}else if($&256){He(E,D,g,C,v,S,L,A,R);return}}q&8?(P&16&&At(E,v,S),D!==E&&f(g,D)):P&16?q&16?Yt(E,D,g,C,v,S,L,A,R):At(E,v,S,!0):(P&8&&f(g,""),q&16&&j(D,g,C,v,S,L,A,R))},He=(a,d,g,C,v,S,L,A,R)=>{a=a||yt,d=d||yt;const E=a.length,P=d.length,D=Math.min(E,P);let $;for($=0;$P?At(a,v,S,!0,!1,D):j(d,g,C,v,S,L,A,R,D)},Yt=(a,d,g,C,v,S,L,A,R)=>{let E=0;const P=d.length;let D=a.length-1,$=P-1;for(;E<=D&&E<=$;){const q=a[E],X=d[E]=R?qe(d[E]):xe(d[E]);if(lt(q,X))O(q,X,g,null,v,S,L,A,R);else break;E++}for(;E<=D&&E<=$;){const q=a[D],X=d[$]=R?qe(d[$]):xe(d[$]);if(lt(q,X))O(q,X,g,null,v,S,L,A,R);else break;D--,$--}if(E>D){if(E<=$){const q=$+1,X=q$)for(;E<=D;)Me(a[E],v,S,!0),E++;else{const q=E,X=E,te=new Map;for(E=X;E<=$;E++){const ve=d[E]=R?qe(d[E]):xe(d[E]);ve.key!=null&&te.set(ve.key,E)}let Q,ce=0;const Re=$-X+1;let pt=!1,Xr=0;const Rt=new Array(Re);for(E=0;E=Re){Me(ve,v,S,!0);continue}let Ie;if(ve.key!=null)Ie=te.get(ve.key);else for(Q=X;Q<=$;Q++)if(Rt[Q-X]===0&<(ve,d[Q])){Ie=Q;break}Ie===void 0?Me(ve,v,S,!0):(Rt[Ie-X]=E+1,Ie>=Xr?Xr=Ie:pt=!0,O(ve,d[Ie],g,null,v,S,L,A,R),ce++)}const Yr=pt?dc(Rt):yt;for(Q=Yr.length-1,E=Re-1;E>=0;E--){const ve=X+E,Ie=d[ve],zr=ve+1{const{el:S,type:L,transition:A,children:R,shapeFlag:E}=a;if(E&6){nt(a.component.subTree,d,g,C);return}if(E&128){a.suspense.move(d,g,C);return}if(E&64){L.move(a,d,g,ht);return}if(L===_e){r(S,d,g);for(let D=0;DA.enter(S),v);else{const{leave:D,delayLeave:$,afterLeave:q}=A,X=()=>r(S,d,g),te=()=>{D(S,()=>{X(),q&&q()})};$?$(S,X,te):te()}else r(S,d,g)},Me=(a,d,g,C=!1,v=!1)=>{const{type:S,props:L,ref:A,children:R,dynamicChildren:E,shapeFlag:P,patchFlag:D,dirs:$,cacheIndex:q}=a;if(D===-2&&(v=!1),A!=null&&En(A,null,g,a,!0),q!=null&&(d.renderCache[q]=void 0),P&256){d.ctx.deactivate(a);return}const X=P&1&&$,te=!Et(a);let Q;if(te&&(Q=L&&L.onVnodeBeforeUnmount)&&Se(Q,d,a),P&6)Li(a.component,g,C);else{if(P&128){a.suspense.unmount(g,C);return}X&&Pe(a,null,d,"beforeUnmount"),P&64?a.type.remove(a,d,g,ht,C):E&&!E.hasOnce&&(S!==_e||D>0&&D&64)?At(E,d,g,!1,!0):(S===_e&&D&384||!v&&P&16)&&At(R,d,g),C&&qr(a)}(te&&(Q=L&&L.onVnodeUnmounted)||X)&&ye(()=>{Q&&Se(Q,d,a),X&&Pe(a,null,d,"unmounted")},g)},qr=a=>{const{type:d,el:g,anchor:C,transition:v}=a;if(d===_e){Oi(g,C);return}if(d===Ft){y(a);return}const S=()=>{s(g),v&&!v.persisted&&v.afterLeave&&v.afterLeave()};if(a.shapeFlag&1&&v&&!v.persisted){const{leave:L,delayLeave:A}=v,R=()=>L(g,S);A?A(a.el,S,R):R()}else S()},Oi=(a,d)=>{let g;for(;a!==d;)g=m(a),s(a),a=g;s(d)},Li=(a,d,g)=>{const{bum:C,scope:v,update:S,subTree:L,um:A,m:R,a:E}=a;ms(R),ms(E),C&&dn(C),v.stop(),S&&(S.active=!1,Me(L,a,d,g)),A&&ye(A,d),ye(()=>{a.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&a.asyncDep&&!a.asyncResolved&&a.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},At=(a,d,g,C=!1,v=!1,S=0)=>{for(let L=S;L{if(a.shapeFlag&6)return zt(a.component.subTree);if(a.shapeFlag&128)return a.suspense.next();const d=m(a.anchor||a.el),g=d&&d[Ko];return g?m(g):d};let Dn=!1;const Gr=(a,d,g)=>{a==null?d._vnode&&Me(d._vnode,null,null,!0):O(d._vnode||null,a,d,null,null,null,g),Dn||(Dn=!0,os(),_n(),Dn=!1),d._vnode=a},ht={p:O,um:Me,m:nt,r:qr,mt:ee,mc:j,pc:V,pbc:b,n:zt,o:e};let Un,Bn;return t&&([Un,Bn]=t(ht)),{render:Gr,hydrate:Un,createApp:zl(Gr,Un)}}function Gn({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function rt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Xo(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Dr(e,t,n=!1){const r=e.children,s=t.children;if(k(r)&&k(s))for(let o=0;o>1,e[n[l]]0&&(t[r]=n[o-1]),n[o]=r)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}function Yo(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Yo(t)}function ms(e){if(e)for(let t=0;tCt(hc);function Ur(e,t){return $n(e,null,t)}function yu(e,t){return $n(e,null,{flush:"post"})}const ln={};function Fe(e,t,n){return $n(e,t,n)}function $n(e,t,{immediate:n,deep:r,flush:s,once:o,onTrack:i,onTrigger:l}=ne){if(t&&o){const T=t;t=(...F)=>{T(...F),I()}}const c=ae,u=T=>r===!0?T:Ge(T,r===!1?1:void 0);let f,h=!1,m=!1;if(de(e)?(f=()=>e.value,h=St(e)):vt(e)?(f=()=>u(e),h=!0):k(e)?(m=!0,h=e.some(T=>vt(T)||St(T)),f=()=>e.map(T=>{if(de(T))return T.value;if(vt(T))return u(T);if(W(T))return Ye(T,c,2)})):W(e)?t?f=()=>Ye(e,c,2):f=()=>(_&&_(),Ae(e,c,3,[w])):f=Te,t&&r){const T=f;f=()=>Ge(T())}let _,w=T=>{_=p.onStop=()=>{Ye(T,c,4),_=p.onStop=void 0}},O;if(Xt)if(w=Te,t?n&&Ae(t,c,3,[f(),m?[]:void 0,w]):f(),s==="sync"){const T=pc();O=T.__watcherHandles||(T.__watcherHandles=[])}else return Te;let B=m?new Array(e.length).fill(ln):ln;const K=()=>{if(!(!p.active||!p.dirty))if(t){const T=p.run();(r||h||(m?T.some((F,j)=>ze(F,B[j])):ze(T,B)))&&(_&&_(),Ae(t,c,3,[T,B===ln?void 0:m&&B[0]===ln?[]:B,w]),B=T)}else p.run()};K.allowRecurse=!!t;let H;s==="sync"?H=K:s==="post"?H=()=>ye(K,c&&c.suspense):(K.pre=!0,c&&(K.id=c.uid),H=()=>In(K));const p=new Ar(f,Te,H),y=no(),I=()=>{p.stop(),y&&Cr(y.effects,p)};return t?n?K():B=p.run():s==="post"?ye(p.run.bind(p),c&&c.suspense):p.run(),O&&O.push(I),I}function gc(e,t,n){const r=this.proxy,s=ie(e)?e.includes(".")?zo(r,e):()=>r[e]:e.bind(r,r);let o;W(t)?o=t:(o=t.handler,n=t);const i=Gt(this),l=$n(s,o.bind(r),n);return i(),l}function zo(e,t){const n=t.split(".");return()=>{let r=e;for(let s=0;s{Ge(r,t,n)});else if(zs(e)){for(const r in e)Ge(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&Ge(e[r],t,n)}return e}const mc=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Oe(t)}Modifiers`]||e[`${Ze(t)}Modifiers`];function yc(e,t,...n){if(e.isUnmounted)return;const r=e.vnode.props||ne;let s=n;const o=t.startsWith("update:"),i=o&&mc(r,t.slice(7));i&&(i.trim&&(s=n.map(f=>ie(f)?f.trim():f)),i.number&&(s=n.map(cr)));let l,c=r[l=fn(t)]||r[l=fn(Oe(t))];!c&&o&&(c=r[l=fn(Ze(t))]),c&&Ae(c,e,6,s);const u=r[l+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Ae(u,e,6,s)}}function Jo(e,t,n=!1){const r=t.emitsCache,s=r.get(e);if(s!==void 0)return s;const o=e.emits;let i={},l=!1;if(!W(e)){const c=u=>{const f=Jo(u,t,!0);f&&(l=!0,fe(i,f))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!o&&!l?(Z(e)&&r.set(e,null),null):(k(o)?o.forEach(c=>i[c]=null):fe(i,o),Z(e)&&r.set(e,i),i)}function Hn(e,t){return!e||!Kt(t)?!1:(t=t.slice(2).replace(/Once$/,""),z(e,t[0].toLowerCase()+t.slice(1))||z(e,Ze(t))||z(e,t))}function Xn(e){const{type:t,vnode:n,proxy:r,withProxy:s,propsOptions:[o],slots:i,attrs:l,emit:c,render:u,renderCache:f,props:h,data:m,setupState:_,ctx:w,inheritAttrs:O}=e,B=bn(e);let K,H;try{if(n.shapeFlag&4){const y=s||r,I=y;K=xe(u.call(I,y,f,h,_,m,w)),H=l}else{const y=t;K=xe(y.length>1?y(h,{attrs:l,slots:i,emit:c}):y(h,null)),H=t.props?l:_c(l)}}catch(y){$t.length=0,Wt(y,e,1),K=le(me)}let p=K;if(H&&O!==!1){const y=Object.keys(H),{shapeFlag:I}=p;y.length&&I&7&&(o&&y.some(Er)&&(H=bc(H,o)),p=Je(p,H,!1,!0))}return n.dirs&&(p=Je(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&(p.transition=n.transition),K=p,bn(B),K}const _c=e=>{let t;for(const n in e)(n==="class"||n==="style"||Kt(n))&&((t||(t={}))[n]=e[n]);return t},bc=(e,t)=>{const n={};for(const r in e)(!Er(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function vc(e,t,n){const{props:r,children:s,component:o}=e,{props:i,children:l,patchFlag:c}=t,u=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?ys(r,i,u):!!i;if(c&8){const f=t.dynamicProps;for(let h=0;he.__isSuspense;function Qo(e,t){t&&t.pendingBranch?k(e)?t.effects.push(...e):t.effects.push(e):Tl(e)}const _e=Symbol.for("v-fgt"),ut=Symbol.for("v-txt"),me=Symbol.for("v-cmt"),Ft=Symbol.for("v-stc"),$t=[];let Ee=null;function Zo(e=!1){$t.push(Ee=e?null:[])}function Cc(){$t.pop(),Ee=$t[$t.length-1]||null}let Ut=1;function _s(e){Ut+=e,e<0&&Ee&&(Ee.hasOnce=!0)}function ei(e){return e.dynamicChildren=Ut>0?Ee||yt:null,Cc(),Ut>0&&Ee&&Ee.push(e),e}function _u(e,t,n,r,s,o){return ei(ri(e,t,n,r,s,o,!0))}function ti(e,t,n,r,s){return ei(le(e,t,n,r,s,!0))}function Cn(e){return e?e.__v_isVNode===!0:!1}function lt(e,t){return e.type===t.type&&e.key===t.key}const ni=({key:e})=>e??null,pn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?ie(e)||de(e)||W(e)?{i:ue,r:e,k:t,f:!!n}:e:null);function ri(e,t=null,n=null,r=0,s=null,o=e===_e?0:1,i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ni(t),ref:t&&pn(t),scopeId:Pn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:ue};return l?(Br(c,n),o&128&&e.normalize(c)):n&&(c.shapeFlag|=ie(n)?8:16),Ut>0&&!i&&Ee&&(c.patchFlag>0||o&6)&&c.patchFlag!==32&&Ee.push(c),c}const le=Sc;function Sc(e,t=null,n=null,r=0,s=null,o=!1){if((!e||e===Lo)&&(e=me),Cn(e)){const l=Je(e,t,!0);return n&&Br(l,n),Ut>0&&!o&&Ee&&(l.shapeFlag&6?Ee[Ee.indexOf(e)]=l:Ee.push(l)),l.patchFlag=-2,l}if(Nc(e)&&(e=e.__vccOpts),t){t=xc(t);let{class:l,style:c}=t;l&&!ie(l)&&(t.class=Tr(l)),Z(c)&&(go(c)&&!k(c)&&(c=fe({},c)),t.style=xr(c))}const i=ie(e)?1:Ec(e)?128:sc(e)?64:Z(e)?4:W(e)?2:0;return ri(e,t,n,r,s,i,o,!0)}function xc(e){return e?go(e)||Ho(e)?fe({},e):e:null}function Je(e,t,n=!1,r=!1){const{props:s,ref:o,patchFlag:i,children:l,transition:c}=e,u=t?Tc(s||{},t):s,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&ni(u),ref:t&&t.ref?n&&o?k(o)?o.concat(pn(t)):[o,pn(t)]:pn(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==_e?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Je(e.ssContent),ssFallback:e.ssFallback&&Je(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&r&&vn(f,c.clone(f)),f}function si(e=" ",t=0){return le(ut,null,e,t)}function bu(e,t){const n=le(Ft,null,e);return n.staticCount=t,n}function vu(e="",t=!1){return t?(Zo(),ti(me,null,e)):le(me,null,e)}function xe(e){return e==null||typeof e=="boolean"?le(me):k(e)?le(_e,null,e.slice()):typeof e=="object"?qe(e):le(ut,null,String(e))}function qe(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Je(e)}function Br(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(k(t))n=16;else if(typeof t=="object")if(r&65){const s=t.default;s&&(s._c&&(s._d=!1),Br(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!Ho(t)?t._ctx=ue:s===3&&ue&&(ue.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else W(t)?(t={default:t,_ctx:ue},n=32):(t=String(t),r&64?(n=16,t=[si(t)]):n=8);e.children=t,e.shapeFlag|=n}function Tc(...e){const t={};for(let n=0;nae||ue;let Sn,br;{const e=Qs(),t=(n,r)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(r),o=>{s.length>1?s.forEach(i=>i(o)):s[0](o)}};Sn=t("__VUE_INSTANCE_SETTERS__",n=>ae=n),br=t("__VUE_SSR_SETTERS__",n=>Xt=n)}const Gt=e=>{const t=ae;return Sn(e),e.scope.on(),()=>{e.scope.off(),Sn(t)}},bs=()=>{ae&&ae.scope.off(),Sn(null)};function oi(e){return e.vnode.shapeFlag&4}let Xt=!1;function Lc(e,t=!1,n=!1){t&&br(t);const{props:r,children:s}=e.vnode,o=oi(e);Ql(e,r,o,t),nc(e,s,n);const i=o?Mc(e,t):void 0;return t&&br(!1),i}function Mc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Bl);const{setup:r}=n;if(r){const s=e.setupContext=r.length>1?li(e):null,o=Gt(e);et();const i=Ye(r,e,0,[e.props,s]);if(tt(),o(),Xs(i)){if(i.then(bs,bs),t)return i.then(l=>{vs(e,l,t)}).catch(l=>{Wt(l,e,0)});e.asyncDep=i}else vs(e,i,t)}else ii(e,t)}function vs(e,t,n){W(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Z(t)&&(e.setupState=bo(t)),ii(e,n)}let ws;function ii(e,t,n){const r=e.type;if(!e.render){if(!t&&ws&&!r.render){const s=r.template||jr(e).template;if(s){const{isCustomElement:o,compilerOptions:i}=e.appContext.config,{delimiters:l,compilerOptions:c}=r,u=fe(fe({isCustomElement:o,delimiters:l},i),c);r.render=ws(s,u)}}e.render=r.render||Te}{const s=Gt(e);et();try{Kl(e)}finally{tt(),s()}}}const Ic={get(e,t){return be(e,"get",""),e[t]}};function li(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Ic),slots:e.slots,emit:e.emit,expose:t}}function Vn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(bo(hn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in It)return It[n](e)},has(t,n){return n in t||n in It}})):e.proxy}function Pc(e,t=!0){return W(e)?e.displayName||e.name:e.name||t&&e.__name}function Nc(e){return W(e)&&"__vccOpts"in e}const se=(e,t)=>pl(e,t,Xt);function vr(e,t,n){const r=arguments.length;return r===2?Z(t)&&!k(t)?Cn(t)?le(e,null,[t]):le(e,t):le(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Cn(n)&&(n=[n]),le(e,t,n))}const Fc="3.4.35";/** +* @vue/runtime-dom v3.4.35 +* (c) 2018-present Yuxi (Evan) You and Vue contributors +* @license MIT +**/const $c="http://www.w3.org/2000/svg",Hc="http://www.w3.org/1998/Math/MathML",je=typeof document<"u"?document:null,Es=je&&je.createElement("template"),jc={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const s=t==="svg"?je.createElementNS($c,e):t==="mathml"?je.createElementNS(Hc,e):n?je.createElement(e,{is:n}):je.createElement(e);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>je.createTextNode(e),createComment:e=>je.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>je.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,s,o){const i=n?n.previousSibling:t.lastChild;if(s&&(s===o||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===o||!(s=s.nextSibling)););else{Es.innerHTML=r==="svg"?`${e}`:r==="mathml"?`${e}`:e;const l=Es.content;if(r==="svg"||r==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Be="transition",Ot="animation",Bt=Symbol("_vtc"),ci=(e,{slots:t})=>vr(Ml,Vc(e),t);ci.displayName="Transition";const ai={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};ci.props=fe({},Co,ai);const st=(e,t=[])=>{k(e)?e.forEach(n=>n(...t)):e&&e(...t)},Cs=e=>e?k(e)?e.some(t=>t.length>1):e.length>1:!1;function Vc(e){const t={};for(const x in e)x in ai||(t[x]=e[x]);if(e.css===!1)return t;const{name:n="v",type:r,duration:s,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=o,appearActiveClass:u=i,appearToClass:f=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:m=`${n}-leave-active`,leaveToClass:_=`${n}-leave-to`}=e,w=Dc(s),O=w&&w[0],B=w&&w[1],{onBeforeEnter:K,onEnter:H,onEnterCancelled:p,onLeave:y,onLeaveCancelled:I,onBeforeAppear:T=K,onAppear:F=H,onAppearCancelled:j=p}=t,M=(x,G,ee)=>{ot(x,G?f:l),ot(x,G?u:i),ee&&ee()},b=(x,G)=>{x._isLeaving=!1,ot(x,h),ot(x,_),ot(x,m),G&&G()},N=x=>(G,ee)=>{const re=x?F:H,U=()=>M(G,x,ee);st(re,[G,U]),Ss(()=>{ot(G,x?c:o),ke(G,x?f:l),Cs(re)||xs(G,r,O,U)})};return fe(t,{onBeforeEnter(x){st(K,[x]),ke(x,o),ke(x,i)},onBeforeAppear(x){st(T,[x]),ke(x,c),ke(x,u)},onEnter:N(!1),onAppear:N(!0),onLeave(x,G){x._isLeaving=!0;const ee=()=>b(x,G);ke(x,h),ke(x,m),kc(),Ss(()=>{x._isLeaving&&(ot(x,h),ke(x,_),Cs(y)||xs(x,r,B,ee))}),st(y,[x,ee])},onEnterCancelled(x){M(x,!1),st(p,[x])},onAppearCancelled(x){M(x,!0),st(j,[x])},onLeaveCancelled(x){b(x),st(I,[x])}})}function Dc(e){if(e==null)return null;if(Z(e))return[Yn(e.enter),Yn(e.leave)];{const t=Yn(e);return[t,t]}}function Yn(e){return $i(e)}function ke(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Bt]||(e[Bt]=new Set)).add(t)}function ot(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Bt];n&&(n.delete(t),n.size||(e[Bt]=void 0))}function Ss(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Uc=0;function xs(e,t,n,r){const s=e._endId=++Uc,o=()=>{s===e._endId&&r()};if(n)return setTimeout(o,n);const{type:i,timeout:l,propCount:c}=Bc(e,t);if(!i)return r();const u=i+"end";let f=0;const h=()=>{e.removeEventListener(u,m),o()},m=_=>{_.target===e&&++f>=c&&h()};setTimeout(()=>{f(n[w]||"").split(", "),s=r(`${Be}Delay`),o=r(`${Be}Duration`),i=Ts(s,o),l=r(`${Ot}Delay`),c=r(`${Ot}Duration`),u=Ts(l,c);let f=null,h=0,m=0;t===Be?i>0&&(f=Be,h=i,m=o.length):t===Ot?u>0&&(f=Ot,h=u,m=c.length):(h=Math.max(i,u),f=h>0?i>u?Be:Ot:null,m=f?f===Be?o.length:c.length:0);const _=f===Be&&/\b(transform|all)(,|$)/.test(r(`${Be}Property`).toString());return{type:f,timeout:h,propCount:m,hasTransform:_}}function Ts(e,t){for(;e.lengthAs(n)+As(e[r])))}function As(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function kc(){return document.body.offsetHeight}function Kc(e,t,n){const r=e[Bt];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Rs=Symbol("_vod"),Wc=Symbol("_vsh"),qc=Symbol(""),Gc=/(^|;)\s*display\s*:/;function Xc(e,t,n){const r=e.style,s=ie(n);let o=!1;if(n&&!s){if(t)if(ie(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&gn(r,l,"")}else for(const i in t)n[i]==null&&gn(r,i,"");for(const i in n)i==="display"&&(o=!0),gn(r,i,n[i])}else if(s){if(t!==n){const i=r[qc];i&&(n+=";"+i),r.cssText=n,o=Gc.test(n)}}else t&&e.removeAttribute("style");Rs in e&&(e[Rs]=o?r.display:"",e[Wc]&&(r.display="none"))}const Os=/\s*!important$/;function gn(e,t,n){if(k(n))n.forEach(r=>gn(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Yc(e,t);Os.test(n)?e.setProperty(Ze(r),n.replace(Os,""),"important"):e[r]=n}}const Ls=["Webkit","Moz","ms"],zn={};function Yc(e,t){const n=zn[t];if(n)return n;let r=Oe(t);if(r!=="filter"&&r in e)return zn[t]=r;r=An(r);for(let s=0;sJn||(ea.then(()=>Jn=0),Jn=Date.now());function na(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Ae(ra(r,n.value),t,5,[r])};return n.value=e,n.attached=ta(),n}function ra(e,t){if(k(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>s=>!s._stopped&&r&&r(s))}else return t}const Fs=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,sa=(e,t,n,r,s,o)=>{const i=s==="svg";t==="class"?Kc(e,r,i):t==="style"?Xc(e,n,r):Kt(t)?Er(t)||Qc(e,t,n,r,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):oa(e,t,r,i))?(zc(e,t,r),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Is(e,t,r,i,o,t!=="value")):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Is(e,t,r,i))};function oa(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&Fs(t)&&W(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const s=e.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return Fs(t)&&ie(n)?!1:t in e}const $s=e=>{const t=e.props["onUpdate:modelValue"]||!1;return k(t)?n=>dn(t,n):t};function ia(e){e.target.composing=!0}function Hs(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Qn=Symbol("_assign"),wu={created(e,{modifiers:{lazy:t,trim:n,number:r}},s){e[Qn]=$s(s);const o=r||s.props&&s.props.type==="number";mt(e,t?"change":"input",i=>{if(i.target.composing)return;let l=e.value;n&&(l=l.trim()),o&&(l=cr(l)),e[Qn](l)}),n&&mt(e,"change",()=>{e.value=e.value.trim()}),t||(mt(e,"compositionstart",ia),mt(e,"compositionend",Hs),mt(e,"change",Hs))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:s,number:o}},i){if(e[Qn]=$s(i),e.composing)return;const l=(o||e.type==="number")&&!/^0\d/.test(e.value)?cr(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(r&&t===n||s&&e.value.trim()===c)||(e.value=c))}},la=["ctrl","shift","alt","meta"],ca={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>la.some(n=>e[`${n}Key`]&&!t.includes(n))},Eu=(e,t)=>{const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=(s,...o)=>{for(let i=0;i{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=s=>{if(!("key"in s))return;const o=Ze(s.key);if(t.some(i=>i===o||aa[i]===o))return e(s)})},ui=fe({patchProp:sa},jc);let Ht,js=!1;function ua(){return Ht||(Ht=uc(ui))}function fa(){return Ht=js?Ht:fc(ui),js=!0,Ht}const Su=(...e)=>{const t=ua().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=di(r);if(!s)return;const o=t._component;!W(o)&&!o.render&&!o.template&&(o.template=s.innerHTML),s.innerHTML="";const i=n(s,!1,fi(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),i},t},xu=(...e)=>{const t=fa().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=di(r);if(s)return n(s,!0,fi(s))},t};function fi(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function di(e){return ie(e)?document.querySelector(e):e}const Tu=(e,t)=>{const n=e.__vccOpts||e;for(const[r,s]of t)n[r]=s;return n},da="modulepreload",ha=function(e){return"/GeometryOps.jl/previews/PR135/"+e},Vs={},Au=function(t,n,r){let s=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),i=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));s=Promise.all(n.map(l=>{if(l=ha(l),l in Vs)return;Vs[l]=!0;const c=l.endsWith(".css"),u=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${u}`))return;const f=document.createElement("link");if(f.rel=c?"stylesheet":da,c||(f.as="script",f.crossOrigin=""),f.href=l,i&&f.setAttribute("nonce",i),document.head.appendChild(f),c)return new Promise((h,m)=>{f.addEventListener("load",h),f.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${l}`)))})}))}return s.then(()=>t()).catch(o=>{const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=o,window.dispatchEvent(i),!i.defaultPrevented)throw o})},pa=window.__VP_SITE_DATA__;function kr(e){return no()?(qi(e),!0):!1}function $e(e){return typeof e=="function"?e():_o(e)}const hi=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const ga=Object.prototype.toString,ma=e=>ga.call(e)==="[object Object]",kt=()=>{},Ds=ya();function ya(){var e,t;return hi&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function _a(e,t){function n(...r){return new Promise((s,o)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(s).catch(o)})}return n}const pi=e=>e();function ba(e,t={}){let n,r,s=kt;const o=l=>{clearTimeout(l),s(),s=kt};return l=>{const c=$e(e),u=$e(t.maxWait);return n&&o(n),c<=0||u!==void 0&&u<=0?(r&&(o(r),r=null),Promise.resolve(l())):new Promise((f,h)=>{s=t.rejectOnCancel?h:f,u&&!r&&(r=setTimeout(()=>{n&&o(n),r=null,f(l())},u)),n=setTimeout(()=>{r&&o(r),r=null,f(l())},c)})}}function va(e=pi){const t=oe(!0);function n(){t.value=!1}function r(){t.value=!0}const s=(...o)=>{t.value&&e(...o)};return{isActive:Ln(t),pause:n,resume:r,eventFilter:s}}function wa(e){return jn()}function gi(...e){if(e.length!==1)return wl(...e);const t=e[0];return typeof t=="function"?Ln(_l(()=>({get:t,set:kt}))):oe(t)}function mi(e,t,n={}){const{eventFilter:r=pi,...s}=n;return Fe(e,_a(r,t),s)}function Ea(e,t,n={}){const{eventFilter:r,...s}=n,{eventFilter:o,pause:i,resume:l,isActive:c}=va(r);return{stop:mi(e,t,{...s,eventFilter:o}),pause:i,resume:l,isActive:c}}function Kr(e,t=!0,n){wa()?Tt(e,n):t?e():Mn(e)}function Ru(e,t,n={}){const{debounce:r=0,maxWait:s=void 0,...o}=n;return mi(e,t,{...o,eventFilter:ba(r,{maxWait:s})})}function Ou(e,t,n){let r;de(n)?r={evaluating:n}:r={};const{lazy:s=!1,evaluating:o=void 0,shallow:i=!0,onError:l=kt}=r,c=oe(!s),u=i?Fr(t):oe(t);let f=0;return Ur(async h=>{if(!c.value)return;f++;const m=f;let _=!1;o&&Promise.resolve().then(()=>{o.value=!0});try{const w=await e(O=>{h(()=>{o&&(o.value=!1),_||O()})});m===f&&(u.value=w)}catch(w){l(w)}finally{o&&m===f&&(o.value=!1),_=!0}}),s?se(()=>(c.value=!0,u.value)):u}function yi(e){var t;const n=$e(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Le=hi?window:void 0;function xt(...e){let t,n,r,s;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,s]=e,t=Le):[t,n,r,s]=e,!t)return kt;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const o=[],i=()=>{o.forEach(f=>f()),o.length=0},l=(f,h,m,_)=>(f.addEventListener(h,m,_),()=>f.removeEventListener(h,m,_)),c=Fe(()=>[yi(t),$e(s)],([f,h])=>{if(i(),!f)return;const m=ma(h)?{...h}:h;o.push(...n.flatMap(_=>r.map(w=>l(f,_,w,m))))},{immediate:!0,flush:"post"}),u=()=>{c(),i()};return kr(u),u}function Ca(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Lu(...e){let t,n,r={};e.length===3?(t=e[0],n=e[1],r=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],r=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:s=Le,eventName:o="keydown",passive:i=!1,dedupe:l=!1}=r,c=Ca(t);return xt(s,o,f=>{f.repeat&&$e(l)||c(f)&&n(f)},i)}function Sa(){const e=oe(!1),t=jn();return t&&Tt(()=>{e.value=!0},t),e}function xa(e){const t=Sa();return se(()=>(t.value,!!e()))}function _i(e,t={}){const{window:n=Le}=t,r=xa(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let s;const o=oe(!1),i=u=>{o.value=u.matches},l=()=>{s&&("removeEventListener"in s?s.removeEventListener("change",i):s.removeListener(i))},c=Ur(()=>{r.value&&(l(),s=n.matchMedia($e(e)),"addEventListener"in s?s.addEventListener("change",i):s.addListener(i),o.value=s.matches)});return kr(()=>{c(),l(),s=void 0}),o}const cn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},an="__vueuse_ssr_handlers__",Ta=Aa();function Aa(){return an in cn||(cn[an]=cn[an]||{}),cn[an]}function bi(e,t){return Ta[e]||t}function Ra(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Oa={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Us="vueuse-storage";function Wr(e,t,n,r={}){var s;const{flush:o="pre",deep:i=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:u=!1,shallow:f,window:h=Le,eventFilter:m,onError:_=b=>{console.error(b)},initOnMounted:w}=r,O=(f?Fr:oe)(typeof t=="function"?t():t);if(!n)try{n=bi("getDefaultStorage",()=>{var b;return(b=Le)==null?void 0:b.localStorage})()}catch(b){_(b)}if(!n)return O;const B=$e(t),K=Ra(B),H=(s=r.serializer)!=null?s:Oa[K],{pause:p,resume:y}=Ea(O,()=>T(O.value),{flush:o,deep:i,eventFilter:m});h&&l&&Kr(()=>{xt(h,"storage",j),xt(h,Us,M),w&&j()}),w||j();function I(b,N){h&&h.dispatchEvent(new CustomEvent(Us,{detail:{key:e,oldValue:b,newValue:N,storageArea:n}}))}function T(b){try{const N=n.getItem(e);if(b==null)I(N,null),n.removeItem(e);else{const x=H.write(b);N!==x&&(n.setItem(e,x),I(N,x))}}catch(N){_(N)}}function F(b){const N=b?b.newValue:n.getItem(e);if(N==null)return c&&B!=null&&n.setItem(e,H.write(B)),B;if(!b&&u){const x=H.read(N);return typeof u=="function"?u(x,B):K==="object"&&!Array.isArray(x)?{...B,...x}:x}else return typeof N!="string"?N:H.read(N)}function j(b){if(!(b&&b.storageArea!==n)){if(b&&b.key==null){O.value=B;return}if(!(b&&b.key!==e)){p();try{(b==null?void 0:b.newValue)!==H.write(O.value)&&(O.value=F(b))}catch(N){_(N)}finally{b?Mn(y):y()}}}}function M(b){j(b.detail)}return O}function vi(e){return _i("(prefers-color-scheme: dark)",e)}function La(e={}){const{selector:t="html",attribute:n="class",initialValue:r="auto",window:s=Le,storage:o,storageKey:i="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:u,disableTransition:f=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},m=vi({window:s}),_=se(()=>m.value?"dark":"light"),w=c||(i==null?gi(r):Wr(i,r,o,{window:s,listenToStorageChanges:l})),O=se(()=>w.value==="auto"?_.value:w.value),B=bi("updateHTMLAttrs",(y,I,T)=>{const F=typeof y=="string"?s==null?void 0:s.document.querySelector(y):yi(y);if(!F)return;let j;if(f&&(j=s.document.createElement("style"),j.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),s.document.head.appendChild(j)),I==="class"){const M=T.split(/\s/g);Object.values(h).flatMap(b=>(b||"").split(/\s/g)).filter(Boolean).forEach(b=>{M.includes(b)?F.classList.add(b):F.classList.remove(b)})}else F.setAttribute(I,T);f&&(s.getComputedStyle(j).opacity,document.head.removeChild(j))});function K(y){var I;B(t,n,(I=h[y])!=null?I:y)}function H(y){e.onChanged?e.onChanged(y,K):K(y)}Fe(O,H,{flush:"post",immediate:!0}),Kr(()=>H(O.value));const p=se({get(){return u?w.value:O.value},set(y){w.value=y}});try{return Object.assign(p,{store:w,system:_,state:O})}catch{return p}}function Ma(e={}){const{valueDark:t="dark",valueLight:n="",window:r=Le}=e,s=La({...e,onChanged:(l,c)=>{var u;e.onChanged?(u=e.onChanged)==null||u.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),o=se(()=>s.system?s.system.value:vi({window:r}).value?"dark":"light");return se({get(){return s.value==="dark"},set(l){const c=l?"dark":"light";o.value===c?s.value="auto":s.value=c}})}function Zn(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Mu(e,t,n={}){const{window:r=Le}=n;return Wr(e,t,r==null?void 0:r.localStorage,n)}function wi(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const er=new WeakMap;function Iu(e,t=!1){const n=oe(t);let r=null,s="";Fe(gi(e),l=>{const c=Zn($e(l));if(c){const u=c;if(er.get(u)||er.set(u,u.style.overflow),u.style.overflow!=="hidden"&&(s=u.style.overflow),u.style.overflow==="hidden")return n.value=!0;if(n.value)return u.style.overflow="hidden"}},{immediate:!0});const o=()=>{const l=Zn($e(e));!l||n.value||(Ds&&(r=xt(l,"touchmove",c=>{Ia(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},i=()=>{const l=Zn($e(e));!l||!n.value||(Ds&&(r==null||r()),l.style.overflow=s,er.delete(l),n.value=!1)};return kr(i),se({get(){return n.value},set(l){l?o():i()}})}function Pu(e,t,n={}){const{window:r=Le}=n;return Wr(e,t,r==null?void 0:r.sessionStorage,n)}function Nu(e={}){const{window:t=Le,behavior:n="auto"}=e;if(!t)return{x:oe(0),y:oe(0)};const r=oe(t.scrollX),s=oe(t.scrollY),o=se({get(){return r.value},set(l){scrollTo({left:l,behavior:n})}}),i=se({get(){return s.value},set(l){scrollTo({top:l,behavior:n})}});return xt(t,"scroll",()=>{r.value=t.scrollX,s.value=t.scrollY},{capture:!1,passive:!0}),{x:o,y:i}}function Fu(e={}){const{window:t=Le,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:s=!0,includeScrollbar:o=!0}=e,i=oe(n),l=oe(r),c=()=>{t&&(o?(i.value=t.innerWidth,l.value=t.innerHeight):(i.value=t.document.documentElement.clientWidth,l.value=t.document.documentElement.clientHeight))};if(c(),Kr(c),xt("resize",c,{passive:!0}),s){const u=_i("(orientation: portrait)");Fe(u,()=>c())}return{width:i,height:l}}var tr={BASE_URL:"/GeometryOps.jl/previews/PR135/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},nr={};const Ei=/^(?:[a-z]+:|\/\/)/i,Pa="vitepress-theme-appearance",Na=/#.*$/,Fa=/[?#].*$/,$a=/(?:(^|\/)index)?\.(?:md|html)$/,he=typeof document<"u",Ci={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function Ha(e,t,n=!1){if(t===void 0)return!1;if(e=Bs(`/${e}`),n)return new RegExp(t).test(e);if(Bs(t)!==e)return!1;const r=t.match(Na);return r?(he?location.hash:"")===r[0]:!0}function Bs(e){return decodeURI(e).replace(Fa,"").replace($a,"$1")}function ja(e){return Ei.test(e)}function Va(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!ja(n)&&Ha(t,`/${n}/`,!0))||"root"}function Da(e,t){var r,s,o,i,l,c,u;const n=Va(e,t);return Object.assign({},e,{localeIndex:n,lang:((r=e.locales[n])==null?void 0:r.lang)??e.lang,dir:((s=e.locales[n])==null?void 0:s.dir)??e.dir,title:((o=e.locales[n])==null?void 0:o.title)??e.title,titleTemplate:((i=e.locales[n])==null?void 0:i.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:xi(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(u=e.locales[n])==null?void 0:u.themeConfig}})}function Si(e,t){const n=t.title||e.title,r=t.titleTemplate??e.titleTemplate;if(typeof r=="string"&&r.includes(":title"))return r.replace(/:title/g,n);const s=Ua(e.title,r);return n===s.slice(3)?n:`${n}${s}`}function Ua(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function Ba(e,t){const[n,r]=t;if(n!=="meta")return!1;const s=Object.entries(r)[0];return s==null?!1:e.some(([o,i])=>o===n&&i[s[0]]===s[1])}function xi(e,t){return[...e.filter(n=>!Ba(t,n)),...t]}const ka=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,Ka=/^[a-z]:/i;function ks(e){const t=Ka.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(ka,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const rr=new Set;function Wa(e){if(rr.size===0){const n=typeof process=="object"&&(nr==null?void 0:nr.VITE_EXTRA_EXTENSIONS)||(tr==null?void 0:tr.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(r=>rr.add(r))}const t=e.split(".").pop();return t==null||!rr.has(t.toLowerCase())}function $u(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const qa=Symbol(),ft=Fr(pa);function Hu(e){const t=se(()=>Da(ft.value,e.data.relativePath)),n=t.value.appearance,r=n==="force-dark"?oe(!0):n?Ma({storageKey:Pa,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):oe(!1),s=oe(he?location.hash:"");return he&&window.addEventListener("hashchange",()=>{s.value=location.hash}),Fe(()=>e.data,()=>{s.value=he?location.hash:""}),{site:t,theme:se(()=>t.value.themeConfig),page:se(()=>e.data),frontmatter:se(()=>e.data.frontmatter),params:se(()=>e.data.params),lang:se(()=>t.value.lang),dir:se(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:se(()=>t.value.localeIndex||"root"),title:se(()=>Si(t.value,e.data)),description:se(()=>e.data.description||t.value.description),isDark:r,hash:se(()=>s.value)}}function Ga(){const e=Ct(qa);if(!e)throw new Error("vitepress data not properly injected in app");return e}function Xa(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Ks(e){return Ei.test(e)||!e.startsWith("/")?e:Xa(ft.value.base,e)}function Ya(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),he){const n="/GeometryOps.jl/previews/PR135/";t=ks(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let r=__VP_HASH_MAP__[t.toLowerCase()];if(r||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",r=__VP_HASH_MAP__[t.toLowerCase()]),!r)return null;t=`${n}assets/${t}.${r}.js`}else t=`./${ks(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let mn=[];function ju(e){mn.push(e),Fn(()=>{mn=mn.filter(t=>t!==e)})}function za(){let e=ft.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=Ws(e,n);else if(Array.isArray(e))for(const r of e){const s=Ws(r,n);if(s){t=s;break}}return t}function Ws(e,t){const n=document.querySelector(e);if(!n)return 0;const r=n.getBoundingClientRect().bottom;return r<0?0:r+t}const Ja=Symbol(),Ti="http://a.com",Qa=()=>({path:"/",component:null,data:Ci});function Vu(e,t){const n=On(Qa()),r={route:n,go:s};async function s(l=he?location.href:"/"){var c,u;l=sr(l),await((c=r.onBeforeRouteChange)==null?void 0:c.call(r,l))!==!1&&(he&&l!==sr(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await i(l),await((u=r.onAfterRouteChanged)==null?void 0:u.call(r,l)))}let o=null;async function i(l,c=0,u=!1){var m;if(await((m=r.onBeforePageLoad)==null?void 0:m.call(r,l))===!1)return;const f=new URL(l,Ti),h=o=f.pathname;try{let _=await e(h);if(!_)throw new Error(`Page not found: ${h}`);if(o===h){o=null;const{default:w,__pageData:O}=_;if(!w)throw new Error(`Invalid route component: ${w}`);n.path=he?h:Ks(h),n.component=hn(w),n.data=hn(O),he&&Mn(()=>{let B=ft.value.base+O.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!ft.value.cleanUrls&&!B.endsWith("/")&&(B+=".html"),B!==f.pathname&&(f.pathname=B,l=B+f.search+f.hash,history.replaceState({},"",l)),f.hash&&!c){let K=null;try{K=document.getElementById(decodeURIComponent(f.hash).slice(1))}catch(H){console.warn(H)}if(K){qs(K,f.hash);return}}window.scrollTo(0,c)})}}catch(_){if(!/fetch|Page not found/.test(_.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(_),!u)try{const w=await fetch(ft.value.base+"hashmap.json");window.__VP_HASH_MAP__=await w.json(),await i(l,c,!0);return}catch{}if(o===h){o=null,n.path=he?h:Ks(h),n.component=t?hn(t):null;const w=he?h.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...Ci,relativePath:w}}}}return he&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const u=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(u==null)return;const{href:f,origin:h,pathname:m,hash:_,search:w}=new URL(u,c.baseURI),O=new URL(location.href);h===O.origin&&Wa(m)&&(l.preventDefault(),m===O.pathname&&w===O.search?(_!==O.hash&&(history.pushState({},"",f),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:O.href,newURL:f}))),_?qs(c,_,c.classList.contains("header-anchor")):window.scrollTo(0,0)):s(f))},{capture:!0}),window.addEventListener("popstate",async l=>{var c;l.state!==null&&(await i(sr(location.href),l.state&&l.state.scrollPosition||0),(c=r.onAfterRouteChanged)==null||c.call(r,location.href))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),r}function Za(){const e=Ct(Ja);if(!e)throw new Error("useRouter() is called without provider.");return e}function Ai(){return Za().route}function qs(e,t,n=!1){let r=null;try{r=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(s){console.warn(s)}if(r){let s=function(){!n||Math.abs(i-window.scrollY)>window.innerHeight?window.scrollTo(0,i):window.scrollTo({left:0,top:i,behavior:"smooth"})};const o=parseInt(window.getComputedStyle(r).paddingTop,10),i=window.scrollY+r.getBoundingClientRect().top-za()+o;requestAnimationFrame(s)}}function sr(e){const t=new URL(e,Ti);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),ft.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const or=()=>mn.forEach(e=>e()),Du=Hr({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Ai(),{site:n}=Ga();return()=>vr(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?vr(t.component,{onVnodeMounted:or,onVnodeUpdated:or,onVnodeUnmounted:or}):"404 Page Not Found"])}}),Uu=Hr({setup(e,{slots:t}){const n=oe(!1);return Tt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function Bu(){he&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const r=(n=t.parentElement)==null?void 0:n.parentElement;if(!r)return;const s=Array.from(r.querySelectorAll("input")).indexOf(t);if(s<0)return;const o=r.querySelector(".blocks");if(!o)return;const i=Array.from(o.children).find(u=>u.classList.contains("active"));if(!i)return;const l=o.children[s];if(!l||i===l)return;i.classList.remove("active"),l.classList.add("active");const c=r==null?void 0:r.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function ku(){if(he){const e=new WeakMap;window.addEventListener("click",t=>{var r;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const s=n.parentElement,o=(r=n.nextElementSibling)==null?void 0:r.nextElementSibling;if(!s||!o)return;const i=/language-(shellscript|shell|bash|sh|zsh)/.test(s.className),l=[".vp-copy-ignore",".diff.remove"],c=o.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(f=>f.remove());let u=c.textContent||"";i&&(u=u.replace(/^ *(\$|>) /gm,"").trim()),eu(u).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const f=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,f)})}})}}async function eu(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const r=document.getSelection(),s=r?r.rangeCount>0&&r.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),s&&(r.removeAllRanges(),r.addRange(s)),n&&n.focus()}}function Ku(e,t){let n=!0,r=[];const s=o=>{if(n){n=!1,o.forEach(l=>{const c=ir(l);for(const u of document.head.children)if(u.isEqualNode(c)){r.push(u);return}});return}const i=o.map(ir);r.forEach((l,c)=>{const u=i.findIndex(f=>f==null?void 0:f.isEqualNode(l??null));u!==-1?delete i[u]:(l==null||l.remove(),delete r[c])}),i.forEach(l=>l&&document.head.appendChild(l)),r=[...r,...i].filter(Boolean)};Ur(()=>{const o=e.data,i=t.value,l=o&&o.description,c=o&&o.frontmatter.head||[],u=Si(i,o);u!==document.title&&(document.title=u);const f=l||i.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==f&&h.setAttribute("content",f):ir(["meta",{name:"description",content:f}]),s(xi(i.head,nu(c)))})}function ir([e,t,n]){const r=document.createElement(e);for(const s in t)r.setAttribute(s,t[s]);return n&&(r.innerHTML=n),e==="script"&&!t.async&&(r.async=!1),r}function tu(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function nu(e){return e.filter(t=>!tu(t))}const lr=new Set,Ri=()=>document.createElement("link"),ru=e=>{const t=Ri();t.rel="prefetch",t.href=e,document.head.appendChild(t)},su=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let un;const ou=he&&(un=Ri())&&un.relList&&un.relList.supports&&un.relList.supports("prefetch")?ru:su;function Wu(){if(!he||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const r=()=>{n&&n.disconnect(),n=new IntersectionObserver(o=>{o.forEach(i=>{if(i.isIntersecting){const l=i.target;n.unobserve(l);const{pathname:c}=l;if(!lr.has(c)){lr.add(c);const u=Ya(c);u&&ou(u)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(o=>{const{hostname:i,pathname:l}=new URL(o.href instanceof SVGAnimatedString?o.href.animVal:o.href,o.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||o.target!=="_blank"&&i===location.hostname&&(l!==location.pathname?n.observe(o):lr.add(l))})})};Tt(r);const s=Ai();Fe(()=>s.path,r),Fn(()=>{n&&n.disconnect()})}export{Cu as $,yu as A,Hl as B,za as C,uu as D,du as E,_e as F,Fr as G,ju as H,le as I,fu as J,Ei as K,Ai as L,Tc as M,Ct as N,Fu as O,xr as P,Lu as Q,Mn as R,Nu as S,ci as T,he as U,Ln as V,au as W,Au as X,Iu as Y,Jl as Z,Tu as _,si as a,pu as a0,Ro as a1,Eu as a2,gu as a3,On as a4,wl as a5,vr as a6,bu as a7,Ku as a8,Ja as a9,Hu as aa,qa as ab,Du as ac,Uu as ad,ft as ae,xu as af,Vu as ag,Ya as ah,Wu as ai,ku as aj,Bu as ak,yi as al,kr as am,Ou as an,Pu as ao,Mu as ap,Ru as aq,Za as ar,xt as as,cu as at,wu as au,de as av,mu as aw,hn as ax,Su as ay,$u as az,ti as b,_u as c,Hr as d,vu as e,Wa as f,Ks as g,se as h,ja as i,ri as j,_o as k,lu as l,Ha as m,Tr as n,Zo as o,iu as p,_i as q,hu as r,oe as s,ki as t,Ga as u,Fe as v,Rl as w,Ur as x,Tt as y,Fn as z}; diff --git a/previews/PR135/assets/chunks/framework.k41oUgTf.js b/previews/PR135/assets/chunks/framework.k41oUgTf.js deleted file mode 100644 index 98f82de37..000000000 --- a/previews/PR135/assets/chunks/framework.k41oUgTf.js +++ /dev/null @@ -1,17 +0,0 @@ -/** -* @vue/shared v3.4.31 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**//*! #__NO_SIDE_EFFECTS__ */function wr(e,t){const n=new Set(e.split(","));return r=>n.has(r)}const te={},mt=[],xe=()=>{},Ii=()=>!1,kt=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Er=e=>e.startsWith("onUpdate:"),le=Object.assign,Cr=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Pi=Object.prototype.hasOwnProperty,Y=(e,t)=>Pi.call(e,t),B=Array.isArray,yt=e=>Sn(e)==="[object Map]",Ys=e=>Sn(e)==="[object Set]",K=e=>typeof e=="function",oe=e=>typeof e=="string",Ze=e=>typeof e=="symbol",Z=e=>e!==null&&typeof e=="object",Js=e=>(Z(e)||K(e))&&K(e.then)&&K(e.catch),Qs=Object.prototype.toString,Sn=e=>Qs.call(e),Mi=e=>Sn(e).slice(8,-1),Zs=e=>Sn(e)==="[object Object]",xr=e=>oe(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,_t=wr(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Tn=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Ni=/-(\w)/g,$e=Tn(e=>e.replace(Ni,(t,n)=>n?n.toUpperCase():"")),Fi=/\B([A-Z])/g,ft=Tn(e=>e.replace(Fi,"-$1").toLowerCase()),An=Tn(e=>e.charAt(0).toUpperCase()+e.slice(1)),un=Tn(e=>e?`on${An(e)}`:""),Je=(e,t)=>!Object.is(e,t),fn=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},cr=e=>{const t=parseFloat(e);return isNaN(t)?e:t},$i=e=>{const t=oe(e)?Number(e):NaN;return isNaN(t)?e:t};let Jr;const to=()=>Jr||(Jr=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Sr(e){if(B(e)){const t={};for(let n=0;n{if(n){const r=n.split(ji);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t}function Tr(e){let t="";if(oe(e))t=e;else if(B(e))for(let n=0;n!!(e&&e.__v_isRef===!0),ki=e=>oe(e)?e:e==null?"":B(e)||Z(e)&&(e.toString===Qs||!K(e.toString))?ro(e)?ki(e.value):JSON.stringify(e,so,2):String(e),so=(e,t)=>ro(t)?so(e,t.value):yt(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[r,s],o)=>(n[kn(r,o)+" =>"]=s,n),{})}:Ys(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>kn(n))}:Ze(t)?kn(t):Z(t)&&!B(t)&&!Zs(t)?String(t):t,kn=(e,t="")=>{var n;return Ze(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** -* @vue/reactivity v3.4.31 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/let we;class Ki{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=we,!t&&we&&(this.index=(we.scopes||(we.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const n=we;try{return we=this,t()}finally{we=n}}}on(){we=this}off(){we=this.parent}stop(t){if(this._active){let n,r;for(n=0,r=this.effects.length;n=4))break}this._dirtyLevel===1&&(this._dirtyLevel=0),tt()}return this._dirtyLevel>=4}set dirty(t){this._dirtyLevel=t?4:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=Xe,n=ct;try{return Xe=!0,ct=this,this._runnings++,Qr(this),this.fn()}finally{Zr(this),this._runnings--,ct=n,Xe=t}}stop(){this.active&&(Qr(this),Zr(this),this.onStop&&this.onStop(),this.active=!1)}}function Gi(e){return e.value}function Qr(e){e._trackId++,e._depsLength=0}function Zr(e){if(e.deps.length>e._depsLength){for(let t=e._depsLength;t{const n=new Map;return n.cleanup=e,n.computed=t,n},mn=new WeakMap,at=Symbol(""),fr=Symbol("");function ve(e,t,n){if(Xe&&ct){let r=mn.get(e);r||mn.set(e,r=new Map);let s=r.get(n);s||r.set(n,s=uo(()=>r.delete(n))),co(ct,s)}}function De(e,t,n,r,s,o){const i=mn.get(e);if(!i)return;let l=[];if(t==="clear")l=[...i.values()];else if(n==="length"&&B(e)){const c=Number(r);i.forEach((a,f)=>{(f==="length"||!Ze(f)&&f>=c)&&l.push(a)})}else switch(n!==void 0&&l.push(i.get(n)),t){case"add":B(e)?xr(n)&&l.push(i.get("length")):(l.push(i.get(at)),yt(e)&&l.push(i.get(fr)));break;case"delete":B(e)||(l.push(i.get(at)),yt(e)&&l.push(i.get(fr)));break;case"set":yt(e)&&l.push(i.get(at));break}Rr();for(const c of l)c&&ao(c,4);Or()}function zi(e,t){const n=mn.get(e);return n&&n.get(t)}const Xi=wr("__proto__,__v_isRef,__isVue"),fo=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Ze)),es=Yi();function Yi(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...n){const r=J(this);for(let o=0,i=this.length;o{e[t]=function(...n){et(),Rr();const r=J(this)[t].apply(this,n);return Or(),tt(),r}}),e}function Ji(e){Ze(e)||(e=String(e));const t=J(this);return ve(t,"has",e),t.hasOwnProperty(e)}class ho{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,r){const s=this._isReadonly,o=this._isShallow;if(n==="__v_isReactive")return!s;if(n==="__v_isReadonly")return s;if(n==="__v_isShallow")return o;if(n==="__v_raw")return r===(s?o?ul:yo:o?mo:go).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(r)?t:void 0;const i=B(t);if(!s){if(i&&Y(es,n))return Reflect.get(es,n,r);if(n==="hasOwnProperty")return Ji}const l=Reflect.get(t,n,r);return(Ze(n)?fo.has(n):Xi(n))||(s||ve(t,"get",n),o)?l:de(l)?i&&xr(n)?l:l.value:Z(l)?s?Ln(l):On(l):l}}class po extends ho{constructor(t=!1){super(!1,t)}set(t,n,r,s){let o=t[n];if(!this._isShallow){const c=$t(o);if(!yn(r)&&!$t(r)&&(o=J(o),r=J(r)),!B(t)&&de(o)&&!de(r))return c?!1:(o.value=r,!0)}const i=B(t)&&xr(n)?Number(n)e,Rn=e=>Reflect.getPrototypeOf(e);function Yt(e,t,n=!1,r=!1){e=e.__v_raw;const s=J(e),o=J(t);n||(Je(t,o)&&ve(s,"get",t),ve(s,"get",o));const{has:i}=Rn(s),l=r?Lr:n?Mr:Ht;if(i.call(s,t))return l(e.get(t));if(i.call(s,o))return l(e.get(o));e!==s&&e.get(t)}function Jt(e,t=!1){const n=this.__v_raw,r=J(n),s=J(e);return t||(Je(e,s)&&ve(r,"has",e),ve(r,"has",s)),e===s?n.has(e):n.has(e)||n.has(s)}function Qt(e,t=!1){return e=e.__v_raw,!t&&ve(J(e),"iterate",at),Reflect.get(e,"size",e)}function ts(e){e=J(e);const t=J(this);return Rn(t).has.call(t,e)||(t.add(e),De(t,"add",e,e)),this}function ns(e,t){t=J(t);const n=J(this),{has:r,get:s}=Rn(n);let o=r.call(n,e);o||(e=J(e),o=r.call(n,e));const i=s.call(n,e);return n.set(e,t),o?Je(t,i)&&De(n,"set",e,t):De(n,"add",e,t),this}function rs(e){const t=J(this),{has:n,get:r}=Rn(t);let s=n.call(t,e);s||(e=J(e),s=n.call(t,e)),r&&r.call(t,e);const o=t.delete(e);return s&&De(t,"delete",e,void 0),o}function ss(){const e=J(this),t=e.size!==0,n=e.clear();return t&&De(e,"clear",void 0,void 0),n}function Zt(e,t){return function(r,s){const o=this,i=o.__v_raw,l=J(i),c=t?Lr:e?Mr:Ht;return!e&&ve(l,"iterate",at),i.forEach((a,f)=>r.call(s,c(a),c(f),o))}}function en(e,t,n){return function(...r){const s=this.__v_raw,o=J(s),i=yt(o),l=e==="entries"||e===Symbol.iterator&&i,c=e==="keys"&&i,a=s[e](...r),f=n?Lr:t?Mr:Ht;return!t&&ve(o,"iterate",c?fr:at),{next(){const{value:h,done:m}=a.next();return m?{value:h,done:m}:{value:l?[f(h[0]),f(h[1])]:f(h),done:m}},[Symbol.iterator](){return this}}}}function Be(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function nl(){const e={get(o){return Yt(this,o)},get size(){return Qt(this)},has:Jt,add:ts,set:ns,delete:rs,clear:ss,forEach:Zt(!1,!1)},t={get(o){return Yt(this,o,!1,!0)},get size(){return Qt(this)},has:Jt,add:ts,set:ns,delete:rs,clear:ss,forEach:Zt(!1,!0)},n={get(o){return Yt(this,o,!0)},get size(){return Qt(this,!0)},has(o){return Jt.call(this,o,!0)},add:Be("add"),set:Be("set"),delete:Be("delete"),clear:Be("clear"),forEach:Zt(!0,!1)},r={get(o){return Yt(this,o,!0,!0)},get size(){return Qt(this,!0)},has(o){return Jt.call(this,o,!0)},add:Be("add"),set:Be("set"),delete:Be("delete"),clear:Be("clear"),forEach:Zt(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=en(o,!1,!1),n[o]=en(o,!0,!1),t[o]=en(o,!1,!0),r[o]=en(o,!0,!0)}),[e,n,t,r]}const[rl,sl,ol,il]=nl();function Ir(e,t){const n=t?e?il:ol:e?sl:rl;return(r,s,o)=>s==="__v_isReactive"?!e:s==="__v_isReadonly"?e:s==="__v_raw"?r:Reflect.get(Y(n,s)&&s in r?n:r,s,o)}const ll={get:Ir(!1,!1)},cl={get:Ir(!1,!0)},al={get:Ir(!0,!1)};const go=new WeakMap,mo=new WeakMap,yo=new WeakMap,ul=new WeakMap;function fl(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function dl(e){return e.__v_skip||!Object.isExtensible(e)?0:fl(Mi(e))}function On(e){return $t(e)?e:Pr(e,!1,Zi,ll,go)}function hl(e){return Pr(e,!1,tl,cl,mo)}function Ln(e){return Pr(e,!0,el,al,yo)}function Pr(e,t,n,r,s){if(!Z(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=s.get(e);if(o)return o;const i=dl(e);if(i===0)return e;const l=new Proxy(e,i===2?r:n);return s.set(e,l),l}function Rt(e){return $t(e)?Rt(e.__v_raw):!!(e&&e.__v_isReactive)}function $t(e){return!!(e&&e.__v_isReadonly)}function yn(e){return!!(e&&e.__v_isShallow)}function _o(e){return e?!!e.__v_raw:!1}function J(e){const t=e&&e.__v_raw;return t?J(t):e}function dn(e){return Object.isExtensible(e)&&eo(e,"__v_skip",!0),e}const Ht=e=>Z(e)?On(e):e,Mr=e=>Z(e)?Ln(e):e;class vo{constructor(t,n,r,s){this.getter=t,this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new Ar(()=>t(this._value),()=>Ot(this,this.effect._dirtyLevel===2?2:3)),this.effect.computed=this,this.effect.active=this._cacheable=!s,this.__v_isReadonly=r}get value(){const t=J(this);return(!t._cacheable||t.effect.dirty)&&Je(t._value,t._value=t.effect.run())&&Ot(t,4),Nr(t),t.effect._dirtyLevel>=2&&Ot(t,2),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function pl(e,t,n=!1){let r,s;const o=K(e);return o?(r=e,s=xe):(r=e.get,s=e.set),new vo(r,s,o||!s,n)}function Nr(e){var t;Xe&&ct&&(e=J(e),co(ct,(t=e.dep)!=null?t:e.dep=uo(()=>e.dep=void 0,e instanceof vo?e:void 0)))}function Ot(e,t=4,n,r){e=J(e);const s=e.dep;s&&ao(s,t)}function de(e){return!!(e&&e.__v_isRef===!0)}function se(e){return bo(e,!1)}function Fr(e){return bo(e,!0)}function bo(e,t){return de(e)?e:new gl(e,t)}class gl{constructor(t,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?t:J(t),this._value=n?t:Ht(t)}get value(){return Nr(this),this._value}set value(t){const n=this.__v_isShallow||yn(t)||$t(t);t=n?t:J(t),Je(t,this._rawValue)&&(this._rawValue,this._rawValue=t,this._value=n?t:Ht(t),Ot(this,4))}}function wo(e){return de(e)?e.value:e}const ml={get:(e,t,n)=>wo(Reflect.get(e,t,n)),set:(e,t,n,r)=>{const s=e[t];return de(s)&&!de(n)?(s.value=n,!0):Reflect.set(e,t,n,r)}};function Eo(e){return Rt(e)?e:new Proxy(e,ml)}class yl{constructor(t){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=t(()=>Nr(this),()=>Ot(this));this._get=n,this._set=r}get value(){return this._get()}set value(t){this._set(t)}}function _l(e){return new yl(e)}class vl{constructor(t,n,r){this._object=t,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return zi(J(this._object),this._key)}}class bl{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function wl(e,t,n){return de(e)?e:K(e)?new bl(e):Z(e)&&arguments.length>1?El(e,t,n):se(e)}function El(e,t,n){const r=e[t];return de(r)?r:new vl(e,t,n)}/** -* @vue/runtime-core v3.4.31 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/function Ye(e,t,n,r){try{return r?e(...r):e()}catch(s){Kt(s,t,n)}}function Se(e,t,n,r){if(K(e)){const s=Ye(e,t,n,r);return s&&Js(s)&&s.catch(o=>{Kt(o,t,n)}),s}if(B(e)){const s=[];for(let o=0;o>>1,s=pe[r],o=Vt(s);oMe&&pe.splice(t,1)}function Tl(e){B(e)?vt.push(...e):(!We||!We.includes(e,e.allowRecurse?it+1:it))&&vt.push(e),xo()}function os(e,t,n=jt?Me+1:0){for(;nVt(n)-Vt(r));if(vt.length=0,We){We.push(...t);return}for(We=t,it=0;ite.id==null?1/0:e.id,Al=(e,t)=>{const n=Vt(e)-Vt(t);if(n===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return n};function So(e){dr=!1,jt=!0,pe.sort(Al);try{for(Me=0;Meoe(_)?_.trim():_)),h&&(s=n.map(cr))}let l,c=r[l=un(t)]||r[l=un($e(t))];!c&&o&&(c=r[l=un(ft(t))]),c&&Se(c,e,6,s);const a=r[l+"Once"];if(a){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Se(a,e,6,s)}}function To(e,t,n=!1){const r=t.emitsCache,s=r.get(e);if(s!==void 0)return s;const o=e.emits;let i={},l=!1;if(!K(e)){const c=a=>{const f=To(a,t,!0);f&&(l=!0,le(i,f))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!o&&!l?(Z(e)&&r.set(e,null),null):(B(o)?o.forEach(c=>i[c]=null):le(i,o),Z(e)&&r.set(e,i),i)}function Mn(e,t){return!e||!kt(t)?!1:(t=t.slice(2).replace(/Once$/,""),Y(e,t[0].toLowerCase()+t.slice(1))||Y(e,ft(t))||Y(e,t))}let fe=null,Nn=null;function vn(e){const t=fe;return fe=e,Nn=e&&e.type.__scopeId||null,t}function su(e){Nn=e}function ou(){Nn=null}function Ol(e,t=fe,n){if(!t||e._n)return e;const r=(...s)=>{r._d&&ws(-1);const o=vn(t);let i;try{i=e(...s)}finally{vn(o),r._d&&ws(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function Kn(e){const{type:t,vnode:n,proxy:r,withProxy:s,propsOptions:[o],slots:i,attrs:l,emit:c,render:a,renderCache:f,props:h,data:m,setupState:_,ctx:C,inheritAttrs:L}=e,k=vn(e);let W,V;try{if(n.shapeFlag&4){const y=s||r,P=y;W=Ae(a.call(P,y,f,h,_,m,C)),V=l}else{const y=t;W=Ae(y.length>1?y(h,{attrs:l,slots:i,emit:c}):y(h,null)),V=t.props?l:Ll(l)}}catch(y){Nt.length=0,Kt(y,e,1),W=ie(me)}let p=W;if(V&&L!==!1){const y=Object.keys(V),{shapeFlag:P}=p;y.length&&P&7&&(o&&y.some(Er)&&(V=Il(V,o)),p=Qe(p,V,!1,!0))}return n.dirs&&(p=Qe(p,null,!1,!0),p.dirs=p.dirs?p.dirs.concat(n.dirs):n.dirs),n.transition&&(p.transition=n.transition),W=p,vn(k),W}const Ll=e=>{let t;for(const n in e)(n==="class"||n==="style"||kt(n))&&((t||(t={}))[n]=e[n]);return t},Il=(e,t)=>{const n={};for(const r in e)(!Er(r)||!(r.slice(9)in t))&&(n[r]=e[r]);return n};function Pl(e,t,n){const{props:r,children:s,component:o}=e,{props:i,children:l,patchFlag:c}=t,a=o.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return r?is(r,i,a):!!i;if(c&8){const f=t.dynamicProps;for(let h=0;he.__isSuspense;function Lo(e,t){t&&t.pendingBranch?B(e)?t.effects.push(...e):t.effects.push(e):Tl(e)}function Fn(e,t,n=ue,r=!1){if(n){const s=n[e]||(n[e]=[]),o=t.__weh||(t.__weh=(...i)=>{et();const l=qt(n),c=Se(t,n,e,i);return l(),tt(),c});return r?s.unshift(o):s.push(o),o}}const Ue=e=>(t,n=ue)=>{(!Gt||e==="sp")&&Fn(e,(...r)=>t(...r),n)},Fl=Ue("bm"),xt=Ue("m"),$l=Ue("bu"),Hl=Ue("u"),Io=Ue("bum"),$n=Ue("um"),jl=Ue("sp"),Vl=Ue("rtg"),Dl=Ue("rtc");function Ul(e,t=ue){Fn("ec",e,t)}function cu(e,t){if(fe===null)return e;const n=Vn(fe),r=e.dirs||(e.dirs=[]);for(let s=0;st(i,l,void 0,o));else{const i=Object.keys(e);s=new Array(i.length);for(let l=0,c=i.length;l!!e.type.__asyncLoader;/*! #__NO_SIDE_EFFECTS__ */function uu(e){K(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:r,delay:s=200,timeout:o,suspensible:i=!0,onError:l}=e;let c=null,a,f=0;const h=()=>(f++,c=null,m()),m=()=>{let _;return c||(_=c=t().catch(C=>{if(C=C instanceof Error?C:new Error(String(C)),l)return new Promise((L,k)=>{l(C,()=>L(h()),()=>k(C),f+1)});throw C}).then(C=>_!==c&&c?c:(C&&(C.__esModule||C[Symbol.toStringTag]==="Module")&&(C=C.default),a=C,C)))};return Hr({name:"AsyncComponentWrapper",__asyncLoader:m,get __asyncResolved(){return a},setup(){const _=ue;if(a)return()=>Wn(a,_);const C=V=>{c=null,Kt(V,_,13,!r)};if(i&&_.suspense||Gt)return m().then(V=>()=>Wn(V,_)).catch(V=>(C(V),()=>r?ie(r,{error:V}):null));const L=se(!1),k=se(),W=se(!!s);return s&&setTimeout(()=>{W.value=!1},s),o!=null&&setTimeout(()=>{if(!L.value&&!k.value){const V=new Error(`Async component timed out after ${o}ms.`);C(V),k.value=V}},o),m().then(()=>{L.value=!0,_.parent&&Wt(_.parent.vnode)&&(_.parent.effect.dirty=!0,Pn(_.parent.update))}).catch(V=>{C(V),k.value=V}),()=>{if(L.value&&a)return Wn(a,_);if(k.value&&r)return ie(r,{error:k.value});if(n&&!W.value)return ie(n)}}})}function Wn(e,t){const{ref:n,props:r,children:s,ce:o}=t.vnode,i=ie(e,r,s);return i.ref=n,i.ce=o,delete t.vnode.ce,i}function fu(e,t,n={},r,s){if(fe.isCE||fe.parent&&bt(fe.parent)&&fe.parent.isCE)return t!=="default"&&(n.name=t),ie("slot",n,r&&r());let o=e[t];o&&o._c&&(o._d=!1),Zo();const i=o&&Po(o(n)),l=ti(_e,{key:n.key||i&&i.key||`_${t}`},i||(r?r():[]),i&&e._===1?64:-2);return!s&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),o&&o._c&&(o._d=!0),l}function Po(e){return e.some(t=>Cn(t)?!(t.type===me||t.type===_e&&!Po(t.children)):!0)?e:null}function du(e,t){const n={};for(const r in e)n[/[A-Z]/.test(r)?`on:${r}`:un(r)]=e[r];return n}const hr=e=>e?oi(e)?Vn(e):hr(e.parent):null,Lt=le(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>hr(e.parent),$root:e=>hr(e.root),$emit:e=>e.emit,$options:e=>jr(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,Pn(e.update)}),$nextTick:e=>e.n||(e.n=In.bind(e.proxy)),$watch:e=>fc.bind(e)}),qn=(e,t)=>e!==te&&!e.__isScriptSetup&&Y(e,t),Bl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:r,data:s,props:o,accessCache:i,type:l,appContext:c}=e;let a;if(t[0]!=="$"){const _=i[t];if(_!==void 0)switch(_){case 1:return r[t];case 2:return s[t];case 4:return n[t];case 3:return o[t]}else{if(qn(r,t))return i[t]=1,r[t];if(s!==te&&Y(s,t))return i[t]=2,s[t];if((a=e.propsOptions[0])&&Y(a,t))return i[t]=3,o[t];if(n!==te&&Y(n,t))return i[t]=4,n[t];pr&&(i[t]=0)}}const f=Lt[t];let h,m;if(f)return t==="$attrs"&&ve(e.attrs,"get",""),f(e);if((h=l.__cssModules)&&(h=h[t]))return h;if(n!==te&&Y(n,t))return i[t]=4,n[t];if(m=c.config.globalProperties,Y(m,t))return m[t]},set({_:e},t,n){const{data:r,setupState:s,ctx:o}=e;return qn(s,t)?(s[t]=n,!0):r!==te&&Y(r,t)?(r[t]=n,!0):Y(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:s,propsOptions:o}},i){let l;return!!n[i]||e!==te&&Y(e,i)||qn(t,i)||(l=o[0])&&Y(l,i)||Y(r,i)||Y(Lt,i)||Y(s.config.globalProperties,i)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Y(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function hu(){return kl().slots}function kl(){const e=jn();return e.setupContext||(e.setupContext=li(e))}function cs(e){return B(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let pr=!0;function Kl(e){const t=jr(e),n=e.proxy,r=e.ctx;pr=!1,t.beforeCreate&&as(t.beforeCreate,e,"bc");const{data:s,computed:o,methods:i,watch:l,provide:c,inject:a,created:f,beforeMount:h,mounted:m,beforeUpdate:_,updated:C,activated:L,deactivated:k,beforeDestroy:W,beforeUnmount:V,destroyed:p,unmounted:y,render:P,renderTracked:A,renderTriggered:F,errorCaptured:$,serverPrefetch:I,expose:w,inheritAttrs:N,components:T,directives:G,filters:ne}=t;if(a&&Wl(a,r,null),i)for(const X in i){const j=i[X];K(j)&&(r[X]=j.bind(n))}if(s){const X=s.call(n,n);Z(X)&&(e.data=On(X))}if(pr=!0,o)for(const X in o){const j=o[X],He=K(j)?j.bind(n,n):K(j.get)?j.get.bind(n,n):xe,zt=!K(j)&&K(j.set)?j.set.bind(n):xe,nt=re({get:He,set:zt});Object.defineProperty(r,X,{enumerable:!0,configurable:!0,get:()=>nt.value,set:Le=>nt.value=Le})}if(l)for(const X in l)Mo(l[X],r,n,X);if(c){const X=K(c)?c.call(n):c;Reflect.ownKeys(X).forEach(j=>{Jl(j,X[j])})}f&&as(f,e,"c");function D(X,j){B(j)?j.forEach(He=>X(He.bind(n))):j&&X(j.bind(n))}if(D(Fl,h),D(xt,m),D($l,_),D(Hl,C),D(dc,L),D(hc,k),D(Ul,$),D(Dl,A),D(Vl,F),D(Io,V),D($n,y),D(jl,I),B(w))if(w.length){const X=e.exposed||(e.exposed={});w.forEach(j=>{Object.defineProperty(X,j,{get:()=>n[j],set:He=>n[j]=He})})}else e.exposed||(e.exposed={});P&&e.render===xe&&(e.render=P),N!=null&&(e.inheritAttrs=N),T&&(e.components=T),G&&(e.directives=G)}function Wl(e,t,n=xe){B(e)&&(e=gr(e));for(const r in e){const s=e[r];let o;Z(s)?"default"in s?o=wt(s.from||r,s.default,!0):o=wt(s.from||r):o=wt(s),de(o)?Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:()=>o.value,set:i=>o.value=i}):t[r]=o}}function as(e,t,n){Se(B(e)?e.map(r=>r.bind(t.proxy)):e.bind(t.proxy),t,n)}function Mo(e,t,n,r){const s=r.includes(".")?qo(n,r):()=>n[r];if(oe(e)){const o=t[e];K(o)&&Ne(s,o)}else if(K(e))Ne(s,e.bind(n));else if(Z(e))if(B(e))e.forEach(o=>Mo(o,t,n,r));else{const o=K(e.handler)?e.handler.bind(n):t[e.handler];K(o)&&Ne(s,o,e)}}function jr(e){const t=e.type,{mixins:n,extends:r}=t,{mixins:s,optionsCache:o,config:{optionMergeStrategies:i}}=e.appContext,l=o.get(t);let c;return l?c=l:!s.length&&!n&&!r?c=t:(c={},s.length&&s.forEach(a=>bn(c,a,i,!0)),bn(c,t,i)),Z(t)&&o.set(t,c),c}function bn(e,t,n,r=!1){const{mixins:s,extends:o}=t;o&&bn(e,o,n,!0),s&&s.forEach(i=>bn(e,i,n,!0));for(const i in t)if(!(r&&i==="expose")){const l=ql[i]||n&&n[i];e[i]=l?l(e[i],t[i]):t[i]}return e}const ql={data:us,props:fs,emits:fs,methods:At,computed:At,beforeCreate:ge,created:ge,beforeMount:ge,mounted:ge,beforeUpdate:ge,updated:ge,beforeDestroy:ge,beforeUnmount:ge,destroyed:ge,unmounted:ge,activated:ge,deactivated:ge,errorCaptured:ge,serverPrefetch:ge,components:At,directives:At,watch:zl,provide:us,inject:Gl};function us(e,t){return t?e?function(){return le(K(e)?e.call(this,this):e,K(t)?t.call(this,this):t)}:t:e}function Gl(e,t){return At(gr(e),gr(t))}function gr(e){if(B(e)){const t={};for(let n=0;n1)return n&&K(t)?t.call(r&&r.proxy):t}}const Fo={},$o=()=>Object.create(Fo),Ho=e=>Object.getPrototypeOf(e)===Fo;function Ql(e,t,n,r=!1){const s={},o=$o();e.propsDefaults=Object.create(null),jo(e,t,s,o);for(const i in e.propsOptions[0])i in s||(s[i]=void 0);n?e.props=r?s:hl(s):e.type.props?e.props=s:e.props=o,e.attrs=o}function Zl(e,t,n,r){const{props:s,attrs:o,vnode:{patchFlag:i}}=e,l=J(s),[c]=e.propsOptions;let a=!1;if((r||i>0)&&!(i&16)){if(i&8){const f=e.vnode.dynamicProps;for(let h=0;h{c=!0;const[m,_]=Vo(h,t,!0);le(i,m),_&&l.push(..._)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!o&&!c)return Z(e)&&r.set(e,mt),mt;if(B(o))for(let f=0;f-1,_[1]=L<0||C-1||Y(_,"default"))&&l.push(h)}}}const a=[i,l];return Z(e)&&r.set(e,a),a}function ds(e){return e[0]!=="$"&&!_t(e)}function hs(e){return e===null?"null":typeof e=="function"?e.name||"":typeof e=="object"&&e.constructor&&e.constructor.name||""}function ps(e,t){return hs(e)===hs(t)}function gs(e,t){return B(t)?t.findIndex(n=>ps(n,e)):K(t)&&ps(t,e)?0:-1}const Do=e=>e[0]==="_"||e==="$stable",Vr=e=>B(e)?e.map(Ae):[Ae(e)],ec=(e,t,n)=>{if(t._n)return t;const r=Ol((...s)=>Vr(t(...s)),n);return r._c=!1,r},Uo=(e,t,n)=>{const r=e._ctx;for(const s in e){if(Do(s))continue;const o=e[s];if(K(o))t[s]=ec(s,o,r);else if(o!=null){const i=Vr(o);t[s]=()=>i}}},Bo=(e,t)=>{const n=Vr(t);e.slots.default=()=>n},tc=(e,t)=>{const n=e.slots=$o();if(e.vnode.shapeFlag&32){const r=t._;r?(le(n,t),eo(n,"_",r,!0)):Uo(t,n)}else t&&Bo(e,t)},nc=(e,t,n)=>{const{vnode:r,slots:s}=e;let o=!0,i=te;if(r.shapeFlag&32){const l=t._;l?n&&l===1?o=!1:(le(s,t),!n&&l===1&&delete s._):(o=!t.$stable,Uo(t,s)),i=t}else t&&(Bo(e,t),i={default:1});if(o)for(const l in s)!Do(l)&&i[l]==null&&delete s[l]};function wn(e,t,n,r,s=!1){if(B(e)){e.forEach((m,_)=>wn(m,t&&(B(t)?t[_]:t),n,r,s));return}if(bt(r)&&!s)return;const o=r.shapeFlag&4?Vn(r.component):r.el,i=s?null:o,{i:l,r:c}=e,a=t&&t.r,f=l.refs===te?l.refs={}:l.refs,h=l.setupState;if(a!=null&&a!==c&&(oe(a)?(f[a]=null,Y(h,a)&&(h[a]=null)):de(a)&&(a.value=null)),K(c))Ye(c,l,12,[i,f]);else{const m=oe(c),_=de(c);if(m||_){const C=()=>{if(e.f){const L=m?Y(h,c)?h[c]:f[c]:c.value;s?B(L)&&Cr(L,o):B(L)?L.includes(o)||L.push(o):m?(f[c]=[o],Y(h,c)&&(h[c]=f[c])):(c.value=[o],e.k&&(f[e.k]=c.value))}else m?(f[c]=i,Y(h,c)&&(h[c]=i)):_&&(c.value=i,e.k&&(f[e.k]=i))};i?(C.id=-1,ye(C,n)):C()}}}let ms=!1;const pt=()=>{ms||(console.error("Hydration completed but contains mismatches."),ms=!0)},rc=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",sc=e=>e.namespaceURI.includes("MathML"),tn=e=>{if(rc(e))return"svg";if(sc(e))return"mathml"},nn=e=>e.nodeType===8;function oc(e){const{mt:t,p:n,o:{patchProp:r,createText:s,nextSibling:o,parentNode:i,remove:l,insert:c,createComment:a}}=e,f=(p,y)=>{if(!y.hasChildNodes()){n(null,p,y),_n(),y._vnode=p;return}h(y.firstChild,p,null,null,null),_n(),y._vnode=p},h=(p,y,P,A,F,$=!1)=>{$=$||!!y.dynamicChildren;const I=nn(p)&&p.data==="[",w=()=>L(p,y,P,A,F,I),{type:N,ref:T,shapeFlag:G,patchFlag:ne}=y;let ce=p.nodeType;y.el=p,ne===-2&&($=!1,y.dynamicChildren=null);let D=null;switch(N){case Et:ce!==3?y.children===""?(c(y.el=s(""),i(p),p),D=p):D=w():(p.data!==y.children&&(pt(),p.data=y.children),D=o(p));break;case me:V(p)?(D=o(p),W(y.el=p.content.firstChild,p,P)):ce!==8||I?D=w():D=o(p);break;case Mt:if(I&&(p=o(p),ce=p.nodeType),ce===1||ce===3){D=p;const X=!y.children.length;for(let j=0;j{$=$||!!y.dynamicChildren;const{type:I,props:w,patchFlag:N,shapeFlag:T,dirs:G,transition:ne}=y,ce=I==="input"||I==="option";if(ce||N!==-1){G&&Pe(y,null,P,"created");let D=!1;if(V(p)){D=Ko(A,ne)&&P&&P.vnode.props&&P.vnode.props.appear;const j=p.content.firstChild;D&&ne.beforeEnter(j),W(j,p,P),y.el=p=j}if(T&16&&!(w&&(w.innerHTML||w.textContent))){let j=_(p.firstChild,y,p,P,A,F,$);for(;j;){pt();const He=j;j=j.nextSibling,l(He)}}else T&8&&p.textContent!==y.children&&(pt(),p.textContent=y.children);if(w)if(ce||!$||N&48)for(const j in w)(ce&&(j.endsWith("value")||j==="indeterminate")||kt(j)&&!_t(j)||j[0]===".")&&r(p,j,null,w[j],void 0,void 0,P);else w.onClick&&r(p,"onClick",null,w.onClick,void 0,void 0,P);let X;(X=w&&w.onVnodeBeforeMount)&&Ce(X,P,y),G&&Pe(y,null,P,"beforeMount"),((X=w&&w.onVnodeMounted)||G||D)&&Lo(()=>{X&&Ce(X,P,y),D&&ne.enter(p),G&&Pe(y,null,P,"mounted")},A)}return p.nextSibling},_=(p,y,P,A,F,$,I)=>{I=I||!!y.dynamicChildren;const w=y.children,N=w.length;for(let T=0;T{const{slotScopeIds:I}=y;I&&(F=F?F.concat(I):I);const w=i(p),N=_(o(p),y,w,P,A,F,$);return N&&nn(N)&&N.data==="]"?o(y.anchor=N):(pt(),c(y.anchor=a("]"),w,N),N)},L=(p,y,P,A,F,$)=>{if(pt(),y.el=null,$){const N=k(p);for(;;){const T=o(p);if(T&&T!==N)l(T);else break}}const I=o(p),w=i(p);return l(p),n(null,y,w,I,P,A,tn(w),F),I},k=(p,y="[",P="]")=>{let A=0;for(;p;)if(p=o(p),p&&nn(p)&&(p.data===y&&A++,p.data===P)){if(A===0)return o(p);A--}return p},W=(p,y,P)=>{const A=y.parentNode;A&&A.replaceChild(p,y);let F=P;for(;F;)F.vnode.el===y&&(F.vnode.el=F.subTree.el=p),F=F.parent},V=p=>p.nodeType===1&&p.tagName.toLowerCase()==="template";return[f,h]}const ye=Lo;function ic(e){return ko(e)}function lc(e){return ko(e,oc)}function ko(e,t){const n=to();n.__VUE__=!0;const{insert:r,remove:s,patchProp:o,createElement:i,createText:l,createComment:c,setText:a,setElementText:f,parentNode:h,nextSibling:m,setScopeId:_=xe,insertStaticContent:C}=e,L=(u,d,g,v=null,b=null,S=null,O=void 0,x=null,R=!!d.dynamicChildren)=>{if(u===d)return;u&&!lt(u,d)&&(v=Xt(u),Le(u,b,S,!0),u=null),d.patchFlag===-2&&(R=!1,d.dynamicChildren=null);const{type:E,ref:M,shapeFlag:U}=d;switch(E){case Et:k(u,d,g,v);break;case me:W(u,d,g,v);break;case Mt:u==null&&V(d,g,v,O);break;case _e:T(u,d,g,v,b,S,O,x,R);break;default:U&1?P(u,d,g,v,b,S,O,x,R):U&6?G(u,d,g,v,b,S,O,x,R):(U&64||U&128)&&E.process(u,d,g,v,b,S,O,x,R,dt)}M!=null&&b&&wn(M,u&&u.ref,S,d||u,!d)},k=(u,d,g,v)=>{if(u==null)r(d.el=l(d.children),g,v);else{const b=d.el=u.el;d.children!==u.children&&a(b,d.children)}},W=(u,d,g,v)=>{u==null?r(d.el=c(d.children||""),g,v):d.el=u.el},V=(u,d,g,v)=>{[u.el,u.anchor]=C(u.children,d,g,v,u.el,u.anchor)},p=({el:u,anchor:d},g,v)=>{let b;for(;u&&u!==d;)b=m(u),r(u,g,v),u=b;r(d,g,v)},y=({el:u,anchor:d})=>{let g;for(;u&&u!==d;)g=m(u),s(u),u=g;s(d)},P=(u,d,g,v,b,S,O,x,R)=>{d.type==="svg"?O="svg":d.type==="math"&&(O="mathml"),u==null?A(d,g,v,b,S,O,x,R):I(u,d,b,S,O,x,R)},A=(u,d,g,v,b,S,O,x)=>{let R,E;const{props:M,shapeFlag:U,transition:H,dirs:q}=u;if(R=u.el=i(u.type,S,M&&M.is,M),U&8?f(R,u.children):U&16&&$(u.children,R,null,v,b,Gn(u,S),O,x),q&&Pe(u,null,v,"created"),F(R,u,u.scopeId,O,v),M){for(const ee in M)ee!=="value"&&!_t(ee)&&o(R,ee,null,M[ee],S,u.children,v,b,je);"value"in M&&o(R,"value",null,M.value,S),(E=M.onVnodeBeforeMount)&&Ce(E,v,u)}q&&Pe(u,null,v,"beforeMount");const z=Ko(b,H);z&&H.beforeEnter(R),r(R,d,g),((E=M&&M.onVnodeMounted)||z||q)&&ye(()=>{E&&Ce(E,v,u),z&&H.enter(R),q&&Pe(u,null,v,"mounted")},b)},F=(u,d,g,v,b)=>{if(g&&_(u,g),v)for(let S=0;S{for(let E=R;E{const x=d.el=u.el;let{patchFlag:R,dynamicChildren:E,dirs:M}=d;R|=u.patchFlag&16;const U=u.props||te,H=d.props||te;let q;if(g&&rt(g,!1),(q=H.onVnodeBeforeUpdate)&&Ce(q,g,d,u),M&&Pe(d,u,g,"beforeUpdate"),g&&rt(g,!0),E?w(u.dynamicChildren,E,x,g,v,Gn(d,b),S):O||j(u,d,x,null,g,v,Gn(d,b),S,!1),R>0){if(R&16)N(x,d,U,H,g,v,b);else if(R&2&&U.class!==H.class&&o(x,"class",null,H.class,b),R&4&&o(x,"style",U.style,H.style,b),R&8){const z=d.dynamicProps;for(let ee=0;ee{q&&Ce(q,g,d,u),M&&Pe(d,u,g,"updated")},v)},w=(u,d,g,v,b,S,O)=>{for(let x=0;x{if(g!==v){if(g!==te)for(const x in g)!_t(x)&&!(x in v)&&o(u,x,g[x],null,O,d.children,b,S,je);for(const x in v){if(_t(x))continue;const R=v[x],E=g[x];R!==E&&x!=="value"&&o(u,x,E,R,O,d.children,b,S,je)}"value"in v&&o(u,"value",g.value,v.value,O)}},T=(u,d,g,v,b,S,O,x,R)=>{const E=d.el=u?u.el:l(""),M=d.anchor=u?u.anchor:l("");let{patchFlag:U,dynamicChildren:H,slotScopeIds:q}=d;q&&(x=x?x.concat(q):q),u==null?(r(E,g,v),r(M,g,v),$(d.children||[],g,M,b,S,O,x,R)):U>0&&U&64&&H&&u.dynamicChildren?(w(u.dynamicChildren,H,g,b,S,O,x),(d.key!=null||b&&d===b.subTree)&&Dr(u,d,!0)):j(u,d,g,M,b,S,O,x,R)},G=(u,d,g,v,b,S,O,x,R)=>{d.slotScopeIds=x,u==null?d.shapeFlag&512?b.ctx.activate(d,g,v,O,R):ne(d,g,v,b,S,O,R):ce(u,d,R)},ne=(u,d,g,v,b,S,O)=>{const x=u.component=Ac(u,v,b);if(Wt(u)&&(x.ctx.renderer=dt),Rc(x),x.asyncDep){if(b&&b.registerDep(x,D,O),!u.el){const R=x.subTree=ie(me);W(null,R,d,g)}}else D(x,u,d,g,b,S,O)},ce=(u,d,g)=>{const v=d.component=u.component;if(Pl(u,d,g))if(v.asyncDep&&!v.asyncResolved){X(v,d,g);return}else v.next=d,Sl(v.update),v.effect.dirty=!0,v.update();else d.el=u.el,v.vnode=d},D=(u,d,g,v,b,S,O)=>{const x=()=>{if(u.isMounted){let{next:M,bu:U,u:H,parent:q,vnode:z}=u;{const ht=Wo(u);if(ht){M&&(M.el=z.el,X(u,M,O)),ht.asyncDep.then(()=>{u.isUnmounted||x()});return}}let ee=M,Q;rt(u,!1),M?(M.el=z.el,X(u,M,O)):M=z,U&&fn(U),(Q=M.props&&M.props.onVnodeBeforeUpdate)&&Ce(Q,q,M,z),rt(u,!0);const ae=Kn(u),Te=u.subTree;u.subTree=ae,L(Te,ae,h(Te.el),Xt(Te),u,b,S),M.el=ae.el,ee===null&&Ml(u,ae.el),H&&ye(H,b),(Q=M.props&&M.props.onVnodeUpdated)&&ye(()=>Ce(Q,q,M,z),b)}else{let M;const{el:U,props:H}=d,{bm:q,m:z,parent:ee}=u,Q=bt(d);if(rt(u,!1),q&&fn(q),!Q&&(M=H&&H.onVnodeBeforeMount)&&Ce(M,ee,d),rt(u,!0),U&&Bn){const ae=()=>{u.subTree=Kn(u),Bn(U,u.subTree,u,b,null)};Q?d.type.__asyncLoader().then(()=>!u.isUnmounted&&ae()):ae()}else{const ae=u.subTree=Kn(u);L(null,ae,g,v,u,b,S),d.el=ae.el}if(z&&ye(z,b),!Q&&(M=H&&H.onVnodeMounted)){const ae=d;ye(()=>Ce(M,ee,ae),b)}(d.shapeFlag&256||ee&&bt(ee.vnode)&&ee.vnode.shapeFlag&256)&&u.a&&ye(u.a,b),u.isMounted=!0,d=g=v=null}},R=u.effect=new Ar(x,xe,()=>Pn(E),u.scope),E=u.update=()=>{R.dirty&&R.run()};E.id=u.uid,rt(u,!0),E()},X=(u,d,g)=>{d.component=u;const v=u.vnode.props;u.vnode=d,u.next=null,Zl(u,d.props,v,g),nc(u,d.children,g),et(),os(u),tt()},j=(u,d,g,v,b,S,O,x,R=!1)=>{const E=u&&u.children,M=u?u.shapeFlag:0,U=d.children,{patchFlag:H,shapeFlag:q}=d;if(H>0){if(H&128){zt(E,U,g,v,b,S,O,x,R);return}else if(H&256){He(E,U,g,v,b,S,O,x,R);return}}q&8?(M&16&&je(E,b,S),U!==E&&f(g,U)):M&16?q&16?zt(E,U,g,v,b,S,O,x,R):je(E,b,S,!0):(M&8&&f(g,""),q&16&&$(U,g,v,b,S,O,x,R))},He=(u,d,g,v,b,S,O,x,R)=>{u=u||mt,d=d||mt;const E=u.length,M=d.length,U=Math.min(E,M);let H;for(H=0;HM?je(u,b,S,!0,!1,U):$(d,g,v,b,S,O,x,R,U)},zt=(u,d,g,v,b,S,O,x,R)=>{let E=0;const M=d.length;let U=u.length-1,H=M-1;for(;E<=U&&E<=H;){const q=u[E],z=d[E]=R?Ge(d[E]):Ae(d[E]);if(lt(q,z))L(q,z,g,null,b,S,O,x,R);else break;E++}for(;E<=U&&E<=H;){const q=u[U],z=d[H]=R?Ge(d[H]):Ae(d[H]);if(lt(q,z))L(q,z,g,null,b,S,O,x,R);else break;U--,H--}if(E>U){if(E<=H){const q=H+1,z=qH)for(;E<=U;)Le(u[E],b,S,!0),E++;else{const q=E,z=E,ee=new Map;for(E=z;E<=H;E++){const be=d[E]=R?Ge(d[E]):Ae(d[E]);be.key!=null&&ee.set(be.key,E)}let Q,ae=0;const Te=H-z+1;let ht=!1,zr=0;const St=new Array(Te);for(E=0;E=Te){Le(be,b,S,!0);continue}let Ie;if(be.key!=null)Ie=ee.get(be.key);else for(Q=z;Q<=H;Q++)if(St[Q-z]===0&<(be,d[Q])){Ie=Q;break}Ie===void 0?Le(be,b,S,!0):(St[Ie-z]=E+1,Ie>=zr?zr=Ie:ht=!0,L(be,d[Ie],g,null,b,S,O,x,R),ae++)}const Xr=ht?cc(St):mt;for(Q=Xr.length-1,E=Te-1;E>=0;E--){const be=z+E,Ie=d[be],Yr=be+1{const{el:S,type:O,transition:x,children:R,shapeFlag:E}=u;if(E&6){nt(u.component.subTree,d,g,v);return}if(E&128){u.suspense.move(d,g,v);return}if(E&64){O.move(u,d,g,dt);return}if(O===_e){r(S,d,g);for(let U=0;Ux.enter(S),b);else{const{leave:U,delayLeave:H,afterLeave:q}=x,z=()=>r(S,d,g),ee=()=>{U(S,()=>{z(),q&&q()})};H?H(S,z,ee):ee()}else r(S,d,g)},Le=(u,d,g,v=!1,b=!1)=>{const{type:S,props:O,ref:x,children:R,dynamicChildren:E,shapeFlag:M,patchFlag:U,dirs:H,memoIndex:q}=u;if(U===-2&&(b=!1),x!=null&&wn(x,null,g,u,!0),q!=null&&(d.renderCache[q]=void 0),M&256){d.ctx.deactivate(u);return}const z=M&1&&H,ee=!bt(u);let Q;if(ee&&(Q=O&&O.onVnodeBeforeUnmount)&&Ce(Q,d,u),M&6)Li(u.component,g,v);else{if(M&128){u.suspense.unmount(g,v);return}z&&Pe(u,null,d,"beforeUnmount"),M&64?u.type.remove(u,d,g,dt,v):E&&(S!==_e||U>0&&U&64)?je(E,d,g,!1,!0):(S===_e&&U&384||!b&&M&16)&&je(R,d,g),v&&qr(u)}(ee&&(Q=O&&O.onVnodeUnmounted)||z)&&ye(()=>{Q&&Ce(Q,d,u),z&&Pe(u,null,d,"unmounted")},g)},qr=u=>{const{type:d,el:g,anchor:v,transition:b}=u;if(d===_e){Oi(g,v);return}if(d===Mt){y(u);return}const S=()=>{s(g),b&&!b.persisted&&b.afterLeave&&b.afterLeave()};if(u.shapeFlag&1&&b&&!b.persisted){const{leave:O,delayLeave:x}=b,R=()=>O(g,S);x?x(u.el,S,R):R()}else S()},Oi=(u,d)=>{let g;for(;u!==d;)g=m(u),s(u),u=g;s(d)},Li=(u,d,g)=>{const{bum:v,scope:b,update:S,subTree:O,um:x,m:R,a:E}=u;ys(R),ys(E),v&&fn(v),b.stop(),S&&(S.active=!1,Le(O,u,d,g)),x&&ye(x,d),ye(()=>{u.isUnmounted=!0},d),d&&d.pendingBranch&&!d.isUnmounted&&u.asyncDep&&!u.asyncResolved&&u.suspenseId===d.pendingId&&(d.deps--,d.deps===0&&d.resolve())},je=(u,d,g,v=!1,b=!1,S=0)=>{for(let O=S;Ou.shapeFlag&6?Xt(u.component.subTree):u.shapeFlag&128?u.suspense.next():m(u.anchor||u.el);let Dn=!1;const Gr=(u,d,g)=>{u==null?d._vnode&&Le(d._vnode,null,null,!0):L(d._vnode||null,u,d,null,null,null,g),Dn||(Dn=!0,os(),_n(),Dn=!1),d._vnode=u},dt={p:L,um:Le,m:nt,r:qr,mt:ne,mc:$,pc:j,pbc:w,n:Xt,o:e};let Un,Bn;return t&&([Un,Bn]=t(dt)),{render:Gr,hydrate:Un,createApp:Yl(Gr,Un)}}function Gn({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function rt({effect:e,update:t},n){e.allowRecurse=t.allowRecurse=n}function Ko(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Dr(e,t,n=!1){const r=e.children,s=t.children;if(B(r)&&B(s))for(let o=0;o>1,e[n[l]]0&&(t[r]=n[o-1]),n[o]=r)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=t[i];return n}function Wo(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Wo(t)}function ys(e){if(e)for(let t=0;twt(ac);function Ur(e,t){return Hn(e,null,t)}function pu(e,t){return Hn(e,null,{flush:"post"})}const rn={};function Ne(e,t,n){return Hn(e,t,n)}function Hn(e,t,{immediate:n,deep:r,flush:s,once:o,onTrack:i,onTrigger:l}=te){if(t&&o){const A=t;t=(...F)=>{A(...F),P()}}const c=ue,a=A=>r===!0?A:ze(A,r===!1?1:void 0);let f,h=!1,m=!1;if(de(e)?(f=()=>e.value,h=yn(e)):Rt(e)?(f=()=>a(e),h=!0):B(e)?(m=!0,h=e.some(A=>Rt(A)||yn(A)),f=()=>e.map(A=>{if(de(A))return A.value;if(Rt(A))return a(A);if(K(A))return Ye(A,c,2)})):K(e)?t?f=()=>Ye(e,c,2):f=()=>(_&&_(),Se(e,c,3,[C])):f=xe,t&&r){const A=f;f=()=>ze(A())}let _,C=A=>{_=p.onStop=()=>{Ye(A,c,4),_=p.onStop=void 0}},L;if(Gt)if(C=xe,t?n&&Se(t,c,3,[f(),m?[]:void 0,C]):f(),s==="sync"){const A=uc();L=A.__watcherHandles||(A.__watcherHandles=[])}else return xe;let k=m?new Array(e.length).fill(rn):rn;const W=()=>{if(!(!p.active||!p.dirty))if(t){const A=p.run();(r||h||(m?A.some((F,$)=>Je(F,k[$])):Je(A,k)))&&(_&&_(),Se(t,c,3,[A,k===rn?void 0:m&&k[0]===rn?[]:k,C]),k=A)}else p.run()};W.allowRecurse=!!t;let V;s==="sync"?V=W:s==="post"?V=()=>ye(W,c&&c.suspense):(W.pre=!0,c&&(W.id=c.uid),V=()=>Pn(W));const p=new Ar(f,xe,V),y=oo(),P=()=>{p.stop(),y&&Cr(y.effects,p)};return t?n?W():k=p.run():s==="post"?ye(p.run.bind(p),c&&c.suspense):p.run(),L&&L.push(P),P}function fc(e,t,n){const r=this.proxy,s=oe(e)?e.includes(".")?qo(r,e):()=>r[e]:e.bind(r,r);let o;K(t)?o=t:(o=t.handler,n=t);const i=qt(this),l=Hn(s,o.bind(r),n);return i(),l}function qo(e,t){const n=t.split(".");return()=>{let r=e;for(let s=0;s{ze(r,t,n)});else if(Zs(e)){for(const r in e)ze(e[r],t,n);for(const r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&ze(e[r],t,n)}return e}const Wt=e=>e.type.__isKeepAlive;function dc(e,t){Go(e,"a",t)}function hc(e,t){Go(e,"da",t)}function Go(e,t,n=ue){const r=e.__wdc||(e.__wdc=()=>{let s=n;for(;s;){if(s.isDeactivated)return;s=s.parent}return e()});if(Fn(t,r,n),n){let s=n.parent;for(;s&&s.parent;)Wt(s.parent.vnode)&&pc(r,t,n,s),s=s.parent}}function pc(e,t,n,r){const s=Fn(t,e,r,!0);$n(()=>{Cr(r[t],s)},n)}const qe=Symbol("_leaveCb"),sn=Symbol("_enterCb");function gc(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return xt(()=>{e.isMounted=!0}),Io(()=>{e.isUnmounting=!0}),e}const Ee=[Function,Array],zo={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Ee,onEnter:Ee,onAfterEnter:Ee,onEnterCancelled:Ee,onBeforeLeave:Ee,onLeave:Ee,onAfterLeave:Ee,onLeaveCancelled:Ee,onBeforeAppear:Ee,onAppear:Ee,onAfterAppear:Ee,onAppearCancelled:Ee},Xo=e=>{const t=e.subTree;return t.component?Xo(t.component):t},mc={name:"BaseTransition",props:zo,setup(e,{slots:t}){const n=jn(),r=gc();return()=>{const s=t.default&&Jo(t.default(),!0);if(!s||!s.length)return;let o=s[0];if(s.length>1){for(const m of s)if(m.type!==me){o=m;break}}const i=J(e),{mode:l}=i;if(r.isLeaving)return zn(o);const c=_s(o);if(!c)return zn(o);let a=yr(c,i,r,n,m=>a=m);En(c,a);const f=n.subTree,h=f&&_s(f);if(h&&h.type!==me&&!lt(c,h)&&Xo(n).type!==me){const m=yr(h,i,r,n);if(En(h,m),l==="out-in"&&c.type!==me)return r.isLeaving=!0,m.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&(n.effect.dirty=!0,n.update())},zn(o);l==="in-out"&&c.type!==me&&(m.delayLeave=(_,C,L)=>{const k=Yo(r,h);k[String(h.key)]=h,_[qe]=()=>{C(),_[qe]=void 0,delete a.delayedLeave},a.delayedLeave=L})}return o}}},yc=mc;function Yo(e,t){const{leavingVNodes:n}=e;let r=n.get(t.type);return r||(r=Object.create(null),n.set(t.type,r)),r}function yr(e,t,n,r,s){const{appear:o,mode:i,persisted:l=!1,onBeforeEnter:c,onEnter:a,onAfterEnter:f,onEnterCancelled:h,onBeforeLeave:m,onLeave:_,onAfterLeave:C,onLeaveCancelled:L,onBeforeAppear:k,onAppear:W,onAfterAppear:V,onAppearCancelled:p}=t,y=String(e.key),P=Yo(n,e),A=(I,w)=>{I&&Se(I,r,9,w)},F=(I,w)=>{const N=w[1];A(I,w),B(I)?I.every(T=>T.length<=1)&&N():I.length<=1&&N()},$={mode:i,persisted:l,beforeEnter(I){let w=c;if(!n.isMounted)if(o)w=k||c;else return;I[qe]&&I[qe](!0);const N=P[y];N&<(e,N)&&N.el[qe]&&N.el[qe](),A(w,[I])},enter(I){let w=a,N=f,T=h;if(!n.isMounted)if(o)w=W||a,N=V||f,T=p||h;else return;let G=!1;const ne=I[sn]=ce=>{G||(G=!0,ce?A(T,[I]):A(N,[I]),$.delayedLeave&&$.delayedLeave(),I[sn]=void 0)};w?F(w,[I,ne]):ne()},leave(I,w){const N=String(e.key);if(I[sn]&&I[sn](!0),n.isUnmounting)return w();A(m,[I]);let T=!1;const G=I[qe]=ne=>{T||(T=!0,w(),ne?A(L,[I]):A(C,[I]),I[qe]=void 0,P[N]===e&&delete P[N])};P[N]=e,_?F(_,[I,G]):G()},clone(I){const w=yr(I,t,n,r,s);return s&&s(w),w}};return $}function zn(e){if(Wt(e))return e=Qe(e),e.children=null,e}function _s(e){if(!Wt(e))return e;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&K(n.default))return n.default()}}function En(e,t){e.shapeFlag&6&&e.component?En(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Jo(e,t=!1,n){let r=[],s=0;for(let o=0;o1)for(let o=0;oe.__isTeleport,Pt=e=>e&&(e.disabled||e.disabled===""),vs=e=>typeof SVGElement<"u"&&e instanceof SVGElement,bs=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,_r=(e,t)=>{const n=e&&e.to;return oe(n)?t?t(n):null:n},vc={name:"Teleport",__isTeleport:!0,process(e,t,n,r,s,o,i,l,c,a){const{mc:f,pc:h,pbc:m,o:{insert:_,querySelector:C,createText:L,createComment:k}}=a,W=Pt(t.props);let{shapeFlag:V,children:p,dynamicChildren:y}=t;if(e==null){const P=t.el=L(""),A=t.anchor=L("");_(P,n,r),_(A,n,r);const F=t.target=_r(t.props,C),$=t.targetAnchor=L("");F&&(_($,F),i==="svg"||vs(F)?i="svg":(i==="mathml"||bs(F))&&(i="mathml"));const I=(w,N)=>{V&16&&f(p,w,N,s,o,i,l,c)};W?I(n,A):F&&I(F,$)}else{t.el=e.el;const P=t.anchor=e.anchor,A=t.target=e.target,F=t.targetAnchor=e.targetAnchor,$=Pt(e.props),I=$?n:A,w=$?P:F;if(i==="svg"||vs(A)?i="svg":(i==="mathml"||bs(A))&&(i="mathml"),y?(m(e.dynamicChildren,y,I,s,o,i,l),Dr(e,t,!0)):c||h(e,t,I,w,s,o,i,l,!1),W)$?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):on(t,n,P,a,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const N=t.target=_r(t.props,C);N&&on(t,N,null,a,0)}else $&&on(t,A,F,a,1)}Qo(t)},remove(e,t,n,{um:r,o:{remove:s}},o){const{shapeFlag:i,children:l,anchor:c,targetAnchor:a,target:f,props:h}=e;if(f&&s(a),o&&s(c),i&16){const m=o||!Pt(h);for(let _=0;_0?Re||mt:null,wc(),Dt>0&&Re&&Re.push(e),e}function mu(e,t,n,r,s,o){return ei(ri(e,t,n,r,s,o,!0))}function ti(e,t,n,r,s){return ei(ie(e,t,n,r,s,!0))}function Cn(e){return e?e.__v_isVNode===!0:!1}function lt(e,t){return e.type===t.type&&e.key===t.key}const ni=({key:e})=>e??null,hn=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?oe(e)||de(e)||K(e)?{i:fe,r:e,k:t,f:!!n}:e:null);function ri(e,t=null,n=null,r=0,s=null,o=e===_e?0:1,i=!1,l=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ni(t),ref:t&&hn(t),scopeId:Nn,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:r,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:fe};return l?(Br(c,n),o&128&&e.normalize(c)):n&&(c.shapeFlag|=oe(n)?8:16),Dt>0&&!i&&Re&&(c.patchFlag>0||o&6)&&c.patchFlag!==32&&Re.push(c),c}const ie=Ec;function Ec(e,t=null,n=null,r=0,s=null,o=!1){if((!e||e===Ro)&&(e=me),Cn(e)){const l=Qe(e,t,!0);return n&&Br(l,n),Dt>0&&!o&&Re&&(l.shapeFlag&6?Re[Re.indexOf(e)]=l:Re.push(l)),l.patchFlag=-2,l}if(Pc(e)&&(e=e.__vccOpts),t){t=Cc(t);let{class:l,style:c}=t;l&&!oe(l)&&(t.class=Tr(l)),Z(c)&&(_o(c)&&!B(c)&&(c=le({},c)),t.style=Sr(c))}const i=oe(e)?1:Nl(e)?128:_c(e)?64:Z(e)?4:K(e)?2:0;return ri(e,t,n,r,s,i,o,!0)}function Cc(e){return e?_o(e)||Ho(e)?le({},e):e:null}function Qe(e,t,n=!1,r=!1){const{props:s,ref:o,patchFlag:i,children:l,transition:c}=e,a=t?xc(s||{},t):s,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:a,key:a&&ni(a),ref:t&&t.ref?n&&o?B(o)?o.concat(hn(t)):[o,hn(t)]:hn(t):o,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==_e?i===-1?16:i|16:i,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Qe(e.ssContent),ssFallback:e.ssFallback&&Qe(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&r&&En(f,c.clone(f)),f}function si(e=" ",t=0){return ie(Et,null,e,t)}function yu(e,t){const n=ie(Mt,null,e);return n.staticCount=t,n}function _u(e="",t=!1){return t?(Zo(),ti(me,null,e)):ie(me,null,e)}function Ae(e){return e==null||typeof e=="boolean"?ie(me):B(e)?ie(_e,null,e.slice()):typeof e=="object"?Ge(e):ie(Et,null,String(e))}function Ge(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Qe(e)}function Br(e,t){let n=0;const{shapeFlag:r}=e;if(t==null)t=null;else if(B(t))n=16;else if(typeof t=="object")if(r&65){const s=t.default;s&&(s._c&&(s._d=!1),Br(e,s()),s._c&&(s._d=!0));return}else{n=32;const s=t._;!s&&!Ho(t)?t._ctx=fe:s===3&&fe&&(fe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else K(t)?(t={default:t,_ctx:fe},n=32):(t=String(t),r&64?(n=16,t=[si(t)]):n=8);e.children=t,e.shapeFlag|=n}function xc(...e){const t={};for(let n=0;nue||fe;let xn,vr;{const e=to(),t=(n,r)=>{let s;return(s=e[n])||(s=e[n]=[]),s.push(r),o=>{s.length>1?s.forEach(i=>i(o)):s[0](o)}};xn=t("__VUE_INSTANCE_SETTERS__",n=>ue=n),vr=t("__VUE_SSR_SETTERS__",n=>Gt=n)}const qt=e=>{const t=ue;return xn(e),e.scope.on(),()=>{e.scope.off(),xn(t)}},Es=()=>{ue&&ue.scope.off(),xn(null)};function oi(e){return e.vnode.shapeFlag&4}let Gt=!1;function Rc(e,t=!1){t&&vr(t);const{props:n,children:r}=e.vnode,s=oi(e);Ql(e,n,s,t),tc(e,r);const o=s?Oc(e,t):void 0;return t&&vr(!1),o}function Oc(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Bl);const{setup:r}=n;if(r){const s=e.setupContext=r.length>1?li(e):null,o=qt(e);et();const i=Ye(r,e,0,[e.props,s]);if(tt(),o(),Js(i)){if(i.then(Es,Es),t)return i.then(l=>{Cs(e,l,t)}).catch(l=>{Kt(l,e,0)});e.asyncDep=i}else Cs(e,i,t)}else ii(e,t)}function Cs(e,t,n){K(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Z(t)&&(e.setupState=Eo(t)),ii(e,n)}let xs;function ii(e,t,n){const r=e.type;if(!e.render){if(!t&&xs&&!r.render){const s=r.template||jr(e).template;if(s){const{isCustomElement:o,compilerOptions:i}=e.appContext.config,{delimiters:l,compilerOptions:c}=r,a=le(le({isCustomElement:o,delimiters:l},i),c);r.render=xs(s,a)}}e.render=r.render||xe}{const s=qt(e);et();try{Kl(e)}finally{tt(),s()}}}const Lc={get(e,t){return ve(e,"get",""),e[t]}};function li(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Lc),slots:e.slots,emit:e.emit,expose:t}}function Vn(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Eo(dn(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Lt)return Lt[n](e)},has(t,n){return n in t||n in Lt}})):e.proxy}function Ic(e,t=!0){return K(e)?e.displayName||e.name:e.name||t&&e.__name}function Pc(e){return K(e)&&"__vccOpts"in e}const re=(e,t)=>pl(e,t,Gt);function br(e,t,n){const r=arguments.length;return r===2?Z(t)&&!B(t)?Cn(t)?ie(e,null,[t]):ie(e,t):ie(e,null,t):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&Cn(n)&&(n=[n]),ie(e,t,n))}const Mc="3.4.31";/** -* @vue/runtime-dom v3.4.31 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/const Nc="http://www.w3.org/2000/svg",Fc="http://www.w3.org/1998/Math/MathML",Ve=typeof document<"u"?document:null,Ss=Ve&&Ve.createElement("template"),$c={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,r)=>{const s=t==="svg"?Ve.createElementNS(Nc,e):t==="mathml"?Ve.createElementNS(Fc,e):n?Ve.createElement(e,{is:n}):Ve.createElement(e);return e==="select"&&r&&r.multiple!=null&&s.setAttribute("multiple",r.multiple),s},createText:e=>Ve.createTextNode(e),createComment:e=>Ve.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ve.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,r,s,o){const i=n?n.previousSibling:t.lastChild;if(s&&(s===o||s.nextSibling))for(;t.insertBefore(s.cloneNode(!0),n),!(s===o||!(s=s.nextSibling)););else{Ss.innerHTML=r==="svg"?`${e}`:r==="mathml"?`${e}`:e;const l=Ss.content;if(r==="svg"||r==="mathml"){const c=l.firstChild;for(;c.firstChild;)l.appendChild(c.firstChild);l.removeChild(c)}t.insertBefore(l,n)}return[i?i.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},ke="transition",Tt="animation",Ut=Symbol("_vtc"),ci=(e,{slots:t})=>br(yc,Hc(e),t);ci.displayName="Transition";const ai={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};ci.props=le({},zo,ai);const st=(e,t=[])=>{B(e)?e.forEach(n=>n(...t)):e&&e(...t)},Ts=e=>e?B(e)?e.some(t=>t.length>1):e.length>1:!1;function Hc(e){const t={};for(const T in e)T in ai||(t[T]=e[T]);if(e.css===!1)return t;const{name:n="v",type:r,duration:s,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:c=o,appearActiveClass:a=i,appearToClass:f=l,leaveFromClass:h=`${n}-leave-from`,leaveActiveClass:m=`${n}-leave-active`,leaveToClass:_=`${n}-leave-to`}=e,C=jc(s),L=C&&C[0],k=C&&C[1],{onBeforeEnter:W,onEnter:V,onEnterCancelled:p,onLeave:y,onLeaveCancelled:P,onBeforeAppear:A=W,onAppear:F=V,onAppearCancelled:$=p}=t,I=(T,G,ne)=>{ot(T,G?f:l),ot(T,G?a:i),ne&&ne()},w=(T,G)=>{T._isLeaving=!1,ot(T,h),ot(T,_),ot(T,m),G&&G()},N=T=>(G,ne)=>{const ce=T?F:V,D=()=>I(G,T,ne);st(ce,[G,D]),As(()=>{ot(G,T?c:o),Ke(G,T?f:l),Ts(ce)||Rs(G,r,L,D)})};return le(t,{onBeforeEnter(T){st(W,[T]),Ke(T,o),Ke(T,i)},onBeforeAppear(T){st(A,[T]),Ke(T,c),Ke(T,a)},onEnter:N(!1),onAppear:N(!0),onLeave(T,G){T._isLeaving=!0;const ne=()=>w(T,G);Ke(T,h),Ke(T,m),Uc(),As(()=>{T._isLeaving&&(ot(T,h),Ke(T,_),Ts(y)||Rs(T,r,k,ne))}),st(y,[T,ne])},onEnterCancelled(T){I(T,!1),st(p,[T])},onAppearCancelled(T){I(T,!0),st($,[T])},onLeaveCancelled(T){w(T),st(P,[T])}})}function jc(e){if(e==null)return null;if(Z(e))return[Xn(e.enter),Xn(e.leave)];{const t=Xn(e);return[t,t]}}function Xn(e){return $i(e)}function Ke(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Ut]||(e[Ut]=new Set)).add(t)}function ot(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.remove(r));const n=e[Ut];n&&(n.delete(t),n.size||(e[Ut]=void 0))}function As(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Vc=0;function Rs(e,t,n,r){const s=e._endId=++Vc,o=()=>{s===e._endId&&r()};if(n)return setTimeout(o,n);const{type:i,timeout:l,propCount:c}=Dc(e,t);if(!i)return r();const a=i+"end";let f=0;const h=()=>{e.removeEventListener(a,m),o()},m=_=>{_.target===e&&++f>=c&&h()};setTimeout(()=>{f(n[C]||"").split(", "),s=r(`${ke}Delay`),o=r(`${ke}Duration`),i=Os(s,o),l=r(`${Tt}Delay`),c=r(`${Tt}Duration`),a=Os(l,c);let f=null,h=0,m=0;t===ke?i>0&&(f=ke,h=i,m=o.length):t===Tt?a>0&&(f=Tt,h=a,m=c.length):(h=Math.max(i,a),f=h>0?i>a?ke:Tt:null,m=f?f===ke?o.length:c.length:0);const _=f===ke&&/\b(transform|all)(,|$)/.test(r(`${ke}Property`).toString());return{type:f,timeout:h,propCount:m,hasTransform:_}}function Os(e,t){for(;e.lengthLs(n)+Ls(e[r])))}function Ls(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Uc(){return document.body.offsetHeight}function Bc(e,t,n){const r=e[Ut];r&&(t=(t?[t,...r]:[...r]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Is=Symbol("_vod"),kc=Symbol("_vsh"),Kc=Symbol(""),Wc=/(^|;)\s*display\s*:/;function qc(e,t,n){const r=e.style,s=oe(n);let o=!1;if(n&&!s){if(t)if(oe(t))for(const i of t.split(";")){const l=i.slice(0,i.indexOf(":")).trim();n[l]==null&&pn(r,l,"")}else for(const i in t)n[i]==null&&pn(r,i,"");for(const i in n)i==="display"&&(o=!0),pn(r,i,n[i])}else if(s){if(t!==n){const i=r[Kc];i&&(n+=";"+i),r.cssText=n,o=Wc.test(n)}}else t&&e.removeAttribute("style");Is in e&&(e[Is]=o?r.display:"",e[kc]&&(r.display="none"))}const Ps=/\s*!important$/;function pn(e,t,n){if(B(n))n.forEach(r=>pn(e,t,r));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const r=Gc(e,t);Ps.test(n)?e.setProperty(ft(r),n.replace(Ps,""),"important"):e[r]=n}}const Ms=["Webkit","Moz","ms"],Yn={};function Gc(e,t){const n=Yn[t];if(n)return n;let r=$e(t);if(r!=="filter"&&r in e)return Yn[t]=r;r=An(r);for(let s=0;sJn||(Qc.then(()=>Jn=0),Jn=Date.now());function ea(e,t){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;Se(ta(r,n.value),t,5,[r])};return n.value=e,n.attached=Zc(),n}function ta(e,t){if(B(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(r=>s=>!s._stopped&&r&&r(s))}else return t}const js=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,na=(e,t,n,r,s,o,i,l,c)=>{const a=s==="svg";t==="class"?Bc(e,r,a):t==="style"?qc(e,n,r):kt(t)?Er(t)||Yc(e,t,n,r,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):ra(e,t,r,a))?(zc(e,t,r,o,i,l,c),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Fs(e,t,r,a,i,t!=="value")):(t==="true-value"?e._trueValue=r:t==="false-value"&&(e._falseValue=r),Fs(e,t,r,a))};function ra(e,t,n,r){if(r)return!!(t==="innerHTML"||t==="textContent"||t in e&&js(t)&&K(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const s=e.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return js(t)&&oe(n)?!1:t in e}const Vs=e=>{const t=e.props["onUpdate:modelValue"]||!1;return B(t)?n=>fn(t,n):t};function sa(e){e.target.composing=!0}function Ds(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Qn=Symbol("_assign"),vu={created(e,{modifiers:{lazy:t,trim:n,number:r}},s){e[Qn]=Vs(s);const o=r||s.props&&s.props.type==="number";gt(e,t?"change":"input",i=>{if(i.target.composing)return;let l=e.value;n&&(l=l.trim()),o&&(l=cr(l)),e[Qn](l)}),n&>(e,"change",()=>{e.value=e.value.trim()}),t||(gt(e,"compositionstart",sa),gt(e,"compositionend",Ds),gt(e,"change",Ds))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:s,number:o}},i){if(e[Qn]=Vs(i),e.composing)return;const l=(o||e.type==="number")&&!/^0\d/.test(e.value)?cr(e.value):e.value,c=t??"";l!==c&&(document.activeElement===e&&e.type!=="range"&&(r&&t===n||s&&e.value.trim()===c)||(e.value=c))}},oa=["ctrl","shift","alt","meta"],ia={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>oa.some(n=>e[`${n}Key`]&&!t.includes(n))},bu=(e,t)=>{const n=e._withMods||(e._withMods={}),r=t.join(".");return n[r]||(n[r]=(s,...o)=>{for(let i=0;i{const n=e._withKeys||(e._withKeys={}),r=t.join(".");return n[r]||(n[r]=s=>{if(!("key"in s))return;const o=ft(s.key);if(t.some(i=>i===o||la[i]===o))return e(s)})},ui=le({patchProp:na},$c);let Ft,Us=!1;function ca(){return Ft||(Ft=ic(ui))}function aa(){return Ft=Us?Ft:lc(ui),Us=!0,Ft}const Eu=(...e)=>{const t=ca().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=di(r);if(!s)return;const o=t._component;!K(o)&&!o.render&&!o.template&&(o.template=s.innerHTML),s.innerHTML="";const i=n(s,!1,fi(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),i},t},Cu=(...e)=>{const t=aa().createApp(...e),{mount:n}=t;return t.mount=r=>{const s=di(r);if(s)return n(s,!0,fi(s))},t};function fi(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function di(e){return oe(e)?document.querySelector(e):e}const xu=(e,t)=>{const n=e.__vccOpts||e;for(const[r,s]of t)n[r]=s;return n},ua="modulepreload",fa=function(e){return"/GeometryOps.jl/previews/PR135/"+e},Bs={},Su=function(t,n,r){let s=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const o=document.querySelector("meta[property=csp-nonce]"),i=(o==null?void 0:o.nonce)||(o==null?void 0:o.getAttribute("nonce"));s=Promise.all(n.map(l=>{if(l=fa(l),l in Bs)return;Bs[l]=!0;const c=l.endsWith(".css"),a=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${a}`))return;const f=document.createElement("link");if(f.rel=c?"stylesheet":ua,c||(f.as="script",f.crossOrigin=""),f.href=l,i&&f.setAttribute("nonce",i),document.head.appendChild(f),c)return new Promise((h,m)=>{f.addEventListener("load",h),f.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${l}`)))})}))}return s.then(()=>t()).catch(o=>{const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=o,window.dispatchEvent(i),!i.defaultPrevented)throw o})},da=window.__VP_SITE_DATA__;function kr(e){return oo()?(qi(e),!0):!1}function Fe(e){return typeof e=="function"?e():wo(e)}const hi=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const ha=Object.prototype.toString,pa=e=>ha.call(e)==="[object Object]",Bt=()=>{},ks=ga();function ga(){var e,t;return hi&&((e=window==null?void 0:window.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window==null?void 0:window.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window==null?void 0:window.navigator.userAgent))}function ma(e,t){function n(...r){return new Promise((s,o)=>{Promise.resolve(e(()=>t.apply(this,r),{fn:t,thisArg:this,args:r})).then(s).catch(o)})}return n}const pi=e=>e();function ya(e,t={}){let n,r,s=Bt;const o=l=>{clearTimeout(l),s(),s=Bt};return l=>{const c=Fe(e),a=Fe(t.maxWait);return n&&o(n),c<=0||a!==void 0&&a<=0?(r&&(o(r),r=null),Promise.resolve(l())):new Promise((f,h)=>{s=t.rejectOnCancel?h:f,a&&!r&&(r=setTimeout(()=>{n&&o(n),r=null,f(l())},a)),n=setTimeout(()=>{r&&o(r),r=null,f(l())},c)})}}function _a(e=pi){const t=se(!0);function n(){t.value=!1}function r(){t.value=!0}const s=(...o)=>{t.value&&e(...o)};return{isActive:Ln(t),pause:n,resume:r,eventFilter:s}}function va(e){return jn()}function gi(...e){if(e.length!==1)return wl(...e);const t=e[0];return typeof t=="function"?Ln(_l(()=>({get:t,set:Bt}))):se(t)}function mi(e,t,n={}){const{eventFilter:r=pi,...s}=n;return Ne(e,ma(r,t),s)}function ba(e,t,n={}){const{eventFilter:r,...s}=n,{eventFilter:o,pause:i,resume:l,isActive:c}=_a(r);return{stop:mi(e,t,{...s,eventFilter:o}),pause:i,resume:l,isActive:c}}function Kr(e,t=!0,n){va()?xt(e,n):t?e():In(e)}function Tu(e,t,n={}){const{debounce:r=0,maxWait:s=void 0,...o}=n;return mi(e,t,{...o,eventFilter:ya(r,{maxWait:s})})}function Au(e,t,n){let r;de(n)?r={evaluating:n}:r={};const{lazy:s=!1,evaluating:o=void 0,shallow:i=!0,onError:l=Bt}=r,c=se(!s),a=i?Fr(t):se(t);let f=0;return Ur(async h=>{if(!c.value)return;f++;const m=f;let _=!1;o&&Promise.resolve().then(()=>{o.value=!0});try{const C=await e(L=>{h(()=>{o&&(o.value=!1),_||L()})});m===f&&(a.value=C)}catch(C){l(C)}finally{o&&m===f&&(o.value=!1),_=!0}}),s?re(()=>(c.value=!0,a.value)):a}function yi(e){var t;const n=Fe(e);return(t=n==null?void 0:n.$el)!=null?t:n}const Oe=hi?window:void 0;function Ct(...e){let t,n,r,s;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,r,s]=e,t=Oe):[t,n,r,s]=e,!t)return Bt;Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r]);const o=[],i=()=>{o.forEach(f=>f()),o.length=0},l=(f,h,m,_)=>(f.addEventListener(h,m,_),()=>f.removeEventListener(h,m,_)),c=Ne(()=>[yi(t),Fe(s)],([f,h])=>{if(i(),!f)return;const m=pa(h)?{...h}:h;o.push(...n.flatMap(_=>r.map(C=>l(f,_,C,m))))},{immediate:!0,flush:"post"}),a=()=>{c(),i()};return kr(a),a}function wa(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function Ru(...e){let t,n,r={};e.length===3?(t=e[0],n=e[1],r=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],r=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:s=Oe,eventName:o="keydown",passive:i=!1,dedupe:l=!1}=r,c=wa(t);return Ct(s,o,f=>{f.repeat&&Fe(l)||c(f)&&n(f)},i)}function Ea(){const e=se(!1),t=jn();return t&&xt(()=>{e.value=!0},t),e}function Ca(e){const t=Ea();return re(()=>(t.value,!!e()))}function _i(e,t={}){const{window:n=Oe}=t,r=Ca(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let s;const o=se(!1),i=a=>{o.value=a.matches},l=()=>{s&&("removeEventListener"in s?s.removeEventListener("change",i):s.removeListener(i))},c=Ur(()=>{r.value&&(l(),s=n.matchMedia(Fe(e)),"addEventListener"in s?s.addEventListener("change",i):s.addListener(i),o.value=s.matches)});return kr(()=>{c(),l(),s=void 0}),o}const ln=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},cn="__vueuse_ssr_handlers__",xa=Sa();function Sa(){return cn in ln||(ln[cn]=ln[cn]||{}),ln[cn]}function vi(e,t){return xa[e]||t}function Ta(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const Aa={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Ks="vueuse-storage";function Wr(e,t,n,r={}){var s;const{flush:o="pre",deep:i=!0,listenToStorageChanges:l=!0,writeDefaults:c=!0,mergeDefaults:a=!1,shallow:f,window:h=Oe,eventFilter:m,onError:_=w=>{console.error(w)},initOnMounted:C}=r,L=(f?Fr:se)(typeof t=="function"?t():t);if(!n)try{n=vi("getDefaultStorage",()=>{var w;return(w=Oe)==null?void 0:w.localStorage})()}catch(w){_(w)}if(!n)return L;const k=Fe(t),W=Ta(k),V=(s=r.serializer)!=null?s:Aa[W],{pause:p,resume:y}=ba(L,()=>A(L.value),{flush:o,deep:i,eventFilter:m});h&&l&&Kr(()=>{Ct(h,"storage",$),Ct(h,Ks,I),C&&$()}),C||$();function P(w,N){h&&h.dispatchEvent(new CustomEvent(Ks,{detail:{key:e,oldValue:w,newValue:N,storageArea:n}}))}function A(w){try{const N=n.getItem(e);if(w==null)P(N,null),n.removeItem(e);else{const T=V.write(w);N!==T&&(n.setItem(e,T),P(N,T))}}catch(N){_(N)}}function F(w){const N=w?w.newValue:n.getItem(e);if(N==null)return c&&k!=null&&n.setItem(e,V.write(k)),k;if(!w&&a){const T=V.read(N);return typeof a=="function"?a(T,k):W==="object"&&!Array.isArray(T)?{...k,...T}:T}else return typeof N!="string"?N:V.read(N)}function $(w){if(!(w&&w.storageArea!==n)){if(w&&w.key==null){L.value=k;return}if(!(w&&w.key!==e)){p();try{(w==null?void 0:w.newValue)!==V.write(L.value)&&(L.value=F(w))}catch(N){_(N)}finally{w?In(y):y()}}}}function I(w){$(w.detail)}return L}function bi(e){return _i("(prefers-color-scheme: dark)",e)}function Ra(e={}){const{selector:t="html",attribute:n="class",initialValue:r="auto",window:s=Oe,storage:o,storageKey:i="vueuse-color-scheme",listenToStorageChanges:l=!0,storageRef:c,emitAuto:a,disableTransition:f=!0}=e,h={auto:"",light:"light",dark:"dark",...e.modes||{}},m=bi({window:s}),_=re(()=>m.value?"dark":"light"),C=c||(i==null?gi(r):Wr(i,r,o,{window:s,listenToStorageChanges:l})),L=re(()=>C.value==="auto"?_.value:C.value),k=vi("updateHTMLAttrs",(y,P,A)=>{const F=typeof y=="string"?s==null?void 0:s.document.querySelector(y):yi(y);if(!F)return;let $;if(f&&($=s.document.createElement("style"),$.appendChild(document.createTextNode("*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),s.document.head.appendChild($)),P==="class"){const I=A.split(/\s/g);Object.values(h).flatMap(w=>(w||"").split(/\s/g)).filter(Boolean).forEach(w=>{I.includes(w)?F.classList.add(w):F.classList.remove(w)})}else F.setAttribute(P,A);f&&(s.getComputedStyle($).opacity,document.head.removeChild($))});function W(y){var P;k(t,n,(P=h[y])!=null?P:y)}function V(y){e.onChanged?e.onChanged(y,W):W(y)}Ne(L,V,{flush:"post",immediate:!0}),Kr(()=>V(L.value));const p=re({get(){return a?C.value:L.value},set(y){C.value=y}});try{return Object.assign(p,{store:C,system:_,state:L})}catch{return p}}function Oa(e={}){const{valueDark:t="dark",valueLight:n="",window:r=Oe}=e,s=Ra({...e,onChanged:(l,c)=>{var a;e.onChanged?(a=e.onChanged)==null||a.call(e,l==="dark",c,l):c(l)},modes:{dark:t,light:n}}),o=re(()=>s.system?s.system.value:bi({window:r}).value?"dark":"light");return re({get(){return s.value==="dark"},set(l){const c=l?"dark":"light";o.value===c?s.value="auto":s.value=c}})}function Zn(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}function Ou(e,t,n={}){const{window:r=Oe}=n;return Wr(e,t,r==null?void 0:r.localStorage,n)}function wi(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const er=new WeakMap;function Lu(e,t=!1){const n=se(t);let r=null,s="";Ne(gi(e),l=>{const c=Zn(Fe(l));if(c){const a=c;if(er.get(a)||er.set(a,a.style.overflow),a.style.overflow!=="hidden"&&(s=a.style.overflow),a.style.overflow==="hidden")return n.value=!0;if(n.value)return a.style.overflow="hidden"}},{immediate:!0});const o=()=>{const l=Zn(Fe(e));!l||n.value||(ks&&(r=Ct(l,"touchmove",c=>{La(c)},{passive:!1})),l.style.overflow="hidden",n.value=!0)},i=()=>{const l=Zn(Fe(e));!l||!n.value||(ks&&(r==null||r()),l.style.overflow=s,er.delete(l),n.value=!1)};return kr(i),re({get(){return n.value},set(l){l?o():i()}})}function Iu(e,t,n={}){const{window:r=Oe}=n;return Wr(e,t,r==null?void 0:r.sessionStorage,n)}function Pu(e={}){const{window:t=Oe,behavior:n="auto"}=e;if(!t)return{x:se(0),y:se(0)};const r=se(t.scrollX),s=se(t.scrollY),o=re({get(){return r.value},set(l){scrollTo({left:l,behavior:n})}}),i=re({get(){return s.value},set(l){scrollTo({top:l,behavior:n})}});return Ct(t,"scroll",()=>{r.value=t.scrollX,s.value=t.scrollY},{capture:!1,passive:!0}),{x:o,y:i}}function Mu(e={}){const{window:t=Oe,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:r=Number.POSITIVE_INFINITY,listenOrientation:s=!0,includeScrollbar:o=!0}=e,i=se(n),l=se(r),c=()=>{t&&(o?(i.value=t.innerWidth,l.value=t.innerHeight):(i.value=t.document.documentElement.clientWidth,l.value=t.document.documentElement.clientHeight))};if(c(),Kr(c),Ct("resize",c,{passive:!0}),s){const a=_i("(orientation: portrait)");Ne(a,()=>c())}return{width:i,height:l}}var tr={BASE_URL:"/GeometryOps.jl/previews/PR135/",MODE:"production",DEV:!1,PROD:!0,SSR:!1},nr={};const Ei=/^(?:[a-z]+:|\/\/)/i,Ia="vitepress-theme-appearance",Pa=/#.*$/,Ma=/[?#].*$/,Na=/(?:(^|\/)index)?\.(?:md|html)$/,he=typeof document<"u",Ci={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function Fa(e,t,n=!1){if(t===void 0)return!1;if(e=Ws(`/${e}`),n)return new RegExp(t).test(e);if(Ws(t)!==e)return!1;const r=t.match(Pa);return r?(he?location.hash:"")===r[0]:!0}function Ws(e){return decodeURI(e).replace(Ma,"").replace(Na,"$1")}function $a(e){return Ei.test(e)}function Ha(e,t){return Object.keys((e==null?void 0:e.locales)||{}).find(n=>n!=="root"&&!$a(n)&&Fa(t,`/${n}/`,!0))||"root"}function ja(e,t){var r,s,o,i,l,c,a;const n=Ha(e,t);return Object.assign({},e,{localeIndex:n,lang:((r=e.locales[n])==null?void 0:r.lang)??e.lang,dir:((s=e.locales[n])==null?void 0:s.dir)??e.dir,title:((o=e.locales[n])==null?void 0:o.title)??e.title,titleTemplate:((i=e.locales[n])==null?void 0:i.titleTemplate)??e.titleTemplate,description:((l=e.locales[n])==null?void 0:l.description)??e.description,head:Si(e.head,((c=e.locales[n])==null?void 0:c.head)??[]),themeConfig:{...e.themeConfig,...(a=e.locales[n])==null?void 0:a.themeConfig}})}function xi(e,t){const n=t.title||e.title,r=t.titleTemplate??e.titleTemplate;if(typeof r=="string"&&r.includes(":title"))return r.replace(/:title/g,n);const s=Va(e.title,r);return n===s.slice(3)?n:`${n}${s}`}function Va(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function Da(e,t){const[n,r]=t;if(n!=="meta")return!1;const s=Object.entries(r)[0];return s==null?!1:e.some(([o,i])=>o===n&&i[s[0]]===s[1])}function Si(e,t){return[...e.filter(n=>!Da(t,n)),...t]}const Ua=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,Ba=/^[a-z]:/i;function qs(e){const t=Ba.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(Ua,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const rr=new Set;function ka(e){if(rr.size===0){const n=typeof process=="object"&&(nr==null?void 0:nr.VITE_EXTRA_EXTENSIONS)||(tr==null?void 0:tr.VITE_EXTRA_EXTENSIONS)||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(r=>rr.add(r))}const t=e.split(".").pop();return t==null||!rr.has(t.toLowerCase())}function Nu(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const Ka=Symbol(),ut=Fr(da);function Fu(e){const t=re(()=>ja(ut.value,e.data.relativePath)),n=t.value.appearance,r=n==="force-dark"?se(!0):n?Oa({storageKey:Ia,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):se(!1),s=se(he?location.hash:"");return he&&window.addEventListener("hashchange",()=>{s.value=location.hash}),Ne(()=>e.data,()=>{s.value=he?location.hash:""}),{site:t,theme:re(()=>t.value.themeConfig),page:re(()=>e.data),frontmatter:re(()=>e.data.frontmatter),params:re(()=>e.data.params),lang:re(()=>t.value.lang),dir:re(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:re(()=>t.value.localeIndex||"root"),title:re(()=>xi(t.value,e.data)),description:re(()=>e.data.description||t.value.description),isDark:r,hash:re(()=>s.value)}}function Wa(){const e=wt(Ka);if(!e)throw new Error("vitepress data not properly injected in app");return e}function qa(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Gs(e){return Ei.test(e)||!e.startsWith("/")?e:qa(ut.value.base,e)}function Ga(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),he){const n="/GeometryOps.jl/previews/PR135/";t=qs(t.slice(n.length).replace(/\//g,"_")||"index")+".md";let r=__VP_HASH_MAP__[t.toLowerCase()];if(r||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",r=__VP_HASH_MAP__[t.toLowerCase()]),!r)return null;t=`${n}assets/${t}.${r}.js`}else t=`./${qs(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let gn=[];function $u(e){gn.push(e),$n(()=>{gn=gn.filter(t=>t!==e)})}function za(){let e=ut.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=zs(e,n);else if(Array.isArray(e))for(const r of e){const s=zs(r,n);if(s){t=s;break}}return t}function zs(e,t){const n=document.querySelector(e);if(!n)return 0;const r=n.getBoundingClientRect().bottom;return r<0?0:r+t}const Xa=Symbol(),Ti="http://a.com",Ya=()=>({path:"/",component:null,data:Ci});function Hu(e,t){const n=On(Ya()),r={route:n,go:s};async function s(l=he?location.href:"/"){var c,a;l=sr(l),await((c=r.onBeforeRouteChange)==null?void 0:c.call(r,l))!==!1&&(he&&l!==sr(location.href)&&(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",l)),await i(l),await((a=r.onAfterRouteChanged)==null?void 0:a.call(r,l)))}let o=null;async function i(l,c=0,a=!1){var m;if(await((m=r.onBeforePageLoad)==null?void 0:m.call(r,l))===!1)return;const f=new URL(l,Ti),h=o=f.pathname;try{let _=await e(h);if(!_)throw new Error(`Page not found: ${h}`);if(o===h){o=null;const{default:C,__pageData:L}=_;if(!C)throw new Error(`Invalid route component: ${C}`);n.path=he?h:Gs(h),n.component=dn(C),n.data=dn(L),he&&In(()=>{let k=ut.value.base+L.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");if(!ut.value.cleanUrls&&!k.endsWith("/")&&(k+=".html"),k!==f.pathname&&(f.pathname=k,l=k+f.search+f.hash,history.replaceState({},"",l)),f.hash&&!c){let W=null;try{W=document.getElementById(decodeURIComponent(f.hash).slice(1))}catch(V){console.warn(V)}if(W){Xs(W,f.hash);return}}window.scrollTo(0,c)})}}catch(_){if(!/fetch|Page not found/.test(_.message)&&!/^\/404(\.html|\/)?$/.test(l)&&console.error(_),!a)try{const C=await fetch(ut.value.base+"hashmap.json");window.__VP_HASH_MAP__=await C.json(),await i(l,c,!0);return}catch{}if(o===h){o=null,n.path=he?h:Gs(h),n.component=t?dn(t):null;const C=he?h.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").replace(/^\//,""):"404.md";n.data={...Ci,relativePath:C}}}}return he&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",l=>{if(l.defaultPrevented||!(l.target instanceof Element)||l.target.closest("button")||l.button!==0||l.ctrlKey||l.shiftKey||l.altKey||l.metaKey)return;const c=l.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const a=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(a==null)return;const{href:f,origin:h,pathname:m,hash:_,search:C}=new URL(a,c.baseURI),L=new URL(location.href);h===L.origin&&ka(m)&&(l.preventDefault(),m===L.pathname&&C===L.search?(_!==L.hash&&(history.pushState({},"",f),window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:L.href,newURL:f}))),_?Xs(c,_,c.classList.contains("header-anchor")):window.scrollTo(0,0)):s(f))},{capture:!0}),window.addEventListener("popstate",async l=>{var c;l.state!==null&&(await i(sr(location.href),l.state&&l.state.scrollPosition||0),(c=r.onAfterRouteChanged)==null||c.call(r,location.href))}),window.addEventListener("hashchange",l=>{l.preventDefault()})),r}function Ja(){const e=wt(Xa);if(!e)throw new Error("useRouter() is called without provider.");return e}function Ai(){return Ja().route}function Xs(e,t,n=!1){let r=null;try{r=e.classList.contains("header-anchor")?e:document.getElementById(decodeURIComponent(t).slice(1))}catch(s){console.warn(s)}if(r){let s=function(){!n||Math.abs(i-window.scrollY)>window.innerHeight?window.scrollTo(0,i):window.scrollTo({left:0,top:i,behavior:"smooth"})};const o=parseInt(window.getComputedStyle(r).paddingTop,10),i=window.scrollY+r.getBoundingClientRect().top-za()+o;requestAnimationFrame(s)}}function sr(e){const t=new URL(e,Ti);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),ut.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}const or=()=>gn.forEach(e=>e()),ju=Hr({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=Ai(),{site:n}=Wa();return()=>br(e.as,n.value.contentProps??{style:{position:"relative"}},[t.component?br(t.component,{onVnodeMounted:or,onVnodeUpdated:or,onVnodeUnmounted:or}):"404 Page Not Found"])}}),Vu=Hr({setup(e,{slots:t}){const n=se(!1);return xt(()=>{n.value=!0}),()=>n.value&&t.default?t.default():null}});function Du(){he&&window.addEventListener("click",e=>{var n;const t=e.target;if(t.matches(".vp-code-group input")){const r=(n=t.parentElement)==null?void 0:n.parentElement;if(!r)return;const s=Array.from(r.querySelectorAll("input")).indexOf(t);if(s<0)return;const o=r.querySelector(".blocks");if(!o)return;const i=Array.from(o.children).find(a=>a.classList.contains("active"));if(!i)return;const l=o.children[s];if(!l||i===l)return;i.classList.remove("active"),l.classList.add("active");const c=r==null?void 0:r.querySelector(`label[for="${t.id}"]`);c==null||c.scrollIntoView({block:"nearest"})}})}function Uu(){if(he){const e=new WeakMap;window.addEventListener("click",t=>{var r;const n=t.target;if(n.matches('div[class*="language-"] > button.copy')){const s=n.parentElement,o=(r=n.nextElementSibling)==null?void 0:r.nextElementSibling;if(!s||!o)return;const i=/language-(shellscript|shell|bash|sh|zsh)/.test(s.className),l=[".vp-copy-ignore",".diff.remove"],c=o.cloneNode(!0);c.querySelectorAll(l.join(",")).forEach(f=>f.remove());let a=c.textContent||"";i&&(a=a.replace(/^ *(\$|>) /gm,"").trim()),Qa(a).then(()=>{n.classList.add("copied"),clearTimeout(e.get(n));const f=setTimeout(()=>{n.classList.remove("copied"),n.blur(),e.delete(n)},2e3);e.set(n,f)})}})}}async function Qa(e){try{return navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea"),n=document.activeElement;t.value=e,t.setAttribute("readonly",""),t.style.contain="strict",t.style.position="absolute",t.style.left="-9999px",t.style.fontSize="12pt";const r=document.getSelection(),s=r?r.rangeCount>0&&r.getRangeAt(0):null;document.body.appendChild(t),t.select(),t.selectionStart=0,t.selectionEnd=e.length,document.execCommand("copy"),document.body.removeChild(t),s&&(r.removeAllRanges(),r.addRange(s)),n&&n.focus()}}function Bu(e,t){let n=!0,r=[];const s=o=>{if(n){n=!1,o.forEach(l=>{const c=ir(l);for(const a of document.head.children)if(a.isEqualNode(c)){r.push(a);return}});return}const i=o.map(ir);r.forEach((l,c)=>{const a=i.findIndex(f=>f==null?void 0:f.isEqualNode(l??null));a!==-1?delete i[a]:(l==null||l.remove(),delete r[c])}),i.forEach(l=>l&&document.head.appendChild(l)),r=[...r,...i].filter(Boolean)};Ur(()=>{const o=e.data,i=t.value,l=o&&o.description,c=o&&o.frontmatter.head||[],a=xi(i,o);a!==document.title&&(document.title=a);const f=l||i.description;let h=document.querySelector("meta[name=description]");h?h.getAttribute("content")!==f&&h.setAttribute("content",f):ir(["meta",{name:"description",content:f}]),s(Si(i.head,eu(c)))})}function ir([e,t,n]){const r=document.createElement(e);for(const s in t)r.setAttribute(s,t[s]);return n&&(r.innerHTML=n),e==="script"&&!t.async&&(r.async=!1),r}function Za(e){return e[0]==="meta"&&e[1]&&e[1].name==="description"}function eu(e){return e.filter(t=>!Za(t))}const lr=new Set,Ri=()=>document.createElement("link"),tu=e=>{const t=Ri();t.rel="prefetch",t.href=e,document.head.appendChild(t)},nu=e=>{const t=new XMLHttpRequest;t.open("GET",e,t.withCredentials=!0),t.send()};let an;const ru=he&&(an=Ri())&&an.relList&&an.relList.supports&&an.relList.supports("prefetch")?tu:nu;function ku(){if(!he||!window.IntersectionObserver)return;let e;if((e=navigator.connection)&&(e.saveData||/2g/.test(e.effectiveType)))return;const t=window.requestIdleCallback||setTimeout;let n=null;const r=()=>{n&&n.disconnect(),n=new IntersectionObserver(o=>{o.forEach(i=>{if(i.isIntersecting){const l=i.target;n.unobserve(l);const{pathname:c}=l;if(!lr.has(c)){lr.add(c);const a=Ga(c);a&&ru(a)}}})}),t(()=>{document.querySelectorAll("#app a").forEach(o=>{const{hostname:i,pathname:l}=new URL(o.href instanceof SVGAnimatedString?o.href.animVal:o.href,o.baseURI),c=l.match(/\.\w+$/);c&&c[0]!==".html"||o.target!=="_blank"&&i===location.hostname&&(l!==location.pathname?n.observe(o):lr.add(l))})})};xt(r);const s=Ai();Ne(()=>s.path,r),$n(()=>{n&&n.disconnect()})}export{wu as $,pu as A,Hl as B,za as C,iu as D,au as E,_e as F,Fr as G,$u as H,ie as I,lu as J,Ei as K,Ai as L,xc as M,wt as N,Mu as O,Sr as P,Ru as Q,In as R,Pu as S,ci as T,he as U,Ln as V,uu as W,Su as X,Lu as Y,Jl as Z,xu as _,si as a,du as a0,Io as a1,bu as a2,hu as a3,On as a4,wl as a5,br as a6,yu as a7,Bu as a8,Xa as a9,Fu as aa,Ka as ab,ju as ac,Vu as ad,ut as ae,Cu as af,Hu as ag,Ga as ah,ku as ai,Uu as aj,Du as ak,yi as al,kr as am,Au as an,Iu as ao,Ou as ap,Tu as aq,Ja as ar,Ct as as,cu as at,vu as au,de as av,gu as aw,dn as ax,Eu as ay,Nu as az,ti as b,mu as c,Hr as d,_u as e,ka as f,Gs as g,re as h,$a as i,ri as j,wo as k,ou as l,Fa as m,Tr as n,Zo as o,su as p,_i as q,fu as r,se as s,ki as t,Wa as u,Ne as v,Ol as w,Ur as x,xt as y,$n as z}; diff --git a/previews/PR135/assets/chunks/theme.BCxq1kHm.js b/previews/PR135/assets/chunks/theme.D6VlRy8Q.js similarity index 76% rename from previews/PR135/assets/chunks/theme.BCxq1kHm.js rename to previews/PR135/assets/chunks/theme.D6VlRy8Q.js index 584eaed2b..18722e00b 100644 --- a/previews/PR135/assets/chunks/theme.BCxq1kHm.js +++ b/previews/PR135/assets/chunks/theme.D6VlRy8Q.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.CqCoAOXo.js","assets/chunks/framework.k41oUgTf.js"])))=>i.map(i=>d[i]); -import{d as _,o as a,c as u,r as c,n as N,a as j,t as I,b as $,w as f,e as h,T as pe,_ as g,u as Je,i as Ye,f as Xe,g as fe,h as y,j as p,k as r,p as B,l as H,m as q,q as le,s as T,v as O,x as ee,y as R,z as he,A as _e,B as Qe,C as Ze,D as W,F as M,E,G as Te,H as te,I as k,J as D,K as we,L as ne,M as K,N as Y,O as xe,P as Ie,Q as ce,R as Ne,S as Me,U as oe,V as et,W as tt,X as nt,Y as Ae,Z as me,$ as ot,a0 as st,a1 as at,a2 as rt,a3 as Ce,a4 as it,a5 as lt,a6 as ct}from"./framework.k41oUgTf.js";const ut=_({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(n){return(e,t)=>(a(),u("span",{class:N(["VPBadge",e.type])},[c(e.$slots,"default",{},()=>[j(I(e.text),1)])],2))}}),dt={key:0,class:"VPBackdrop"},vt=_({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(n){return(e,t)=>(a(),$(pe,{name:"fade"},{default:f(()=>[e.show?(a(),u("div",dt)):h("",!0)]),_:1}))}}),pt=g(vt,[["__scopeId","data-v-b06cdb19"]]),V=Je;function ft(n,e){let t,s=!1;return()=>{t&&clearTimeout(t),s?t=setTimeout(n,e):(n(),(s=!0)&&setTimeout(()=>s=!1,e))}}function ue(n){return/^\//.test(n)?n:`/${n}`}function be(n){const{pathname:e,search:t,hash:s,protocol:o}=new URL(n,"http://a.com");if(Ye(n)||n.startsWith("#")||!o.startsWith("http")||!Xe(e))return n;const{site:i}=V(),l=e.endsWith("/")||e.endsWith(".html")?n:n.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${s}`);return fe(l)}function Q({correspondingLink:n=!1}={}){const{site:e,localeIndex:t,page:s,theme:o,hash:i}=V(),l=y(()=>{var v,m;return{label:(v=e.value.locales[t.value])==null?void 0:v.label,link:((m=e.value.locales[t.value])==null?void 0:m.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:y(()=>Object.entries(e.value.locales).flatMap(([v,m])=>l.value.label===m.label?[]:{text:m.label,link:ht(m.link||(v==="root"?"/":`/${v}/`),o.value.i18nRouting!==!1&&n,s.value.relativePath.slice(l.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:l}}function ht(n,e,t,s){return e?n.replace(/\/$/,"")+ue(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):n}const _t=n=>(B("data-v-951cab6c"),n=n(),H(),n),mt={class:"NotFound"},bt={class:"code"},kt={class:"title"},$t=_t(()=>p("div",{class:"divider"},null,-1)),gt={class:"quote"},yt={class:"action"},Pt=["href","aria-label"],St=_({__name:"NotFound",setup(n){const{theme:e}=V(),{currentLang:t}=Q();return(s,o)=>{var i,l,d,v,m;return a(),u("div",mt,[p("p",bt,I(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),p("h1",kt,I(((l=r(e).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),$t,p("blockquote",gt,I(((d=r(e).notFound)==null?void 0:d.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),p("div",yt,[p("a",{class:"link",href:r(fe)(r(t).link),"aria-label":((v=r(e).notFound)==null?void 0:v.linkLabel)??"go to home"},I(((m=r(e).notFound)==null?void 0:m.linkText)??"Take me home"),9,Pt)])])}}}),Vt=g(St,[["__scopeId","data-v-951cab6c"]]);function Be(n,e){if(Array.isArray(n))return Z(n);if(n==null)return[];e=ue(e);const t=Object.keys(n).sort((o,i)=>i.split("/").length-o.split("/").length).find(o=>e.startsWith(ue(o))),s=t?n[t]:[];return Array.isArray(s)?Z(s):Z(s.items,s.base)}function Lt(n){const e=[];let t=0;for(const s in n){const o=n[s];if(o.items){t=e.push(o);continue}e[t]||e.push({items:[]}),e[t].items.push(o)}return e}function Tt(n){const e=[];function t(s){for(const o of s)o.text&&o.link&&e.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&t(o.items)}return t(n),e}function de(n,e){return Array.isArray(e)?e.some(t=>de(n,t)):q(n,e.link)?!0:e.items?de(n,e.items):!1}function Z(n,e){return[...n].map(t=>{const s={...t},o=s.base||e;return o&&s.link&&(s.link=o+s.link),s.items&&(s.items=Z(s.items,o)),s})}function U(){const{frontmatter:n,page:e,theme:t}=V(),s=le("(min-width: 960px)"),o=T(!1),i=y(()=>{const C=t.value.sidebar,w=e.value.relativePath;return C?Be(C,w):[]}),l=T(i.value);O(i,(C,w)=>{JSON.stringify(C)!==JSON.stringify(w)&&(l.value=i.value)});const d=y(()=>n.value.sidebar!==!1&&l.value.length>0&&n.value.layout!=="home"),v=y(()=>m?n.value.aside==null?t.value.aside==="left":n.value.aside==="left":!1),m=y(()=>n.value.layout==="home"?!1:n.value.aside!=null?!!n.value.aside:t.value.aside!==!1),L=y(()=>d.value&&s.value),b=y(()=>d.value?Lt(l.value):[]);function P(){o.value=!0}function S(){o.value=!1}function A(){o.value?S():P()}return{isOpen:o,sidebar:l,sidebarGroups:b,hasSidebar:d,hasAside:m,leftAside:v,isSidebarEnabled:L,open:P,close:S,toggle:A}}function wt(n,e){let t;ee(()=>{t=n.value?document.activeElement:void 0}),R(()=>{window.addEventListener("keyup",s)}),he(()=>{window.removeEventListener("keyup",s)});function s(o){o.key==="Escape"&&n.value&&(e(),t==null||t.focus())}}function It(n){const{page:e,hash:t}=V(),s=T(!1),o=y(()=>n.value.collapsed!=null),i=y(()=>!!n.value.link),l=T(!1),d=()=>{l.value=q(e.value.relativePath,n.value.link)};O([e,n,t],d),R(d);const v=y(()=>l.value?!0:n.value.items?de(e.value.relativePath,n.value.items):!1),m=y(()=>!!(n.value.items&&n.value.items.length));ee(()=>{s.value=!!(o.value&&n.value.collapsed)}),_e(()=>{(l.value||v.value)&&(s.value=!1)});function L(){o.value&&(s.value=!s.value)}return{collapsed:s,collapsible:o,isLink:i,isActiveLink:l,hasActiveLink:v,hasChildren:m,toggle:L}}function Nt(){const{hasSidebar:n}=U(),e=le("(min-width: 960px)"),t=le("(min-width: 1280px)");return{isAsideEnabled:y(()=>!t.value&&!e.value?!1:n.value?t.value:e.value)}}const ve=[];function He(n){return typeof n.outline=="object"&&!Array.isArray(n.outline)&&n.outline.label||n.outlineTitle||"On this page"}function ke(n){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const s=Number(t.tagName[1]);return{element:t,title:Mt(t),link:"#"+t.id,level:s}});return At(e,n)}function Mt(n){let e="";for(const t of n.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function At(n,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[s,o]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;n=n.filter(l=>l.level>=s&&l.level<=o),ve.length=0;for(const{element:l,link:d}of n)ve.push({element:l,link:d});const i=[];e:for(let l=0;l=0;v--){const m=n[v];if(m.level{requestAnimationFrame(i),window.addEventListener("scroll",s)}),Qe(()=>{l(location.hash)}),he(()=>{window.removeEventListener("scroll",s)});function i(){if(!t.value)return;const d=window.scrollY,v=window.innerHeight,m=document.body.offsetHeight,L=Math.abs(d+v-m)<1,b=ve.map(({element:S,link:A})=>({link:A,top:Bt(S)})).filter(({top:S})=>!Number.isNaN(S)).sort((S,A)=>S.top-A.top);if(!b.length){l(null);return}if(d<1){l(null);return}if(L){l(b[b.length-1].link);return}let P=null;for(const{link:S,top:A}of b){if(A>d+Ze()+4)break;P=S}l(P)}function l(d){o&&o.classList.remove("active"),d==null?o=null:o=n.value.querySelector(`a[href="${decodeURIComponent(d)}"]`);const v=o;v?(v.classList.add("active"),e.value.style.top=v.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Bt(n){let e=0;for(;n!==document.body;){if(n===null)return NaN;e+=n.offsetTop,n=n.offsetParent}return e}const Ht=["href","title"],Et=_({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(n){function e({target:t}){const s=t.href.split("#")[1],o=document.getElementById(decodeURIComponent(s));o==null||o.focus({preventScroll:!0})}return(t,s)=>{const o=W("VPDocOutlineItem",!0);return a(),u("ul",{class:N(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),u(M,null,E(t.headers,({children:i,link:l,title:d})=>(a(),u("li",null,[p("a",{class:"outline-link",href:l,onClick:e,title:d},I(d),9,Ht),i!=null&&i.length?(a(),$(o,{key:0,headers:i},null,8,["headers"])):h("",!0)]))),256))],2)}}}),Ee=g(Et,[["__scopeId","data-v-3f927ebe"]]),Dt={class:"content"},Ft={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Ot=_({__name:"VPDocAsideOutline",setup(n){const{frontmatter:e,theme:t}=V(),s=Te([]);te(()=>{s.value=ke(e.value.outline??t.value.outline)});const o=T(),i=T();return Ct(o,i),(l,d)=>(a(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:N(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:o},[p("div",Dt,[p("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),p("div",Ft,I(r(He)(r(t))),1),k(Ee,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),jt=g(Ot,[["__scopeId","data-v-b38bf2ff"]]),Ut={class:"VPDocAsideCarbonAds"},Gt=_({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(n){const e=()=>null;return(t,s)=>(a(),u("div",Ut,[k(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),zt=n=>(B("data-v-6d7b3c46"),n=n(),H(),n),Kt={class:"VPDocAside"},Rt=zt(()=>p("div",{class:"spacer"},null,-1)),qt=_({__name:"VPDocAside",setup(n){const{theme:e}=V();return(t,s)=>(a(),u("div",Kt,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),k(jt),c(t.$slots,"aside-outline-after",{},void 0,!0),Rt,c(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),$(Gt,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):h("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Wt=g(qt,[["__scopeId","data-v-6d7b3c46"]]);function Jt(){const{theme:n,page:e}=V();return y(()=>{const{text:t="Edit this page",pattern:s=""}=n.value.editLink||{};let o;return typeof s=="function"?o=s(e.value):o=s.replace(/:path/g,e.value.filePath),{url:o,text:t}})}function Yt(){const{page:n,theme:e,frontmatter:t}=V();return y(()=>{var m,L,b,P,S,A,C,w;const s=Be(e.value.sidebar,n.value.relativePath),o=Tt(s),i=Xt(o,G=>G.link.replace(/[?#].*$/,"")),l=i.findIndex(G=>q(n.value.relativePath,G.link)),d=((m=e.value.docFooter)==null?void 0:m.prev)===!1&&!t.value.prev||t.value.prev===!1,v=((L=e.value.docFooter)==null?void 0:L.next)===!1&&!t.value.next||t.value.next===!1;return{prev:d?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((b=i[l-1])==null?void 0:b.docFooterText)??((P=i[l-1])==null?void 0:P.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((S=i[l-1])==null?void 0:S.link)},next:v?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=i[l+1])==null?void 0:A.docFooterText)??((C=i[l+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((w=i[l+1])==null?void 0:w.link)}}})}function Xt(n,e){const t=new Set;return n.filter(s=>{const o=e(s);return t.has(o)?!1:t.add(o)})}const F=_({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(n){const e=n,t=y(()=>e.tag??(e.href?"a":"span")),s=y(()=>e.href&&we.test(e.href)||e.target==="_blank");return(o,i)=>(a(),$(D(t.value),{class:N(["VPLink",{link:o.href,"vp-external-link-icon":s.value,"no-icon":o.noIcon}]),href:o.href?r(be)(o.href):void 0,target:o.target??(s.value?"_blank":void 0),rel:o.rel??(s.value?"noreferrer":void 0)},{default:f(()=>[c(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Qt={class:"VPLastUpdated"},Zt=["datetime"],xt=_({__name:"VPDocFooterLastUpdated",setup(n){const{theme:e,page:t,lang:s}=V(),o=y(()=>new Date(t.value.lastUpdated)),i=y(()=>o.value.toISOString()),l=T("");return R(()=>{ee(()=>{var d,v,m;l.value=new Intl.DateTimeFormat((v=(d=e.value.lastUpdated)==null?void 0:d.formatOptions)!=null&&v.forceLocale?s.value:void 0,((m=e.value.lastUpdated)==null?void 0:m.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(o.value)})}),(d,v)=>{var m;return a(),u("p",Qt,[j(I(((m=r(e).lastUpdated)==null?void 0:m.text)||r(e).lastUpdatedText||"Last updated")+": ",1),p("time",{datetime:i.value},I(l.value),9,Zt)])}}}),en=g(xt,[["__scopeId","data-v-475f71b8"]]),De=n=>(B("data-v-4f9813fa"),n=n(),H(),n),tn={key:0,class:"VPDocFooter"},nn={key:0,class:"edit-info"},on={key:0,class:"edit-link"},sn=De(()=>p("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),an={key:1,class:"last-updated"},rn={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},ln=De(()=>p("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),cn={class:"pager"},un=["innerHTML"],dn=["innerHTML"],vn={class:"pager"},pn=["innerHTML"],fn=["innerHTML"],hn=_({__name:"VPDocFooter",setup(n){const{theme:e,page:t,frontmatter:s}=V(),o=Jt(),i=Yt(),l=y(()=>e.value.editLink&&s.value.editLink!==!1),d=y(()=>t.value.lastUpdated),v=y(()=>l.value||d.value||i.value.prev||i.value.next);return(m,L)=>{var b,P,S,A;return v.value?(a(),u("footer",tn,[c(m.$slots,"doc-footer-before",{},void 0,!0),l.value||d.value?(a(),u("div",nn,[l.value?(a(),u("div",on,[k(F,{class:"edit-link-button",href:r(o).url,"no-icon":!0},{default:f(()=>[sn,j(" "+I(r(o).text),1)]),_:1},8,["href"])])):h("",!0),d.value?(a(),u("div",an,[k(en)])):h("",!0)])):h("",!0),(b=r(i).prev)!=null&&b.link||(P=r(i).next)!=null&&P.link?(a(),u("nav",rn,[ln,p("div",cn,[(S=r(i).prev)!=null&&S.link?(a(),$(F,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:f(()=>{var C;return[p("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,un),p("span",{class:"title",innerHTML:r(i).prev.text},null,8,dn)]}),_:1},8,["href"])):h("",!0)]),p("div",vn,[(A=r(i).next)!=null&&A.link?(a(),$(F,{key:0,class:"pager-link next",href:r(i).next.link},{default:f(()=>{var C;return[p("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.next)||"Next page"},null,8,pn),p("span",{class:"title",innerHTML:r(i).next.text},null,8,fn)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),_n=g(hn,[["__scopeId","data-v-4f9813fa"]]),mn=n=>(B("data-v-83890dd9"),n=n(),H(),n),bn={class:"container"},kn=mn(()=>p("div",{class:"aside-curtain"},null,-1)),$n={class:"aside-container"},gn={class:"aside-content"},yn={class:"content"},Pn={class:"content-container"},Sn={class:"main"},Vn=_({__name:"VPDoc",setup(n){const{theme:e}=V(),t=ne(),{hasSidebar:s,hasAside:o,leftAside:i}=U(),l=y(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(d,v)=>{const m=W("Content");return a(),u("div",{class:N(["VPDoc",{"has-sidebar":r(s),"has-aside":r(o)}])},[c(d.$slots,"doc-top",{},void 0,!0),p("div",bn,[r(o)?(a(),u("div",{key:0,class:N(["aside",{"left-aside":r(i)}])},[kn,p("div",$n,[p("div",gn,[k(Wt,null,{"aside-top":f(()=>[c(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),p("div",yn,[p("div",Pn,[c(d.$slots,"doc-before",{},void 0,!0),p("main",Sn,[k(m,{class:N(["vp-doc",[l.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),k(_n,null,{"doc-footer-before":f(()=>[c(d.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(d.$slots,"doc-after",{},void 0,!0)])])]),c(d.$slots,"doc-bottom",{},void 0,!0)],2)}}}),Ln=g(Vn,[["__scopeId","data-v-83890dd9"]]),Tn=_({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(n){const e=n,t=y(()=>e.href&&we.test(e.href)),s=y(()=>e.tag||e.href?"a":"button");return(o,i)=>(a(),$(D(s.value),{class:N(["VPButton",[o.size,o.theme]]),href:o.href?r(be)(o.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:f(()=>[j(I(o.text),1)]),_:1},8,["class","href","target","rel"]))}}),wn=g(Tn,[["__scopeId","data-v-14206e74"]]),In=["src","alt"],Nn=_({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(n){return(e,t)=>{const s=W("VPImage",!0);return e.image?(a(),u(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),u("img",K({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(fe)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,In)):(a(),u(M,{key:1},[k(s,K({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),k(s,K({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),x=g(Nn,[["__scopeId","data-v-35a7d0b8"]]),Mn=n=>(B("data-v-955009fc"),n=n(),H(),n),An={class:"container"},Cn={class:"main"},Bn={key:0,class:"name"},Hn=["innerHTML"],En=["innerHTML"],Dn=["innerHTML"],Fn={key:0,class:"actions"},On={key:0,class:"image"},jn={class:"image-container"},Un=Mn(()=>p("div",{class:"image-bg"},null,-1)),Gn=_({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(n){const e=Y("hero-image-slot-exists");return(t,s)=>(a(),u("div",{class:N(["VPHero",{"has-image":t.image||r(e)}])},[p("div",An,[p("div",Cn,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[t.name?(a(),u("h1",Bn,[p("span",{innerHTML:t.name,class:"clip"},null,8,Hn)])):h("",!0),t.text?(a(),u("p",{key:1,innerHTML:t.text,class:"text"},null,8,En)):h("",!0),t.tagline?(a(),u("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,Dn)):h("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),u("div",Fn,[(a(!0),u(M,null,E(t.actions,o=>(a(),u("div",{key:o.link,class:"action"},[k(wn,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link,target:o.target,rel:o.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),u("div",On,[p("div",jn,[Un,c(t.$slots,"home-hero-image",{},()=>[t.image?(a(),$(x,{key:0,class:"image-src",image:t.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),zn=g(Gn,[["__scopeId","data-v-955009fc"]]),Kn=_({__name:"VPHomeHero",setup(n){const{frontmatter:e}=V();return(t,s)=>r(e).hero?(a(),$(zn,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":f(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":f(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":f(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":f(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":f(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),Rn=n=>(B("data-v-f5e9645b"),n=n(),H(),n),qn={class:"box"},Wn={key:0,class:"icon"},Jn=["innerHTML"],Yn=["innerHTML"],Xn=["innerHTML"],Qn={key:4,class:"link-text"},Zn={class:"link-text-value"},xn=Rn(()=>p("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),eo=_({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(n){return(e,t)=>(a(),$(F,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:f(()=>[p("article",qn,[typeof e.icon=="object"&&e.icon.wrap?(a(),u("div",Wn,[k(x,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),$(x,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Jn)):h("",!0),p("h2",{class:"title",innerHTML:e.title},null,8,Yn),e.details?(a(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,Xn)):h("",!0),e.linkText?(a(),u("div",Qn,[p("p",Zn,[j(I(e.linkText)+" ",1),xn])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),to=g(eo,[["__scopeId","data-v-f5e9645b"]]),no={key:0,class:"VPFeatures"},oo={class:"container"},so={class:"items"},ao=_({__name:"VPFeatures",props:{features:{}},setup(n){const e=n,t=y(()=>{const s=e.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,o)=>s.features?(a(),u("div",no,[p("div",oo,[p("div",so,[(a(!0),u(M,null,E(s.features,i=>(a(),u("div",{key:i.title,class:N(["item",[t.value]])},[k(to,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),ro=g(ao,[["__scopeId","data-v-d0a190d7"]]),io=_({__name:"VPHomeFeatures",setup(n){const{frontmatter:e}=V();return(t,s)=>r(e).features?(a(),$(ro,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):h("",!0)}}),lo=_({__name:"VPHomeContent",setup(n){const{width:e}=xe({initialWidth:0,includeScrollbar:!1});return(t,s)=>(a(),u("div",{class:"vp-doc container",style:Ie(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),co=g(lo,[["__scopeId","data-v-7a48a447"]]),uo={class:"VPHome"},vo=_({__name:"VPHome",setup(n){const{frontmatter:e}=V();return(t,s)=>{const o=W("Content");return a(),u("div",uo,[c(t.$slots,"home-hero-before",{},void 0,!0),k(Kn,null,{"home-hero-info-before":f(()=>[c(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(t.$slots,"home-hero-after",{},void 0,!0),c(t.$slots,"home-features-before",{},void 0,!0),k(io),c(t.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),$(co,{key:0},{default:f(()=>[k(o)]),_:1})):(a(),$(o,{key:1}))])}}}),po=g(vo,[["__scopeId","data-v-cbb6ec48"]]),fo={},ho={class:"VPPage"};function _o(n,e){const t=W("Content");return a(),u("div",ho,[c(n.$slots,"page-top"),k(t),c(n.$slots,"page-bottom")])}const mo=g(fo,[["render",_o]]),bo=_({__name:"VPContent",setup(n){const{page:e,frontmatter:t}=V(),{hasSidebar:s}=U();return(o,i)=>(a(),u("div",{class:N(["VPContent",{"has-sidebar":r(s),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?c(o.$slots,"not-found",{key:0},()=>[k(Vt)],!0):r(t).layout==="page"?(a(),$(mo,{key:1},{"page-top":f(()=>[c(o.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(o.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),$(po,{key:2},{"home-hero-before":f(()=>[c(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(o.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(o.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(o.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(o.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),$(D(r(t).layout),{key:3})):(a(),$(Ln,{key:4},{"doc-top":f(()=>[c(o.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(o.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":f(()=>[c(o.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":f(()=>[c(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":f(()=>[c(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":f(()=>[c(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),ko=g(bo,[["__scopeId","data-v-91765379"]]),$o={class:"container"},go=["innerHTML"],yo=["innerHTML"],Po=_({__name:"VPFooter",setup(n){const{theme:e,frontmatter:t}=V(),{hasSidebar:s}=U();return(o,i)=>r(e).footer&&r(t).footer!==!1?(a(),u("footer",{key:0,class:N(["VPFooter",{"has-sidebar":r(s)}])},[p("div",$o,[r(e).footer.message?(a(),u("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,go)):h("",!0),r(e).footer.copyright?(a(),u("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,yo)):h("",!0)])],2)):h("",!0)}}),So=g(Po,[["__scopeId","data-v-c970a860"]]);function Vo(){const{theme:n,frontmatter:e}=V(),t=Te([]),s=y(()=>t.value.length>0);return te(()=>{t.value=ke(e.value.outline??n.value.outline)}),{headers:t,hasLocalNav:s}}const Lo=n=>(B("data-v-bc9dc845"),n=n(),H(),n),To={class:"menu-text"},wo=Lo(()=>p("span",{class:"vpi-chevron-right icon"},null,-1)),Io={class:"header"},No={class:"outline"},Mo=_({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(n){const e=n,{theme:t}=V(),s=T(!1),o=T(0),i=T(),l=T();function d(b){var P;(P=i.value)!=null&&P.contains(b.target)||(s.value=!1)}O(s,b=>{if(b){document.addEventListener("click",d);return}document.removeEventListener("click",d)}),ce("Escape",()=>{s.value=!1}),te(()=>{s.value=!1});function v(){s.value=!s.value,o.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function m(b){b.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Ne(()=>{s.value=!1}))}function L(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(b,P)=>(a(),u("div",{class:"VPLocalNavOutlineDropdown",style:Ie({"--vp-vh":o.value+"px"}),ref_key:"main",ref:i},[b.headers.length>0?(a(),u("button",{key:0,onClick:v,class:N({open:s.value})},[p("span",To,I(r(He)(r(t))),1),wo],2)):(a(),u("button",{key:1,onClick:L},I(r(t).returnToTopLabel||"Return to top"),1)),k(pe,{name:"flyout"},{default:f(()=>[s.value?(a(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:m},[p("div",Io,[p("a",{class:"top-link",href:"#",onClick:L},I(r(t).returnToTopLabel||"Return to top"),1)]),p("div",No,[k(Ee,{headers:b.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),Ao=g(Mo,[["__scopeId","data-v-bc9dc845"]]),Co=n=>(B("data-v-070ab83d"),n=n(),H(),n),Bo={class:"container"},Ho=["aria-expanded"],Eo=Co(()=>p("span",{class:"vpi-align-left menu-icon"},null,-1)),Do={class:"menu-text"},Fo=_({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(n){const{theme:e,frontmatter:t}=V(),{hasSidebar:s}=U(),{headers:o}=Vo(),{y:i}=Me(),l=T(0);R(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),te(()=>{o.value=ke(t.value.outline??e.value.outline)});const d=y(()=>o.value.length===0),v=y(()=>d.value&&!s.value),m=y(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:d.value,fixed:v.value}));return(L,b)=>r(t).layout!=="home"&&(!v.value||r(i)>=l.value)?(a(),u("div",{key:0,class:N(m.value)},[p("div",Bo,[r(s)?(a(),u("button",{key:0,class:"menu","aria-expanded":L.open,"aria-controls":"VPSidebarNav",onClick:b[0]||(b[0]=P=>L.$emit("open-menu"))},[Eo,p("span",Do,I(r(e).sidebarMenuLabel||"Menu"),1)],8,Ho)):h("",!0),k(Ao,{headers:r(o),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),Oo=g(Fo,[["__scopeId","data-v-070ab83d"]]);function jo(){const n=T(!1);function e(){n.value=!0,window.addEventListener("resize",o)}function t(){n.value=!1,window.removeEventListener("resize",o)}function s(){n.value?t():e()}function o(){window.outerWidth>=768&&t()}const i=ne();return O(()=>i.path,t),{isScreenOpen:n,openScreen:e,closeScreen:t,toggleScreen:s}}const Uo={},Go={class:"VPSwitch",type:"button",role:"switch"},zo={class:"check"},Ko={key:0,class:"icon"};function Ro(n,e){return a(),u("button",Go,[p("span",zo,[n.$slots.default?(a(),u("span",Ko,[c(n.$slots,"default",{},void 0,!0)])):h("",!0)])])}const qo=g(Uo,[["render",Ro],["__scopeId","data-v-4a1c76db"]]),Fe=n=>(B("data-v-e40a8bb6"),n=n(),H(),n),Wo=Fe(()=>p("span",{class:"vpi-sun sun"},null,-1)),Jo=Fe(()=>p("span",{class:"vpi-moon moon"},null,-1)),Yo=_({__name:"VPSwitchAppearance",setup(n){const{isDark:e,theme:t}=V(),s=Y("toggle-appearance",()=>{e.value=!e.value}),o=T("");return _e(()=>{o.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,l)=>(a(),$(qo,{title:o.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(s)},{default:f(()=>[Wo,Jo]),_:1},8,["title","aria-checked","onClick"]))}}),$e=g(Yo,[["__scopeId","data-v-e40a8bb6"]]),Xo={key:0,class:"VPNavBarAppearance"},Qo=_({__name:"VPNavBarAppearance",setup(n){const{site:e}=V();return(t,s)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Xo,[k($e)])):h("",!0)}}),Zo=g(Qo,[["__scopeId","data-v-af096f4a"]]),ge=T();let Oe=!1,ie=0;function xo(n){const e=T(!1);if(oe){!Oe&&es(),ie++;const t=O(ge,s=>{var o,i,l;s===n.el.value||(o=n.el.value)!=null&&o.contains(s)?(e.value=!0,(i=n.onFocus)==null||i.call(n)):(e.value=!1,(l=n.onBlur)==null||l.call(n))});he(()=>{t(),ie--,ie||ts()})}return et(e)}function es(){document.addEventListener("focusin",je),Oe=!0,ge.value=document.activeElement}function ts(){document.removeEventListener("focusin",je)}function je(){ge.value=document.activeElement}const ns={class:"VPMenuLink"},os=_({__name:"VPMenuLink",props:{item:{}},setup(n){const{page:e}=V();return(t,s)=>(a(),u("div",ns,[k(F,{class:N({active:r(q)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:f(()=>[j(I(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),se=g(os,[["__scopeId","data-v-8b74d055"]]),ss={class:"VPMenuGroup"},as={key:0,class:"title"},rs=_({__name:"VPMenuGroup",props:{text:{},items:{}},setup(n){return(e,t)=>(a(),u("div",ss,[e.text?(a(),u("p",as,I(e.text),1)):h("",!0),(a(!0),u(M,null,E(e.items,s=>(a(),u(M,null,["link"in s?(a(),$(se,{key:0,item:s},null,8,["item"])):h("",!0)],64))),256))]))}}),is=g(rs,[["__scopeId","data-v-48c802d0"]]),ls={class:"VPMenu"},cs={key:0,class:"items"},us=_({__name:"VPMenu",props:{items:{}},setup(n){return(e,t)=>(a(),u("div",ls,[e.items?(a(),u("div",cs,[(a(!0),u(M,null,E(e.items,s=>(a(),u(M,{key:JSON.stringify(s)},["link"in s?(a(),$(se,{key:0,item:s},null,8,["item"])):"component"in s?(a(),$(D(s.component),K({key:1,ref_for:!0},s.props),null,16)):(a(),$(is,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):h("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),ds=g(us,[["__scopeId","data-v-7dd3104a"]]),vs=n=>(B("data-v-e5380155"),n=n(),H(),n),ps=["aria-expanded","aria-label"],fs={key:0,class:"text"},hs=["innerHTML"],_s=vs(()=>p("span",{class:"vpi-chevron-down text-icon"},null,-1)),ms={key:1,class:"vpi-more-horizontal icon"},bs={class:"menu"},ks=_({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(n){const e=T(!1),t=T();xo({el:t,onBlur:s});function s(){e.value=!1}return(o,i)=>(a(),u("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=l=>e.value=!0),onMouseleave:i[2]||(i[2]=l=>e.value=!1)},[p("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":o.label,onClick:i[0]||(i[0]=l=>e.value=!e.value)},[o.button||o.icon?(a(),u("span",fs,[o.icon?(a(),u("span",{key:0,class:N([o.icon,"option-icon"])},null,2)):h("",!0),o.button?(a(),u("span",{key:1,innerHTML:o.button},null,8,hs)):h("",!0),_s])):(a(),u("span",ms))],8,ps),p("div",bs,[k(ds,{items:o.items},{default:f(()=>[c(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),ye=g(ks,[["__scopeId","data-v-e5380155"]]),$s=["href","aria-label","innerHTML"],gs=_({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(n){const e=n,t=y(()=>typeof e.icon=="object"?e.icon.svg:``);return(s,o)=>(a(),u("a",{class:"VPSocialLink no-icon",href:s.link,"aria-label":s.ariaLabel??(typeof s.icon=="string"?s.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,$s))}}),ys=g(gs,[["__scopeId","data-v-717b8b75"]]),Ps={class:"VPSocialLinks"},Ss=_({__name:"VPSocialLinks",props:{links:{}},setup(n){return(e,t)=>(a(),u("div",Ps,[(a(!0),u(M,null,E(e.links,({link:s,icon:o,ariaLabel:i})=>(a(),$(ys,{key:s,icon:o,link:s,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),Pe=g(Ss,[["__scopeId","data-v-ee7a9424"]]),Vs={key:0,class:"group translations"},Ls={class:"trans-title"},Ts={key:1,class:"group"},ws={class:"item appearance"},Is={class:"label"},Ns={class:"appearance-action"},Ms={key:2,class:"group"},As={class:"item social-links"},Cs=_({__name:"VPNavBarExtra",setup(n){const{site:e,theme:t}=V(),{localeLinks:s,currentLang:o}=Q({correspondingLink:!0}),i=y(()=>s.value.length&&o.value.label||e.value.appearance||t.value.socialLinks);return(l,d)=>i.value?(a(),$(ye,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:f(()=>[r(s).length&&r(o).label?(a(),u("div",Vs,[p("p",Ls,I(r(o).label),1),(a(!0),u(M,null,E(r(s),v=>(a(),$(se,{key:v.link,item:v},null,8,["item"]))),128))])):h("",!0),r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Ts,[p("div",ws,[p("p",Is,I(r(t).darkModeSwitchLabel||"Appearance"),1),p("div",Ns,[k($e)])])])):h("",!0),r(t).socialLinks?(a(),u("div",Ms,[p("div",As,[k(Pe,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),Bs=g(Cs,[["__scopeId","data-v-925effce"]]),Hs=n=>(B("data-v-5dea55bf"),n=n(),H(),n),Es=["aria-expanded"],Ds=Hs(()=>p("span",{class:"container"},[p("span",{class:"top"}),p("span",{class:"middle"}),p("span",{class:"bottom"})],-1)),Fs=[Ds],Os=_({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(n){return(e,t)=>(a(),u("button",{type:"button",class:N(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=s=>e.$emit("click"))},Fs,10,Es))}}),js=g(Os,[["__scopeId","data-v-5dea55bf"]]),Us=["innerHTML"],Gs=_({__name:"VPNavBarMenuLink",props:{item:{}},setup(n){const{page:e}=V();return(t,s)=>(a(),$(F,{class:N({VPNavBarMenuLink:!0,active:r(q)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:f(()=>[p("span",{innerHTML:t.item.text},null,8,Us)]),_:1},8,["class","href","noIcon","target","rel"]))}}),zs=g(Gs,[["__scopeId","data-v-ed5ac1f6"]]),Ks=_({__name:"VPNavBarMenuGroup",props:{item:{}},setup(n){const e=n,{page:t}=V(),s=i=>"component"in i?!1:"link"in i?q(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(s),o=y(()=>s(e.item));return(i,l)=>(a(),$(ye,{class:N({VPNavBarMenuGroup:!0,active:r(q)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||o.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),Rs=n=>(B("data-v-e6d46098"),n=n(),H(),n),qs={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Ws=Rs(()=>p("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),Js=_({__name:"VPNavBarMenu",setup(n){const{theme:e}=V();return(t,s)=>r(e).nav?(a(),u("nav",qs,[Ws,(a(!0),u(M,null,E(r(e).nav,o=>(a(),u(M,{key:JSON.stringify(o)},["link"in o?(a(),$(zs,{key:0,item:o},null,8,["item"])):"component"in o?(a(),$(D(o.component),K({key:1,ref_for:!0},o.props),null,16)):(a(),$(Ks,{key:2,item:o},null,8,["item"]))],64))),128))])):h("",!0)}}),Ys=g(Js,[["__scopeId","data-v-e6d46098"]]);function Xs(n){const{localeIndex:e,theme:t}=V();function s(o){var A,C,w;const i=o.split("."),l=(A=t.value.search)==null?void 0:A.options,d=l&&typeof l=="object",v=d&&((w=(C=l.locales)==null?void 0:C[e.value])==null?void 0:w.translations)||null,m=d&&l.translations||null;let L=v,b=m,P=n;const S=i.pop();for(const G of i){let z=null;const J=P==null?void 0:P[G];J&&(z=P=J);const ae=b==null?void 0:b[G];ae&&(z=b=ae);const re=L==null?void 0:L[G];re&&(z=L=re),J||(P=z),ae||(b=z),re||(L=z)}return(L==null?void 0:L[S])??(b==null?void 0:b[S])??(P==null?void 0:P[S])??""}return s}const Qs=["aria-label"],Zs={class:"DocSearch-Button-Container"},xs=p("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),ea={class:"DocSearch-Button-Placeholder"},ta=p("span",{class:"DocSearch-Button-Keys"},[p("kbd",{class:"DocSearch-Button-Key"}),p("kbd",{class:"DocSearch-Button-Key"},"K")],-1),Se=_({__name:"VPNavBarSearchButton",setup(n){const t=Xs({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,o)=>(a(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[p("span",Zs,[xs,p("span",ea,I(r(t)("button.buttonText")),1)]),ta],8,Qs))}}),na={class:"VPNavBarSearch"},oa={id:"local-search"},sa={key:1,id:"docsearch"},aa=_({__name:"VPNavBarSearch",setup(n){const e=tt(()=>nt(()=>import("./VPLocalSearchBox.CqCoAOXo.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:s}=V(),o=T(!1),i=T(!1);R(()=>{});function l(){o.value||(o.value=!0,setTimeout(d,16))}function d(){const b=new Event("keydown");b.key="k",b.metaKey=!0,window.dispatchEvent(b),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||d()},16)}function v(b){const P=b.target,S=P.tagName;return P.isContentEditable||S==="INPUT"||S==="SELECT"||S==="TEXTAREA"}const m=T(!1);ce("k",b=>{(b.ctrlKey||b.metaKey)&&(b.preventDefault(),m.value=!0)}),ce("/",b=>{v(b)||(b.preventDefault(),m.value=!0)});const L="local";return(b,P)=>{var S;return a(),u("div",na,[r(L)==="local"?(a(),u(M,{key:0},[m.value?(a(),$(r(e),{key:0,onClose:P[0]||(P[0]=A=>m.value=!1)})):h("",!0),p("div",oa,[k(Se,{onClick:P[1]||(P[1]=A=>m.value=!0)})])],64)):r(L)==="algolia"?(a(),u(M,{key:1},[o.value?(a(),$(r(t),{key:0,algolia:((S=r(s).search)==null?void 0:S.options)??r(s).algolia,onVnodeBeforeMount:P[2]||(P[2]=A=>i.value=!0)},null,8,["algolia"])):h("",!0),i.value?h("",!0):(a(),u("div",sa,[k(Se,{onClick:l})]))],64)):h("",!0)])}}}),ra=_({__name:"VPNavBarSocialLinks",setup(n){const{theme:e}=V();return(t,s)=>r(e).socialLinks?(a(),$(Pe,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),ia=g(ra,[["__scopeId","data-v-164c457f"]]),la=["href","rel","target"],ca={key:1},ua={key:2},da=_({__name:"VPNavBarTitle",setup(n){const{site:e,theme:t}=V(),{hasSidebar:s}=U(),{currentLang:o}=Q(),i=y(()=>{var v;return typeof t.value.logoLink=="string"?t.value.logoLink:(v=t.value.logoLink)==null?void 0:v.link}),l=y(()=>{var v;return typeof t.value.logoLink=="string"||(v=t.value.logoLink)==null?void 0:v.rel}),d=y(()=>{var v;return typeof t.value.logoLink=="string"||(v=t.value.logoLink)==null?void 0:v.target});return(v,m)=>(a(),u("div",{class:N(["VPNavBarTitle",{"has-sidebar":r(s)}])},[p("a",{class:"title",href:i.value??r(be)(r(o).link),rel:l.value,target:d.value},[c(v.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),$(x,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):h("",!0),r(t).siteTitle?(a(),u("span",ca,I(r(t).siteTitle),1)):r(t).siteTitle===void 0?(a(),u("span",ua,I(r(e).title),1)):h("",!0),c(v.$slots,"nav-bar-title-after",{},void 0,!0)],8,la)],2))}}),va=g(da,[["__scopeId","data-v-28a961f9"]]),pa={class:"items"},fa={class:"title"},ha=_({__name:"VPNavBarTranslations",setup(n){const{theme:e}=V(),{localeLinks:t,currentLang:s}=Q({correspondingLink:!0});return(o,i)=>r(t).length&&r(s).label?(a(),$(ye,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:f(()=>[p("div",pa,[p("p",fa,I(r(s).label),1),(a(!0),u(M,null,E(r(t),l=>(a(),$(se,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),_a=g(ha,[["__scopeId","data-v-c80d9ad0"]]),ma=n=>(B("data-v-822684d1"),n=n(),H(),n),ba={class:"wrapper"},ka={class:"container"},$a={class:"title"},ga={class:"content"},ya={class:"content-body"},Pa=ma(()=>p("div",{class:"divider"},[p("div",{class:"divider-line"})],-1)),Sa=_({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(n){const e=n,{y:t}=Me(),{hasSidebar:s}=U(),{frontmatter:o}=V(),i=T({});return _e(()=>{i.value={"has-sidebar":s.value,home:o.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(l,d)=>(a(),u("div",{class:N(["VPNavBar",i.value])},[p("div",ba,[p("div",ka,[p("div",$a,[k(va,null,{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),p("div",ga,[p("div",ya,[c(l.$slots,"nav-bar-content-before",{},void 0,!0),k(aa,{class:"search"}),k(Ys,{class:"menu"}),k(_a,{class:"translations"}),k(Zo,{class:"appearance"}),k(ia,{class:"social-links"}),k(Bs,{class:"extra"}),c(l.$slots,"nav-bar-content-after",{},void 0,!0),k(js,{class:"hamburger",active:l.isScreenOpen,onClick:d[0]||(d[0]=v=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),Pa],2))}}),Va=g(Sa,[["__scopeId","data-v-822684d1"]]),La={key:0,class:"VPNavScreenAppearance"},Ta={class:"text"},wa=_({__name:"VPNavScreenAppearance",setup(n){const{site:e,theme:t}=V();return(s,o)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",La,[p("p",Ta,I(r(t).darkModeSwitchLabel||"Appearance"),1),k($e)])):h("",!0)}}),Ia=g(wa,[["__scopeId","data-v-ffb44008"]]),Na=_({__name:"VPNavScreenMenuLink",props:{item:{}},setup(n){const e=Y("close-screen");return(t,s)=>(a(),$(F,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),Ma=g(Na,[["__scopeId","data-v-27d04aeb"]]),Aa=_({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(n){const e=Y("close-screen");return(t,s)=>(a(),$(F,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e)},{default:f(()=>[j(I(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),Ue=g(Aa,[["__scopeId","data-v-7179dbb7"]]),Ca={class:"VPNavScreenMenuGroupSection"},Ba={key:0,class:"title"},Ha=_({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(n){return(e,t)=>(a(),u("div",Ca,[e.text?(a(),u("p",Ba,I(e.text),1)):h("",!0),(a(!0),u(M,null,E(e.items,s=>(a(),$(Ue,{key:s.text,item:s},null,8,["item"]))),128))]))}}),Ea=g(Ha,[["__scopeId","data-v-4b8941ac"]]),Da=n=>(B("data-v-ca5b90f4"),n=n(),H(),n),Fa=["aria-controls","aria-expanded"],Oa=["innerHTML"],ja=Da(()=>p("span",{class:"vpi-plus button-icon"},null,-1)),Ua=["id"],Ga={key:0,class:"item"},za={key:1,class:"item"},Ka={key:2,class:"group"},Ra=_({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(n){const e=n,t=T(!1),s=y(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function o(){t.value=!t.value}return(i,l)=>(a(),u("div",{class:N(["VPNavScreenMenuGroup",{open:t.value}])},[p("button",{class:"button","aria-controls":s.value,"aria-expanded":t.value,onClick:o},[p("span",{class:"button-text",innerHTML:i.text},null,8,Oa),ja],8,Fa),p("div",{id:s.value,class:"items"},[(a(!0),u(M,null,E(i.items,d=>(a(),u(M,{key:JSON.stringify(d)},["link"in d?(a(),u("div",Ga,[k(Ue,{item:d},null,8,["item"])])):"component"in d?(a(),u("div",za,[(a(),$(D(d.component),K({ref_for:!0},d.props,{"screen-menu":""}),null,16))])):(a(),u("div",Ka,[k(Ea,{items:d.items},null,8,["items"])]))],64))),128))],8,Ua)],2))}}),qa=g(Ra,[["__scopeId","data-v-ca5b90f4"]]),Wa={key:0,class:"VPNavScreenMenu"},Ja=_({__name:"VPNavScreenMenu",setup(n){const{theme:e}=V();return(t,s)=>r(e).nav?(a(),u("nav",Wa,[(a(!0),u(M,null,E(r(e).nav,o=>(a(),u(M,{key:JSON.stringify(o)},["link"in o?(a(),$(Ma,{key:0,item:o},null,8,["item"])):"component"in o?(a(),$(D(o.component),K({key:1,ref_for:!0},o.props,{"screen-menu":""}),null,16)):(a(),$(qa,{key:2,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),Ya=_({__name:"VPNavScreenSocialLinks",setup(n){const{theme:e}=V();return(t,s)=>r(e).socialLinks?(a(),$(Pe,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),Ge=n=>(B("data-v-362991c2"),n=n(),H(),n),Xa=Ge(()=>p("span",{class:"vpi-languages icon lang"},null,-1)),Qa=Ge(()=>p("span",{class:"vpi-chevron-down icon chevron"},null,-1)),Za={class:"list"},xa=_({__name:"VPNavScreenTranslations",setup(n){const{localeLinks:e,currentLang:t}=Q({correspondingLink:!0}),s=T(!1);function o(){s.value=!s.value}return(i,l)=>r(e).length&&r(t).label?(a(),u("div",{key:0,class:N(["VPNavScreenTranslations",{open:s.value}])},[p("button",{class:"title",onClick:o},[Xa,j(" "+I(r(t).label)+" ",1),Qa]),p("ul",Za,[(a(!0),u(M,null,E(r(e),d=>(a(),u("li",{key:d.link,class:"item"},[k(F,{class:"link",href:d.link},{default:f(()=>[j(I(d.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),er=g(xa,[["__scopeId","data-v-362991c2"]]),tr={class:"container"},nr=_({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(n){const e=T(null),t=Ae(oe?document.body:null);return(s,o)=>(a(),$(pe,{name:"fade",onEnter:o[0]||(o[0]=i=>t.value=!0),onAfterLeave:o[1]||(o[1]=i=>t.value=!1)},{default:f(()=>[s.open?(a(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[p("div",tr,[c(s.$slots,"nav-screen-content-before",{},void 0,!0),k(Ja,{class:"menu"}),k(er,{class:"translations"}),k(Ia,{class:"appearance"}),k(Ya,{class:"social-links"}),c(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),or=g(nr,[["__scopeId","data-v-833aabba"]]),sr={key:0,class:"VPNav"},ar=_({__name:"VPNav",setup(n){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=jo(),{frontmatter:o}=V(),i=y(()=>o.value.navbar!==!1);return me("close-screen",t),ee(()=>{oe&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(l,d)=>i.value?(a(),u("header",sr,[k(Va,{"is-screen-open":r(e),onToggleScreen:r(s)},{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),k(or,{open:r(e)},{"nav-screen-content-before":f(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),rr=g(ar,[["__scopeId","data-v-f1e365da"]]),ze=n=>(B("data-v-196b2e5f"),n=n(),H(),n),ir=["role","tabindex"],lr=ze(()=>p("div",{class:"indicator"},null,-1)),cr=ze(()=>p("span",{class:"vpi-chevron-right caret-icon"},null,-1)),ur=[cr],dr={key:1,class:"items"},vr=_({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(n){const e=n,{collapsed:t,collapsible:s,isLink:o,isActiveLink:i,hasActiveLink:l,hasChildren:d,toggle:v}=It(y(()=>e.item)),m=y(()=>d.value?"section":"div"),L=y(()=>o.value?"a":"div"),b=y(()=>d.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),P=y(()=>o.value?void 0:"button"),S=y(()=>[[`level-${e.depth}`],{collapsible:s.value},{collapsed:t.value},{"is-link":o.value},{"is-active":i.value},{"has-active":l.value}]);function A(w){"key"in w&&w.key!=="Enter"||!e.item.link&&v()}function C(){e.item.link&&v()}return(w,G)=>{const z=W("VPSidebarItem",!0);return a(),$(D(m.value),{class:N(["VPSidebarItem",S.value])},{default:f(()=>[w.item.text?(a(),u("div",K({key:0,class:"item",role:P.value},st(w.item.items?{click:A,keydown:A}:{},!0),{tabindex:w.item.items&&0}),[lr,w.item.link?(a(),$(F,{key:0,tag:L.value,class:"link",href:w.item.link,rel:w.item.rel,target:w.item.target},{default:f(()=>[(a(),$(D(b.value),{class:"text",innerHTML:w.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),$(D(b.value),{key:1,class:"text",innerHTML:w.item.text},null,8,["innerHTML"])),w.item.collapsed!=null&&w.item.items&&w.item.items.length?(a(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:C,onKeydown:ot(C,["enter"]),tabindex:"0"},ur,32)):h("",!0)],16,ir)):h("",!0),w.item.items&&w.item.items.length?(a(),u("div",dr,[w.depth<5?(a(!0),u(M,{key:0},E(w.item.items,J=>(a(),$(z,{key:J.text,item:J,depth:w.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),pr=g(vr,[["__scopeId","data-v-196b2e5f"]]),fr=_({__name:"VPSidebarGroup",props:{items:{}},setup(n){const e=T(!0);let t=null;return R(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),at(()=>{t!=null&&(clearTimeout(t),t=null)}),(s,o)=>(a(!0),u(M,null,E(s.items,i=>(a(),u("div",{key:i.text,class:N(["group",{"no-transition":e.value}])},[k(pr,{item:i,depth:0},null,8,["item"])],2))),128))}}),hr=g(fr,[["__scopeId","data-v-9e426adc"]]),Ke=n=>(B("data-v-18756405"),n=n(),H(),n),_r=Ke(()=>p("div",{class:"curtain"},null,-1)),mr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},br=Ke(()=>p("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),kr=_({__name:"VPSidebar",props:{open:{type:Boolean}},setup(n){const{sidebarGroups:e,hasSidebar:t}=U(),s=n,o=T(null),i=Ae(oe?document.body:null);O([s,o],()=>{var d;s.open?(i.value=!0,(d=o.value)==null||d.focus()):i.value=!1},{immediate:!0,flush:"post"});const l=T(0);return O(e,()=>{l.value+=1},{deep:!0}),(d,v)=>r(t)?(a(),u("aside",{key:0,class:N(["VPSidebar",{open:d.open}]),ref_key:"navEl",ref:o,onClick:v[0]||(v[0]=rt(()=>{},["stop"]))},[_r,p("nav",mr,[br,c(d.$slots,"sidebar-nav-before",{},void 0,!0),(a(),$(hr,{items:r(e),key:l.value},null,8,["items"])),c(d.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),$r=g(kr,[["__scopeId","data-v-18756405"]]),gr=_({__name:"VPSkipLink",setup(n){const e=ne(),t=T();O(()=>e.path,()=>t.value.focus());function s({target:o}){const i=document.getElementById(decodeURIComponent(o.hash).slice(1));if(i){const l=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",l)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",l),i.focus(),window.scrollTo(0,0)}}return(o,i)=>(a(),u(M,null,[p("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),p("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}}),yr=g(gr,[["__scopeId","data-v-c3508ec8"]]),Pr=_({__name:"Layout",setup(n){const{isOpen:e,open:t,close:s}=U(),o=ne();O(()=>o.path,s),wt(e,s);const{frontmatter:i}=V(),l=Ce(),d=y(()=>!!l["home-hero-image"]);return me("hero-image-slot-exists",d),(v,m)=>{const L=W("Content");return r(i).layout!==!1?(a(),u("div",{key:0,class:N(["Layout",r(i).pageClass])},[c(v.$slots,"layout-top",{},void 0,!0),k(yr),k(pt,{class:"backdrop",show:r(e),onClick:r(s)},null,8,["show","onClick"]),k(rr,null,{"nav-bar-title-before":f(()=>[c(v.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(v.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(v.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(v.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":f(()=>[c(v.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(v.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),k(Oo,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),k($r,{open:r(e)},{"sidebar-nav-before":f(()=>[c(v.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":f(()=>[c(v.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),k(ko,null,{"page-top":f(()=>[c(v.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(v.$slots,"page-bottom",{},void 0,!0)]),"not-found":f(()=>[c(v.$slots,"not-found",{},void 0,!0)]),"home-hero-before":f(()=>[c(v.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(v.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(v.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(v.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(v.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(v.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(v.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(v.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(v.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":f(()=>[c(v.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(v.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(v.$slots,"doc-after",{},void 0,!0)]),"doc-top":f(()=>[c(v.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(v.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":f(()=>[c(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),k(So),c(v.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),$(L,{key:1}))}}}),Sr=g(Pr,[["__scopeId","data-v-a9a9e638"]]),Ve={Layout:Sr,enhanceApp:({app:n})=>{n.component("Badge",ut)}},Vr=n=>{if(typeof document>"u")return{stabilizeScrollPosition:o=>async(...i)=>o(...i)};const e=document.documentElement;return{stabilizeScrollPosition:s=>async(...o)=>{const i=s(...o),l=n.value;if(!l)return i;const d=l.offsetTop-e.scrollTop;return await Ne(),e.scrollTop=l.offsetTop-d,i}}},Re="vitepress:tabSharedState",X=typeof localStorage<"u"?localStorage:null,qe="vitepress:tabsSharedState",Lr=()=>{const n=X==null?void 0:X.getItem(qe);if(n)try{return JSON.parse(n)}catch{}return{}},Tr=n=>{X&&X.setItem(qe,JSON.stringify(n))},wr=n=>{const e=it({});O(()=>e.content,(t,s)=>{t&&s&&Tr(t)},{deep:!0}),n.provide(Re,e)},Ir=(n,e)=>{const t=Y(Re);if(!t)throw new Error("[vitepress-plugin-tabs] TabsSharedState should be injected");R(()=>{t.content||(t.content=Lr())});const s=T(),o=y({get(){var v;const l=e.value,d=n.value;if(l){const m=(v=t.content)==null?void 0:v[l];if(m&&d.includes(m))return m}else{const m=s.value;if(m)return m}return d[0]},set(l){const d=e.value;d?t.content&&(t.content[d]=l):s.value=l}});return{selected:o,select:l=>{o.value=l}}};let Le=0;const Nr=()=>(Le++,""+Le);function Mr(){const n=Ce();return y(()=>{var s;const t=(s=n.default)==null?void 0:s.call(n);return t?t.filter(o=>typeof o.type=="object"&&"__name"in o.type&&o.type.__name==="PluginTabsTab"&&o.props).map(o=>{var i;return(i=o.props)==null?void 0:i.label}):[]})}const We="vitepress:tabSingleState",Ar=n=>{me(We,n)},Cr=()=>{const n=Y(We);if(!n)throw new Error("[vitepress-plugin-tabs] TabsSingleState should be injected");return n},Br={class:"plugin-tabs"},Hr=["id","aria-selected","aria-controls","tabindex","onClick"],Er=_({__name:"PluginTabs",props:{sharedStateKey:{}},setup(n){const e=n,t=Mr(),{selected:s,select:o}=Ir(t,lt(e,"sharedStateKey")),i=T(),{stabilizeScrollPosition:l}=Vr(i),d=l(o),v=T([]),m=b=>{var A;const P=t.value.indexOf(s.value);let S;b.key==="ArrowLeft"?S=P>=1?P-1:t.value.length-1:b.key==="ArrowRight"&&(S=P(a(),u("div",Br,[p("div",{ref_key:"tablist",ref:i,class:"plugin-tabs--tab-list",role:"tablist",onKeydown:m},[(a(!0),u(M,null,E(r(t),S=>(a(),u("button",{id:`tab-${S}-${r(L)}`,ref_for:!0,ref_key:"buttonRefs",ref:v,key:S,role:"tab",class:"plugin-tabs--tab","aria-selected":S===r(s),"aria-controls":`panel-${S}-${r(L)}`,tabindex:S===r(s)?0:-1,onClick:()=>r(d)(S)},I(S),9,Hr))),128))],544),c(b.$slots,"default")]))}}),Dr=["id","aria-labelledby"],Fr=_({__name:"PluginTabsTab",props:{label:{}},setup(n){const{uid:e,selected:t}=Cr();return(s,o)=>r(t)===s.label?(a(),u("div",{key:0,id:`panel-${s.label}-${r(e)}`,class:"plugin-tabs--content",role:"tabpanel",tabindex:"0","aria-labelledby":`tab-${s.label}-${r(e)}`},[c(s.$slots,"default",{},void 0,!0)],8,Dr)):h("",!0)}}),Or=g(Fr,[["__scopeId","data-v-9b0d03d2"]]),jr=n=>{wr(n),n.component("PluginTabs",Er),n.component("PluginTabsTab",Or)},Gr={extends:Ve,Layout(){return ct(Ve.Layout,null,{})},enhanceApp({app:n,router:e,siteData:t}){jr(n)}};export{Gr as R,Xs as c,V as u}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/chunks/VPLocalSearchBox.DLn4sKrv.js","assets/chunks/framework.CONf0Rze.js"])))=>i.map(i=>d[i]); +import{d as _,o as a,c as u,r as c,n as N,a as j,t as I,b as $,w as f,e as h,T as pe,_ as g,u as Je,i as Ye,f as Xe,g as fe,h as y,j as p,k as r,p as B,l as H,m as q,q as le,s as T,v as O,x as ee,y as R,z as he,A as _e,B as Qe,C as Ze,D as W,F as M,E,G as Te,H as te,I as k,J as D,K as we,L as ne,M as K,N as Y,O as xe,P as Ie,Q as ce,R as Ne,S as Me,U as oe,V as et,W as tt,X as nt,Y as Ae,Z as me,$ as ot,a0 as st,a1 as at,a2 as rt,a3 as Ce,a4 as it,a5 as lt,a6 as ct}from"./framework.CONf0Rze.js";const ut=_({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(n){return(e,t)=>(a(),u("span",{class:N(["VPBadge",e.type])},[c(e.$slots,"default",{},()=>[j(I(e.text),1)])],2))}}),dt={key:0,class:"VPBackdrop"},vt=_({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(n){return(e,t)=>(a(),$(pe,{name:"fade"},{default:f(()=>[e.show?(a(),u("div",dt)):h("",!0)]),_:1}))}}),pt=g(vt,[["__scopeId","data-v-b06cdb19"]]),V=Je;function ft(n,e){let t,s=!1;return()=>{t&&clearTimeout(t),s?t=setTimeout(n,e):(n(),(s=!0)&&setTimeout(()=>s=!1,e))}}function ue(n){return/^\//.test(n)?n:`/${n}`}function be(n){const{pathname:e,search:t,hash:s,protocol:o}=new URL(n,"http://a.com");if(Ye(n)||n.startsWith("#")||!o.startsWith("http")||!Xe(e))return n;const{site:i}=V(),l=e.endsWith("/")||e.endsWith(".html")?n:n.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${t}${s}`);return fe(l)}function Q({correspondingLink:n=!1}={}){const{site:e,localeIndex:t,page:s,theme:o,hash:i}=V(),l=y(()=>{var v,m;return{label:(v=e.value.locales[t.value])==null?void 0:v.label,link:((m=e.value.locales[t.value])==null?void 0:m.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:y(()=>Object.entries(e.value.locales).flatMap(([v,m])=>l.value.label===m.label?[]:{text:m.label,link:ht(m.link||(v==="root"?"/":`/${v}/`),o.value.i18nRouting!==!1&&n,s.value.relativePath.slice(l.value.link.length-1),!e.value.cleanUrls)+i.value})),currentLang:l}}function ht(n,e,t,s){return e?n.replace(/\/$/,"")+ue(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):n}const _t=n=>(B("data-v-951cab6c"),n=n(),H(),n),mt={class:"NotFound"},bt={class:"code"},kt={class:"title"},$t=_t(()=>p("div",{class:"divider"},null,-1)),gt={class:"quote"},yt={class:"action"},Pt=["href","aria-label"],St=_({__name:"NotFound",setup(n){const{theme:e}=V(),{currentLang:t}=Q();return(s,o)=>{var i,l,d,v,m;return a(),u("div",mt,[p("p",bt,I(((i=r(e).notFound)==null?void 0:i.code)??"404"),1),p("h1",kt,I(((l=r(e).notFound)==null?void 0:l.title)??"PAGE NOT FOUND"),1),$t,p("blockquote",gt,I(((d=r(e).notFound)==null?void 0:d.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),p("div",yt,[p("a",{class:"link",href:r(fe)(r(t).link),"aria-label":((v=r(e).notFound)==null?void 0:v.linkLabel)??"go to home"},I(((m=r(e).notFound)==null?void 0:m.linkText)??"Take me home"),9,Pt)])])}}}),Vt=g(St,[["__scopeId","data-v-951cab6c"]]);function Be(n,e){if(Array.isArray(n))return Z(n);if(n==null)return[];e=ue(e);const t=Object.keys(n).sort((o,i)=>i.split("/").length-o.split("/").length).find(o=>e.startsWith(ue(o))),s=t?n[t]:[];return Array.isArray(s)?Z(s):Z(s.items,s.base)}function Lt(n){const e=[];let t=0;for(const s in n){const o=n[s];if(o.items){t=e.push(o);continue}e[t]||e.push({items:[]}),e[t].items.push(o)}return e}function Tt(n){const e=[];function t(s){for(const o of s)o.text&&o.link&&e.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&t(o.items)}return t(n),e}function de(n,e){return Array.isArray(e)?e.some(t=>de(n,t)):q(n,e.link)?!0:e.items?de(n,e.items):!1}function Z(n,e){return[...n].map(t=>{const s={...t},o=s.base||e;return o&&s.link&&(s.link=o+s.link),s.items&&(s.items=Z(s.items,o)),s})}function U(){const{frontmatter:n,page:e,theme:t}=V(),s=le("(min-width: 960px)"),o=T(!1),i=y(()=>{const C=t.value.sidebar,w=e.value.relativePath;return C?Be(C,w):[]}),l=T(i.value);O(i,(C,w)=>{JSON.stringify(C)!==JSON.stringify(w)&&(l.value=i.value)});const d=y(()=>n.value.sidebar!==!1&&l.value.length>0&&n.value.layout!=="home"),v=y(()=>m?n.value.aside==null?t.value.aside==="left":n.value.aside==="left":!1),m=y(()=>n.value.layout==="home"?!1:n.value.aside!=null?!!n.value.aside:t.value.aside!==!1),L=y(()=>d.value&&s.value),b=y(()=>d.value?Lt(l.value):[]);function P(){o.value=!0}function S(){o.value=!1}function A(){o.value?S():P()}return{isOpen:o,sidebar:l,sidebarGroups:b,hasSidebar:d,hasAside:m,leftAside:v,isSidebarEnabled:L,open:P,close:S,toggle:A}}function wt(n,e){let t;ee(()=>{t=n.value?document.activeElement:void 0}),R(()=>{window.addEventListener("keyup",s)}),he(()=>{window.removeEventListener("keyup",s)});function s(o){o.key==="Escape"&&n.value&&(e(),t==null||t.focus())}}function It(n){const{page:e,hash:t}=V(),s=T(!1),o=y(()=>n.value.collapsed!=null),i=y(()=>!!n.value.link),l=T(!1),d=()=>{l.value=q(e.value.relativePath,n.value.link)};O([e,n,t],d),R(d);const v=y(()=>l.value?!0:n.value.items?de(e.value.relativePath,n.value.items):!1),m=y(()=>!!(n.value.items&&n.value.items.length));ee(()=>{s.value=!!(o.value&&n.value.collapsed)}),_e(()=>{(l.value||v.value)&&(s.value=!1)});function L(){o.value&&(s.value=!s.value)}return{collapsed:s,collapsible:o,isLink:i,isActiveLink:l,hasActiveLink:v,hasChildren:m,toggle:L}}function Nt(){const{hasSidebar:n}=U(),e=le("(min-width: 960px)"),t=le("(min-width: 1280px)");return{isAsideEnabled:y(()=>!t.value&&!e.value?!1:n.value?t.value:e.value)}}const ve=[];function He(n){return typeof n.outline=="object"&&!Array.isArray(n.outline)&&n.outline.label||n.outlineTitle||"On this page"}function ke(n){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const s=Number(t.tagName[1]);return{element:t,title:Mt(t),link:"#"+t.id,level:s}});return At(e,n)}function Mt(n){let e="";for(const t of n.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor")||t.classList.contains("ignore-header"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function At(n,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[s,o]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;n=n.filter(l=>l.level>=s&&l.level<=o),ve.length=0;for(const{element:l,link:d}of n)ve.push({element:l,link:d});const i=[];e:for(let l=0;l=0;v--){const m=n[v];if(m.level{requestAnimationFrame(i),window.addEventListener("scroll",s)}),Qe(()=>{l(location.hash)}),he(()=>{window.removeEventListener("scroll",s)});function i(){if(!t.value)return;const d=window.scrollY,v=window.innerHeight,m=document.body.offsetHeight,L=Math.abs(d+v-m)<1,b=ve.map(({element:S,link:A})=>({link:A,top:Bt(S)})).filter(({top:S})=>!Number.isNaN(S)).sort((S,A)=>S.top-A.top);if(!b.length){l(null);return}if(d<1){l(null);return}if(L){l(b[b.length-1].link);return}let P=null;for(const{link:S,top:A}of b){if(A>d+Ze()+4)break;P=S}l(P)}function l(d){o&&o.classList.remove("active"),d==null?o=null:o=n.value.querySelector(`a[href="${decodeURIComponent(d)}"]`);const v=o;v?(v.classList.add("active"),e.value.style.top=v.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Bt(n){let e=0;for(;n!==document.body;){if(n===null)return NaN;e+=n.offsetTop,n=n.offsetParent}return e}const Ht=["href","title"],Et=_({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(n){function e({target:t}){const s=t.href.split("#")[1],o=document.getElementById(decodeURIComponent(s));o==null||o.focus({preventScroll:!0})}return(t,s)=>{const o=W("VPDocOutlineItem",!0);return a(),u("ul",{class:N(["VPDocOutlineItem",t.root?"root":"nested"])},[(a(!0),u(M,null,E(t.headers,({children:i,link:l,title:d})=>(a(),u("li",null,[p("a",{class:"outline-link",href:l,onClick:e,title:d},I(d),9,Ht),i!=null&&i.length?(a(),$(o,{key:0,headers:i},null,8,["headers"])):h("",!0)]))),256))],2)}}}),Ee=g(Et,[["__scopeId","data-v-3f927ebe"]]),Dt={class:"content"},Ft={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Ot=_({__name:"VPDocAsideOutline",setup(n){const{frontmatter:e,theme:t}=V(),s=Te([]);te(()=>{s.value=ke(e.value.outline??t.value.outline)});const o=T(),i=T();return Ct(o,i),(l,d)=>(a(),u("nav",{"aria-labelledby":"doc-outline-aria-label",class:N(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:o},[p("div",Dt,[p("div",{class:"outline-marker",ref_key:"marker",ref:i},null,512),p("div",Ft,I(r(He)(r(t))),1),k(Ee,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),jt=g(Ot,[["__scopeId","data-v-b38bf2ff"]]),Ut={class:"VPDocAsideCarbonAds"},Gt=_({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(n){const e=()=>null;return(t,s)=>(a(),u("div",Ut,[k(r(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),zt=n=>(B("data-v-6d7b3c46"),n=n(),H(),n),Kt={class:"VPDocAside"},Rt=zt(()=>p("div",{class:"spacer"},null,-1)),qt=_({__name:"VPDocAside",setup(n){const{theme:e}=V();return(t,s)=>(a(),u("div",Kt,[c(t.$slots,"aside-top",{},void 0,!0),c(t.$slots,"aside-outline-before",{},void 0,!0),k(jt),c(t.$slots,"aside-outline-after",{},void 0,!0),Rt,c(t.$slots,"aside-ads-before",{},void 0,!0),r(e).carbonAds?(a(),$(Gt,{key:0,"carbon-ads":r(e).carbonAds},null,8,["carbon-ads"])):h("",!0),c(t.$slots,"aside-ads-after",{},void 0,!0),c(t.$slots,"aside-bottom",{},void 0,!0)]))}}),Wt=g(qt,[["__scopeId","data-v-6d7b3c46"]]);function Jt(){const{theme:n,page:e}=V();return y(()=>{const{text:t="Edit this page",pattern:s=""}=n.value.editLink||{};let o;return typeof s=="function"?o=s(e.value):o=s.replace(/:path/g,e.value.filePath),{url:o,text:t}})}function Yt(){const{page:n,theme:e,frontmatter:t}=V();return y(()=>{var m,L,b,P,S,A,C,w;const s=Be(e.value.sidebar,n.value.relativePath),o=Tt(s),i=Xt(o,G=>G.link.replace(/[?#].*$/,"")),l=i.findIndex(G=>q(n.value.relativePath,G.link)),d=((m=e.value.docFooter)==null?void 0:m.prev)===!1&&!t.value.prev||t.value.prev===!1,v=((L=e.value.docFooter)==null?void 0:L.next)===!1&&!t.value.next||t.value.next===!1;return{prev:d?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((b=i[l-1])==null?void 0:b.docFooterText)??((P=i[l-1])==null?void 0:P.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((S=i[l-1])==null?void 0:S.link)},next:v?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((A=i[l+1])==null?void 0:A.docFooterText)??((C=i[l+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((w=i[l+1])==null?void 0:w.link)}}})}function Xt(n,e){const t=new Set;return n.filter(s=>{const o=e(s);return t.has(o)?!1:t.add(o)})}const F=_({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(n){const e=n,t=y(()=>e.tag??(e.href?"a":"span")),s=y(()=>e.href&&we.test(e.href)||e.target==="_blank");return(o,i)=>(a(),$(D(t.value),{class:N(["VPLink",{link:o.href,"vp-external-link-icon":s.value,"no-icon":o.noIcon}]),href:o.href?r(be)(o.href):void 0,target:o.target??(s.value?"_blank":void 0),rel:o.rel??(s.value?"noreferrer":void 0)},{default:f(()=>[c(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Qt={class:"VPLastUpdated"},Zt=["datetime"],xt=_({__name:"VPDocFooterLastUpdated",setup(n){const{theme:e,page:t,lang:s}=V(),o=y(()=>new Date(t.value.lastUpdated)),i=y(()=>o.value.toISOString()),l=T("");return R(()=>{ee(()=>{var d,v,m;l.value=new Intl.DateTimeFormat((v=(d=e.value.lastUpdated)==null?void 0:d.formatOptions)!=null&&v.forceLocale?s.value:void 0,((m=e.value.lastUpdated)==null?void 0:m.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(o.value)})}),(d,v)=>{var m;return a(),u("p",Qt,[j(I(((m=r(e).lastUpdated)==null?void 0:m.text)||r(e).lastUpdatedText||"Last updated")+": ",1),p("time",{datetime:i.value},I(l.value),9,Zt)])}}}),en=g(xt,[["__scopeId","data-v-475f71b8"]]),De=n=>(B("data-v-4f9813fa"),n=n(),H(),n),tn={key:0,class:"VPDocFooter"},nn={key:0,class:"edit-info"},on={key:0,class:"edit-link"},sn=De(()=>p("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),an={key:1,class:"last-updated"},rn={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},ln=De(()=>p("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),cn={class:"pager"},un=["innerHTML"],dn=["innerHTML"],vn={class:"pager"},pn=["innerHTML"],fn=["innerHTML"],hn=_({__name:"VPDocFooter",setup(n){const{theme:e,page:t,frontmatter:s}=V(),o=Jt(),i=Yt(),l=y(()=>e.value.editLink&&s.value.editLink!==!1),d=y(()=>t.value.lastUpdated),v=y(()=>l.value||d.value||i.value.prev||i.value.next);return(m,L)=>{var b,P,S,A;return v.value?(a(),u("footer",tn,[c(m.$slots,"doc-footer-before",{},void 0,!0),l.value||d.value?(a(),u("div",nn,[l.value?(a(),u("div",on,[k(F,{class:"edit-link-button",href:r(o).url,"no-icon":!0},{default:f(()=>[sn,j(" "+I(r(o).text),1)]),_:1},8,["href"])])):h("",!0),d.value?(a(),u("div",an,[k(en)])):h("",!0)])):h("",!0),(b=r(i).prev)!=null&&b.link||(P=r(i).next)!=null&&P.link?(a(),u("nav",rn,[ln,p("div",cn,[(S=r(i).prev)!=null&&S.link?(a(),$(F,{key:0,class:"pager-link prev",href:r(i).prev.link},{default:f(()=>{var C;return[p("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,un),p("span",{class:"title",innerHTML:r(i).prev.text},null,8,dn)]}),_:1},8,["href"])):h("",!0)]),p("div",vn,[(A=r(i).next)!=null&&A.link?(a(),$(F,{key:0,class:"pager-link next",href:r(i).next.link},{default:f(()=>{var C;return[p("span",{class:"desc",innerHTML:((C=r(e).docFooter)==null?void 0:C.next)||"Next page"},null,8,pn),p("span",{class:"title",innerHTML:r(i).next.text},null,8,fn)]}),_:1},8,["href"])):h("",!0)])])):h("",!0)])):h("",!0)}}}),_n=g(hn,[["__scopeId","data-v-4f9813fa"]]),mn=n=>(B("data-v-83890dd9"),n=n(),H(),n),bn={class:"container"},kn=mn(()=>p("div",{class:"aside-curtain"},null,-1)),$n={class:"aside-container"},gn={class:"aside-content"},yn={class:"content"},Pn={class:"content-container"},Sn={class:"main"},Vn=_({__name:"VPDoc",setup(n){const{theme:e}=V(),t=ne(),{hasSidebar:s,hasAside:o,leftAside:i}=U(),l=y(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(d,v)=>{const m=W("Content");return a(),u("div",{class:N(["VPDoc",{"has-sidebar":r(s),"has-aside":r(o)}])},[c(d.$slots,"doc-top",{},void 0,!0),p("div",bn,[r(o)?(a(),u("div",{key:0,class:N(["aside",{"left-aside":r(i)}])},[kn,p("div",$n,[p("div",gn,[k(Wt,null,{"aside-top":f(()=>[c(d.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(d.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(d.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(d.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(d.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(d.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):h("",!0),p("div",yn,[p("div",Pn,[c(d.$slots,"doc-before",{},void 0,!0),p("main",Sn,[k(m,{class:N(["vp-doc",[l.value,r(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),k(_n,null,{"doc-footer-before":f(()=>[c(d.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),c(d.$slots,"doc-after",{},void 0,!0)])])]),c(d.$slots,"doc-bottom",{},void 0,!0)],2)}}}),Ln=g(Vn,[["__scopeId","data-v-83890dd9"]]),Tn=_({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(n){const e=n,t=y(()=>e.href&&we.test(e.href)),s=y(()=>e.tag||e.href?"a":"button");return(o,i)=>(a(),$(D(s.value),{class:N(["VPButton",[o.size,o.theme]]),href:o.href?r(be)(o.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:f(()=>[j(I(o.text),1)]),_:1},8,["class","href","target","rel"]))}}),wn=g(Tn,[["__scopeId","data-v-14206e74"]]),In=["src","alt"],Nn=_({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(n){return(e,t)=>{const s=W("VPImage",!0);return e.image?(a(),u(M,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),u("img",K({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:r(fe)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,In)):(a(),u(M,{key:1},[k(s,K({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),k(s,K({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):h("",!0)}}}),x=g(Nn,[["__scopeId","data-v-35a7d0b8"]]),Mn=n=>(B("data-v-955009fc"),n=n(),H(),n),An={class:"container"},Cn={class:"main"},Bn={key:0,class:"name"},Hn=["innerHTML"],En=["innerHTML"],Dn=["innerHTML"],Fn={key:0,class:"actions"},On={key:0,class:"image"},jn={class:"image-container"},Un=Mn(()=>p("div",{class:"image-bg"},null,-1)),Gn=_({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(n){const e=Y("hero-image-slot-exists");return(t,s)=>(a(),u("div",{class:N(["VPHero",{"has-image":t.image||r(e)}])},[p("div",An,[p("div",Cn,[c(t.$slots,"home-hero-info-before",{},void 0,!0),c(t.$slots,"home-hero-info",{},()=>[t.name?(a(),u("h1",Bn,[p("span",{innerHTML:t.name,class:"clip"},null,8,Hn)])):h("",!0),t.text?(a(),u("p",{key:1,innerHTML:t.text,class:"text"},null,8,En)):h("",!0),t.tagline?(a(),u("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,Dn)):h("",!0)],!0),c(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(a(),u("div",Fn,[(a(!0),u(M,null,E(t.actions,o=>(a(),u("div",{key:o.link,class:"action"},[k(wn,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link,target:o.target,rel:o.rel},null,8,["theme","text","href","target","rel"])]))),128))])):h("",!0),c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||r(e)?(a(),u("div",On,[p("div",jn,[Un,c(t.$slots,"home-hero-image",{},()=>[t.image?(a(),$(x,{key:0,class:"image-src",image:t.image},null,8,["image"])):h("",!0)],!0)])])):h("",!0)])],2))}}),zn=g(Gn,[["__scopeId","data-v-955009fc"]]),Kn=_({__name:"VPHomeHero",setup(n){const{frontmatter:e}=V();return(t,s)=>r(e).hero?(a(),$(zn,{key:0,class:"VPHomeHero",name:r(e).hero.name,text:r(e).hero.text,tagline:r(e).hero.tagline,image:r(e).hero.image,actions:r(e).hero.actions},{"home-hero-info-before":f(()=>[c(t.$slots,"home-hero-info-before")]),"home-hero-info":f(()=>[c(t.$slots,"home-hero-info")]),"home-hero-info-after":f(()=>[c(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":f(()=>[c(t.$slots,"home-hero-actions-after")]),"home-hero-image":f(()=>[c(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):h("",!0)}}),Rn=n=>(B("data-v-f5e9645b"),n=n(),H(),n),qn={class:"box"},Wn={key:0,class:"icon"},Jn=["innerHTML"],Yn=["innerHTML"],Xn=["innerHTML"],Qn={key:4,class:"link-text"},Zn={class:"link-text-value"},xn=Rn(()=>p("span",{class:"vpi-arrow-right link-text-icon"},null,-1)),eo=_({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(n){return(e,t)=>(a(),$(F,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:f(()=>[p("article",qn,[typeof e.icon=="object"&&e.icon.wrap?(a(),u("div",Wn,[k(x,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),$(x,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),u("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Jn)):h("",!0),p("h2",{class:"title",innerHTML:e.title},null,8,Yn),e.details?(a(),u("p",{key:3,class:"details",innerHTML:e.details},null,8,Xn)):h("",!0),e.linkText?(a(),u("div",Qn,[p("p",Zn,[j(I(e.linkText)+" ",1),xn])])):h("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),to=g(eo,[["__scopeId","data-v-f5e9645b"]]),no={key:0,class:"VPFeatures"},oo={class:"container"},so={class:"items"},ao=_({__name:"VPFeatures",props:{features:{}},setup(n){const e=n,t=y(()=>{const s=e.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,o)=>s.features?(a(),u("div",no,[p("div",oo,[p("div",so,[(a(!0),u(M,null,E(s.features,i=>(a(),u("div",{key:i.title,class:N(["item",[t.value]])},[k(to,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):h("",!0)}}),ro=g(ao,[["__scopeId","data-v-d0a190d7"]]),io=_({__name:"VPHomeFeatures",setup(n){const{frontmatter:e}=V();return(t,s)=>r(e).features?(a(),$(ro,{key:0,class:"VPHomeFeatures",features:r(e).features},null,8,["features"])):h("",!0)}}),lo=_({__name:"VPHomeContent",setup(n){const{width:e}=xe({initialWidth:0,includeScrollbar:!1});return(t,s)=>(a(),u("div",{class:"vp-doc container",style:Ie(r(e)?{"--vp-offset":`calc(50% - ${r(e)/2}px)`}:{})},[c(t.$slots,"default",{},void 0,!0)],4))}}),co=g(lo,[["__scopeId","data-v-7a48a447"]]),uo={class:"VPHome"},vo=_({__name:"VPHome",setup(n){const{frontmatter:e}=V();return(t,s)=>{const o=W("Content");return a(),u("div",uo,[c(t.$slots,"home-hero-before",{},void 0,!0),k(Kn,null,{"home-hero-info-before":f(()=>[c(t.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(t.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(t.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(t.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(t.$slots,"home-hero-image",{},void 0,!0)]),_:3}),c(t.$slots,"home-hero-after",{},void 0,!0),c(t.$slots,"home-features-before",{},void 0,!0),k(io),c(t.$slots,"home-features-after",{},void 0,!0),r(e).markdownStyles!==!1?(a(),$(co,{key:0},{default:f(()=>[k(o)]),_:1})):(a(),$(o,{key:1}))])}}}),po=g(vo,[["__scopeId","data-v-cbb6ec48"]]),fo={},ho={class:"VPPage"};function _o(n,e){const t=W("Content");return a(),u("div",ho,[c(n.$slots,"page-top"),k(t),c(n.$slots,"page-bottom")])}const mo=g(fo,[["render",_o]]),bo=_({__name:"VPContent",setup(n){const{page:e,frontmatter:t}=V(),{hasSidebar:s}=U();return(o,i)=>(a(),u("div",{class:N(["VPContent",{"has-sidebar":r(s),"is-home":r(t).layout==="home"}]),id:"VPContent"},[r(e).isNotFound?c(o.$slots,"not-found",{key:0},()=>[k(Vt)],!0):r(t).layout==="page"?(a(),$(mo,{key:1},{"page-top":f(()=>[c(o.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(o.$slots,"page-bottom",{},void 0,!0)]),_:3})):r(t).layout==="home"?(a(),$(po,{key:2},{"home-hero-before":f(()=>[c(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(o.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(o.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(o.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(o.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):r(t).layout&&r(t).layout!=="doc"?(a(),$(D(r(t).layout),{key:3})):(a(),$(Ln,{key:4},{"doc-top":f(()=>[c(o.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(o.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":f(()=>[c(o.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":f(()=>[c(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":f(()=>[c(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":f(()=>[c(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),ko=g(bo,[["__scopeId","data-v-91765379"]]),$o={class:"container"},go=["innerHTML"],yo=["innerHTML"],Po=_({__name:"VPFooter",setup(n){const{theme:e,frontmatter:t}=V(),{hasSidebar:s}=U();return(o,i)=>r(e).footer&&r(t).footer!==!1?(a(),u("footer",{key:0,class:N(["VPFooter",{"has-sidebar":r(s)}])},[p("div",$o,[r(e).footer.message?(a(),u("p",{key:0,class:"message",innerHTML:r(e).footer.message},null,8,go)):h("",!0),r(e).footer.copyright?(a(),u("p",{key:1,class:"copyright",innerHTML:r(e).footer.copyright},null,8,yo)):h("",!0)])],2)):h("",!0)}}),So=g(Po,[["__scopeId","data-v-c970a860"]]);function Vo(){const{theme:n,frontmatter:e}=V(),t=Te([]),s=y(()=>t.value.length>0);return te(()=>{t.value=ke(e.value.outline??n.value.outline)}),{headers:t,hasLocalNav:s}}const Lo=n=>(B("data-v-bc9dc845"),n=n(),H(),n),To={class:"menu-text"},wo=Lo(()=>p("span",{class:"vpi-chevron-right icon"},null,-1)),Io={class:"header"},No={class:"outline"},Mo=_({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(n){const e=n,{theme:t}=V(),s=T(!1),o=T(0),i=T(),l=T();function d(b){var P;(P=i.value)!=null&&P.contains(b.target)||(s.value=!1)}O(s,b=>{if(b){document.addEventListener("click",d);return}document.removeEventListener("click",d)}),ce("Escape",()=>{s.value=!1}),te(()=>{s.value=!1});function v(){s.value=!s.value,o.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function m(b){b.target.classList.contains("outline-link")&&(l.value&&(l.value.style.transition="none"),Ne(()=>{s.value=!1}))}function L(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(b,P)=>(a(),u("div",{class:"VPLocalNavOutlineDropdown",style:Ie({"--vp-vh":o.value+"px"}),ref_key:"main",ref:i},[b.headers.length>0?(a(),u("button",{key:0,onClick:v,class:N({open:s.value})},[p("span",To,I(r(He)(r(t))),1),wo],2)):(a(),u("button",{key:1,onClick:L},I(r(t).returnToTopLabel||"Return to top"),1)),k(pe,{name:"flyout"},{default:f(()=>[s.value?(a(),u("div",{key:0,ref_key:"items",ref:l,class:"items",onClick:m},[p("div",Io,[p("a",{class:"top-link",href:"#",onClick:L},I(r(t).returnToTopLabel||"Return to top"),1)]),p("div",No,[k(Ee,{headers:b.headers},null,8,["headers"])])],512)):h("",!0)]),_:1})],4))}}),Ao=g(Mo,[["__scopeId","data-v-bc9dc845"]]),Co=n=>(B("data-v-070ab83d"),n=n(),H(),n),Bo={class:"container"},Ho=["aria-expanded"],Eo=Co(()=>p("span",{class:"vpi-align-left menu-icon"},null,-1)),Do={class:"menu-text"},Fo=_({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(n){const{theme:e,frontmatter:t}=V(),{hasSidebar:s}=U(),{headers:o}=Vo(),{y:i}=Me(),l=T(0);R(()=>{l.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),te(()=>{o.value=ke(t.value.outline??e.value.outline)});const d=y(()=>o.value.length===0),v=y(()=>d.value&&!s.value),m=y(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:d.value,fixed:v.value}));return(L,b)=>r(t).layout!=="home"&&(!v.value||r(i)>=l.value)?(a(),u("div",{key:0,class:N(m.value)},[p("div",Bo,[r(s)?(a(),u("button",{key:0,class:"menu","aria-expanded":L.open,"aria-controls":"VPSidebarNav",onClick:b[0]||(b[0]=P=>L.$emit("open-menu"))},[Eo,p("span",Do,I(r(e).sidebarMenuLabel||"Menu"),1)],8,Ho)):h("",!0),k(Ao,{headers:r(o),navHeight:l.value},null,8,["headers","navHeight"])])],2)):h("",!0)}}),Oo=g(Fo,[["__scopeId","data-v-070ab83d"]]);function jo(){const n=T(!1);function e(){n.value=!0,window.addEventListener("resize",o)}function t(){n.value=!1,window.removeEventListener("resize",o)}function s(){n.value?t():e()}function o(){window.outerWidth>=768&&t()}const i=ne();return O(()=>i.path,t),{isScreenOpen:n,openScreen:e,closeScreen:t,toggleScreen:s}}const Uo={},Go={class:"VPSwitch",type:"button",role:"switch"},zo={class:"check"},Ko={key:0,class:"icon"};function Ro(n,e){return a(),u("button",Go,[p("span",zo,[n.$slots.default?(a(),u("span",Ko,[c(n.$slots,"default",{},void 0,!0)])):h("",!0)])])}const qo=g(Uo,[["render",Ro],["__scopeId","data-v-4a1c76db"]]),Fe=n=>(B("data-v-e40a8bb6"),n=n(),H(),n),Wo=Fe(()=>p("span",{class:"vpi-sun sun"},null,-1)),Jo=Fe(()=>p("span",{class:"vpi-moon moon"},null,-1)),Yo=_({__name:"VPSwitchAppearance",setup(n){const{isDark:e,theme:t}=V(),s=Y("toggle-appearance",()=>{e.value=!e.value}),o=T("");return _e(()=>{o.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,l)=>(a(),$(qo,{title:o.value,class:"VPSwitchAppearance","aria-checked":r(e),onClick:r(s)},{default:f(()=>[Wo,Jo]),_:1},8,["title","aria-checked","onClick"]))}}),$e=g(Yo,[["__scopeId","data-v-e40a8bb6"]]),Xo={key:0,class:"VPNavBarAppearance"},Qo=_({__name:"VPNavBarAppearance",setup(n){const{site:e}=V();return(t,s)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Xo,[k($e)])):h("",!0)}}),Zo=g(Qo,[["__scopeId","data-v-af096f4a"]]),ge=T();let Oe=!1,ie=0;function xo(n){const e=T(!1);if(oe){!Oe&&es(),ie++;const t=O(ge,s=>{var o,i,l;s===n.el.value||(o=n.el.value)!=null&&o.contains(s)?(e.value=!0,(i=n.onFocus)==null||i.call(n)):(e.value=!1,(l=n.onBlur)==null||l.call(n))});he(()=>{t(),ie--,ie||ts()})}return et(e)}function es(){document.addEventListener("focusin",je),Oe=!0,ge.value=document.activeElement}function ts(){document.removeEventListener("focusin",je)}function je(){ge.value=document.activeElement}const ns={class:"VPMenuLink"},os=_({__name:"VPMenuLink",props:{item:{}},setup(n){const{page:e}=V();return(t,s)=>(a(),u("div",ns,[k(F,{class:N({active:r(q)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:f(()=>[j(I(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}}),se=g(os,[["__scopeId","data-v-8b74d055"]]),ss={class:"VPMenuGroup"},as={key:0,class:"title"},rs=_({__name:"VPMenuGroup",props:{text:{},items:{}},setup(n){return(e,t)=>(a(),u("div",ss,[e.text?(a(),u("p",as,I(e.text),1)):h("",!0),(a(!0),u(M,null,E(e.items,s=>(a(),u(M,null,["link"in s?(a(),$(se,{key:0,item:s},null,8,["item"])):h("",!0)],64))),256))]))}}),is=g(rs,[["__scopeId","data-v-48c802d0"]]),ls={class:"VPMenu"},cs={key:0,class:"items"},us=_({__name:"VPMenu",props:{items:{}},setup(n){return(e,t)=>(a(),u("div",ls,[e.items?(a(),u("div",cs,[(a(!0),u(M,null,E(e.items,s=>(a(),u(M,{key:JSON.stringify(s)},["link"in s?(a(),$(se,{key:0,item:s},null,8,["item"])):"component"in s?(a(),$(D(s.component),K({key:1,ref_for:!0},s.props),null,16)):(a(),$(is,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):h("",!0),c(e.$slots,"default",{},void 0,!0)]))}}),ds=g(us,[["__scopeId","data-v-7dd3104a"]]),vs=n=>(B("data-v-e5380155"),n=n(),H(),n),ps=["aria-expanded","aria-label"],fs={key:0,class:"text"},hs=["innerHTML"],_s=vs(()=>p("span",{class:"vpi-chevron-down text-icon"},null,-1)),ms={key:1,class:"vpi-more-horizontal icon"},bs={class:"menu"},ks=_({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(n){const e=T(!1),t=T();xo({el:t,onBlur:s});function s(){e.value=!1}return(o,i)=>(a(),u("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:i[1]||(i[1]=l=>e.value=!0),onMouseleave:i[2]||(i[2]=l=>e.value=!1)},[p("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":o.label,onClick:i[0]||(i[0]=l=>e.value=!e.value)},[o.button||o.icon?(a(),u("span",fs,[o.icon?(a(),u("span",{key:0,class:N([o.icon,"option-icon"])},null,2)):h("",!0),o.button?(a(),u("span",{key:1,innerHTML:o.button},null,8,hs)):h("",!0),_s])):(a(),u("span",ms))],8,ps),p("div",bs,[k(ds,{items:o.items},{default:f(()=>[c(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),ye=g(ks,[["__scopeId","data-v-e5380155"]]),$s=["href","aria-label","innerHTML"],gs=_({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(n){const e=n,t=y(()=>typeof e.icon=="object"?e.icon.svg:``);return(s,o)=>(a(),u("a",{class:"VPSocialLink no-icon",href:s.link,"aria-label":s.ariaLabel??(typeof s.icon=="string"?s.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,$s))}}),ys=g(gs,[["__scopeId","data-v-717b8b75"]]),Ps={class:"VPSocialLinks"},Ss=_({__name:"VPSocialLinks",props:{links:{}},setup(n){return(e,t)=>(a(),u("div",Ps,[(a(!0),u(M,null,E(e.links,({link:s,icon:o,ariaLabel:i})=>(a(),$(ys,{key:s,icon:o,link:s,ariaLabel:i},null,8,["icon","link","ariaLabel"]))),128))]))}}),Pe=g(Ss,[["__scopeId","data-v-ee7a9424"]]),Vs={key:0,class:"group translations"},Ls={class:"trans-title"},Ts={key:1,class:"group"},ws={class:"item appearance"},Is={class:"label"},Ns={class:"appearance-action"},Ms={key:2,class:"group"},As={class:"item social-links"},Cs=_({__name:"VPNavBarExtra",setup(n){const{site:e,theme:t}=V(),{localeLinks:s,currentLang:o}=Q({correspondingLink:!0}),i=y(()=>s.value.length&&o.value.label||e.value.appearance||t.value.socialLinks);return(l,d)=>i.value?(a(),$(ye,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:f(()=>[r(s).length&&r(o).label?(a(),u("div",Vs,[p("p",Ls,I(r(o).label),1),(a(!0),u(M,null,E(r(s),v=>(a(),$(se,{key:v.link,item:v},null,8,["item"]))),128))])):h("",!0),r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",Ts,[p("div",ws,[p("p",Is,I(r(t).darkModeSwitchLabel||"Appearance"),1),p("div",Ns,[k($e)])])])):h("",!0),r(t).socialLinks?(a(),u("div",Ms,[p("div",As,[k(Pe,{class:"social-links-list",links:r(t).socialLinks},null,8,["links"])])])):h("",!0)]),_:1})):h("",!0)}}),Bs=g(Cs,[["__scopeId","data-v-925effce"]]),Hs=n=>(B("data-v-5dea55bf"),n=n(),H(),n),Es=["aria-expanded"],Ds=Hs(()=>p("span",{class:"container"},[p("span",{class:"top"}),p("span",{class:"middle"}),p("span",{class:"bottom"})],-1)),Fs=[Ds],Os=_({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(n){return(e,t)=>(a(),u("button",{type:"button",class:N(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=s=>e.$emit("click"))},Fs,10,Es))}}),js=g(Os,[["__scopeId","data-v-5dea55bf"]]),Us=["innerHTML"],Gs=_({__name:"VPNavBarMenuLink",props:{item:{}},setup(n){const{page:e}=V();return(t,s)=>(a(),$(F,{class:N({VPNavBarMenuLink:!0,active:r(q)(r(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,noIcon:t.item.noIcon,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:f(()=>[p("span",{innerHTML:t.item.text},null,8,Us)]),_:1},8,["class","href","noIcon","target","rel"]))}}),zs=g(Gs,[["__scopeId","data-v-ed5ac1f6"]]),Ks=_({__name:"VPNavBarMenuGroup",props:{item:{}},setup(n){const e=n,{page:t}=V(),s=i=>"component"in i?!1:"link"in i?q(t.value.relativePath,i.link,!!e.item.activeMatch):i.items.some(s),o=y(()=>s(e.item));return(i,l)=>(a(),$(ye,{class:N({VPNavBarMenuGroup:!0,active:r(q)(r(t).relativePath,i.item.activeMatch,!!i.item.activeMatch)||o.value}),button:i.item.text,items:i.item.items},null,8,["class","button","items"]))}}),Rs=n=>(B("data-v-e6d46098"),n=n(),H(),n),qs={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Ws=Rs(()=>p("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),Js=_({__name:"VPNavBarMenu",setup(n){const{theme:e}=V();return(t,s)=>r(e).nav?(a(),u("nav",qs,[Ws,(a(!0),u(M,null,E(r(e).nav,o=>(a(),u(M,{key:JSON.stringify(o)},["link"in o?(a(),$(zs,{key:0,item:o},null,8,["item"])):"component"in o?(a(),$(D(o.component),K({key:1,ref_for:!0},o.props),null,16)):(a(),$(Ks,{key:2,item:o},null,8,["item"]))],64))),128))])):h("",!0)}}),Ys=g(Js,[["__scopeId","data-v-e6d46098"]]);function Xs(n){const{localeIndex:e,theme:t}=V();function s(o){var A,C,w;const i=o.split("."),l=(A=t.value.search)==null?void 0:A.options,d=l&&typeof l=="object",v=d&&((w=(C=l.locales)==null?void 0:C[e.value])==null?void 0:w.translations)||null,m=d&&l.translations||null;let L=v,b=m,P=n;const S=i.pop();for(const G of i){let z=null;const J=P==null?void 0:P[G];J&&(z=P=J);const ae=b==null?void 0:b[G];ae&&(z=b=ae);const re=L==null?void 0:L[G];re&&(z=L=re),J||(P=z),ae||(b=z),re||(L=z)}return(L==null?void 0:L[S])??(b==null?void 0:b[S])??(P==null?void 0:P[S])??""}return s}const Qs=["aria-label"],Zs={class:"DocSearch-Button-Container"},xs=p("span",{class:"vp-icon DocSearch-Search-Icon"},null,-1),ea={class:"DocSearch-Button-Placeholder"},ta=p("span",{class:"DocSearch-Button-Keys"},[p("kbd",{class:"DocSearch-Button-Key"}),p("kbd",{class:"DocSearch-Button-Key"},"K")],-1),Se=_({__name:"VPNavBarSearchButton",setup(n){const t=Xs({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,o)=>(a(),u("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":r(t)("button.buttonAriaLabel")},[p("span",Zs,[xs,p("span",ea,I(r(t)("button.buttonText")),1)]),ta],8,Qs))}}),na={class:"VPNavBarSearch"},oa={id:"local-search"},sa={key:1,id:"docsearch"},aa=_({__name:"VPNavBarSearch",setup(n){const e=tt(()=>nt(()=>import("./VPLocalSearchBox.DLn4sKrv.js"),__vite__mapDeps([0,1]))),t=()=>null,{theme:s}=V(),o=T(!1),i=T(!1);R(()=>{});function l(){o.value||(o.value=!0,setTimeout(d,16))}function d(){const b=new Event("keydown");b.key="k",b.metaKey=!0,window.dispatchEvent(b),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||d()},16)}function v(b){const P=b.target,S=P.tagName;return P.isContentEditable||S==="INPUT"||S==="SELECT"||S==="TEXTAREA"}const m=T(!1);ce("k",b=>{(b.ctrlKey||b.metaKey)&&(b.preventDefault(),m.value=!0)}),ce("/",b=>{v(b)||(b.preventDefault(),m.value=!0)});const L="local";return(b,P)=>{var S;return a(),u("div",na,[r(L)==="local"?(a(),u(M,{key:0},[m.value?(a(),$(r(e),{key:0,onClose:P[0]||(P[0]=A=>m.value=!1)})):h("",!0),p("div",oa,[k(Se,{onClick:P[1]||(P[1]=A=>m.value=!0)})])],64)):r(L)==="algolia"?(a(),u(M,{key:1},[o.value?(a(),$(r(t),{key:0,algolia:((S=r(s).search)==null?void 0:S.options)??r(s).algolia,onVnodeBeforeMount:P[2]||(P[2]=A=>i.value=!0)},null,8,["algolia"])):h("",!0),i.value?h("",!0):(a(),u("div",sa,[k(Se,{onClick:l})]))],64)):h("",!0)])}}}),ra=_({__name:"VPNavBarSocialLinks",setup(n){const{theme:e}=V();return(t,s)=>r(e).socialLinks?(a(),$(Pe,{key:0,class:"VPNavBarSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),ia=g(ra,[["__scopeId","data-v-164c457f"]]),la=["href","rel","target"],ca={key:1},ua={key:2},da=_({__name:"VPNavBarTitle",setup(n){const{site:e,theme:t}=V(),{hasSidebar:s}=U(),{currentLang:o}=Q(),i=y(()=>{var v;return typeof t.value.logoLink=="string"?t.value.logoLink:(v=t.value.logoLink)==null?void 0:v.link}),l=y(()=>{var v;return typeof t.value.logoLink=="string"||(v=t.value.logoLink)==null?void 0:v.rel}),d=y(()=>{var v;return typeof t.value.logoLink=="string"||(v=t.value.logoLink)==null?void 0:v.target});return(v,m)=>(a(),u("div",{class:N(["VPNavBarTitle",{"has-sidebar":r(s)}])},[p("a",{class:"title",href:i.value??r(be)(r(o).link),rel:l.value,target:d.value},[c(v.$slots,"nav-bar-title-before",{},void 0,!0),r(t).logo?(a(),$(x,{key:0,class:"logo",image:r(t).logo},null,8,["image"])):h("",!0),r(t).siteTitle?(a(),u("span",ca,I(r(t).siteTitle),1)):r(t).siteTitle===void 0?(a(),u("span",ua,I(r(e).title),1)):h("",!0),c(v.$slots,"nav-bar-title-after",{},void 0,!0)],8,la)],2))}}),va=g(da,[["__scopeId","data-v-28a961f9"]]),pa={class:"items"},fa={class:"title"},ha=_({__name:"VPNavBarTranslations",setup(n){const{theme:e}=V(),{localeLinks:t,currentLang:s}=Q({correspondingLink:!0});return(o,i)=>r(t).length&&r(s).label?(a(),$(ye,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:r(e).langMenuLabel||"Change language"},{default:f(()=>[p("div",pa,[p("p",fa,I(r(s).label),1),(a(!0),u(M,null,E(r(t),l=>(a(),$(se,{key:l.link,item:l},null,8,["item"]))),128))])]),_:1},8,["label"])):h("",!0)}}),_a=g(ha,[["__scopeId","data-v-c80d9ad0"]]),ma=n=>(B("data-v-822684d1"),n=n(),H(),n),ba={class:"wrapper"},ka={class:"container"},$a={class:"title"},ga={class:"content"},ya={class:"content-body"},Pa=ma(()=>p("div",{class:"divider"},[p("div",{class:"divider-line"})],-1)),Sa=_({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(n){const e=n,{y:t}=Me(),{hasSidebar:s}=U(),{frontmatter:o}=V(),i=T({});return _e(()=>{i.value={"has-sidebar":s.value,home:o.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(l,d)=>(a(),u("div",{class:N(["VPNavBar",i.value])},[p("div",ba,[p("div",ka,[p("div",$a,[k(va,null,{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),p("div",ga,[p("div",ya,[c(l.$slots,"nav-bar-content-before",{},void 0,!0),k(aa,{class:"search"}),k(Ys,{class:"menu"}),k(_a,{class:"translations"}),k(Zo,{class:"appearance"}),k(ia,{class:"social-links"}),k(Bs,{class:"extra"}),c(l.$slots,"nav-bar-content-after",{},void 0,!0),k(js,{class:"hamburger",active:l.isScreenOpen,onClick:d[0]||(d[0]=v=>l.$emit("toggle-screen"))},null,8,["active"])])])])]),Pa],2))}}),Va=g(Sa,[["__scopeId","data-v-822684d1"]]),La={key:0,class:"VPNavScreenAppearance"},Ta={class:"text"},wa=_({__name:"VPNavScreenAppearance",setup(n){const{site:e,theme:t}=V();return(s,o)=>r(e).appearance&&r(e).appearance!=="force-dark"&&r(e).appearance!=="force-auto"?(a(),u("div",La,[p("p",Ta,I(r(t).darkModeSwitchLabel||"Appearance"),1),k($e)])):h("",!0)}}),Ia=g(wa,[["__scopeId","data-v-ffb44008"]]),Na=_({__name:"VPNavScreenMenuLink",props:{item:{}},setup(n){const e=Y("close-screen");return(t,s)=>(a(),$(F,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e),innerHTML:t.item.text},null,8,["href","target","rel","onClick","innerHTML"]))}}),Ma=g(Na,[["__scopeId","data-v-27d04aeb"]]),Aa=_({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(n){const e=Y("close-screen");return(t,s)=>(a(),$(F,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:r(e)},{default:f(()=>[j(I(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}}),Ue=g(Aa,[["__scopeId","data-v-7179dbb7"]]),Ca={class:"VPNavScreenMenuGroupSection"},Ba={key:0,class:"title"},Ha=_({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(n){return(e,t)=>(a(),u("div",Ca,[e.text?(a(),u("p",Ba,I(e.text),1)):h("",!0),(a(!0),u(M,null,E(e.items,s=>(a(),$(Ue,{key:s.text,item:s},null,8,["item"]))),128))]))}}),Ea=g(Ha,[["__scopeId","data-v-4b8941ac"]]),Da=n=>(B("data-v-875057a5"),n=n(),H(),n),Fa=["aria-controls","aria-expanded"],Oa=["innerHTML"],ja=Da(()=>p("span",{class:"vpi-plus button-icon"},null,-1)),Ua=["id"],Ga={key:0,class:"item"},za={key:1,class:"item"},Ka={key:2,class:"group"},Ra=_({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(n){const e=n,t=T(!1),s=y(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function o(){t.value=!t.value}return(i,l)=>(a(),u("div",{class:N(["VPNavScreenMenuGroup",{open:t.value}])},[p("button",{class:"button","aria-controls":s.value,"aria-expanded":t.value,onClick:o},[p("span",{class:"button-text",innerHTML:i.text},null,8,Oa),ja],8,Fa),p("div",{id:s.value,class:"items"},[(a(!0),u(M,null,E(i.items,d=>(a(),u(M,{key:JSON.stringify(d)},["link"in d?(a(),u("div",Ga,[k(Ue,{item:d},null,8,["item"])])):"component"in d?(a(),u("div",za,[(a(),$(D(d.component),K({ref_for:!0},d.props,{"screen-menu":""}),null,16))])):(a(),u("div",Ka,[k(Ea,{text:d.text,items:d.items},null,8,["text","items"])]))],64))),128))],8,Ua)],2))}}),qa=g(Ra,[["__scopeId","data-v-875057a5"]]),Wa={key:0,class:"VPNavScreenMenu"},Ja=_({__name:"VPNavScreenMenu",setup(n){const{theme:e}=V();return(t,s)=>r(e).nav?(a(),u("nav",Wa,[(a(!0),u(M,null,E(r(e).nav,o=>(a(),u(M,{key:JSON.stringify(o)},["link"in o?(a(),$(Ma,{key:0,item:o},null,8,["item"])):"component"in o?(a(),$(D(o.component),K({key:1,ref_for:!0},o.props,{"screen-menu":""}),null,16)):(a(),$(qa,{key:2,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):h("",!0)}}),Ya=_({__name:"VPNavScreenSocialLinks",setup(n){const{theme:e}=V();return(t,s)=>r(e).socialLinks?(a(),$(Pe,{key:0,class:"VPNavScreenSocialLinks",links:r(e).socialLinks},null,8,["links"])):h("",!0)}}),Ge=n=>(B("data-v-362991c2"),n=n(),H(),n),Xa=Ge(()=>p("span",{class:"vpi-languages icon lang"},null,-1)),Qa=Ge(()=>p("span",{class:"vpi-chevron-down icon chevron"},null,-1)),Za={class:"list"},xa=_({__name:"VPNavScreenTranslations",setup(n){const{localeLinks:e,currentLang:t}=Q({correspondingLink:!0}),s=T(!1);function o(){s.value=!s.value}return(i,l)=>r(e).length&&r(t).label?(a(),u("div",{key:0,class:N(["VPNavScreenTranslations",{open:s.value}])},[p("button",{class:"title",onClick:o},[Xa,j(" "+I(r(t).label)+" ",1),Qa]),p("ul",Za,[(a(!0),u(M,null,E(r(e),d=>(a(),u("li",{key:d.link,class:"item"},[k(F,{class:"link",href:d.link},{default:f(()=>[j(I(d.text),1)]),_:2},1032,["href"])]))),128))])],2)):h("",!0)}}),er=g(xa,[["__scopeId","data-v-362991c2"]]),tr={class:"container"},nr=_({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(n){const e=T(null),t=Ae(oe?document.body:null);return(s,o)=>(a(),$(pe,{name:"fade",onEnter:o[0]||(o[0]=i=>t.value=!0),onAfterLeave:o[1]||(o[1]=i=>t.value=!1)},{default:f(()=>[s.open?(a(),u("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[p("div",tr,[c(s.$slots,"nav-screen-content-before",{},void 0,!0),k(Ja,{class:"menu"}),k(er,{class:"translations"}),k(Ia,{class:"appearance"}),k(Ya,{class:"social-links"}),c(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):h("",!0)]),_:3}))}}),or=g(nr,[["__scopeId","data-v-833aabba"]]),sr={key:0,class:"VPNav"},ar=_({__name:"VPNav",setup(n){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=jo(),{frontmatter:o}=V(),i=y(()=>o.value.navbar!==!1);return me("close-screen",t),ee(()=>{oe&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(l,d)=>i.value?(a(),u("header",sr,[k(Va,{"is-screen-open":r(e),onToggleScreen:r(s)},{"nav-bar-title-before":f(()=>[c(l.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(l.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(l.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(l.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),k(or,{open:r(e)},{"nav-screen-content-before":f(()=>[c(l.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(l.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):h("",!0)}}),rr=g(ar,[["__scopeId","data-v-f1e365da"]]),ze=n=>(B("data-v-196b2e5f"),n=n(),H(),n),ir=["role","tabindex"],lr=ze(()=>p("div",{class:"indicator"},null,-1)),cr=ze(()=>p("span",{class:"vpi-chevron-right caret-icon"},null,-1)),ur=[cr],dr={key:1,class:"items"},vr=_({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(n){const e=n,{collapsed:t,collapsible:s,isLink:o,isActiveLink:i,hasActiveLink:l,hasChildren:d,toggle:v}=It(y(()=>e.item)),m=y(()=>d.value?"section":"div"),L=y(()=>o.value?"a":"div"),b=y(()=>d.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),P=y(()=>o.value?void 0:"button"),S=y(()=>[[`level-${e.depth}`],{collapsible:s.value},{collapsed:t.value},{"is-link":o.value},{"is-active":i.value},{"has-active":l.value}]);function A(w){"key"in w&&w.key!=="Enter"||!e.item.link&&v()}function C(){e.item.link&&v()}return(w,G)=>{const z=W("VPSidebarItem",!0);return a(),$(D(m.value),{class:N(["VPSidebarItem",S.value])},{default:f(()=>[w.item.text?(a(),u("div",K({key:0,class:"item",role:P.value},st(w.item.items?{click:A,keydown:A}:{},!0),{tabindex:w.item.items&&0}),[lr,w.item.link?(a(),$(F,{key:0,tag:L.value,class:"link",href:w.item.link,rel:w.item.rel,target:w.item.target},{default:f(()=>[(a(),$(D(b.value),{class:"text",innerHTML:w.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),$(D(b.value),{key:1,class:"text",innerHTML:w.item.text},null,8,["innerHTML"])),w.item.collapsed!=null&&w.item.items&&w.item.items.length?(a(),u("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:C,onKeydown:ot(C,["enter"]),tabindex:"0"},ur,32)):h("",!0)],16,ir)):h("",!0),w.item.items&&w.item.items.length?(a(),u("div",dr,[w.depth<5?(a(!0),u(M,{key:0},E(w.item.items,J=>(a(),$(z,{key:J.text,item:J,depth:w.depth+1},null,8,["item","depth"]))),128)):h("",!0)])):h("",!0)]),_:1},8,["class"])}}}),pr=g(vr,[["__scopeId","data-v-196b2e5f"]]),fr=_({__name:"VPSidebarGroup",props:{items:{}},setup(n){const e=T(!0);let t=null;return R(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),at(()=>{t!=null&&(clearTimeout(t),t=null)}),(s,o)=>(a(!0),u(M,null,E(s.items,i=>(a(),u("div",{key:i.text,class:N(["group",{"no-transition":e.value}])},[k(pr,{item:i,depth:0},null,8,["item"])],2))),128))}}),hr=g(fr,[["__scopeId","data-v-9e426adc"]]),Ke=n=>(B("data-v-18756405"),n=n(),H(),n),_r=Ke(()=>p("div",{class:"curtain"},null,-1)),mr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},br=Ke(()=>p("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),kr=_({__name:"VPSidebar",props:{open:{type:Boolean}},setup(n){const{sidebarGroups:e,hasSidebar:t}=U(),s=n,o=T(null),i=Ae(oe?document.body:null);O([s,o],()=>{var d;s.open?(i.value=!0,(d=o.value)==null||d.focus()):i.value=!1},{immediate:!0,flush:"post"});const l=T(0);return O(e,()=>{l.value+=1},{deep:!0}),(d,v)=>r(t)?(a(),u("aside",{key:0,class:N(["VPSidebar",{open:d.open}]),ref_key:"navEl",ref:o,onClick:v[0]||(v[0]=rt(()=>{},["stop"]))},[_r,p("nav",mr,[br,c(d.$slots,"sidebar-nav-before",{},void 0,!0),(a(),$(hr,{items:r(e),key:l.value},null,8,["items"])),c(d.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):h("",!0)}}),$r=g(kr,[["__scopeId","data-v-18756405"]]),gr=_({__name:"VPSkipLink",setup(n){const e=ne(),t=T();O(()=>e.path,()=>t.value.focus());function s({target:o}){const i=document.getElementById(decodeURIComponent(o.hash).slice(1));if(i){const l=()=>{i.removeAttribute("tabindex"),i.removeEventListener("blur",l)};i.setAttribute("tabindex","-1"),i.addEventListener("blur",l),i.focus(),window.scrollTo(0,0)}}return(o,i)=>(a(),u(M,null,[p("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),p("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:s}," Skip to content ")],64))}}),yr=g(gr,[["__scopeId","data-v-c3508ec8"]]),Pr=_({__name:"Layout",setup(n){const{isOpen:e,open:t,close:s}=U(),o=ne();O(()=>o.path,s),wt(e,s);const{frontmatter:i}=V(),l=Ce(),d=y(()=>!!l["home-hero-image"]);return me("hero-image-slot-exists",d),(v,m)=>{const L=W("Content");return r(i).layout!==!1?(a(),u("div",{key:0,class:N(["Layout",r(i).pageClass])},[c(v.$slots,"layout-top",{},void 0,!0),k(yr),k(pt,{class:"backdrop",show:r(e),onClick:r(s)},null,8,["show","onClick"]),k(rr,null,{"nav-bar-title-before":f(()=>[c(v.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[c(v.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[c(v.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[c(v.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":f(()=>[c(v.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[c(v.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),k(Oo,{open:r(e),onOpenMenu:r(t)},null,8,["open","onOpenMenu"]),k($r,{open:r(e)},{"sidebar-nav-before":f(()=>[c(v.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":f(()=>[c(v.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),k(ko,null,{"page-top":f(()=>[c(v.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[c(v.$slots,"page-bottom",{},void 0,!0)]),"not-found":f(()=>[c(v.$slots,"not-found",{},void 0,!0)]),"home-hero-before":f(()=>[c(v.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[c(v.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[c(v.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[c(v.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[c(v.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[c(v.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[c(v.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[c(v.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[c(v.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":f(()=>[c(v.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[c(v.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[c(v.$slots,"doc-after",{},void 0,!0)]),"doc-top":f(()=>[c(v.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[c(v.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":f(()=>[c(v.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[c(v.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[c(v.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[c(v.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[c(v.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[c(v.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),k(So),c(v.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),$(L,{key:1}))}}}),Sr=g(Pr,[["__scopeId","data-v-a9a9e638"]]),Ve={Layout:Sr,enhanceApp:({app:n})=>{n.component("Badge",ut)}},Vr=n=>{if(typeof document>"u")return{stabilizeScrollPosition:o=>async(...i)=>o(...i)};const e=document.documentElement;return{stabilizeScrollPosition:s=>async(...o)=>{const i=s(...o),l=n.value;if(!l)return i;const d=l.offsetTop-e.scrollTop;return await Ne(),e.scrollTop=l.offsetTop-d,i}}},Re="vitepress:tabSharedState",X=typeof localStorage<"u"?localStorage:null,qe="vitepress:tabsSharedState",Lr=()=>{const n=X==null?void 0:X.getItem(qe);if(n)try{return JSON.parse(n)}catch{}return{}},Tr=n=>{X&&X.setItem(qe,JSON.stringify(n))},wr=n=>{const e=it({});O(()=>e.content,(t,s)=>{t&&s&&Tr(t)},{deep:!0}),n.provide(Re,e)},Ir=(n,e)=>{const t=Y(Re);if(!t)throw new Error("[vitepress-plugin-tabs] TabsSharedState should be injected");R(()=>{t.content||(t.content=Lr())});const s=T(),o=y({get(){var v;const l=e.value,d=n.value;if(l){const m=(v=t.content)==null?void 0:v[l];if(m&&d.includes(m))return m}else{const m=s.value;if(m)return m}return d[0]},set(l){const d=e.value;d?t.content&&(t.content[d]=l):s.value=l}});return{selected:o,select:l=>{o.value=l}}};let Le=0;const Nr=()=>(Le++,""+Le);function Mr(){const n=Ce();return y(()=>{var s;const t=(s=n.default)==null?void 0:s.call(n);return t?t.filter(o=>typeof o.type=="object"&&"__name"in o.type&&o.type.__name==="PluginTabsTab"&&o.props).map(o=>{var i;return(i=o.props)==null?void 0:i.label}):[]})}const We="vitepress:tabSingleState",Ar=n=>{me(We,n)},Cr=()=>{const n=Y(We);if(!n)throw new Error("[vitepress-plugin-tabs] TabsSingleState should be injected");return n},Br={class:"plugin-tabs"},Hr=["id","aria-selected","aria-controls","tabindex","onClick"],Er=_({__name:"PluginTabs",props:{sharedStateKey:{}},setup(n){const e=n,t=Mr(),{selected:s,select:o}=Ir(t,lt(e,"sharedStateKey")),i=T(),{stabilizeScrollPosition:l}=Vr(i),d=l(o),v=T([]),m=b=>{var A;const P=t.value.indexOf(s.value);let S;b.key==="ArrowLeft"?S=P>=1?P-1:t.value.length-1:b.key==="ArrowRight"&&(S=P(a(),u("div",Br,[p("div",{ref_key:"tablist",ref:i,class:"plugin-tabs--tab-list",role:"tablist",onKeydown:m},[(a(!0),u(M,null,E(r(t),S=>(a(),u("button",{id:`tab-${S}-${r(L)}`,ref_for:!0,ref_key:"buttonRefs",ref:v,key:S,role:"tab",class:"plugin-tabs--tab","aria-selected":S===r(s),"aria-controls":`panel-${S}-${r(L)}`,tabindex:S===r(s)?0:-1,onClick:()=>r(d)(S)},I(S),9,Hr))),128))],544),c(b.$slots,"default")]))}}),Dr=["id","aria-labelledby"],Fr=_({__name:"PluginTabsTab",props:{label:{}},setup(n){const{uid:e,selected:t}=Cr();return(s,o)=>r(t)===s.label?(a(),u("div",{key:0,id:`panel-${s.label}-${r(e)}`,class:"plugin-tabs--content",role:"tabpanel",tabindex:"0","aria-labelledby":`tab-${s.label}-${r(e)}`},[c(s.$slots,"default",{},void 0,!0)],8,Dr)):h("",!0)}}),Or=g(Fr,[["__scopeId","data-v-9b0d03d2"]]),jr=n=>{wr(n),n.component("PluginTabs",Er),n.component("PluginTabsTab",Or)},Gr={extends:Ve,Layout(){return ct(Ve.Layout,null,{})},enhanceApp({app:n,router:e,siteData:t}){jr(n)}};export{Gr as R,Xs as c,V as u}; diff --git a/previews/PR135/assets/xgnjvje.CG4dr3Lx.png b/previews/PR135/assets/ejkzyqr.CG4dr3Lx.png similarity index 100% rename from previews/PR135/assets/xgnjvje.CG4dr3Lx.png rename to previews/PR135/assets/ejkzyqr.CG4dr3Lx.png diff --git a/previews/PR135/assets/erkqkyr.Danh069g.png b/previews/PR135/assets/erkqkyr.Danh069g.png new file mode 100644 index 000000000..27133e49c Binary files /dev/null and b/previews/PR135/assets/erkqkyr.Danh069g.png differ diff --git a/previews/PR135/assets/experiments_accurate_accumulators.md.OMJKLp4S.js b/previews/PR135/assets/experiments_accurate_accumulators.md.BEvtokUD.js similarity index 98% rename from previews/PR135/assets/experiments_accurate_accumulators.md.OMJKLp4S.js rename to previews/PR135/assets/experiments_accurate_accumulators.md.BEvtokUD.js index e0ecefe04..f6c29c0f2 100644 --- a/previews/PR135/assets/experiments_accurate_accumulators.md.OMJKLp4S.js +++ b/previews/PR135/assets/experiments_accurate_accumulators.md.BEvtokUD.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a7 as t}from"./chunks/framework.k41oUgTf.js";const o=JSON.parse('{"title":"Accurate accumulation","description":"","frontmatter":{},"headers":[],"relativePath":"experiments/accurate_accumulators.md","filePath":"experiments/accurate_accumulators.md","lastUpdated":null}'),e={name:"experiments/accurate_accumulators.md"},n=t(`

Accurate accumulation

Accurate arithmetic is a technique which allows you to calculate using more precision than the provided numeric type.

We will use the accurate sum routines from AccurateArithmetic.jl to show the difference!

julia
import GeometryOps as GO, GeoInterface as GI
+import{_ as s,c as i,o as a,a7 as t}from"./chunks/framework.CONf0Rze.js";const o=JSON.parse('{"title":"Accurate accumulation","description":"","frontmatter":{},"headers":[],"relativePath":"experiments/accurate_accumulators.md","filePath":"experiments/accurate_accumulators.md","lastUpdated":null}'),e={name:"experiments/accurate_accumulators.md"},n=t(`

Accurate accumulation

Accurate arithmetic is a technique which allows you to calculate using more precision than the provided numeric type.

We will use the accurate sum routines from AccurateArithmetic.jl to show the difference!

julia
import GeometryOps as GO, GeoInterface as GI
 using GeoJSON
 using AccurateArithmetic
 using NaturalEarth
diff --git a/previews/PR135/assets/experiments_accurate_accumulators.md.OMJKLp4S.lean.js b/previews/PR135/assets/experiments_accurate_accumulators.md.BEvtokUD.lean.js
similarity index 73%
rename from previews/PR135/assets/experiments_accurate_accumulators.md.OMJKLp4S.lean.js
rename to previews/PR135/assets/experiments_accurate_accumulators.md.BEvtokUD.lean.js
index edd70e16e..b3cc945e9 100644
--- a/previews/PR135/assets/experiments_accurate_accumulators.md.OMJKLp4S.lean.js
+++ b/previews/PR135/assets/experiments_accurate_accumulators.md.BEvtokUD.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as t}from"./chunks/framework.k41oUgTf.js";const o=JSON.parse('{"title":"Accurate accumulation","description":"","frontmatter":{},"headers":[],"relativePath":"experiments/accurate_accumulators.md","filePath":"experiments/accurate_accumulators.md","lastUpdated":null}'),e={name:"experiments/accurate_accumulators.md"},n=t("",16),l=[n];function h(p,k,d,r,c,g){return a(),i("div",null,l)}const u=s(e,[["render",h]]);export{o as __pageData,u as default};
+import{_ as s,c as i,o as a,a7 as t}from"./chunks/framework.CONf0Rze.js";const o=JSON.parse('{"title":"Accurate accumulation","description":"","frontmatter":{},"headers":[],"relativePath":"experiments/accurate_accumulators.md","filePath":"experiments/accurate_accumulators.md","lastUpdated":null}'),e={name:"experiments/accurate_accumulators.md"},n=t("",16),l=[n];function h(p,k,d,r,c,g){return a(),i("div",null,l)}const u=s(e,[["render",h]]);export{o as __pageData,u as default};
diff --git a/previews/PR135/assets/experiments_predicates.md.DZFjCVCq.js b/previews/PR135/assets/experiments_predicates.md.Cb_olK_t.js
similarity index 99%
rename from previews/PR135/assets/experiments_predicates.md.DZFjCVCq.js
rename to previews/PR135/assets/experiments_predicates.md.Cb_olK_t.js
index ace8604db..146e75651 100644
--- a/previews/PR135/assets/experiments_predicates.md.DZFjCVCq.js
+++ b/previews/PR135/assets/experiments_predicates.md.Cb_olK_t.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as h}from"./chunks/framework.k41oUgTf.js";const k="/GeometryOps.jl/previews/PR135/assets/hkyjgno.Cga6urUX.png",C=JSON.parse('{"title":"Predicates","description":"","frontmatter":{},"headers":[],"relativePath":"experiments/predicates.md","filePath":"experiments/predicates.md","lastUpdated":null}'),n={name:"experiments/predicates.md"},p=h(`

Predicates

Exact vs fast predicates

Orient

julia
using CairoMakie
+import{_ as s,c as i,o as a,a7 as h}from"./chunks/framework.CONf0Rze.js";const k="/GeometryOps.jl/previews/PR135/assets/oylwyba.CuwrHkOd.png",C=JSON.parse('{"title":"Predicates","description":"","frontmatter":{},"headers":[],"relativePath":"experiments/predicates.md","filePath":"experiments/predicates.md","lastUpdated":null}'),n={name:"experiments/predicates.md"},p=h(`

Predicates

Exact vs fast predicates

Orient

julia
using CairoMakie
 import GeometryOps as GO, GeoInterface as GI, LibGEOS as LG
 import ExactPredicates
 using MultiFloats
diff --git a/previews/PR135/assets/experiments_predicates.md.DZFjCVCq.lean.js b/previews/PR135/assets/experiments_predicates.md.Cb_olK_t.lean.js
similarity index 61%
rename from previews/PR135/assets/experiments_predicates.md.DZFjCVCq.lean.js
rename to previews/PR135/assets/experiments_predicates.md.Cb_olK_t.lean.js
index 3dccb434f..de819384d 100644
--- a/previews/PR135/assets/experiments_predicates.md.DZFjCVCq.lean.js
+++ b/previews/PR135/assets/experiments_predicates.md.Cb_olK_t.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as h}from"./chunks/framework.k41oUgTf.js";const k="/GeometryOps.jl/previews/PR135/assets/hkyjgno.Cga6urUX.png",C=JSON.parse('{"title":"Predicates","description":"","frontmatter":{},"headers":[],"relativePath":"experiments/predicates.md","filePath":"experiments/predicates.md","lastUpdated":null}'),n={name:"experiments/predicates.md"},p=h("",10),l=[p];function t(E,e,r,d,g,y){return a(),i("div",null,l)}const A=s(n,[["render",t]]);export{C as __pageData,A as default};
+import{_ as s,c as i,o as a,a7 as h}from"./chunks/framework.CONf0Rze.js";const k="/GeometryOps.jl/previews/PR135/assets/oylwyba.CuwrHkOd.png",C=JSON.parse('{"title":"Predicates","description":"","frontmatter":{},"headers":[],"relativePath":"experiments/predicates.md","filePath":"experiments/predicates.md","lastUpdated":null}'),n={name:"experiments/predicates.md"},p=h("",10),l=[p];function t(E,e,r,d,g,y){return a(),i("div",null,l)}const A=s(n,[["render",t]]);export{C as __pageData,A as default};
diff --git a/previews/PR135/assets/explanations_crs.md.D0_U8pH0.js b/previews/PR135/assets/explanations_crs.md.BcB0kXKu.js
similarity index 83%
rename from previews/PR135/assets/explanations_crs.md.D0_U8pH0.js
rename to previews/PR135/assets/explanations_crs.md.BcB0kXKu.js
index f434dfe84..ecda504c9 100644
--- a/previews/PR135/assets/explanations_crs.md.D0_U8pH0.js
+++ b/previews/PR135/assets/explanations_crs.md.BcB0kXKu.js
@@ -1 +1 @@
-import{_ as e,c as t,o as a}from"./chunks/framework.k41oUgTf.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/crs.md","filePath":"explanations/crs.md","lastUpdated":null}'),s={name:"explanations/crs.md"};function n(r,o,c,p,i,l){return a(),t("div")}const m=e(s,[["render",n]]);export{_ as __pageData,m as default};
+import{_ as e,c as t,o as a}from"./chunks/framework.CONf0Rze.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/crs.md","filePath":"explanations/crs.md","lastUpdated":null}'),s={name:"explanations/crs.md"};function n(r,o,c,p,i,l){return a(),t("div")}const m=e(s,[["render",n]]);export{_ as __pageData,m as default};
diff --git a/previews/PR135/assets/explanations_crs.md.D0_U8pH0.lean.js b/previews/PR135/assets/explanations_crs.md.BcB0kXKu.lean.js
similarity index 83%
rename from previews/PR135/assets/explanations_crs.md.D0_U8pH0.lean.js
rename to previews/PR135/assets/explanations_crs.md.BcB0kXKu.lean.js
index f434dfe84..ecda504c9 100644
--- a/previews/PR135/assets/explanations_crs.md.D0_U8pH0.lean.js
+++ b/previews/PR135/assets/explanations_crs.md.BcB0kXKu.lean.js
@@ -1 +1 @@
-import{_ as e,c as t,o as a}from"./chunks/framework.k41oUgTf.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/crs.md","filePath":"explanations/crs.md","lastUpdated":null}'),s={name:"explanations/crs.md"};function n(r,o,c,p,i,l){return a(),t("div")}const m=e(s,[["render",n]]);export{_ as __pageData,m as default};
+import{_ as e,c as t,o as a}from"./chunks/framework.CONf0Rze.js";const _=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/crs.md","filePath":"explanations/crs.md","lastUpdated":null}'),s={name:"explanations/crs.md"};function n(r,o,c,p,i,l){return a(),t("div")}const m=e(s,[["render",n]]);export{_ as __pageData,m as default};
diff --git a/previews/PR135/assets/explanations_paradigms.md.Dg8b3Bxh.js b/previews/PR135/assets/explanations_paradigms.md.BQbTsKKW.js
similarity index 97%
rename from previews/PR135/assets/explanations_paradigms.md.Dg8b3Bxh.js
rename to previews/PR135/assets/explanations_paradigms.md.BQbTsKKW.js
index 82ad3168d..afed3e3c2 100644
--- a/previews/PR135/assets/explanations_paradigms.md.Dg8b3Bxh.js
+++ b/previews/PR135/assets/explanations_paradigms.md.BQbTsKKW.js
@@ -1 +1 @@
-import{_ as e,c as a,o as t,a7 as o}from"./chunks/framework.k41oUgTf.js";const y=JSON.parse('{"title":"Paradigms","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/paradigms.md","filePath":"explanations/paradigms.md","lastUpdated":null}'),i={name:"explanations/paradigms.md"},s=o('

Paradigms

GeometryOps exposes functions like apply and applyreduce, as well as the fix and prepare APIs, that represent paradigms of programming, by which we mean the ability to program in a certain way, and in so doing, fit neatly into the tools we've built without needing to re-implement the wheel.

Below, we'll describe some of the foundational paradigms of GeometryOps, and why you should care!

apply

The apply function allows you to decompose a given collection of geometries down to a certain level, operate on it, and reconstruct it back to the same nested form as the original. In general, its invocation is:

julia
apply(f, trait::Trait, geom)

Functionally, it's similar to map in the way you apply it to geometries - except that you tell it at which level it should stop, by passing a trait to it.

apply will start by decomposing the geometry, feature, featurecollection, iterable, or table that you pass to it, and stop when it encounters a geometry for which GI.trait(geom) isa Trait. This encompasses unions of traits especially, but beware that any geometry which is not explicitly handled, and hits GI.PointTrait, will cause an error.

apply is unlike map in that it returns reconstructed geometries, instead of the raw output of the function. If you want a purely map-like behaviour, like calculating the length of each linestring in your feature collection, then call GO.flatten(f, trait, geom), which will decompose each geometry to the given trait and apply f to it, returning the decomposition as a flattened vector.

applyreduce

applyreduce is like the previous map-based approach that we mentioned, except that it reduces the result of f by op. Note that applyreduce does not guarantee associativity, so it's best to have typeof(init) == returntype(op).

fix and prepare

The fix and prepare paradigms are different from apply, though they are built on top of it. They involve the use of structs as "actions", where a constructed object indicates an action that should be taken. A trait like interface prescribes the level (polygon, linestring, point, etc) at which each action should be applied.

In general, the idea here is to be able to invoke several actions efficiently and simultaneously, for example when correcting invalid geometries, or instantiating a Prepared geometry with several preparations (sorted edge lists, rtrees, monotone chains, etc.)

',14),n=[s];function r(c,d,p,l,h,u){return t(),a("div",null,n)}const g=e(i,[["render",r]]);export{y as __pageData,g as default}; +import{_ as e,c as a,o as t,a7 as o}from"./chunks/framework.CONf0Rze.js";const y=JSON.parse('{"title":"Paradigms","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/paradigms.md","filePath":"explanations/paradigms.md","lastUpdated":null}'),i={name:"explanations/paradigms.md"},s=o('

Paradigms

GeometryOps exposes functions like apply and applyreduce, as well as the fix and prepare APIs, that represent paradigms of programming, by which we mean the ability to program in a certain way, and in so doing, fit neatly into the tools we've built without needing to re-implement the wheel.

Below, we'll describe some of the foundational paradigms of GeometryOps, and why you should care!

apply

The apply function allows you to decompose a given collection of geometries down to a certain level, operate on it, and reconstruct it back to the same nested form as the original. In general, its invocation is:

julia
apply(f, trait::Trait, geom)

Functionally, it's similar to map in the way you apply it to geometries - except that you tell it at which level it should stop, by passing a trait to it.

apply will start by decomposing the geometry, feature, featurecollection, iterable, or table that you pass to it, and stop when it encounters a geometry for which GI.trait(geom) isa Trait. This encompasses unions of traits especially, but beware that any geometry which is not explicitly handled, and hits GI.PointTrait, will cause an error.

apply is unlike map in that it returns reconstructed geometries, instead of the raw output of the function. If you want a purely map-like behaviour, like calculating the length of each linestring in your feature collection, then call GO.flatten(f, trait, geom), which will decompose each geometry to the given trait and apply f to it, returning the decomposition as a flattened vector.

applyreduce

applyreduce is like the previous map-based approach that we mentioned, except that it reduces the result of f by op. Note that applyreduce does not guarantee associativity, so it's best to have typeof(init) == returntype(op).

fix and prepare

The fix and prepare paradigms are different from apply, though they are built on top of it. They involve the use of structs as "actions", where a constructed object indicates an action that should be taken. A trait like interface prescribes the level (polygon, linestring, point, etc) at which each action should be applied.

In general, the idea here is to be able to invoke several actions efficiently and simultaneously, for example when correcting invalid geometries, or instantiating a Prepared geometry with several preparations (sorted edge lists, rtrees, monotone chains, etc.)

',14),n=[s];function r(c,d,p,l,h,u){return t(),a("div",null,n)}const g=e(i,[["render",r]]);export{y as __pageData,g as default}; diff --git a/previews/PR135/assets/explanations_paradigms.md.Dg8b3Bxh.lean.js b/previews/PR135/assets/explanations_paradigms.md.BQbTsKKW.lean.js similarity index 70% rename from previews/PR135/assets/explanations_paradigms.md.Dg8b3Bxh.lean.js rename to previews/PR135/assets/explanations_paradigms.md.BQbTsKKW.lean.js index 41547460a..c467d0cc4 100644 --- a/previews/PR135/assets/explanations_paradigms.md.Dg8b3Bxh.lean.js +++ b/previews/PR135/assets/explanations_paradigms.md.BQbTsKKW.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as t,a7 as o}from"./chunks/framework.k41oUgTf.js";const y=JSON.parse('{"title":"Paradigms","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/paradigms.md","filePath":"explanations/paradigms.md","lastUpdated":null}'),i={name:"explanations/paradigms.md"},s=o("",14),n=[s];function r(c,d,p,l,h,u){return t(),a("div",null,n)}const g=e(i,[["render",r]]);export{y as __pageData,g as default}; +import{_ as e,c as a,o as t,a7 as o}from"./chunks/framework.CONf0Rze.js";const y=JSON.parse('{"title":"Paradigms","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/paradigms.md","filePath":"explanations/paradigms.md","lastUpdated":null}'),i={name:"explanations/paradigms.md"},s=o("",14),n=[s];function r(c,d,p,l,h,u){return t(),a("div",null,n)}const g=e(i,[["render",r]]);export{y as __pageData,g as default}; diff --git a/previews/PR135/assets/explanations_peculiarities.md.CdVD731s.js b/previews/PR135/assets/explanations_peculiarities.md.D7wlShpB.js similarity index 96% rename from previews/PR135/assets/explanations_peculiarities.md.CdVD731s.js rename to previews/PR135/assets/explanations_peculiarities.md.D7wlShpB.js index 0df2b06f3..82759937e 100644 --- a/previews/PR135/assets/explanations_peculiarities.md.CdVD731s.js +++ b/previews/PR135/assets/explanations_peculiarities.md.D7wlShpB.js @@ -1 +1 @@ -import{_ as e,c as o,o as t,a7 as a}from"./chunks/framework.k41oUgTf.js";const m=JSON.parse('{"title":"Peculiarities","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/peculiarities.md","filePath":"explanations/peculiarities.md","lastUpdated":null}'),r={name:"explanations/peculiarities.md"},n=a('

Peculiarities

What does apply return and why?

apply returns the target geometries returned by f, whatever type/package they are from, but geometries, features or feature collections that wrapped the target are replaced with GeoInterace.jl wrappers with matching GeoInterface.trait to the originals. All non-geointerface iterables become Arrays. Tables.jl compatible tables are converted either back to the original type if a Tables.materializer is defined, and if not then returned as generic NamedTuple column tables (i.e., a NamedTuple of vectors).

It is recommended for consistency that f returns GeoInterface geometries unless there is a performance/conversion overhead to doing that.

Why do you want me to provide a target in set operations?

In polygon set operations like intersection, difference, and union, many different geometry types may be obtained - depending on the relationship between the polygons. For example, when performing an union on two nonintersecting polygons, one would technically have two disjoint polygons as an output.

We use the target keyword to allow the user to control which kinds of geometry they want back. For example, setting target to PolygonTrait will cause a vector of polygons to be returned (this is the only currently supported behaviour). In future, we may implement MultiPolygonTrait or GeometryCollectionTrait targets which will return a single geometry, as LibGEOS and ArchGDAL do.

This also allows for a lot more type stability - when you ask for polygons, we won't return a geometrycollection with line segments. Especially in simulation workflows, this is excellent for simplified data processing.

_True and _False (or BoolsAsTypes)

Warning

These are internals and explicitly not public API, meaning they may change at any time!

When dispatch can be controlled by the value of a boolean variable, this introduces type instability. Instead of introducing type instability, we chose to encode our boolean decision variables, like threaded and calc_extent in apply, as types. This allows the compiler to reason about what will happen, and call the correct compiled method, in a stable way without worrying about

',11),i=[n];function s(l,c,d,p,h,u){return t(),o("div",null,i)}const g=e(r,[["render",s]]);export{m as __pageData,g as default}; +import{_ as e,c as o,o as t,a7 as a}from"./chunks/framework.CONf0Rze.js";const m=JSON.parse('{"title":"Peculiarities","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/peculiarities.md","filePath":"explanations/peculiarities.md","lastUpdated":null}'),r={name:"explanations/peculiarities.md"},n=a('

Peculiarities

What does apply return and why?

apply returns the target geometries returned by f, whatever type/package they are from, but geometries, features or feature collections that wrapped the target are replaced with GeoInterace.jl wrappers with matching GeoInterface.trait to the originals. All non-geointerface iterables become Arrays. Tables.jl compatible tables are converted either back to the original type if a Tables.materializer is defined, and if not then returned as generic NamedTuple column tables (i.e., a NamedTuple of vectors).

It is recommended for consistency that f returns GeoInterface geometries unless there is a performance/conversion overhead to doing that.

Why do you want me to provide a target in set operations?

In polygon set operations like intersection, difference, and union, many different geometry types may be obtained - depending on the relationship between the polygons. For example, when performing an union on two nonintersecting polygons, one would technically have two disjoint polygons as an output.

We use the target keyword to allow the user to control which kinds of geometry they want back. For example, setting target to PolygonTrait will cause a vector of polygons to be returned (this is the only currently supported behaviour). In future, we may implement MultiPolygonTrait or GeometryCollectionTrait targets which will return a single geometry, as LibGEOS and ArchGDAL do.

This also allows for a lot more type stability - when you ask for polygons, we won't return a geometrycollection with line segments. Especially in simulation workflows, this is excellent for simplified data processing.

_True and _False (or BoolsAsTypes)

Warning

These are internals and explicitly not public API, meaning they may change at any time!

When dispatch can be controlled by the value of a boolean variable, this introduces type instability. Instead of introducing type instability, we chose to encode our boolean decision variables, like threaded and calc_extent in apply, as types. This allows the compiler to reason about what will happen, and call the correct compiled method, in a stable way without worrying about

',11),i=[n];function s(l,c,d,p,h,u){return t(),o("div",null,i)}const g=e(r,[["render",s]]);export{m as __pageData,g as default}; diff --git a/previews/PR135/assets/explanations_peculiarities.md.CdVD731s.lean.js b/previews/PR135/assets/explanations_peculiarities.md.D7wlShpB.lean.js similarity index 71% rename from previews/PR135/assets/explanations_peculiarities.md.CdVD731s.lean.js rename to previews/PR135/assets/explanations_peculiarities.md.D7wlShpB.lean.js index 2e36f320f..611a60780 100644 --- a/previews/PR135/assets/explanations_peculiarities.md.CdVD731s.lean.js +++ b/previews/PR135/assets/explanations_peculiarities.md.D7wlShpB.lean.js @@ -1 +1 @@ -import{_ as e,c as o,o as t,a7 as a}from"./chunks/framework.k41oUgTf.js";const m=JSON.parse('{"title":"Peculiarities","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/peculiarities.md","filePath":"explanations/peculiarities.md","lastUpdated":null}'),r={name:"explanations/peculiarities.md"},n=a("",11),i=[n];function s(l,c,d,p,h,u){return t(),o("div",null,i)}const g=e(r,[["render",s]]);export{m as __pageData,g as default}; +import{_ as e,c as o,o as t,a7 as a}from"./chunks/framework.CONf0Rze.js";const m=JSON.parse('{"title":"Peculiarities","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/peculiarities.md","filePath":"explanations/peculiarities.md","lastUpdated":null}'),r={name:"explanations/peculiarities.md"},n=a("",11),i=[n];function s(l,c,d,p,h,u){return t(),o("div",null,i)}const g=e(r,[["render",s]]);export{m as __pageData,g as default}; diff --git a/previews/PR135/assets/explanations_winding_order.md.P7cnQ8tJ.js b/previews/PR135/assets/explanations_winding_order.md.BzkvsLOj.js similarity index 84% rename from previews/PR135/assets/explanations_winding_order.md.P7cnQ8tJ.js rename to previews/PR135/assets/explanations_winding_order.md.BzkvsLOj.js index bdca38bd7..707c0eda6 100644 --- a/previews/PR135/assets/explanations_winding_order.md.P7cnQ8tJ.js +++ b/previews/PR135/assets/explanations_winding_order.md.BzkvsLOj.js @@ -1 +1 @@ -import{_ as e,c as n,o as t}from"./chunks/framework.k41oUgTf.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/winding_order.md","filePath":"explanations/winding_order.md","lastUpdated":null}'),a={name:"explanations/winding_order.md"};function r(o,i,d,s,c,p){return t(),n("div")}const m=e(a,[["render",r]]);export{l as __pageData,m as default}; +import{_ as e,c as n,o as t}from"./chunks/framework.CONf0Rze.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/winding_order.md","filePath":"explanations/winding_order.md","lastUpdated":null}'),a={name:"explanations/winding_order.md"};function r(o,i,d,s,c,p){return t(),n("div")}const m=e(a,[["render",r]]);export{l as __pageData,m as default}; diff --git a/previews/PR135/assets/explanations_winding_order.md.P7cnQ8tJ.lean.js b/previews/PR135/assets/explanations_winding_order.md.BzkvsLOj.lean.js similarity index 84% rename from previews/PR135/assets/explanations_winding_order.md.P7cnQ8tJ.lean.js rename to previews/PR135/assets/explanations_winding_order.md.BzkvsLOj.lean.js index bdca38bd7..707c0eda6 100644 --- a/previews/PR135/assets/explanations_winding_order.md.P7cnQ8tJ.lean.js +++ b/previews/PR135/assets/explanations_winding_order.md.BzkvsLOj.lean.js @@ -1 +1 @@ -import{_ as e,c as n,o as t}from"./chunks/framework.k41oUgTf.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/winding_order.md","filePath":"explanations/winding_order.md","lastUpdated":null}'),a={name:"explanations/winding_order.md"};function r(o,i,d,s,c,p){return t(),n("div")}const m=e(a,[["render",r]]);export{l as __pageData,m as default}; +import{_ as e,c as n,o as t}from"./chunks/framework.CONf0Rze.js";const l=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"explanations/winding_order.md","filePath":"explanations/winding_order.md","lastUpdated":null}'),a={name:"explanations/winding_order.md"};function r(o,i,d,s,c,p){return t(),n("div")}const m=e(a,[["render",r]]);export{l as __pageData,m as default}; diff --git a/previews/PR135/assets/fntoqls.y5I2w7nz.png b/previews/PR135/assets/fntoqls.y5I2w7nz.png new file mode 100644 index 000000000..39b92686e Binary files /dev/null and b/previews/PR135/assets/fntoqls.y5I2w7nz.png differ diff --git a/previews/PR135/assets/fpctjru.CnVzN9w3.png b/previews/PR135/assets/fpctjru.CnVzN9w3.png deleted file mode 100644 index fe835b159..000000000 Binary files a/previews/PR135/assets/fpctjru.CnVzN9w3.png and /dev/null differ diff --git a/previews/PR135/assets/ouhffhi.Dig-DWOQ.png b/previews/PR135/assets/fsdxqux.Dig-DWOQ.png similarity index 100% rename from previews/PR135/assets/ouhffhi.Dig-DWOQ.png rename to previews/PR135/assets/fsdxqux.Dig-DWOQ.png diff --git a/previews/PR135/assets/dtturyx.CgiryX2p.png b/previews/PR135/assets/ftxvlaw.CgiryX2p.png similarity index 100% rename from previews/PR135/assets/dtturyx.CgiryX2p.png rename to previews/PR135/assets/ftxvlaw.CgiryX2p.png diff --git a/previews/PR135/assets/wvwjwqj.0OJvb21A.png b/previews/PR135/assets/gobvpyq.0OJvb21A.png similarity index 100% rename from previews/PR135/assets/wvwjwqj.0OJvb21A.png rename to previews/PR135/assets/gobvpyq.0OJvb21A.png diff --git a/previews/PR135/assets/goeuznk.8ErH1nVM.png b/previews/PR135/assets/goeuznk.8ErH1nVM.png deleted file mode 100644 index 4999e4dc5..000000000 Binary files a/previews/PR135/assets/goeuznk.8ErH1nVM.png and /dev/null differ diff --git a/previews/PR135/assets/hkyjgno.Cga6urUX.png b/previews/PR135/assets/hkyjgno.Cga6urUX.png deleted file mode 100644 index ddf546687..000000000 Binary files a/previews/PR135/assets/hkyjgno.Cga6urUX.png and /dev/null differ diff --git a/previews/PR135/assets/gwypvpf.CLtpJ5Wb.png b/previews/PR135/assets/hsawanf.CLtpJ5Wb.png similarity index 100% rename from previews/PR135/assets/gwypvpf.CLtpJ5Wb.png rename to previews/PR135/assets/hsawanf.CLtpJ5Wb.png diff --git a/previews/PR135/assets/tkuztgb.Dz86q2IX.png b/previews/PR135/assets/iijrfjx.Dz86q2IX.png similarity index 100% rename from previews/PR135/assets/tkuztgb.Dz86q2IX.png rename to previews/PR135/assets/iijrfjx.Dz86q2IX.png diff --git a/previews/PR135/assets/index.md.y8l83Kxy.js b/previews/PR135/assets/index.md.Dm7lK_c9.js similarity index 96% rename from previews/PR135/assets/index.md.y8l83Kxy.js rename to previews/PR135/assets/index.md.Dm7lK_c9.js index 7e558264b..34a0a33b3 100644 --- a/previews/PR135/assets/index.md.y8l83Kxy.js +++ b/previews/PR135/assets/index.md.Dm7lK_c9.js @@ -1 +1 @@ -import{_ as e,c as t,o as a,a7 as o}from"./chunks/framework.k41oUgTf.js";const g=JSON.parse('{"title":"What is GeometryOps.jl?","description":"","frontmatter":{"layout":"home","hero":{"name":"GeometryOps.jl","text":"","tagline":"Blazing fast geometry operations in pure Julia","image":{"src":"/logo.png","alt":"GeometryOps"},"actions":[{"theme":"brand","text":"Introduction","link":"/introduction"},{"theme":"alt","text":"View on Github","link":"https://github.com/JuliaGeo/GeometryOps.jl"},{"theme":"alt","text":"API Reference","link":"/api"}]},"features":[{"icon":"\\"Julia","title":"Pure Julia code","details":"Fast, understandable, extensible functions","link":"/introduction"},{"icon":"","title":"Literate programming","details":"Documented source code with examples!","link":"/source/methods/clipping/cut"},{"icon":"","title":"Full integration with GeoInterface","details":"Use any GeoInterface.jl-compatible geometry","link":"https://juliageo.org/GeoInterface.jl/stable"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),i={name:"index.md"},n=o('

What is GeometryOps.jl?

GeometryOps.jl is a package for geometric calculations on (primarily 2D) geometries.

The driving idea behind this package is to unify all the disparate packages for geometric calculations in Julia, and make them GeoInterface.jl-compatible. We seem to be focusing primarily on 2/2.5D geometries for now.

Most of the usecases are driven by GIS and similar Earth data workflows, so this might be a bit specialized towards that, but methods should always be general to any coordinate space.

We welcome contributions, either as pull requests or discussion on issues!

How to navigate the docs

GeometryOps' docs are divided into three main sections: tutorials, explanations and source code.
Documentation and examples for many functions can be found in the source code section, since we use literate programming in GeometryOps.

  • Tutorials are meant to teach the fundamental concepts behind GeometryOps, and how to perform certain operations.
  • Explanations usually contain little code, and explain in more detail how GeometryOps works.
  • Source code usually contains explanations and examples at the top of the page, followed by annotated source code from that file.
',2),s=[n];function r(l,c,d,h,p,m){return a(),t("div",null,s)}const f=e(i,[["render",r]]);export{g as __pageData,f as default}; +import{_ as e,c as t,o as a,a7 as o}from"./chunks/framework.CONf0Rze.js";const g=JSON.parse('{"title":"What is GeometryOps.jl?","description":"","frontmatter":{"layout":"home","hero":{"name":"GeometryOps.jl","text":"","tagline":"Blazing fast geometry operations in pure Julia","image":{"src":"/logo.png","alt":"GeometryOps"},"actions":[{"theme":"brand","text":"Introduction","link":"/introduction"},{"theme":"alt","text":"View on Github","link":"https://github.com/JuliaGeo/GeometryOps.jl"},{"theme":"alt","text":"API Reference","link":"/api"}]},"features":[{"icon":"\\"Julia","title":"Pure Julia code","details":"Fast, understandable, extensible functions","link":"/introduction"},{"icon":"","title":"Literate programming","details":"Documented source code with examples!","link":"/source/methods/clipping/cut"},{"icon":"","title":"Full integration with GeoInterface","details":"Use any GeoInterface.jl-compatible geometry","link":"https://juliageo.org/GeoInterface.jl/stable"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),i={name:"index.md"},n=o('

What is GeometryOps.jl?

GeometryOps.jl is a package for geometric calculations on (primarily 2D) geometries.

The driving idea behind this package is to unify all the disparate packages for geometric calculations in Julia, and make them GeoInterface.jl-compatible. We seem to be focusing primarily on 2/2.5D geometries for now.

Most of the usecases are driven by GIS and similar Earth data workflows, so this might be a bit specialized towards that, but methods should always be general to any coordinate space.

We welcome contributions, either as pull requests or discussion on issues!

How to navigate the docs

GeometryOps' docs are divided into three main sections: tutorials, explanations and source code.
Documentation and examples for many functions can be found in the source code section, since we use literate programming in GeometryOps.

  • Tutorials are meant to teach the fundamental concepts behind GeometryOps, and how to perform certain operations.
  • Explanations usually contain little code, and explain in more detail how GeometryOps works.
  • Source code usually contains explanations and examples at the top of the page, followed by annotated source code from that file.
',2),s=[n];function r(l,c,d,h,p,m){return a(),t("div",null,s)}const f=e(i,[["render",r]]);export{g as __pageData,f as default}; diff --git a/previews/PR135/assets/index.md.y8l83Kxy.lean.js b/previews/PR135/assets/index.md.Dm7lK_c9.lean.js similarity index 92% rename from previews/PR135/assets/index.md.y8l83Kxy.lean.js rename to previews/PR135/assets/index.md.Dm7lK_c9.lean.js index 464f15cce..9ead62677 100644 --- a/previews/PR135/assets/index.md.y8l83Kxy.lean.js +++ b/previews/PR135/assets/index.md.Dm7lK_c9.lean.js @@ -1 +1 @@ -import{_ as e,c as t,o as a,a7 as o}from"./chunks/framework.k41oUgTf.js";const g=JSON.parse('{"title":"What is GeometryOps.jl?","description":"","frontmatter":{"layout":"home","hero":{"name":"GeometryOps.jl","text":"","tagline":"Blazing fast geometry operations in pure Julia","image":{"src":"/logo.png","alt":"GeometryOps"},"actions":[{"theme":"brand","text":"Introduction","link":"/introduction"},{"theme":"alt","text":"View on Github","link":"https://github.com/JuliaGeo/GeometryOps.jl"},{"theme":"alt","text":"API Reference","link":"/api"}]},"features":[{"icon":"\\"Julia","title":"Pure Julia code","details":"Fast, understandable, extensible functions","link":"/introduction"},{"icon":"","title":"Literate programming","details":"Documented source code with examples!","link":"/source/methods/clipping/cut"},{"icon":"","title":"Full integration with GeoInterface","details":"Use any GeoInterface.jl-compatible geometry","link":"https://juliageo.org/GeoInterface.jl/stable"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),i={name:"index.md"},n=o("",2),s=[n];function r(l,c,d,h,p,m){return a(),t("div",null,s)}const f=e(i,[["render",r]]);export{g as __pageData,f as default}; +import{_ as e,c as t,o as a,a7 as o}from"./chunks/framework.CONf0Rze.js";const g=JSON.parse('{"title":"What is GeometryOps.jl?","description":"","frontmatter":{"layout":"home","hero":{"name":"GeometryOps.jl","text":"","tagline":"Blazing fast geometry operations in pure Julia","image":{"src":"/logo.png","alt":"GeometryOps"},"actions":[{"theme":"brand","text":"Introduction","link":"/introduction"},{"theme":"alt","text":"View on Github","link":"https://github.com/JuliaGeo/GeometryOps.jl"},{"theme":"alt","text":"API Reference","link":"/api"}]},"features":[{"icon":"\\"Julia","title":"Pure Julia code","details":"Fast, understandable, extensible functions","link":"/introduction"},{"icon":"","title":"Literate programming","details":"Documented source code with examples!","link":"/source/methods/clipping/cut"},{"icon":"","title":"Full integration with GeoInterface","details":"Use any GeoInterface.jl-compatible geometry","link":"https://juliageo.org/GeoInterface.jl/stable"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":null}'),i={name:"index.md"},n=o("",2),s=[n];function r(l,c,d,h,p,m){return a(),t("div",null,s)}const f=e(i,[["render",r]]);export{g as __pageData,f as default}; diff --git a/previews/PR135/assets/introduction.md.ofhrN8RE.js b/previews/PR135/assets/introduction.md.EstDN9hf.js similarity index 95% rename from previews/PR135/assets/introduction.md.ofhrN8RE.js rename to previews/PR135/assets/introduction.md.EstDN9hf.js index da268ce08..1d8bf50c3 100644 --- a/previews/PR135/assets/introduction.md.ofhrN8RE.js +++ b/previews/PR135/assets/introduction.md.EstDN9hf.js @@ -1 +1 @@ -import{_ as e,c as a,o as t,a7 as o}from"./chunks/framework.k41oUgTf.js";const f=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"introduction.md","filePath":"introduction.md","lastUpdated":null}'),i={name:"introduction.md"},r=o('

Introduction

GeometryOps.jl is a package for geometric calculations on (primarily 2D) geometries.

The driving idea behind this package is to unify all the disparate packages for geometric calculations in Julia, and make them GeoInterface.jl-compatible. We seem to be focusing primarily on 2/2.5D geometries for now.

Most of the usecases are driven by GIS and similar Earth data workflows, so this might be a bit specialized towards that, but methods should always be general to any coordinate space.

We welcome contributions, either as pull requests or discussion on issues!

Main concepts

The apply paradigm

Note

See the Primitive Functions page for more information on this.

The apply function allows you to decompose a given collection of geometries down to a certain level, and then operate on it.

Functionally, it's similar to map in the way you apply it to geometries.

apply and applyreduce take any geometry, vector of geometries, collection of geometries, or table (like Shapefile.Table, DataFrame, or GeoTable)!

What's this GeoInterface.Wrapper thing?

Write a comment about GeoInterface.Wrapper and why it helps in type stability to guarantee a particular return type.

',13),n=[r];function c(s,p,l,d,h,m){return t(),a("div",null,n)}const g=e(i,[["render",c]]);export{f as __pageData,g as default}; +import{_ as e,c as a,o as t,a7 as o}from"./chunks/framework.CONf0Rze.js";const f=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"introduction.md","filePath":"introduction.md","lastUpdated":null}'),i={name:"introduction.md"},r=o('

Introduction

GeometryOps.jl is a package for geometric calculations on (primarily 2D) geometries.

The driving idea behind this package is to unify all the disparate packages for geometric calculations in Julia, and make them GeoInterface.jl-compatible. We seem to be focusing primarily on 2/2.5D geometries for now.

Most of the usecases are driven by GIS and similar Earth data workflows, so this might be a bit specialized towards that, but methods should always be general to any coordinate space.

We welcome contributions, either as pull requests or discussion on issues!

Main concepts

The apply paradigm

Note

See the Primitive Functions page for more information on this.

The apply function allows you to decompose a given collection of geometries down to a certain level, and then operate on it.

Functionally, it's similar to map in the way you apply it to geometries.

apply and applyreduce take any geometry, vector of geometries, collection of geometries, or table (like Shapefile.Table, DataFrame, or GeoTable)!

What's this GeoInterface.Wrapper thing?

Write a comment about GeoInterface.Wrapper and why it helps in type stability to guarantee a particular return type.

',13),n=[r];function c(s,p,l,d,h,m){return t(),a("div",null,n)}const g=e(i,[["render",c]]);export{f as __pageData,g as default}; diff --git a/previews/PR135/assets/introduction.md.ofhrN8RE.lean.js b/previews/PR135/assets/introduction.md.EstDN9hf.lean.js similarity index 68% rename from previews/PR135/assets/introduction.md.ofhrN8RE.lean.js rename to previews/PR135/assets/introduction.md.EstDN9hf.lean.js index 7c6acda75..6f23419f3 100644 --- a/previews/PR135/assets/introduction.md.ofhrN8RE.lean.js +++ b/previews/PR135/assets/introduction.md.EstDN9hf.lean.js @@ -1 +1 @@ -import{_ as e,c as a,o as t,a7 as o}from"./chunks/framework.k41oUgTf.js";const f=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"introduction.md","filePath":"introduction.md","lastUpdated":null}'),i={name:"introduction.md"},r=o("",13),n=[r];function c(s,p,l,d,h,m){return t(),a("div",null,n)}const g=e(i,[["render",c]]);export{f as __pageData,g as default}; +import{_ as e,c as a,o as t,a7 as o}from"./chunks/framework.CONf0Rze.js";const f=JSON.parse('{"title":"Introduction","description":"","frontmatter":{},"headers":[],"relativePath":"introduction.md","filePath":"introduction.md","lastUpdated":null}'),i={name:"introduction.md"},r=o("",13),n=[r];function c(s,p,l,d,h,m){return t(),a("div",null,n)}const g=e(i,[["render",c]]);export{f as __pageData,g as default}; diff --git a/previews/PR135/assets/lxyfcxo.BD0hVfse.png b/previews/PR135/assets/jphsfis.BD0hVfse.png similarity index 100% rename from previews/PR135/assets/lxyfcxo.BD0hVfse.png rename to previews/PR135/assets/jphsfis.BD0hVfse.png diff --git a/previews/PR135/assets/batmqvz.CULn5saZ.png b/previews/PR135/assets/kbchokg.CULn5saZ.png similarity index 100% rename from previews/PR135/assets/batmqvz.CULn5saZ.png rename to previews/PR135/assets/kbchokg.CULn5saZ.png diff --git a/previews/PR135/assets/xpzymdf.DwqDxlAG.png b/previews/PR135/assets/kgneegt.DwqDxlAG.png similarity index 100% rename from previews/PR135/assets/xpzymdf.DwqDxlAG.png rename to previews/PR135/assets/kgneegt.DwqDxlAG.png diff --git a/previews/PR135/assets/leqplng.DT95HOc4.png b/previews/PR135/assets/leqplng.DT95HOc4.png new file mode 100644 index 000000000..cdadf01d7 Binary files /dev/null and b/previews/PR135/assets/leqplng.DT95HOc4.png differ diff --git a/previews/PR135/assets/rsijhao.Bglvb-jp.png b/previews/PR135/assets/limmhqq.Bglvb-jp.png similarity index 100% rename from previews/PR135/assets/rsijhao.Bglvb-jp.png rename to previews/PR135/assets/limmhqq.Bglvb-jp.png diff --git a/previews/PR135/assets/kbdgrqm.3sfpQl2i.png b/previews/PR135/assets/ltowmlk.3sfpQl2i.png similarity index 100% rename from previews/PR135/assets/kbdgrqm.3sfpQl2i.png rename to previews/PR135/assets/ltowmlk.3sfpQl2i.png diff --git a/previews/PR135/assets/yrwjvuj.Dab1-ETk.png b/previews/PR135/assets/mqcmtly.Dab1-ETk.png similarity index 100% rename from previews/PR135/assets/yrwjvuj.Dab1-ETk.png rename to previews/PR135/assets/mqcmtly.Dab1-ETk.png diff --git a/previews/PR135/assets/awrqznt.DC3TvBOO.png b/previews/PR135/assets/nlfztmc.DC3TvBOO.png similarity index 100% rename from previews/PR135/assets/awrqznt.DC3TvBOO.png rename to previews/PR135/assets/nlfztmc.DC3TvBOO.png diff --git a/previews/PR135/assets/zmwgynm.DHcwB147.png b/previews/PR135/assets/nmofpgl.DHcwB147.png similarity index 100% rename from previews/PR135/assets/zmwgynm.DHcwB147.png rename to previews/PR135/assets/nmofpgl.DHcwB147.png diff --git a/previews/PR135/assets/oxrcmhd._0R9BbFk.png b/previews/PR135/assets/noqiyfz._0R9BbFk.png similarity index 100% rename from previews/PR135/assets/oxrcmhd._0R9BbFk.png rename to previews/PR135/assets/noqiyfz._0R9BbFk.png diff --git a/previews/PR135/assets/nyoicmp.ClueNz2m.png b/previews/PR135/assets/nyoicmp.ClueNz2m.png deleted file mode 100644 index 5e2d0a932..000000000 Binary files a/previews/PR135/assets/nyoicmp.ClueNz2m.png and /dev/null differ diff --git a/previews/PR135/assets/nfdcrog.lu4jwpi-.png b/previews/PR135/assets/ovfjlyd.lu4jwpi-.png similarity index 100% rename from previews/PR135/assets/nfdcrog.lu4jwpi-.png rename to previews/PR135/assets/ovfjlyd.lu4jwpi-.png diff --git a/previews/PR135/assets/oylwyba.CuwrHkOd.png b/previews/PR135/assets/oylwyba.CuwrHkOd.png new file mode 100644 index 000000000..9afd3afb0 Binary files /dev/null and b/previews/PR135/assets/oylwyba.CuwrHkOd.png differ diff --git a/previews/PR135/assets/ickbkgt.DaovVbE6.png b/previews/PR135/assets/piejhcv.DaovVbE6.png similarity index 100% rename from previews/PR135/assets/ickbkgt.DaovVbE6.png rename to previews/PR135/assets/piejhcv.DaovVbE6.png diff --git a/previews/PR135/assets/mubledz.-VpeHhXX.png b/previews/PR135/assets/prhmudq.-VpeHhXX.png similarity index 100% rename from previews/PR135/assets/mubledz.-VpeHhXX.png rename to previews/PR135/assets/prhmudq.-VpeHhXX.png diff --git a/previews/PR135/assets/uwqnnad.CZy9YIUA.png b/previews/PR135/assets/prtwaxi.CZy9YIUA.png similarity index 100% rename from previews/PR135/assets/uwqnnad.CZy9YIUA.png rename to previews/PR135/assets/prtwaxi.CZy9YIUA.png diff --git a/previews/PR135/assets/psixllp.DiwGEg2f.png b/previews/PR135/assets/pthvojo.DiwGEg2f.png similarity index 100% rename from previews/PR135/assets/psixllp.DiwGEg2f.png rename to previews/PR135/assets/pthvojo.DiwGEg2f.png diff --git a/previews/PR135/assets/atqcrtt.Cb0_DiYE.png b/previews/PR135/assets/pzrdbdt.Cb0_DiYE.png similarity index 100% rename from previews/PR135/assets/atqcrtt.Cb0_DiYE.png rename to previews/PR135/assets/pzrdbdt.Cb0_DiYE.png diff --git a/previews/PR135/assets/qfveqll.DPlfA76p.png b/previews/PR135/assets/qfveqll.DPlfA76p.png new file mode 100644 index 000000000..5f110516e Binary files /dev/null and b/previews/PR135/assets/qfveqll.DPlfA76p.png differ diff --git a/previews/PR135/assets/gxjwrae.DeeQUply.png b/previews/PR135/assets/rezvvce.DeeQUply.png similarity index 100% rename from previews/PR135/assets/gxjwrae.DeeQUply.png rename to previews/PR135/assets/rezvvce.DeeQUply.png diff --git a/previews/PR135/assets/source_GeometryOps.md.BxznbMxY.js b/previews/PR135/assets/source_GeometryOps.md.BnVY2YxC.js similarity index 95% rename from previews/PR135/assets/source_GeometryOps.md.BxznbMxY.js rename to previews/PR135/assets/source_GeometryOps.md.BnVY2YxC.js index c340cee94..1779e806a 100644 --- a/previews/PR135/assets/source_GeometryOps.md.BxznbMxY.js +++ b/previews/PR135/assets/source_GeometryOps.md.BnVY2YxC.js @@ -1,14 +1,15 @@ -import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const y=JSON.parse('{"title":"GeometryOps.jl","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOps.md","filePath":"source/GeometryOps.md","lastUpdated":null}'),l={name:"source/GeometryOps.md"},h=n(`

GeometryOps.jl

julia
module GeometryOps
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const y=JSON.parse('{"title":"GeometryOps.jl","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOps.md","filePath":"source/GeometryOps.md","lastUpdated":null}'),l={name:"source/GeometryOps.md"},h=n(`

GeometryOps.jl

julia
module GeometryOps
 
 using GeoInterface
 using GeometryBasics
-import Tables
 using LinearAlgebra, Statistics
+
+import Tables
 import GeometryBasics.StaticArrays
+import DelaunayTriangulation # for convex hull and triangulation
 import ExactPredicates
 import Base.@kwdef
-
-using GeoInterface.Extents: Extents
+import GeoInterface.Extents: Extents
 
 const GI = GeoInterface
 const GB = GeometryBasics
@@ -26,6 +27,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const y
 include("methods/barycentric.jl")
 include("methods/buffer.jl")
 include("methods/centroid.jl")
+include("methods/convex_hull.jl")
 include("methods/distance.jl")
 include("methods/equals.jl")
 include("methods/clipping/predicates.jl")
diff --git a/previews/PR135/assets/source_GeometryOps.md.BxznbMxY.lean.js b/previews/PR135/assets/source_GeometryOps.md.BnVY2YxC.lean.js
similarity index 70%
rename from previews/PR135/assets/source_GeometryOps.md.BxznbMxY.lean.js
rename to previews/PR135/assets/source_GeometryOps.md.BnVY2YxC.lean.js
index e762cbb61..fea20f46a 100644
--- a/previews/PR135/assets/source_GeometryOps.md.BxznbMxY.lean.js
+++ b/previews/PR135/assets/source_GeometryOps.md.BnVY2YxC.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const y=JSON.parse('{"title":"GeometryOps.jl","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOps.md","filePath":"source/GeometryOps.md","lastUpdated":null}'),l={name:"source/GeometryOps.md"},h=n("",8),t=[h];function k(p,e,E,r,d,g){return a(),i("div",null,t)}const F=s(l,[["render",k]]);export{y as __pageData,F as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const y=JSON.parse('{"title":"GeometryOps.jl","description":"","frontmatter":{},"headers":[],"relativePath":"source/GeometryOps.md","filePath":"source/GeometryOps.md","lastUpdated":null}'),l={name:"source/GeometryOps.md"},h=n("",8),t=[h];function k(p,e,E,r,d,g){return a(),i("div",null,t)}const F=s(l,[["render",k]]);export{y as __pageData,F as default};
diff --git a/previews/PR135/assets/source_methods_angles.md.D0iJTZWo.js b/previews/PR135/assets/source_methods_angles.md.BGpTF9uY.js
similarity index 99%
rename from previews/PR135/assets/source_methods_angles.md.D0iJTZWo.js
rename to previews/PR135/assets/source_methods_angles.md.BGpTF9uY.js
index 52e41d08d..70d2c0221 100644
--- a/previews/PR135/assets/source_methods_angles.md.D0iJTZWo.js
+++ b/previews/PR135/assets/source_methods_angles.md.BGpTF9uY.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h="/GeometryOps.jl/previews/PR135/assets/ouhffhi.Dig-DWOQ.png",o=JSON.parse('{"title":"Angles","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/angles.md","filePath":"source/methods/angles.md","lastUpdated":null}'),l={name:"source/methods/angles.md"},k=n(`

Angles

julia
export angles

What is angles?

Angles are the angles formed by a given geometries line segments, if it has line segments.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const h="/GeometryOps.jl/previews/PR135/assets/fsdxqux.Dig-DWOQ.png",o=JSON.parse('{"title":"Angles","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/angles.md","filePath":"source/methods/angles.md","lastUpdated":null}'),l={name:"source/methods/angles.md"},k=n(`

Angles

julia
export angles

What is angles?

Angles are the angles formed by a given geometries line segments, if it has line segments.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie, CairoMakie
 
@@ -18,7 +18,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h
     - The angles of a point is an empty vector.
     - The angles of a single line segment is an empty vector.
     - The angles of a linestring or linearring is a vector of angles formed by the curve.
-    - The angles of a polygin is a vector of vectors of angles formed by each ring.
+    - The angles of a polygon is a vector of vectors of angles formed by each ring.
     - The angles of a multi-geometry collection is a vector of the angles of each of the
         sub-geometries as defined above.
 
@@ -59,7 +59,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h
 end
 
 #= The angles of a polygon is a vector of polygon angles. Note that if there are holes
-within the polyogn, the angles will be listed after the exterior ring angles in order of the
+within the polygon, the angles will be listed after the exterior ring angles in order of the
 holes. All angles, including the hole angles, are interior angles of the polygon.=#
 function _angles(::Type{T}, ::GI.PolygonTrait, geom) where T
     angles = _angles(T, GI.LinearRingTrait(), GI.getexterior(geom); interior = true)
diff --git a/previews/PR135/assets/source_methods_angles.md.D0iJTZWo.lean.js b/previews/PR135/assets/source_methods_angles.md.BGpTF9uY.lean.js
similarity index 74%
rename from previews/PR135/assets/source_methods_angles.md.D0iJTZWo.lean.js
rename to previews/PR135/assets/source_methods_angles.md.BGpTF9uY.lean.js
index 505f06dad..32691d190 100644
--- a/previews/PR135/assets/source_methods_angles.md.D0iJTZWo.lean.js
+++ b/previews/PR135/assets/source_methods_angles.md.BGpTF9uY.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h="/GeometryOps.jl/previews/PR135/assets/ouhffhi.Dig-DWOQ.png",o=JSON.parse('{"title":"Angles","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/angles.md","filePath":"source/methods/angles.md","lastUpdated":null}'),l={name:"source/methods/angles.md"},k=n("",27),t=[k];function p(e,r,E,g,d,y){return a(),i("div",null,t)}const c=s(l,[["render",p]]);export{o as __pageData,c as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const h="/GeometryOps.jl/previews/PR135/assets/fsdxqux.Dig-DWOQ.png",o=JSON.parse('{"title":"Angles","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/angles.md","filePath":"source/methods/angles.md","lastUpdated":null}'),l={name:"source/methods/angles.md"},k=n("",27),t=[k];function p(e,r,E,g,d,y){return a(),i("div",null,t)}const c=s(l,[["render",p]]);export{o as __pageData,c as default};
diff --git a/previews/PR135/assets/source_methods_area.md.7qdFk2Vq.js b/previews/PR135/assets/source_methods_area.md.CXVG-VeW.js
similarity index 92%
rename from previews/PR135/assets/source_methods_area.md.7qdFk2Vq.js
rename to previews/PR135/assets/source_methods_area.md.CXVG-VeW.js
index dd7404c45..864c18538 100644
--- a/previews/PR135/assets/source_methods_area.md.7qdFk2Vq.js
+++ b/previews/PR135/assets/source_methods_area.md.CXVG-VeW.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h="/GeometryOps.jl/previews/PR135/assets/ouhffhi.Dig-DWOQ.png",t="/GeometryOps.jl/previews/PR135/assets/batmqvz.CULn5saZ.png",c=JSON.parse('{"title":"Area and signed area","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/area.md","filePath":"source/methods/area.md","lastUpdated":null}'),e={name:"source/methods/area.md"},l=n(`

Area and signed area

julia
export area, signed_area

What is area? What is signed area?

Area is the amount of space occupied by a two-dimensional figure. It is always a positive value. Signed area is simply the integral over the exterior path of a polygon, minus the sum of integrals over its interior holes. It is signed such that a clockwise path has a positive area, and a counterclockwise path has a negative area. The area is the absolute value of the signed area.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const h="/GeometryOps.jl/previews/PR135/assets/fsdxqux.Dig-DWOQ.png",t="/GeometryOps.jl/previews/PR135/assets/kbchokg.CULn5saZ.png",c=JSON.parse('{"title":"Area and signed area","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/area.md","filePath":"source/methods/area.md","lastUpdated":null}'),e={name:"source/methods/area.md"},l=n(`

Area and signed area

julia
export area, signed_area

What is area? What is signed area?

Area is the amount of space occupied by a two-dimensional figure. It is always a positive value. Signed area is simply the integral over the exterior path of a polygon, minus the sum of integrals over its interior holes. It is signed such that a clockwise path has a positive area, and a counterclockwise path has a negative area. The area is the absolute value of the signed area.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -7,7 +7,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h
 f, a, p = poly(collect(GI.getpoint(rect)); axis = (; aspect = DataAspect()))

This is clearly a rectangle, etc. But now let's look at how the points look:

julia
lines!(
     collect(GI.getpoint(rect));
     color = 1:GI.npoint(rect), linewidth = 10.0)
-f

The points are ordered in a counterclockwise fashion, which means that the signed area is negative. If we reverse the order of the points, we get a postive area.

julia
GO.signed_area(rect)  # -1.0
-1.0

Implementation

This is the GeoInterface-compatible implementation. First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that area and signed area are zero for all points and curves, even if the curves are closed like with a linear ring. Also note that signed area really only makes sense for polygons, given with a multipolygon can have several polygons each with a different orientation and thus the absolute value of the signed area might not be the area. This is why signed area is only implemented for polygons.

Targets for applys functions

julia
const _AREA_TARGETS = TraitTarget{Union{GI.PolygonTrait,GI.AbstractCurveTrait,GI.MultiPointTrait,GI.PointTrait}}()
+f

The points are ordered in a counterclockwise fashion, which means that the signed area is negative. If we reverse the order of the points, we get a positive area.

julia
GO.signed_area(rect)  # -1.0
-1.0

Implementation

This is the GeoInterface-compatible implementation. First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that area and signed area are zero for all points and curves, even if the curves are closed like with a linear ring. Also note that signed area really only makes sense for polygons, given with a multipolygon can have several polygons each with a different orientation and thus the absolute value of the signed area might not be the area. This is why signed area is only implemented for polygons.

Targets for applys functions

julia
const _AREA_TARGETS = TraitTarget{Union{GI.PolygonTrait,GI.AbstractCurveTrait,GI.MultiPointTrait,GI.PointTrait}}()
 
 """
     area(geom, [T = Float64])::T
@@ -35,7 +35,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h
     signed_area(geom, [T = Float64])::T
 
 Returns the signed area of a single geometry, based on winding order.
-This is computed slighly differently for different geometries:
+This is computed slightly differently for different geometries:
 
     - The signed area of a point is always zero.
     - The signed area of a curve is always zero.
diff --git a/previews/PR135/assets/source_methods_area.md.7qdFk2Vq.lean.js b/previews/PR135/assets/source_methods_area.md.CXVG-VeW.lean.js
similarity index 65%
rename from previews/PR135/assets/source_methods_area.md.7qdFk2Vq.lean.js
rename to previews/PR135/assets/source_methods_area.md.CXVG-VeW.lean.js
index 6d9ee933d..f0a6a5498 100644
--- a/previews/PR135/assets/source_methods_area.md.7qdFk2Vq.lean.js
+++ b/previews/PR135/assets/source_methods_area.md.CXVG-VeW.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h="/GeometryOps.jl/previews/PR135/assets/ouhffhi.Dig-DWOQ.png",t="/GeometryOps.jl/previews/PR135/assets/batmqvz.CULn5saZ.png",c=JSON.parse('{"title":"Area and signed area","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/area.md","filePath":"source/methods/area.md","lastUpdated":null}'),e={name:"source/methods/area.md"},l=n("",40),p=[l];function k(r,d,g,E,o,y){return a(),i("div",null,p)}const C=s(e,[["render",k]]);export{c as __pageData,C as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const h="/GeometryOps.jl/previews/PR135/assets/fsdxqux.Dig-DWOQ.png",t="/GeometryOps.jl/previews/PR135/assets/kbchokg.CULn5saZ.png",c=JSON.parse('{"title":"Area and signed area","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/area.md","filePath":"source/methods/area.md","lastUpdated":null}'),e={name:"source/methods/area.md"},l=n("",40),p=[l];function k(r,d,g,E,o,y){return a(),i("div",null,p)}const C=s(e,[["render",k]]);export{c as __pageData,C as default};
diff --git a/previews/PR135/assets/source_methods_barycentric.md.DUTwwa2T.js b/previews/PR135/assets/source_methods_barycentric.md.DiCxsA-F.js
similarity index 99%
rename from previews/PR135/assets/source_methods_barycentric.md.DUTwwa2T.js
rename to previews/PR135/assets/source_methods_barycentric.md.DiCxsA-F.js
index f7aedd93f..3628e15dd 100644
--- a/previews/PR135/assets/source_methods_barycentric.md.DUTwwa2T.js
+++ b/previews/PR135/assets/source_methods_barycentric.md.DiCxsA-F.js
@@ -1,4 +1,4 @@
-import{_ as t,c as a,j as s,a as i,a7 as h,o as n}from"./chunks/framework.k41oUgTf.js";const k="/GeometryOps.jl/previews/PR135/assets/uwqnnad.CZy9YIUA.png",R=JSON.parse('{"title":"Barycentric coordinates","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/barycentric.md","filePath":"source/methods/barycentric.md","lastUpdated":null}'),l={name:"source/methods/barycentric.md"},p=h(`

Barycentric coordinates

julia
export barycentric_coordinates, barycentric_coordinates!, barycentric_interpolate
+import{_ as t,c as a,j as s,a as i,a7 as h,o as n}from"./chunks/framework.CONf0Rze.js";const k="/GeometryOps.jl/previews/PR135/assets/prtwaxi.CZy9YIUA.png",R=JSON.parse('{"title":"Barycentric coordinates","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/barycentric.md","filePath":"source/methods/barycentric.md","lastUpdated":null}'),l={name:"source/methods/barycentric.md"},p=h(`

Barycentric coordinates

julia
export barycentric_coordinates, barycentric_coordinates!, barycentric_interpolate
 export MeanValue

Generalized barycentric coordinates are a generalization of barycentric coordinates, which are typically used in triangles, to arbitrary polygons.

They provide a way to express a point within a polygon as a weighted average of the polygon's vertices.

`,4),e={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},E={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"10.692ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 4726 1000","aria-hidden":"true"},r=h('',1),d=[r],g=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"λ"),s("mn",null,"1")]),s("mo",null,","),s("msub",null,[s("mi",null,"λ"),s("mn",null,"2")]),s("mo",null,","),s("msub",null,[s("mi",null,"λ"),s("mn",null,"3")]),s("mo",{stretchy:"false"},")")])],-1),y={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},F={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.357ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 600 453","aria-hidden":"true"},o=s("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[s("g",{"data-mml-node":"math"},[s("g",{"data-mml-node":"mi"},[s("path",{"data-c":"1D45B",d:"M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z",style:{"stroke-width":"3"}})])])],-1),c=[o],C=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"n")])],-1),B={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},A={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.357ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 600 453","aria-hidden":"true"},D=s("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[s("g",{"data-mml-node":"math"},[s("g",{"data-mml-node":"mi"},[s("path",{"data-c":"1D45B",d:"M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z",style:{"stroke-width":"3"}})])])],-1),u=[D],T=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"n")])],-1),m={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},b={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"14.876ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 6575.4 1000","aria-hidden":"true"},Q=h('',1),_=[Q],v=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"λ"),s("mn",null,"1")]),s("mo",null,","),s("msub",null,[s("mi",null,"λ"),s("mn",null,"2")]),s("mo",null,","),s("mo",null,"."),s("mo",null,"."),s("mo",null,"."),s("mo",null,","),s("msub",null,[s("mi",null,"λ"),s("mi",null,"n")]),s("mo",{stretchy:"false"},")")])],-1),w=h(`

As with the triangle case, the weights sum to 1, and each is non-negative.

Example

This example was taken from this page of CGAL's documentation.

julia
using GeometryOps
 using GeometryOps.GeometryBasics
 using Makie
diff --git a/previews/PR135/assets/source_methods_barycentric.md.DUTwwa2T.lean.js b/previews/PR135/assets/source_methods_barycentric.md.DiCxsA-F.lean.js
similarity index 98%
rename from previews/PR135/assets/source_methods_barycentric.md.DUTwwa2T.lean.js
rename to previews/PR135/assets/source_methods_barycentric.md.DiCxsA-F.lean.js
index e62ea08a9..d956a7ac7 100644
--- a/previews/PR135/assets/source_methods_barycentric.md.DUTwwa2T.lean.js
+++ b/previews/PR135/assets/source_methods_barycentric.md.DiCxsA-F.lean.js
@@ -1 +1 @@
-import{_ as t,c as a,j as s,a as i,a7 as h,o as n}from"./chunks/framework.k41oUgTf.js";const k="/GeometryOps.jl/previews/PR135/assets/uwqnnad.CZy9YIUA.png",R=JSON.parse('{"title":"Barycentric coordinates","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/barycentric.md","filePath":"source/methods/barycentric.md","lastUpdated":null}'),l={name:"source/methods/barycentric.md"},p=h("",4),e={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},E={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"10.692ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 4726 1000","aria-hidden":"true"},r=h("",1),d=[r],g=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"λ"),s("mn",null,"1")]),s("mo",null,","),s("msub",null,[s("mi",null,"λ"),s("mn",null,"2")]),s("mo",null,","),s("msub",null,[s("mi",null,"λ"),s("mn",null,"3")]),s("mo",{stretchy:"false"},")")])],-1),y={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},F={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.357ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 600 453","aria-hidden":"true"},o=s("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[s("g",{"data-mml-node":"math"},[s("g",{"data-mml-node":"mi"},[s("path",{"data-c":"1D45B",d:"M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z",style:{"stroke-width":"3"}})])])],-1),c=[o],C=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"n")])],-1),B={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},A={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.357ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 600 453","aria-hidden":"true"},D=s("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[s("g",{"data-mml-node":"math"},[s("g",{"data-mml-node":"mi"},[s("path",{"data-c":"1D45B",d:"M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z",style:{"stroke-width":"3"}})])])],-1),u=[D],T=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"n")])],-1),m={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},b={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"14.876ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 6575.4 1000","aria-hidden":"true"},Q=h("",1),_=[Q],v=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"λ"),s("mn",null,"1")]),s("mo",null,","),s("msub",null,[s("mi",null,"λ"),s("mn",null,"2")]),s("mo",null,","),s("mo",null,"."),s("mo",null,"."),s("mo",null,"."),s("mo",null,","),s("msub",null,[s("mi",null,"λ"),s("mi",null,"n")]),s("mo",{stretchy:"false"},")")])],-1),w=h("",35);function f(x,V,P,M,q,N){return n(),a("div",null,[p,s("p",null,[i("In the case of a triangle, barycentric coordinates are a set of three numbers "),s("mjx-container",e,[(n(),a("svg",E,d)),g]),i(", each associated with a vertex of the triangle. Any point within the triangle can be expressed as a weighted average of the vertices, where the weights are the barycentric coordinates. The weights sum to 1, and each is non-negative.")]),s("p",null,[i("For a polygon with "),s("mjx-container",y,[(n(),a("svg",F,c)),C]),i(" vertices, generalized barycentric coordinates are a set of "),s("mjx-container",B,[(n(),a("svg",A,u)),T]),i(" numbers "),s("mjx-container",m,[(n(),a("svg",b,_)),v]),i(", each associated with a vertex of the polygon. Any point within the polygon can be expressed as a weighted average of the vertices, where the weights are the generalized barycentric coordinates.")]),w])}const G=t(l,[["render",f]]);export{R as __pageData,G as default};
+import{_ as t,c as a,j as s,a as i,a7 as h,o as n}from"./chunks/framework.CONf0Rze.js";const k="/GeometryOps.jl/previews/PR135/assets/prtwaxi.CZy9YIUA.png",R=JSON.parse('{"title":"Barycentric coordinates","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/barycentric.md","filePath":"source/methods/barycentric.md","lastUpdated":null}'),l={name:"source/methods/barycentric.md"},p=h("",4),e={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},E={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"10.692ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 4726 1000","aria-hidden":"true"},r=h("",1),d=[r],g=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"λ"),s("mn",null,"1")]),s("mo",null,","),s("msub",null,[s("mi",null,"λ"),s("mn",null,"2")]),s("mo",null,","),s("msub",null,[s("mi",null,"λ"),s("mn",null,"3")]),s("mo",{stretchy:"false"},")")])],-1),y={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},F={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.357ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 600 453","aria-hidden":"true"},o=s("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[s("g",{"data-mml-node":"math"},[s("g",{"data-mml-node":"mi"},[s("path",{"data-c":"1D45B",d:"M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z",style:{"stroke-width":"3"}})])])],-1),c=[o],C=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"n")])],-1),B={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},A={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.357ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 600 453","aria-hidden":"true"},D=s("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[s("g",{"data-mml-node":"math"},[s("g",{"data-mml-node":"mi"},[s("path",{"data-c":"1D45B",d:"M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z",style:{"stroke-width":"3"}})])])],-1),u=[D],T=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"n")])],-1),m={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},b={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"14.876ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 6575.4 1000","aria-hidden":"true"},Q=h("",1),_=[Q],v=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mo",{stretchy:"false"},"("),s("msub",null,[s("mi",null,"λ"),s("mn",null,"1")]),s("mo",null,","),s("msub",null,[s("mi",null,"λ"),s("mn",null,"2")]),s("mo",null,","),s("mo",null,"."),s("mo",null,"."),s("mo",null,"."),s("mo",null,","),s("msub",null,[s("mi",null,"λ"),s("mi",null,"n")]),s("mo",{stretchy:"false"},")")])],-1),w=h("",35);function f(x,V,P,M,q,N){return n(),a("div",null,[p,s("p",null,[i("In the case of a triangle, barycentric coordinates are a set of three numbers "),s("mjx-container",e,[(n(),a("svg",E,d)),g]),i(", each associated with a vertex of the triangle. Any point within the triangle can be expressed as a weighted average of the vertices, where the weights are the barycentric coordinates. The weights sum to 1, and each is non-negative.")]),s("p",null,[i("For a polygon with "),s("mjx-container",y,[(n(),a("svg",F,c)),C]),i(" vertices, generalized barycentric coordinates are a set of "),s("mjx-container",B,[(n(),a("svg",A,u)),T]),i(" numbers "),s("mjx-container",m,[(n(),a("svg",b,_)),v]),i(", each associated with a vertex of the polygon. Any point within the polygon can be expressed as a weighted average of the vertices, where the weights are the generalized barycentric coordinates.")]),w])}const G=t(l,[["render",f]]);export{R as __pageData,G as default};
diff --git a/previews/PR135/assets/source_methods_buffer.md.CTloyyO4.js b/previews/PR135/assets/source_methods_buffer.md.CxkGeu_t.js
similarity index 98%
rename from previews/PR135/assets/source_methods_buffer.md.CTloyyO4.js
rename to previews/PR135/assets/source_methods_buffer.md.CxkGeu_t.js
index a78aad816..327a3dec6 100644
--- a/previews/PR135/assets/source_methods_buffer.md.CTloyyO4.js
+++ b/previews/PR135/assets/source_methods_buffer.md.CxkGeu_t.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as t}from"./chunks/framework.k41oUgTf.js";const y=JSON.parse('{"title":"Buffer","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/buffer.md","filePath":"source/methods/buffer.md","lastUpdated":null}'),n={name:"source/methods/buffer.md"},e=t(`

Buffer

Buffering a geometry means computing the region distance away from it, and returning that region as the new geometry.

As of now, we only support GEOS as the backend, meaning that LibGEOS must be loaded.

julia
function buffer(geometry, distance; kwargs...)
+import{_ as s,c as i,o as a,a7 as t}from"./chunks/framework.CONf0Rze.js";const y=JSON.parse('{"title":"Buffer","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/buffer.md","filePath":"source/methods/buffer.md","lastUpdated":null}'),n={name:"source/methods/buffer.md"},e=t(`

Buffer

Buffering a geometry means computing the region distance away from it, and returning that region as the new geometry.

As of now, we only support GEOS as the backend, meaning that LibGEOS must be loaded.

julia
function buffer(geometry, distance; kwargs...)
     buffered = buffer(GEOS(; kwargs...), geometry, distance)
     return tuples(buffered)
 end

Below is an error handler similar to the others we have for e.g. segmentize, which checks if there is a method error for the geos backend.

Add an error hint for buffer if LibGEOS is not loaded!

julia
function _buffer_error_hinter(io, exc, argtypes, kwargs)
diff --git a/previews/PR135/assets/source_methods_buffer.md.CTloyyO4.lean.js b/previews/PR135/assets/source_methods_buffer.md.CxkGeu_t.lean.js
similarity index 70%
rename from previews/PR135/assets/source_methods_buffer.md.CTloyyO4.lean.js
rename to previews/PR135/assets/source_methods_buffer.md.CxkGeu_t.lean.js
index f946b6d60..61a23722a 100644
--- a/previews/PR135/assets/source_methods_buffer.md.CTloyyO4.lean.js
+++ b/previews/PR135/assets/source_methods_buffer.md.CxkGeu_t.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as t}from"./chunks/framework.k41oUgTf.js";const y=JSON.parse('{"title":"Buffer","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/buffer.md","filePath":"source/methods/buffer.md","lastUpdated":null}'),n={name:"source/methods/buffer.md"},e=t("",9),h=[e];function k(p,l,r,d,E,o){return a(),i("div",null,h)}const c=s(n,[["render",k]]);export{y as __pageData,c as default};
+import{_ as s,c as i,o as a,a7 as t}from"./chunks/framework.CONf0Rze.js";const y=JSON.parse('{"title":"Buffer","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/buffer.md","filePath":"source/methods/buffer.md","lastUpdated":null}'),n={name:"source/methods/buffer.md"},e=t("",9),h=[e];function k(p,l,r,d,E,o){return a(),i("div",null,h)}const c=s(n,[["render",k]]);export{y as __pageData,c as default};
diff --git a/previews/PR135/assets/source_methods_centroid.md.D456D2F_.js b/previews/PR135/assets/source_methods_centroid.md.CICsk7_Q.js
similarity index 99%
rename from previews/PR135/assets/source_methods_centroid.md.D456D2F_.js
rename to previews/PR135/assets/source_methods_centroid.md.CICsk7_Q.js
index c6b380039..46340d5a8 100644
--- a/previews/PR135/assets/source_methods_centroid.md.D456D2F_.js
+++ b/previews/PR135/assets/source_methods_centroid.md.CICsk7_Q.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h="/GeometryOps.jl/previews/PR135/assets/lxyfcxo.BD0hVfse.png",t="/GeometryOps.jl/previews/PR135/assets/zmwgynm.DHcwB147.png",F=JSON.parse('{"title":"Centroid","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/centroid.md","filePath":"source/methods/centroid.md","lastUpdated":null}'),k={name:"source/methods/centroid.md"},l=n(`

Centroid

julia
export centroid, centroid_and_length, centroid_and_area

What is the centroid?

The centroid is the geometric center of a line string or area(s). Note that the centroid does not need to be inside of a concave area.

Further note that by convention a line, or linear ring, is calculated by weighting the line segments by their length, while polygons and multipolygon centroids are calculated by weighting edge's by their 'area components'.

To provide an example, consider this concave polygon in the shape of a 'C':

julia
import GeometryOps as GO
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const h="/GeometryOps.jl/previews/PR135/assets/jphsfis.BD0hVfse.png",t="/GeometryOps.jl/previews/PR135/assets/nmofpgl.DHcwB147.png",F=JSON.parse('{"title":"Centroid","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/centroid.md","filePath":"source/methods/centroid.md","lastUpdated":null}'),p={name:"source/methods/centroid.md"},k=n(`

Centroid

julia
export centroid, centroid_and_length, centroid_and_area

What is the centroid?

The centroid is the geometric center of a line string or area(s). Note that the centroid does not need to be inside of a concave area.

Further note that by convention a line, or linear ring, is calculated by weighting the line segments by their length, while polygons and multipolygon centroids are calculated by weighting edge's by their 'area components'.

To provide an example, consider this concave polygon in the shape of a 'C':

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -6,7 +6,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h
 cshape = GI.Polygon([[(0,0), (0,3), (3,3), (3,2), (1,2), (1,1), (3,1), (3,0), (0,0)]])
 f, a, p = poly(collect(GI.getpoint(cshape)); axis = (; aspect = DataAspect()))

Let's see what the centroid looks like (plotted in red):

julia
cent = GO.centroid(cshape)
 scatter!(GI.x(cent), GI.y(cent), color = :red)
-f

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that if you call centroid on a LineString or LinearRing, the centroid_and_length function will be called due to the weighting scheme described above, while centroid_and_area is called for polygons and multipolygons. However, centroid_and_area can still be called on a LineString or LinearRing when they are closed, for example as the interior hole of a polygon.

The helper functions centroid_and_length and centroid_and_area are made availible just in case the user also needs the area or length to decrease repeat computation.

julia
"""
+f

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that if you call centroid on a LineString or LinearRing, the centroid_and_length function will be called due to the weighting scheme described above, while centroid_and_area is called for polygons and multipolygons. However, centroid_and_area can still be called on a LineString or LinearRing when they are closed, for example as the interior hole of a polygon.

The helper functions centroid_and_length and centroid_and_area are made available just in case the user also needs the area or length to decrease repeat computation.

julia
"""
     centroid(geom, [T=Float64])::Tuple{T, T}
 
 Returns the centroid of a given line segment, linear ring, polygon, or
@@ -90,4 +90,4 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h
     x = (x1 * area1 + x2 * area2) / area
     y = (y1 * area1 + y2 * area2) / area
     return (x, y), area
-end

This page was generated using Literate.jl.

`,57),p=[l];function e(r,E,d,g,y,o){return a(),i("div",null,p)}const C=s(k,[["render",e]]);export{F as __pageData,C as default}; +end

This page was generated using Literate.jl.

`,57),l=[k];function e(r,E,d,g,y,o){return a(),i("div",null,l)}const C=s(p,[["render",e]]);export{F as __pageData,C as default}; diff --git a/previews/PR135/assets/source_methods_centroid.md.CICsk7_Q.lean.js b/previews/PR135/assets/source_methods_centroid.md.CICsk7_Q.lean.js new file mode 100644 index 000000000..c4acf6fc0 --- /dev/null +++ b/previews/PR135/assets/source_methods_centroid.md.CICsk7_Q.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const h="/GeometryOps.jl/previews/PR135/assets/jphsfis.BD0hVfse.png",t="/GeometryOps.jl/previews/PR135/assets/nmofpgl.DHcwB147.png",F=JSON.parse('{"title":"Centroid","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/centroid.md","filePath":"source/methods/centroid.md","lastUpdated":null}'),p={name:"source/methods/centroid.md"},k=n("",57),l=[k];function e(r,E,d,g,y,o){return a(),i("div",null,l)}const C=s(p,[["render",e]]);export{F as __pageData,C as default}; diff --git a/previews/PR135/assets/source_methods_centroid.md.D456D2F_.lean.js b/previews/PR135/assets/source_methods_centroid.md.D456D2F_.lean.js deleted file mode 100644 index 9b30db7b9..000000000 --- a/previews/PR135/assets/source_methods_centroid.md.D456D2F_.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h="/GeometryOps.jl/previews/PR135/assets/lxyfcxo.BD0hVfse.png",t="/GeometryOps.jl/previews/PR135/assets/zmwgynm.DHcwB147.png",F=JSON.parse('{"title":"Centroid","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/centroid.md","filePath":"source/methods/centroid.md","lastUpdated":null}'),k={name:"source/methods/centroid.md"},l=n("",57),p=[l];function e(r,E,d,g,y,o){return a(),i("div",null,p)}const C=s(k,[["render",e]]);export{F as __pageData,C as default}; diff --git a/previews/PR135/assets/source_methods_clipping_clipping_processor.md.DWDSGXct.js b/previews/PR135/assets/source_methods_clipping_clipping_processor.md.5X_cs7CX.js similarity index 96% rename from previews/PR135/assets/source_methods_clipping_clipping_processor.md.DWDSGXct.js rename to previews/PR135/assets/source_methods_clipping_clipping_processor.md.5X_cs7CX.js index b76cda55c..01b8f6089 100644 --- a/previews/PR135/assets/source_methods_clipping_clipping_processor.md.DWDSGXct.js +++ b/previews/PR135/assets/source_methods_clipping_clipping_processor.md.5X_cs7CX.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o=JSON.parse('{"title":"Polygon clipping helpers","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/clipping_processor.md","filePath":"source/methods/clipping/clipping_processor.md","lastUpdated":null}'),h={name:"source/methods/clipping/clipping_processor.md"},t=n(`

Polygon clipping helpers

This file contains the shared helper functions for the polygon clipping functionalities.

This enum defines which side of an edge a point is on

julia
@enum PointEdgeSide left=1 right=2 unknown=3

Constants assigned for readability

julia
const enter, exit = true, false
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const o=JSON.parse('{"title":"Polygon clipping helpers","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/clipping_processor.md","filePath":"source/methods/clipping/clipping_processor.md","lastUpdated":null}'),h={name:"source/methods/clipping/clipping_processor.md"},t=n(`

Polygon clipping helpers

This file contains the shared helper functions for the polygon clipping functionalities.

This enum defines which side of an edge a point is on

julia
@enum PointEdgeSide left=1 right=2 unknown=3

Constants assigned for readability

julia
const enter, exit = true, false
 const crossing, bouncing = true, false
 
 #= A point can either be the start or end of an overlapping chain of points between two
@@ -32,7 +32,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
     _flag_ent_exit!(T, GI.LinearRingTrait(), poly_a, b_list, delay_cross_f, Base.Fix2(delay_bounce_f, false); exact)

Set node indices and filter a_idx_list to just crossing points

julia
    _index_crossing_intrs!(a_list, b_list, a_idx_list)
 
     return a_list, b_list, a_idx_list
-end
_build_a_list(::Type{T}, poly_a, poly_b) -> (a_list, a_idx_list)

This function take in two polygon rings and creates a vector of PolyNodes to represent poly_a, including its intersection points with poly_b. The information stored in each PolyNode is needed for clipping using the Greiner-Hormann clipping algorithm.

Note: After calling this function, a_list is not fully formed because the neighboring indicies of the intersection points in b_list still need to be updated. Also we still have not update the entry and exit flags for a_list.

The a_idx_list is a list of the indicies of intersection points in a_list. The value at index i of a_idx_list is the location in a_list where the ith intersection point lies.

julia
function _build_a_list(::Type{T}, poly_a, poly_b; exact) where T
+end
_build_a_list(::Type{T}, poly_a, poly_b) -> (a_list, a_idx_list)

This function take in two polygon rings and creates a vector of PolyNodes to represent poly_a, including its intersection points with poly_b. The information stored in each PolyNode is needed for clipping using the Greiner-Hormann clipping algorithm.

Note: After calling this function, a_list is not fully formed because the neighboring indices of the intersection points in b_list still need to be updated. Also we still have not update the entry and exit flags for a_list.

The a_idx_list is a list of the indices of intersection points in a_list. The value at index i of a_idx_list is the location in a_list where the ith intersection point lies.

julia
function _build_a_list(::Type{T}, poly_a, poly_b; exact) where T
     n_a_edges = _nedge(poly_a)
     a_list = PolyNode{T}[]  # list of points in poly_a
     sizehint!(a_list, n_a_edges)
@@ -105,7 +105,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
         a_pt1 = a_pt2
     end
     return a_list, a_idx_list, n_b_intrs
-end
_build_b_list(::Type{T}, a_idx_list, a_list, poly_b) -> b_list

This function takes in the a_list and a_idx_list build in _build_a_list and poly_b and creates a vector of PolyNodes to represent poly_b. The information stored in each PolyNode is needed for clipping using the Greiner-Hormann clipping algorithm.

Note: after calling this function, b_list is not fully updated. The entry/exit flags still need to be updated. However, the neightbor value in a_list is now updated.

julia
function _build_b_list(::Type{T}, a_idx_list, a_list, n_b_intrs, poly_b) where T

Sort intersection points by insertion order in b_list

julia
    sort!(a_idx_list, by = x-> a_list[x].neighbor + a_list[x].fracs[2])

Initialize needed values and lists

julia
    n_b_edges = _nedge(poly_b)
+end
_build_b_list(::Type{T}, a_idx_list, a_list, poly_b) -> b_list

This function takes in the a_list and a_idx_list build in _build_a_list and poly_b and creates a vector of PolyNodes to represent poly_b. The information stored in each PolyNode is needed for clipping using the Greiner-Hormann clipping algorithm.

Note: after calling this function, b_list is not fully updated. The entry/exit flags still need to be updated. However, the neighbor value in a_list is now updated.

julia
function _build_b_list(::Type{T}, a_idx_list, a_list, n_b_intrs, poly_b) where T

Sort intersection points by insertion order in b_list

julia
    sort!(a_idx_list, by = x-> a_list[x].neighbor + a_list[x].fracs[2])

Initialize needed values and lists

julia
    n_b_edges = _nedge(poly_b)
     n_intr_pts = length(a_idx_list)
     b_list = PolyNode{T}[]
     sizehint!(b_list, n_b_edges + n_b_intrs)
@@ -392,7 +392,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
     end
     return return_polys
 end

Get type of polygons that will be made TODO: Increase type options

julia
_get_poly_type(::Type{T}) where T =
-    GI.Polygon{false, false, Vector{GI.LinearRing{false, false, Vector{Tuple{T, T}}, Nothing, Nothing}}, Nothing, Nothing}
_find_non_cross_orientation(a_list, b_list, a_poly, b_poly; exact)

For polygns with no crossing intersection points, either one polygon is inside of another, or they are seperate polygons with no intersection (other than an edge or point).

Return two booleans that represent if a is inside b (potentially with shared edges / points) and visa versa if b is inside of a.

julia
function _find_non_cross_orientation(a_list, b_list, a_poly, b_poly; exact)
+    GI.Polygon{false, false, Vector{GI.LinearRing{false, false, Vector{Tuple{T, T}}, Nothing, Nothing}}, Nothing, Nothing}
_find_non_cross_orientation(a_list, b_list, a_poly, b_poly; exact)

For polygons with no crossing intersection points, either one polygon is inside of another, or they are separate polygons with no intersection (other than an edge or point).

Return two booleans that represent if a is inside b (potentially with shared edges / points) and visa versa if b is inside of a.

julia
function _find_non_cross_orientation(a_list, b_list, a_poly, b_poly; exact)
     non_intr_a_idx = findfirst(x -> !x.inter, a_list)
     non_intr_b_idx = findfirst(x -> !x.inter, b_list)
     #= Determine if non-intersection point is in or outside of polygon - if there isn't A
@@ -420,7 +420,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
                         append!(remove_poly_idx, falses(n_new_pieces))
                         n_new_per_poly += n_new_pieces
                     end
-                    if !on_ext && !out_ext  # hole is completly within exterior
+                    if !on_ext && !out_ext  # hole is completely within exterior
                         push!(curr_poly.geom, new_hole)
                     else  # hole is partially within and outside of polygon's exterior
                         new_polys = difference(curr_poly_ext, new_hole_poly, T; target=GI.PolygonTrait())
@@ -431,7 +431,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
                             append!(remove_poly_idx, falses(n_new_polys))
                             n_new_per_poly += n_new_polys
                         end
-                    end

polygon is completly within hole

julia
                elseif coveredby(curr_poly_ext, GI.Polygon(StaticArrays.SVector(curr_hole)))
+                    end

polygon is completely within hole

julia
                elseif coveredby(curr_poly_ext, GI.Polygon(StaticArrays.SVector(curr_hole)))
                     remove_poly_idx[j] = true
                 end
             end
@@ -439,7 +439,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
         n_polys += n_new_per_poly
     end

Remove all polygon that were marked for removal

julia
    deleteat!(return_polys, remove_poly_idx)
     return
-end
_combine_holes!(::Type{T}, new_hole, curr_poly, return_polys)

The new hole is combined with any existing holes in curr_poly. The holes can be combined into a larger hole if they are intersecting. If this happens, then the new, combined hole is returned with the orignal holes making up the new hole removed from curr_poly. Additionally, if the combined holes form a ring, the interior is added to the return_polys as a new polygon piece. Additionally, holes leftover after combination will be checked for it they are in the "main" polygon or in one of these new pieces and moved accordingly.

If the holes don't touch or curr_poly has no holes, then new_hole is returned without any changes.

julia
function _combine_holes!(::Type{T}, new_hole, curr_poly, return_polys, remove_hole_idx) where T
+end
_combine_holes!(::Type{T}, new_hole, curr_poly, return_polys)

The new hole is combined with any existing holes in curr_poly. The holes can be combined into a larger hole if they are intersecting. If this happens, then the new, combined hole is returned with the original holes making up the new hole removed from curr_poly. Additionally, if the combined holes form a ring, the interior is added to the return_polys as a new polygon piece. Additionally, holes leftover after combination will be checked for it they are in the "main" polygon or in one of these new pieces and moved accordingly.

If the holes don't touch or curr_poly has no holes, then new_hole is returned without any changes.

julia
function _combine_holes!(::Type{T}, new_hole, curr_poly, return_polys, remove_hole_idx) where T
     n_new_polys = 0
     empty!(remove_hole_idx)
     new_hole_poly = GI.Polygon(StaticArrays.SVector(new_hole))

Combine any existing holes in curr_poly with new hole

julia
    for (k, old_hole) in enumerate(GI.gethole(curr_poly))
@@ -483,7 +483,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
                     p2 = p
                     continue
                 else
-                    p3 = p

check if p2 is approximatly on the edge formed by p1 and p3 - remove if so

julia
                    if Predicates.orient(p1, p2, p3; exact = _False()) == 0
+                    p3 = p

check if p2 is approximately on the edge formed by p1 and p3 - remove if so

julia
                    if Predicates.orient(p1, p2, p3; exact = _False()) == 0
                         remove_idx[i - 1] = true
                     end
                 end
diff --git a/previews/PR135/assets/source_methods_clipping_clipping_processor.md.DWDSGXct.lean.js b/previews/PR135/assets/source_methods_clipping_clipping_processor.md.5X_cs7CX.lean.js
similarity index 75%
rename from previews/PR135/assets/source_methods_clipping_clipping_processor.md.DWDSGXct.lean.js
rename to previews/PR135/assets/source_methods_clipping_clipping_processor.md.5X_cs7CX.lean.js
index b30986c94..58ad3d50f 100644
--- a/previews/PR135/assets/source_methods_clipping_clipping_processor.md.DWDSGXct.lean.js
+++ b/previews/PR135/assets/source_methods_clipping_clipping_processor.md.5X_cs7CX.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o=JSON.parse('{"title":"Polygon clipping helpers","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/clipping_processor.md","filePath":"source/methods/clipping/clipping_processor.md","lastUpdated":null}'),h={name:"source/methods/clipping/clipping_processor.md"},t=n("",169),p=[t];function l(k,e,E,r,d,g){return a(),i("div",null,p)}const c=s(h,[["render",l]]);export{o as __pageData,c as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const o=JSON.parse('{"title":"Polygon clipping helpers","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/clipping_processor.md","filePath":"source/methods/clipping/clipping_processor.md","lastUpdated":null}'),h={name:"source/methods/clipping/clipping_processor.md"},t=n("",169),p=[t];function l(k,e,E,r,d,g){return a(),i("div",null,p)}const c=s(h,[["render",l]]);export{o as __pageData,c as default};
diff --git a/previews/PR135/assets/source_methods_clipping_coverage.md.B5mnmfCT.js b/previews/PR135/assets/source_methods_clipping_coverage.md.8uUWzwQ-.js
similarity index 99%
rename from previews/PR135/assets/source_methods_clipping_coverage.md.B5mnmfCT.js
rename to previews/PR135/assets/source_methods_clipping_coverage.md.8uUWzwQ-.js
index 0276ea34a..e500471ff 100644
--- a/previews/PR135/assets/source_methods_clipping_coverage.md.B5mnmfCT.js
+++ b/previews/PR135/assets/source_methods_clipping_coverage.md.8uUWzwQ-.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h="/GeometryOps.jl/previews/PR135/assets/atqcrtt.Cb0_DiYE.png",c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/coverage.md","filePath":"source/methods/clipping/coverage.md","lastUpdated":null}'),l={name:"source/methods/clipping/coverage.md"},k=n(`
julia
export coverage

What is coverage?

Coverage is the amount of geometry area within a bounding box defined by the minimum and maximum x and y-coordiantes of that bounding box, or an Extent containing that information.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const h="/GeometryOps.jl/previews/PR135/assets/pzrdbdt.Cb0_DiYE.png",c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/coverage.md","filePath":"source/methods/clipping/coverage.md","lastUpdated":null}'),l={name:"source/methods/clipping/coverage.md"},k=n(`
julia
export coverage

What is coverage?

Coverage is the amount of geometry area within a bounding box defined by the minimum and maximum x and y-coordinates of that bounding box, or an Extent containing that information.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -220,4 +220,4 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h
     x_wall = (wall == NORTH || wall == EAST) ? xmax : xmin
     y_wall = (wall == NORTH || wall == WEST) ? ymax : ymin
     return x1 * y_wall - x_wall * y1
-end

This page was generated using Literate.jl.

`,58),t=[k];function p(e,E,r,d,g,y){return a(),i("div",null,t)}const o=s(l,[["render",p]]);export{c as __pageData,o as default}; +end

This page was generated using Literate.jl.

`,58),p=[k];function t(e,E,r,d,g,y){return a(),i("div",null,p)}const o=s(l,[["render",t]]);export{c as __pageData,o as default}; diff --git a/previews/PR135/assets/source_methods_clipping_coverage.md.B5mnmfCT.lean.js b/previews/PR135/assets/source_methods_clipping_coverage.md.8uUWzwQ-.lean.js similarity index 50% rename from previews/PR135/assets/source_methods_clipping_coverage.md.B5mnmfCT.lean.js rename to previews/PR135/assets/source_methods_clipping_coverage.md.8uUWzwQ-.lean.js index 6636a1315..94141adef 100644 --- a/previews/PR135/assets/source_methods_clipping_coverage.md.B5mnmfCT.lean.js +++ b/previews/PR135/assets/source_methods_clipping_coverage.md.8uUWzwQ-.lean.js @@ -1 +1 @@ -import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h="/GeometryOps.jl/previews/PR135/assets/atqcrtt.Cb0_DiYE.png",c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/coverage.md","filePath":"source/methods/clipping/coverage.md","lastUpdated":null}'),l={name:"source/methods/clipping/coverage.md"},k=n("",58),t=[k];function p(e,E,r,d,g,y){return a(),i("div",null,t)}const o=s(l,[["render",p]]);export{c as __pageData,o as default}; +import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const h="/GeometryOps.jl/previews/PR135/assets/pzrdbdt.Cb0_DiYE.png",c=JSON.parse('{"title":"","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/coverage.md","filePath":"source/methods/clipping/coverage.md","lastUpdated":null}'),l={name:"source/methods/clipping/coverage.md"},k=n("",58),p=[k];function t(e,E,r,d,g,y){return a(),i("div",null,p)}const o=s(l,[["render",t]]);export{c as __pageData,o as default}; diff --git a/previews/PR135/assets/source_methods_clipping_cut.md.DyYI9STF.js b/previews/PR135/assets/source_methods_clipping_cut.md.DC5HX6wc.js similarity index 99% rename from previews/PR135/assets/source_methods_clipping_cut.md.DyYI9STF.js rename to previews/PR135/assets/source_methods_clipping_cut.md.DC5HX6wc.js index baa7505c5..cccdc16ab 100644 --- a/previews/PR135/assets/source_methods_clipping_cut.md.DyYI9STF.js +++ b/previews/PR135/assets/source_methods_clipping_cut.md.DC5HX6wc.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h="/GeometryOps.jl/previews/PR135/assets/mubledz.-VpeHhXX.png",c=JSON.parse('{"title":"Polygon cutting","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/cut.md","filePath":"source/methods/clipping/cut.md","lastUpdated":null}'),t={name:"source/methods/clipping/cut.md"},l=n(`

Polygon cutting

julia
export cut

What is cut?

The cut function cuts a polygon through a line segment. This is inspired by functions such as Matlab's cutpolygon function.

To provide an example, consider the following polygon and line:

julia
import GeoInterface as GI, GeometryOps as GO
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const h="/GeometryOps.jl/previews/PR135/assets/prhmudq.-VpeHhXX.png",c=JSON.parse('{"title":"Polygon cutting","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/cut.md","filePath":"source/methods/clipping/cut.md","lastUpdated":null}'),t={name:"source/methods/clipping/cut.md"},l=n(`

Polygon cutting

julia
export cut

What is cut?

The cut function cuts a polygon through a line segment. This is inspired by functions such as Matlab's cutpolygon function.

To provide an example, consider the following polygon and line:

julia
import GeoInterface as GI, GeometryOps as GO
 using CairoMakie
 using Makie
 
@@ -59,7 +59,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h
 of cut geometry in Vector{Vector{Tuple}} format.
 
 Note: degenerate cases where intersection points are vertices do not work right now. =#
-function _cut(::Type{T}, geom, line, geom_list, intr_list, n_intr_pts; exact) where T

Sort and catagorize the intersection points

julia
    sort!(intr_list, by = x -> geom_list[x].fracs[2])
+function _cut(::Type{T}, geom, line, geom_list, intr_list, n_intr_pts; exact) where T

Sort and categorize the intersection points

julia
    sort!(intr_list, by = x -> geom_list[x].fracs[2])
     _flag_ent_exit!(GI.LineTrait(), line, geom_list; exact)

Add first point to output list

julia
    return_coords = [[geom_list[1].point]]
     cross_backs = [(T(Inf),T(Inf))]
     poly_idx = 1
diff --git a/previews/PR135/assets/source_methods_clipping_cut.md.DyYI9STF.lean.js b/previews/PR135/assets/source_methods_clipping_cut.md.DC5HX6wc.lean.js
similarity index 75%
rename from previews/PR135/assets/source_methods_clipping_cut.md.DyYI9STF.lean.js
rename to previews/PR135/assets/source_methods_clipping_cut.md.DC5HX6wc.lean.js
index 46ad1bc61..e37c4d36d 100644
--- a/previews/PR135/assets/source_methods_clipping_cut.md.DyYI9STF.lean.js
+++ b/previews/PR135/assets/source_methods_clipping_cut.md.DC5HX6wc.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h="/GeometryOps.jl/previews/PR135/assets/mubledz.-VpeHhXX.png",c=JSON.parse('{"title":"Polygon cutting","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/cut.md","filePath":"source/methods/clipping/cut.md","lastUpdated":null}'),t={name:"source/methods/clipping/cut.md"},l=n("",34),p=[l];function k(e,r,E,d,g,y){return a(),i("div",null,p)}const F=s(t,[["render",k]]);export{c as __pageData,F as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const h="/GeometryOps.jl/previews/PR135/assets/prhmudq.-VpeHhXX.png",c=JSON.parse('{"title":"Polygon cutting","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/cut.md","filePath":"source/methods/clipping/cut.md","lastUpdated":null}'),t={name:"source/methods/clipping/cut.md"},l=n("",34),p=[l];function k(e,r,E,d,g,y){return a(),i("div",null,p)}const F=s(t,[["render",k]]);export{c as __pageData,F as default};
diff --git a/previews/PR135/assets/source_methods_clipping_difference.md.CmRUkDo6.js b/previews/PR135/assets/source_methods_clipping_difference.md.BlomfT6l.js
similarity index 98%
rename from previews/PR135/assets/source_methods_clipping_difference.md.CmRUkDo6.js
rename to previews/PR135/assets/source_methods_clipping_difference.md.BlomfT6l.js
index 583def26b..d67a41e7b 100644
--- a/previews/PR135/assets/source_methods_clipping_difference.md.CmRUkDo6.js
+++ b/previews/PR135/assets/source_methods_clipping_difference.md.BlomfT6l.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o=JSON.parse('{"title":"Difference Polygon Clipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/difference.md","filePath":"source/methods/clipping/difference.md","lastUpdated":null}'),l={name:"source/methods/clipping/difference.md"},p=n(`

Difference Polygon Clipping

julia
export difference
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const o=JSON.parse('{"title":"Difference Polygon Clipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/difference.md","filePath":"source/methods/clipping/difference.md","lastUpdated":null}'),l={name:"source/methods/clipping/difference.md"},p=n(`

Difference Polygon Clipping

julia
export difference
 
 
 """
@@ -67,7 +67,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
                 append!(polys, new_polys)
             end
         end
-    end

Remove uneeded collinear points on same edge

julia
    _remove_collinear_points!(polys, remove_idx, poly_a, poly_b)
+    end

Remove unneeded collinear points on same edge

julia
    _remove_collinear_points!(polys, remove_idx, poly_a, poly_b)
     return polys
 end

Helper functions for Differences with Greiner and Hormann Polygon Clipping

julia
#= When marking the crossing status of a delayed crossing, the chain start point is crossing
 when the start point is a entry point and is a bouncing point when the start point is an
@@ -126,7 +126,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
 #= Multipolygon with multipolygon difference - note that all intersection regions between
 sub-polygons of \`multipoly_a\` and sub-polygons of \`multipoly_b\` will be removed from the
 corresponding sub-polygon of \`multipoly_a\`. Unless specified with \`fix_multipoly = nothing\`,
-\`multipolygon_a\` will be validated using the given (defauly is \`UnionIntersectingPolygons()\`)
+\`multipolygon_a\` will be validated using the given (default is \`UnionIntersectingPolygons()\`)
 correction. =#
 function _difference(
     target::TraitTarget{GI.PolygonTrait}, ::Type{T},
@@ -148,7 +148,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
         else
             difference(GI.MultiPolygon(polys), poly_b; target, fix_multipoly)
         end
-        #= One multipoly_a has been completly covered (and thus removed) there is no need to
+        #= One multipoly_a has been completely covered (and thus removed) there is no need to
         continue taking the difference =#
         isempty(polys) && break
     end
diff --git a/previews/PR135/assets/source_methods_clipping_difference.md.CmRUkDo6.lean.js b/previews/PR135/assets/source_methods_clipping_difference.md.BlomfT6l.lean.js
similarity index 73%
rename from previews/PR135/assets/source_methods_clipping_difference.md.CmRUkDo6.lean.js
rename to previews/PR135/assets/source_methods_clipping_difference.md.BlomfT6l.lean.js
index 27c34aee8..7f03a77e9 100644
--- a/previews/PR135/assets/source_methods_clipping_difference.md.CmRUkDo6.lean.js
+++ b/previews/PR135/assets/source_methods_clipping_difference.md.BlomfT6l.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o=JSON.parse('{"title":"Difference Polygon Clipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/difference.md","filePath":"source/methods/clipping/difference.md","lastUpdated":null}'),l={name:"source/methods/clipping/difference.md"},p=n("",22),t=[p];function h(e,k,r,d,g,y){return a(),i("div",null,t)}const F=s(l,[["render",h]]);export{o as __pageData,F as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const o=JSON.parse('{"title":"Difference Polygon Clipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/difference.md","filePath":"source/methods/clipping/difference.md","lastUpdated":null}'),l={name:"source/methods/clipping/difference.md"},p=n("",22),t=[p];function h(e,k,r,d,g,y){return a(),i("div",null,t)}const F=s(l,[["render",h]]);export{o as __pageData,F as default};
diff --git a/previews/PR135/assets/source_methods_clipping_intersection.md.CVEaF8-J.js b/previews/PR135/assets/source_methods_clipping_intersection.md.fOblypzx.js
similarity index 99%
rename from previews/PR135/assets/source_methods_clipping_intersection.md.CVEaF8-J.js
rename to previews/PR135/assets/source_methods_clipping_intersection.md.fOblypzx.js
index aa1edc257..45df9444e 100644
--- a/previews/PR135/assets/source_methods_clipping_intersection.md.CVEaF8-J.js
+++ b/previews/PR135/assets/source_methods_clipping_intersection.md.fOblypzx.js
@@ -1,10 +1,10 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o=JSON.parse('{"title":"Geometry Intersection","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/intersection.md","filePath":"source/methods/clipping/intersection.md","lastUpdated":null}'),t={name:"source/methods/clipping/intersection.md"},h=n(`

Geometry Intersection

julia
export intersection, intersection_points
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const o=JSON.parse('{"title":"Geometry Intersection","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/intersection.md","filePath":"source/methods/clipping/intersection.md","lastUpdated":null}'),t={name:"source/methods/clipping/intersection.md"},h=n(`

Geometry Intersection

julia
export intersection, intersection_points
 
 """
     Enum LineOrientation
 Enum for the orientation of a line with respect to a curve. A line can be
 \`line_cross\` (crossing over the curve), \`line_hinge\` (crossing the endpoint of the curve),
-\`line_over\` (colinear with the curve), or \`line_out\` (not interacting with the curve).
+\`line_over\` (collinear with the curve), or \`line_out\` (not interacting with the curve).
 """
 @enum LineOrientation line_cross=1 line_hinge=2 line_over=3 line_out=4
 
@@ -72,7 +72,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
     remove_idx = falses(length(polys))

If the original polygons had holes, take that into account.

julia
    if GI.nhole(poly_a) != 0 || GI.nhole(poly_b) != 0
         hole_iterator = Iterators.flatten((GI.gethole(poly_a), GI.gethole(poly_b)))
         _add_holes_to_polys!(T, polys, hole_iterator, remove_idx; exact)
-    end

Remove uneeded collinear points on same edge

julia
    _remove_collinear_points!(polys, remove_idx, poly_a, poly_b)
+    end

Remove unneeded collinear points on same edge

julia
    _remove_collinear_points!(polys, remove_idx, poly_a, poly_b)
     return polys
 end

Helper functions for Intersections with Greiner and Hormann Polygon Clipping

julia
#= When marking the crossing status of a delayed crossing, the chain start point is bouncing
 when the start point is a entry point and is a crossing point when the start point is an
@@ -109,7 +109,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
 end
 
 #= Multipolygon with polygon intersection is equivalent to taking the intersection of the
-poylgon with the multipolygon and thus simply switches the order of operations and calls the
+polygon with the multipolygon and thus simply switches the order of operations and calls the
 above method. =#
 _intersection(
     target::TraitTarget{GI.PolygonTrait}, ::Type{T},
@@ -172,7 +172,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
     _intersection_points(T, GI.trait(geom_a), geom_a, GI.trait(geom_b), geom_b)
 
 
-#= Calculates the list of intersection points between two geometries, inlcuding line
+#= Calculates the list of intersection points between two geometries, including line
 segments, line strings, linear rings, polygons, and multipolygons. =#
 function _intersection_points(::Type{T}, ::GI.AbstractTrait, a, ::GI.AbstractTrait, b; exact = _True()) where T

Initialize an empty list of points

julia
    result = Tuple{T, T}[]

Check if the geometries extents even overlap

julia
    Extents.intersects(GI.extent(a), GI.extent(b)) || return result

Create a list of edges from the two input geometries

julia
    edges_a, edges_b = map(sort!  to_edges, (a, b))

Loop over pairs of edges and add any unique intersection points to results

julia
    for a_edge in edges_a, b_edge in edges_b
         line_orient, intr1, intr2 = _intersection_point(T, a_edge, b_edge; exact)
@@ -327,7 +327,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
 
 #= If lines defined by (a1, a2) and (b1, b2) meet at one point that is not an endpoint of
 either segment, they form a crossing intersection with a singular intersection point. That
-point is caculated by finding the fractional distance along each segment the point occurs
+point is calculated by finding the fractional distance along each segment the point occurs
 at (α, β). If the point is too close to an endpoint to be distinct, the point shares a value
 with the endpoint, but with a non-zero and non-one fractional value. If the intersection
 point calculated is outside of the envelope of the two segments due to floating point error,
@@ -342,9 +342,9 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
     β = _clamped_frac(Δbax * Δay - Δbay * Δax, a_cross_b, eps(T))
 
     #= Intersection will be where a1 + α * Δa = b1 + β * Δb. However, due to floating point
-    innacurracies, α and β calculations may yeild different intersection points. Average
+    inaccuracies, α and β calculations may yield different intersection points. Average
     both points together to minimize difference from real value, as long as segment isn't
-    vertical or horizontal as this will almost certianly lead to the point being outside the
+    vertical or horizontal as this will almost certainly lead to the point being outside the
     envelope due to floating point error. Also note that floating point limitations could
     make intersection be endpoint if α≈0 or α≈1.=#
     x = if Δax == 0
diff --git a/previews/PR135/assets/source_methods_clipping_intersection.md.CVEaF8-J.lean.js b/previews/PR135/assets/source_methods_clipping_intersection.md.fOblypzx.lean.js
similarity index 73%
rename from previews/PR135/assets/source_methods_clipping_intersection.md.CVEaF8-J.lean.js
rename to previews/PR135/assets/source_methods_clipping_intersection.md.fOblypzx.lean.js
index 6ed6cbbe3..73e2bd388 100644
--- a/previews/PR135/assets/source_methods_clipping_intersection.md.CVEaF8-J.lean.js
+++ b/previews/PR135/assets/source_methods_clipping_intersection.md.fOblypzx.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o=JSON.parse('{"title":"Geometry Intersection","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/intersection.md","filePath":"source/methods/clipping/intersection.md","lastUpdated":null}'),t={name:"source/methods/clipping/intersection.md"},h=n("",80),l=[h];function p(k,e,r,E,d,g){return a(),i("div",null,l)}const c=s(t,[["render",p]]);export{o as __pageData,c as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const o=JSON.parse('{"title":"Geometry Intersection","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/intersection.md","filePath":"source/methods/clipping/intersection.md","lastUpdated":null}'),t={name:"source/methods/clipping/intersection.md"},h=n("",80),l=[h];function p(k,e,r,E,d,g){return a(),i("div",null,l)}const c=s(t,[["render",p]]);export{o as __pageData,c as default};
diff --git a/previews/PR135/assets/source_methods_clipping_predicates.md.DvipA0zH.js b/previews/PR135/assets/source_methods_clipping_predicates.md.DUY6Mg1n.js
similarity index 99%
rename from previews/PR135/assets/source_methods_clipping_predicates.md.DvipA0zH.js
rename to previews/PR135/assets/source_methods_clipping_predicates.md.DUY6Mg1n.js
index 489fdfd9b..30309f6f3 100644
--- a/previews/PR135/assets/source_methods_clipping_predicates.md.DvipA0zH.js
+++ b/previews/PR135/assets/source_methods_clipping_predicates.md.DUY6Mg1n.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o=JSON.parse('{"title":"If we want to inject adaptivity, we would do something like:","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/predicates.md","filePath":"source/methods/clipping/predicates.md","lastUpdated":null}'),t={name:"source/methods/clipping/predicates.md"},h=n(`
julia
module Predicates
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const o=JSON.parse('{"title":"If we want to inject adaptivity, we would do something like:","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/predicates.md","filePath":"source/methods/clipping/predicates.md","lastUpdated":null}'),t={name:"source/methods/clipping/predicates.md"},h=n(`
julia
module Predicates
     using ExactPredicates, ExactPredicates.Codegen
     import ExactPredicates: ext
     import ExactPredicates.Codegen: group!, @genpredicate
diff --git a/previews/PR135/assets/source_methods_clipping_predicates.md.DvipA0zH.lean.js b/previews/PR135/assets/source_methods_clipping_predicates.md.DUY6Mg1n.lean.js
similarity index 75%
rename from previews/PR135/assets/source_methods_clipping_predicates.md.DvipA0zH.lean.js
rename to previews/PR135/assets/source_methods_clipping_predicates.md.DUY6Mg1n.lean.js
index 8110a5649..3bd31d49c 100644
--- a/previews/PR135/assets/source_methods_clipping_predicates.md.DvipA0zH.lean.js
+++ b/previews/PR135/assets/source_methods_clipping_predicates.md.DUY6Mg1n.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o=JSON.parse('{"title":"If we want to inject adaptivity, we would do something like:","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/predicates.md","filePath":"source/methods/clipping/predicates.md","lastUpdated":null}'),t={name:"source/methods/clipping/predicates.md"},h=n("",13),e=[h];function p(l,k,r,d,E,c){return a(),i("div",null,e)}const y=s(t,[["render",p]]);export{o as __pageData,y as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const o=JSON.parse('{"title":"If we want to inject adaptivity, we would do something like:","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/predicates.md","filePath":"source/methods/clipping/predicates.md","lastUpdated":null}'),t={name:"source/methods/clipping/predicates.md"},h=n("",13),e=[h];function p(l,k,r,d,E,c){return a(),i("div",null,e)}const y=s(t,[["render",p]]);export{o as __pageData,y as default};
diff --git a/previews/PR135/assets/source_methods_clipping_union.md.DCiyvI5u.js b/previews/PR135/assets/source_methods_clipping_union.md.BUlTcf5A.js
similarity index 98%
rename from previews/PR135/assets/source_methods_clipping_union.md.DCiyvI5u.js
rename to previews/PR135/assets/source_methods_clipping_union.md.BUlTcf5A.js
index 8340da0ab..ec131b2de 100644
--- a/previews/PR135/assets/source_methods_clipping_union.md.DCiyvI5u.js
+++ b/previews/PR135/assets/source_methods_clipping_union.md.BUlTcf5A.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o=JSON.parse('{"title":"Union Polygon Clipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/union.md","filePath":"source/methods/clipping/union.md","lastUpdated":null}'),l={name:"source/methods/clipping/union.md"},h=n(`

Union Polygon Clipping

julia
export union
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const o=JSON.parse('{"title":"Union Polygon Clipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/union.md","filePath":"source/methods/clipping/union.md","lastUpdated":null}'),l={name:"source/methods/clipping/union.md"},h=n(`

Union Polygon Clipping

julia
export union
 
 """
     union(geom_a, geom_b, [::Type{T}]; target::Type, fix_multipoly = UnionIntersectingPolygons())
@@ -68,7 +68,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
         keepat!(polys, 1)
     end

Add in holes

julia
    if GI.nhole(poly_a) != 0 || GI.nhole(poly_b) != 0
         _add_union_holes!(polys, a_in_b, b_in_a, poly_a, poly_b; exact)
-    end

Remove uneeded collinear points on same edge

julia
    _remove_collinear_points!(polys, [false], poly_a, poly_b)
+    end

Remove unneeded collinear points on same edge

julia
    _remove_collinear_points!(polys, [false], poly_a, poly_b)
     return polys
 end

Helper functions for Unions with Greiner and Hormann Polygon Clipping

julia
#= When marking the crossing status of a delayed crossing, the chain start point is crossing
 when the start point is a entry point and is a bouncing point when the start point is an
@@ -139,7 +139,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
         in_ih, on_ih, out_ih = _line_polygon_interactions(ext_int_ring, poly_ih; exact, closed_line = true)
         if in_ih  # at least part of interior polygon exterior is within the ith hole
             if !on_ih && !out_ih
-                #= interior polygon is completly within the ith hole - polygons aren't
+                #= interior polygon is completely within the ith hole - polygons aren't
                 touching and do not actually form a union =#
                 polys[1] = tuples(interior_poly)
                 push!(polys, tuples(exterior_poly))
@@ -210,7 +210,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
     return polys
 end
 
-#= Multipolygon with polygon union is equivalent to taking the union of the poylgon with the
+#= Multipolygon with polygon union is equivalent to taking the union of the polygon with the
 multipolygon and thus simply switches the order of operations and calls the above method. =#
 _union(
     target::TraitTarget{GI.PolygonTrait}, ::Type{T},
diff --git a/previews/PR135/assets/source_methods_clipping_union.md.DCiyvI5u.lean.js b/previews/PR135/assets/source_methods_clipping_union.md.BUlTcf5A.lean.js
similarity index 72%
rename from previews/PR135/assets/source_methods_clipping_union.md.DCiyvI5u.lean.js
rename to previews/PR135/assets/source_methods_clipping_union.md.BUlTcf5A.lean.js
index 92edda210..59a7b70d9 100644
--- a/previews/PR135/assets/source_methods_clipping_union.md.DCiyvI5u.lean.js
+++ b/previews/PR135/assets/source_methods_clipping_union.md.BUlTcf5A.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o=JSON.parse('{"title":"Union Polygon Clipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/union.md","filePath":"source/methods/clipping/union.md","lastUpdated":null}'),l={name:"source/methods/clipping/union.md"},h=n("",28),p=[h];function t(k,e,r,E,g,y){return a(),i("div",null,p)}const F=s(l,[["render",t]]);export{o as __pageData,F as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const o=JSON.parse('{"title":"Union Polygon Clipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/clipping/union.md","filePath":"source/methods/clipping/union.md","lastUpdated":null}'),l={name:"source/methods/clipping/union.md"},h=n("",28),p=[h];function t(k,e,r,E,g,y){return a(),i("div",null,p)}const F=s(l,[["render",t]]);export{o as __pageData,F as default};
diff --git a/previews/PR135/assets/source_methods_convex_hull.md.C926w3uT.js b/previews/PR135/assets/source_methods_convex_hull.md.C926w3uT.js
new file mode 100644
index 000000000..19ee37e36
--- /dev/null
+++ b/previews/PR135/assets/source_methods_convex_hull.md.C926w3uT.js
@@ -0,0 +1,57 @@
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const l="/GeometryOps.jl/previews/PR135/assets/briiybs.Cy4gx45x.png",t="/GeometryOps.jl/previews/PR135/assets/weygerj.mCtKcWOr.png",h="/GeometryOps.jl/previews/PR135/assets/fntoqls.y5I2w7nz.png",F=JSON.parse('{"title":"Convex hull","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/convex_hull.md","filePath":"source/methods/convex_hull.md","lastUpdated":null}'),e={name:"source/methods/convex_hull.md"},p=n(`

Convex hull

The convex hull of a set of points is the smallest convex polygon that contains all the points.

GeometryOps.jl provides a number of methods for computing the convex hull of a set of points, usually linked to other Julia packages.

For now, we expose one algorithm, MonotoneChainMethod, which uses the DelaunayTriangulation.jl package. The GEOS() interface also supports convex hulls.

Future work could include other algorithms, such as Quickhull.jl, or similar, via package extensions.

Example

Simple hull

julia
import GeometryOps as GO, GeoInterface as GI
+using CairoMakie # to plot
+
+points = randn(GO.Point2f, 100)
+f, a, p = plot(points; label = "Points")
+hull_poly = GO.convex_hull(points)
+lines!(a, hull_poly; label = "Convex hull", color = Makie.wong_colors()[2])
+axislegend(a)
+f

Convex hull of the USA

julia
import GeometryOps as GO, GeoInterface as GI
+using CairoMakie # to plot
+using NaturalEarth # for data
+
+all_adm0 = naturalearth("admin_0_countries", 110)
+usa = all_adm0.geometry[findfirst(==("USA"), all_adm0.ADM0_A3)]
+f, a, p = lines(usa)
+lines!(a, GO.convex_hull(usa); color = Makie.wong_colors()[2])
+f

Investigating the winding order

The winding order of the monotone chain method is counterclockwise, while the winding order of the GEOS method is clockwise.

GeometryOps' convexity detection says that the GEOS hull is convex, while the monotone chain method hull is not. However, they are both going over the same points (we checked), it's just that the winding order is different.

In reality, both sets are convex, but we need to fix the GeometryOps convexity detector (isconcave)!

We may also decide at a later date to change the returned winding order of the polygon, but most algorithms are robust to that, and you can always fix it...

julia
import GeoInterface as GI, GeometryOps as GO, LibGEOS as LG
+using CairoMakie # to plot
+
+points = rand(Point2{Float64}, 100)
+go_hull = GO.convex_hull(GO.MonotoneChainMethod(), points)
+lg_hull = GO.convex_hull(GO.GEOS(), points)
+
+fig = Figure()
+a1, p1 = lines(fig[1, 1], go_hull; color = 1:GI.npoint(go_hull), axis = (; title = "MonotoneChainMethod()"))
+a2, p2 = lines(fig[2, 1], lg_hull; color = 1:GI.npoint(lg_hull), axis = (; title = "GEOS()"))
+cb = Colorbar(fig[1:2, 2], p1; label = "Vertex number")
+fig

Implementation

julia
"""
+    convex_hull([method], geometries)
+
+Compute the convex hull of the points in \`geometries\`.
+Returns a \`GI.Polygon\` representing the convex hull.
+
+Note that the polygon returned is wound counterclockwise
+as in the Simple Features standard by default.  If you
+choose GEOS, the winding order will be inverted.
+
+!!! warning
+    This interface only computes the 2-dimensional convex hull!
+
+    For higher dimensional hulls, use the relevant package (Qhull.jl, Quickhull.jl, or similar).
+"""
+function convex_hull end
+
+"""
+    MonotoneChainMethod()
+
+This is an algorithm for the \`convex_hull\` function.
+
+Uses [\`DelaunayTriangulation.jl\`](https://github.com/JuliaGeometry/DelaunayTriangulation.jl) to compute the convex hull.
+This is a pure Julia algorithm which provides an optimal Delaunay triangulation.
+
+See also \`convex_hull\`
+"""
+struct MonotoneChainMethod end

GrahamScanMethod, etc. can be implemented in GO as well, if someone wants to. If we add an extension on Quickhull.jl, then that would be another algorithm.

julia
convex_hull(geometries) = convex_hull(MonotoneChainMethod(), geometries)

TODO: have this respect the CRS by pulling it out of geometries.

julia
function convex_hull(::MonotoneChainMethod, geometries)

Extract all points as tuples. We have to collect and allocate here, because DelaunayTriangulation only accepts vectors of point-like geoms.

Cleanest would be to use the iterable from GO.flatten directly, but that would require us to implement the convex hull algorithm directly.

TODO: create a specialized method that extracts only the information required, GeometryBasics points can be passed through directly.

julia
    points = collect(flatten(tuples, GI.PointTrait, geometries))

Compute the convex hull using DelTri (shorthand for DelaunayTriangulation.jl).

julia
    hull = DelaunayTriangulation.convex_hull(points)

Convert the result to a GI.Polygon and return it. View would be more efficient here, but re-allocating is cleaner.

julia
    point_vec = DelaunayTriangulation.get_points(hull)[DelaunayTriangulation.get_vertices(hull)]
+    return GI.Polygon([GI.LinearRing(point_vec)])
+end

This page was generated using Literate.jl.

`,35),k=[p];function r(o,d,E,g,y,c){return a(),i("div",null,k)}const C=s(e,[["render",r]]);export{F as __pageData,C as default}; diff --git a/previews/PR135/assets/source_methods_convex_hull.md.C926w3uT.lean.js b/previews/PR135/assets/source_methods_convex_hull.md.C926w3uT.lean.js new file mode 100644 index 000000000..44a59c366 --- /dev/null +++ b/previews/PR135/assets/source_methods_convex_hull.md.C926w3uT.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const l="/GeometryOps.jl/previews/PR135/assets/briiybs.Cy4gx45x.png",t="/GeometryOps.jl/previews/PR135/assets/weygerj.mCtKcWOr.png",h="/GeometryOps.jl/previews/PR135/assets/fntoqls.y5I2w7nz.png",F=JSON.parse('{"title":"Convex hull","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/convex_hull.md","filePath":"source/methods/convex_hull.md","lastUpdated":null}'),e={name:"source/methods/convex_hull.md"},p=n("",35),k=[p];function r(o,d,E,g,y,c){return a(),i("div",null,k)}const C=s(e,[["render",r]]);export{F as __pageData,C as default}; diff --git a/previews/PR135/assets/source_methods_distance.md.CGbMIn6Z.js b/previews/PR135/assets/source_methods_distance.md.BNGMDaam.js similarity index 99% rename from previews/PR135/assets/source_methods_distance.md.CGbMIn6Z.js rename to previews/PR135/assets/source_methods_distance.md.BNGMDaam.js index 30a3785be..fb537d0d8 100644 --- a/previews/PR135/assets/source_methods_distance.md.CGbMIn6Z.js +++ b/previews/PR135/assets/source_methods_distance.md.BNGMDaam.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h="/GeometryOps.jl/previews/PR135/assets/psixllp.DiwGEg2f.png",t="/GeometryOps.jl/previews/PR135/assets/nnfjmam.DuBHk1fh.png",c=JSON.parse('{"title":"Distance and signed distance","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/distance.md","filePath":"source/methods/distance.md","lastUpdated":null}'),k={name:"source/methods/distance.md"},p=n(`

Distance and signed distance

julia
export distance, signed_distance

What is distance? What is signed distance?

Distance is the distance of a point to another geometry. This is always a positive number. If a point is inside of geometry, so on a curve or inside of a polygon, the distance will be zero. Signed distance is mainly used for polygons and multipolygons. If a point is outside of a geometry, signed distance has the same value as distance. However, points within the geometry have a negative distance representing the distance of a point to the closest boundary. Therefore, for all "non-filled" geometries, like curves, the distance will either be postitive or 0.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const h="/GeometryOps.jl/previews/PR135/assets/pthvojo.DiwGEg2f.png",t="/GeometryOps.jl/previews/PR135/assets/ugotupt.DuBHk1fh.png",c=JSON.parse('{"title":"Distance and signed distance","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/distance.md","filePath":"source/methods/distance.md","lastUpdated":null}'),k={name:"source/methods/distance.md"},p=n(`

Distance and signed distance

julia
export distance, signed_distance

What is distance? What is signed distance?

Distance is the distance of a point to another geometry. This is always a positive number. If a point is inside of geometry, so on a curve or inside of a polygon, the distance will be zero. Signed distance is mainly used for polygons and multipolygons. If a point is outside of a geometry, signed distance has the same value as distance. However, points within the geometry have a negative distance representing the distance of a point to the closest boundary. Therefore, for all "non-filled" geometries, like curves, the distance will either be positive or 0.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/previews/PR135/assets/source_methods_distance.md.CGbMIn6Z.lean.js b/previews/PR135/assets/source_methods_distance.md.BNGMDaam.lean.js
similarity index 67%
rename from previews/PR135/assets/source_methods_distance.md.CGbMIn6Z.lean.js
rename to previews/PR135/assets/source_methods_distance.md.BNGMDaam.lean.js
index ac0c0773e..e91a42e5e 100644
--- a/previews/PR135/assets/source_methods_distance.md.CGbMIn6Z.lean.js
+++ b/previews/PR135/assets/source_methods_distance.md.BNGMDaam.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h="/GeometryOps.jl/previews/PR135/assets/psixllp.DiwGEg2f.png",t="/GeometryOps.jl/previews/PR135/assets/nnfjmam.DuBHk1fh.png",c=JSON.parse('{"title":"Distance and signed distance","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/distance.md","filePath":"source/methods/distance.md","lastUpdated":null}'),k={name:"source/methods/distance.md"},p=n("",54),l=[p];function e(d,E,r,g,y,F){return a(),i("div",null,l)}const C=s(k,[["render",e]]);export{c as __pageData,C as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const h="/GeometryOps.jl/previews/PR135/assets/pthvojo.DiwGEg2f.png",t="/GeometryOps.jl/previews/PR135/assets/ugotupt.DuBHk1fh.png",c=JSON.parse('{"title":"Distance and signed distance","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/distance.md","filePath":"source/methods/distance.md","lastUpdated":null}'),k={name:"source/methods/distance.md"},p=n("",54),l=[p];function e(d,E,r,g,y,F){return a(),i("div",null,l)}const C=s(k,[["render",e]]);export{c as __pageData,C as default};
diff --git a/previews/PR135/assets/source_methods_equals.md.cKbLrMmC.js b/previews/PR135/assets/source_methods_equals.md.CInRsM-y.js
similarity index 98%
rename from previews/PR135/assets/source_methods_equals.md.cKbLrMmC.js
rename to previews/PR135/assets/source_methods_equals.md.CInRsM-y.js
index 4e77f1912..c66a57539 100644
--- a/previews/PR135/assets/source_methods_equals.md.cKbLrMmC.js
+++ b/previews/PR135/assets/source_methods_equals.md.CInRsM-y.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const l="/GeometryOps.jl/previews/PR135/assets/dtturyx.CgiryX2p.png",y=JSON.parse('{"title":"Equals","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/equals.md","filePath":"source/methods/equals.md","lastUpdated":null}'),t={name:"source/methods/equals.md"},h=n(`

Equals

julia
export equals

What is equals?

The equals function checks if two geometries are equal. They are equal if they share the same set of points and edges to define the same shape.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const l="/GeometryOps.jl/previews/PR135/assets/ftxvlaw.CgiryX2p.png",y=JSON.parse('{"title":"Equals","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/equals.md","filePath":"source/methods/equals.md","lastUpdated":null}'),t={name:"source/methods/equals.md"},h=n(`

Equals

julia
export equals

What is equals?

The equals function checks if two geometries are equal. They are equal if they share the same set of points and edges to define the same shape.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -9,7 +9,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const l
 scatter!(GI.getpoint(l1), color = :blue)
 lines!(GI.getpoint(l2), color = :orange)
 scatter!(GI.getpoint(l2), color = :orange)
-f

We can see that the two lines do not share a commen set of points and edges in the plot, so they are not equal:

julia
GO.equals(l1, l2)  # returns false
false

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that while we need the same set of points and edges, they don't need to be provided in the same order for polygons. For for example, we need the same set points for two multipoints to be equal, but they don't have to be saved in the same order. The winding order also doesn't have to be the same to represent the same geometry. This requires checking every point against every other point in the two geometries we are comparing. Also, some geometries must be "closed" like polygons and linear rings. These will be assumed to be closed, even if they don't have a repeated last point explicity written in the coordinates. Additionally, geometries and multi-geometries can be equal if the multi-geometry only includes that single geometry.

julia
"""
+f

We can see that the two lines do not share a common set of points and edges in the plot, so they are not equal:

julia
GO.equals(l1, l2)  # returns false
false

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that while we need the same set of points and edges, they don't need to be provided in the same order for polygons. For for example, we need the same set points for two multipoints to be equal, but they don't have to be saved in the same order. The winding order also doesn't have to be the same to represent the same geometry. This requires checking every point against every other point in the two geometries we are comparing. Also, some geometries must be "closed" like polygons and linear rings. These will be assumed to be closed, even if they don't have a repeated last point explicitly written in the coordinates. Additionally, geometries and multi-geometries can be equal if the multi-geometry only includes that single geometry.

julia
"""
     equals(geom1, geom2)::Bool
 
 Compare two Geometries return true if they are the same geometry.
@@ -150,7 +150,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const l
     )::Bool
 
 Two lines/linestrings are equal if they share the same set of points going
-along the curve. Note that lines/linestrings aren't closed by defintion.
+along the curve. Note that lines/linestrings aren't closed by definition.
 """
 equals(
     ::Union{GI.LineTrait, GI.LineStringTrait}, l1,
@@ -164,7 +164,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const l
     )::Bool
 
 A line/linestring and a linear ring are equal if they share the same set of
-points going along the curve. Note that lines aren't closed by defintion, but
+points going along the curve. Note that lines aren't closed by definition, but
 rings are, so the line must have a repeated last point to be equal
 """
 equals(
@@ -179,7 +179,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const l
     )::Bool
 
 A linear ring and a line/linestring are equal if they share the same set of
-points going along the curve. Note that lines aren't closed by defintion, but
+points going along the curve. Note that lines aren't closed by definition, but
 rings are, so the line must have a repeated last point to be equal
 """
 equals(
@@ -262,4 +262,4 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const l
         has_match || return false
     end
     return true
-end

This page was generated using Literate.jl.

`,47),p=[h];function e(k,r,d,g,E,F){return a(),i("div",null,p)}const c=s(t,[["render",e]]);export{y as __pageData,c as default}; +end

This page was generated using Literate.jl.

`,47),p=[h];function k(e,r,d,g,E,F){return a(),i("div",null,p)}const c=s(t,[["render",k]]);export{y as __pageData,c as default}; diff --git a/previews/PR135/assets/source_methods_equals.md.cKbLrMmC.lean.js b/previews/PR135/assets/source_methods_equals.md.CInRsM-y.lean.js similarity index 51% rename from previews/PR135/assets/source_methods_equals.md.cKbLrMmC.lean.js rename to previews/PR135/assets/source_methods_equals.md.CInRsM-y.lean.js index b03f74d3f..ee6d9706b 100644 --- a/previews/PR135/assets/source_methods_equals.md.cKbLrMmC.lean.js +++ b/previews/PR135/assets/source_methods_equals.md.CInRsM-y.lean.js @@ -1 +1 @@ -import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const l="/GeometryOps.jl/previews/PR135/assets/dtturyx.CgiryX2p.png",y=JSON.parse('{"title":"Equals","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/equals.md","filePath":"source/methods/equals.md","lastUpdated":null}'),t={name:"source/methods/equals.md"},h=n("",47),p=[h];function e(k,r,d,g,E,F){return a(),i("div",null,p)}const c=s(t,[["render",e]]);export{y as __pageData,c as default}; +import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const l="/GeometryOps.jl/previews/PR135/assets/ftxvlaw.CgiryX2p.png",y=JSON.parse('{"title":"Equals","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/equals.md","filePath":"source/methods/equals.md","lastUpdated":null}'),t={name:"source/methods/equals.md"},h=n("",47),p=[h];function k(e,r,d,g,E,F){return a(),i("div",null,p)}const c=s(t,[["render",k]]);export{y as __pageData,c as default}; diff --git a/previews/PR135/assets/source_methods_geom_relations_contains.md.DzU4Cn9q.js b/previews/PR135/assets/source_methods_geom_relations_contains.md.CT7VUSG_.js similarity index 92% rename from previews/PR135/assets/source_methods_geom_relations_contains.md.DzU4Cn9q.js rename to previews/PR135/assets/source_methods_geom_relations_contains.md.CT7VUSG_.js index e5b37d9eb..a2b3d0d35 100644 --- a/previews/PR135/assets/source_methods_geom_relations_contains.md.DzU4Cn9q.js +++ b/previews/PR135/assets/source_methods_geom_relations_contains.md.CT7VUSG_.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const t="/GeometryOps.jl/previews/PR135/assets/oxrcmhd._0R9BbFk.png",y=JSON.parse('{"title":"Contains","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/contains.md","filePath":"source/methods/geom_relations/contains.md","lastUpdated":null}'),e={name:"source/methods/geom_relations/contains.md"},h=n(`

Contains

julia
export contains

What is contains?

The contains function checks if a given geometry completly contains another geometry, or in other words, that the second geometry is completly within the first. This requires that the two interiors intersect and that the interior and boundary of the second geometry is not in the exterior of the first geometry.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const t="/GeometryOps.jl/previews/PR135/assets/noqiyfz._0R9BbFk.png",y=JSON.parse('{"title":"Contains","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/contains.md","filePath":"source/methods/geom_relations/contains.md","lastUpdated":null}'),e={name:"source/methods/geom_relations/contains.md"},h=n(`

Contains

julia
export contains

What is contains?

The contains function checks if a given geometry completely contains another geometry, or in other words, that the second geometry is completely within the first. This requires that the two interiors intersect and that the interior and boundary of the second geometry is not in the exterior of the first geometry.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/previews/PR135/assets/source_methods_geom_relations_contains.md.DzU4Cn9q.lean.js b/previews/PR135/assets/source_methods_geom_relations_contains.md.CT7VUSG_.lean.js
similarity index 76%
rename from previews/PR135/assets/source_methods_geom_relations_contains.md.DzU4Cn9q.lean.js
rename to previews/PR135/assets/source_methods_geom_relations_contains.md.CT7VUSG_.lean.js
index 79f92752c..2a159593f 100644
--- a/previews/PR135/assets/source_methods_geom_relations_contains.md.DzU4Cn9q.lean.js
+++ b/previews/PR135/assets/source_methods_geom_relations_contains.md.CT7VUSG_.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const t="/GeometryOps.jl/previews/PR135/assets/oxrcmhd._0R9BbFk.png",y=JSON.parse('{"title":"Contains","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/contains.md","filePath":"source/methods/geom_relations/contains.md","lastUpdated":null}'),e={name:"source/methods/geom_relations/contains.md"},h=n("",18),l=[h];function p(k,r,o,d,g,E){return a(),i("div",null,l)}const F=s(e,[["render",p]]);export{y as __pageData,F as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const t="/GeometryOps.jl/previews/PR135/assets/noqiyfz._0R9BbFk.png",y=JSON.parse('{"title":"Contains","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/contains.md","filePath":"source/methods/geom_relations/contains.md","lastUpdated":null}'),e={name:"source/methods/geom_relations/contains.md"},h=n("",18),l=[h];function p(k,r,o,d,g,E){return a(),i("div",null,l)}const F=s(e,[["render",p]]);export{y as __pageData,F as default};
diff --git a/previews/PR135/assets/source_methods_geom_relations_coveredby.md.BAWIQHTY.js b/previews/PR135/assets/source_methods_geom_relations_coveredby.md.t8U8nVnZ.js
similarity index 99%
rename from previews/PR135/assets/source_methods_geom_relations_coveredby.md.BAWIQHTY.js
rename to previews/PR135/assets/source_methods_geom_relations_coveredby.md.t8U8nVnZ.js
index d4794f3c1..97f908e30 100644
--- a/previews/PR135/assets/source_methods_geom_relations_coveredby.md.BAWIQHTY.js
+++ b/previews/PR135/assets/source_methods_geom_relations_coveredby.md.t8U8nVnZ.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const e="/GeometryOps.jl/previews/PR135/assets/awrqznt.DC3TvBOO.png",c=JSON.parse('{"title":"CoveredBy","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/coveredby.md","filePath":"source/methods/geom_relations/coveredby.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/coveredby.md"},h=n(`

CoveredBy

julia
export coveredby

What is coveredby?

The coveredby function checks if one geometry is covered by another geometry. This is an extension of within that does not require the interiors of the two geometries to intersect, but still does require that the interior and boundary of the first geometry isn't outside of the second geometry.

To provide an example, consider this point and line:

julia
import GeometryOps as GO
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const e="/GeometryOps.jl/previews/PR135/assets/nlfztmc.DC3TvBOO.png",c=JSON.parse('{"title":"CoveredBy","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/coveredby.md","filePath":"source/methods/geom_relations/coveredby.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/coveredby.md"},h=n(`

CoveredBy

julia
export coveredby

What is coveredby?

The coveredby function checks if one geometry is covered by another geometry. This is an extension of within that does not require the interiors of the two geometries to intersect, but still does require that the interior and boundary of the first geometry isn't outside of the second geometry.

To provide an example, consider this point and line:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -91,7 +91,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const e
 )
 
 #= Linestring is coveredby a polygon if all interior and boundary points of the
-line are in the polygon interior or on its edges, inlcuding hole edges. =#
+line are in the polygon interior or on its edges, including hole edges. =#
 _coveredby(
     ::Union{GI.LineTrait, GI.LineStringTrait}, g1,
     ::GI.PolygonTrait, g2,
@@ -130,7 +130,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const e
 )
 
 #= Linearring is coveredby a polygon if all vertices and edges of the ring are
-in the polygon interior or on the polygon edges, inlcuding hole edges. =#
+in the polygon interior or on the polygon edges, including hole edges. =#
 _coveredby(
     ::GI.LinearRingTrait, g1,
     ::GI.PolygonTrait, g2,
diff --git a/previews/PR135/assets/source_methods_geom_relations_coveredby.md.BAWIQHTY.lean.js b/previews/PR135/assets/source_methods_geom_relations_coveredby.md.t8U8nVnZ.lean.js
similarity index 76%
rename from previews/PR135/assets/source_methods_geom_relations_coveredby.md.BAWIQHTY.lean.js
rename to previews/PR135/assets/source_methods_geom_relations_coveredby.md.t8U8nVnZ.lean.js
index 5229525f4..a3a7ccef3 100644
--- a/previews/PR135/assets/source_methods_geom_relations_coveredby.md.BAWIQHTY.lean.js
+++ b/previews/PR135/assets/source_methods_geom_relations_coveredby.md.t8U8nVnZ.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const e="/GeometryOps.jl/previews/PR135/assets/awrqznt.DC3TvBOO.png",c=JSON.parse('{"title":"CoveredBy","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/coveredby.md","filePath":"source/methods/geom_relations/coveredby.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/coveredby.md"},h=n("",45),t=[h];function p(k,r,E,d,g,o){return a(),i("div",null,t)}const F=s(l,[["render",p]]);export{c as __pageData,F as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const e="/GeometryOps.jl/previews/PR135/assets/nlfztmc.DC3TvBOO.png",c=JSON.parse('{"title":"CoveredBy","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/coveredby.md","filePath":"source/methods/geom_relations/coveredby.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/coveredby.md"},h=n("",45),t=[h];function p(k,r,E,d,g,o){return a(),i("div",null,t)}const F=s(l,[["render",p]]);export{c as __pageData,F as default};
diff --git a/previews/PR135/assets/source_methods_geom_relations_covers.md.BWa6PpTv.js b/previews/PR135/assets/source_methods_geom_relations_covers.md.DG_3zZRD.js
similarity index 90%
rename from previews/PR135/assets/source_methods_geom_relations_covers.md.BWa6PpTv.js
rename to previews/PR135/assets/source_methods_geom_relations_covers.md.DG_3zZRD.js
index ebae03c84..76d867ac9 100644
--- a/previews/PR135/assets/source_methods_geom_relations_covers.md.BWa6PpTv.js
+++ b/previews/PR135/assets/source_methods_geom_relations_covers.md.DG_3zZRD.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as e}from"./chunks/framework.k41oUgTf.js";const n="/GeometryOps.jl/previews/PR135/assets/awrqznt.DC3TvBOO.png",y=JSON.parse('{"title":"Covers","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/covers.md","filePath":"source/methods/geom_relations/covers.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/covers.md"},p=e(`

Covers

julia
export covers

What is covers?

The covers function checks if a given geometry completly covers another geometry. For this to be true, the "contained" geometry's interior and boundaries must be covered by the "covering" geometry's interior and boundaries. The interiors do not need to overlap.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as s,c as i,o as a,a7 as e}from"./chunks/framework.CONf0Rze.js";const n="/GeometryOps.jl/previews/PR135/assets/nlfztmc.DC3TvBOO.png",y=JSON.parse('{"title":"Covers","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/covers.md","filePath":"source/methods/geom_relations/covers.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/covers.md"},p=e(`

Covers

julia
export covers

What is covers?

The covers function checks if a given geometry completely covers another geometry. For this to be true, the "contained" geometry's interior and boundaries must be covered by the "covering" geometry's interior and boundaries. The interiors do not need to overlap.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/previews/PR135/assets/source_methods_geom_relations_covers.md.BWa6PpTv.lean.js b/previews/PR135/assets/source_methods_geom_relations_covers.md.DG_3zZRD.lean.js
similarity index 76%
rename from previews/PR135/assets/source_methods_geom_relations_covers.md.BWa6PpTv.lean.js
rename to previews/PR135/assets/source_methods_geom_relations_covers.md.DG_3zZRD.lean.js
index 24fbaa85d..7dfeaa01a 100644
--- a/previews/PR135/assets/source_methods_geom_relations_covers.md.BWa6PpTv.lean.js
+++ b/previews/PR135/assets/source_methods_geom_relations_covers.md.DG_3zZRD.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as e}from"./chunks/framework.k41oUgTf.js";const n="/GeometryOps.jl/previews/PR135/assets/awrqznt.DC3TvBOO.png",y=JSON.parse('{"title":"Covers","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/covers.md","filePath":"source/methods/geom_relations/covers.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/covers.md"},p=e("",17),l=[p];function h(k,r,o,d,c,g){return a(),i("div",null,l)}const u=s(t,[["render",h]]);export{y as __pageData,u as default};
+import{_ as s,c as i,o as a,a7 as e}from"./chunks/framework.CONf0Rze.js";const n="/GeometryOps.jl/previews/PR135/assets/nlfztmc.DC3TvBOO.png",y=JSON.parse('{"title":"Covers","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/covers.md","filePath":"source/methods/geom_relations/covers.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/covers.md"},p=e("",17),l=[p];function h(k,r,o,d,c,g){return a(),i("div",null,l)}const u=s(t,[["render",h]]);export{y as __pageData,u as default};
diff --git a/previews/PR135/assets/source_methods_geom_relations_crosses.md.CrWCei4a.js b/previews/PR135/assets/source_methods_geom_relations_crosses.md.5YXBFQwW.js
similarity index 99%
rename from previews/PR135/assets/source_methods_geom_relations_crosses.md.CrWCei4a.js
rename to previews/PR135/assets/source_methods_geom_relations_crosses.md.5YXBFQwW.js
index a55e8d512..a0f24c06f 100644
--- a/previews/PR135/assets/source_methods_geom_relations_crosses.md.CrWCei4a.js
+++ b/previews/PR135/assets/source_methods_geom_relations_crosses.md.5YXBFQwW.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const y=JSON.parse('{"title":"Crossing checks","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/crosses.md","filePath":"source/methods/geom_relations/crosses.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/crosses.md"},p=n(`

Crossing checks

julia
"""
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const y=JSON.parse('{"title":"Crossing checks","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/crosses.md","filePath":"source/methods/geom_relations/crosses.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/crosses.md"},p=n(`

Crossing checks

julia
"""
      crosses(geom1, geom2)::Bool
 
 Return \`true\` if the intersection results in a geometry whose dimension is one less than
diff --git a/previews/PR135/assets/source_methods_geom_relations_crosses.md.CrWCei4a.lean.js b/previews/PR135/assets/source_methods_geom_relations_crosses.md.5YXBFQwW.lean.js
similarity index 73%
rename from previews/PR135/assets/source_methods_geom_relations_crosses.md.CrWCei4a.lean.js
rename to previews/PR135/assets/source_methods_geom_relations_crosses.md.5YXBFQwW.lean.js
index 260a801cd..3ee2378cc 100644
--- a/previews/PR135/assets/source_methods_geom_relations_crosses.md.CrWCei4a.lean.js
+++ b/previews/PR135/assets/source_methods_geom_relations_crosses.md.5YXBFQwW.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const y=JSON.parse('{"title":"Crossing checks","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/crosses.md","filePath":"source/methods/geom_relations/crosses.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/crosses.md"},p=n("",10),h=[p];function t(k,e,r,E,g,d){return a(),i("div",null,h)}const o=s(l,[["render",t]]);export{y as __pageData,o as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const y=JSON.parse('{"title":"Crossing checks","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/crosses.md","filePath":"source/methods/geom_relations/crosses.md","lastUpdated":null}'),l={name:"source/methods/geom_relations/crosses.md"},p=n("",10),h=[p];function t(k,e,r,E,g,d){return a(),i("div",null,h)}const o=s(l,[["render",t]]);export{y as __pageData,o as default};
diff --git a/previews/PR135/assets/source_methods_geom_relations_disjoint.md.CH3IJNyL.js b/previews/PR135/assets/source_methods_geom_relations_disjoint.md.Cp4OC057.js
similarity index 99%
rename from previews/PR135/assets/source_methods_geom_relations_disjoint.md.CH3IJNyL.js
rename to previews/PR135/assets/source_methods_geom_relations_disjoint.md.Cp4OC057.js
index e296a77d1..e3a14330c 100644
--- a/previews/PR135/assets/source_methods_geom_relations_disjoint.md.CH3IJNyL.js
+++ b/previews/PR135/assets/source_methods_geom_relations_disjoint.md.Cp4OC057.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const t="/GeometryOps.jl/previews/PR135/assets/rlpsaah.C3SxJ3x-.png",c=JSON.parse('{"title":"Disjoint","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/disjoint.md","filePath":"source/methods/geom_relations/disjoint.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/disjoint.md"},l=n(`

Disjoint

julia
export disjoint

What is disjoint?

The disjoint function checks if one geometry is outside of another geometry, without sharing any boundaries or interiors.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const t="/GeometryOps.jl/previews/PR135/assets/aithltv.C3SxJ3x-.png",c=JSON.parse('{"title":"Disjoint","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/disjoint.md","filePath":"source/methods/geom_relations/disjoint.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/disjoint.md"},l=n(`

Disjoint

julia
export disjoint

What is disjoint?

The disjoint function checks if one geometry is outside of another geometry, without sharing any boundaries or interiors.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -110,7 +110,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const t
 )
 
 #= Geometry is disjoint from a linestring if the line's interior and boundary
-points don't intersect with the geometrie's interior and boundary points. =#
+points don't intersect with the geometry's interior and boundary points. =#
 _disjoint(
     trait1::Union{GI.LinearRingTrait, GI.PolygonTrait}, g1,
     trait2::Union{GI.LineTrait, GI.LineStringTrait}, g2,
diff --git a/previews/PR135/assets/source_methods_geom_relations_disjoint.md.CH3IJNyL.lean.js b/previews/PR135/assets/source_methods_geom_relations_disjoint.md.Cp4OC057.lean.js
similarity index 76%
rename from previews/PR135/assets/source_methods_geom_relations_disjoint.md.CH3IJNyL.lean.js
rename to previews/PR135/assets/source_methods_geom_relations_disjoint.md.Cp4OC057.lean.js
index 2f291f70e..eb0f1222e 100644
--- a/previews/PR135/assets/source_methods_geom_relations_disjoint.md.CH3IJNyL.lean.js
+++ b/previews/PR135/assets/source_methods_geom_relations_disjoint.md.Cp4OC057.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const t="/GeometryOps.jl/previews/PR135/assets/rlpsaah.C3SxJ3x-.png",c=JSON.parse('{"title":"Disjoint","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/disjoint.md","filePath":"source/methods/geom_relations/disjoint.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/disjoint.md"},l=n("",39),p=[l];function k(e,r,E,g,d,o){return a(),i("div",null,p)}const F=s(h,[["render",k]]);export{c as __pageData,F as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const t="/GeometryOps.jl/previews/PR135/assets/aithltv.C3SxJ3x-.png",c=JSON.parse('{"title":"Disjoint","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/disjoint.md","filePath":"source/methods/geom_relations/disjoint.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/disjoint.md"},l=n("",39),p=[l];function k(e,r,E,g,d,o){return a(),i("div",null,p)}const F=s(h,[["render",k]]);export{c as __pageData,F as default};
diff --git a/previews/PR135/assets/source_methods_geom_relations_geom_geom_processors.md.DeClVOfg.js b/previews/PR135/assets/source_methods_geom_relations_geom_geom_processors.md.B09zbe43.js
similarity index 97%
rename from previews/PR135/assets/source_methods_geom_relations_geom_geom_processors.md.DeClVOfg.js
rename to previews/PR135/assets/source_methods_geom_relations_geom_geom_processors.md.B09zbe43.js
index 37dba43da..56deeaa35 100644
--- a/previews/PR135/assets/source_methods_geom_relations_geom_geom_processors.md.DeClVOfg.js
+++ b/previews/PR135/assets/source_methods_geom_relations_geom_geom_processors.md.B09zbe43.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o=JSON.parse('{"title":"Line-curve interaction","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/geom_geom_processors.md","filePath":"source/methods/geom_relations/geom_geom_processors.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/geom_geom_processors.md"},l=n(`

Line-curve interaction

julia
#= Code is based off of DE-9IM Standards (https://en.wikipedia.org/wiki/DE-9IM)
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const o=JSON.parse('{"title":"Line-curve interaction","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/geom_geom_processors.md","filePath":"source/methods/geom_relations/geom_geom_processors.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/geom_geom_processors.md"},l=n(`

Line-curve interaction

julia
#= Code is based off of DE-9IM Standards (https://en.wikipedia.org/wiki/DE-9IM)
 and attempts a standardized solution for most of the functions.
 =#
 
@@ -36,7 +36,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
 )

Check interaction of geom with polygon's exterior boundary

julia
    ext_val = _point_filled_curve_orientation(point, GI.getexterior(polygon); exact)

If a point is outside, it isn't interacting with any holes

julia
    ext_val == point_out && return out_allow

if a point is on an external boundary, it isn't interacting with any holes

julia
    ext_val == point_on && return on_allow

If geom is within the polygon, need to check interactions with holes

julia
    for hole in GI.gethole(polygon)
         hole_val = _point_filled_curve_orientation(point, hole; exact)

If a point in in a hole, it is outside of the polygon

julia
        hole_val == point_in && return out_allow

If a point in on a hole edge, it is on the edge of the polygon

julia
        hole_val == point_on && return on_allow
     end

Point is within external boundary and on in/on any holes

julia
    return in_allow
-end

Determines if a line meets the given checks with respect to a curve.

If over_allow is true, segments of the line and curve can be co-linear. If cross_allow is true, segments of the line and curve can cross. If on_allow is true, endpoints of either the line or curve can intersect a segment of the other geometry. If cross_allow is true, segments of the line and curve can be disjoint.

If in_require is true, the interiors of the line and curve must meet in at least one point. If on_require is true, the bounday of one of the two geometries can meet the interior or boundary of the other geometry in at least one point. If out_require is true, there must be at least one point of the given line that is exterior of the curve.

If the point is in an "allowed" location and meets all requirments, return true. Else, return false.

If closed_line is true, line is treated as a closed line where the first and last point are connected by a segment. Same with closed_curve.

julia
@inline function _line_curve_process(line, curve;
+end

Determines if a line meets the given checks with respect to a curve.

If over_allow is true, segments of the line and curve can be co-linear. If cross_allow is true, segments of the line and curve can cross. If on_allow is true, endpoints of either the line or curve can intersect a segment of the other geometry. If cross_allow is true, segments of the line and curve can be disjoint.

If in_require is true, the interiors of the line and curve must meet in at least one point. If on_require is true, the boundary of one of the two geometries can meet the interior or boundary of the other geometry in at least one point. If out_require is true, there must be at least one point of the given line that is exterior of the curve.

If the point is in an "allowed" location and meets all requirements, return true. Else, return false.

If closed_line is true, line is treated as a closed line where the first and last point are connected by a segment. Same with closed_curve.

julia
@inline function _line_curve_process(line, curve;
     over_allow, cross_allow, kw...
 )
     skip, returnval = _maybe_skip_disjoint_extents(line, curve;
@@ -53,7 +53,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
     in_require, on_require, out_require,
     closed_line = false, closed_curve = false,
     exact,
-)

Set up requirments

julia
    in_req_met = !in_require
+)

Set up requirements

julia
    in_req_met = !in_require
     on_req_met = !on_require
     out_req_met = !out_require

Determine curve endpoints

julia
    nl = GI.npoint(line)
     nc = GI.npoint(curve)
@@ -68,7 +68,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
         l_end = _tuple_point(GI.getpoint(line, i))
         c_start = _tuple_point(GI.getpoint(curve, closed_curve ? nc : 1))

Loop over each curve segment

julia
        for j in (closed_curve ? 1 : 2):nc
             c_end = _tuple_point(GI.getpoint(curve, j))

Check if line and curve segments meet

julia
            seg_val, intr1, _ = _intersection_point(Float64, (l_start, l_end), (c_start, c_end); exact)

If segments are co-linear

julia
            if seg_val == line_over
-                !over_allow && return false

at least one point in, meets requirments

julia
                in_req_met = true
+                !over_allow && return false

at least one point in, meets requirements

julia
                in_req_met = true
                 point_val = _point_segment_orientation(l_start, c_start, c_end)

If entire segment isn't covered, consider remaining section

julia
                if point_val != point_out
                     i, l_start, break_off = _find_new_seg(i, l_start, l_end, c_start, c_end)
                     break_off && break
@@ -113,7 +113,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
 end
 
 #= If entire segment (le to ls) isn't covered by segment (cs to ce), find remaining section
-part of section outside of cs to ce. If completly covered, increase segment index i. =#
+part of section outside of cs to ce. If completely covered, increase segment index i. =#
 function _find_new_seg(i, ls, le, cs, ce)
     break_off = true
     if _point_segment_orientation(le, cs, ce) != point_out
@@ -141,7 +141,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
         ((le, _tuple_point(GI.getpoint(line, i + 1))), (cs, ce))
     end
     return next_seg
-end

Determines if a line meets the given checks with respect to a polygon.

If in_allow is true, segments of the line can be in the polygon interior. If on_allow is true, segments of the line can be on the polygon's boundary. If out_allow is true, segments of the line can be outside of the polygon.

If in_require is true, the interiors of the line and polygon must meet in at least one point. If on_require is true, the line must have at least one point on the polygon'same boundary. If out_require is true, the line must have at least one point outside of the polygon.

If the point is in an "allowed" location and meets all requirments, return true. Else, return false.

If closed_line is true, line is treated as a closed line where the first and last point are connected by a segment.

julia
@inline function _line_polygon_process(line, polygon; kw...)
+end

Determines if a line meets the given checks with respect to a polygon.

If in_allow is true, segments of the line can be in the polygon interior. If on_allow is true, segments of the line can be on the polygon's boundary. If out_allow is true, segments of the line can be outside of the polygon.

If in_require is true, the interiors of the line and polygon must meet in at least one point. If on_require is true, the line must have at least one point on the polygon'same boundary. If out_require is true, the line must have at least one point outside of the polygon.

If the point is in an "allowed" location and meets all requirements, return true. Else, return false.

If closed_line is true, line is treated as a closed line where the first and last point are connected by a segment.

julia
@inline function _line_polygon_process(line, polygon; kw...)
     skip, returnval = _maybe_skip_disjoint_extents(line, polygon; kw...)
     skip && return returnval
     return _inner_line_polygon_process(line, polygon; kw...)
@@ -175,7 +175,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
             !out_allow && return false
             out_req_met = true
         end
-        if on_hole  # hole bounday is polygon boundary
+        if on_hole  # hole boundary is polygon boundary
             !on_allow && return false
             on_req_met = true
         end
@@ -189,7 +189,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
         in_req_met = true
     end
     return in_req_met && on_req_met && out_req_met
-end

Determines if a polygon meets the given checks with respect to a polygon.

If in_allow is true, the polygon's interiors must intersect. If on_allow is true, the one of the polygon's boundaries must either interact with the other polygon's boundary or interior. If out_allow is true, the first polygon must have interior regions outside of the second polygon.

If in_require is true, the polygon interiors must meet in at least one point. If on_require is true, one of the polygon's must have at least one boundary point in or on the other polygon. If out_require is true, the first polygon must have at least one interior point outside of the second polygon.

If the point is in an "allowed" location and meets all requirments, return true. Else, return false.

julia
@inline function _polygon_polygon_process(poly1, poly2; kw...)
+end

Determines if a polygon meets the given checks with respect to a polygon.

If in_allow is true, the polygon's interiors must intersect. If on_allow is true, the one of the polygon's boundaries must either interact with the other polygon's boundary or interior. If out_allow is true, the first polygon must have interior regions outside of the second polygon.

If in_require is true, the polygon interiors must meet in at least one point. If on_require is true, one of the polygon's must have at least one boundary point in or on the other polygon. If out_require is true, the first polygon must have at least one interior point outside of the second polygon.

If the point is in an "allowed" location and meets all requirements, return true. Else, return false.

julia
@inline function _polygon_polygon_process(poly1, poly2; kw...)
     skip, returnval = _maybe_skip_disjoint_extents(poly1, poly2; kw...)
     skip && return returnval
     return _inner_polygon_polygon_process(poly1, poly2; kw...)
@@ -287,7 +287,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
         !between_endpoints && return out
     end
     return in
-end

Determine if point is in, on, or out of a closed curve, which includes the space enclosed by the closed curve.

In means the point is within the closed curve (excluding edges and vertices). On means the point is on an edge or a vertex of the closed curve. Out means the point is outside of the closed curve.

Point should be an object of point trait and curve should be an object with a linestring or linearring trait, that is assumed to be closed, regardless of repeated last point.

Can provide values of in, on, and out keywords, which determines return values for each scenario.

Note that this uses the Algorithm by Hao and Sun (2018): https://doi.org/10.3390/sym10100477 Paper seperates orientation of point and edge into 26 cases. For each case, it is either a case where the point is on the edge (returns on), where a ray from the point (x, y) to infinity along the line y = y cut through the edge (k += 1), or the ray does not pass through the edge (do nothing and continue). If the ray passes through an odd number of edges, it is within the curve, else outside of of the curve if it didn't return 'on'. See paper for more information on cases denoted in comments.

julia
function _point_filled_curve_orientation(
+end

Determine if point is in, on, or out of a closed curve, which includes the space enclosed by the closed curve.

In means the point is within the closed curve (excluding edges and vertices). On means the point is on an edge or a vertex of the closed curve. Out means the point is outside of the closed curve.

Point should be an object of point trait and curve should be an object with a linestring or linearring trait, that is assumed to be closed, regardless of repeated last point.

Can provide values of in, on, and out keywords, which determines return values for each scenario.

Note that this uses the Algorithm by Hao and Sun (2018): https://doi.org/10.3390/sym10100477 Paper separates orientation of point and edge into 26 cases. For each case, it is either a case where the point is on the edge (returns on), where a ray from the point (x, y) to infinity along the line y = y cut through the edge (k += 1), or the ray does not pass through the edge (do nothing and continue). If the ray passes through an odd number of edges, it is within the curve, else outside of of the curve if it didn't return 'on'. See paper for more information on cases denoted in comments.

julia
function _point_filled_curve_orientation(
     point, curve;
     in::T = point_in, on::T = point_on, out::T = point_out, exact,
 ) where {T}
@@ -392,7 +392,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
         l_start = l_end
     end
     return in_curve, on_curve, out_curve
-end

Determines the types of interactions of a line with a polygon.

Returns a tuple of booleans: (in_poly, on_poly, out_poly).

If in_poly is true, some of the lines interior points interact with the polygon interior points. If in_poly is true, endpoints of either the line intersect with the polygon or the line interacts with the polygon boundary, including hole bounaries. If out_curve is true, at least one segments of the line is outside the polygon, including inside of holes.

If closed_line is true, line is treated as a closed line where the first and last point are connected by a segment.

julia
function _line_polygon_interactions(
+end

Determines the types of interactions of a line with a polygon.

Returns a tuple of booleans: (in_poly, on_poly, out_poly).

If in_poly is true, some of the lines interior points interact with the polygon interior points. If in_poly is true, endpoints of either the line intersect with the polygon or the line interacts with the polygon boundary, including hole boundaries. If out_curve is true, at least one segments of the line is outside the polygon, including inside of holes.

If closed_line is true, line is treated as a closed line where the first and last point are connected by a segment.

julia
function _line_polygon_interactions(
     line, polygon;
     exact, closed_line = false,
 )
diff --git a/previews/PR135/assets/source_methods_geom_relations_geom_geom_processors.md.DeClVOfg.lean.js b/previews/PR135/assets/source_methods_geom_relations_geom_geom_processors.md.B09zbe43.lean.js
similarity index 76%
rename from previews/PR135/assets/source_methods_geom_relations_geom_geom_processors.md.DeClVOfg.lean.js
rename to previews/PR135/assets/source_methods_geom_relations_geom_geom_processors.md.B09zbe43.lean.js
index 2360cd034..7031cbb40 100644
--- a/previews/PR135/assets/source_methods_geom_relations_geom_geom_processors.md.DeClVOfg.lean.js
+++ b/previews/PR135/assets/source_methods_geom_relations_geom_geom_processors.md.B09zbe43.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o=JSON.parse('{"title":"Line-curve interaction","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/geom_geom_processors.md","filePath":"source/methods/geom_relations/geom_geom_processors.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/geom_geom_processors.md"},l=n("",142),t=[l];function p(k,e,r,E,d,g){return a(),i("div",null,t)}const c=s(h,[["render",p]]);export{o as __pageData,c as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const o=JSON.parse('{"title":"Line-curve interaction","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/geom_geom_processors.md","filePath":"source/methods/geom_relations/geom_geom_processors.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/geom_geom_processors.md"},l=n("",142),t=[l];function p(k,e,r,E,d,g){return a(),i("div",null,t)}const c=s(h,[["render",p]]);export{o as __pageData,c as default};
diff --git a/previews/PR135/assets/source_methods_geom_relations_intersects.md.C0hjmSuR.js b/previews/PR135/assets/source_methods_geom_relations_intersects.md.DH-bN_kE.js
similarity index 98%
rename from previews/PR135/assets/source_methods_geom_relations_intersects.md.C0hjmSuR.js
rename to previews/PR135/assets/source_methods_geom_relations_intersects.md.DH-bN_kE.js
index f78bc4660..0eaff902e 100644
--- a/previews/PR135/assets/source_methods_geom_relations_intersects.md.C0hjmSuR.js
+++ b/previews/PR135/assets/source_methods_geom_relations_intersects.md.DH-bN_kE.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as e}from"./chunks/framework.k41oUgTf.js";const n="/GeometryOps.jl/previews/PR135/assets/gxjwrae.DeeQUply.png",y=JSON.parse('{"title":"Intersection checks","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/intersects.md","filePath":"source/methods/geom_relations/intersects.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/intersects.md"},p=e(`

Intersection checks

julia
export intersects

What is intersects?

The intersects function checks if a given geometry intersects with another geometry, or in other words, the either the interiors or boundaries of the two geometries intersect.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as s,c as i,o as a,a7 as e}from"./chunks/framework.CONf0Rze.js";const n="/GeometryOps.jl/previews/PR135/assets/rezvvce.DeeQUply.png",y=JSON.parse('{"title":"Intersection checks","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/intersects.md","filePath":"source/methods/geom_relations/intersects.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/intersects.md"},p=e(`

Intersection checks

julia
export intersects

What is intersects?

The intersects function checks if a given geometry intersects with another geometry, or in other words, the either the interiors or boundaries of the two geometries intersect.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
diff --git a/previews/PR135/assets/source_methods_geom_relations_intersects.md.C0hjmSuR.lean.js b/previews/PR135/assets/source_methods_geom_relations_intersects.md.DH-bN_kE.lean.js
similarity index 77%
rename from previews/PR135/assets/source_methods_geom_relations_intersects.md.C0hjmSuR.lean.js
rename to previews/PR135/assets/source_methods_geom_relations_intersects.md.DH-bN_kE.lean.js
index 12ec0785d..ee2ce500d 100644
--- a/previews/PR135/assets/source_methods_geom_relations_intersects.md.C0hjmSuR.lean.js
+++ b/previews/PR135/assets/source_methods_geom_relations_intersects.md.DH-bN_kE.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as e}from"./chunks/framework.k41oUgTf.js";const n="/GeometryOps.jl/previews/PR135/assets/gxjwrae.DeeQUply.png",y=JSON.parse('{"title":"Intersection checks","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/intersects.md","filePath":"source/methods/geom_relations/intersects.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/intersects.md"},p=e("",18),l=[p];function h(k,r,o,d,c,g){return a(),i("div",null,l)}const F=s(t,[["render",h]]);export{y as __pageData,F as default};
+import{_ as s,c as i,o as a,a7 as e}from"./chunks/framework.CONf0Rze.js";const n="/GeometryOps.jl/previews/PR135/assets/rezvvce.DeeQUply.png",y=JSON.parse('{"title":"Intersection checks","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/intersects.md","filePath":"source/methods/geom_relations/intersects.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/intersects.md"},p=e("",18),l=[p];function h(k,r,o,d,c,g){return a(),i("div",null,l)}const F=s(t,[["render",h]]);export{y as __pageData,F as default};
diff --git a/previews/PR135/assets/source_methods_geom_relations_overlaps.md.BK3Hcl18.js b/previews/PR135/assets/source_methods_geom_relations_overlaps.md.DaCX808s.js
similarity index 96%
rename from previews/PR135/assets/source_methods_geom_relations_overlaps.md.BK3Hcl18.js
rename to previews/PR135/assets/source_methods_geom_relations_overlaps.md.DaCX808s.js
index 5114837d8..cc61ad5a3 100644
--- a/previews/PR135/assets/source_methods_geom_relations_overlaps.md.BK3Hcl18.js
+++ b/previews/PR135/assets/source_methods_geom_relations_overlaps.md.DaCX808s.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const l="/GeometryOps.jl/previews/PR135/assets/dtturyx.CgiryX2p.png",y=JSON.parse('{"title":"Overlaps","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/overlaps.md","filePath":"source/methods/geom_relations/overlaps.md","lastUpdated":null}'),p={name:"source/methods/geom_relations/overlaps.md"},t=n(`

Overlaps

julia
export overlaps

What is overlaps?

The overlaps function checks if two geometries overlap. Two geometries can only overlap if they have the same dimension, and if they overlap, but one is not contained, within, or equal to the other.

Note that this means it is impossible for a single point to overlap with a single point and a line only overlaps with another line if only a section of each line is colinear.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const l="/GeometryOps.jl/previews/PR135/assets/ftxvlaw.CgiryX2p.png",y=JSON.parse('{"title":"Overlaps","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/overlaps.md","filePath":"source/methods/geom_relations/overlaps.md","lastUpdated":null}'),p={name:"source/methods/geom_relations/overlaps.md"},t=n(`

Overlaps

julia
export overlaps

What is overlaps?

The overlaps function checks if two geometries overlap. Two geometries can only overlap if they have the same dimension, and if they overlap, but one is not contained, within, or equal to the other.

Note that this means it is impossible for a single point to overlap with a single point and a line only overlaps with another line if only a section of each line is collinear.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -9,7 +9,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const l
 scatter!(GI.getpoint(l1), color = :blue)
 lines!(GI.getpoint(l2), color = :orange)
 scatter!(GI.getpoint(l2), color = :orange)
-f

We can see that the two lines overlap in the plot:

julia
GO.overlaps(l1, l2)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that that since only elements of the same dimension can overlap, any two geometries with traits that are of different dimensions autmoatically can return false.

For geometries with the same trait dimension, we must make sure that they share a point, an edge, or area for points, lines, and polygons/multipolygons respectivly, without being contained.

julia
"""
+f

We can see that the two lines overlap in the plot:

julia
GO.overlaps(l1, l2)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that that since only elements of the same dimension can overlap, any two geometries with traits that are of different dimensions automatically can return false.

For geometries with the same trait dimension, we must make sure that they share a point, an edge, or area for points, lines, and polygons/multipolygons respectively, without being contained.

julia
"""
     overlaps(geom1, geom2)::Bool
 
 Compare two Geometries of the same dimension and return true if their
@@ -73,7 +73,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const l
 """
     overlaps(::GI.LineTrait, line1, ::GI.LineTrait, line)::Bool
 
-If the lines overlap, meaning that they are colinear but each have one endpoint
+If the lines overlap, meaning that they are collinear but each have one endpoint
 outside of the other line, return true. Else false.
 """
 overlaps(::GI.LineTrait, line1, ::GI.LineTrait, line) =
@@ -169,7 +169,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const l
     return false
 end
 
-#= If the edges overlap, meaning that they are colinear but each have one endpoint
+#= If the edges overlap, meaning that they are collinear but each have one endpoint
 outside of the other edge, return true. Else false. =#
 function _overlaps(
     (a1, a2)::Edge,
diff --git a/previews/PR135/assets/source_methods_geom_relations_overlaps.md.BK3Hcl18.lean.js b/previews/PR135/assets/source_methods_geom_relations_overlaps.md.DaCX808s.lean.js
similarity index 76%
rename from previews/PR135/assets/source_methods_geom_relations_overlaps.md.BK3Hcl18.lean.js
rename to previews/PR135/assets/source_methods_geom_relations_overlaps.md.DaCX808s.lean.js
index afa568c50..45bda8fc4 100644
--- a/previews/PR135/assets/source_methods_geom_relations_overlaps.md.BK3Hcl18.lean.js
+++ b/previews/PR135/assets/source_methods_geom_relations_overlaps.md.DaCX808s.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const l="/GeometryOps.jl/previews/PR135/assets/dtturyx.CgiryX2p.png",y=JSON.parse('{"title":"Overlaps","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/overlaps.md","filePath":"source/methods/geom_relations/overlaps.md","lastUpdated":null}'),p={name:"source/methods/geom_relations/overlaps.md"},t=n("",37),e=[t];function h(k,r,d,g,o,F){return a(),i("div",null,e)}const c=s(p,[["render",h]]);export{y as __pageData,c as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const l="/GeometryOps.jl/previews/PR135/assets/ftxvlaw.CgiryX2p.png",y=JSON.parse('{"title":"Overlaps","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/overlaps.md","filePath":"source/methods/geom_relations/overlaps.md","lastUpdated":null}'),p={name:"source/methods/geom_relations/overlaps.md"},t=n("",37),e=[t];function h(k,r,d,g,o,F){return a(),i("div",null,e)}const c=s(p,[["render",h]]);export{y as __pageData,c as default};
diff --git a/previews/PR135/assets/source_methods_geom_relations_touches.md.oH9OwOqC.js b/previews/PR135/assets/source_methods_geom_relations_touches.md.z4ceia7e.js
similarity index 97%
rename from previews/PR135/assets/source_methods_geom_relations_touches.md.oH9OwOqC.js
rename to previews/PR135/assets/source_methods_geom_relations_touches.md.z4ceia7e.js
index 32a79364d..df717d1f7 100644
--- a/previews/PR135/assets/source_methods_geom_relations_touches.md.oH9OwOqC.js
+++ b/previews/PR135/assets/source_methods_geom_relations_touches.md.z4ceia7e.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const t="/GeometryOps.jl/previews/PR135/assets/zbzherl.BEFUMtlf.png",c=JSON.parse('{"title":"Touches","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/touches.md","filePath":"source/methods/geom_relations/touches.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/touches.md"},l=n(`

Touches

julia
export touches

What is touches?

The touches function checks if one geometry touches another geometry. In other words, the interiors of the two geometries don't interact, but one of the geometries must have a boundary point that interacts with either the other geometies interior or boundary.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const t="/GeometryOps.jl/previews/PR135/assets/bhjiovt.BEFUMtlf.png",c=JSON.parse('{"title":"Touches","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/touches.md","filePath":"source/methods/geom_relations/touches.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/touches.md"},l=n(`

Touches

julia
export touches

What is touches?

The touches function checks if one geometry touches another geometry. In other words, the interiors of the two geometries don't interact, but one of the geometries must have a boundary point that interacts with either the other geometry's interior or boundary.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -19,7 +19,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const t
 
 Return \`true\` if the first geometry touches the second geometry. In other words,
 the two interiors cannot interact, but one of the geometries must have a
-boundary point that interacts with either the other geometies interior or
+boundary point that interacts with either the other geometry's interior or
 boundary.
 
 # Examples
@@ -62,8 +62,8 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const t
 _touches(
     trait1::Union{GI.AbstractCurveTrait, GI.PolygonTrait}, g1,
     trait2::GI.PointTrait, g2,
-) = _touches(trait2, g2, trait1, g1)

Lines touching geometries

julia
#= Linestring touches another line if at least one bounday point interacts with
-the bounday of interior of the other line, but the interiors don't interact. =#
+) = _touches(trait2, g2, trait1, g1)

Lines touching geometries

julia
#= Linestring touches another line if at least one boundary point interacts with
+the boundary of interior of the other line, but the interiors don't interact. =#
 _touches(
     ::Union{GI.LineTrait, GI.LineStringTrait}, g1,
     ::Union{GI.LineTrait, GI.LineStringTrait}, g2,
@@ -110,14 +110,14 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const t
 ) = _touches(trait2, g2, trait1, g1)
 
 #= Linearring cannot touch another linear ring since they are both exclusively
-made up of interior points and no bounday points =#
+made up of interior points and no boundary points =#
 _touches(
     ::GI.LinearRingTrait, g1,
     ::GI.LinearRingTrait, g2,
 ) = false
 
 #= Linearring touches a polygon if at least one of the points of the ring
-interact with the polygon bounday and non are in the polygon interior. =#
+interact with the polygon boundary and non are in the polygon interior. =#
 _touches(
     ::GI.LinearRingTrait, g1,
     ::GI.PolygonTrait, g2,
@@ -127,8 +127,8 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const t
     TOUCHES_REQUIRES...,
     TOUCHES_EXACT...,
     closed_line = true,
-)

Polygons touch geometries

julia
#= Polygon touches a curve if at least one of the curve bounday points interacts
-with the polygon's bounday and no curve points interact with the interior.=#
+)

Polygons touch geometries

julia
#= Polygon touches a curve if at least one of the curve boundary points interacts
+with the polygon's boundary and no curve points interact with the interior.=#
 _touches(
     trait1::GI.PolygonTrait, g1,
     trait2::GI.AbstractCurveTrait, g2
diff --git a/previews/PR135/assets/source_methods_geom_relations_touches.md.oH9OwOqC.lean.js b/previews/PR135/assets/source_methods_geom_relations_touches.md.z4ceia7e.lean.js
similarity index 76%
rename from previews/PR135/assets/source_methods_geom_relations_touches.md.oH9OwOqC.lean.js
rename to previews/PR135/assets/source_methods_geom_relations_touches.md.z4ceia7e.lean.js
index e1ccd8cac..756848dc5 100644
--- a/previews/PR135/assets/source_methods_geom_relations_touches.md.oH9OwOqC.lean.js
+++ b/previews/PR135/assets/source_methods_geom_relations_touches.md.z4ceia7e.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const t="/GeometryOps.jl/previews/PR135/assets/zbzherl.BEFUMtlf.png",c=JSON.parse('{"title":"Touches","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/touches.md","filePath":"source/methods/geom_relations/touches.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/touches.md"},l=n("",41),e=[l];function p(k,r,E,g,d,o){return a(),i("div",null,e)}const F=s(h,[["render",p]]);export{c as __pageData,F as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const t="/GeometryOps.jl/previews/PR135/assets/bhjiovt.BEFUMtlf.png",c=JSON.parse('{"title":"Touches","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/touches.md","filePath":"source/methods/geom_relations/touches.md","lastUpdated":null}'),h={name:"source/methods/geom_relations/touches.md"},l=n("",41),e=[l];function p(k,r,E,g,d,o){return a(),i("div",null,e)}const F=s(h,[["render",p]]);export{c as __pageData,F as default};
diff --git a/previews/PR135/assets/source_methods_geom_relations_within.md.yOtMwkyH.js b/previews/PR135/assets/source_methods_geom_relations_within.md.DNx_0bB6.js
similarity index 96%
rename from previews/PR135/assets/source_methods_geom_relations_within.md.yOtMwkyH.js
rename to previews/PR135/assets/source_methods_geom_relations_within.md.DNx_0bB6.js
index 4bad5d8ec..ec1b81215 100644
--- a/previews/PR135/assets/source_methods_geom_relations_within.md.yOtMwkyH.js
+++ b/previews/PR135/assets/source_methods_geom_relations_within.md.DNx_0bB6.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h="/GeometryOps.jl/previews/PR135/assets/oxrcmhd._0R9BbFk.png",c=JSON.parse('{"title":"Within","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/within.md","filePath":"source/methods/geom_relations/within.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/within.md"},l=n(`

Within

julia
export within

What is within?

The within function checks if one geometry is inside another geometry. This requires that the two interiors intersect and that the interior and boundary of the first geometry is not in the exterior of the second geometry.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const h="/GeometryOps.jl/previews/PR135/assets/noqiyfz._0R9BbFk.png",c=JSON.parse('{"title":"Within","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/within.md","filePath":"source/methods/geom_relations/within.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/within.md"},l=n(`

Within

julia
export within

What is within?

The within function checks if one geometry is inside another geometry. This requires that the two interiors intersect and that the interior and boundary of the first geometry is not in the exterior of the second geometry.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -10,7 +10,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h
 lines!(GI.getpoint(l2), color = :orange)
 scatter!(GI.getpoint(l2), color = :orange)
 f

We can see that all of the points and edges of l2 are within l1, so l2 is within l1, but l1 is not within l2

julia
GO.within(l1, l2)  # false
-GO.within(l2, l1)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait.

Each of these calls a method in the geom_geom_processors file. The methods in this file determine if the given geometries meet a set of criteria. For the within function and arguments g1 and g2, this criteria is as follows: - points of g1 are allowed to be in the interior of g2 (either through overlap or crossing for lines) - points of g1 are allowed to be on the boundary of g2 - points of g1 are not allowed to be in the exterior of g2 - at least one point of g1 is required to be in the interior of g2 - no points of g1 are required to be on the boundary of g2 - no points of g1 are required to be in the exterior of g2

The code for the specific implementations is in the geom_geom_processors file.

julia
const WITHIN_POINT_ALLOWS = (in_allow = true, on_allow = false, out_allow = false)
+GO.within(l2, l1)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait.

Each of these calls a method in the geom_geom_processors file. The methods in this file determine if the given geometries meet a set of criteria. For the within function and arguments g1 and g2, this criteria is as follows: - points of g1 are allowed to be in the interior of g2 (either through overlap or crossing for lines) - points of g1 are allowed to be on the boundary of g2 - points of g1 are not allowed to be in the exterior of g2 - at least one point of g1 is required to be in the interior of g2 - no points of g1 are required to be on the boundary of g2 - no points of g1 are required to be in the exterior of g2

The code for the specific implementations is in the geom_geom_processors file.

julia
const WITHIN_POINT_ALLOWS = (in_allow = true, on_allow = false, out_allow = false)
 const WITHIN_CURVE_ALLOWS = (over_allow = true, cross_allow = true, on_allow = true, out_allow = false)
 const WITHIN_POLYGON_ALLOWS = (in_allow = true, on_allow = true, out_allow = false)
 const WITHIN_REQUIRES = (in_require = true, on_require = false, out_require = false)
@@ -190,4 +190,4 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h
         !within(sub_g1, g2) && return false
     end
     return true
-end

This page was generated using Literate.jl.

`,41),p=[l];function e(k,r,E,g,d,y){return a(),i("div",null,p)}const F=s(t,[["render",e]]);export{c as __pageData,F as default}; +end

This page was generated using Literate.jl.

`,41),e=[l];function p(k,r,E,g,d,o){return a(),i("div",null,e)}const F=s(t,[["render",p]]);export{c as __pageData,F as default}; diff --git a/previews/PR135/assets/source_methods_geom_relations_within.md.yOtMwkyH.lean.js b/previews/PR135/assets/source_methods_geom_relations_within.md.DNx_0bB6.lean.js similarity index 52% rename from previews/PR135/assets/source_methods_geom_relations_within.md.yOtMwkyH.lean.js rename to previews/PR135/assets/source_methods_geom_relations_within.md.DNx_0bB6.lean.js index d506cbcc1..bf8cb00e6 100644 --- a/previews/PR135/assets/source_methods_geom_relations_within.md.yOtMwkyH.lean.js +++ b/previews/PR135/assets/source_methods_geom_relations_within.md.DNx_0bB6.lean.js @@ -1 +1 @@ -import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h="/GeometryOps.jl/previews/PR135/assets/oxrcmhd._0R9BbFk.png",c=JSON.parse('{"title":"Within","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/within.md","filePath":"source/methods/geom_relations/within.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/within.md"},l=n("",41),p=[l];function e(k,r,E,g,d,y){return a(),i("div",null,p)}const F=s(t,[["render",e]]);export{c as __pageData,F as default}; +import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const h="/GeometryOps.jl/previews/PR135/assets/noqiyfz._0R9BbFk.png",c=JSON.parse('{"title":"Within","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/geom_relations/within.md","filePath":"source/methods/geom_relations/within.md","lastUpdated":null}'),t={name:"source/methods/geom_relations/within.md"},l=n("",41),e=[l];function p(k,r,E,g,d,o){return a(),i("div",null,e)}const F=s(t,[["render",p]]);export{c as __pageData,F as default}; diff --git a/previews/PR135/assets/source_methods_orientation.md.CxJbsDsq.js b/previews/PR135/assets/source_methods_orientation.md.C6hml0DY.js similarity index 99% rename from previews/PR135/assets/source_methods_orientation.md.CxJbsDsq.js rename to previews/PR135/assets/source_methods_orientation.md.C6hml0DY.js index 6b972caf1..fd0cb50f7 100644 --- a/previews/PR135/assets/source_methods_orientation.md.CxJbsDsq.js +++ b/previews/PR135/assets/source_methods_orientation.md.C6hml0DY.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const y=JSON.parse('{"title":"Orientation","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/orientation.md","filePath":"source/methods/orientation.md","lastUpdated":null}'),l={name:"source/methods/orientation.md"},p=n(`

Orientation

julia
export isclockwise, isconcave

isclockwise

The orientation of a geometry is whether it runs clockwise or counter-clockwise.

This is defined for linestrings, linear rings, or vectors of points.

isconcave

A polygon is concave if it has at least one interior angle greater than 180 degrees, meaning that the interior of the polygon is not a convex set.

These are all adapted from Turf.jl.

The may not necessarily be what want in the end but work for now!

julia
"""
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const y=JSON.parse('{"title":"Orientation","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/orientation.md","filePath":"source/methods/orientation.md","lastUpdated":null}'),l={name:"source/methods/orientation.md"},p=n(`

Orientation

julia
export isclockwise, isconcave

isclockwise

The orientation of a geometry is whether it runs clockwise or counter-clockwise.

This is defined for linestrings, linear rings, or vectors of points.

isconcave

A polygon is concave if it has at least one interior angle greater than 180 degrees, meaning that the interior of the polygon is not a convex set.

These are all adapted from Turf.jl.

The may not necessarily be what want in the end but work for now!

julia
"""
     isclockwise(line::Union{LineString, Vector{Position}})::Bool
 
 Take a ring and return \`true\` if the line goes clockwise, or \`false\` if the line goes
diff --git a/previews/PR135/assets/source_methods_orientation.md.CxJbsDsq.lean.js b/previews/PR135/assets/source_methods_orientation.md.C6hml0DY.lean.js
similarity index 71%
rename from previews/PR135/assets/source_methods_orientation.md.CxJbsDsq.lean.js
rename to previews/PR135/assets/source_methods_orientation.md.C6hml0DY.lean.js
index d3e7fdf6e..b576fb10f 100644
--- a/previews/PR135/assets/source_methods_orientation.md.CxJbsDsq.lean.js
+++ b/previews/PR135/assets/source_methods_orientation.md.C6hml0DY.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const y=JSON.parse('{"title":"Orientation","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/orientation.md","filePath":"source/methods/orientation.md","lastUpdated":null}'),l={name:"source/methods/orientation.md"},p=n("",28),h=[p];function t(e,k,r,d,g,E){return a(),i("div",null,h)}const c=s(l,[["render",t]]);export{y as __pageData,c as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const y=JSON.parse('{"title":"Orientation","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/orientation.md","filePath":"source/methods/orientation.md","lastUpdated":null}'),l={name:"source/methods/orientation.md"},p=n("",28),h=[p];function t(e,k,r,d,g,E){return a(),i("div",null,h)}const c=s(l,[["render",t]]);export{y as __pageData,c as default};
diff --git a/previews/PR135/assets/source_methods_polygonize.md.Bf-4bMgE.js b/previews/PR135/assets/source_methods_polygonize.md.BjnTo1d_.js
similarity index 99%
rename from previews/PR135/assets/source_methods_polygonize.md.Bf-4bMgE.js
rename to previews/PR135/assets/source_methods_polygonize.md.BjnTo1d_.js
index 04426c4e2..48d652338 100644
--- a/previews/PR135/assets/source_methods_polygonize.md.Bf-4bMgE.js
+++ b/previews/PR135/assets/source_methods_polygonize.md.BjnTo1d_.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o=JSON.parse('{"title":"Polygonizing raster data","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/polygonize.md","filePath":"source/methods/polygonize.md","lastUpdated":null}'),h={name:"source/methods/polygonize.md"},l=n(`

Polygonizing raster data

julia
export polygonize
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const o=JSON.parse('{"title":"Polygonizing raster data","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/polygonize.md","filePath":"source/methods/polygonize.md","lastUpdated":null}'),h={name:"source/methods/polygonize.md"},l=n(`

Polygonizing raster data

julia
export polygonize
 
 #=
 The methods in this file convert a raster image into a set of polygons,
@@ -33,7 +33,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
 Now, we can use the \`polygonize\` function to convert the raster data into polygons.
 
 For this particular example, we chose a range of z-values between 0.8 and 3.2,
-which would provide two distinct polyogns with holes.
+which would provide two distinct polygons with holes.
 
 \`\`\`@example polygonize
 polygons = polygonize(xs, ys, 0.8 .< zs .< 3.2)
@@ -246,7 +246,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o
     assigned_holes = count(assigned)
     assigned_holes == length(holes) || @warn "Not all holes were assigned to polygons, $(length(holes) - assigned_holes) where missed from $(length(holes)) holes and $(length(polygons)) polygons"
 
-    if isempty(polygons)

TODO: this really should return an emtpty MultiPolygon but GeoInterface wrappers cant do that yet, which is not ideal...

julia
        @warn "No polgons found, check your data or try another function for \`f\`"
+    if isempty(polygons)

TODO: this really should return an empty MultiPolygon but GeoInterface wrappers cant do that yet, which is not ideal...

julia
        @warn "No polgons found, check your data or try another function for \`f\`"
         return nothing
     else

Otherwise return a wrapped MultiPolygon

julia
        return GI.MultiPolygon(polygons; crs, extent = mapreduce(GI.extent, Extents.union, polygons))
     end
diff --git a/previews/PR135/assets/source_methods_polygonize.md.Bf-4bMgE.lean.js b/previews/PR135/assets/source_methods_polygonize.md.BjnTo1d_.lean.js
similarity index 72%
rename from previews/PR135/assets/source_methods_polygonize.md.Bf-4bMgE.lean.js
rename to previews/PR135/assets/source_methods_polygonize.md.BjnTo1d_.lean.js
index 2af344979..232c5e31f 100644
--- a/previews/PR135/assets/source_methods_polygonize.md.Bf-4bMgE.lean.js
+++ b/previews/PR135/assets/source_methods_polygonize.md.BjnTo1d_.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const o=JSON.parse('{"title":"Polygonizing raster data","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/polygonize.md","filePath":"source/methods/polygonize.md","lastUpdated":null}'),h={name:"source/methods/polygonize.md"},l=n("",86),p=[l];function t(k,e,d,E,r,g){return a(),i("div",null,p)}const c=s(h,[["render",t]]);export{o as __pageData,c as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const o=JSON.parse('{"title":"Polygonizing raster data","description":"","frontmatter":{},"headers":[],"relativePath":"source/methods/polygonize.md","filePath":"source/methods/polygonize.md","lastUpdated":null}'),h={name:"source/methods/polygonize.md"},l=n("",86),p=[l];function t(k,e,d,E,r,g){return a(),i("div",null,p)}const c=s(h,[["render",t]]);export{o as __pageData,c as default};
diff --git a/previews/PR135/assets/source_not_implemented_yet.md.9VgY15CW.js b/previews/PR135/assets/source_not_implemented_yet.md.DttPeX-2.js
similarity index 94%
rename from previews/PR135/assets/source_not_implemented_yet.md.9VgY15CW.js
rename to previews/PR135/assets/source_not_implemented_yet.md.DttPeX-2.js
index d6972813b..c1e0d7965 100644
--- a/previews/PR135/assets/source_not_implemented_yet.md.9VgY15CW.js
+++ b/previews/PR135/assets/source_not_implemented_yet.md.DttPeX-2.js
@@ -1,4 +1,4 @@
-import{_ as e,c as i,o as t,a7 as s}from"./chunks/framework.k41oUgTf.js";const _=JSON.parse('{"title":"Not implemented yet","description":"","frontmatter":{},"headers":[],"relativePath":"source/not_implemented_yet.md","filePath":"source/not_implemented_yet.md","lastUpdated":null}'),a={name:"source/not_implemented_yet.md"},n=s(`

Not implemented yet

All of the functions in this file are not implemented in Julia yet. Some of them may have implementations in LibGEOS which we can use via an extension, but there is no native-Julia implementation for them.

julia
function symdifference end
+import{_ as e,c as i,o as t,a7 as s}from"./chunks/framework.CONf0Rze.js";const _=JSON.parse('{"title":"Not implemented yet","description":"","frontmatter":{},"headers":[],"relativePath":"source/not_implemented_yet.md","filePath":"source/not_implemented_yet.md","lastUpdated":null}'),a={name:"source/not_implemented_yet.md"},n=s(`

Not implemented yet

All of the functions in this file are not implemented in Julia yet. Some of them may have implementations in LibGEOS which we can use via an extension, but there is no native-Julia implementation for them.

julia
function symdifference end
 function buffer end
 function convexhull end
 function concavehull end

This page was generated using Literate.jl.

`,5),l=[n];function p(h,o,r,d,c,m){return t(),i("div",null,l)}const u=e(a,[["render",p]]);export{_ as __pageData,u as default}; diff --git a/previews/PR135/assets/source_not_implemented_yet.md.9VgY15CW.lean.js b/previews/PR135/assets/source_not_implemented_yet.md.DttPeX-2.lean.js similarity index 71% rename from previews/PR135/assets/source_not_implemented_yet.md.9VgY15CW.lean.js rename to previews/PR135/assets/source_not_implemented_yet.md.DttPeX-2.lean.js index 684da6109..dd51630e2 100644 --- a/previews/PR135/assets/source_not_implemented_yet.md.9VgY15CW.lean.js +++ b/previews/PR135/assets/source_not_implemented_yet.md.DttPeX-2.lean.js @@ -1 +1 @@ -import{_ as e,c as i,o as t,a7 as s}from"./chunks/framework.k41oUgTf.js";const _=JSON.parse('{"title":"Not implemented yet","description":"","frontmatter":{},"headers":[],"relativePath":"source/not_implemented_yet.md","filePath":"source/not_implemented_yet.md","lastUpdated":null}'),a={name:"source/not_implemented_yet.md"},n=s("",5),l=[n];function p(h,o,r,d,c,m){return t(),i("div",null,l)}const u=e(a,[["render",p]]);export{_ as __pageData,u as default}; +import{_ as e,c as i,o as t,a7 as s}from"./chunks/framework.CONf0Rze.js";const _=JSON.parse('{"title":"Not implemented yet","description":"","frontmatter":{},"headers":[],"relativePath":"source/not_implemented_yet.md","filePath":"source/not_implemented_yet.md","lastUpdated":null}'),a={name:"source/not_implemented_yet.md"},n=s("",5),l=[n];function p(h,o,r,d,c,m){return t(),i("div",null,l)}const u=e(a,[["render",p]]);export{_ as __pageData,u as default}; diff --git a/previews/PR135/assets/source_primitives.md.B8mDJecN.js b/previews/PR135/assets/source_primitives.md.4UCUXvfy.js similarity index 97% rename from previews/PR135/assets/source_primitives.md.B8mDJecN.js rename to previews/PR135/assets/source_primitives.md.4UCUXvfy.js index 30a1478c4..819cde22f 100644 --- a/previews/PR135/assets/source_primitives.md.B8mDJecN.js +++ b/previews/PR135/assets/source_primitives.md.4UCUXvfy.js @@ -1,7 +1,7 @@ -import{_ as s,c as i,o as a,a7 as t}from"./chunks/framework.k41oUgTf.js";const o=JSON.parse('{"title":"Primitive functions","description":"","frontmatter":{},"headers":[],"relativePath":"source/primitives.md","filePath":"source/primitives.md","lastUpdated":null}'),n={name:"source/primitives.md"},h=t(`

Primitive functions

julia
export apply, applyreduce, TraitTarget

This file mainly defines the apply and applyreduce functions, and some related functionality.

In general, the idea behind the apply framework is to take as input any geometry, vector of geometries, or feature collection, deconstruct it to the given trait target (any arbitrary GI.AbstractTrait or TraitTarget union thereof, like PointTrait or PolygonTrait) and perform some operation on it.

This allows for a simple and consistent framework within which users can define their own operations trivially easily, and removes a lot of the complexity involved with handling complex geometry structures.

For example, a simple way to flip the x and y coordinates of a geometry is:

julia
flipped_geom = GO.apply(GI.PointTrait(), geom) do p
+import{_ as s,c as i,o as a,a7 as t}from"./chunks/framework.CONf0Rze.js";const o=JSON.parse('{"title":"Primitive functions","description":"","frontmatter":{},"headers":[],"relativePath":"source/primitives.md","filePath":"source/primitives.md","lastUpdated":null}'),n={name:"source/primitives.md"},h=t(`

Primitive functions

julia
export apply, applyreduce, TraitTarget

This file mainly defines the apply and applyreduce functions, and some related functionality.

In general, the idea behind the apply framework is to take as input any geometry, vector of geometries, or feature collection, deconstruct it to the given trait target (any arbitrary GI.AbstractTrait or TraitTarget union thereof, like PointTrait or PolygonTrait) and perform some operation on it.

This allows for a simple and consistent framework within which users can define their own operations trivially easily, and removes a lot of the complexity involved with handling complex geometry structures.

For example, a simple way to flip the x and y coordinates of a geometry is:

julia
flipped_geom = GO.apply(GI.PointTrait(), geom) do p
     (GI.y(p), GI.x(p))
 end

As simple as that. There's no need to implement your own decomposition because it's done for you.

Functions like flip, reproject, transform, even segmentize and simplify have been implemented using the apply framework. Similarly, centroid, area and distance have been implemented using the applyreduce framework.

Docstrings

Functions

Missing docstring.

Missing docstring for apply. Check Documenter's build log for details.

Missing docstring.

Missing docstring for applyreduce. Check Documenter's build log for details.

Missing docstring.

Missing docstring for GeometryOps.unwrap. Check Documenter's build log for details.

# GeometryOps.flattenFunction.
julia
flatten(target::Type{<:GI.AbstractTrait}, obj)
-flatten(f, target::Type{<:GI.AbstractTrait}, obj)

Lazily flatten any AbstractArray, iterator, FeatureCollectionTrait, FeatureTrait or AbstractGeometryTrait object obj, so that objects with the target trait are returned by the iterator.

If f is passed in it will be applied to the target geometries.

source


# GeometryOps.reconstructFunction.
julia
reconstruct(geom, components)

Reconstruct geom from an iterable of component objects that match its structure.

All objects in components must have the same GeoInterface.trait.

Ususally used in combination with flatten.

source


# GeometryOps.rebuildFunction.
julia
rebuild(geom, child_geoms)

Rebuild a geometry from child geometries.

By default geometries will be rebuilt as a GeoInterface.Wrappers geometry, but rebuild can have methods added to it to dispatch on geometries from other packages and specify how to rebuild them.

(Maybe it should go into GeoInterface.jl)

source


Types

Missing docstring.

Missing docstring for TraitTarget. Check Documenter's build log for details.

Implementation

julia
const THREADED_KEYWORD = "- \`threaded\`: \`true\` or \`false\`. Whether to use multithreading. Defaults to \`false\`."
+flatten(f, target::Type{<:GI.AbstractTrait}, obj)

Lazily flatten any AbstractArray, iterator, FeatureCollectionTrait, FeatureTrait or AbstractGeometryTrait object obj, so that objects with the target trait are returned by the iterator.

If f is passed in it will be applied to the target geometries.

source


# GeometryOps.reconstructFunction.
julia
reconstruct(geom, components)

Reconstruct geom from an iterable of component objects that match its structure.

All objects in components must have the same GeoInterface.trait.

Usually used in combination with flatten.

source


# GeometryOps.rebuildFunction.
julia
rebuild(geom, child_geoms)

Rebuild a geometry from child geometries.

By default geometries will be rebuilt as a GeoInterface.Wrappers geometry, but rebuild can have methods added to it to dispatch on geometries from other packages and specify how to rebuild them.

(Maybe it should go into GeoInterface.jl)

source


Types

Missing docstring.

Missing docstring for TraitTarget. Check Documenter's build log for details.

Implementation

julia
const THREADED_KEYWORD = "- \`threaded\`: \`true\` or \`false\`. Whether to use multithreading. Defaults to \`false\`."
 const CRS_KEYWORD = "- \`crs\`: The CRS to attach to geometries. Defaults to \`nothing\`."
 const CALC_EXTENT_KEYWORD = "- \`calc_extent\`: \`true\` or \`false\`. Whether to calculate the extent. Defaults to \`false\`."
 
@@ -86,14 +86,14 @@ import{_ as s,c as i,o as a,a7 as t}from"./chunks/framework.k41oUgTf.js";const o
 ) where F

Run _apply on all features in the feature collection, possibly threaded

julia
    apply_to_feature(i) =
         _apply(f, target, GI.getfeature(fc, i); crs, calc_extent, threaded=_False())::GI.Feature
     features = _maptasks(apply_to_feature, 1:GI.nfeature(fc), threaded)
-    if calc_extent isa _True

Calculate the extent of the features

julia
        extent = mapreduce(GI.extent, Extents.union, features)

Return a FeatureCollection with features, crs and caculated extent

julia
        return GI.FeatureCollection(features; crs, extent)
+    if calc_extent isa _True

Calculate the extent of the features

julia
        extent = mapreduce(GI.extent, Extents.union, features)

Return a FeatureCollection with features, crs and calculated extent

julia
        return GI.FeatureCollection(features; crs, extent)
     else

Return a FeatureCollection with features and crs

julia
        return GI.FeatureCollection(features; crs)
     end
 end

Rewrap all FeatureTrait features as GI.Feature, keeping the properties

julia
@inline function _apply(f::F, target, ::GI.FeatureTrait, feature;
     crs=GI.crs(feature), calc_extent=_False(), threaded
 ) where F

Run _apply on the contained geometry

julia
    geometry = _apply(f, target, GI.geometry(feature); crs, calc_extent, threaded)

Get the feature properties

julia
    properties = GI.properties(feature)
-    if calc_extent isa _True

Calculate the extent of the geometry

julia
        extent = GI.extent(geometry)

Return a new Feature with the new geometry and calculated extent, but the oroginal properties and crs

julia
        return GI.Feature(geometry; properties, crs, extent)
-    else

Return a new Feature with the new geometry, but the oroginal properties and crs

julia
        return GI.Feature(geometry; properties, crs)
+    if calc_extent isa _True

Calculate the extent of the geometry

julia
        extent = GI.extent(geometry)

Return a new Feature with the new geometry and calculated extent, but the original properties and crs

julia
        return GI.Feature(geometry; properties, crs, extent)
+    else

Return a new Feature with the new geometry, but the original properties and crs

julia
        return GI.Feature(geometry; properties, crs)
     end
 end

Reconstruct nested geometries, maybe using threads to call _apply on component geoms

julia
@inline function _apply(f::F, target, trait, geom;
     crs=GI.crs(geom), calc_extent=_False(), threaded
@@ -112,9 +112,9 @@ import{_ as s,c as i,o as a,a7 as t}from"./chunks/framework.k41oUgTf.js";const o
     end
     return _apply_inner(geom, geoms, crs, calc_extent)
 end
-function _apply_inner(geom, geoms, crs, calc_extent::_True)

Calculate the extent of the sub geometries

julia
    extent = mapreduce(GI.extent, Extents.union, geoms)

Return a new geometry of the same trait as geom, holding tnew geoms with crs and calcualted extent

julia
    return rebuild(geom, geoms; crs, extent)
+function _apply_inner(geom, geoms, crs, calc_extent::_True)

Calculate the extent of the sub geometries

julia
    extent = mapreduce(GI.extent, Extents.union, geoms)

Return a new geometry of the same trait as geom, holding the new geoms with crs and calculated extent

julia
    return rebuild(geom, geoms; crs, extent)
 end
-function _apply_inner(geom, geoms, crs, calc_extent::_False)

Return a new geometryof the same trait as geom, holding the new geoms with crs

julia
    return rebuild(geom, geoms; crs)
+function _apply_inner(geom, geoms, crs, calc_extent::_False)

Return a new geometry of the same trait as geom, holding the new geoms with crs

julia
    return rebuild(geom, geoms; crs)
 end

Fail loudly if we hit PointTrait without running f (after PointTrait there is no further to dig with _apply) @inline _apply(f, ::TraitTarget{Target}, trait::GI.PointTrait, geom; crs=nothing, kw...) where Target = throw(ArgumentError("target Target not found, but reached a PointTrait leaf")) Finally, these short methods are the main purpose of apply. The Trait is a subtype of the Target (or identical to it) So the Target is found. We apply f to geom and return it to previous _apply calls to be wrapped with the outer geometries/feature/featurecollection/array.

julia
_apply(f::F, ::TraitTarget{Target}, ::Trait, geom; crs=GI.crs(geom), kw...) where {F,Target,Trait<:Target} = f(geom)

Define some specific cases of this match to avoid method ambiguity

julia
for T in (
     GI.PointTrait, GI.LinearRing, GI.LineString,
     GI.MultiPoint, GI.FeatureTrait, GI.FeatureCollectionTrait
@@ -141,7 +141,7 @@ import{_ as s,c as i,o as a,a7 as t}from"./chunks/framework.k41oUgTf.js";const o
 end
 
 @inline _applyreduce(f::F, op::O, target, geom; threaded, init) where {F, O} =
-    _applyreduce(f, op, target, GI.trait(geom), geom; threaded, init)

Maybe use threads recucing over arrays

julia
@inline function _applyreduce(f::F, op::O, target, ::Nothing, A::AbstractArray; threaded, init) where {F, O}
+    _applyreduce(f, op, target, GI.trait(geom), geom; threaded, init)

Maybe use threads reducing over arrays

julia
@inline function _applyreduce(f::F, op::O, target, ::Nothing, A::AbstractArray; threaded, init) where {F, O}
     applyreduce_array(i) = _applyreduce(f, op, target, A[i]; threaded=_False(), init)
     _mapreducetasks(applyreduce_array, op, eachindex(A), threaded; init)
 end

Try to applyreduce over iterables

julia
@inline function _applyreduce(f::F, op::O, target, ::Nothing, iterable::IterableType; threaded, init) where {F, O, IterableType}
@@ -238,7 +238,7 @@ import{_ as s,c as i,o as a,a7 as t}from"./chunks/framework.k41oUgTf.js";const o
 
 All objects in \`components\` must have the same \`GeoInterface.trait\`.
 
-Ususally used in combination with \`flatten\`.
+Usually used in combination with \`flatten\`.
 """
 function reconstruct(geom, components)
     obj, iter = _reconstruct(geom, components)
@@ -298,14 +298,14 @@ import{_ as s,c as i,o as a,a7 as t}from"./chunks/framework.k41oUgTf.js";const o
     end
 end
 
-using Base.Threads: nthreads, @threads, @spawn

Threading utility, modified Mason Protters threading PSA run f over ntasks, where f recieves an AbstractArray/range of linear indices

julia
@inline function _maptasks(f::F, taskrange, threaded::_True)::Vector where F
+using Base.Threads: nthreads, @threads, @spawn

Threading utility, modified Mason Protters threading PSA run f over ntasks, where f receives an AbstractArray/range of linear indices

julia
@inline function _maptasks(f::F, taskrange, threaded::_True)::Vector where F
     ntasks = length(taskrange)

Customize this as needed. More tasks have more overhead, but better load balancing

julia
    tasks_per_thread = 2
     chunk_size = max(1, ntasks ÷ (tasks_per_thread * nthreads()))

partition the range into chunks

julia
    task_chunks = Iterators.partition(taskrange, chunk_size)

Map over the chunks

julia
    tasks = map(task_chunks) do chunk

Spawn a task to process this chunk

julia
        @spawn begin

Where we map f over the chunk indices

julia
            map(f, chunk)
         end
     end

Finally we join the results into a new vector

julia
    return mapreduce(fetch, vcat, tasks)
 end

Here we use the compiler directive @assume_effects :foldable to force the compiler to lookup through the closure. This alone makes e.g. flip 2.5x faster!

julia
Base.@assume_effects :foldable @inline function _maptasks(f::F, taskrange, threaded::_False)::Vector where F
     map(f, taskrange)
-end

Threading utility, modified Mason Protters threading PSA run f over ntasks, where f recieves an AbstractArray/range of linear indices

WARNING: this will not work for mean/median - only ops where grouping is possible

julia
@inline function _mapreducetasks(f::F, op, taskrange, threaded::_True; init) where F
+end

Threading utility, modified Mason Protters threading PSA run f over ntasks, where f receives an AbstractArray/range of linear indices

WARNING: this will not work for mean/median - only ops where grouping is possible

julia
@inline function _mapreducetasks(f::F, op, taskrange, threaded::_True; init) where F
     ntasks = length(taskrange)

Customize this as needed. More tasks have more overhead, but better load balancing

julia
    tasks_per_thread = 2
     chunk_size = max(1, ntasks ÷ (tasks_per_thread * nthreads()))

partition the range into chunks

julia
    task_chunks = Iterators.partition(taskrange, chunk_size)

Map over the chunks

julia
    tasks = map(task_chunks) do chunk

Spawn a task to process this chunk

julia
        @spawn begin

Where we map f over the chunk indices

julia
            mapreduce(f, op, chunk; init)
         end
diff --git a/previews/PR135/assets/source_primitives.md.B8mDJecN.lean.js b/previews/PR135/assets/source_primitives.md.4UCUXvfy.lean.js
similarity index 70%
rename from previews/PR135/assets/source_primitives.md.B8mDJecN.lean.js
rename to previews/PR135/assets/source_primitives.md.4UCUXvfy.lean.js
index 34fcc7108..cdc9e32a0 100644
--- a/previews/PR135/assets/source_primitives.md.B8mDJecN.lean.js
+++ b/previews/PR135/assets/source_primitives.md.4UCUXvfy.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as t}from"./chunks/framework.k41oUgTf.js";const o=JSON.parse('{"title":"Primitive functions","description":"","frontmatter":{},"headers":[],"relativePath":"source/primitives.md","filePath":"source/primitives.md","lastUpdated":null}'),n={name:"source/primitives.md"},h=t("",196),e=[h];function l(p,k,r,d,g,E){return a(),i("div",null,e)}const c=s(n,[["render",l]]);export{o as __pageData,c as default};
+import{_ as s,c as i,o as a,a7 as t}from"./chunks/framework.CONf0Rze.js";const o=JSON.parse('{"title":"Primitive functions","description":"","frontmatter":{},"headers":[],"relativePath":"source/primitives.md","filePath":"source/primitives.md","lastUpdated":null}'),n={name:"source/primitives.md"},h=t("",196),e=[h];function l(p,k,r,d,g,E){return a(),i("div",null,e)}const c=s(n,[["render",l]]);export{o as __pageData,c as default};
diff --git a/previews/PR135/assets/source_transformations_correction_closed_ring.md.D6ZEKMv-.js b/previews/PR135/assets/source_transformations_correction_closed_ring.md.CohSwGqX.js
similarity index 99%
rename from previews/PR135/assets/source_transformations_correction_closed_ring.md.D6ZEKMv-.js
rename to previews/PR135/assets/source_transformations_correction_closed_ring.md.CohSwGqX.js
index 9f674e315..a55478252 100644
--- a/previews/PR135/assets/source_transformations_correction_closed_ring.md.D6ZEKMv-.js
+++ b/previews/PR135/assets/source_transformations_correction_closed_ring.md.CohSwGqX.js
@@ -1,4 +1,4 @@
-import{_ as t,c as i,j as s,a,a7 as e,o as n}from"./chunks/framework.k41oUgTf.js";const Q=JSON.parse('{"title":"Closed Rings","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/closed_ring.md","filePath":"source/transformations/correction/closed_ring.md","lastUpdated":null}'),l={name:"source/transformations/correction/closed_ring.md"},h=e(`

Closed Rings

julia
export ClosedRing

A closed ring is a ring that has the same start and end point. This is a requirement for a valid polygon (technically, for a valid LinearRing). This correction is used to ensure that the polygon is valid.

The reason this operates on the polygon level is that several packages are loose about whether they return LinearRings (which is correct) or LineStrings (which is incorrect) for the contents of a polygon. Therefore, we decompose manually to ensure correctness.

Example

Many polygon providers do not close their polygons, which makes them invalid according to the specification. Quite a few geometry algorithms assume that polygons are closed, and leaving them open can lead to incorrect results!

For example, the following polygon is not valid:

julia
import GeoInterface as GI
+import{_ as t,c as i,j as s,a,a7 as e,o as n}from"./chunks/framework.CONf0Rze.js";const Q=JSON.parse('{"title":"Closed Rings","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/closed_ring.md","filePath":"source/transformations/correction/closed_ring.md","lastUpdated":null}'),l={name:"source/transformations/correction/closed_ring.md"},h=e(`

Closed Rings

julia
export ClosedRing

A closed ring is a ring that has the same start and end point. This is a requirement for a valid polygon (technically, for a valid LinearRing). This correction is used to ensure that the polygon is valid.

The reason this operates on the polygon level is that several packages are loose about whether they return LinearRings (which is correct) or LineStrings (which is incorrect) for the contents of a polygon. Therefore, we decompose manually to ensure correctness.

Example

Many polygon providers do not close their polygons, which makes them invalid according to the specification. Quite a few geometry algorithms assume that polygons are closed, and leaving them open can lead to incorrect results!

For example, the following polygon is not valid:

julia
import GeoInterface as GI
 polygon = GI.Polygon([[(0, 0), (1, 0), (1, 1), (0, 1)]])
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Int64, Int64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Int64, Int64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Int64, Int64}}, Nothing, Nothing}([(0, 0), (1, 0), (1, 1), (0, 1)], nothing, nothing)], nothing, nothing)

even though it will look correct when visualized, and indeed appears correct.

julia
import GeometryOps as GO
 GO.fix(polygon, corrections = [GO.ClosedRing()])
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}([(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 1.0), (0.0, 0.0)], nothing, nothing)], nothing, nothing)
`,12),p={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},k={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.357ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 600 453","aria-hidden":"true"},r=s("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[s("g",{"data-mml-node":"math"},[s("g",{"data-mml-node":"mi"},[s("path",{"data-c":"1D45B",d:"M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z",style:{"stroke-width":"3"}})])])],-1),o=[r],d=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"n")])],-1),g={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},c={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.186ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.254ex",height:"1.692ex",role:"img",focusable:"false",viewBox:"0 -666 2322.4 748","aria-hidden":"true"},E=e('',1),y=[E],u=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"n"),s("mo",null,"+"),s("mn",null,"1")])],-1),F=e(`

Implementation

julia
"""
     ClosedRing() <: GeometryCorrection
diff --git a/previews/PR135/assets/source_transformations_correction_closed_ring.md.D6ZEKMv-.lean.js b/previews/PR135/assets/source_transformations_correction_closed_ring.md.CohSwGqX.lean.js
similarity index 97%
rename from previews/PR135/assets/source_transformations_correction_closed_ring.md.D6ZEKMv-.lean.js
rename to previews/PR135/assets/source_transformations_correction_closed_ring.md.CohSwGqX.lean.js
index 4874b1696..02547e2b2 100644
--- a/previews/PR135/assets/source_transformations_correction_closed_ring.md.D6ZEKMv-.lean.js
+++ b/previews/PR135/assets/source_transformations_correction_closed_ring.md.CohSwGqX.lean.js
@@ -1 +1 @@
-import{_ as t,c as i,j as s,a,a7 as e,o as n}from"./chunks/framework.k41oUgTf.js";const Q=JSON.parse('{"title":"Closed Rings","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/closed_ring.md","filePath":"source/transformations/correction/closed_ring.md","lastUpdated":null}'),l={name:"source/transformations/correction/closed_ring.md"},h=e("",12),p={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},k={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.357ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 600 453","aria-hidden":"true"},r=s("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[s("g",{"data-mml-node":"math"},[s("g",{"data-mml-node":"mi"},[s("path",{"data-c":"1D45B",d:"M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z",style:{"stroke-width":"3"}})])])],-1),o=[r],d=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"n")])],-1),g={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},c={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.186ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.254ex",height:"1.692ex",role:"img",focusable:"false",viewBox:"0 -666 2322.4 748","aria-hidden":"true"},E=e("",1),y=[E],u=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"n"),s("mo",null,"+"),s("mn",null,"1")])],-1),F=e("",12);function m(C,_,v,T,b,f){return n(),i("div",null,[h,s("p",null,[a("You can see that the last point of the ring here is equal to the first point. For a polygon with "),s("mjx-container",p,[(n(),i("svg",k,o)),d]),a(" sides, there should be "),s("mjx-container",g,[(n(),i("svg",c,y)),u]),a(" vertices.")]),F])}const A=t(l,[["render",m]]);export{Q as __pageData,A as default};
+import{_ as t,c as i,j as s,a,a7 as e,o as n}from"./chunks/framework.CONf0Rze.js";const Q=JSON.parse('{"title":"Closed Rings","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/closed_ring.md","filePath":"source/transformations/correction/closed_ring.md","lastUpdated":null}'),l={name:"source/transformations/correction/closed_ring.md"},h=e("",12),p={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},k={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.025ex"},xmlns:"http://www.w3.org/2000/svg",width:"1.357ex",height:"1.025ex",role:"img",focusable:"false",viewBox:"0 -442 600 453","aria-hidden":"true"},r=s("g",{stroke:"currentColor",fill:"currentColor","stroke-width":"0",transform:"scale(1,-1)"},[s("g",{"data-mml-node":"math"},[s("g",{"data-mml-node":"mi"},[s("path",{"data-c":"1D45B",d:"M21 287Q22 293 24 303T36 341T56 388T89 425T135 442Q171 442 195 424T225 390T231 369Q231 367 232 367L243 378Q304 442 382 442Q436 442 469 415T503 336T465 179T427 52Q427 26 444 26Q450 26 453 27Q482 32 505 65T540 145Q542 153 560 153Q580 153 580 145Q580 144 576 130Q568 101 554 73T508 17T439 -10Q392 -10 371 17T350 73Q350 92 386 193T423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 180T152 343Q153 348 153 366Q153 405 129 405Q91 405 66 305Q60 285 60 284Q58 278 41 278H27Q21 284 21 287Z",style:{"stroke-width":"3"}})])])],-1),o=[r],d=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"n")])],-1),g={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},c={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.186ex"},xmlns:"http://www.w3.org/2000/svg",width:"5.254ex",height:"1.692ex",role:"img",focusable:"false",viewBox:"0 -666 2322.4 748","aria-hidden":"true"},E=e("",1),y=[E],u=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"n"),s("mo",null,"+"),s("mn",null,"1")])],-1),F=e("",12);function m(C,_,v,T,b,f){return n(),i("div",null,[h,s("p",null,[a("You can see that the last point of the ring here is equal to the first point. For a polygon with "),s("mjx-container",p,[(n(),i("svg",k,o)),d]),a(" sides, there should be "),s("mjx-container",g,[(n(),i("svg",c,y)),u]),a(" vertices.")]),F])}const A=t(l,[["render",m]]);export{Q as __pageData,A as default};
diff --git a/previews/PR135/assets/source_transformations_correction_geometry_correction.md.BEDLeelw.js b/previews/PR135/assets/source_transformations_correction_geometry_correction.md.gAjUHu5U.js
similarity index 82%
rename from previews/PR135/assets/source_transformations_correction_geometry_correction.md.BEDLeelw.js
rename to previews/PR135/assets/source_transformations_correction_geometry_correction.md.gAjUHu5U.js
index b0beb23ee..c70962f6e 100644
--- a/previews/PR135/assets/source_transformations_correction_geometry_correction.md.BEDLeelw.js
+++ b/previews/PR135/assets/source_transformations_correction_geometry_correction.md.gAjUHu5U.js
@@ -1,4 +1,4 @@
-import{_ as i,c as s,o as e,a7 as t}from"./chunks/framework.k41oUgTf.js";const g=JSON.parse('{"title":"Geometry Corrections","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/geometry_correction.md","filePath":"source/transformations/correction/geometry_correction.md","lastUpdated":null}'),a={name:"source/transformations/correction/geometry_correction.md"},n=t(`

Geometry Corrections

julia
export fix

This file simply defines the GeometryCorrection abstract type, and the interface that any GeometryCorrection must implement.

A geometry correction is a transformation that is applied to a geometry to correct it in some way.

For example, a ClosedRing correction might be applied to a Polygon to ensure that its exterior ring is closed.

Interface

All GeometryCorrections are callable structs which, when called, apply the correction to the given geometry, and return either a copy or the original geometry (if nothing needed to be corrected).

See below for the full interface specification.

# GeometryOps.GeometryCorrectionType.
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source


Any geometry correction must implement the interface as given above.

julia
"""
+import{_ as i,c as s,o as e,a7 as t}from"./chunks/framework.CONf0Rze.js";const g=JSON.parse('{"title":"Geometry Corrections","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/geometry_correction.md","filePath":"source/transformations/correction/geometry_correction.md","lastUpdated":null}'),a={name:"source/transformations/correction/geometry_correction.md"},n=t(`

Geometry Corrections

julia
export fix

This file simply defines the GeometryCorrection abstract type, and the interface that any GeometryCorrection must implement.

A geometry correction is a transformation that is applied to a geometry to correct it in some way.

For example, a ClosedRing correction might be applied to a Polygon to ensure that its exterior ring is closed.

Interface

All GeometryCorrections are callable structs which, when called, apply the correction to the given geometry, and return either a copy or the original geometry (if nothing needed to be corrected).

See below for the full interface specification.

# GeometryOps.GeometryCorrectionType.
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source


Any geometry correction must implement the interface as given above.

julia
"""
     abstract type GeometryCorrection
 
 This abstract type represents a geometry correction.
@@ -28,4 +28,4 @@ import{_ as i,c as s,o as e,a7 as t}from"./chunks/framework.k41oUgTf.js";const g
         final_geometry = apply(net_function, Trait, final_geometry; kwargs...)
     end
     return final_geometry
-end

Available corrections

# GeometryOps.ClosedRingType.
julia
ClosedRing() <: GeometryCorrection

This correction ensures that a polygon's exterior and interior rings are closed.

It can be called on any geometry correction as usual.

See also GeometryCorrection.

source


# GeometryOps.DiffIntersectingPolygonsType.
julia
DiffIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygons included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be made nonintersecting through the difference operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area. See also GeometryCorrection, UnionIntersectingPolygons.

source


# GeometryOps.GeometryCorrectionType.
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source


# GeometryOps.UnionIntersectingPolygonsType.
julia
UnionIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygon's included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be combined through the union operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area.

See also GeometryCorrection.

source



This page was generated using Literate.jl.

`,23),r=[n];function o(l,p,h,c,k,d){return e(),s("div",null,r)}const m=i(a,[["render",o]]);export{g as __pageData,m as default}; +end

Available corrections

# GeometryOps.ClosedRingType.
julia
ClosedRing() <: GeometryCorrection

This correction ensures that a polygon's exterior and interior rings are closed.

It can be called on any geometry correction as usual.

See also GeometryCorrection.

source


# GeometryOps.DiffIntersectingPolygonsType.
julia
DiffIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygons included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be made nonintersecting through the difference operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area. See also GeometryCorrection, UnionIntersectingPolygons.

source


# GeometryOps.GeometryCorrectionType.
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source


# GeometryOps.UnionIntersectingPolygonsType.
julia
UnionIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygon's included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be combined through the union operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area.

See also GeometryCorrection.

source



This page was generated using Literate.jl.

`,23),r=[n];function o(l,p,h,c,k,d){return e(),s("div",null,r)}const m=i(a,[["render",o]]);export{g as __pageData,m as default}; diff --git a/previews/PR135/assets/source_transformations_correction_geometry_correction.md.BEDLeelw.lean.js b/previews/PR135/assets/source_transformations_correction_geometry_correction.md.gAjUHu5U.lean.js similarity index 76% rename from previews/PR135/assets/source_transformations_correction_geometry_correction.md.BEDLeelw.lean.js rename to previews/PR135/assets/source_transformations_correction_geometry_correction.md.gAjUHu5U.lean.js index c947bbaba..ea9e830ae 100644 --- a/previews/PR135/assets/source_transformations_correction_geometry_correction.md.BEDLeelw.lean.js +++ b/previews/PR135/assets/source_transformations_correction_geometry_correction.md.gAjUHu5U.lean.js @@ -1 +1 @@ -import{_ as i,c as s,o as e,a7 as t}from"./chunks/framework.k41oUgTf.js";const g=JSON.parse('{"title":"Geometry Corrections","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/geometry_correction.md","filePath":"source/transformations/correction/geometry_correction.md","lastUpdated":null}'),a={name:"source/transformations/correction/geometry_correction.md"},n=t("",23),r=[n];function o(l,p,h,c,k,d){return e(),s("div",null,r)}const m=i(a,[["render",o]]);export{g as __pageData,m as default}; +import{_ as i,c as s,o as e,a7 as t}from"./chunks/framework.CONf0Rze.js";const g=JSON.parse('{"title":"Geometry Corrections","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/geometry_correction.md","filePath":"source/transformations/correction/geometry_correction.md","lastUpdated":null}'),a={name:"source/transformations/correction/geometry_correction.md"},n=t("",23),r=[n];function o(l,p,h,c,k,d){return e(),s("div",null,r)}const m=i(a,[["render",o]]);export{g as __pageData,m as default}; diff --git a/previews/PR135/assets/source_transformations_correction_intersecting_polygons.md.Df5YX__2.js b/previews/PR135/assets/source_transformations_correction_intersecting_polygons.md.Dp-0YCkQ.js similarity index 95% rename from previews/PR135/assets/source_transformations_correction_intersecting_polygons.md.Df5YX__2.js rename to previews/PR135/assets/source_transformations_correction_intersecting_polygons.md.Dp-0YCkQ.js index 71af5fa97..b2e21dbb9 100644 --- a/previews/PR135/assets/source_transformations_correction_intersecting_polygons.md.Df5YX__2.js +++ b/previews/PR135/assets/source_transformations_correction_intersecting_polygons.md.Dp-0YCkQ.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const y=JSON.parse('{"title":"Intersecting Polygons","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/intersecting_polygons.md","filePath":"source/transformations/correction/intersecting_polygons.md","lastUpdated":null}'),l={name:"source/transformations/correction/intersecting_polygons.md"},t=n(`

Intersecting Polygons

julia
export UnionIntersectingPolygons

If the sub-polygons of a multipolygon are intersecting, this makes them invalid according to specification. Each sub-polygon of a multipolygon being disjoint (other than by a single point) is a requirment for a valid multipolygon. However, different libraries may achieve this in different ways.

For example, taking the union of all sub-polygons of a multipolygon will create a new multipolygon where each sub-polygon is disjoint. This can be done with the UnionIntersectingPolygons correction.

The reason this operates on a multipolygon level is that it is easy for users to mistakenly create multipolygon's that overlap, which can then be detrimental to polygon clipping performance and even create wrong answers.

Example

Multipolygon providers may not check that the polygons making up their multipolygons do not intersect, which makes them invalid according to the specification.

For example, the following multipolygon is not valid:

julia
import GeoInterface as GI
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const y=JSON.parse('{"title":"Intersecting Polygons","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/intersecting_polygons.md","filePath":"source/transformations/correction/intersecting_polygons.md","lastUpdated":null}'),l={name:"source/transformations/correction/intersecting_polygons.md"},t=n(`

Intersecting Polygons

julia
export UnionIntersectingPolygons

If the sub-polygons of a multipolygon are intersecting, this makes them invalid according to specification. Each sub-polygon of a multipolygon being disjoint (other than by a single point) is a requirement for a valid multipolygon. However, different libraries may achieve this in different ways.

For example, taking the union of all sub-polygons of a multipolygon will create a new multipolygon where each sub-polygon is disjoint. This can be done with the UnionIntersectingPolygons correction.

The reason this operates on a multipolygon level is that it is easy for users to mistakenly create multipolygon's that overlap, which can then be detrimental to polygon clipping performance and even create wrong answers.

Example

Multipolygon providers may not check that the polygons making up their multipolygons do not intersect, which makes them invalid according to the specification.

For example, the following multipolygon is not valid:

julia
import GeoInterface as GI
 polygon = GI.Polygon([[(0.0, 0.0), (3.0, 0.0), (3.0, 3.0), (0.0, 3.0), (0.0, 0.0)]])
 multipolygon = GI.MultiPolygon([polygon, polygon])
GeoInterface.Wrappers.MultiPolygon{false, false, Vector{GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}[GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}([(0.0, 0.0), (3.0, 0.0), (3.0, 3.0), (0.0, 3.0), (0.0, 0.0)], nothing, nothing)], nothing, nothing), GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}([(0.0, 0.0), (3.0, 0.0), (3.0, 3.0), (0.0, 3.0), (0.0, 0.0)], nothing, nothing)], nothing, nothing)], nothing, nothing)

given that the two sub-polygons are the exact same shape.

julia
import GeometryOps as GO
 GO.fix(multipolygon, corrections = [GO.UnionIntersectingPolygons()])
GeoInterface.Wrappers.MultiPolygon{false, false, Vector{GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}[GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}([(0.0, 0.0), (3.0, 0.0), (3.0, 3.0), (0.0, 3.0), (0.0, 0.0)], nothing, nothing)], nothing, nothing)], nothing, nothing)

You can see that the the multipolygon now only contains one sub-polygon, rather than the two identical ones provided.

Implementation

julia
"""
@@ -17,7 +17,6 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const y
 
 function (::UnionIntersectingPolygons)(::GI.MultiPolygonTrait, multipoly)
     union_multipoly = tuples(multipoly)
-    @show union_multipoly
     n_polys = GI.npolygon(multipoly)
     if n_polys > 1
         keep_idx = trues(n_polys)  # keep track of sub-polygons to remove

Combine any sub-polygons that intersect

julia
        for (curr_idx, _) in Iterators.filter(last, Iterators.enumerate(keep_idx))
diff --git a/previews/PR135/assets/source_transformations_correction_intersecting_polygons.md.Df5YX__2.lean.js b/previews/PR135/assets/source_transformations_correction_intersecting_polygons.md.Dp-0YCkQ.lean.js
similarity index 76%
rename from previews/PR135/assets/source_transformations_correction_intersecting_polygons.md.Df5YX__2.lean.js
rename to previews/PR135/assets/source_transformations_correction_intersecting_polygons.md.Dp-0YCkQ.lean.js
index aac834c27..4a211b534 100644
--- a/previews/PR135/assets/source_transformations_correction_intersecting_polygons.md.Df5YX__2.lean.js
+++ b/previews/PR135/assets/source_transformations_correction_intersecting_polygons.md.Dp-0YCkQ.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const y=JSON.parse('{"title":"Intersecting Polygons","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/intersecting_polygons.md","filePath":"source/transformations/correction/intersecting_polygons.md","lastUpdated":null}'),l={name:"source/transformations/correction/intersecting_polygons.md"},t=n("",22),h=[t];function p(e,k,r,g,o,E){return a(),i("div",null,h)}const c=s(l,[["render",p]]);export{y as __pageData,c as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const y=JSON.parse('{"title":"Intersecting Polygons","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/correction/intersecting_polygons.md","filePath":"source/transformations/correction/intersecting_polygons.md","lastUpdated":null}'),l={name:"source/transformations/correction/intersecting_polygons.md"},t=n("",22),h=[t];function p(e,k,r,g,o,E){return a(),i("div",null,h)}const c=s(l,[["render",p]]);export{y as __pageData,c as default};
diff --git a/previews/PR135/assets/source_transformations_extent.md.Dg5_Nny1.js b/previews/PR135/assets/source_transformations_extent.md.aqCZuaCr.js
similarity index 95%
rename from previews/PR135/assets/source_transformations_extent.md.Dg5_Nny1.js
rename to previews/PR135/assets/source_transformations_extent.md.aqCZuaCr.js
index 0fc0a1ee9..6b0c94ff4 100644
--- a/previews/PR135/assets/source_transformations_extent.md.Dg5_Nny1.js
+++ b/previews/PR135/assets/source_transformations_extent.md.aqCZuaCr.js
@@ -1,4 +1,4 @@
-import{_ as s,c as e,o as a,a7 as t}from"./chunks/framework.k41oUgTf.js";const u=JSON.parse('{"title":"Extent embedding","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/extent.md","filePath":"source/transformations/extent.md","lastUpdated":null}'),n={name:"source/transformations/extent.md"},i=t(`

Extent embedding

julia
"""
+import{_ as s,c as e,o as a,a7 as t}from"./chunks/framework.CONf0Rze.js";const u=JSON.parse('{"title":"Extent embedding","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/extent.md","filePath":"source/transformations/extent.md","lastUpdated":null}'),n={name:"source/transformations/extent.md"},i=t(`

Extent embedding

julia
"""
     embed_extent(obj)
 
 Recursively wrap the object with a GeoInterface.jl geometry,
diff --git a/previews/PR135/assets/source_transformations_extent.md.Dg5_Nny1.lean.js b/previews/PR135/assets/source_transformations_extent.md.aqCZuaCr.lean.js
similarity index 72%
rename from previews/PR135/assets/source_transformations_extent.md.Dg5_Nny1.lean.js
rename to previews/PR135/assets/source_transformations_extent.md.aqCZuaCr.lean.js
index 8949b9826..ab8c714a1 100644
--- a/previews/PR135/assets/source_transformations_extent.md.Dg5_Nny1.lean.js
+++ b/previews/PR135/assets/source_transformations_extent.md.aqCZuaCr.lean.js
@@ -1 +1 @@
-import{_ as s,c as e,o as a,a7 as t}from"./chunks/framework.k41oUgTf.js";const u=JSON.parse('{"title":"Extent embedding","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/extent.md","filePath":"source/transformations/extent.md","lastUpdated":null}'),n={name:"source/transformations/extent.md"},i=t("",6),l=[i];function p(r,h,d,o,c,k){return a(),e("div",null,l)}const m=s(n,[["render",p]]);export{u as __pageData,m as default};
+import{_ as s,c as e,o as a,a7 as t}from"./chunks/framework.CONf0Rze.js";const u=JSON.parse('{"title":"Extent embedding","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/extent.md","filePath":"source/transformations/extent.md","lastUpdated":null}'),n={name:"source/transformations/extent.md"},i=t("",6),l=[i];function p(r,h,d,o,c,k){return a(),e("div",null,l)}const m=s(n,[["render",p]]);export{u as __pageData,m as default};
diff --git a/previews/PR135/assets/source_transformations_flip.md.B6-KSgw2.js b/previews/PR135/assets/source_transformations_flip.md.D247Ejcp.js
similarity index 97%
rename from previews/PR135/assets/source_transformations_flip.md.B6-KSgw2.js
rename to previews/PR135/assets/source_transformations_flip.md.D247Ejcp.js
index ec1f2dae6..8e48e583a 100644
--- a/previews/PR135/assets/source_transformations_flip.md.B6-KSgw2.js
+++ b/previews/PR135/assets/source_transformations_flip.md.D247Ejcp.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const y=JSON.parse('{"title":"Coordinate flipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/flip.md","filePath":"source/transformations/flip.md","lastUpdated":null}'),p={name:"source/transformations/flip.md"},t=n(`

Coordinate flipping

This is a simple example of how to use the apply functionality in a function, by flipping the x and y coordinates of a geometry.

julia
"""
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const y=JSON.parse('{"title":"Coordinate flipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/flip.md","filePath":"source/transformations/flip.md","lastUpdated":null}'),p={name:"source/transformations/flip.md"},t=n(`

Coordinate flipping

This is a simple example of how to use the apply functionality in a function, by flipping the x and y coordinates of a geometry.

julia
"""
     flip(obj)
 
 Swap all of the x and y coordinates in obj, otherwise
diff --git a/previews/PR135/assets/source_transformations_flip.md.B6-KSgw2.lean.js b/previews/PR135/assets/source_transformations_flip.md.D247Ejcp.lean.js
similarity index 72%
rename from previews/PR135/assets/source_transformations_flip.md.B6-KSgw2.lean.js
rename to previews/PR135/assets/source_transformations_flip.md.D247Ejcp.lean.js
index 3b118575e..fe555653e 100644
--- a/previews/PR135/assets/source_transformations_flip.md.B6-KSgw2.lean.js
+++ b/previews/PR135/assets/source_transformations_flip.md.D247Ejcp.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const y=JSON.parse('{"title":"Coordinate flipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/flip.md","filePath":"source/transformations/flip.md","lastUpdated":null}'),p={name:"source/transformations/flip.md"},t=n("",5),l=[t];function h(e,k,r,d,o,g){return a(),i("div",null,l)}const c=s(p,[["render",h]]);export{y as __pageData,c as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const y=JSON.parse('{"title":"Coordinate flipping","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/flip.md","filePath":"source/transformations/flip.md","lastUpdated":null}'),p={name:"source/transformations/flip.md"},t=n("",5),l=[t];function h(e,k,r,d,o,g){return a(),i("div",null,l)}const c=s(p,[["render",h]]);export{y as __pageData,c as default};
diff --git a/previews/PR135/assets/source_transformations_reproject.md.oTc7A1Wp.js b/previews/PR135/assets/source_transformations_reproject.md.oTc7A1Wp.js
deleted file mode 100644
index ea2aa9c75..000000000
--- a/previews/PR135/assets/source_transformations_reproject.md.oTc7A1Wp.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as s,c as i,o as a,a7 as e}from"./chunks/framework.k41oUgTf.js";const y=JSON.parse('{"title":"Geometry reprojection","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/reproject.md","filePath":"source/transformations/reproject.md","lastUpdated":null}'),n={name:"source/transformations/reproject.md"},t=e('

Geometry reprojection

julia
export reproject

This file is pretty simple - it simply reprojects a geometry pointwise from one CRS to another. It uses the Proj package for the transformation, but this could be moved to an extension if needed.

Note that the actual implementation is in the GeometryOpsProjExt extension module.

This works using the apply functionality.

julia
"""\n    reproject(geometry; source_crs, target_crs, transform, always_xy, time)\n    reproject(geometry, source_crs, target_crs; always_xy, time)\n    reproject(geometry, transform; always_xy, time)\n\nReproject any GeoInterface.jl compatible `geometry` from `source_crs` to `target_crs`.\n\nThe returned object will be constructed from `GeoInterface.WrapperGeometry`\ngeometries, wrapping views of a `Vector{Proj.Point{D}}`, where `D` is the dimension.\n\n!!! tip\n    The `Proj.jl` package must be loaded for this method to work,\n    since it is implemented in a package extension.\n\n# Arguments\n\n- `geometry`: Any GeoInterface.jl compatible geometries.\n- `source_crs`: the source coordinate referece system, as a GeoFormatTypes.jl object or a string.\n- `target_crs`: the target coordinate referece system, as a GeoFormatTypes.jl object or a string.\n\nIf these a passed as keywords, `transform` will take priority.\nWithout it `target_crs` is always needed, and `source_crs` is\nneeded if it is not retreivable from the geometry with `GeoInterface.crs(geometry)`.\n\n# Keywords\n\n- `always_xy`: force x, y coordinate order, `true` by default.\n    `false` will expect and return points in the crs coordinate order.\n- `time`: the time for the coordinates. `Inf` by default.\n$APPLY_KEYWORDS\n"""\nfunction reproject end

Method error handling

We also inject a method error handler, which prints a suggestion if the Proj extension is not loaded.

julia
function _reproject_error_hinter(io, exc, argtypes, kwargs)\n    if isnothing(Base.get_extension(GeometryOps, :GeometryOpsProjExt)) && exc.f == reproject\n        print(io, "\\n\\nThe `reproject` method requires the Proj.jl package to be explicitly loaded.\\n")\n        print(io, "You can do this by simply typing ")\n        printstyled(io, "using Proj"; color = :cyan, bold = true)\n        println(io, " in your REPL, \\nor otherwise loading Proj.jl via using or import.")\n    else # this is a more general error\n        nothing\n    end\nend

This page was generated using Literate.jl.

',11),p=[t];function l(r,h,o,k,d,c){return a(),i("div",null,p)}const F=s(n,[["render",l]]);export{y as __pageData,F as default}; diff --git a/previews/PR135/assets/source_transformations_reproject.md.plsPtFYv.js b/previews/PR135/assets/source_transformations_reproject.md.plsPtFYv.js new file mode 100644 index 000000000..4334b9baa --- /dev/null +++ b/previews/PR135/assets/source_transformations_reproject.md.plsPtFYv.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a7 as e}from"./chunks/framework.CONf0Rze.js";const y=JSON.parse('{"title":"Geometry reprojection","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/reproject.md","filePath":"source/transformations/reproject.md","lastUpdated":null}'),n={name:"source/transformations/reproject.md"},t=e('

Geometry reprojection

julia
export reproject

This file is pretty simple - it simply reprojects a geometry pointwise from one CRS to another. It uses the Proj package for the transformation, but this could be moved to an extension if needed.

Note that the actual implementation is in the GeometryOpsProjExt extension module.

This works using the apply functionality.

julia
"""\n    reproject(geometry; source_crs, target_crs, transform, always_xy, time)\n    reproject(geometry, source_crs, target_crs; always_xy, time)\n    reproject(geometry, transform; always_xy, time)\n\nReproject any GeoInterface.jl compatible `geometry` from `source_crs` to `target_crs`.\n\nThe returned object will be constructed from `GeoInterface.WrapperGeometry`\ngeometries, wrapping views of a `Vector{Proj.Point{D}}`, where `D` is the dimension.\n\n!!! tip\n    The `Proj.jl` package must be loaded for this method to work,\n    since it is implemented in a package extension.\n\n# Arguments\n\n- `geometry`: Any GeoInterface.jl compatible geometries.\n- `source_crs`: the source coordinate reference system, as a GeoFormatTypes.jl object or a string.\n- `target_crs`: the target coordinate reference system, as a GeoFormatTypes.jl object or a string.\n\nIf these a passed as keywords, `transform` will take priority.\nWithout it `target_crs` is always needed, and `source_crs` is\nneeded if it is not retrievable from the geometry with `GeoInterface.crs(geometry)`.\n\n# Keywords\n\n- `always_xy`: force x, y coordinate order, `true` by default.\n    `false` will expect and return points in the crs coordinate order.\n- `time`: the time for the coordinates. `Inf` by default.\n$APPLY_KEYWORDS\n"""\nfunction reproject end

Method error handling

We also inject a method error handler, which prints a suggestion if the Proj extension is not loaded.

julia
function _reproject_error_hinter(io, exc, argtypes, kwargs)\n    if isnothing(Base.get_extension(GeometryOps, :GeometryOpsProjExt)) && exc.f == reproject\n        print(io, "\\n\\nThe `reproject` method requires the Proj.jl package to be explicitly loaded.\\n")\n        print(io, "You can do this by simply typing ")\n        printstyled(io, "using Proj"; color = :cyan, bold = true)\n        println(io, " in your REPL, \\nor otherwise loading Proj.jl via using or import.")\n    else # this is a more general error\n        nothing\n    end\nend

This page was generated using Literate.jl.

',11),p=[t];function l(r,h,o,k,d,c){return a(),i("div",null,p)}const F=s(n,[["render",l]]);export{y as __pageData,F as default}; diff --git a/previews/PR135/assets/source_transformations_reproject.md.oTc7A1Wp.lean.js b/previews/PR135/assets/source_transformations_reproject.md.plsPtFYv.lean.js similarity index 73% rename from previews/PR135/assets/source_transformations_reproject.md.oTc7A1Wp.lean.js rename to previews/PR135/assets/source_transformations_reproject.md.plsPtFYv.lean.js index 8313bbe6e..ccf18badf 100644 --- a/previews/PR135/assets/source_transformations_reproject.md.oTc7A1Wp.lean.js +++ b/previews/PR135/assets/source_transformations_reproject.md.plsPtFYv.lean.js @@ -1 +1 @@ -import{_ as s,c as i,o as a,a7 as e}from"./chunks/framework.k41oUgTf.js";const y=JSON.parse('{"title":"Geometry reprojection","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/reproject.md","filePath":"source/transformations/reproject.md","lastUpdated":null}'),n={name:"source/transformations/reproject.md"},t=e("",11),p=[t];function l(r,h,o,k,d,c){return a(),i("div",null,p)}const F=s(n,[["render",l]]);export{y as __pageData,F as default}; +import{_ as s,c as i,o as a,a7 as e}from"./chunks/framework.CONf0Rze.js";const y=JSON.parse('{"title":"Geometry reprojection","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/reproject.md","filePath":"source/transformations/reproject.md","lastUpdated":null}'),n={name:"source/transformations/reproject.md"},t=e("",11),p=[t];function l(r,h,o,k,d,c){return a(),i("div",null,p)}const F=s(n,[["render",l]]);export{y as __pageData,F as default}; diff --git a/previews/PR135/assets/source_transformations_segmentize.md.2rQJGEWB.js b/previews/PR135/assets/source_transformations_segmentize.md.DnUWdzb5.js similarity index 99% rename from previews/PR135/assets/source_transformations_segmentize.md.2rQJGEWB.js rename to previews/PR135/assets/source_transformations_segmentize.md.DnUWdzb5.js index 35b47e0a7..f492ffc96 100644 --- a/previews/PR135/assets/source_transformations_segmentize.md.2rQJGEWB.js +++ b/previews/PR135/assets/source_transformations_segmentize.md.DnUWdzb5.js @@ -1,4 +1,4 @@ -import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h="/GeometryOps.jl/previews/PR135/assets/uugjisc.BOOG5oTW.png",t="/GeometryOps.jl/previews/PR135/assets/nyoicmp.ClueNz2m.png",c=JSON.parse('{"title":"Segmentize","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/segmentize.md","filePath":"source/transformations/segmentize.md","lastUpdated":null}'),e={name:"source/transformations/segmentize.md"},l=n(`

Segmentize

julia
export segmentize
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const h="/GeometryOps.jl/previews/PR135/assets/afsyzdr.BOOG5oTW.png",t="/GeometryOps.jl/previews/PR135/assets/qfveqll.DPlfA76p.png",c=JSON.parse('{"title":"Segmentize","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/segmentize.md","filePath":"source/transformations/segmentize.md","lastUpdated":null}'),e={name:"source/transformations/segmentize.md"},l=n(`

Segmentize

julia
export segmentize
 export LinearSegments, GeodesicSegments

This function "segmentizes" or "densifies" a geometry by adding extra vertices to the geometry so that no segment is longer than a given distance. This is useful for plotting geometries with a limited number of vertices, or for ensuring that a geometry is not too "coarse" for a given application.

Info

We plan to add interpolated segmentization from DataInterpolations.jl in the future, which will be available to any vector of point-like objects.

For now, this function only works on 2D geometries. We will also support 3D geometries, as well as measure interpolation, in the future.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 rectangle = GI.Wrappers.Polygon([[(0.0, 50.0), (7.071, 57.07), (0, 64.14), (-7.07, 57.07), (0.0, 50.0)]])
 linear = GO.segmentize(rectangle; max_distance = 5)
diff --git a/previews/PR135/assets/source_transformations_segmentize.md.2rQJGEWB.lean.js b/previews/PR135/assets/source_transformations_segmentize.md.DnUWdzb5.lean.js
similarity index 57%
rename from previews/PR135/assets/source_transformations_segmentize.md.2rQJGEWB.lean.js
rename to previews/PR135/assets/source_transformations_segmentize.md.DnUWdzb5.lean.js
index 58c158509..8923fec8d 100644
--- a/previews/PR135/assets/source_transformations_segmentize.md.2rQJGEWB.lean.js
+++ b/previews/PR135/assets/source_transformations_segmentize.md.DnUWdzb5.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h="/GeometryOps.jl/previews/PR135/assets/uugjisc.BOOG5oTW.png",t="/GeometryOps.jl/previews/PR135/assets/nyoicmp.ClueNz2m.png",c=JSON.parse('{"title":"Segmentize","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/segmentize.md","filePath":"source/transformations/segmentize.md","lastUpdated":null}'),e={name:"source/transformations/segmentize.md"},l=n("",34),k=[l];function p(r,E,d,g,y,o){return a(),i("div",null,k)}const C=s(e,[["render",p]]);export{c as __pageData,C as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const h="/GeometryOps.jl/previews/PR135/assets/afsyzdr.BOOG5oTW.png",t="/GeometryOps.jl/previews/PR135/assets/qfveqll.DPlfA76p.png",c=JSON.parse('{"title":"Segmentize","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/segmentize.md","filePath":"source/transformations/segmentize.md","lastUpdated":null}'),e={name:"source/transformations/segmentize.md"},l=n("",34),k=[l];function p(r,E,d,g,y,o){return a(),i("div",null,k)}const C=s(e,[["render",p]]);export{c as __pageData,C as default};
diff --git a/previews/PR135/assets/source_transformations_simplify.md.Bc-qtAXt.lean.js b/previews/PR135/assets/source_transformations_simplify.md.Bc-qtAXt.lean.js
deleted file mode 100644
index 4d8497156..000000000
--- a/previews/PR135/assets/source_transformations_simplify.md.Bc-qtAXt.lean.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h="/GeometryOps.jl/previews/PR135/assets/rsijhao.Bglvb-jp.png",l="/GeometryOps.jl/previews/PR135/assets/tmmmngr.B94PsR1K.png",k="/GeometryOps.jl/previews/PR135/assets/uywhdfm.CbsJ8bL8.png",t="/GeometryOps.jl/previews/PR135/assets/goeuznk.8ErH1nVM.png",u=JSON.parse('{"title":"Geometry simplification","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/simplify.md","filePath":"source/transformations/simplify.md","lastUpdated":null}'),p={name:"source/transformations/simplify.md"},e=n("",71),E=[e];function r(d,g,y,F,o,c){return a(),i("div",null,E)}const D=s(p,[["render",r]]);export{u as __pageData,D as default};
diff --git a/previews/PR135/assets/source_transformations_simplify.md.Bc-qtAXt.js b/previews/PR135/assets/source_transformations_simplify.md.k2EFW9YY.js
similarity index 98%
rename from previews/PR135/assets/source_transformations_simplify.md.Bc-qtAXt.js
rename to previews/PR135/assets/source_transformations_simplify.md.k2EFW9YY.js
index 04ce2ce16..5ded4b212 100644
--- a/previews/PR135/assets/source_transformations_simplify.md.Bc-qtAXt.js
+++ b/previews/PR135/assets/source_transformations_simplify.md.k2EFW9YY.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h="/GeometryOps.jl/previews/PR135/assets/rsijhao.Bglvb-jp.png",l="/GeometryOps.jl/previews/PR135/assets/tmmmngr.B94PsR1K.png",k="/GeometryOps.jl/previews/PR135/assets/uywhdfm.CbsJ8bL8.png",t="/GeometryOps.jl/previews/PR135/assets/goeuznk.8ErH1nVM.png",u=JSON.parse('{"title":"Geometry simplification","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/simplify.md","filePath":"source/transformations/simplify.md","lastUpdated":null}'),p={name:"source/transformations/simplify.md"},e=n(`

Geometry simplification

This file holds implementations for the RadialDistance, Douglas-Peucker, and Visvalingam-Whyatt algorithms for simplifying geometries (specifically for polygons and lines).

The GEOS extension also allows for GEOS's topology preserving simplification as well as Douglas-Peucker simplification implemented in GEOS. Call this by passing GEOS(; method = :TopologyPreserve) or GEOS(; method = :DouglasPeucker) to the algorithm.

Examples

A quick and dirty example is:

julia
using Makie, GeoInterfaceMakie
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const h="/GeometryOps.jl/previews/PR135/assets/limmhqq.Bglvb-jp.png",l="/GeometryOps.jl/previews/PR135/assets/yygelii.B94PsR1K.png",k="/GeometryOps.jl/previews/PR135/assets/tzjojwg.DvOK4aMR.png",t="/GeometryOps.jl/previews/PR135/assets/xqlfxjv.AayN5YeI.png",u=JSON.parse('{"title":"Geometry simplification","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/simplify.md","filePath":"source/transformations/simplify.md","lastUpdated":null}'),p={name:"source/transformations/simplify.md"},e=n(`

Geometry simplification

This file holds implementations for the RadialDistance, Douglas-Peucker, and Visvalingam-Whyatt algorithms for simplifying geometries (specifically for polygons and lines).

The GEOS extension also allows for GEOS's topology preserving simplification as well as Douglas-Peucker simplification implemented in GEOS. Call this by passing GEOS(; method = :TopologyPreserve) or GEOS(; method = :DouglasPeucker) to the algorithm.

Examples

A quick and dirty example is:

julia
using Makie, GeoInterfaceMakie
 import GeoInterface as GI
 import GeometryOps as GO
 
@@ -12,9 +12,10 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h
 f

Benchmark

We benchmark these methods against LibGEOS's simplify implementation, which uses the Douglas-Peucker algorithm.

julia
using BenchmarkTools, Chairmarks, GeoJSON, CairoMakie
 import GeometryOps as GO, LibGEOS as LG, GeoInterface as GI
 using CoordinateTransformations
+using NaturalEarth
 lg_and_go(geometry) = (GI.convert(LG, geometry), GO.tuples(geometry))
 # Load in the Natural Earth admin GeoJSON, then extract the USA's geometry
-fc = GeoJSON.read(read(download("https://rawcdn.githack.com/nvkelso/natural-earth-vector/ca96624a56bd078437bca8184e78163e5039ad19/geojson/ne_10m_admin_0_countries.geojson")))
+fc = NaturalEarth.naturalearth("admin_0_countries", 10)
 usa_multipoly = fc.geometry[findfirst(==("United States of America"), fc.NAME)] |> x -> GI.convert(LG, x) |> LG.makeValid |> GO.tuples
 include(joinpath(dirname(dirname(pathof(GO))), "test", "data", "polygon_generation.jl"))
 
@@ -95,7 +96,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h
 
 \`RadialDistance\`, \`DouglasPeucker\`, or
 \`VisvalingamWhyatt\` algorithms are available,
-listed in order of increasing quality but decreaseing performance.
+listed in order of increasing quality but decreasing performance.
 
 \`PoinTrait\` and \`MultiPointTrait\` are returned unchanged.
 
@@ -146,7 +147,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h
  ) = _simplify(DouglasPeucker(; kw...), data; prefilter_alg, calc_extent, threaded, crs)
 
 
-#= For each algorithm, apply simplication to all curves, multipoints, and
+#= For each algorithm, apply simplification to all curves, multipoints, and
 points, reconstructing everything else around them. =#
 function _simplify(alg::Union{SimplifyAlg, GEOS}, data; prefilter_alg=nothing, kw...)
     simplifier(geom) = _simplify(GI.trait(geom), alg, geom; prefilter_alg)
@@ -188,7 +189,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h
 $SIMPLIFY_ALG_KEYWORDS
 - \`tol\`: the minimum distance between points.
 
-Note: user input \`tol\` is squared to avoid uneccesary computation in algorithm.
+Note: user input \`tol\` is squared to avoid unnecessary computation in algorithm.
 """
 @kwdef struct RadialDistance <: SimplifyAlg
     number::Union{Int64,Nothing} = nothing
@@ -221,7 +222,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h
 distance from the line between its neighboring points.
 
 $DOUGLAS_PEUCKER_KEYWORDS
-Note: user input \`tol\` is squared to avoid uneccesary computation in algorithm.
+Note: user input \`tol\` is squared to avoid unnecessary computation in algorithm.
 """
 @kwdef struct DouglasPeucker <: SimplifyAlg
     number::Union{Int64,Nothing} = nothing
@@ -238,7 +239,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h
 (https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm). =#
 function _simplify(alg::DouglasPeucker, points::Vector, preserve_endpoint)
     npoints = length(points)
-    npoints <= MIN_POINTS && return points

Determine stopping critetia

julia
    max_points = if !isnothing(alg.tol)
+    npoints <= MIN_POINTS && return points

Determine stopping criteria

julia
    max_points = if !isnothing(alg.tol)
         npoints
     else
         npts = !isnothing(alg.number) ? alg.number : max(3, round(Int, alg.ratio * npoints))
@@ -304,7 +305,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h
 end
 
 #= find maximum distance of any point between the start_idx and end_idx to the line formed
-by conencting the points at start_idx and end_idx. Note that the first index of maximum
+by connecting the points at start_idx and end_idx. Note that the first index of maximum
 value will be used, which might cause differences in results from other algorithms.=#
 function _find_max_squared_dist(points, start_idx, end_idx)
     max_idx = start_idx
@@ -328,7 +329,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const h
 $SIMPLIFY_ALG_KEYWORDS
 - \`tol\`: the minimum area of a triangle made with a point and
     its neighboring points.
-Note: user input \`tol\` is doubled to avoid uneccesary computation in algorithm.
+Note: user input \`tol\` is doubled to avoid unnecessary computation in algorithm.
 """
 @kwdef struct VisvalingamWhyatt <: SimplifyAlg
     number::Union{Int,Nothing} = nothing
diff --git a/previews/PR135/assets/source_transformations_simplify.md.k2EFW9YY.lean.js b/previews/PR135/assets/source_transformations_simplify.md.k2EFW9YY.lean.js
new file mode 100644
index 000000000..1e32675dc
--- /dev/null
+++ b/previews/PR135/assets/source_transformations_simplify.md.k2EFW9YY.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const h="/GeometryOps.jl/previews/PR135/assets/limmhqq.Bglvb-jp.png",l="/GeometryOps.jl/previews/PR135/assets/yygelii.B94PsR1K.png",k="/GeometryOps.jl/previews/PR135/assets/tzjojwg.DvOK4aMR.png",t="/GeometryOps.jl/previews/PR135/assets/xqlfxjv.AayN5YeI.png",u=JSON.parse('{"title":"Geometry simplification","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/simplify.md","filePath":"source/transformations/simplify.md","lastUpdated":null}'),p={name:"source/transformations/simplify.md"},e=n("",71),E=[e];function r(d,g,y,F,o,c){return a(),i("div",null,E)}const D=s(p,[["render",r]]);export{u as __pageData,D as default};
diff --git a/previews/PR135/assets/source_transformations_transform.md.iKlEQxrg.js b/previews/PR135/assets/source_transformations_transform.md.Bz0uRhiV.js
similarity index 98%
rename from previews/PR135/assets/source_transformations_transform.md.iKlEQxrg.js
rename to previews/PR135/assets/source_transformations_transform.md.Bz0uRhiV.js
index 3bfa70088..00c2a3f5c 100644
--- a/previews/PR135/assets/source_transformations_transform.md.iKlEQxrg.js
+++ b/previews/PR135/assets/source_transformations_transform.md.Bz0uRhiV.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const d=JSON.parse('{"title":"Pointwise transformation","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/transform.md","filePath":"source/transformations/transform.md","lastUpdated":null}'),t={name:"source/transformations/transform.md"},l=n(`

Pointwise transformation

julia
"""
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const d=JSON.parse('{"title":"Pointwise transformation","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/transform.md","filePath":"source/transformations/transform.md","lastUpdated":null}'),t={name:"source/transformations/transform.md"},l=n(`

Pointwise transformation

julia
"""
     transform(f, obj)
 
 Apply a function \`f\` to all the points in \`obj\`.
@@ -29,7 +29,7 @@ import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const d
 rraysCore.SVector{2, Float64}[[6.5, 5.5], [8.5, 7.5], [9.5, 8.5], [6.5, 5.5]], nothing, nothing)], nothing, nothing)
 \`\`\`
 
-With Rotations.jl you need to actuall multiply the Rotation
+With Rotations.jl you need to actually multiply the Rotation
 by the \`SVector\` point, which is easy using an anonymous function.
 
 \`\`\`julia
diff --git a/previews/PR135/assets/source_transformations_transform.md.iKlEQxrg.lean.js b/previews/PR135/assets/source_transformations_transform.md.Bz0uRhiV.lean.js
similarity index 73%
rename from previews/PR135/assets/source_transformations_transform.md.iKlEQxrg.lean.js
rename to previews/PR135/assets/source_transformations_transform.md.Bz0uRhiV.lean.js
index bd0c08af6..c5f807601 100644
--- a/previews/PR135/assets/source_transformations_transform.md.iKlEQxrg.lean.js
+++ b/previews/PR135/assets/source_transformations_transform.md.Bz0uRhiV.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const d=JSON.parse('{"title":"Pointwise transformation","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/transform.md","filePath":"source/transformations/transform.md","lastUpdated":null}'),t={name:"source/transformations/transform.md"},l=n("",4),e=[l];function p(h,r,k,o,g,F){return a(),i("div",null,e)}const y=s(t,[["render",p]]);export{d as __pageData,y as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const d=JSON.parse('{"title":"Pointwise transformation","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/transform.md","filePath":"source/transformations/transform.md","lastUpdated":null}'),t={name:"source/transformations/transform.md"},l=n("",4),e=[l];function p(h,r,k,o,g,F){return a(),i("div",null,e)}const y=s(t,[["render",p]]);export{d as __pageData,y as default};
diff --git a/previews/PR135/assets/source_transformations_tuples.md.DP26qgdc.js b/previews/PR135/assets/source_transformations_tuples.md.BlsK6oDR.js
similarity index 96%
rename from previews/PR135/assets/source_transformations_tuples.md.DP26qgdc.js
rename to previews/PR135/assets/source_transformations_tuples.md.BlsK6oDR.js
index f3c9b0f70..014ffe28b 100644
--- a/previews/PR135/assets/source_transformations_tuples.md.DP26qgdc.js
+++ b/previews/PR135/assets/source_transformations_tuples.md.BlsK6oDR.js
@@ -1,4 +1,4 @@
-import{_ as s,c as a,o as n,a7 as i}from"./chunks/framework.k41oUgTf.js";const u=JSON.parse('{"title":"Tuple conversion","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/tuples.md","filePath":"source/transformations/tuples.md","lastUpdated":null}'),e={name:"source/transformations/tuples.md"},t=i(`

Tuple conversion

julia
"""
+import{_ as s,c as a,o as n,a7 as i}from"./chunks/framework.CONf0Rze.js";const u=JSON.parse('{"title":"Tuple conversion","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/tuples.md","filePath":"source/transformations/tuples.md","lastUpdated":null}'),e={name:"source/transformations/tuples.md"},t=i(`

Tuple conversion

julia
"""
     tuples(obj)
 
 Convert all points in \`obj\` to \`Tuple\`s, wherever the are nested.
diff --git a/previews/PR135/assets/source_transformations_tuples.md.DP26qgdc.lean.js b/previews/PR135/assets/source_transformations_tuples.md.BlsK6oDR.lean.js
similarity index 72%
rename from previews/PR135/assets/source_transformations_tuples.md.DP26qgdc.lean.js
rename to previews/PR135/assets/source_transformations_tuples.md.BlsK6oDR.lean.js
index 9547e635f..75529a906 100644
--- a/previews/PR135/assets/source_transformations_tuples.md.DP26qgdc.lean.js
+++ b/previews/PR135/assets/source_transformations_tuples.md.BlsK6oDR.lean.js
@@ -1 +1 @@
-import{_ as s,c as a,o as n,a7 as i}from"./chunks/framework.k41oUgTf.js";const u=JSON.parse('{"title":"Tuple conversion","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/tuples.md","filePath":"source/transformations/tuples.md","lastUpdated":null}'),e={name:"source/transformations/tuples.md"},t=i("",6),p=[t];function l(o,r,h,c,k,d){return n(),a("div",null,p)}const g=s(e,[["render",l]]);export{u as __pageData,g as default};
+import{_ as s,c as a,o as n,a7 as i}from"./chunks/framework.CONf0Rze.js";const u=JSON.parse('{"title":"Tuple conversion","description":"","frontmatter":{},"headers":[],"relativePath":"source/transformations/tuples.md","filePath":"source/transformations/tuples.md","lastUpdated":null}'),e={name:"source/transformations/tuples.md"},t=i("",6),p=[t];function l(o,r,h,c,k,d){return n(),a("div",null,p)}const g=s(e,[["render",l]]);export{u as __pageData,g as default};
diff --git a/previews/PR135/assets/source_types.md.BYfpLUKR.js b/previews/PR135/assets/source_types.md.D4PahPU_.js
similarity index 99%
rename from previews/PR135/assets/source_types.md.BYfpLUKR.js
rename to previews/PR135/assets/source_types.md.D4PahPU_.js
index 51d34b5de..f10a262ea 100644
--- a/previews/PR135/assets/source_types.md.BYfpLUKR.js
+++ b/previews/PR135/assets/source_types.md.D4PahPU_.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const y=JSON.parse('{"title":"Types","description":"","frontmatter":{},"headers":[],"relativePath":"source/types.md","filePath":"source/types.md","lastUpdated":null}'),t={name:"source/types.md"},e=n(`

Types

This file defines some fundamental types used in GeometryOps.

Warning

Unlike in other Julia packages, only some types are defined in this file, not all. This is because we define types in the files where they are used, to make it easier to understand the code.

julia
export TraitTarget, GEOS

TraitTarget

This struct holds a trait parameter or a union of trait parameters. It's essentially a way to construct unions.

julia
"""
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const y=JSON.parse('{"title":"Types","description":"","frontmatter":{},"headers":[],"relativePath":"source/types.md","filePath":"source/types.md","lastUpdated":null}'),t={name:"source/types.md"},e=n(`

Types

This file defines some fundamental types used in GeometryOps.

Warning

Unlike in other Julia packages, only some types are defined in this file, not all. This is because we define types in the files where they are used, to make it easier to understand the code.

julia
export TraitTarget, GEOS

TraitTarget

This struct holds a trait parameter or a union of trait parameters. It's essentially a way to construct unions.

julia
"""
     TraitTarget{T}
 
 This struct holds a trait parameter or a union of trait parameters.
diff --git a/previews/PR135/assets/source_types.md.BYfpLUKR.lean.js b/previews/PR135/assets/source_types.md.D4PahPU_.lean.js
similarity index 68%
rename from previews/PR135/assets/source_types.md.BYfpLUKR.lean.js
rename to previews/PR135/assets/source_types.md.D4PahPU_.lean.js
index 398771c3b..63643989d 100644
--- a/previews/PR135/assets/source_types.md.BYfpLUKR.lean.js
+++ b/previews/PR135/assets/source_types.md.D4PahPU_.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const y=JSON.parse('{"title":"Types","description":"","frontmatter":{},"headers":[],"relativePath":"source/types.md","filePath":"source/types.md","lastUpdated":null}'),t={name:"source/types.md"},e=n("",27),l=[e];function p(h,k,r,d,o,g){return a(),i("div",null,l)}const E=s(t,[["render",p]]);export{y as __pageData,E as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const y=JSON.parse('{"title":"Types","description":"","frontmatter":{},"headers":[],"relativePath":"source/types.md","filePath":"source/types.md","lastUpdated":null}'),t={name:"source/types.md"},e=n("",27),l=[e];function p(h,k,r,d,o,g){return a(),i("div",null,l)}const E=s(t,[["render",p]]);export{y as __pageData,E as default};
diff --git a/previews/PR135/assets/source_utils.md.CPaVoqLr.js b/previews/PR135/assets/source_utils.md.CZ0t5hCA.js
similarity index 99%
rename from previews/PR135/assets/source_utils.md.CPaVoqLr.js
rename to previews/PR135/assets/source_utils.md.CZ0t5hCA.js
index f7a580572..45dda9976 100644
--- a/previews/PR135/assets/source_utils.md.CPaVoqLr.js
+++ b/previews/PR135/assets/source_utils.md.CZ0t5hCA.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const y=JSON.parse('{"title":"Utility functions","description":"","frontmatter":{},"headers":[],"relativePath":"source/utils.md","filePath":"source/utils.md","lastUpdated":null}'),t={name:"source/utils.md"},p=n(`

Utility functions

julia
_is3d(geom)::Bool = _is3d(GI.trait(geom), geom)
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const y=JSON.parse('{"title":"Utility functions","description":"","frontmatter":{},"headers":[],"relativePath":"source/utils.md","filePath":"source/utils.md","lastUpdated":null}'),t={name:"source/utils.md"},p=n(`

Utility functions

julia
_is3d(geom)::Bool = _is3d(GI.trait(geom), geom)
 _is3d(::GI.AbstractGeometryTrait, geom)::Bool = GI.is3d(geom)
 _is3d(::GI.FeatureTrait, feature)::Bool = _is3d(GI.geometry(feature))
 _is3d(::GI.FeatureCollectionTrait, fc)::Bool = _is3d(GI.getfeature(fc, 1))
diff --git a/previews/PR135/assets/source_utils.md.CPaVoqLr.lean.js b/previews/PR135/assets/source_utils.md.CZ0t5hCA.lean.js
similarity index 69%
rename from previews/PR135/assets/source_utils.md.CPaVoqLr.lean.js
rename to previews/PR135/assets/source_utils.md.CZ0t5hCA.lean.js
index 91bd5b504..92447c51f 100644
--- a/previews/PR135/assets/source_utils.md.CPaVoqLr.lean.js
+++ b/previews/PR135/assets/source_utils.md.CZ0t5hCA.lean.js
@@ -1 +1 @@
-import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.k41oUgTf.js";const y=JSON.parse('{"title":"Utility functions","description":"","frontmatter":{},"headers":[],"relativePath":"source/utils.md","filePath":"source/utils.md","lastUpdated":null}'),t={name:"source/utils.md"},p=n("",8),l=[p];function h(k,e,r,F,g,d){return a(),i("div",null,l)}const o=s(t,[["render",h]]);export{y as __pageData,o as default};
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const y=JSON.parse('{"title":"Utility functions","description":"","frontmatter":{},"headers":[],"relativePath":"source/utils.md","filePath":"source/utils.md","lastUpdated":null}'),t={name:"source/utils.md"},p=n("",8),l=[p];function h(k,e,r,F,g,d){return a(),i("div",null,l)}const o=s(t,[["render",h]]);export{y as __pageData,o as default};
diff --git a/previews/PR135/assets/style.DLw2TsOP.css b/previews/PR135/assets/style.D6YisBrO.css
similarity index 99%
rename from previews/PR135/assets/style.DLw2TsOP.css
rename to previews/PR135/assets/style.D6YisBrO.css
index 8840c7843..7b00f7289 100644
--- a/previews/PR135/assets/style.DLw2TsOP.css
+++ b/previews/PR135/assets/style.D6YisBrO.css
@@ -1 +1 @@
-@import"https://fonts.googleapis.com/css?family=Space+Mono:regular,italic,700,700italic";@import"https://fonts.googleapis.com/css?family=Space+Grotesk:regular,italic,700,700italic";@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, "PingFang SC", "Noto Sans CJK SC", "Noto Sans SC", "Heiti SC", "Microsoft YaHei", "DengXian", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.vpi-social-discord{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z'/%3E%3C/svg%3E")}.vpi-social-facebook{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z'/%3E%3C/svg%3E")}.vpi-social-github{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}.vpi-social-instagram{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.03.084c-1.277.06-2.149.264-2.91.563a5.874 5.874 0 0 0-2.124 1.388 5.878 5.878 0 0 0-1.38 2.127C.321 4.926.12 5.8.064 7.076.008 8.354-.005 8.764.001 12.023c.007 3.259.021 3.667.083 4.947.061 1.277.264 2.149.563 2.911.308.789.72 1.457 1.388 2.123a5.872 5.872 0 0 0 2.129 1.38c.763.295 1.636.496 2.913.552 1.278.056 1.689.069 4.947.063 3.257-.007 3.668-.021 4.947-.082 1.28-.06 2.147-.265 2.91-.563a5.881 5.881 0 0 0 2.123-1.388 5.881 5.881 0 0 0 1.38-2.129c.295-.763.496-1.636.551-2.912.056-1.28.07-1.69.063-4.948-.006-3.258-.02-3.667-.081-4.947-.06-1.28-.264-2.148-.564-2.911a5.892 5.892 0 0 0-1.387-2.123 5.857 5.857 0 0 0-2.128-1.38C19.074.322 18.202.12 16.924.066 15.647.009 15.236-.006 11.977 0 8.718.008 8.31.021 7.03.084m.14 21.693c-1.17-.05-1.805-.245-2.228-.408a3.736 3.736 0 0 1-1.382-.895 3.695 3.695 0 0 1-.9-1.378c-.165-.423-.363-1.058-.417-2.228-.06-1.264-.072-1.644-.08-4.848-.006-3.204.006-3.583.061-4.848.05-1.169.246-1.805.408-2.228.216-.561.477-.96.895-1.382a3.705 3.705 0 0 1 1.379-.9c.423-.165 1.057-.361 2.227-.417 1.265-.06 1.644-.072 4.848-.08 3.203-.006 3.583.006 4.85.062 1.168.05 1.804.244 2.227.408.56.216.96.475 1.382.895.421.42.681.817.9 1.378.165.422.362 1.056.417 2.227.06 1.265.074 1.645.08 4.848.005 3.203-.006 3.583-.061 4.848-.051 1.17-.245 1.805-.408 2.23-.216.56-.477.96-.896 1.38a3.705 3.705 0 0 1-1.378.9c-.422.165-1.058.362-2.226.418-1.266.06-1.645.072-4.85.079-3.204.007-3.582-.006-4.848-.06m9.783-16.192a1.44 1.44 0 1 0 1.437-1.442 1.44 1.44 0 0 0-1.437 1.442M5.839 12.012a6.161 6.161 0 1 0 12.323-.024 6.162 6.162 0 0 0-12.323.024M8 12.008A4 4 0 1 1 12.008 16 4 4 0 0 1 8 12.008'/%3E%3C/svg%3E")}.vpi-social-linkedin{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'/%3E%3C/svg%3E")}.vpi-social-mastodon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z'/%3E%3C/svg%3E")}.vpi-social-npm{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z'/%3E%3C/svg%3E")}.vpi-social-slack{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z'/%3E%3C/svg%3E")}.vpi-social-twitter,.vpi-social-x{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z'/%3E%3C/svg%3E")}.vpi-social-youtube{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-b06cdb19]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-b06cdb19],.VPBackdrop.fade-leave-to[data-v-b06cdb19]{opacity:0}.VPBackdrop.fade-leave-active[data-v-b06cdb19]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-b06cdb19]{display:none}}.NotFound[data-v-951cab6c]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-951cab6c]{padding:96px 32px 168px}}.code[data-v-951cab6c]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-951cab6c]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-951cab6c]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-951cab6c]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-951cab6c]{padding-top:20px}.link[data-v-951cab6c]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-951cab6c]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-3f927ebe]{position:relative;z-index:1}.nested[data-v-3f927ebe]{padding-right:16px;padding-left:16px}.outline-link[data-v-3f927ebe]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-3f927ebe]:hover,.outline-link.active[data-v-3f927ebe]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-3f927ebe]{padding-left:13px}.VPDocAsideOutline[data-v-b38bf2ff]{display:none}.VPDocAsideOutline.has-outline[data-v-b38bf2ff]{display:block}.content[data-v-b38bf2ff]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-b38bf2ff]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-b38bf2ff]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-6d7b3c46]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-6d7b3c46]{flex-grow:1}.VPDocAside[data-v-6d7b3c46] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-6d7b3c46] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-6d7b3c46] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-475f71b8]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-475f71b8]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-4f9813fa]{margin-top:64px}.edit-info[data-v-4f9813fa]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-4f9813fa]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-4f9813fa]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-4f9813fa]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-4f9813fa]{margin-right:8px}.prev-next[data-v-4f9813fa]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-4f9813fa]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-4f9813fa]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-4f9813fa]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-4f9813fa]{margin-left:auto;text-align:right}.desc[data-v-4f9813fa]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-4f9813fa]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-83890dd9]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-83890dd9]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-83890dd9]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-83890dd9]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-83890dd9]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-83890dd9]{display:flex;justify-content:center}.VPDoc .aside[data-v-83890dd9]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-83890dd9]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-83890dd9]{max-width:1104px}}.container[data-v-83890dd9]{margin:0 auto;width:100%}.aside[data-v-83890dd9]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-83890dd9]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-83890dd9]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-83890dd9]::-webkit-scrollbar{display:none}.aside-curtain[data-v-83890dd9]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-83890dd9]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-83890dd9]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-83890dd9]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-83890dd9]{order:1;margin:0;min-width:640px}}.content-container[data-v-83890dd9]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-83890dd9]{max-width:688px}.VPButton[data-v-14206e74]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-14206e74]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-14206e74]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-14206e74]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-14206e74]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-14206e74]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-14206e74]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-14206e74]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-14206e74]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-14206e74]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-14206e74]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-14206e74]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-14206e74]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-35a7d0b8]{display:none}.dark .VPImage.light[data-v-35a7d0b8]{display:none}.VPHero[data-v-955009fc]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-955009fc]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-955009fc]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-955009fc]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-955009fc]{flex-direction:row}}.main[data-v-955009fc]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-955009fc]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-955009fc]{text-align:left}}@media (min-width: 960px){.main[data-v-955009fc]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-955009fc]{max-width:592px}}.name[data-v-955009fc],.text[data-v-955009fc]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-955009fc],.VPHero.has-image .text[data-v-955009fc]{margin:0 auto}.name[data-v-955009fc]{color:var(--vp-home-hero-name-color)}.clip[data-v-955009fc]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-955009fc],.text[data-v-955009fc]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-955009fc],.text[data-v-955009fc]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-955009fc],.VPHero.has-image .text[data-v-955009fc]{margin:0}}.tagline[data-v-955009fc]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-955009fc]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-955009fc]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-955009fc]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-955009fc]{margin:0}}.actions[data-v-955009fc]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-955009fc]{justify-content:center}@media (min-width: 640px){.actions[data-v-955009fc]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-955009fc]{justify-content:flex-start}}.action[data-v-955009fc]{flex-shrink:0;padding:6px}.image[data-v-955009fc]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-955009fc]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-955009fc]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-955009fc]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-955009fc]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-955009fc]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-955009fc]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-955009fc]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-955009fc]{width:320px;height:320px}}[data-v-955009fc] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-955009fc] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-955009fc] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-f5e9645b]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-f5e9645b]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-f5e9645b]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-f5e9645b]>.VPImage{margin-bottom:20px}.icon[data-v-f5e9645b]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-f5e9645b]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-f5e9645b]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-f5e9645b]{padding-top:8px}.link-text-value[data-v-f5e9645b]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-f5e9645b]{margin-left:6px}.VPFeatures[data-v-d0a190d7]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-d0a190d7]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-d0a190d7]{padding:0 64px}}.container[data-v-d0a190d7]{margin:0 auto;max-width:1152px}.items[data-v-d0a190d7]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-d0a190d7]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-d0a190d7],.item.grid-4[data-v-d0a190d7],.item.grid-6[data-v-d0a190d7]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-d0a190d7],.item.grid-4[data-v-d0a190d7]{width:50%}.item.grid-3[data-v-d0a190d7],.item.grid-6[data-v-d0a190d7]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-d0a190d7]{width:25%}}.container[data-v-7a48a447]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-7a48a447]{padding:0 48px}}@media (min-width: 960px){.container[data-v-7a48a447]{width:100%;padding:0 64px}}.vp-doc[data-v-7a48a447] .VPHomeSponsors,.vp-doc[data-v-7a48a447] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-7a48a447] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-7a48a447] .VPHomeSponsors a,.vp-doc[data-v-7a48a447] .VPTeamPage a{text-decoration:none}.VPHome[data-v-cbb6ec48]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-cbb6ec48]{margin-bottom:128px}}.VPContent[data-v-91765379]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-91765379]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-91765379]{margin:0}@media (min-width: 960px){.VPContent[data-v-91765379]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-91765379]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-91765379]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-c970a860]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-c970a860]{display:none}.VPFooter[data-v-c970a860] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-c970a860] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-c970a860]{padding:32px}}.container[data-v-c970a860]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-c970a860],.copyright[data-v-c970a860]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-bc9dc845]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-bc9dc845]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-bc9dc845]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-bc9dc845]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-bc9dc845]{color:var(--vp-c-text-1)}.icon[data-v-bc9dc845]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-bc9dc845]{font-size:14px}.icon[data-v-bc9dc845]{font-size:16px}}.open>.icon[data-v-bc9dc845]{transform:rotate(90deg)}.items[data-v-bc9dc845]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-bc9dc845]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-bc9dc845]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-bc9dc845]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-bc9dc845]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-bc9dc845]{transition:all .2s ease-out}.flyout-leave-active[data-v-bc9dc845]{transition:all .15s ease-in}.flyout-enter-from[data-v-bc9dc845],.flyout-leave-to[data-v-bc9dc845]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-070ab83d]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-070ab83d]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-070ab83d]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-070ab83d]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-070ab83d]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-070ab83d]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-070ab83d]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-070ab83d]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-070ab83d]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-070ab83d]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-070ab83d]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-070ab83d]{display:none}}.menu-icon[data-v-070ab83d]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-070ab83d]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-070ab83d]{padding:12px 32px 11px}}.VPSwitch[data-v-4a1c76db]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-4a1c76db]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-4a1c76db]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-4a1c76db]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-4a1c76db] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-4a1c76db] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-e40a8bb6]{opacity:1}.moon[data-v-e40a8bb6],.dark .sun[data-v-e40a8bb6]{opacity:0}.dark .moon[data-v-e40a8bb6]{opacity:1}.dark .VPSwitchAppearance[data-v-e40a8bb6] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-af096f4a]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-af096f4a]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-8b74d055]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-8b74d055]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-8b74d055]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-8b74d055]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-48c802d0]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-48c802d0]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-48c802d0]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-48c802d0]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-7dd3104a]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-7dd3104a] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-7dd3104a] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-7dd3104a] .group:last-child{padding-bottom:0}.VPMenu[data-v-7dd3104a] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-7dd3104a] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-7dd3104a] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-7dd3104a] .action{padding-left:24px}.VPFlyout[data-v-e5380155]{position:relative}.VPFlyout[data-v-e5380155]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-e5380155]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-e5380155]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-e5380155]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-e5380155]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-e5380155],.button[aria-expanded=true]+.menu[data-v-e5380155]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-e5380155]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-e5380155]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-e5380155]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-e5380155]{margin-right:0;font-size:16px}.text-icon[data-v-e5380155]{margin-left:4px;font-size:14px}.icon[data-v-e5380155]{font-size:20px;transition:fill .25s}.menu[data-v-e5380155]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-717b8b75]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-717b8b75]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-717b8b75]>svg,.VPSocialLink[data-v-717b8b75]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-ee7a9424]{display:flex;justify-content:center}.VPNavBarExtra[data-v-925effce]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-925effce]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-925effce]{display:none}}.trans-title[data-v-925effce]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-925effce],.item.social-links[data-v-925effce]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-925effce]{min-width:176px}.appearance-action[data-v-925effce]{margin-right:-2px}.social-links-list[data-v-925effce]{margin:-4px -8px}.VPNavBarHamburger[data-v-5dea55bf]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-5dea55bf]{display:none}}.container[data-v-5dea55bf]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-5dea55bf]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-5dea55bf]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-5dea55bf]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-5dea55bf]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-5dea55bf]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-5dea55bf]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-5dea55bf],.VPNavBarHamburger.active:hover .middle[data-v-5dea55bf],.VPNavBarHamburger.active:hover .bottom[data-v-5dea55bf]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-5dea55bf],.middle[data-v-5dea55bf],.bottom[data-v-5dea55bf]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-5dea55bf]{top:0;left:0;transform:translate(0)}.middle[data-v-5dea55bf]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-5dea55bf]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-ed5ac1f6]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-ed5ac1f6],.VPNavBarMenuLink[data-v-ed5ac1f6]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-e6d46098]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-e6d46098]{display:flex}}/*! @docsearch/css 3.6.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.30196078431372547);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}.DocSearch-Button-Key--pressed{transform:translate3d(0,1px,0);box-shadow:var(--docsearch-key-pressed-shadow)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-164c457f]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-164c457f]{display:flex;align-items:center}}.title[data-v-28a961f9]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-28a961f9]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-28a961f9]{border-bottom-color:var(--vp-c-divider)}}[data-v-28a961f9] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-c80d9ad0]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-c80d9ad0]{display:flex;align-items:center}}.title[data-v-c80d9ad0]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-822684d1]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-822684d1]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-822684d1]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-822684d1]:not(.home){background-color:transparent}.VPNavBar[data-v-822684d1]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-822684d1]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-822684d1]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-822684d1]{padding:0}}.container[data-v-822684d1]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-822684d1],.container>.content[data-v-822684d1]{pointer-events:none}.container[data-v-822684d1] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-822684d1]{max-width:100%}}.title[data-v-822684d1]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-822684d1]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-822684d1]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-822684d1]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-822684d1]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-822684d1]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-822684d1]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-822684d1]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-822684d1]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-822684d1]{column-gap:.5rem}}.menu+.translations[data-v-822684d1]:before,.menu+.appearance[data-v-822684d1]:before,.menu+.social-links[data-v-822684d1]:before,.translations+.appearance[data-v-822684d1]:before,.appearance+.social-links[data-v-822684d1]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-822684d1]:before,.translations+.appearance[data-v-822684d1]:before{margin-right:16px}.appearance+.social-links[data-v-822684d1]:before{margin-left:16px}.social-links[data-v-822684d1]{margin-right:-8px}.divider[data-v-822684d1]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-822684d1]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-822684d1]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-822684d1]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-822684d1]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-822684d1]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-822684d1]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-ffb44008]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-ffb44008]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-27d04aeb]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-27d04aeb]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-7179dbb7]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-7179dbb7]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-4b8941ac]{display:block}.title[data-v-4b8941ac]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-ca5b90f4]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-ca5b90f4]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-ca5b90f4]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-ca5b90f4]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-ca5b90f4]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-ca5b90f4]{transform:rotate(45deg)}.button[data-v-ca5b90f4]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-ca5b90f4]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-ca5b90f4]{transition:transform .25s}.group[data-v-ca5b90f4]:first-child{padding-top:0}.group+.group[data-v-ca5b90f4],.group+.item[data-v-ca5b90f4]{padding-top:4px}.VPNavScreenTranslations[data-v-362991c2]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-362991c2]{height:auto}.title[data-v-362991c2]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-362991c2]{font-size:16px}.icon.lang[data-v-362991c2]{margin-right:8px}.icon.chevron[data-v-362991c2]{margin-left:4px}.list[data-v-362991c2]{padding:4px 0 0 24px}.link[data-v-362991c2]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-833aabba]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-833aabba],.VPNavScreen.fade-leave-active[data-v-833aabba]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-833aabba],.VPNavScreen.fade-leave-active .container[data-v-833aabba]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-833aabba],.VPNavScreen.fade-leave-to[data-v-833aabba]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-833aabba],.VPNavScreen.fade-leave-to .container[data-v-833aabba]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-833aabba]{display:none}}.container[data-v-833aabba]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-833aabba],.menu+.appearance[data-v-833aabba],.translations+.appearance[data-v-833aabba]{margin-top:24px}.menu+.social-links[data-v-833aabba]{margin-top:16px}.appearance+.social-links[data-v-833aabba]{margin-top:16px}.VPNav[data-v-f1e365da]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-f1e365da]{position:fixed}}.VPSidebarItem.level-0[data-v-196b2e5f]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-196b2e5f]{padding-bottom:10px}.item[data-v-196b2e5f]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-196b2e5f]{cursor:pointer}.indicator[data-v-196b2e5f]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-196b2e5f],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-196b2e5f],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-196b2e5f],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-196b2e5f]{background-color:var(--vp-c-brand-1)}.link[data-v-196b2e5f]{display:flex;align-items:center;flex-grow:1}.text[data-v-196b2e5f]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-196b2e5f]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-196b2e5f],.VPSidebarItem.level-2 .text[data-v-196b2e5f],.VPSidebarItem.level-3 .text[data-v-196b2e5f],.VPSidebarItem.level-4 .text[data-v-196b2e5f],.VPSidebarItem.level-5 .text[data-v-196b2e5f]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-196b2e5f]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-1.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-2.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-3.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-4.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-5.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-196b2e5f]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-196b2e5f]{color:var(--vp-c-brand-1)}.caret[data-v-196b2e5f]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-196b2e5f]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-196b2e5f]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-196b2e5f]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-196b2e5f]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-196b2e5f],.VPSidebarItem.level-2 .items[data-v-196b2e5f],.VPSidebarItem.level-3 .items[data-v-196b2e5f],.VPSidebarItem.level-4 .items[data-v-196b2e5f],.VPSidebarItem.level-5 .items[data-v-196b2e5f]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-196b2e5f]{display:none}.no-transition[data-v-9e426adc] .caret-icon{transition:none}.group+.group[data-v-9e426adc]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-9e426adc]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-18756405]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-18756405]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-18756405]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-18756405]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-18756405]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-18756405]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-18756405]{outline:0}.VPSkipLink[data-v-c3508ec8]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-c3508ec8]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-c3508ec8]{top:14px;left:16px}}.Layout[data-v-a9a9e638]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-db81191c]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-db81191c]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-db81191c]{margin:128px 0}}.VPHomeSponsors[data-v-db81191c]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-db81191c]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-db81191c]{padding:0 64px}}.container[data-v-db81191c]{margin:0 auto;max-width:1152px}.love[data-v-db81191c]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-db81191c]{display:inline-block}.message[data-v-db81191c]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-db81191c]{padding-top:32px}.action[data-v-db81191c]{padding-top:40px;text-align:center}.VPTeamPage[data-v-c2f8e101]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-c2f8e101]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-c2f8e101-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-c2f8e101-s],.VPTeamMembers+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-c2f8e101-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-c2f8e101-s],.VPTeamMembers+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:96px}}.VPTeamMembers[data-v-c2f8e101-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-c2f8e101-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-c2f8e101-s]{padding:0 64px}}.VPTeamPageTitle[data-v-e277e15c]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-e277e15c]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-e277e15c]{padding:80px 64px 48px}}.title[data-v-e277e15c]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-e277e15c]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-e277e15c]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-e277e15c]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-d43bc49d]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-d43bc49d]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-d43bc49d]{padding:0 64px}}.title[data-v-d43bc49d]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-d43bc49d]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-d43bc49d]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-d43bc49d]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-d43bc49d]{padding-top:40px}.VPTeamMembersItem[data-v-f9987cb6]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-f9987cb6]{padding:32px}.VPTeamMembersItem.small .data[data-v-f9987cb6]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-f9987cb6]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-f9987cb6]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-f9987cb6]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-f9987cb6]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-f9987cb6]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-f9987cb6]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-f9987cb6]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-f9987cb6]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-f9987cb6]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-f9987cb6]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-f9987cb6]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-f9987cb6]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-f9987cb6]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-f9987cb6]{text-align:center}.avatar[data-v-f9987cb6]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-f9987cb6]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-f9987cb6]{margin:0;font-weight:600}.affiliation[data-v-f9987cb6]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-f9987cb6]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-f9987cb6]:hover{color:var(--vp-c-brand-1)}.desc[data-v-f9987cb6]{margin:0 auto}.desc[data-v-f9987cb6] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-f9987cb6]{display:flex;justify-content:center;height:56px}.sp-link[data-v-f9987cb6]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-f9987cb6]:hover,.sp .sp-link.link[data-v-f9987cb6]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-f9987cb6]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-fba19bad]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-fba19bad]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-fba19bad]{max-width:876px}.VPTeamMembers.medium .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-fba19bad]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-fba19bad]{max-width:760px}.container[data-v-fba19bad]{display:grid;gap:24px;margin:0 auto;max-width:1152px}:root{--vp-plugin-tabs-tab-text-color: var(--vp-c-text-2);--vp-plugin-tabs-tab-active-text-color: var(--vp-c-text-1);--vp-plugin-tabs-tab-hover-text-color: var(--vp-c-text-1);--vp-plugin-tabs-tab-bg: var(--vp-c-bg-soft);--vp-plugin-tabs-tab-divider: var(--vp-c-divider);--vp-plugin-tabs-tab-active-bar-color: var(--vp-c-brand-1)}.plugin-tabs{margin:16px 0;background-color:var(--vp-plugin-tabs-tab-bg);border-radius:8px}.plugin-tabs--tab-list{position:relative;padding:0 12px;overflow-x:auto;overflow-y:hidden}.plugin-tabs--tab-list:after{content:"";position:absolute;bottom:0;left:0;right:0;height:2px;background-color:var(--vp-plugin-tabs-tab-divider)}.plugin-tabs--tab{position:relative;padding:0 12px;line-height:48px;border-bottom:2px solid transparent;color:var(--vp-plugin-tabs-tab-text-color);font-size:14px;font-weight:500;white-space:nowrap;transition:color .25s}.plugin-tabs--tab[aria-selected=true]{color:var(--vp-plugin-tabs-tab-active-text-color)}.plugin-tabs--tab:hover{color:var(--vp-plugin-tabs-tab-hover-text-color)}.plugin-tabs--tab:after{content:"";position:absolute;bottom:-2px;left:8px;right:8px;height:2px;background-color:transparent;transition:background-color .25s;z-index:1}.plugin-tabs--tab[aria-selected=true]:after{background-color:var(--vp-plugin-tabs-tab-active-bar-color)}.plugin-tabs--content[data-v-9b0d03d2]{padding:16px}.plugin-tabs--content[data-v-9b0d03d2]>:first-child:first-child{margin-top:0}.plugin-tabs--content[data-v-9b0d03d2]>:last-child:last-child{margin-bottom:0}.plugin-tabs--content[data-v-9b0d03d2]>div[class*=language-]{border-radius:8px;margin:16px 0}:root:not(.dark) .plugin-tabs--content[data-v-9b0d03d2] div[class*=language-]{background-color:var(--vp-c-bg)}.VPHero .clip{white-space:pre;max-width:500px}:root{--vp-font-family-base: "Barlow", "Inter var experimental", "Inter var", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--vp-font-family-mono: "Space Mono", Menlo, Monaco, Consolas, "Courier New", monospace}:root{--julia-blue: #4063D8;--julia-purple: #9558B2;--julia-red: #CB3C33;--julia-green: #389826;--vp-c-brand: #389826;--vp-c-brand-light: #3dd027;--vp-c-brand-lighter: #9499ff;--vp-c-brand-lightest: #bcc0ff;--vp-c-brand-dark: #535bf2;--vp-c-brand-darker: #454ce1;--vp-c-brand-dimm: #212425}:root{--vp-button-brand-border: var(--vp-c-brand-light);--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand);--vp-button-brand-hover-border: var(--vp-c-brand-light);--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-light);--vp-button-brand-active-border: var(--vp-c-brand-light);--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-button-brand-bg)}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: -webkit-linear-gradient( 120deg, #459c55 30%, #dccc50 );--vp-home-hero-image-background-image: linear-gradient( -45deg, #9558B2 30%, #389826 30%, #CB3C33 );--vp-home-hero-image-filter: blur(40px)}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(56px)}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(72px)}}:root.dark{--vp-custom-block-tip-border: var(--vp-c-brand);--vp-custom-block-tip-text: var(--vp-c-brand-lightest);--vp-custom-block-tip-bg: var(--vp-c-brand-dimm);--vp-c-black: hsl(220 20% 9%);--vp-c-black-pure: hsl(220, 24%, 4%);--vp-c-black-soft: hsl(220 16% 13%);--vp-c-black-mute: hsl(220 14% 17%);--vp-c-gray: hsl(220 8% 56%);--vp-c-gray-dark-1: hsl(220 10% 39%);--vp-c-gray-dark-2: hsl(220 12% 28%);--vp-c-gray-dark-3: hsl(220 12% 23%);--vp-c-gray-dark-4: hsl(220 14% 17%);--vp-c-gray-dark-5: hsl(220 16% 13%);--vp-custom-block-info-bg: hsl(220 14% 17%)}.DocSearch{--docsearch-primary-color: var(--vp-c-brand) !important}mjx-container>svg{display:block;margin:auto}mjx-container{padding:.5rem 0}mjx-container{display:inline-block;margin:auto 2px -2px}mjx-container>svg{margin:auto;display:inline-block}:root{--vp-c-brand-1: #CB3C33;--vp-c-brand-2: #CB3C33;--vp-c-brand-3: #CB3C33;--vp-c-sponsor: #ca2971;--vitest-c-sponsor-hover: #c13071}.dark{--vp-c-brand-1: #91dd33;--vp-c-brand-2: #91dd33;--vp-c-brand-3: #91dd33;--vp-c-sponsor: #91dd33;--vitest-c-sponsor-hover: #e51370}.VPLocalSearchBox[data-v-f4c4f812]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-f4c4f812]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-f4c4f812]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-f4c4f812]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-f4c4f812]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-f4c4f812]{padding:0 8px}}.search-bar[data-v-f4c4f812]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-f4c4f812]{display:block;font-size:18px}.navigate-icon[data-v-f4c4f812]{display:block;font-size:14px}.search-icon[data-v-f4c4f812]{margin:8px}@media (max-width: 767px){.search-icon[data-v-f4c4f812]{display:none}}.search-input[data-v-f4c4f812]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-f4c4f812]{padding:6px 4px}}.search-actions[data-v-f4c4f812]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-f4c4f812]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-f4c4f812]{display:none}}.search-actions button[data-v-f4c4f812]{padding:8px}.search-actions button[data-v-f4c4f812]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-f4c4f812]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-f4c4f812]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-f4c4f812]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-f4c4f812]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-f4c4f812]{display:none}}.search-keyboard-shortcuts kbd[data-v-f4c4f812]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-f4c4f812]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-f4c4f812]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-f4c4f812]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-f4c4f812]{margin:8px}}.titles[data-v-f4c4f812]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-f4c4f812]{display:flex;align-items:center;gap:4px}.title.main[data-v-f4c4f812]{font-weight:500}.title-icon[data-v-f4c4f812]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-f4c4f812]{opacity:.5}.result.selected[data-v-f4c4f812]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-f4c4f812]{position:relative}.excerpt[data-v-f4c4f812]{opacity:75%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;opacity:.5;margin-top:4px}.result.selected .excerpt[data-v-f4c4f812]{opacity:1}.excerpt[data-v-f4c4f812] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-f4c4f812] mark,.excerpt[data-v-f4c4f812] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-f4c4f812] .vp-code-group .tabs{display:none}.excerpt[data-v-f4c4f812] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-f4c4f812]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-f4c4f812]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-f4c4f812],.result.selected .title-icon[data-v-f4c4f812]{color:var(--vp-c-brand-1)!important}.no-results[data-v-f4c4f812]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-f4c4f812]{flex:none}
+@import"https://fonts.googleapis.com/css?family=Space+Mono:regular,italic,700,700italic";@import"https://fonts.googleapis.com/css?family=Space+Grotesk:regular,italic,700,700italic";@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/GeometryOps.jl/previews/PR135/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, "PingFang SC", "Noto Sans CJK SC", "Noto Sans SC", "Heiti SC", "Microsoft YaHei", "DengXian", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.vpi-social-discord{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z'/%3E%3C/svg%3E")}.vpi-social-facebook{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z'/%3E%3C/svg%3E")}.vpi-social-github{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}.vpi-social-instagram{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.03.084c-1.277.06-2.149.264-2.91.563a5.874 5.874 0 0 0-2.124 1.388 5.878 5.878 0 0 0-1.38 2.127C.321 4.926.12 5.8.064 7.076.008 8.354-.005 8.764.001 12.023c.007 3.259.021 3.667.083 4.947.061 1.277.264 2.149.563 2.911.308.789.72 1.457 1.388 2.123a5.872 5.872 0 0 0 2.129 1.38c.763.295 1.636.496 2.913.552 1.278.056 1.689.069 4.947.063 3.257-.007 3.668-.021 4.947-.082 1.28-.06 2.147-.265 2.91-.563a5.881 5.881 0 0 0 2.123-1.388 5.881 5.881 0 0 0 1.38-2.129c.295-.763.496-1.636.551-2.912.056-1.28.07-1.69.063-4.948-.006-3.258-.02-3.667-.081-4.947-.06-1.28-.264-2.148-.564-2.911a5.892 5.892 0 0 0-1.387-2.123 5.857 5.857 0 0 0-2.128-1.38C19.074.322 18.202.12 16.924.066 15.647.009 15.236-.006 11.977 0 8.718.008 8.31.021 7.03.084m.14 21.693c-1.17-.05-1.805-.245-2.228-.408a3.736 3.736 0 0 1-1.382-.895 3.695 3.695 0 0 1-.9-1.378c-.165-.423-.363-1.058-.417-2.228-.06-1.264-.072-1.644-.08-4.848-.006-3.204.006-3.583.061-4.848.05-1.169.246-1.805.408-2.228.216-.561.477-.96.895-1.382a3.705 3.705 0 0 1 1.379-.9c.423-.165 1.057-.361 2.227-.417 1.265-.06 1.644-.072 4.848-.08 3.203-.006 3.583.006 4.85.062 1.168.05 1.804.244 2.227.408.56.216.96.475 1.382.895.421.42.681.817.9 1.378.165.422.362 1.056.417 2.227.06 1.265.074 1.645.08 4.848.005 3.203-.006 3.583-.061 4.848-.051 1.17-.245 1.805-.408 2.23-.216.56-.477.96-.896 1.38a3.705 3.705 0 0 1-1.378.9c-.422.165-1.058.362-2.226.418-1.266.06-1.645.072-4.85.079-3.204.007-3.582-.006-4.848-.06m9.783-16.192a1.44 1.44 0 1 0 1.437-1.442 1.44 1.44 0 0 0-1.437 1.442M5.839 12.012a6.161 6.161 0 1 0 12.323-.024 6.162 6.162 0 0 0-12.323.024M8 12.008A4 4 0 1 1 12.008 16 4 4 0 0 1 8 12.008'/%3E%3C/svg%3E")}.vpi-social-linkedin{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'/%3E%3C/svg%3E")}.vpi-social-mastodon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z'/%3E%3C/svg%3E")}.vpi-social-npm{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z'/%3E%3C/svg%3E")}.vpi-social-slack{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z'/%3E%3C/svg%3E")}.vpi-social-twitter,.vpi-social-x{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z'/%3E%3C/svg%3E")}.vpi-social-youtube{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-b06cdb19]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-b06cdb19],.VPBackdrop.fade-leave-to[data-v-b06cdb19]{opacity:0}.VPBackdrop.fade-leave-active[data-v-b06cdb19]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-b06cdb19]{display:none}}.NotFound[data-v-951cab6c]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-951cab6c]{padding:96px 32px 168px}}.code[data-v-951cab6c]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-951cab6c]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-951cab6c]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-951cab6c]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-951cab6c]{padding-top:20px}.link[data-v-951cab6c]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-951cab6c]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-3f927ebe]{position:relative;z-index:1}.nested[data-v-3f927ebe]{padding-right:16px;padding-left:16px}.outline-link[data-v-3f927ebe]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-3f927ebe]:hover,.outline-link.active[data-v-3f927ebe]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-3f927ebe]{padding-left:13px}.VPDocAsideOutline[data-v-b38bf2ff]{display:none}.VPDocAsideOutline.has-outline[data-v-b38bf2ff]{display:block}.content[data-v-b38bf2ff]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-b38bf2ff]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-b38bf2ff]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-6d7b3c46]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-6d7b3c46]{flex-grow:1}.VPDocAside[data-v-6d7b3c46] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-6d7b3c46] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-6d7b3c46] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-475f71b8]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-475f71b8]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-4f9813fa]{margin-top:64px}.edit-info[data-v-4f9813fa]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-4f9813fa]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-4f9813fa]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-4f9813fa]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-4f9813fa]{margin-right:8px}.prev-next[data-v-4f9813fa]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-4f9813fa]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-4f9813fa]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-4f9813fa]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-4f9813fa]{margin-left:auto;text-align:right}.desc[data-v-4f9813fa]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-4f9813fa]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-83890dd9]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-83890dd9]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-83890dd9]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-83890dd9]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-83890dd9]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-83890dd9]{display:flex;justify-content:center}.VPDoc .aside[data-v-83890dd9]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-83890dd9]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-83890dd9]{max-width:1104px}}.container[data-v-83890dd9]{margin:0 auto;width:100%}.aside[data-v-83890dd9]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-83890dd9]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-83890dd9]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-83890dd9]::-webkit-scrollbar{display:none}.aside-curtain[data-v-83890dd9]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-83890dd9]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-83890dd9]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-83890dd9]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-83890dd9]{order:1;margin:0;min-width:640px}}.content-container[data-v-83890dd9]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-83890dd9]{max-width:688px}.VPButton[data-v-14206e74]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-14206e74]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-14206e74]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-14206e74]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-14206e74]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-14206e74]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-14206e74]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-14206e74]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-14206e74]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-14206e74]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-14206e74]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-14206e74]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-14206e74]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-35a7d0b8]{display:none}.dark .VPImage.light[data-v-35a7d0b8]{display:none}.VPHero[data-v-955009fc]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-955009fc]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-955009fc]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-955009fc]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-955009fc]{flex-direction:row}}.main[data-v-955009fc]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-955009fc]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-955009fc]{text-align:left}}@media (min-width: 960px){.main[data-v-955009fc]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-955009fc]{max-width:592px}}.name[data-v-955009fc],.text[data-v-955009fc]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-955009fc],.VPHero.has-image .text[data-v-955009fc]{margin:0 auto}.name[data-v-955009fc]{color:var(--vp-home-hero-name-color)}.clip[data-v-955009fc]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-955009fc],.text[data-v-955009fc]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-955009fc],.text[data-v-955009fc]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-955009fc],.VPHero.has-image .text[data-v-955009fc]{margin:0}}.tagline[data-v-955009fc]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-955009fc]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-955009fc]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-955009fc]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-955009fc]{margin:0}}.actions[data-v-955009fc]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-955009fc]{justify-content:center}@media (min-width: 640px){.actions[data-v-955009fc]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-955009fc]{justify-content:flex-start}}.action[data-v-955009fc]{flex-shrink:0;padding:6px}.image[data-v-955009fc]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-955009fc]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-955009fc]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-955009fc]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-955009fc]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-955009fc]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-955009fc]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-955009fc]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-955009fc]{width:320px;height:320px}}[data-v-955009fc] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-955009fc] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-955009fc] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-f5e9645b]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-f5e9645b]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-f5e9645b]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-f5e9645b]>.VPImage{margin-bottom:20px}.icon[data-v-f5e9645b]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-f5e9645b]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-f5e9645b]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-f5e9645b]{padding-top:8px}.link-text-value[data-v-f5e9645b]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-f5e9645b]{margin-left:6px}.VPFeatures[data-v-d0a190d7]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-d0a190d7]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-d0a190d7]{padding:0 64px}}.container[data-v-d0a190d7]{margin:0 auto;max-width:1152px}.items[data-v-d0a190d7]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-d0a190d7]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-d0a190d7],.item.grid-4[data-v-d0a190d7],.item.grid-6[data-v-d0a190d7]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-d0a190d7],.item.grid-4[data-v-d0a190d7]{width:50%}.item.grid-3[data-v-d0a190d7],.item.grid-6[data-v-d0a190d7]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-d0a190d7]{width:25%}}.container[data-v-7a48a447]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-7a48a447]{padding:0 48px}}@media (min-width: 960px){.container[data-v-7a48a447]{width:100%;padding:0 64px}}.vp-doc[data-v-7a48a447] .VPHomeSponsors,.vp-doc[data-v-7a48a447] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-7a48a447] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-7a48a447] .VPHomeSponsors a,.vp-doc[data-v-7a48a447] .VPTeamPage a{text-decoration:none}.VPHome[data-v-cbb6ec48]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-cbb6ec48]{margin-bottom:128px}}.VPContent[data-v-91765379]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-91765379]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-91765379]{margin:0}@media (min-width: 960px){.VPContent[data-v-91765379]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-91765379]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-91765379]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-c970a860]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-c970a860]{display:none}.VPFooter[data-v-c970a860] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-c970a860] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-c970a860]{padding:32px}}.container[data-v-c970a860]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-c970a860],.copyright[data-v-c970a860]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-bc9dc845]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-bc9dc845]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-bc9dc845]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-bc9dc845]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-bc9dc845]{color:var(--vp-c-text-1)}.icon[data-v-bc9dc845]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-bc9dc845]{font-size:14px}.icon[data-v-bc9dc845]{font-size:16px}}.open>.icon[data-v-bc9dc845]{transform:rotate(90deg)}.items[data-v-bc9dc845]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-bc9dc845]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-bc9dc845]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-bc9dc845]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-bc9dc845]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-bc9dc845]{transition:all .2s ease-out}.flyout-leave-active[data-v-bc9dc845]{transition:all .15s ease-in}.flyout-enter-from[data-v-bc9dc845],.flyout-leave-to[data-v-bc9dc845]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-070ab83d]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-070ab83d]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-070ab83d]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-070ab83d]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-070ab83d]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-070ab83d]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-070ab83d]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-070ab83d]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-070ab83d]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-070ab83d]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-070ab83d]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-070ab83d]{display:none}}.menu-icon[data-v-070ab83d]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-070ab83d]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-070ab83d]{padding:12px 32px 11px}}.VPSwitch[data-v-4a1c76db]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-4a1c76db]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-4a1c76db]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-4a1c76db]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-4a1c76db] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-4a1c76db] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-e40a8bb6]{opacity:1}.moon[data-v-e40a8bb6],.dark .sun[data-v-e40a8bb6]{opacity:0}.dark .moon[data-v-e40a8bb6]{opacity:1}.dark .VPSwitchAppearance[data-v-e40a8bb6] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-af096f4a]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-af096f4a]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-8b74d055]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-8b74d055]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-8b74d055]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-8b74d055]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-48c802d0]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-48c802d0]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-48c802d0]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-48c802d0]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-7dd3104a]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-7dd3104a] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-7dd3104a] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-7dd3104a] .group:last-child{padding-bottom:0}.VPMenu[data-v-7dd3104a] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-7dd3104a] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-7dd3104a] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-7dd3104a] .action{padding-left:24px}.VPFlyout[data-v-e5380155]{position:relative}.VPFlyout[data-v-e5380155]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-e5380155]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-e5380155]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-e5380155]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-e5380155]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-e5380155],.button[aria-expanded=true]+.menu[data-v-e5380155]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-e5380155]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-e5380155]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-e5380155]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-e5380155]{margin-right:0;font-size:16px}.text-icon[data-v-e5380155]{margin-left:4px;font-size:14px}.icon[data-v-e5380155]{font-size:20px;transition:fill .25s}.menu[data-v-e5380155]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-717b8b75]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-717b8b75]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-717b8b75]>svg,.VPSocialLink[data-v-717b8b75]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-ee7a9424]{display:flex;justify-content:center}.VPNavBarExtra[data-v-925effce]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-925effce]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-925effce]{display:none}}.trans-title[data-v-925effce]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-925effce],.item.social-links[data-v-925effce]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-925effce]{min-width:176px}.appearance-action[data-v-925effce]{margin-right:-2px}.social-links-list[data-v-925effce]{margin:-4px -8px}.VPNavBarHamburger[data-v-5dea55bf]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-5dea55bf]{display:none}}.container[data-v-5dea55bf]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-5dea55bf]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-5dea55bf]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-5dea55bf]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-5dea55bf]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-5dea55bf]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-5dea55bf]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-5dea55bf],.VPNavBarHamburger.active:hover .middle[data-v-5dea55bf],.VPNavBarHamburger.active:hover .bottom[data-v-5dea55bf]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-5dea55bf],.middle[data-v-5dea55bf],.bottom[data-v-5dea55bf]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-5dea55bf]{top:0;left:0;transform:translate(0)}.middle[data-v-5dea55bf]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-5dea55bf]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-ed5ac1f6]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-ed5ac1f6],.VPNavBarMenuLink[data-v-ed5ac1f6]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-e6d46098]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-e6d46098]{display:flex}}/*! @docsearch/css 3.6.1 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.30196078431372547);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}.DocSearch-Button-Key--pressed{transform:translate3d(0,1px,0);box-shadow:var(--docsearch-key-pressed-shadow)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-164c457f]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-164c457f]{display:flex;align-items:center}}.title[data-v-28a961f9]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-28a961f9]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-28a961f9]{border-bottom-color:var(--vp-c-divider)}}[data-v-28a961f9] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-c80d9ad0]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-c80d9ad0]{display:flex;align-items:center}}.title[data-v-c80d9ad0]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-822684d1]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-822684d1]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-822684d1]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-822684d1]:not(.home){background-color:transparent}.VPNavBar[data-v-822684d1]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-822684d1]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-822684d1]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-822684d1]{padding:0}}.container[data-v-822684d1]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-822684d1],.container>.content[data-v-822684d1]{pointer-events:none}.container[data-v-822684d1] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-822684d1]{max-width:100%}}.title[data-v-822684d1]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-822684d1]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-822684d1]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-822684d1]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-822684d1]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-822684d1]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-822684d1]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-822684d1]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-822684d1]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-822684d1]{column-gap:.5rem}}.menu+.translations[data-v-822684d1]:before,.menu+.appearance[data-v-822684d1]:before,.menu+.social-links[data-v-822684d1]:before,.translations+.appearance[data-v-822684d1]:before,.appearance+.social-links[data-v-822684d1]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-822684d1]:before,.translations+.appearance[data-v-822684d1]:before{margin-right:16px}.appearance+.social-links[data-v-822684d1]:before{margin-left:16px}.social-links[data-v-822684d1]{margin-right:-8px}.divider[data-v-822684d1]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-822684d1]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-822684d1]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-822684d1]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-822684d1]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-822684d1]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-822684d1]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-ffb44008]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-ffb44008]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-27d04aeb]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-27d04aeb]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-7179dbb7]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-7179dbb7]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-4b8941ac]{display:block}.title[data-v-4b8941ac]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-875057a5]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-875057a5]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-875057a5]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-875057a5]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-875057a5]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-875057a5]{transform:rotate(45deg)}.button[data-v-875057a5]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-875057a5]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-875057a5]{transition:transform .25s}.group[data-v-875057a5]:first-child{padding-top:0}.group+.group[data-v-875057a5],.group+.item[data-v-875057a5]{padding-top:4px}.VPNavScreenTranslations[data-v-362991c2]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-362991c2]{height:auto}.title[data-v-362991c2]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-362991c2]{font-size:16px}.icon.lang[data-v-362991c2]{margin-right:8px}.icon.chevron[data-v-362991c2]{margin-left:4px}.list[data-v-362991c2]{padding:4px 0 0 24px}.link[data-v-362991c2]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-833aabba]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-833aabba],.VPNavScreen.fade-leave-active[data-v-833aabba]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-833aabba],.VPNavScreen.fade-leave-active .container[data-v-833aabba]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-833aabba],.VPNavScreen.fade-leave-to[data-v-833aabba]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-833aabba],.VPNavScreen.fade-leave-to .container[data-v-833aabba]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-833aabba]{display:none}}.container[data-v-833aabba]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-833aabba],.menu+.appearance[data-v-833aabba],.translations+.appearance[data-v-833aabba]{margin-top:24px}.menu+.social-links[data-v-833aabba]{margin-top:16px}.appearance+.social-links[data-v-833aabba]{margin-top:16px}.VPNav[data-v-f1e365da]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-f1e365da]{position:fixed}}.VPSidebarItem.level-0[data-v-196b2e5f]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-196b2e5f]{padding-bottom:10px}.item[data-v-196b2e5f]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-196b2e5f]{cursor:pointer}.indicator[data-v-196b2e5f]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-196b2e5f],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-196b2e5f],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-196b2e5f],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-196b2e5f]{background-color:var(--vp-c-brand-1)}.link[data-v-196b2e5f]{display:flex;align-items:center;flex-grow:1}.text[data-v-196b2e5f]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-196b2e5f]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-196b2e5f],.VPSidebarItem.level-2 .text[data-v-196b2e5f],.VPSidebarItem.level-3 .text[data-v-196b2e5f],.VPSidebarItem.level-4 .text[data-v-196b2e5f],.VPSidebarItem.level-5 .text[data-v-196b2e5f]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-196b2e5f],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-196b2e5f]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-1.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-2.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-3.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-4.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-5.has-active>.item>.text[data-v-196b2e5f],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-196b2e5f],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-196b2e5f]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-196b2e5f],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-196b2e5f]{color:var(--vp-c-brand-1)}.caret[data-v-196b2e5f]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-196b2e5f]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-196b2e5f]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-196b2e5f]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-196b2e5f]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-196b2e5f],.VPSidebarItem.level-2 .items[data-v-196b2e5f],.VPSidebarItem.level-3 .items[data-v-196b2e5f],.VPSidebarItem.level-4 .items[data-v-196b2e5f],.VPSidebarItem.level-5 .items[data-v-196b2e5f]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-196b2e5f]{display:none}.no-transition[data-v-9e426adc] .caret-icon{transition:none}.group+.group[data-v-9e426adc]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-9e426adc]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-18756405]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-18756405]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-18756405]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-18756405]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-18756405]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-18756405]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-18756405]{outline:0}.VPSkipLink[data-v-c3508ec8]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-c3508ec8]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-c3508ec8]{top:14px;left:16px}}.Layout[data-v-a9a9e638]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-db81191c]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-db81191c]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-db81191c]{margin:128px 0}}.VPHomeSponsors[data-v-db81191c]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-db81191c]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-db81191c]{padding:0 64px}}.container[data-v-db81191c]{margin:0 auto;max-width:1152px}.love[data-v-db81191c]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-db81191c]{display:inline-block}.message[data-v-db81191c]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-db81191c]{padding-top:32px}.action[data-v-db81191c]{padding-top:40px;text-align:center}.VPTeamPage[data-v-c2f8e101]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-c2f8e101]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-c2f8e101-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-c2f8e101-s],.VPTeamMembers+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-c2f8e101-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-c2f8e101-s],.VPTeamMembers+.VPTeamPageSection[data-v-c2f8e101-s]{margin-top:96px}}.VPTeamMembers[data-v-c2f8e101-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-c2f8e101-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-c2f8e101-s]{padding:0 64px}}.VPTeamPageTitle[data-v-e277e15c]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-e277e15c]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-e277e15c]{padding:80px 64px 48px}}.title[data-v-e277e15c]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-e277e15c]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-e277e15c]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-e277e15c]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-d43bc49d]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-d43bc49d]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-d43bc49d]{padding:0 64px}}.title[data-v-d43bc49d]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-d43bc49d]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-d43bc49d]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-d43bc49d]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-d43bc49d]{padding-top:40px}.VPTeamMembersItem[data-v-f9987cb6]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-f9987cb6]{padding:32px}.VPTeamMembersItem.small .data[data-v-f9987cb6]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-f9987cb6]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-f9987cb6]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-f9987cb6]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-f9987cb6]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-f9987cb6]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-f9987cb6]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-f9987cb6]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-f9987cb6]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-f9987cb6]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-f9987cb6]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-f9987cb6]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-f9987cb6]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-f9987cb6]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-f9987cb6]{text-align:center}.avatar[data-v-f9987cb6]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-f9987cb6]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-f9987cb6]{margin:0;font-weight:600}.affiliation[data-v-f9987cb6]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-f9987cb6]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-f9987cb6]:hover{color:var(--vp-c-brand-1)}.desc[data-v-f9987cb6]{margin:0 auto}.desc[data-v-f9987cb6] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-f9987cb6]{display:flex;justify-content:center;height:56px}.sp-link[data-v-f9987cb6]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-f9987cb6]:hover,.sp .sp-link.link[data-v-f9987cb6]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-f9987cb6]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-fba19bad]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-fba19bad]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-fba19bad]{max-width:876px}.VPTeamMembers.medium .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-fba19bad]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-fba19bad]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-fba19bad]{max-width:760px}.container[data-v-fba19bad]{display:grid;gap:24px;margin:0 auto;max-width:1152px}:root{--vp-plugin-tabs-tab-text-color: var(--vp-c-text-2);--vp-plugin-tabs-tab-active-text-color: var(--vp-c-text-1);--vp-plugin-tabs-tab-hover-text-color: var(--vp-c-text-1);--vp-plugin-tabs-tab-bg: var(--vp-c-bg-soft);--vp-plugin-tabs-tab-divider: var(--vp-c-divider);--vp-plugin-tabs-tab-active-bar-color: var(--vp-c-brand-1)}.plugin-tabs{margin:16px 0;background-color:var(--vp-plugin-tabs-tab-bg);border-radius:8px}.plugin-tabs--tab-list{position:relative;padding:0 12px;overflow-x:auto;overflow-y:hidden}.plugin-tabs--tab-list:after{content:"";position:absolute;bottom:0;left:0;right:0;height:2px;background-color:var(--vp-plugin-tabs-tab-divider)}.plugin-tabs--tab{position:relative;padding:0 12px;line-height:48px;border-bottom:2px solid transparent;color:var(--vp-plugin-tabs-tab-text-color);font-size:14px;font-weight:500;white-space:nowrap;transition:color .25s}.plugin-tabs--tab[aria-selected=true]{color:var(--vp-plugin-tabs-tab-active-text-color)}.plugin-tabs--tab:hover{color:var(--vp-plugin-tabs-tab-hover-text-color)}.plugin-tabs--tab:after{content:"";position:absolute;bottom:-2px;left:8px;right:8px;height:2px;background-color:transparent;transition:background-color .25s;z-index:1}.plugin-tabs--tab[aria-selected=true]:after{background-color:var(--vp-plugin-tabs-tab-active-bar-color)}.plugin-tabs--content[data-v-9b0d03d2]{padding:16px}.plugin-tabs--content[data-v-9b0d03d2]>:first-child:first-child{margin-top:0}.plugin-tabs--content[data-v-9b0d03d2]>:last-child:last-child{margin-bottom:0}.plugin-tabs--content[data-v-9b0d03d2]>div[class*=language-]{border-radius:8px;margin:16px 0}:root:not(.dark) .plugin-tabs--content[data-v-9b0d03d2] div[class*=language-]{background-color:var(--vp-c-bg)}.VPHero .clip{white-space:pre;max-width:500px}:root{--vp-font-family-base: "Barlow", "Inter var experimental", "Inter var", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--vp-font-family-mono: "Space Mono", Menlo, Monaco, Consolas, "Courier New", monospace}:root{--julia-blue: #4063D8;--julia-purple: #9558B2;--julia-red: #CB3C33;--julia-green: #389826;--vp-c-brand: #389826;--vp-c-brand-light: #3dd027;--vp-c-brand-lighter: #9499ff;--vp-c-brand-lightest: #bcc0ff;--vp-c-brand-dark: #535bf2;--vp-c-brand-darker: #454ce1;--vp-c-brand-dimm: #212425}:root{--vp-button-brand-border: var(--vp-c-brand-light);--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand);--vp-button-brand-hover-border: var(--vp-c-brand-light);--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-light);--vp-button-brand-active-border: var(--vp-c-brand-light);--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-button-brand-bg)}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: -webkit-linear-gradient( 120deg, #459c55 30%, #dccc50 );--vp-home-hero-image-background-image: linear-gradient( -45deg, #9558B2 30%, #389826 30%, #CB3C33 );--vp-home-hero-image-filter: blur(40px)}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(56px)}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(72px)}}:root.dark{--vp-custom-block-tip-border: var(--vp-c-brand);--vp-custom-block-tip-text: var(--vp-c-brand-lightest);--vp-custom-block-tip-bg: var(--vp-c-brand-dimm);--vp-c-black: hsl(220 20% 9%);--vp-c-black-pure: hsl(220, 24%, 4%);--vp-c-black-soft: hsl(220 16% 13%);--vp-c-black-mute: hsl(220 14% 17%);--vp-c-gray: hsl(220 8% 56%);--vp-c-gray-dark-1: hsl(220 10% 39%);--vp-c-gray-dark-2: hsl(220 12% 28%);--vp-c-gray-dark-3: hsl(220 12% 23%);--vp-c-gray-dark-4: hsl(220 14% 17%);--vp-c-gray-dark-5: hsl(220 16% 13%);--vp-custom-block-info-bg: hsl(220 14% 17%)}.DocSearch{--docsearch-primary-color: var(--vp-c-brand) !important}mjx-container>svg{display:block;margin:auto}mjx-container{padding:.5rem 0}mjx-container{display:inline-block;margin:auto 2px -2px}mjx-container>svg{margin:auto;display:inline-block}:root{--vp-c-brand-1: #CB3C33;--vp-c-brand-2: #CB3C33;--vp-c-brand-3: #CB3C33;--vp-c-sponsor: #ca2971;--vitest-c-sponsor-hover: #c13071}.dark{--vp-c-brand-1: #91dd33;--vp-c-brand-2: #91dd33;--vp-c-brand-3: #91dd33;--vp-c-sponsor: #91dd33;--vitest-c-sponsor-hover: #e51370}.VPLocalSearchBox[data-v-f4c4f812]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-f4c4f812]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-f4c4f812]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-f4c4f812]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-f4c4f812]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-f4c4f812]{padding:0 8px}}.search-bar[data-v-f4c4f812]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-f4c4f812]{display:block;font-size:18px}.navigate-icon[data-v-f4c4f812]{display:block;font-size:14px}.search-icon[data-v-f4c4f812]{margin:8px}@media (max-width: 767px){.search-icon[data-v-f4c4f812]{display:none}}.search-input[data-v-f4c4f812]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-f4c4f812]{padding:6px 4px}}.search-actions[data-v-f4c4f812]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-f4c4f812]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-f4c4f812]{display:none}}.search-actions button[data-v-f4c4f812]{padding:8px}.search-actions button[data-v-f4c4f812]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-f4c4f812]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-f4c4f812]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-f4c4f812]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-f4c4f812]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-f4c4f812]{display:none}}.search-keyboard-shortcuts kbd[data-v-f4c4f812]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-f4c4f812]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-f4c4f812]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-f4c4f812]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-f4c4f812]{margin:8px}}.titles[data-v-f4c4f812]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-f4c4f812]{display:flex;align-items:center;gap:4px}.title.main[data-v-f4c4f812]{font-weight:500}.title-icon[data-v-f4c4f812]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-f4c4f812]{opacity:.5}.result.selected[data-v-f4c4f812]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-f4c4f812]{position:relative}.excerpt[data-v-f4c4f812]{opacity:75%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;opacity:.5;margin-top:4px}.result.selected .excerpt[data-v-f4c4f812]{opacity:1}.excerpt[data-v-f4c4f812] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-f4c4f812] mark,.excerpt[data-v-f4c4f812] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-f4c4f812] .vp-code-group .tabs{display:none}.excerpt[data-v-f4c4f812] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-f4c4f812]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-f4c4f812]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-f4c4f812],.result.selected .title-icon[data-v-f4c4f812]{color:var(--vp-c-brand-1)!important}.no-results[data-v-f4c4f812]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-f4c4f812]{flex:none}
diff --git a/previews/PR135/assets/tutorials_creating_geometry.md.D-ZnfJ-b.js b/previews/PR135/assets/tutorials_creating_geometry.md.CQNXRFYE.js
similarity index 97%
rename from previews/PR135/assets/tutorials_creating_geometry.md.D-ZnfJ-b.js
rename to previews/PR135/assets/tutorials_creating_geometry.md.CQNXRFYE.js
index 991d509ea..f37ae4b0f 100644
--- a/previews/PR135/assets/tutorials_creating_geometry.md.D-ZnfJ-b.js
+++ b/previews/PR135/assets/tutorials_creating_geometry.md.CQNXRFYE.js
@@ -1,4 +1,4 @@
-import{_ as s,c as i,o as a,a7 as e}from"./chunks/framework.k41oUgTf.js";const t="/GeometryOps.jl/previews/PR135/assets/tkuztgb.Dz86q2IX.png",n="/GeometryOps.jl/previews/PR135/assets/khdsurm.Cx40vhB3.png",l="/GeometryOps.jl/previews/PR135/assets/wvwjwqj.0OJvb21A.png",p="/GeometryOps.jl/previews/PR135/assets/ickbkgt.DaovVbE6.png",h="/GeometryOps.jl/previews/PR135/assets/zxxaytr.B9NpLJr_.png",o="/GeometryOps.jl/previews/PR135/assets/xgnjvje.CG4dr3Lx.png",k="/GeometryOps.jl/previews/PR135/assets/kbdgrqm.3sfpQl2i.png",r="/GeometryOps.jl/previews/PR135/assets/yrwjvuj.Dab1-ETk.png",g="/GeometryOps.jl/previews/PR135/assets/nfdcrog.lu4jwpi-.png",d="/GeometryOps.jl/previews/PR135/assets/xpzymdf.DwqDxlAG.png",E="/GeometryOps.jl/previews/PR135/assets/gwypvpf.CLtpJ5Wb.png",D=JSON.parse('{"title":"Creating Geometry","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/creating_geometry.md","filePath":"tutorials/creating_geometry.md","lastUpdated":null}'),c={name:"tutorials/creating_geometry.md"},y=e(`

Creating Geometry

In this tutorial, we're going to:

  1. Create and plot geometries

  2. Plot geometries on a map using GeoMakie and coordinate reference system (CRS)

  3. Create geospatial geometries with embedded coordinate reference system information

  4. Assign attributes to geospatial geometries

  5. Save geospatial geometries to common geospatial file formats

First, we load some required packages.

julia
# Geospatial packages from Julia
+import{_ as s,c as i,o as a,a7 as e}from"./chunks/framework.CONf0Rze.js";const t="/GeometryOps.jl/previews/PR135/assets/iijrfjx.Dz86q2IX.png",n="/GeometryOps.jl/previews/PR135/assets/ztkdutf.Cx40vhB3.png",l="/GeometryOps.jl/previews/PR135/assets/gobvpyq.0OJvb21A.png",p="/GeometryOps.jl/previews/PR135/assets/piejhcv.DaovVbE6.png",h="/GeometryOps.jl/previews/PR135/assets/xheurnn.B9NpLJr_.png",o="/GeometryOps.jl/previews/PR135/assets/ejkzyqr.CG4dr3Lx.png",k="/GeometryOps.jl/previews/PR135/assets/ltowmlk.3sfpQl2i.png",r="/GeometryOps.jl/previews/PR135/assets/mqcmtly.Dab1-ETk.png",g="/GeometryOps.jl/previews/PR135/assets/ovfjlyd.lu4jwpi-.png",d="/GeometryOps.jl/previews/PR135/assets/kgneegt.DwqDxlAG.png",E="/GeometryOps.jl/previews/PR135/assets/hsawanf.CLtpJ5Wb.png",D=JSON.parse('{"title":"Creating Geometry","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/creating_geometry.md","filePath":"tutorials/creating_geometry.md","lastUpdated":null}'),c={name:"tutorials/creating_geometry.md"},y=e(`

Creating Geometry

In this tutorial, we're going to:

  1. Create and plot geometries

  2. Plot geometries on a map using GeoMakie and coordinate reference system (CRS)

  3. Create geospatial geometries with embedded coordinate reference system information

  4. Assign attributes to geospatial geometries

  5. Save geospatial geometries to common geospatial file formats

First, we load some required packages.

julia
# Geospatial packages from Julia
 import GeoInterface as GI
 import GeometryOps as GO
 import GeoFormatTypes as GFT
@@ -48,7 +48,7 @@ import{_ as s,c as i,o as a,a7 as e}from"./chunks/framework.k41oUgTf.js";const t
 f = CoordinateTransformations.Translation(xoffset, yoffset);
 multipolygon = GO.transform(f, multipolygon);
 plot!(multipolygon)
-fig

Great, now we can make Points, MultiPoints, Lines, LineStrings, Polygons (with holes), and MultiPolygons and modify them using [CoordinateTransformations] and [GeometryOps].

Plot geometries on a map using GeoMakie and coordinate reference system (CRS)

In geospatial sciences we often have data in one Coordinate Reference System (CRS) (source) and would like to display it in different (destination) CRS. GeoMakie allows us to do this by automatically projecting from source to destination CRS.

Here, our source CRS is common geographic (i.e. coordinates of latitude and longitude), WGS84.

julia
source_crs1 = GFT.EPSG(4326)
GeoFormatTypes.EPSG{1}((4326,))

Now let's pick a destination CRS for displaying our map. Here we'll pick natearth2.

julia
destination_crs = "+proj=natearth2"
"+proj=natearth2"

Let's add land area for context. First, download and open the Natural Earth global land polygons at 110 m resolution.GeoMakie ships with this particular dataset, so we will access it from there.

julia
land_path = GeoMakie.assetpath("ne_110m_land.geojson")
"/home/runner/.julia/packages/GeoMakie/nOel0/assets/ne_110m_land.geojson"

Note

Natural Earth has lots of other datasets, and there is a Julia package that provides an interface to it called NaturalEarth.jl.

Read the land MultiPolygons as a GeoJSON.FeatureCollection.

julia
land_geo = GeoJSON.read(land_path)
FeatureCollection with 127 Features

We then need to create a figure with a GeoAxis that can handle the projection between source and destinaton CRS. For GeoMakie, source is the CRS of the input and dest is the CRS you want to visualize in.

julia
fig = Figure(size=(1000, 500));
+fig

Great, now we can make Points, MultiPoints, Lines, LineStrings, Polygons (with holes), and MultiPolygons and modify them using [CoordinateTransformations] and [GeometryOps].

Plot geometries on a map using GeoMakie and coordinate reference system (CRS)

In geospatial sciences we often have data in one Coordinate Reference System (CRS) (source) and would like to display it in different (destination) CRS. GeoMakie allows us to do this by automatically projecting from source to destination CRS.

Here, our source CRS is common geographic (i.e. coordinates of latitude and longitude), WGS84.

julia
source_crs1 = GFT.EPSG(4326)
GeoFormatTypes.EPSG{1}((4326,))

Now let's pick a destination CRS for displaying our map. Here we'll pick natearth2.

julia
destination_crs = "+proj=natearth2"
"+proj=natearth2"

Let's add land area for context. First, download and open the Natural Earth global land polygons at 110 m resolution.GeoMakie ships with this particular dataset, so we will access it from there.

julia
land_path = GeoMakie.assetpath("ne_110m_land.geojson")
"/home/runner/.julia/packages/GeoMakie/2upVC/assets/ne_110m_land.geojson"

Note

Natural Earth has lots of other datasets, and there is a Julia package that provides an interface to it called NaturalEarth.jl.

Read the land MultiPolygons as a GeoJSON.FeatureCollection.

julia
land_geo = GeoJSON.read(land_path)
FeatureCollection with 127 Features

We then need to create a figure with a GeoAxis that can handle the projection between source and destination CRS. For GeoMakie, source is the CRS of the input and dest is the CRS you want to visualize in.

julia
fig = Figure(size=(1000, 500));
 ga = GeoAxis(
     fig[1, 1];
     source = source_crs1,
@@ -72,7 +72,7 @@ import{_ as s,c as i,o as a,a7 as e}from"./chunks/framework.k41oUgTf.js";const t
 ϴ = 0:0.01:2pi;
 x = r .* (k + 1) .* cos.(ϴ) .- r .* cos.((k + 1) .* ϴ);
 y = r .* (k + 1) .* sin.(ϴ) .- r .* sin.((k + 1) .* ϴ);
-ring4 = GI.LinearRing(Point.(zip(x, y)))
GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}(Point{2, Float64}[[21.0, 0.0], [21.00839489109211, 0.00025191811248184703], [21.033518309870985, 0.0020133807972559925], [21.075186885419612, 0.006784125578492062], [21.13309630561615, 0.016044338630866517], [21.206823267470536, 0.031245035570328428], [21.29582819010705, 0.053798628882221644], [21.39945867303846, 0.08506974233813636], [21.516953677609987, 0.12636633117296836], [21.64744840486518, 0.17893116483784577]  …  [21.69159119078359, -0.19823293781563178], [21.557153362189904, -0.14182952335952814], [21.43541888381864, -0.09707519809793252], [21.327284472232776, -0.06274967861547665], [21.233544778745394, -0.03756486776283019], [21.15488729606723, -0.020173244847778715], [21.091887951911644, -0.0091766360295773], [21.045007417743918, -0.0031353088009582475], [21.01458815628695, -0.0005773323690041465], [21.00085222666982, -8.14404531208901e-6]], nothing, nothing)

But this time when we create the Polygon we beed to specify the CRS at the time of creation, making it a geospatial polygon

julia
geopoly1 = GI.Polygon([ring4], crs = source_crs1)
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}}, Nothing, GeoFormatTypes.EPSG{1}}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}(Point{2, Float64}[[21.0, 0.0], [21.00839489109211, 0.00025191811248184703], [21.033518309870985, 0.0020133807972559925], [21.075186885419612, 0.006784125578492062], [21.13309630561615, 0.016044338630866517], [21.206823267470536, 0.031245035570328428], [21.29582819010705, 0.053798628882221644], [21.39945867303846, 0.08506974233813636], [21.516953677609987, 0.12636633117296836], [21.64744840486518, 0.17893116483784577]  …  [21.69159119078359, -0.19823293781563178], [21.557153362189904, -0.14182952335952814], [21.43541888381864, -0.09707519809793252], [21.327284472232776, -0.06274967861547665], [21.233544778745394, -0.03756486776283019], [21.15488729606723, -0.020173244847778715], [21.091887951911644, -0.0091766360295773], [21.045007417743918, -0.0031353088009582475], [21.01458815628695, -0.0005773323690041465], [21.00085222666982, -8.14404531208901e-6]], nothing, nothing)], nothing, GeoFormatTypes.EPSG{1}((4326,)))

Note

It is good practice to only include CRS information with the highest-level geometry. Not doing so can bloat the memory footprint of the geometry. CRS information can be included at the individual Point level but is discouraged.

And let's create second Polygon by shifting the first using CoordinateTransformations

julia
xoffset = 20.;
+ring4 = GI.LinearRing(Point.(zip(x, y)))
GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}(Point{2, Float64}[[21.0, 0.0], [21.00839489109211, 0.00025191811248184703], [21.033518309870985, 0.0020133807972559925], [21.075186885419612, 0.006784125578492062], [21.13309630561615, 0.016044338630866517], [21.206823267470536, 0.031245035570328428], [21.29582819010705, 0.053798628882221644], [21.39945867303846, 0.08506974233813636], [21.516953677609987, 0.12636633117296836], [21.64744840486518, 0.17893116483784577]  …  [21.69159119078359, -0.19823293781563178], [21.557153362189904, -0.14182952335952814], [21.43541888381864, -0.09707519809793252], [21.327284472232776, -0.06274967861547665], [21.233544778745394, -0.03756486776283019], [21.15488729606723, -0.020173244847778715], [21.091887951911644, -0.0091766360295773], [21.045007417743918, -0.0031353088009582475], [21.01458815628695, -0.0005773323690041465], [21.00085222666982, -8.14404531208901e-6]], nothing, nothing)

But this time when we create the Polygon we need to specify the CRS at the time of creation, making it a geospatial polygon

julia
geopoly1 = GI.Polygon([ring4], crs = source_crs1)
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}}, Nothing, GeoFormatTypes.EPSG{1}}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}(Point{2, Float64}[[21.0, 0.0], [21.00839489109211, 0.00025191811248184703], [21.033518309870985, 0.0020133807972559925], [21.075186885419612, 0.006784125578492062], [21.13309630561615, 0.016044338630866517], [21.206823267470536, 0.031245035570328428], [21.29582819010705, 0.053798628882221644], [21.39945867303846, 0.08506974233813636], [21.516953677609987, 0.12636633117296836], [21.64744840486518, 0.17893116483784577]  …  [21.69159119078359, -0.19823293781563178], [21.557153362189904, -0.14182952335952814], [21.43541888381864, -0.09707519809793252], [21.327284472232776, -0.06274967861547665], [21.233544778745394, -0.03756486776283019], [21.15488729606723, -0.020173244847778715], [21.091887951911644, -0.0091766360295773], [21.045007417743918, -0.0031353088009582475], [21.01458815628695, -0.0005773323690041465], [21.00085222666982, -8.14404531208901e-6]], nothing, nothing)], nothing, GeoFormatTypes.EPSG{1}((4326,)))

Note

It is good practice to only include CRS information with the highest-level geometry. Not doing so can bloat the memory footprint of the geometry. CRS information can be included at the individual Point level but is discouraged.

And let's create second Polygon by shifting the first using CoordinateTransformations

julia
xoffset = 20.;
 yoffset = -25.;
 f = CoordinateTransformations.Translation(xoffset, yoffset);
 geopoly2 = GO.transform(f, geopoly1);
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, GeoFormatTypes.EPSG{1}}}, Nothing, GeoFormatTypes.EPSG{1}}(GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, GeoFormatTypes.EPSG{1}}[GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, GeoFormatTypes.EPSG{1}}(StaticArraysCore.SVector{2, Float64}[[41.0, -25.0], [41.00839489109211, -24.999748081887518], [41.033518309870985, -24.997986619202745], [41.07518688541961, -24.99321587442151], [41.13309630561615, -24.983955661369134], [41.20682326747054, -24.96875496442967], [41.295828190107045, -24.946201371117777], [41.39945867303846, -24.914930257661865], [41.51695367760999, -24.873633668827033], [41.64744840486518, -24.821068835162155]  …  [41.69159119078359, -25.198232937815632], [41.55715336218991, -25.14182952335953], [41.43541888381864, -25.097075198097933], [41.327284472232776, -25.062749678615475], [41.2335447787454, -25.037564867762832], [41.15488729606723, -25.02017324484778], [41.091887951911644, -25.009176636029576], [41.04500741774392, -25.003135308800957], [41.01458815628695, -25.000577332369005], [41.00085222666982, -25.000008144045314]], nothing, GeoFormatTypes.EPSG{1}((4326,)))], nothing, GeoFormatTypes.EPSG{1}((4326,)))

Creating a table with attributes and geometry

Typically, you'll also want to include attributes with your geometries. Attributes are simply data that are attributed to each geometry. The easiest way to do this is to create a table with a :geometry column. Let's do this using DataFrames.

julia
using DataFrames
diff --git a/previews/PR135/assets/tutorials_creating_geometry.md.CQNXRFYE.lean.js b/previews/PR135/assets/tutorials_creating_geometry.md.CQNXRFYE.lean.js
new file mode 100644
index 000000000..e71e96112
--- /dev/null
+++ b/previews/PR135/assets/tutorials_creating_geometry.md.CQNXRFYE.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as i,o as a,a7 as e}from"./chunks/framework.CONf0Rze.js";const t="/GeometryOps.jl/previews/PR135/assets/iijrfjx.Dz86q2IX.png",n="/GeometryOps.jl/previews/PR135/assets/ztkdutf.Cx40vhB3.png",l="/GeometryOps.jl/previews/PR135/assets/gobvpyq.0OJvb21A.png",p="/GeometryOps.jl/previews/PR135/assets/piejhcv.DaovVbE6.png",h="/GeometryOps.jl/previews/PR135/assets/xheurnn.B9NpLJr_.png",o="/GeometryOps.jl/previews/PR135/assets/ejkzyqr.CG4dr3Lx.png",k="/GeometryOps.jl/previews/PR135/assets/ltowmlk.3sfpQl2i.png",r="/GeometryOps.jl/previews/PR135/assets/mqcmtly.Dab1-ETk.png",g="/GeometryOps.jl/previews/PR135/assets/ovfjlyd.lu4jwpi-.png",d="/GeometryOps.jl/previews/PR135/assets/kgneegt.DwqDxlAG.png",E="/GeometryOps.jl/previews/PR135/assets/hsawanf.CLtpJ5Wb.png",D=JSON.parse('{"title":"Creating Geometry","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/creating_geometry.md","filePath":"tutorials/creating_geometry.md","lastUpdated":null}'),c={name:"tutorials/creating_geometry.md"},y=e("",120),F=[y];function u(f,C,m,b,v,G){return a(),i("div",null,F)}const P=s(c,[["render",u]]);export{D as __pageData,P as default};
diff --git a/previews/PR135/assets/tutorials_creating_geometry.md.D-ZnfJ-b.lean.js b/previews/PR135/assets/tutorials_creating_geometry.md.D-ZnfJ-b.lean.js
deleted file mode 100644
index 7bba54068..000000000
--- a/previews/PR135/assets/tutorials_creating_geometry.md.D-ZnfJ-b.lean.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as s,c as i,o as a,a7 as e}from"./chunks/framework.k41oUgTf.js";const t="/GeometryOps.jl/previews/PR135/assets/tkuztgb.Dz86q2IX.png",n="/GeometryOps.jl/previews/PR135/assets/khdsurm.Cx40vhB3.png",l="/GeometryOps.jl/previews/PR135/assets/wvwjwqj.0OJvb21A.png",p="/GeometryOps.jl/previews/PR135/assets/ickbkgt.DaovVbE6.png",h="/GeometryOps.jl/previews/PR135/assets/zxxaytr.B9NpLJr_.png",o="/GeometryOps.jl/previews/PR135/assets/xgnjvje.CG4dr3Lx.png",k="/GeometryOps.jl/previews/PR135/assets/kbdgrqm.3sfpQl2i.png",r="/GeometryOps.jl/previews/PR135/assets/yrwjvuj.Dab1-ETk.png",g="/GeometryOps.jl/previews/PR135/assets/nfdcrog.lu4jwpi-.png",d="/GeometryOps.jl/previews/PR135/assets/xpzymdf.DwqDxlAG.png",E="/GeometryOps.jl/previews/PR135/assets/gwypvpf.CLtpJ5Wb.png",D=JSON.parse('{"title":"Creating Geometry","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/creating_geometry.md","filePath":"tutorials/creating_geometry.md","lastUpdated":null}'),c={name:"tutorials/creating_geometry.md"},y=e("",120),F=[y];function u(f,C,m,b,v,G){return a(),i("div",null,F)}const P=s(c,[["render",u]]);export{D as __pageData,P as default};
diff --git a/previews/PR135/assets/tutorials_geodesic_paths.md.B5A7YX9J.js b/previews/PR135/assets/tutorials_geodesic_paths.md.B5A7YX9J.js
new file mode 100644
index 000000000..532b39adf
--- /dev/null
+++ b/previews/PR135/assets/tutorials_geodesic_paths.md.B5A7YX9J.js
@@ -0,0 +1,11 @@
+import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const h="/GeometryOps.jl/previews/PR135/assets/erkqkyr.Danh069g.png",c=JSON.parse('{"title":"Geodesic paths","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/geodesic_paths.md","filePath":"tutorials/geodesic_paths.md","lastUpdated":null}'),t={name:"tutorials/geodesic_paths.md"},p=n(`

Geodesic paths

Geodesic paths are paths computed on an ellipsoid, as opposed to a plane.

julia
import GeometryOps as GO, GeoInterface as GI
+using CairoMakie, GeoMakie
+
+
+IAH = (-95.358421, 29.749907)
+AMS = (4.897070, 52.377956)
+
+
+fig, ga, _cp = lines(GeoMakie.coastlines(); axis = (; type = GeoAxis))
+lines!(ga, GO.segmentize(GO.GeodesicSegments(; max_distance = 100_000), GI.LineString([IAH, AMS])); color = Makie.wong_colors()[2])
+fig

',4),k=[p];function e(l,E,r,d,g,o){return a(),i("div",null,k)}const F=s(t,[["render",e]]);export{c as __pageData,F as default}; diff --git a/previews/PR135/assets/tutorials_geodesic_paths.md.B5A7YX9J.lean.js b/previews/PR135/assets/tutorials_geodesic_paths.md.B5A7YX9J.lean.js new file mode 100644 index 000000000..5564a603a --- /dev/null +++ b/previews/PR135/assets/tutorials_geodesic_paths.md.B5A7YX9J.lean.js @@ -0,0 +1 @@ +import{_ as s,c as i,o as a,a7 as n}from"./chunks/framework.CONf0Rze.js";const h="/GeometryOps.jl/previews/PR135/assets/erkqkyr.Danh069g.png",c=JSON.parse('{"title":"Geodesic paths","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/geodesic_paths.md","filePath":"tutorials/geodesic_paths.md","lastUpdated":null}'),t={name:"tutorials/geodesic_paths.md"},p=n("",4),k=[p];function e(l,E,r,d,g,o){return a(),i("div",null,k)}const F=s(t,[["render",e]]);export{c as __pageData,F as default}; diff --git a/previews/PR135/assets/tutorials_spatial_joins.md.C715FNUG.js b/previews/PR135/assets/tutorials_spatial_joins.md.BU34-gKB.js similarity index 99% rename from previews/PR135/assets/tutorials_spatial_joins.md.C715FNUG.js rename to previews/PR135/assets/tutorials_spatial_joins.md.BU34-gKB.js index cd15348bb..e94ab87aa 100644 --- a/previews/PR135/assets/tutorials_spatial_joins.md.C715FNUG.js +++ b/previews/PR135/assets/tutorials_spatial_joins.md.BU34-gKB.js @@ -1,4 +1,4 @@ -import{_ as h,c as a,j as s,a as i,a7 as n,o as t}from"./chunks/framework.k41oUgTf.js";const e="/GeometryOps.jl/previews/PR135/assets/ukybfnb.3UVIT8DR.png",l="/GeometryOps.jl/previews/PR135/assets/fpctjru.CnVzN9w3.png",p="/GeometryOps.jl/previews/PR135/assets/wkykfav.OhZZIiD6.png",B=JSON.parse('{"title":"Spatial joins","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/spatial_joins.md","filePath":"tutorials/spatial_joins.md","lastUpdated":null}'),k={name:"tutorials/spatial_joins.md"},r=s("h1",{id:"Spatial-joins",tabindex:"-1"},[i("Spatial joins "),s("a",{class:"header-anchor",href:"#Spatial-joins","aria-label":'Permalink to "Spatial joins {#Spatial-joins}"'},"​")],-1),E=s("a",{href:"https://www.geeksforgeeks.org/sql-join-set-1-inner-left-right-and-full-joins/",target:"_blank",rel:"noreferrer"},"table joins",-1),d={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},o={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"6.307ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 2787.7 1000","aria-hidden":"true"},g=n('',1),y=[g],c=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"p"),s("mo",{stretchy:"false"},"("),s("mi",null,"x"),s("mo",null,","),s("mi",null,"y"),s("mo",{stretchy:"false"},")")])],-1),F=s("code",null,"true",-1),u=s("code",null,"false",-1),m=s("a",{href:"https://en.wikipedia.org/wiki/DE-9IM",target:"_blank",rel:"noreferrer"},[s("code",null,"DE-9IM")],-1),C=n(`

Spatial joins can be done between any geometry types (from geometrycollections to points), just as geometrical predicates can be evaluated on any geometries.

In this tutorial, we will show how to perform a spatial join on first a toy dataset and then two Natural Earth datasets, to show how this can be used in the real world.

In order to perform the spatial join, we use FlexiJoins.jl to perform the join, specifically using its by_pred joining method. This allows the user to specify a predicate in the following manner:

julia
[inner/left/right/outer/...]join((table1, table1),
+import{_ as h,c as a,j as s,a as i,a7 as n,o as t}from"./chunks/framework.CONf0Rze.js";const e="/GeometryOps.jl/previews/PR135/assets/zghchbn.3UVIT8DR.png",l="/GeometryOps.jl/previews/PR135/assets/cezjmfi.BcI7dJNv.png",p="/GeometryOps.jl/previews/PR135/assets/leqplng.DT95HOc4.png",B=JSON.parse('{"title":"Spatial joins","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/spatial_joins.md","filePath":"tutorials/spatial_joins.md","lastUpdated":null}'),k={name:"tutorials/spatial_joins.md"},r=s("h1",{id:"Spatial-joins",tabindex:"-1"},[i("Spatial joins "),s("a",{class:"header-anchor",href:"#Spatial-joins","aria-label":'Permalink to "Spatial joins {#Spatial-joins}"'},"​")],-1),E=s("a",{href:"https://www.geeksforgeeks.org/sql-join-set-1-inner-left-right-and-full-joins/",target:"_blank",rel:"noreferrer"},"table joins",-1),d={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},o={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"6.307ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 2787.7 1000","aria-hidden":"true"},g=n('',1),y=[g],c=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"p"),s("mo",{stretchy:"false"},"("),s("mi",null,"x"),s("mo",null,","),s("mi",null,"y"),s("mo",{stretchy:"false"},")")])],-1),F=s("code",null,"true",-1),u=s("code",null,"false",-1),m=s("a",{href:"https://en.wikipedia.org/wiki/DE-9IM",target:"_blank",rel:"noreferrer"},[s("code",null,"DE-9IM")],-1),C=n(`

Spatial joins can be done between any geometry types (from geometrycollections to points), just as geometrical predicates can be evaluated on any geometries.

In this tutorial, we will show how to perform a spatial join on first a toy dataset and then two Natural Earth datasets, to show how this can be used in the real world.

In order to perform the spatial join, we use FlexiJoins.jl to perform the join, specifically using its by_pred joining method. This allows the user to specify a predicate in the following manner:

julia
[inner/left/right/outer/...]join((table1, table1),
     by_pred(:table1_column, predicate_function, :table2_column) # & add other conditions here
 )

We have enabled the use of all of GeometryOps' boolean comparisons here. These are:

julia
GO.contains, GO.within, GO.intersects, GO.touches, GO.crosses, GO.disjoint, GO.overlaps, GO.covers, GO.coveredby, GO.equals

Tip

Always place the dataframe with more complex geometries second, as that is the one which will be sorted into a tree.

Simple example

This example demonstrates how to perform a spatial join between two datasets: a set of polygons and a set of randomly generated points.

The polygons are represented as a DataFrame with geometries and colors, while the points are stored in a separate DataFrame.

The spatial join is performed using the contains predicate from GeometryOps, which checks if each point is contained within any of the polygons. The resulting joined DataFrame is then used to plot the points, colored according to the containing polygon.

First, we generate our data. We create two triangle polygons which, together, span the rectangle (0, 0, 1, 1), and a set of points which are randomly distributed within this rectangle.

julia
import GeoInterface as GI, GeometryOps as GO
 using FlexiJoins, DataFrames
diff --git a/previews/PR135/assets/tutorials_spatial_joins.md.C715FNUG.lean.js b/previews/PR135/assets/tutorials_spatial_joins.md.BU34-gKB.lean.js
similarity index 89%
rename from previews/PR135/assets/tutorials_spatial_joins.md.C715FNUG.lean.js
rename to previews/PR135/assets/tutorials_spatial_joins.md.BU34-gKB.lean.js
index 5f58a59ec..205cc9063 100644
--- a/previews/PR135/assets/tutorials_spatial_joins.md.C715FNUG.lean.js
+++ b/previews/PR135/assets/tutorials_spatial_joins.md.BU34-gKB.lean.js
@@ -1 +1 @@
-import{_ as h,c as a,j as s,a as i,a7 as n,o as t}from"./chunks/framework.k41oUgTf.js";const e="/GeometryOps.jl/previews/PR135/assets/ukybfnb.3UVIT8DR.png",l="/GeometryOps.jl/previews/PR135/assets/fpctjru.CnVzN9w3.png",p="/GeometryOps.jl/previews/PR135/assets/wkykfav.OhZZIiD6.png",B=JSON.parse('{"title":"Spatial joins","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/spatial_joins.md","filePath":"tutorials/spatial_joins.md","lastUpdated":null}'),k={name:"tutorials/spatial_joins.md"},r=s("h1",{id:"Spatial-joins",tabindex:"-1"},[i("Spatial joins "),s("a",{class:"header-anchor",href:"#Spatial-joins","aria-label":'Permalink to "Spatial joins {#Spatial-joins}"'},"​")],-1),E=s("a",{href:"https://www.geeksforgeeks.org/sql-join-set-1-inner-left-right-and-full-joins/",target:"_blank",rel:"noreferrer"},"table joins",-1),d={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},o={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"6.307ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 2787.7 1000","aria-hidden":"true"},g=n("",1),y=[g],c=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"p"),s("mo",{stretchy:"false"},"("),s("mi",null,"x"),s("mo",null,","),s("mi",null,"y"),s("mo",{stretchy:"false"},")")])],-1),F=s("code",null,"true",-1),u=s("code",null,"false",-1),m=s("a",{href:"https://en.wikipedia.org/wiki/DE-9IM",target:"_blank",rel:"noreferrer"},[s("code",null,"DE-9IM")],-1),C=n("",37);function T(_,b,f,D,Q,w){return t(),a("div",null,[r,s("p",null,[i("Spatial joins are "),E,i(" which are based not on equality, but on some predicate "),s("mjx-container",d,[(t(),a("svg",o,y)),c]),i(", which takes two geometries, and returns a value of either "),F,i(" or "),u,i(". For geometries, the "),m,i(" spatial relationship model is used to determine the spatial relationship between two geometries.")]),C])}const v=h(k,[["render",T]]);export{B as __pageData,v as default};
+import{_ as h,c as a,j as s,a as i,a7 as n,o as t}from"./chunks/framework.CONf0Rze.js";const e="/GeometryOps.jl/previews/PR135/assets/zghchbn.3UVIT8DR.png",l="/GeometryOps.jl/previews/PR135/assets/cezjmfi.BcI7dJNv.png",p="/GeometryOps.jl/previews/PR135/assets/leqplng.DT95HOc4.png",B=JSON.parse('{"title":"Spatial joins","description":"","frontmatter":{},"headers":[],"relativePath":"tutorials/spatial_joins.md","filePath":"tutorials/spatial_joins.md","lastUpdated":null}'),k={name:"tutorials/spatial_joins.md"},r=s("h1",{id:"Spatial-joins",tabindex:"-1"},[i("Spatial joins "),s("a",{class:"header-anchor",href:"#Spatial-joins","aria-label":'Permalink to "Spatial joins {#Spatial-joins}"'},"​")],-1),E=s("a",{href:"https://www.geeksforgeeks.org/sql-join-set-1-inner-left-right-and-full-joins/",target:"_blank",rel:"noreferrer"},"table joins",-1),d={class:"MathJax",jax:"SVG",style:{direction:"ltr",position:"relative"}},o={style:{overflow:"visible","min-height":"1px","min-width":"1px","vertical-align":"-0.566ex"},xmlns:"http://www.w3.org/2000/svg",width:"6.307ex",height:"2.262ex",role:"img",focusable:"false",viewBox:"0 -750 2787.7 1000","aria-hidden":"true"},g=n("",1),y=[g],c=s("mjx-assistive-mml",{unselectable:"on",display:"inline",style:{top:"0px",left:"0px",clip:"rect(1px, 1px, 1px, 1px)","-webkit-touch-callout":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none","-ms-user-select":"none","user-select":"none",position:"absolute",padding:"1px 0px 0px 0px",border:"0px",display:"block",width:"auto",overflow:"hidden"}},[s("math",{xmlns:"http://www.w3.org/1998/Math/MathML"},[s("mi",null,"p"),s("mo",{stretchy:"false"},"("),s("mi",null,"x"),s("mo",null,","),s("mi",null,"y"),s("mo",{stretchy:"false"},")")])],-1),F=s("code",null,"true",-1),u=s("code",null,"false",-1),m=s("a",{href:"https://en.wikipedia.org/wiki/DE-9IM",target:"_blank",rel:"noreferrer"},[s("code",null,"DE-9IM")],-1),C=n("",37);function T(_,b,f,D,Q,w){return t(),a("div",null,[r,s("p",null,[i("Spatial joins are "),E,i(" which are based not on equality, but on some predicate "),s("mjx-container",d,[(t(),a("svg",o,y)),c]),i(", which takes two geometries, and returns a value of either "),F,i(" or "),u,i(". For geometries, the "),m,i(" spatial relationship model is used to determine the spatial relationship between two geometries.")]),C])}const v=h(k,[["render",T]]);export{B as __pageData,v as default};
diff --git a/previews/PR135/assets/tzjojwg.DvOK4aMR.png b/previews/PR135/assets/tzjojwg.DvOK4aMR.png
new file mode 100644
index 000000000..ba572c983
Binary files /dev/null and b/previews/PR135/assets/tzjojwg.DvOK4aMR.png differ
diff --git a/previews/PR135/assets/nnfjmam.DuBHk1fh.png b/previews/PR135/assets/ugotupt.DuBHk1fh.png
similarity index 100%
rename from previews/PR135/assets/nnfjmam.DuBHk1fh.png
rename to previews/PR135/assets/ugotupt.DuBHk1fh.png
diff --git a/previews/PR135/assets/uywhdfm.CbsJ8bL8.png b/previews/PR135/assets/uywhdfm.CbsJ8bL8.png
deleted file mode 100644
index 43a27f017..000000000
Binary files a/previews/PR135/assets/uywhdfm.CbsJ8bL8.png and /dev/null differ
diff --git a/previews/PR135/assets/weygerj.mCtKcWOr.png b/previews/PR135/assets/weygerj.mCtKcWOr.png
new file mode 100644
index 000000000..c76dcbee9
Binary files /dev/null and b/previews/PR135/assets/weygerj.mCtKcWOr.png differ
diff --git a/previews/PR135/assets/wkykfav.OhZZIiD6.png b/previews/PR135/assets/wkykfav.OhZZIiD6.png
deleted file mode 100644
index 0300884fb..000000000
Binary files a/previews/PR135/assets/wkykfav.OhZZIiD6.png and /dev/null differ
diff --git a/previews/PR135/assets/zxxaytr.B9NpLJr_.png b/previews/PR135/assets/xheurnn.B9NpLJr_.png
similarity index 100%
rename from previews/PR135/assets/zxxaytr.B9NpLJr_.png
rename to previews/PR135/assets/xheurnn.B9NpLJr_.png
diff --git a/previews/PR135/assets/xqlfxjv.AayN5YeI.png b/previews/PR135/assets/xqlfxjv.AayN5YeI.png
new file mode 100644
index 000000000..305dbd98f
Binary files /dev/null and b/previews/PR135/assets/xqlfxjv.AayN5YeI.png differ
diff --git a/previews/PR135/assets/tmmmngr.B94PsR1K.png b/previews/PR135/assets/yygelii.B94PsR1K.png
similarity index 100%
rename from previews/PR135/assets/tmmmngr.B94PsR1K.png
rename to previews/PR135/assets/yygelii.B94PsR1K.png
diff --git a/previews/PR135/assets/ukybfnb.3UVIT8DR.png b/previews/PR135/assets/zghchbn.3UVIT8DR.png
similarity index 100%
rename from previews/PR135/assets/ukybfnb.3UVIT8DR.png
rename to previews/PR135/assets/zghchbn.3UVIT8DR.png
diff --git a/previews/PR135/assets/khdsurm.Cx40vhB3.png b/previews/PR135/assets/ztkdutf.Cx40vhB3.png
similarity index 100%
rename from previews/PR135/assets/khdsurm.Cx40vhB3.png
rename to previews/PR135/assets/ztkdutf.Cx40vhB3.png
diff --git a/previews/PR135/call_notes.html b/previews/PR135/call_notes.html
index 3a9cb981a..4b14d3d26 100644
--- a/previews/PR135/call_notes.html
+++ b/previews/PR135/call_notes.html
@@ -5,21 +5,21 @@
     
     GeometryOps.jl
     
-    
-    
+    
+    
     
-    
+    
     
-    
-    
-    
+    
+    
+    
     
     
     
   
   
-    
Skip to content

20th April, 2024

See GeometryOps#114.

  • [ ] Exact predicates can be defined for lower-level, more atomic predicates within GeometryOps.

  • [ ] Add Shewchuck's adaptive math as a stage for exact predicates.

  • [x] @skygering to write docstrings for the predicates

29th Feb, 2024

To do

  • [ ] Finish clipping degeneracies

  • [ ] Fix cross & overlap functions

  • [x] Benchmarks to show why things you couldn't concieve of in R are doable in Julia

  • [x] profile functions for exponential improvements

  • [ ] A list of projects people can work on...the beauty here is that each function is kind of self-contained so it's an undergrad level project

  • [ ] Doc improvements

    • more

    • benchmarks page

  • Methods to validate and fix geometry

    • [ ] Polygons and LinearRings:

      • [ ] self-intersection

      • [ ] holes are actually within the polygon

      • [ ] Polygon exteriors must be counterclockwise, holes clockwise.

      • [ ] length of all rings > 4

      • [ ] repeated last point

    • [ ] LineStrings: NaN/Inf points

    • [x] Fix linear rings at some point to make sure the ring is closed, i.e., points[end] == points[begin]

  • Tests

    • [x] Simplify functions

    • [x] Polygonize

    • Barycentric tests for n_vertices > 4

Done

  • Rename bools.jl to something more relevant to the actual code -> orientation.jl

  • Doc improvements:

    • organise sections
- +
Skip to content

20th April, 2024

See GeometryOps#114.

  • [ ] Exact predicates can be defined for lower-level, more atomic predicates within GeometryOps.

  • [ ] Add Shewchuck's adaptive math as a stage for exact predicates.

  • [x] @skygering to write docstrings for the predicates

29th Feb, 2024

To do

  • [ ] Finish clipping degeneracies

  • [ ] Fix cross & overlap functions

  • [x] Benchmarks to show why things you couldn't concieve of in R are doable in Julia

  • [x] profile functions for exponential improvements

  • [ ] A list of projects people can work on...the beauty here is that each function is kind of self-contained so it's an undergrad level project

  • [ ] Doc improvements

    • more

    • benchmarks page

  • Methods to validate and fix geometry

    • [ ] Polygons and LinearRings:

      • [ ] self-intersection

      • [ ] holes are actually within the polygon

      • [ ] Polygon exteriors must be counterclockwise, holes clockwise.

      • [ ] length of all rings > 4

      • [ ] repeated last point

    • [ ] LineStrings: NaN/Inf points

    • [x] Fix linear rings at some point to make sure the ring is closed, i.e., points[end] == points[begin]

  • Tests

    • [x] Simplify functions

    • [x] Polygonize

    • Barycentric tests for n_vertices > 4

Done

  • Rename bools.jl to something more relevant to the actual code -> orientation.jl

  • Doc improvements:

    • organise sections
+ \ No newline at end of file diff --git a/previews/PR135/experiments/accurate_accumulators.html b/previews/PR135/experiments/accurate_accumulators.html index 6c278df14..8325d2b72 100644 --- a/previews/PR135/experiments/accurate_accumulators.html +++ b/previews/PR135/experiments/accurate_accumulators.html @@ -5,26 +5,26 @@ Accurate accumulation | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Accurate accumulation

Accurate arithmetic is a technique which allows you to calculate using more precision than the provided numeric type.

We will use the accurate sum routines from AccurateArithmetic.jl to show the difference!

julia
import GeometryOps as GO, GeoInterface as GI
+    
Skip to content

Accurate accumulation

Accurate arithmetic is a technique which allows you to calculate using more precision than the provided numeric type.

We will use the accurate sum routines from AccurateArithmetic.jl to show the difference!

julia
import GeometryOps as GO, GeoInterface as GI
 using GeoJSON
 using AccurateArithmetic
 using NaturalEarth
 
 all_adm0 = naturalearth("admin_0_countries", 10)
FeatureCollection with 258 Features
julia
GO.area(all_adm0)
21427.909318372607
julia
AccurateArithmetic.sum_oro(GO.area.(all_adm0.geometry))
21427.909318372607
julia
AccurateArithmetic.sum_kbn(GO.area.(all_adm0.geometry))
21427.909318372607
julia
GI.Polygon.(GO.flatten(Union{GI.LineStringTrait, GI.LinearRingTrait}, all_adm0) |> collect .|> x -> [x]) .|> GO.signed_area |> sum
-21427.90063612163
julia
GI.Polygon.(GO.flatten(Union{GI.LineStringTrait, GI.LinearRingTrait}, all_adm0) |> collect .|> x -> [x]) .|> GO.signed_area |> sum_oro
-21427.90063612163

@example accurate GI.Polygon.(GO.flatten(Union{GI.LineStringTrait, GI.LinearRingTrait}, all_adm0) |> collect .|> x -> [x]) .|> GO.signed_area |> sum_kbn ```

- + \ No newline at end of file diff --git a/previews/PR135/experiments/predicates.html b/previews/PR135/experiments/predicates.html index f99b0ded6..ce399af96 100644 --- a/previews/PR135/experiments/predicates.html +++ b/previews/PR135/experiments/predicates.html @@ -5,20 +5,20 @@ Predicates | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Predicates

Exact vs fast predicates

Orient

julia
using CairoMakie
+    
Skip to content

Predicates

Exact vs fast predicates

Orient

julia
using CairoMakie
 import GeometryOps as GO, GeoInterface as GI, LibGEOS as LG
 import ExactPredicates
 using MultiFloats
@@ -59,7 +59,7 @@
     display(fig)
 end
 resize!(fig, 1000, 450)
-fig

Dashboard

julia
using WGLMakie
+fig

Dashboard

julia
using WGLMakie
 import GeometryOps as GO, GeoInterface as GI, LibGEOS as LG
 import ExactPredicates
 using MultiFloats
@@ -116,7 +116,7 @@
 
 GO.intersection(p1_m, p2_m; target = GI.PolygonTrait(), fix_multipoly = nothing)
 LG.intersection(p1_m, p2_m)

Incircle

- + \ No newline at end of file diff --git a/previews/PR135/explanations/crs.html b/previews/PR135/explanations/crs.html index 869a29eec..ed1af7c86 100644 --- a/previews/PR135/explanations/crs.html +++ b/previews/PR135/explanations/crs.html @@ -5,21 +5,21 @@ GeometryOps.jl - - + + - + - - - + + + -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/previews/PR135/explanations/paradigms.html b/previews/PR135/explanations/paradigms.html index 45ce75026..03a8d3a35 100644 --- a/previews/PR135/explanations/paradigms.html +++ b/previews/PR135/explanations/paradigms.html @@ -5,21 +5,21 @@ Paradigms | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Paradigms

GeometryOps exposes functions like apply and applyreduce, as well as the fix and prepare APIs, that represent paradigms of programming, by which we mean the ability to program in a certain way, and in so doing, fit neatly into the tools we've built without needing to re-implement the wheel.

Below, we'll describe some of the foundational paradigms of GeometryOps, and why you should care!

apply

The apply function allows you to decompose a given collection of geometries down to a certain level, operate on it, and reconstruct it back to the same nested form as the original. In general, its invocation is:

julia
apply(f, trait::Trait, geom)

Functionally, it's similar to map in the way you apply it to geometries - except that you tell it at which level it should stop, by passing a trait to it.

apply will start by decomposing the geometry, feature, featurecollection, iterable, or table that you pass to it, and stop when it encounters a geometry for which GI.trait(geom) isa Trait. This encompasses unions of traits especially, but beware that any geometry which is not explicitly handled, and hits GI.PointTrait, will cause an error.

apply is unlike map in that it returns reconstructed geometries, instead of the raw output of the function. If you want a purely map-like behaviour, like calculating the length of each linestring in your feature collection, then call GO.flatten(f, trait, geom), which will decompose each geometry to the given trait and apply f to it, returning the decomposition as a flattened vector.

applyreduce

applyreduce is like the previous map-based approach that we mentioned, except that it reduces the result of f by op. Note that applyreduce does not guarantee associativity, so it's best to have typeof(init) == returntype(op).

fix and prepare

The fix and prepare paradigms are different from apply, though they are built on top of it. They involve the use of structs as "actions", where a constructed object indicates an action that should be taken. A trait like interface prescribes the level (polygon, linestring, point, etc) at which each action should be applied.

In general, the idea here is to be able to invoke several actions efficiently and simultaneously, for example when correcting invalid geometries, or instantiating a Prepared geometry with several preparations (sorted edge lists, rtrees, monotone chains, etc.)

- +
Skip to content

Paradigms

GeometryOps exposes functions like apply and applyreduce, as well as the fix and prepare APIs, that represent paradigms of programming, by which we mean the ability to program in a certain way, and in so doing, fit neatly into the tools we've built without needing to re-implement the wheel.

Below, we'll describe some of the foundational paradigms of GeometryOps, and why you should care!

apply

The apply function allows you to decompose a given collection of geometries down to a certain level, operate on it, and reconstruct it back to the same nested form as the original. In general, its invocation is:

julia
apply(f, trait::Trait, geom)

Functionally, it's similar to map in the way you apply it to geometries - except that you tell it at which level it should stop, by passing a trait to it.

apply will start by decomposing the geometry, feature, featurecollection, iterable, or table that you pass to it, and stop when it encounters a geometry for which GI.trait(geom) isa Trait. This encompasses unions of traits especially, but beware that any geometry which is not explicitly handled, and hits GI.PointTrait, will cause an error.

apply is unlike map in that it returns reconstructed geometries, instead of the raw output of the function. If you want a purely map-like behaviour, like calculating the length of each linestring in your feature collection, then call GO.flatten(f, trait, geom), which will decompose each geometry to the given trait and apply f to it, returning the decomposition as a flattened vector.

applyreduce

applyreduce is like the previous map-based approach that we mentioned, except that it reduces the result of f by op. Note that applyreduce does not guarantee associativity, so it's best to have typeof(init) == returntype(op).

fix and prepare

The fix and prepare paradigms are different from apply, though they are built on top of it. They involve the use of structs as "actions", where a constructed object indicates an action that should be taken. A trait like interface prescribes the level (polygon, linestring, point, etc) at which each action should be applied.

In general, the idea here is to be able to invoke several actions efficiently and simultaneously, for example when correcting invalid geometries, or instantiating a Prepared geometry with several preparations (sorted edge lists, rtrees, monotone chains, etc.)

+ \ No newline at end of file diff --git a/previews/PR135/explanations/peculiarities.html b/previews/PR135/explanations/peculiarities.html index 04fef1bc9..f8073af94 100644 --- a/previews/PR135/explanations/peculiarities.html +++ b/previews/PR135/explanations/peculiarities.html @@ -5,21 +5,21 @@ Peculiarities | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Peculiarities

What does apply return and why?

apply returns the target geometries returned by f, whatever type/package they are from, but geometries, features or feature collections that wrapped the target are replaced with GeoInterace.jl wrappers with matching GeoInterface.trait to the originals. All non-geointerface iterables become Arrays. Tables.jl compatible tables are converted either back to the original type if a Tables.materializer is defined, and if not then returned as generic NamedTuple column tables (i.e., a NamedTuple of vectors).

It is recommended for consistency that f returns GeoInterface geometries unless there is a performance/conversion overhead to doing that.

Why do you want me to provide a target in set operations?

In polygon set operations like intersection, difference, and union, many different geometry types may be obtained - depending on the relationship between the polygons. For example, when performing an union on two nonintersecting polygons, one would technically have two disjoint polygons as an output.

We use the target keyword to allow the user to control which kinds of geometry they want back. For example, setting target to PolygonTrait will cause a vector of polygons to be returned (this is the only currently supported behaviour). In future, we may implement MultiPolygonTrait or GeometryCollectionTrait targets which will return a single geometry, as LibGEOS and ArchGDAL do.

This also allows for a lot more type stability - when you ask for polygons, we won't return a geometrycollection with line segments. Especially in simulation workflows, this is excellent for simplified data processing.

_True and _False (or BoolsAsTypes)

Warning

These are internals and explicitly not public API, meaning they may change at any time!

When dispatch can be controlled by the value of a boolean variable, this introduces type instability. Instead of introducing type instability, we chose to encode our boolean decision variables, like threaded and calc_extent in apply, as types. This allows the compiler to reason about what will happen, and call the correct compiled method, in a stable way without worrying about

- +
Skip to content

Peculiarities

What does apply return and why?

apply returns the target geometries returned by f, whatever type/package they are from, but geometries, features or feature collections that wrapped the target are replaced with GeoInterace.jl wrappers with matching GeoInterface.trait to the originals. All non-geointerface iterables become Arrays. Tables.jl compatible tables are converted either back to the original type if a Tables.materializer is defined, and if not then returned as generic NamedTuple column tables (i.e., a NamedTuple of vectors).

It is recommended for consistency that f returns GeoInterface geometries unless there is a performance/conversion overhead to doing that.

Why do you want me to provide a target in set operations?

In polygon set operations like intersection, difference, and union, many different geometry types may be obtained - depending on the relationship between the polygons. For example, when performing an union on two nonintersecting polygons, one would technically have two disjoint polygons as an output.

We use the target keyword to allow the user to control which kinds of geometry they want back. For example, setting target to PolygonTrait will cause a vector of polygons to be returned (this is the only currently supported behaviour). In future, we may implement MultiPolygonTrait or GeometryCollectionTrait targets which will return a single geometry, as LibGEOS and ArchGDAL do.

This also allows for a lot more type stability - when you ask for polygons, we won't return a geometrycollection with line segments. Especially in simulation workflows, this is excellent for simplified data processing.

_True and _False (or BoolsAsTypes)

Warning

These are internals and explicitly not public API, meaning they may change at any time!

When dispatch can be controlled by the value of a boolean variable, this introduces type instability. Instead of introducing type instability, we chose to encode our boolean decision variables, like threaded and calc_extent in apply, as types. This allows the compiler to reason about what will happen, and call the correct compiled method, in a stable way without worrying about

+ \ No newline at end of file diff --git a/previews/PR135/explanations/winding_order.html b/previews/PR135/explanations/winding_order.html index 42e243f0e..e10cc5acb 100644 --- a/previews/PR135/explanations/winding_order.html +++ b/previews/PR135/explanations/winding_order.html @@ -5,21 +5,21 @@ GeometryOps.jl - - + + - + - - - + + + -
Skip to content
- +
Skip to content
+ \ No newline at end of file diff --git a/previews/PR135/hashmap.json b/previews/PR135/hashmap.json index 21f7540d4..ac971aa32 100644 --- a/previews/PR135/hashmap.json +++ b/previews/PR135/hashmap.json @@ -1 +1 @@ -{"api.md":"D8UtvlcW","call_notes.md":"DwdSQiwl","experiments_accurate_accumulators.md":"OMJKLp4S","experiments_predicates.md":"DZFjCVCq","explanations_crs.md":"D0_U8pH0","explanations_paradigms.md":"Dg8b3Bxh","explanations_peculiarities.md":"CdVD731s","explanations_winding_order.md":"P7cnQ8tJ","index.md":"y8l83Kxy","introduction.md":"ofhrN8RE","source_geometryops.md":"BxznbMxY","source_methods_angles.md":"D0iJTZWo","source_methods_area.md":"7qdFk2Vq","source_methods_barycentric.md":"DUTwwa2T","source_methods_buffer.md":"CTloyyO4","source_methods_centroid.md":"D456D2F_","source_methods_clipping_clipping_processor.md":"DWDSGXct","source_methods_clipping_coverage.md":"B5mnmfCT","source_methods_clipping_cut.md":"DyYI9STF","source_methods_clipping_difference.md":"CmRUkDo6","source_methods_clipping_intersection.md":"CVEaF8-J","source_methods_clipping_predicates.md":"DvipA0zH","source_methods_clipping_union.md":"DCiyvI5u","source_methods_distance.md":"CGbMIn6Z","source_methods_equals.md":"cKbLrMmC","source_methods_geom_relations_contains.md":"DzU4Cn9q","source_methods_geom_relations_coveredby.md":"BAWIQHTY","source_methods_geom_relations_covers.md":"BWa6PpTv","source_methods_geom_relations_crosses.md":"CrWCei4a","source_methods_geom_relations_disjoint.md":"CH3IJNyL","source_methods_geom_relations_geom_geom_processors.md":"DeClVOfg","source_methods_geom_relations_intersects.md":"C0hjmSuR","source_methods_geom_relations_overlaps.md":"BK3Hcl18","source_methods_geom_relations_touches.md":"oH9OwOqC","source_methods_geom_relations_within.md":"yOtMwkyH","source_methods_orientation.md":"CxJbsDsq","source_methods_polygonize.md":"Bf-4bMgE","source_not_implemented_yet.md":"9VgY15CW","source_primitives.md":"B8mDJecN","source_transformations_correction_closed_ring.md":"D6ZEKMv-","source_transformations_correction_geometry_correction.md":"BEDLeelw","source_transformations_correction_intersecting_polygons.md":"Df5YX__2","source_transformations_extent.md":"Dg5_Nny1","source_transformations_flip.md":"B6-KSgw2","source_transformations_reproject.md":"oTc7A1Wp","source_transformations_segmentize.md":"2rQJGEWB","source_transformations_simplify.md":"Bc-qtAXt","source_transformations_transform.md":"iKlEQxrg","source_transformations_tuples.md":"DP26qgdc","source_types.md":"BYfpLUKR","source_utils.md":"CPaVoqLr","tutorials_creating_geometry.md":"D-ZnfJ-b","tutorials_spatial_joins.md":"C715FNUG"} +{"api.md":"BkdCNSpp","call_notes.md":"CzI2sRnh","experiments_accurate_accumulators.md":"BEvtokUD","experiments_predicates.md":"Cb_olK_t","explanations_crs.md":"BcB0kXKu","explanations_paradigms.md":"BQbTsKKW","explanations_peculiarities.md":"D7wlShpB","explanations_winding_order.md":"BzkvsLOj","index.md":"Dm7lK_c9","introduction.md":"EstDN9hf","source_geometryops.md":"BnVY2YxC","source_methods_angles.md":"BGpTF9uY","source_methods_area.md":"CXVG-VeW","source_methods_barycentric.md":"DiCxsA-F","source_methods_buffer.md":"CxkGeu_t","source_methods_centroid.md":"CICsk7_Q","source_methods_clipping_clipping_processor.md":"5X_cs7CX","source_methods_clipping_coverage.md":"8uUWzwQ-","source_methods_clipping_cut.md":"DC5HX6wc","source_methods_clipping_difference.md":"BlomfT6l","source_methods_clipping_intersection.md":"fOblypzx","source_methods_clipping_predicates.md":"DUY6Mg1n","source_methods_clipping_union.md":"BUlTcf5A","source_methods_convex_hull.md":"C926w3uT","source_methods_distance.md":"BNGMDaam","source_methods_equals.md":"CInRsM-y","source_methods_geom_relations_contains.md":"CT7VUSG_","source_methods_geom_relations_coveredby.md":"t8U8nVnZ","source_methods_geom_relations_covers.md":"DG_3zZRD","source_methods_geom_relations_crosses.md":"5YXBFQwW","source_methods_geom_relations_disjoint.md":"Cp4OC057","source_methods_geom_relations_geom_geom_processors.md":"B09zbe43","source_methods_geom_relations_intersects.md":"DH-bN_kE","source_methods_geom_relations_overlaps.md":"DaCX808s","source_methods_geom_relations_touches.md":"z4ceia7e","source_methods_geom_relations_within.md":"DNx_0bB6","source_methods_orientation.md":"C6hml0DY","source_methods_polygonize.md":"BjnTo1d_","source_not_implemented_yet.md":"DttPeX-2","source_primitives.md":"4UCUXvfy","source_transformations_correction_closed_ring.md":"CohSwGqX","source_transformations_correction_geometry_correction.md":"gAjUHu5U","source_transformations_correction_intersecting_polygons.md":"Dp-0YCkQ","source_transformations_extent.md":"aqCZuaCr","source_transformations_flip.md":"D247Ejcp","source_transformations_reproject.md":"plsPtFYv","source_transformations_segmentize.md":"DnUWdzb5","source_transformations_simplify.md":"k2EFW9YY","source_transformations_transform.md":"Bz0uRhiV","source_transformations_tuples.md":"BlsK6oDR","source_types.md":"D4PahPU_","source_utils.md":"CZ0t5hCA","tutorials_creating_geometry.md":"CQNXRFYE","tutorials_geodesic_paths.md":"B5A7YX9J","tutorials_spatial_joins.md":"BU34-gKB"} diff --git a/previews/PR135/index.html b/previews/PR135/index.html index 6f0d24b12..1cae6e0c6 100644 --- a/previews/PR135/index.html +++ b/previews/PR135/index.html @@ -5,21 +5,21 @@ What is GeometryOps.jl? | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

GeometryOps.jl

Blazing fast geometry operations in pure Julia

GeometryOps

What is GeometryOps.jl?

GeometryOps.jl is a package for geometric calculations on (primarily 2D) geometries.

The driving idea behind this package is to unify all the disparate packages for geometric calculations in Julia, and make them GeoInterface.jl-compatible. We seem to be focusing primarily on 2/2.5D geometries for now.

Most of the usecases are driven by GIS and similar Earth data workflows, so this might be a bit specialized towards that, but methods should always be general to any coordinate space.

We welcome contributions, either as pull requests or discussion on issues!

How to navigate the docs

GeometryOps' docs are divided into three main sections: tutorials, explanations and source code.
Documentation and examples for many functions can be found in the source code section, since we use literate programming in GeometryOps.

  • Tutorials are meant to teach the fundamental concepts behind GeometryOps, and how to perform certain operations.
  • Explanations usually contain little code, and explain in more detail how GeometryOps works.
  • Source code usually contains explanations and examples at the top of the page, followed by annotated source code from that file.
- +
Skip to content

GeometryOps.jl

Blazing fast geometry operations in pure Julia

GeometryOps

What is GeometryOps.jl?

GeometryOps.jl is a package for geometric calculations on (primarily 2D) geometries.

The driving idea behind this package is to unify all the disparate packages for geometric calculations in Julia, and make them GeoInterface.jl-compatible. We seem to be focusing primarily on 2/2.5D geometries for now.

Most of the usecases are driven by GIS and similar Earth data workflows, so this might be a bit specialized towards that, but methods should always be general to any coordinate space.

We welcome contributions, either as pull requests or discussion on issues!

How to navigate the docs

GeometryOps' docs are divided into three main sections: tutorials, explanations and source code.
Documentation and examples for many functions can be found in the source code section, since we use literate programming in GeometryOps.

  • Tutorials are meant to teach the fundamental concepts behind GeometryOps, and how to perform certain operations.
  • Explanations usually contain little code, and explain in more detail how GeometryOps works.
  • Source code usually contains explanations and examples at the top of the page, followed by annotated source code from that file.
+ \ No newline at end of file diff --git a/previews/PR135/introduction.html b/previews/PR135/introduction.html index f192613c0..f527cf1ab 100644 --- a/previews/PR135/introduction.html +++ b/previews/PR135/introduction.html @@ -5,21 +5,21 @@ Introduction | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Introduction

GeometryOps.jl is a package for geometric calculations on (primarily 2D) geometries.

The driving idea behind this package is to unify all the disparate packages for geometric calculations in Julia, and make them GeoInterface.jl-compatible. We seem to be focusing primarily on 2/2.5D geometries for now.

Most of the usecases are driven by GIS and similar Earth data workflows, so this might be a bit specialized towards that, but methods should always be general to any coordinate space.

We welcome contributions, either as pull requests or discussion on issues!

Main concepts

The apply paradigm

Note

See the Primitive Functions page for more information on this.

The apply function allows you to decompose a given collection of geometries down to a certain level, and then operate on it.

Functionally, it's similar to map in the way you apply it to geometries.

apply and applyreduce take any geometry, vector of geometries, collection of geometries, or table (like Shapefile.Table, DataFrame, or GeoTable)!

What's this GeoInterface.Wrapper thing?

Write a comment about GeoInterface.Wrapper and why it helps in type stability to guarantee a particular return type.

- +
Skip to content

Introduction

GeometryOps.jl is a package for geometric calculations on (primarily 2D) geometries.

The driving idea behind this package is to unify all the disparate packages for geometric calculations in Julia, and make them GeoInterface.jl-compatible. We seem to be focusing primarily on 2/2.5D geometries for now.

Most of the usecases are driven by GIS and similar Earth data workflows, so this might be a bit specialized towards that, but methods should always be general to any coordinate space.

We welcome contributions, either as pull requests or discussion on issues!

Main concepts

The apply paradigm

Note

See the Primitive Functions page for more information on this.

The apply function allows you to decompose a given collection of geometries down to a certain level, and then operate on it.

Functionally, it's similar to map in the way you apply it to geometries.

apply and applyreduce take any geometry, vector of geometries, collection of geometries, or table (like Shapefile.Table, DataFrame, or GeoTable)!

What's this GeoInterface.Wrapper thing?

Write a comment about GeoInterface.Wrapper and why it helps in type stability to guarantee a particular return type.

+ \ No newline at end of file diff --git a/previews/PR135/source/GeometryOps.html b/previews/PR135/source/GeometryOps.html index ae8a42568..330b94615 100644 --- a/previews/PR135/source/GeometryOps.html +++ b/previews/PR135/source/GeometryOps.html @@ -5,30 +5,31 @@ GeometryOps.jl - - + + - + - - - + + + -
Skip to content

GeometryOps.jl

julia
module GeometryOps
+    
Skip to content

GeometryOps.jl

julia
module GeometryOps
 
 using GeoInterface
 using GeometryBasics
-import Tables
 using LinearAlgebra, Statistics
+
+import Tables
 import GeometryBasics.StaticArrays
+import DelaunayTriangulation # for convex hull and triangulation
 import ExactPredicates
 import Base.@kwdef
-
-using GeoInterface.Extents: Extents
+import GeoInterface.Extents: Extents
 
 const GI = GeoInterface
 const GB = GeometryBasics
@@ -46,6 +47,7 @@
 include("methods/barycentric.jl")
 include("methods/buffer.jl")
 include("methods/centroid.jl")
+include("methods/convex_hull.jl")
 include("methods/distance.jl")
 include("methods/equals.jl")
 include("methods/clipping/predicates.jl")
@@ -90,7 +92,7 @@
 end
 
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/angles.html b/previews/PR135/source/methods/angles.html index 287b1821a..47088b403 100644 --- a/previews/PR135/source/methods/angles.html +++ b/previews/PR135/source/methods/angles.html @@ -5,25 +5,25 @@ Angles | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Angles

julia
export angles

What is angles?

Angles are the angles formed by a given geometries line segments, if it has line segments.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
+    
Skip to content

Angles

julia
export angles

What is angles?

Angles are the angles formed by a given geometries line segments, if it has line segments.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie, CairoMakie
 
 rect = GI.Polygon([[(0.0, 0.0), (0.0, 1.0), (1.0, 1.0), (1.0, 0.0), (0.0, 0.0)]])
-f, a, p = poly(collect(GI.getpoint(rect)); axis = (; aspect = DataAspect()))

This is clearly a rectangle, with angles of 90 degrees.

julia
GO.angles(rect)  # [90, 90, 90, 90]
4-element Vector{Float64}:
+f, a, p = poly(collect(GI.getpoint(rect)); axis = (; aspect = DataAspect()))

This is clearly a rectangle, with angles of 90 degrees.

julia
GO.angles(rect)  # [90, 90, 90, 90]
4-element Vector{Float64}:
  90.0
  90.0
  90.0
@@ -38,7 +38,7 @@
     - The angles of a point is an empty vector.
     - The angles of a single line segment is an empty vector.
     - The angles of a linestring or linearring is a vector of angles formed by the curve.
-    - The angles of a polygin is a vector of vectors of angles formed by each ring.
+    - The angles of a polygon is a vector of vectors of angles formed by each ring.
     - The angles of a multi-geometry collection is a vector of the angles of each of the
         sub-geometries as defined above.
 
@@ -79,7 +79,7 @@
 end
 
 #= The angles of a polygon is a vector of polygon angles. Note that if there are holes
-within the polyogn, the angles will be listed after the exterior ring angles in order of the
+within the polygon, the angles will be listed after the exterior ring angles in order of the
 holes. All angles, including the hole angles, are interior angles of the polygon.=#
 function _angles(::Type{T}, ::GI.PolygonTrait, geom) where T
     angles = _angles(T, GI.LinearRingTrait(), GI.getexterior(geom); interior = true)
@@ -142,7 +142,7 @@
     angle = real(acos(val) * 180 / π)
     return angle * (cross_prod < 0 ? -1 : 1)
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/area.html b/previews/PR135/source/methods/area.html index 2a775a147..32023425c 100644 --- a/previews/PR135/source/methods/area.html +++ b/previews/PR135/source/methods/area.html @@ -5,29 +5,29 @@ Area and signed area | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Area and signed area

julia
export area, signed_area

What is area? What is signed area?

Area is the amount of space occupied by a two-dimensional figure. It is always a positive value. Signed area is simply the integral over the exterior path of a polygon, minus the sum of integrals over its interior holes. It is signed such that a clockwise path has a positive area, and a counterclockwise path has a negative area. The area is the absolute value of the signed area.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
+    
Skip to content

Area and signed area

julia
export area, signed_area

What is area? What is signed area?

Area is the amount of space occupied by a two-dimensional figure. It is always a positive value. Signed area is simply the integral over the exterior path of a polygon, minus the sum of integrals over its interior holes. It is signed such that a clockwise path has a positive area, and a counterclockwise path has a negative area. The area is the absolute value of the signed area.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
 
 rect = GI.Polygon([[(0,0), (0,1), (1,1), (1,0), (0, 0)]])
-f, a, p = poly(collect(GI.getpoint(rect)); axis = (; aspect = DataAspect()))

This is clearly a rectangle, etc. But now let's look at how the points look:

julia
lines!(
+f, a, p = poly(collect(GI.getpoint(rect)); axis = (; aspect = DataAspect()))

This is clearly a rectangle, etc. But now let's look at how the points look:

julia
lines!(
     collect(GI.getpoint(rect));
     color = 1:GI.npoint(rect), linewidth = 10.0)
-f

The points are ordered in a counterclockwise fashion, which means that the signed area is negative. If we reverse the order of the points, we get a postive area.

julia
GO.signed_area(rect)  # -1.0
-1.0

Implementation

This is the GeoInterface-compatible implementation. First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that area and signed area are zero for all points and curves, even if the curves are closed like with a linear ring. Also note that signed area really only makes sense for polygons, given with a multipolygon can have several polygons each with a different orientation and thus the absolute value of the signed area might not be the area. This is why signed area is only implemented for polygons.

Targets for applys functions

julia
const _AREA_TARGETS = TraitTarget{Union{GI.PolygonTrait,GI.AbstractCurveTrait,GI.MultiPointTrait,GI.PointTrait}}()
+f

The points are ordered in a counterclockwise fashion, which means that the signed area is negative. If we reverse the order of the points, we get a positive area.

julia
GO.signed_area(rect)  # -1.0
-1.0

Implementation

This is the GeoInterface-compatible implementation. First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that area and signed area are zero for all points and curves, even if the curves are closed like with a linear ring. Also note that signed area really only makes sense for polygons, given with a multipolygon can have several polygons each with a different orientation and thus the absolute value of the signed area might not be the area. This is why signed area is only implemented for polygons.

Targets for applys functions

julia
const _AREA_TARGETS = TraitTarget{Union{GI.PolygonTrait,GI.AbstractCurveTrait,GI.MultiPointTrait,GI.PointTrait}}()
 
 """
     area(geom, [T = Float64])::T
@@ -55,7 +55,7 @@
     signed_area(geom, [T = Float64])::T
 
 Returns the signed area of a single geometry, based on winding order.
-This is computed slighly differently for different geometries:
+This is computed slightly differently for different geometries:
 
     - The signed area of a point is always zero.
     - The signed area of a curve is always zero.
@@ -105,7 +105,7 @@
     area += _area_component(p1, p2)
     return T(area / 2)
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/barycentric.html b/previews/PR135/source/methods/barycentric.html index 68616aef6..16ccc02c6 100644 --- a/previews/PR135/source/methods/barycentric.html +++ b/previews/PR135/source/methods/barycentric.html @@ -5,20 +5,20 @@ Barycentric coordinates | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Barycentric coordinates

julia
export barycentric_coordinates, barycentric_coordinates!, barycentric_interpolate
+    
Skip to content

Barycentric coordinates

julia
export barycentric_coordinates, barycentric_coordinates!, barycentric_interpolate
 export MeanValue

Generalized barycentric coordinates are a generalization of barycentric coordinates, which are typically used in triangles, to arbitrary polygons.

They provide a way to express a point within a polygon as a weighted average of the polygon's vertices.

In the case of a triangle, barycentric coordinates are a set of three numbers (λ1,λ2,λ3), each associated with a vertex of the triangle. Any point within the triangle can be expressed as a weighted average of the vertices, where the weights are the barycentric coordinates. The weights sum to 1, and each is non-negative.

For a polygon with n vertices, generalized barycentric coordinates are a set of n numbers (λ1,λ2,...,λn), each associated with a vertex of the polygon. Any point within the polygon can be expressed as a weighted average of the vertices, where the weights are the generalized barycentric coordinates.

As with the triangle case, the weights sum to 1, and each is non-negative.

Example

This example was taken from this page of CGAL's documentation.

julia
using GeometryOps
 using GeometryOps.GeometryBasics
 using Makie
@@ -85,7 +85,7 @@
 # and render!
 hm = heatmap!(a2, xrange, yrange, mean_values; colormap = p1.colormap, colorrange = p1.plots[1].colorrange[], xautolimits = false, yautolimits = false)
 translate!(hm, 0, 0, -1) # translate the heatmap behind the cropping polygon!
-f # finally, display the figure

Barycentric-coordinate API

In some cases, we actually want barycentric interpolation, and have no interest in the coordinates themselves.

However, the coordinates can be useful for debugging, and when performing 3D rendering, multiple barycentric values (depth, uv) are needed for depth buffering.

julia
const _VecTypes = Union{Tuple{Vararg{T, N}}, GeometryBasics.StaticArraysCore.StaticArray{Tuple{N}, T, 1}} where {N, T}
+f # finally, display the figure

Barycentric-coordinate API

In some cases, we actually want barycentric interpolation, and have no interest in the coordinates themselves.

However, the coordinates can be useful for debugging, and when performing 3D rendering, multiple barycentric values (depth, uv) are needed for depth buffering.

julia
const _VecTypes = Union{Tuple{Vararg{T, N}}, GeometryBasics.StaticArraysCore.StaticArray{Tuple{N}, T, 1}} where {N, T}
 
 """
     abstract type AbstractBarycentricCoordinateMethod
@@ -433,7 +433,7 @@
 
 struct Wachspress <: AbstractBarycentricCoordinateMethod
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/buffer.html b/previews/PR135/source/methods/buffer.html index 80e006d94..7d902abe6 100644 --- a/previews/PR135/source/methods/buffer.html +++ b/previews/PR135/source/methods/buffer.html @@ -5,20 +5,20 @@ Buffer | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Buffer

Buffering a geometry means computing the region distance away from it, and returning that region as the new geometry.

As of now, we only support GEOS as the backend, meaning that LibGEOS must be loaded.

julia
function buffer(geometry, distance; kwargs...)
+    
Skip to content

Buffer

Buffering a geometry means computing the region distance away from it, and returning that region as the new geometry.

As of now, we only support GEOS as the backend, meaning that LibGEOS must be loaded.

julia
function buffer(geometry, distance; kwargs...)
     buffered = buffer(GEOS(; kwargs...), geometry, distance)
     return tuples(buffered)
 end

Below is an error handler similar to the others we have for e.g. segmentize, which checks if there is a method error for the geos backend.

Add an error hint for buffer if LibGEOS is not loaded!

julia
function _buffer_error_hinter(io, exc, argtypes, kwargs)
@@ -29,7 +29,7 @@
         println(io, " in your REPL, \nor otherwise loading LibGEOS.jl via using or import.")
     end
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/centroid.html b/previews/PR135/source/methods/centroid.html index f8893ac77..0ef85bf77 100644 --- a/previews/PR135/source/methods/centroid.html +++ b/previews/PR135/source/methods/centroid.html @@ -5,28 +5,28 @@ Centroid | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Centroid

julia
export centroid, centroid_and_length, centroid_and_area

What is the centroid?

The centroid is the geometric center of a line string or area(s). Note that the centroid does not need to be inside of a concave area.

Further note that by convention a line, or linear ring, is calculated by weighting the line segments by their length, while polygons and multipolygon centroids are calculated by weighting edge's by their 'area components'.

To provide an example, consider this concave polygon in the shape of a 'C':

julia
import GeometryOps as GO
+    
Skip to content

Centroid

julia
export centroid, centroid_and_length, centroid_and_area

What is the centroid?

The centroid is the geometric center of a line string or area(s). Note that the centroid does not need to be inside of a concave area.

Further note that by convention a line, or linear ring, is calculated by weighting the line segments by their length, while polygons and multipolygon centroids are calculated by weighting edge's by their 'area components'.

To provide an example, consider this concave polygon in the shape of a 'C':

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
 
 cshape = GI.Polygon([[(0,0), (0,3), (3,3), (3,2), (1,2), (1,1), (3,1), (3,0), (0,0)]])
-f, a, p = poly(collect(GI.getpoint(cshape)); axis = (; aspect = DataAspect()))

Let's see what the centroid looks like (plotted in red):

julia
cent = GO.centroid(cshape)
+f, a, p = poly(collect(GI.getpoint(cshape)); axis = (; aspect = DataAspect()))

Let's see what the centroid looks like (plotted in red):

julia
cent = GO.centroid(cshape)
 scatter!(GI.x(cent), GI.y(cent), color = :red)
-f

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that if you call centroid on a LineString or LinearRing, the centroid_and_length function will be called due to the weighting scheme described above, while centroid_and_area is called for polygons and multipolygons. However, centroid_and_area can still be called on a LineString or LinearRing when they are closed, for example as the interior hole of a polygon.

The helper functions centroid_and_length and centroid_and_area are made availible just in case the user also needs the area or length to decrease repeat computation.

julia
"""
+f

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that if you call centroid on a LineString or LinearRing, the centroid_and_length function will be called due to the weighting scheme described above, while centroid_and_area is called for polygons and multipolygons. However, centroid_and_area can still be called on a LineString or LinearRing when they are closed, for example as the interior hole of a polygon.

The helper functions centroid_and_length and centroid_and_area are made available just in case the user also needs the area or length to decrease repeat computation.

julia
"""
     centroid(geom, [T=Float64])::Tuple{T, T}
 
 Returns the centroid of a given line segment, linear ring, polygon, or
@@ -111,7 +111,7 @@
     y = (y1 * area1 + y2 * area2) / area
     return (x, y), area
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/clipping/clipping_processor.html b/previews/PR135/source/methods/clipping/clipping_processor.html index 1d3e341ce..41e8bdb74 100644 --- a/previews/PR135/source/methods/clipping/clipping_processor.html +++ b/previews/PR135/source/methods/clipping/clipping_processor.html @@ -5,20 +5,20 @@ Polygon clipping helpers | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Polygon clipping helpers

This file contains the shared helper functions for the polygon clipping functionalities.

This enum defines which side of an edge a point is on

julia
@enum PointEdgeSide left=1 right=2 unknown=3

Constants assigned for readability

julia
const enter, exit = true, false
+    
Skip to content

Polygon clipping helpers

This file contains the shared helper functions for the polygon clipping functionalities.

This enum defines which side of an edge a point is on

julia
@enum PointEdgeSide left=1 right=2 unknown=3

Constants assigned for readability

julia
const enter, exit = true, false
 const crossing, bouncing = true, false
 
 #= A point can either be the start or end of an overlapping chain of points between two
@@ -52,7 +52,7 @@
     _flag_ent_exit!(T, GI.LinearRingTrait(), poly_a, b_list, delay_cross_f, Base.Fix2(delay_bounce_f, false); exact)

Set node indices and filter a_idx_list to just crossing points

julia
    _index_crossing_intrs!(a_list, b_list, a_idx_list)
 
     return a_list, b_list, a_idx_list
-end
_build_a_list(::Type{T}, poly_a, poly_b) -> (a_list, a_idx_list)

This function take in two polygon rings and creates a vector of PolyNodes to represent poly_a, including its intersection points with poly_b. The information stored in each PolyNode is needed for clipping using the Greiner-Hormann clipping algorithm.

Note: After calling this function, a_list is not fully formed because the neighboring indicies of the intersection points in b_list still need to be updated. Also we still have not update the entry and exit flags for a_list.

The a_idx_list is a list of the indicies of intersection points in a_list. The value at index i of a_idx_list is the location in a_list where the ith intersection point lies.

julia
function _build_a_list(::Type{T}, poly_a, poly_b; exact) where T
+end
_build_a_list(::Type{T}, poly_a, poly_b) -> (a_list, a_idx_list)

This function take in two polygon rings and creates a vector of PolyNodes to represent poly_a, including its intersection points with poly_b. The information stored in each PolyNode is needed for clipping using the Greiner-Hormann clipping algorithm.

Note: After calling this function, a_list is not fully formed because the neighboring indices of the intersection points in b_list still need to be updated. Also we still have not update the entry and exit flags for a_list.

The a_idx_list is a list of the indices of intersection points in a_list. The value at index i of a_idx_list is the location in a_list where the ith intersection point lies.

julia
function _build_a_list(::Type{T}, poly_a, poly_b; exact) where T
     n_a_edges = _nedge(poly_a)
     a_list = PolyNode{T}[]  # list of points in poly_a
     sizehint!(a_list, n_a_edges)
@@ -125,7 +125,7 @@
         a_pt1 = a_pt2
     end
     return a_list, a_idx_list, n_b_intrs
-end
_build_b_list(::Type{T}, a_idx_list, a_list, poly_b) -> b_list

This function takes in the a_list and a_idx_list build in _build_a_list and poly_b and creates a vector of PolyNodes to represent poly_b. The information stored in each PolyNode is needed for clipping using the Greiner-Hormann clipping algorithm.

Note: after calling this function, b_list is not fully updated. The entry/exit flags still need to be updated. However, the neightbor value in a_list is now updated.

julia
function _build_b_list(::Type{T}, a_idx_list, a_list, n_b_intrs, poly_b) where T

Sort intersection points by insertion order in b_list

julia
    sort!(a_idx_list, by = x-> a_list[x].neighbor + a_list[x].fracs[2])

Initialize needed values and lists

julia
    n_b_edges = _nedge(poly_b)
+end
_build_b_list(::Type{T}, a_idx_list, a_list, poly_b) -> b_list

This function takes in the a_list and a_idx_list build in _build_a_list and poly_b and creates a vector of PolyNodes to represent poly_b. The information stored in each PolyNode is needed for clipping using the Greiner-Hormann clipping algorithm.

Note: after calling this function, b_list is not fully updated. The entry/exit flags still need to be updated. However, the neighbor value in a_list is now updated.

julia
function _build_b_list(::Type{T}, a_idx_list, a_list, n_b_intrs, poly_b) where T

Sort intersection points by insertion order in b_list

julia
    sort!(a_idx_list, by = x-> a_list[x].neighbor + a_list[x].fracs[2])

Initialize needed values and lists

julia
    n_b_edges = _nedge(poly_b)
     n_intr_pts = length(a_idx_list)
     b_list = PolyNode{T}[]
     sizehint!(b_list, n_b_edges + n_b_intrs)
@@ -412,7 +412,7 @@
     end
     return return_polys
 end

Get type of polygons that will be made TODO: Increase type options

julia
_get_poly_type(::Type{T}) where T =
-    GI.Polygon{false, false, Vector{GI.LinearRing{false, false, Vector{Tuple{T, T}}, Nothing, Nothing}}, Nothing, Nothing}
_find_non_cross_orientation(a_list, b_list, a_poly, b_poly; exact)

For polygns with no crossing intersection points, either one polygon is inside of another, or they are seperate polygons with no intersection (other than an edge or point).

Return two booleans that represent if a is inside b (potentially with shared edges / points) and visa versa if b is inside of a.

julia
function _find_non_cross_orientation(a_list, b_list, a_poly, b_poly; exact)
+    GI.Polygon{false, false, Vector{GI.LinearRing{false, false, Vector{Tuple{T, T}}, Nothing, Nothing}}, Nothing, Nothing}
_find_non_cross_orientation(a_list, b_list, a_poly, b_poly; exact)

For polygons with no crossing intersection points, either one polygon is inside of another, or they are separate polygons with no intersection (other than an edge or point).

Return two booleans that represent if a is inside b (potentially with shared edges / points) and visa versa if b is inside of a.

julia
function _find_non_cross_orientation(a_list, b_list, a_poly, b_poly; exact)
     non_intr_a_idx = findfirst(x -> !x.inter, a_list)
     non_intr_b_idx = findfirst(x -> !x.inter, b_list)
     #= Determine if non-intersection point is in or outside of polygon - if there isn't A
@@ -440,7 +440,7 @@
                         append!(remove_poly_idx, falses(n_new_pieces))
                         n_new_per_poly += n_new_pieces
                     end
-                    if !on_ext && !out_ext  # hole is completly within exterior
+                    if !on_ext && !out_ext  # hole is completely within exterior
                         push!(curr_poly.geom, new_hole)
                     else  # hole is partially within and outside of polygon's exterior
                         new_polys = difference(curr_poly_ext, new_hole_poly, T; target=GI.PolygonTrait())
@@ -451,7 +451,7 @@
                             append!(remove_poly_idx, falses(n_new_polys))
                             n_new_per_poly += n_new_polys
                         end
-                    end

polygon is completly within hole

julia
                elseif coveredby(curr_poly_ext, GI.Polygon(StaticArrays.SVector(curr_hole)))
+                    end

polygon is completely within hole

julia
                elseif coveredby(curr_poly_ext, GI.Polygon(StaticArrays.SVector(curr_hole)))
                     remove_poly_idx[j] = true
                 end
             end
@@ -459,7 +459,7 @@
         n_polys += n_new_per_poly
     end

Remove all polygon that were marked for removal

julia
    deleteat!(return_polys, remove_poly_idx)
     return
-end
_combine_holes!(::Type{T}, new_hole, curr_poly, return_polys)

The new hole is combined with any existing holes in curr_poly. The holes can be combined into a larger hole if they are intersecting. If this happens, then the new, combined hole is returned with the orignal holes making up the new hole removed from curr_poly. Additionally, if the combined holes form a ring, the interior is added to the return_polys as a new polygon piece. Additionally, holes leftover after combination will be checked for it they are in the "main" polygon or in one of these new pieces and moved accordingly.

If the holes don't touch or curr_poly has no holes, then new_hole is returned without any changes.

julia
function _combine_holes!(::Type{T}, new_hole, curr_poly, return_polys, remove_hole_idx) where T
+end
_combine_holes!(::Type{T}, new_hole, curr_poly, return_polys)

The new hole is combined with any existing holes in curr_poly. The holes can be combined into a larger hole if they are intersecting. If this happens, then the new, combined hole is returned with the original holes making up the new hole removed from curr_poly. Additionally, if the combined holes form a ring, the interior is added to the return_polys as a new polygon piece. Additionally, holes leftover after combination will be checked for it they are in the "main" polygon or in one of these new pieces and moved accordingly.

If the holes don't touch or curr_poly has no holes, then new_hole is returned without any changes.

julia
function _combine_holes!(::Type{T}, new_hole, curr_poly, return_polys, remove_hole_idx) where T
     n_new_polys = 0
     empty!(remove_hole_idx)
     new_hole_poly = GI.Polygon(StaticArrays.SVector(new_hole))

Combine any existing holes in curr_poly with new hole

julia
    for (k, old_hole) in enumerate(GI.gethole(curr_poly))
@@ -503,7 +503,7 @@
                     p2 = p
                     continue
                 else
-                    p3 = p

check if p2 is approximatly on the edge formed by p1 and p3 - remove if so

julia
                    if Predicates.orient(p1, p2, p3; exact = _False()) == 0
+                    p3 = p

check if p2 is approximately on the edge formed by p1 and p3 - remove if so

julia
                    if Predicates.orient(p1, p2, p3; exact = _False()) == 0
                         remove_idx[i - 1] = true
                     end
                 end
@@ -526,7 +526,7 @@
     end
     return
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/clipping/coverage.html b/previews/PR135/source/methods/clipping/coverage.html index 5d9ffd097..8365f9207 100644 --- a/previews/PR135/source/methods/clipping/coverage.html +++ b/previews/PR135/source/methods/clipping/coverage.html @@ -5,20 +5,20 @@ GeometryOps.jl - - + + - + - - - + + + -
Skip to content
julia
export coverage

What is coverage?

Coverage is the amount of geometry area within a bounding box defined by the minimum and maximum x and y-coordiantes of that bounding box, or an Extent containing that information.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
+    
Skip to content
julia
export coverage

What is coverage?

Coverage is the amount of geometry area within a bounding box defined by the minimum and maximum x and y-coordinates of that bounding box, or an Extent containing that information.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -28,7 +28,7 @@
 xmin, xmax, ymin, ymax = 0, 2, 0, 2
 f, a, p = poly(collect(GI.getpoint(cell)); axis = (; aspect = DataAspect()))
 poly!(collect(GI.getpoint(rect)))
-f

It is clear that half of the polygon is within the cell, so the coverage should be 1.0, half of the area of the rectangle.

julia
GO.coverage(rect, xmin, xmax, ymin, ymax)
1.0

Implementation

This is the GeoInterface-compatible implementation. First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that the coverage is zero for all points and curves, even if the curves are closed like with a linear ring.

Targets for applys functions

julia
const _COVERAGE_TARGETS = TraitTarget{Union{GI.PolygonTrait,GI.AbstractCurveTrait,GI.MultiPointTrait,GI.PointTrait}}()

Wall types for coverage

julia
const UNKNOWN, NORTH, EAST, SOUTH, WEST = 0:4
+f

It is clear that half of the polygon is within the cell, so the coverage should be 1.0, half of the area of the rectangle.

julia
GO.coverage(rect, xmin, xmax, ymin, ymax)
1.0

Implementation

This is the GeoInterface-compatible implementation. First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that the coverage is zero for all points and curves, even if the curves are closed like with a linear ring.

Targets for applys functions

julia
const _COVERAGE_TARGETS = TraitTarget{Union{GI.PolygonTrait,GI.AbstractCurveTrait,GI.MultiPointTrait,GI.PointTrait}}()

Wall types for coverage

julia
const UNKNOWN, NORTH, EAST, SOUTH, WEST = 0:4
 
 """
     coverage(geom, xmin, xmax, ymin, ymax, [T = Float64])::T
@@ -241,7 +241,7 @@
     y_wall = (wall == NORTH || wall == WEST) ? ymax : ymin
     return x1 * y_wall - x_wall * y1
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/clipping/cut.html b/previews/PR135/source/methods/clipping/cut.html index 0e2a3baeb..1c2c9cf1d 100644 --- a/previews/PR135/source/methods/clipping/cut.html +++ b/previews/PR135/source/methods/clipping/cut.html @@ -5,20 +5,20 @@ Polygon cutting | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Polygon cutting

julia
export cut

What is cut?

The cut function cuts a polygon through a line segment. This is inspired by functions such as Matlab's cutpolygon function.

To provide an example, consider the following polygon and line:

julia
import GeoInterface as GI, GeometryOps as GO
+    
Skip to content

Polygon cutting

julia
export cut

What is cut?

The cut function cuts a polygon through a line segment. This is inspired by functions such as Matlab's cutpolygon function.

To provide an example, consider the following polygon and line:

julia
import GeoInterface as GI, GeometryOps as GO
 using CairoMakie
 using Makie
 
@@ -29,7 +29,7 @@
 f, a, p1 = Makie.poly(collect(GI.getpoint(cut_polys[1])); color = (:blue, 0.5))
 Makie.poly!(collect(GI.getpoint(cut_polys[2])); color = (:orange, 0.5))
 Makie.lines!(GI.getpoint(line); color = :black)
-f

Implementation

This function depends on polygon clipping helper function and is inspired by the Greiner-Hormann clipping algorithm used elsewhere in this library. The inspiration came from this Stack Overflow discussion.

julia
"""
+f

Implementation

This function depends on polygon clipping helper function and is inspired by the Greiner-Hormann clipping algorithm used elsewhere in this library. The inspiration came from this Stack Overflow discussion.

julia
"""
     cut(geom, line, [T::Type])
 
 Return given geom cut by given line as a list of geometries of the same type as the input
@@ -79,7 +79,7 @@
 of cut geometry in Vector{Vector{Tuple}} format.
 
 Note: degenerate cases where intersection points are vertices do not work right now. =#
-function _cut(::Type{T}, geom, line, geom_list, intr_list, n_intr_pts; exact) where T

Sort and catagorize the intersection points

julia
    sort!(intr_list, by = x -> geom_list[x].fracs[2])
+function _cut(::Type{T}, geom, line, geom_list, intr_list, n_intr_pts; exact) where T

Sort and categorize the intersection points

julia
    sort!(intr_list, by = x -> geom_list[x].fracs[2])
     _flag_ent_exit!(GI.LineTrait(), line, geom_list; exact)

Add first point to output list

julia
    return_coords = [[geom_list[1].point]]
     cross_backs = [(T(Inf),T(Inf))]
     poly_idx = 1
@@ -105,7 +105,7 @@
     end
     return return_coords
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/clipping/difference.html b/previews/PR135/source/methods/clipping/difference.html index 1171bf25c..af9cd8d5c 100644 --- a/previews/PR135/source/methods/clipping/difference.html +++ b/previews/PR135/source/methods/clipping/difference.html @@ -5,20 +5,20 @@ Difference Polygon Clipping | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Difference Polygon Clipping

julia
export difference
+    
Skip to content

Difference Polygon Clipping

julia
export difference
 
 
 """
@@ -87,7 +87,7 @@
                 append!(polys, new_polys)
             end
         end
-    end

Remove uneeded collinear points on same edge

julia
    _remove_collinear_points!(polys, remove_idx, poly_a, poly_b)
+    end

Remove unneeded collinear points on same edge

julia
    _remove_collinear_points!(polys, remove_idx, poly_a, poly_b)
     return polys
 end

Helper functions for Differences with Greiner and Hormann Polygon Clipping

julia
#= When marking the crossing status of a delayed crossing, the chain start point is crossing
 when the start point is a entry point and is a bouncing point when the start point is an
@@ -146,7 +146,7 @@
 #= Multipolygon with multipolygon difference - note that all intersection regions between
 sub-polygons of `multipoly_a` and sub-polygons of `multipoly_b` will be removed from the
 corresponding sub-polygon of `multipoly_a`. Unless specified with `fix_multipoly = nothing`,
-`multipolygon_a` will be validated using the given (defauly is `UnionIntersectingPolygons()`)
+`multipolygon_a` will be validated using the given (default is `UnionIntersectingPolygons()`)
 correction. =#
 function _difference(
     target::TraitTarget{GI.PolygonTrait}, ::Type{T},
@@ -168,7 +168,7 @@
         else
             difference(GI.MultiPolygon(polys), poly_b; target, fix_multipoly)
         end
-        #= One multipoly_a has been completly covered (and thus removed) there is no need to
+        #= One multipoly_a has been completely covered (and thus removed) there is no need to
         continue taking the difference =#
         isempty(polys) && break
     end
@@ -184,7 +184,7 @@
     )
     return nothing
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/clipping/intersection.html b/previews/PR135/source/methods/clipping/intersection.html index f7976a215..b28e82f0e 100644 --- a/previews/PR135/source/methods/clipping/intersection.html +++ b/previews/PR135/source/methods/clipping/intersection.html @@ -5,26 +5,26 @@ Geometry Intersection | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Geometry Intersection

julia
export intersection, intersection_points
+    
Skip to content

Geometry Intersection

julia
export intersection, intersection_points
 
 """
     Enum LineOrientation
 Enum for the orientation of a line with respect to a curve. A line can be
 `line_cross` (crossing over the curve), `line_hinge` (crossing the endpoint of the curve),
-`line_over` (colinear with the curve), or `line_out` (not interacting with the curve).
+`line_over` (collinear with the curve), or `line_out` (not interacting with the curve).
 """
 @enum LineOrientation line_cross=1 line_hinge=2 line_over=3 line_out=4
 
@@ -92,7 +92,7 @@
     remove_idx = falses(length(polys))

If the original polygons had holes, take that into account.

julia
    if GI.nhole(poly_a) != 0 || GI.nhole(poly_b) != 0
         hole_iterator = Iterators.flatten((GI.gethole(poly_a), GI.gethole(poly_b)))
         _add_holes_to_polys!(T, polys, hole_iterator, remove_idx; exact)
-    end

Remove uneeded collinear points on same edge

julia
    _remove_collinear_points!(polys, remove_idx, poly_a, poly_b)
+    end

Remove unneeded collinear points on same edge

julia
    _remove_collinear_points!(polys, remove_idx, poly_a, poly_b)
     return polys
 end

Helper functions for Intersections with Greiner and Hormann Polygon Clipping

julia
#= When marking the crossing status of a delayed crossing, the chain start point is bouncing
 when the start point is a entry point and is a crossing point when the start point is an
@@ -129,7 +129,7 @@
 end
 
 #= Multipolygon with polygon intersection is equivalent to taking the intersection of the
-poylgon with the multipolygon and thus simply switches the order of operations and calls the
+polygon with the multipolygon and thus simply switches the order of operations and calls the
 above method. =#
 _intersection(
     target::TraitTarget{GI.PolygonTrait}, ::Type{T},
@@ -192,7 +192,7 @@
     _intersection_points(T, GI.trait(geom_a), geom_a, GI.trait(geom_b), geom_b)
 
 
-#= Calculates the list of intersection points between two geometries, inlcuding line
+#= Calculates the list of intersection points between two geometries, including line
 segments, line strings, linear rings, polygons, and multipolygons. =#
 function _intersection_points(::Type{T}, ::GI.AbstractTrait, a, ::GI.AbstractTrait, b; exact = _True()) where T

Initialize an empty list of points

julia
    result = Tuple{T, T}[]

Check if the geometries extents even overlap

julia
    Extents.intersects(GI.extent(a), GI.extent(b)) || return result

Create a list of edges from the two input geometries

julia
    edges_a, edges_b = map(sort!  to_edges, (a, b))

Loop over pairs of edges and add any unique intersection points to results

julia
    for a_edge in edges_a, b_edge in edges_b
         line_orient, intr1, intr2 = _intersection_point(T, a_edge, b_edge; exact)
@@ -347,7 +347,7 @@
 
 #= If lines defined by (a1, a2) and (b1, b2) meet at one point that is not an endpoint of
 either segment, they form a crossing intersection with a singular intersection point. That
-point is caculated by finding the fractional distance along each segment the point occurs
+point is calculated by finding the fractional distance along each segment the point occurs
 at (α, β). If the point is too close to an endpoint to be distinct, the point shares a value
 with the endpoint, but with a non-zero and non-one fractional value. If the intersection
 point calculated is outside of the envelope of the two segments due to floating point error,
@@ -362,9 +362,9 @@
     β = _clamped_frac(Δbax * Δay - Δbay * Δax, a_cross_b, eps(T))
 
     #= Intersection will be where a1 + α * Δa = b1 + β * Δb. However, due to floating point
-    innacurracies, α and β calculations may yeild different intersection points. Average
+    inaccuracies, α and β calculations may yield different intersection points. Average
     both points together to minimize difference from real value, as long as segment isn't
-    vertical or horizontal as this will almost certianly lead to the point being outside the
+    vertical or horizontal as this will almost certainly lead to the point being outside the
     envelope due to floating point error. Also note that floating point limitations could
     make intersection be endpoint if α≈0 or α≈1.=#
     x = if Δax == 0
@@ -401,7 +401,7 @@
         α, β = _clamped_frac(distance(min_pt, a2, T), a_dist, eps(T)), one(T) - eps(T)
     end

Return point with smallest distance

julia
    return _tuple_point(min_pt, T), α, β
 end

Return value of x/y clamped between ϵ and 1 - ϵ

julia
_clamped_frac(x::T, y::T, ϵ = zero(T)) where T = clamp(x / y, ϵ, one(T) - ϵ)

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/clipping/predicates.html b/previews/PR135/source/methods/clipping/predicates.html index 044065e84..6c8455ce2 100644 --- a/previews/PR135/source/methods/clipping/predicates.html +++ b/previews/PR135/source/methods/clipping/predicates.html @@ -5,20 +5,20 @@ If we want to inject adaptivity, we would do something like: | GeometryOps.jl - - + + - + - - - + + + -
Skip to content
julia
module Predicates
+    
Skip to content
julia
module Predicates
     using ExactPredicates, ExactPredicates.Codegen
     import ExactPredicates: ext
     import ExactPredicates.Codegen: group!, @genpredicate
@@ -62,7 +62,7 @@
 end
 
 import .Predicates

If we want to inject adaptivity, we would do something like:

function cross(a, b, c) # try Predicates._cross_naive(a, b, c) # check the error bound there # then try Predicates._cross_adaptive(a, b, c) # then try Predicates._cross_exact end


This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/clipping/union.html b/previews/PR135/source/methods/clipping/union.html index c5e4d49ac..32a7f2aba 100644 --- a/previews/PR135/source/methods/clipping/union.html +++ b/previews/PR135/source/methods/clipping/union.html @@ -5,20 +5,20 @@ Union Polygon Clipping | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Union Polygon Clipping

julia
export union
+    
Skip to content

Union Polygon Clipping

julia
export union
 
 """
     union(geom_a, geom_b, [::Type{T}]; target::Type, fix_multipoly = UnionIntersectingPolygons())
@@ -88,7 +88,7 @@
         keepat!(polys, 1)
     end

Add in holes

julia
    if GI.nhole(poly_a) != 0 || GI.nhole(poly_b) != 0
         _add_union_holes!(polys, a_in_b, b_in_a, poly_a, poly_b; exact)
-    end

Remove uneeded collinear points on same edge

julia
    _remove_collinear_points!(polys, [false], poly_a, poly_b)
+    end

Remove unneeded collinear points on same edge

julia
    _remove_collinear_points!(polys, [false], poly_a, poly_b)
     return polys
 end

Helper functions for Unions with Greiner and Hormann Polygon Clipping

julia
#= When marking the crossing status of a delayed crossing, the chain start point is crossing
 when the start point is a entry point and is a bouncing point when the start point is an
@@ -159,7 +159,7 @@
         in_ih, on_ih, out_ih = _line_polygon_interactions(ext_int_ring, poly_ih; exact, closed_line = true)
         if in_ih  # at least part of interior polygon exterior is within the ith hole
             if !on_ih && !out_ih
-                #= interior polygon is completly within the ith hole - polygons aren't
+                #= interior polygon is completely within the ith hole - polygons aren't
                 touching and do not actually form a union =#
                 polys[1] = tuples(interior_poly)
                 push!(polys, tuples(exterior_poly))
@@ -230,7 +230,7 @@
     return polys
 end
 
-#= Multipolygon with polygon union is equivalent to taking the union of the poylgon with the
+#= Multipolygon with polygon union is equivalent to taking the union of the polygon with the
 multipolygon and thus simply switches the order of operations and calls the above method. =#
 _union(
     target::TraitTarget{GI.PolygonTrait}, ::Type{T},
@@ -268,8 +268,8 @@
 ) where {Target,T}
     throw(ArgumentError("Union between $trait_a and $trait_b with target $Target isn't implemented yet."))
     return nothing
-end

This page was generated using Literate.jl.

- +end

This page was generated using Literate.jl.

+ \ No newline at end of file diff --git a/previews/PR135/source/methods/convex_hull.html b/previews/PR135/source/methods/convex_hull.html new file mode 100644 index 000000000..1482d2ad5 --- /dev/null +++ b/previews/PR135/source/methods/convex_hull.html @@ -0,0 +1,81 @@ + + + + + + Convex hull | GeometryOps.jl + + + + + + + + + + + + + + +
Skip to content

Convex hull

The convex hull of a set of points is the smallest convex polygon that contains all the points.

GeometryOps.jl provides a number of methods for computing the convex hull of a set of points, usually linked to other Julia packages.

For now, we expose one algorithm, MonotoneChainMethod, which uses the DelaunayTriangulation.jl package. The GEOS() interface also supports convex hulls.

Future work could include other algorithms, such as Quickhull.jl, or similar, via package extensions.

Example

Simple hull

julia
import GeometryOps as GO, GeoInterface as GI
+using CairoMakie # to plot
+
+points = randn(GO.Point2f, 100)
+f, a, p = plot(points; label = "Points")
+hull_poly = GO.convex_hull(points)
+lines!(a, hull_poly; label = "Convex hull", color = Makie.wong_colors()[2])
+axislegend(a)
+f

Convex hull of the USA

julia
import GeometryOps as GO, GeoInterface as GI
+using CairoMakie # to plot
+using NaturalEarth # for data
+
+all_adm0 = naturalearth("admin_0_countries", 110)
+usa = all_adm0.geometry[findfirst(==("USA"), all_adm0.ADM0_A3)]
+f, a, p = lines(usa)
+lines!(a, GO.convex_hull(usa); color = Makie.wong_colors()[2])
+f

Investigating the winding order

The winding order of the monotone chain method is counterclockwise, while the winding order of the GEOS method is clockwise.

GeometryOps' convexity detection says that the GEOS hull is convex, while the monotone chain method hull is not. However, they are both going over the same points (we checked), it's just that the winding order is different.

In reality, both sets are convex, but we need to fix the GeometryOps convexity detector (isconcave)!

We may also decide at a later date to change the returned winding order of the polygon, but most algorithms are robust to that, and you can always fix it...

julia
import GeoInterface as GI, GeometryOps as GO, LibGEOS as LG
+using CairoMakie # to plot
+
+points = rand(Point2{Float64}, 100)
+go_hull = GO.convex_hull(GO.MonotoneChainMethod(), points)
+lg_hull = GO.convex_hull(GO.GEOS(), points)
+
+fig = Figure()
+a1, p1 = lines(fig[1, 1], go_hull; color = 1:GI.npoint(go_hull), axis = (; title = "MonotoneChainMethod()"))
+a2, p2 = lines(fig[2, 1], lg_hull; color = 1:GI.npoint(lg_hull), axis = (; title = "GEOS()"))
+cb = Colorbar(fig[1:2, 2], p1; label = "Vertex number")
+fig

Implementation

julia
"""
+    convex_hull([method], geometries)
+
+Compute the convex hull of the points in `geometries`.
+Returns a `GI.Polygon` representing the convex hull.
+
+Note that the polygon returned is wound counterclockwise
+as in the Simple Features standard by default.  If you
+choose GEOS, the winding order will be inverted.
+
+!!! warning
+    This interface only computes the 2-dimensional convex hull!
+
+    For higher dimensional hulls, use the relevant package (Qhull.jl, Quickhull.jl, or similar).
+"""
+function convex_hull end
+
+"""
+    MonotoneChainMethod()
+
+This is an algorithm for the `convex_hull` function.
+
+Uses [`DelaunayTriangulation.jl`](https://github.com/JuliaGeometry/DelaunayTriangulation.jl) to compute the convex hull.
+This is a pure Julia algorithm which provides an optimal Delaunay triangulation.
+
+See also `convex_hull`
+"""
+struct MonotoneChainMethod end

GrahamScanMethod, etc. can be implemented in GO as well, if someone wants to. If we add an extension on Quickhull.jl, then that would be another algorithm.

julia
convex_hull(geometries) = convex_hull(MonotoneChainMethod(), geometries)

TODO: have this respect the CRS by pulling it out of geometries.

julia
function convex_hull(::MonotoneChainMethod, geometries)

Extract all points as tuples. We have to collect and allocate here, because DelaunayTriangulation only accepts vectors of point-like geoms.

Cleanest would be to use the iterable from GO.flatten directly, but that would require us to implement the convex hull algorithm directly.

TODO: create a specialized method that extracts only the information required, GeometryBasics points can be passed through directly.

julia
    points = collect(flatten(tuples, GI.PointTrait, geometries))

Compute the convex hull using DelTri (shorthand for DelaunayTriangulation.jl).

julia
    hull = DelaunayTriangulation.convex_hull(points)

Convert the result to a GI.Polygon and return it. View would be more efficient here, but re-allocating is cleaner.

julia
    point_vec = DelaunayTriangulation.get_points(hull)[DelaunayTriangulation.get_vertices(hull)]
+    return GI.Polygon([GI.LinearRing(point_vec)])
+end

This page was generated using Literate.jl.

+ + + + \ No newline at end of file diff --git a/previews/PR135/source/methods/distance.html b/previews/PR135/source/methods/distance.html index c18b2cee6..14236c326 100644 --- a/previews/PR135/source/methods/distance.html +++ b/previews/PR135/source/methods/distance.html @@ -5,20 +5,20 @@ Distance and signed distance | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Distance and signed distance

julia
export distance, signed_distance

What is distance? What is signed distance?

Distance is the distance of a point to another geometry. This is always a positive number. If a point is inside of geometry, so on a curve or inside of a polygon, the distance will be zero. Signed distance is mainly used for polygons and multipolygons. If a point is outside of a geometry, signed distance has the same value as distance. However, points within the geometry have a negative distance representing the distance of a point to the closest boundary. Therefore, for all "non-filled" geometries, like curves, the distance will either be postitive or 0.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
+    
Skip to content

Distance and signed distance

julia
export distance, signed_distance

What is distance? What is signed distance?

Distance is the distance of a point to another geometry. This is always a positive number. If a point is inside of geometry, so on a curve or inside of a polygon, the distance will be zero. Signed distance is mainly used for polygons and multipolygons. If a point is outside of a geometry, signed distance has the same value as distance. However, points within the geometry have a negative distance representing the distance of a point to the closest boundary. Therefore, for all "non-filled" geometries, like curves, the distance will either be positive or 0.

To provide an example, consider this rectangle:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -29,13 +29,13 @@
 f, a, p = poly(collect(GI.getpoint(rect)); axis = (; aspect = DataAspect()))
 scatter!(GI.x(point_in), GI.y(point_in); color = :red)
 scatter!(GI.x(point_out), GI.y(point_out); color = :orange)
-f

This is clearly a rectangle with one point inside and one point outside. The points are both an equal distance to the polygon. The distance to point_in is negative while the distance to point_out is positive.

julia
(
+f

This is clearly a rectangle with one point inside and one point outside. The points are both an equal distance to the polygon. The distance to point_in is negative while the distance to point_out is positive.

julia
(
 GO.distance(point_in, rect),  # == 0
 GO.signed_distance(point_in, rect),  # < 0
 GO.signed_distance(point_out, rect)  # > 0
 )
(0.0, -0.5, 0.5)

Consider also a heatmap of signed distances around this object:

julia
xrange = yrange = LinRange(-0.5, 1.5, 300)
 f, a, p = heatmap(xrange, yrange, GO.signed_distance.(Point2f.(xrange, yrange'), Ref(rect)); colormap = :RdBu, colorrange = (-0.75, 0.75))
-a.aspect = DataAspect(); Colorbar(f[1, 2], p, label = "Signed distance"); lines!(a, GI.convert(GO.GeometryBasics, rect)); f

Implementation

This is the GeoInterface-compatible implementation. First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Distance and signed distance are only implemented for points to other geometries right now. This could be extended to include distance from other geometries in the future.

The distance calculated is the Euclidean distance using the Pythagorean theorem. Also note that singed_distance only makes sense for "filled-in" shapes, like polygons, so it isn't implemented for curves.

julia
const _DISTANCE_TARGETS = TraitTarget{Union{GI.AbstractPolygonTrait,GI.LineStringTrait,GI.LinearRingTrait,GI.LineTrait,GI.PointTrait}}()
+a.aspect = DataAspect(); Colorbar(f[1, 2], p, label = "Signed distance"); lines!(a, GI.convert(GO.GeometryBasics, rect)); f

Implementation

This is the GeoInterface-compatible implementation. First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Distance and signed distance are only implemented for points to other geometries right now. This could be extended to include distance from other geometries in the future.

The distance calculated is the Euclidean distance using the Pythagorean theorem. Also note that singed_distance only makes sense for "filled-in" shapes, like polygons, so it isn't implemented for curves.

julia
const _DISTANCE_TARGETS = TraitTarget{Union{GI.AbstractPolygonTrait,GI.LineStringTrait,GI.LinearRingTrait,GI.LineTrait,GI.PointTrait}}()
 
 """
     distance(point, geom, ::Type{T} = Float64)::T
@@ -198,8 +198,8 @@
         min_dist = dist < min_dist ? dist : min_dist
     end
     return min_dist
-end

This page was generated using Literate.jl.

- +end

This page was generated using Literate.jl.

+ \ No newline at end of file diff --git a/previews/PR135/source/methods/equals.html b/previews/PR135/source/methods/equals.html index c89ab11e8..ae3c29d0e 100644 --- a/previews/PR135/source/methods/equals.html +++ b/previews/PR135/source/methods/equals.html @@ -5,20 +5,20 @@ Equals | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Equals

julia
export equals

What is equals?

The equals function checks if two geometries are equal. They are equal if they share the same set of points and edges to define the same shape.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+    
Skip to content

Equals

julia
export equals

What is equals?

The equals function checks if two geometries are equal. They are equal if they share the same set of points and edges to define the same shape.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -29,7 +29,7 @@
 scatter!(GI.getpoint(l1), color = :blue)
 lines!(GI.getpoint(l2), color = :orange)
 scatter!(GI.getpoint(l2), color = :orange)
-f

We can see that the two lines do not share a commen set of points and edges in the plot, so they are not equal:

julia
GO.equals(l1, l2)  # returns false
false

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that while we need the same set of points and edges, they don't need to be provided in the same order for polygons. For for example, we need the same set points for two multipoints to be equal, but they don't have to be saved in the same order. The winding order also doesn't have to be the same to represent the same geometry. This requires checking every point against every other point in the two geometries we are comparing. Also, some geometries must be "closed" like polygons and linear rings. These will be assumed to be closed, even if they don't have a repeated last point explicity written in the coordinates. Additionally, geometries and multi-geometries can be equal if the multi-geometry only includes that single geometry.

julia
"""
+f

We can see that the two lines do not share a common set of points and edges in the plot, so they are not equal:

julia
GO.equals(l1, l2)  # returns false
false

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that while we need the same set of points and edges, they don't need to be provided in the same order for polygons. For for example, we need the same set points for two multipoints to be equal, but they don't have to be saved in the same order. The winding order also doesn't have to be the same to represent the same geometry. This requires checking every point against every other point in the two geometries we are comparing. Also, some geometries must be "closed" like polygons and linear rings. These will be assumed to be closed, even if they don't have a repeated last point explicitly written in the coordinates. Additionally, geometries and multi-geometries can be equal if the multi-geometry only includes that single geometry.

julia
"""
     equals(geom1, geom2)::Bool
 
 Compare two Geometries return true if they are the same geometry.
@@ -170,7 +170,7 @@
     )::Bool
 
 Two lines/linestrings are equal if they share the same set of points going
-along the curve. Note that lines/linestrings aren't closed by defintion.
+along the curve. Note that lines/linestrings aren't closed by definition.
 """
 equals(
     ::Union{GI.LineTrait, GI.LineStringTrait}, l1,
@@ -184,7 +184,7 @@
     )::Bool
 
 A line/linestring and a linear ring are equal if they share the same set of
-points going along the curve. Note that lines aren't closed by defintion, but
+points going along the curve. Note that lines aren't closed by definition, but
 rings are, so the line must have a repeated last point to be equal
 """
 equals(
@@ -199,7 +199,7 @@
     )::Bool
 
 A linear ring and a line/linestring are equal if they share the same set of
-points going along the curve. Note that lines aren't closed by defintion, but
+points going along the curve. Note that lines aren't closed by definition, but
 rings are, so the line must have a repeated last point to be equal
 """
 equals(
@@ -283,7 +283,7 @@
     end
     return true
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/geom_relations/contains.html b/previews/PR135/source/methods/geom_relations/contains.html index 70a0e7a3b..e9d214d99 100644 --- a/previews/PR135/source/methods/geom_relations/contains.html +++ b/previews/PR135/source/methods/geom_relations/contains.html @@ -5,20 +5,20 @@ Contains | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Contains

julia
export contains

What is contains?

The contains function checks if a given geometry completly contains another geometry, or in other words, that the second geometry is completly within the first. This requires that the two interiors intersect and that the interior and boundary of the second geometry is not in the exterior of the first geometry.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+    
Skip to content

Contains

julia
export contains

What is contains?

The contains function checks if a given geometry completely contains another geometry, or in other words, that the second geometry is completely within the first. This requires that the two interiors intersect and that the interior and boundary of the second geometry is not in the exterior of the first geometry.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -29,7 +29,7 @@
 scatter!(GI.getpoint(l1), color = :blue)
 lines!(GI.getpoint(l2), color = :orange)
 scatter!(GI.getpoint(l2), color = :orange)
-f

We can see that all of the points and edges of l2 are within l1, so l1 contains l2. However, l2 does not contain l1.

julia
GO.contains(l1, l2)  # returns true
+f

We can see that all of the points and edges of l2 are within l1, so l1 contains l2. However, l2 does not contain l1.

julia
GO.contains(l1, l2)  # returns true
 GO.contains(l2, l1)  # returns false
false

Implementation

This is the GeoInterface-compatible implementation.

Given that contains is the exact opposite of within, we simply pass the two inputs variables, swapped in order, to within.

julia
"""
     contains(g1::AbstractGeometry, g2::AbstractGeometry)::Bool
 
@@ -51,7 +51,7 @@
 ```
 """
 contains(g1, g2) = GeometryOps.within(g2, g1)

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/geom_relations/coveredby.html b/previews/PR135/source/methods/geom_relations/coveredby.html index 9dfe6ff0d..191b3da53 100644 --- a/previews/PR135/source/methods/geom_relations/coveredby.html +++ b/previews/PR135/source/methods/geom_relations/coveredby.html @@ -5,20 +5,20 @@ CoveredBy | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

CoveredBy

julia
export coveredby

What is coveredby?

The coveredby function checks if one geometry is covered by another geometry. This is an extension of within that does not require the interiors of the two geometries to intersect, but still does require that the interior and boundary of the first geometry isn't outside of the second geometry.

To provide an example, consider this point and line:

julia
import GeometryOps as GO
+    
Skip to content

CoveredBy

julia
export coveredby

What is coveredby?

The coveredby function checks if one geometry is covered by another geometry. This is an extension of within that does not require the interiors of the two geometries to intersect, but still does require that the interior and boundary of the first geometry isn't outside of the second geometry.

To provide an example, consider this point and line:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -27,7 +27,7 @@
 l1 = GI.Line([p1, (1.0, 1.0)])
 f, a, p = lines(GI.getpoint(l1))
 scatter!(p1, color = :red)
-f

As we can see, p1 is on the endpoint of l1. This means it is not within, but it does meet the definition of coveredby.

julia
GO.coveredby(p1, l1)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait.

Each of these calls a method in the geom_geom_processors file. The methods in this file determine if the given geometries meet a set of criteria. For the coveredby function and arguments g1 and g2, this criteria is as follows: - points of g1 are allowed to be in the interior of g2 (either through overlap or crossing for lines) - points of g1 are allowed to be on the boundary of g2 - points of g1 are not allowed to be in the exterior of g2 - no points of g1 are required to be in the interior of g2 - no points of g1 are required to be on the boundary of g2 - no points of g1 are required to be in the exterior of g2

The code for the specific implementations is in the geom_geom_processors file.

julia
const COVEREDBY_ALLOWS = (in_allow = true, on_allow = true, out_allow = false)
+f

As we can see, p1 is on the endpoint of l1. This means it is not within, but it does meet the definition of coveredby.

julia
GO.coveredby(p1, l1)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait.

Each of these calls a method in the geom_geom_processors file. The methods in this file determine if the given geometries meet a set of criteria. For the coveredby function and arguments g1 and g2, this criteria is as follows: - points of g1 are allowed to be in the interior of g2 (either through overlap or crossing for lines) - points of g1 are allowed to be on the boundary of g2 - points of g1 are not allowed to be in the exterior of g2 - no points of g1 are required to be in the interior of g2 - no points of g1 are required to be on the boundary of g2 - no points of g1 are required to be in the exterior of g2

The code for the specific implementations is in the geom_geom_processors file.

julia
const COVEREDBY_ALLOWS = (in_allow = true, on_allow = true, out_allow = false)
 const COVEREDBY_CURVE_ALLOWS = (over_allow = true, cross_allow = true, on_allow = true, out_allow = false)
 const COVEREDBY_CURVE_REQUIRES = (in_require = false, on_require = false, out_require = false)
 const COVEREDBY_POLYGON_REQUIRES = (in_require = true, on_require = false, out_require = false,)
@@ -111,7 +111,7 @@
 )
 
 #= Linestring is coveredby a polygon if all interior and boundary points of the
-line are in the polygon interior or on its edges, inlcuding hole edges. =#
+line are in the polygon interior or on its edges, including hole edges. =#
 _coveredby(
     ::Union{GI.LineTrait, GI.LineStringTrait}, g1,
     ::GI.PolygonTrait, g2,
@@ -150,7 +150,7 @@
 )
 
 #= Linearring is coveredby a polygon if all vertices and edges of the ring are
-in the polygon interior or on the polygon edges, inlcuding hole edges. =#
+in the polygon interior or on the polygon edges, including hole edges. =#
 _coveredby(
     ::GI.LinearRingTrait, g1,
     ::GI.PolygonTrait, g2,
@@ -201,7 +201,7 @@
     end
     return true
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/geom_relations/covers.html b/previews/PR135/source/methods/geom_relations/covers.html index e57fb10d9..a6d73db38 100644 --- a/previews/PR135/source/methods/geom_relations/covers.html +++ b/previews/PR135/source/methods/geom_relations/covers.html @@ -5,20 +5,20 @@ Covers | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Covers

julia
export covers

What is covers?

The covers function checks if a given geometry completly covers another geometry. For this to be true, the "contained" geometry's interior and boundaries must be covered by the "covering" geometry's interior and boundaries. The interiors do not need to overlap.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+    
Skip to content

Covers

julia
export covers

What is covers?

The covers function checks if a given geometry completely covers another geometry. For this to be true, the "contained" geometry's interior and boundaries must be covered by the "covering" geometry's interior and boundaries. The interiors do not need to overlap.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -29,7 +29,7 @@
 
 f, a, p = lines(GI.getpoint(l1))
 scatter!(p1, color = :red)
-f

julia
GO.covers(l1, p1)  # returns true
+f

julia
GO.covers(l1, p1)  # returns true
 GO.covers(p1, l1)  # returns false
false

Implementation

This is the GeoInterface-compatible implementation.

Given that covers is the exact opposite of coveredby, we simply pass the two inputs variables, swapped in order, to coveredby.

julia
"""
     covers(g1::AbstractGeometry, g2::AbstractGeometry)::Bool
 
@@ -51,7 +51,7 @@
 ```
 """
 covers(g1, g2)::Bool = GeometryOps.coveredby(g2, g1)

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/geom_relations/crosses.html b/previews/PR135/source/methods/geom_relations/crosses.html index 6b5f326ab..5ff2a844c 100644 --- a/previews/PR135/source/methods/geom_relations/crosses.html +++ b/previews/PR135/source/methods/geom_relations/crosses.html @@ -5,20 +5,20 @@ Crossing checks | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Crossing checks

julia
"""
+    
Skip to content

Crossing checks

julia
"""
      crosses(geom1, geom2)::Bool
 
 Return `true` if the intersection results in a geometry whose dimension is one less than
@@ -138,7 +138,7 @@
     end
     return false
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/geom_relations/disjoint.html b/previews/PR135/source/methods/geom_relations/disjoint.html index 0e54dfc48..81f1cefe8 100644 --- a/previews/PR135/source/methods/geom_relations/disjoint.html +++ b/previews/PR135/source/methods/geom_relations/disjoint.html @@ -5,20 +5,20 @@ Disjoint | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Disjoint

julia
export disjoint

What is disjoint?

The disjoint function checks if one geometry is outside of another geometry, without sharing any boundaries or interiors.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+    
Skip to content

Disjoint

julia
export disjoint

What is disjoint?

The disjoint function checks if one geometry is outside of another geometry, without sharing any boundaries or interiors.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -29,7 +29,7 @@
 scatter!(GI.getpoint(l1), color = :blue)
 lines!(GI.getpoint(l2), color = :orange)
 scatter!(GI.getpoint(l2), color = :orange)
-f

We can see that none of the edges or vertices of l1 interact with l2 so they are disjoint.

julia
GO.disjoint(l1, l2)  # returns true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait.

Each of these calls a method in the geom_geom_processors file. The methods in this file determine if the given geometries meet a set of criteria. For the disjoint function and arguments g1 and g2, this criteria is as follows: - points of g1 are not allowed to be in the interior of g2 - points of g1 are not allowed to be on the boundary of g2 - points of g1 are allowed to be in the exterior of g2 - no points required to be in the interior of g2 - no points of g1 are required to be on the boundary of g2 - no points of g1 are required to be in the exterior of g2

The code for the specific implementations is in the geom_geom_processors file.

julia
const DISJOINT_ALLOWS = (in_allow = false, on_allow = false, out_allow = true)
+f

We can see that none of the edges or vertices of l1 interact with l2 so they are disjoint.

julia
GO.disjoint(l1, l2)  # returns true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait.

Each of these calls a method in the geom_geom_processors file. The methods in this file determine if the given geometries meet a set of criteria. For the disjoint function and arguments g1 and g2, this criteria is as follows: - points of g1 are not allowed to be in the interior of g2 - points of g1 are not allowed to be on the boundary of g2 - points of g1 are allowed to be in the exterior of g2 - no points required to be in the interior of g2 - no points of g1 are required to be on the boundary of g2 - no points of g1 are required to be in the exterior of g2

The code for the specific implementations is in the geom_geom_processors file.

julia
const DISJOINT_ALLOWS = (in_allow = false, on_allow = false, out_allow = true)
 const DISJOINT_CURVE_ALLOWS = (over_allow = false, cross_allow = false, on_allow = false, out_allow = true)
 const DISJOINT_REQUIRES = (in_require = false, on_require = false, out_require = false)
 const DISJOINT_EXACT = (exact = _False(),)
@@ -130,7 +130,7 @@
 )
 
 #= Geometry is disjoint from a linestring if the line's interior and boundary
-points don't intersect with the geometrie's interior and boundary points. =#
+points don't intersect with the geometry's interior and boundary points. =#
 _disjoint(
     trait1::Union{GI.LinearRingTrait, GI.PolygonTrait}, g1,
     trait2::Union{GI.LineTrait, GI.LineStringTrait}, g2,
@@ -196,7 +196,7 @@
     end
     return true
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/geom_relations/geom_geom_processors.html b/previews/PR135/source/methods/geom_relations/geom_geom_processors.html index 8a8def571..8754edfdc 100644 --- a/previews/PR135/source/methods/geom_relations/geom_geom_processors.html +++ b/previews/PR135/source/methods/geom_relations/geom_geom_processors.html @@ -5,20 +5,20 @@ Line-curve interaction | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Line-curve interaction

julia
#= Code is based off of DE-9IM Standards (https://en.wikipedia.org/wiki/DE-9IM)
+    
Skip to content

Line-curve interaction

julia
#= Code is based off of DE-9IM Standards (https://en.wikipedia.org/wiki/DE-9IM)
 and attempts a standardized solution for most of the functions.
 =#
 
@@ -56,7 +56,7 @@
 )

Check interaction of geom with polygon's exterior boundary

julia
    ext_val = _point_filled_curve_orientation(point, GI.getexterior(polygon); exact)

If a point is outside, it isn't interacting with any holes

julia
    ext_val == point_out && return out_allow

if a point is on an external boundary, it isn't interacting with any holes

julia
    ext_val == point_on && return on_allow

If geom is within the polygon, need to check interactions with holes

julia
    for hole in GI.gethole(polygon)
         hole_val = _point_filled_curve_orientation(point, hole; exact)

If a point in in a hole, it is outside of the polygon

julia
        hole_val == point_in && return out_allow

If a point in on a hole edge, it is on the edge of the polygon

julia
        hole_val == point_on && return on_allow
     end

Point is within external boundary and on in/on any holes

julia
    return in_allow
-end

Determines if a line meets the given checks with respect to a curve.

If over_allow is true, segments of the line and curve can be co-linear. If cross_allow is true, segments of the line and curve can cross. If on_allow is true, endpoints of either the line or curve can intersect a segment of the other geometry. If cross_allow is true, segments of the line and curve can be disjoint.

If in_require is true, the interiors of the line and curve must meet in at least one point. If on_require is true, the bounday of one of the two geometries can meet the interior or boundary of the other geometry in at least one point. If out_require is true, there must be at least one point of the given line that is exterior of the curve.

If the point is in an "allowed" location and meets all requirments, return true. Else, return false.

If closed_line is true, line is treated as a closed line where the first and last point are connected by a segment. Same with closed_curve.

julia
@inline function _line_curve_process(line, curve;
+end

Determines if a line meets the given checks with respect to a curve.

If over_allow is true, segments of the line and curve can be co-linear. If cross_allow is true, segments of the line and curve can cross. If on_allow is true, endpoints of either the line or curve can intersect a segment of the other geometry. If cross_allow is true, segments of the line and curve can be disjoint.

If in_require is true, the interiors of the line and curve must meet in at least one point. If on_require is true, the boundary of one of the two geometries can meet the interior or boundary of the other geometry in at least one point. If out_require is true, there must be at least one point of the given line that is exterior of the curve.

If the point is in an "allowed" location and meets all requirements, return true. Else, return false.

If closed_line is true, line is treated as a closed line where the first and last point are connected by a segment. Same with closed_curve.

julia
@inline function _line_curve_process(line, curve;
     over_allow, cross_allow, kw...
 )
     skip, returnval = _maybe_skip_disjoint_extents(line, curve;
@@ -73,7 +73,7 @@
     in_require, on_require, out_require,
     closed_line = false, closed_curve = false,
     exact,
-)

Set up requirments

julia
    in_req_met = !in_require
+)

Set up requirements

julia
    in_req_met = !in_require
     on_req_met = !on_require
     out_req_met = !out_require

Determine curve endpoints

julia
    nl = GI.npoint(line)
     nc = GI.npoint(curve)
@@ -88,7 +88,7 @@
         l_end = _tuple_point(GI.getpoint(line, i))
         c_start = _tuple_point(GI.getpoint(curve, closed_curve ? nc : 1))

Loop over each curve segment

julia
        for j in (closed_curve ? 1 : 2):nc
             c_end = _tuple_point(GI.getpoint(curve, j))

Check if line and curve segments meet

julia
            seg_val, intr1, _ = _intersection_point(Float64, (l_start, l_end), (c_start, c_end); exact)

If segments are co-linear

julia
            if seg_val == line_over
-                !over_allow && return false

at least one point in, meets requirments

julia
                in_req_met = true
+                !over_allow && return false

at least one point in, meets requirements

julia
                in_req_met = true
                 point_val = _point_segment_orientation(l_start, c_start, c_end)

If entire segment isn't covered, consider remaining section

julia
                if point_val != point_out
                     i, l_start, break_off = _find_new_seg(i, l_start, l_end, c_start, c_end)
                     break_off && break
@@ -133,7 +133,7 @@
 end
 
 #= If entire segment (le to ls) isn't covered by segment (cs to ce), find remaining section
-part of section outside of cs to ce. If completly covered, increase segment index i. =#
+part of section outside of cs to ce. If completely covered, increase segment index i. =#
 function _find_new_seg(i, ls, le, cs, ce)
     break_off = true
     if _point_segment_orientation(le, cs, ce) != point_out
@@ -161,7 +161,7 @@
         ((le, _tuple_point(GI.getpoint(line, i + 1))), (cs, ce))
     end
     return next_seg
-end

Determines if a line meets the given checks with respect to a polygon.

If in_allow is true, segments of the line can be in the polygon interior. If on_allow is true, segments of the line can be on the polygon's boundary. If out_allow is true, segments of the line can be outside of the polygon.

If in_require is true, the interiors of the line and polygon must meet in at least one point. If on_require is true, the line must have at least one point on the polygon'same boundary. If out_require is true, the line must have at least one point outside of the polygon.

If the point is in an "allowed" location and meets all requirments, return true. Else, return false.

If closed_line is true, line is treated as a closed line where the first and last point are connected by a segment.

julia
@inline function _line_polygon_process(line, polygon; kw...)
+end

Determines if a line meets the given checks with respect to a polygon.

If in_allow is true, segments of the line can be in the polygon interior. If on_allow is true, segments of the line can be on the polygon's boundary. If out_allow is true, segments of the line can be outside of the polygon.

If in_require is true, the interiors of the line and polygon must meet in at least one point. If on_require is true, the line must have at least one point on the polygon'same boundary. If out_require is true, the line must have at least one point outside of the polygon.

If the point is in an "allowed" location and meets all requirements, return true. Else, return false.

If closed_line is true, line is treated as a closed line where the first and last point are connected by a segment.

julia
@inline function _line_polygon_process(line, polygon; kw...)
     skip, returnval = _maybe_skip_disjoint_extents(line, polygon; kw...)
     skip && return returnval
     return _inner_line_polygon_process(line, polygon; kw...)
@@ -195,7 +195,7 @@
             !out_allow && return false
             out_req_met = true
         end
-        if on_hole  # hole bounday is polygon boundary
+        if on_hole  # hole boundary is polygon boundary
             !on_allow && return false
             on_req_met = true
         end
@@ -209,7 +209,7 @@
         in_req_met = true
     end
     return in_req_met && on_req_met && out_req_met
-end

Determines if a polygon meets the given checks with respect to a polygon.

If in_allow is true, the polygon's interiors must intersect. If on_allow is true, the one of the polygon's boundaries must either interact with the other polygon's boundary or interior. If out_allow is true, the first polygon must have interior regions outside of the second polygon.

If in_require is true, the polygon interiors must meet in at least one point. If on_require is true, one of the polygon's must have at least one boundary point in or on the other polygon. If out_require is true, the first polygon must have at least one interior point outside of the second polygon.

If the point is in an "allowed" location and meets all requirments, return true. Else, return false.

julia
@inline function _polygon_polygon_process(poly1, poly2; kw...)
+end

Determines if a polygon meets the given checks with respect to a polygon.

If in_allow is true, the polygon's interiors must intersect. If on_allow is true, the one of the polygon's boundaries must either interact with the other polygon's boundary or interior. If out_allow is true, the first polygon must have interior regions outside of the second polygon.

If in_require is true, the polygon interiors must meet in at least one point. If on_require is true, one of the polygon's must have at least one boundary point in or on the other polygon. If out_require is true, the first polygon must have at least one interior point outside of the second polygon.

If the point is in an "allowed" location and meets all requirements, return true. Else, return false.

julia
@inline function _polygon_polygon_process(poly1, poly2; kw...)
     skip, returnval = _maybe_skip_disjoint_extents(poly1, poly2; kw...)
     skip && return returnval
     return _inner_polygon_polygon_process(poly1, poly2; kw...)
@@ -307,7 +307,7 @@
         !between_endpoints && return out
     end
     return in
-end

Determine if point is in, on, or out of a closed curve, which includes the space enclosed by the closed curve.

In means the point is within the closed curve (excluding edges and vertices). On means the point is on an edge or a vertex of the closed curve. Out means the point is outside of the closed curve.

Point should be an object of point trait and curve should be an object with a linestring or linearring trait, that is assumed to be closed, regardless of repeated last point.

Can provide values of in, on, and out keywords, which determines return values for each scenario.

Note that this uses the Algorithm by Hao and Sun (2018): https://doi.org/10.3390/sym10100477 Paper seperates orientation of point and edge into 26 cases. For each case, it is either a case where the point is on the edge (returns on), where a ray from the point (x, y) to infinity along the line y = y cut through the edge (k += 1), or the ray does not pass through the edge (do nothing and continue). If the ray passes through an odd number of edges, it is within the curve, else outside of of the curve if it didn't return 'on'. See paper for more information on cases denoted in comments.

julia
function _point_filled_curve_orientation(
+end

Determine if point is in, on, or out of a closed curve, which includes the space enclosed by the closed curve.

In means the point is within the closed curve (excluding edges and vertices). On means the point is on an edge or a vertex of the closed curve. Out means the point is outside of the closed curve.

Point should be an object of point trait and curve should be an object with a linestring or linearring trait, that is assumed to be closed, regardless of repeated last point.

Can provide values of in, on, and out keywords, which determines return values for each scenario.

Note that this uses the Algorithm by Hao and Sun (2018): https://doi.org/10.3390/sym10100477 Paper separates orientation of point and edge into 26 cases. For each case, it is either a case where the point is on the edge (returns on), where a ray from the point (x, y) to infinity along the line y = y cut through the edge (k += 1), or the ray does not pass through the edge (do nothing and continue). If the ray passes through an odd number of edges, it is within the curve, else outside of of the curve if it didn't return 'on'. See paper for more information on cases denoted in comments.

julia
function _point_filled_curve_orientation(
     point, curve;
     in::T = point_in, on::T = point_on, out::T = point_out, exact,
 ) where {T}
@@ -412,7 +412,7 @@
         l_start = l_end
     end
     return in_curve, on_curve, out_curve
-end

Determines the types of interactions of a line with a polygon.

Returns a tuple of booleans: (in_poly, on_poly, out_poly).

If in_poly is true, some of the lines interior points interact with the polygon interior points. If in_poly is true, endpoints of either the line intersect with the polygon or the line interacts with the polygon boundary, including hole bounaries. If out_curve is true, at least one segments of the line is outside the polygon, including inside of holes.

If closed_line is true, line is treated as a closed line where the first and last point are connected by a segment.

julia
function _line_polygon_interactions(
+end

Determines the types of interactions of a line with a polygon.

Returns a tuple of booleans: (in_poly, on_poly, out_poly).

If in_poly is true, some of the lines interior points interact with the polygon interior points. If in_poly is true, endpoints of either the line intersect with the polygon or the line interacts with the polygon boundary, including hole boundaries. If out_curve is true, at least one segments of the line is outside the polygon, including inside of holes.

If closed_line is true, line is treated as a closed line where the first and last point are connected by a segment.

julia
function _line_polygon_interactions(
     line, polygon;
     exact, closed_line = false,
 )
@@ -455,7 +455,7 @@
     end
     return skip, returnval
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/geom_relations/intersects.html b/previews/PR135/source/methods/geom_relations/intersects.html index 5b381baf5..dc785bd55 100644 --- a/previews/PR135/source/methods/geom_relations/intersects.html +++ b/previews/PR135/source/methods/geom_relations/intersects.html @@ -5,20 +5,20 @@ Intersection checks | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Intersection checks

julia
export intersects

What is intersects?

The intersects function checks if a given geometry intersects with another geometry, or in other words, the either the interiors or boundaries of the two geometries intersect.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+    
Skip to content

Intersection checks

julia
export intersects

What is intersects?

The intersects function checks if a given geometry intersects with another geometry, or in other words, the either the interiors or boundaries of the two geometries intersect.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -27,7 +27,7 @@
 line2 = GI.Line([(123.354492,-15.961329), (127.22168,-14.008696)])
 f, a, p = lines(GI.getpoint(line1))
 lines!(GI.getpoint(line2))
-f

We can see that they intersect, so we expect intersects to return true, and we can visualize the intersection point in red.

julia
GO.intersects(line1, line2)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

Given that intersects is the exact opposite of disjoint, we simply pass the two inputs variables, swapped in order, to disjoint.

julia
"""
+f

We can see that they intersect, so we expect intersects to return true, and we can visualize the intersection point in red.

julia
GO.intersects(line1, line2)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

Given that intersects is the exact opposite of disjoint, we simply pass the two inputs variables, swapped in order, to disjoint.

julia
"""
     intersects(geom1, geom2)::Bool
 
 Return true if the interiors or boundaries of the two geometries interact.
@@ -45,7 +45,7 @@
 ```
 """
 intersects(geom1, geom2) = !disjoint(geom1, geom2)

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/geom_relations/overlaps.html b/previews/PR135/source/methods/geom_relations/overlaps.html index c98d061f2..4f958ffc6 100644 --- a/previews/PR135/source/methods/geom_relations/overlaps.html +++ b/previews/PR135/source/methods/geom_relations/overlaps.html @@ -5,20 +5,20 @@ Overlaps | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Overlaps

julia
export overlaps

What is overlaps?

The overlaps function checks if two geometries overlap. Two geometries can only overlap if they have the same dimension, and if they overlap, but one is not contained, within, or equal to the other.

Note that this means it is impossible for a single point to overlap with a single point and a line only overlaps with another line if only a section of each line is colinear.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+    
Skip to content

Overlaps

julia
export overlaps

What is overlaps?

The overlaps function checks if two geometries overlap. Two geometries can only overlap if they have the same dimension, and if they overlap, but one is not contained, within, or equal to the other.

Note that this means it is impossible for a single point to overlap with a single point and a line only overlaps with another line if only a section of each line is collinear.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -29,7 +29,7 @@
 scatter!(GI.getpoint(l1), color = :blue)
 lines!(GI.getpoint(l2), color = :orange)
 scatter!(GI.getpoint(l2), color = :orange)
-f

We can see that the two lines overlap in the plot:

julia
GO.overlaps(l1, l2)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that that since only elements of the same dimension can overlap, any two geometries with traits that are of different dimensions autmoatically can return false.

For geometries with the same trait dimension, we must make sure that they share a point, an edge, or area for points, lines, and polygons/multipolygons respectivly, without being contained.

julia
"""
+f

We can see that the two lines overlap in the plot:

julia
GO.overlaps(l1, l2)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait. This is also used in the implementation, since it's a lot less work!

Note that that since only elements of the same dimension can overlap, any two geometries with traits that are of different dimensions automatically can return false.

For geometries with the same trait dimension, we must make sure that they share a point, an edge, or area for points, lines, and polygons/multipolygons respectively, without being contained.

julia
"""
     overlaps(geom1, geom2)::Bool
 
 Compare two Geometries of the same dimension and return true if their
@@ -93,7 +93,7 @@
 """
     overlaps(::GI.LineTrait, line1, ::GI.LineTrait, line)::Bool
 
-If the lines overlap, meaning that they are colinear but each have one endpoint
+If the lines overlap, meaning that they are collinear but each have one endpoint
 outside of the other line, return true. Else false.
 """
 overlaps(::GI.LineTrait, line1, ::GI.LineTrait, line) =
@@ -189,7 +189,7 @@
     return false
 end
 
-#= If the edges overlap, meaning that they are colinear but each have one endpoint
+#= If the edges overlap, meaning that they are collinear but each have one endpoint
 outside of the other edge, return true. Else false. =#
 function _overlaps(
     (a1, a2)::Edge,
@@ -230,7 +230,7 @@
     seg_val, _, _ = _intersection_point(Float64, edge_a, edge_b; exact = _False())
     return seg_val != line_out
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/geom_relations/touches.html b/previews/PR135/source/methods/geom_relations/touches.html index 9275cd6b6..4d652f3f5 100644 --- a/previews/PR135/source/methods/geom_relations/touches.html +++ b/previews/PR135/source/methods/geom_relations/touches.html @@ -5,20 +5,20 @@ Touches | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Touches

julia
export touches

What is touches?

The touches function checks if one geometry touches another geometry. In other words, the interiors of the two geometries don't interact, but one of the geometries must have a boundary point that interacts with either the other geometies interior or boundary.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+    
Skip to content

Touches

julia
export touches

What is touches?

The touches function checks if one geometry touches another geometry. In other words, the interiors of the two geometries don't interact, but one of the geometries must have a boundary point that interacts with either the other geometry's interior or boundary.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -28,7 +28,7 @@
 
 f, a, p = lines(GI.getpoint(l1))
 lines!(GI.getpoint(l2))
-f

We can see that these two lines touch only at their endpoints.

julia
GO.touches(l1, l2)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait.

Each of these calls a method in the geom_geom_processors file. The methods in this file determine if the given geometries meet a set of criteria. For the touches function and arguments g1 and g2, this criteria is as follows: - points of g1 are not allowed to be in the interior of g2 - points of g1 are allowed to be on the boundary of g2 - points of g1 are allowed to be in the exterior of g2 - no points of g1 are required to be in the interior of g2 - at least one point of g1 is required to be on the boundary of g2 - no points of g1 are required to be in the exterior of g2

The code for the specific implementations is in the geom_geom_processors file.

julia
const TOUCHES_POINT_ALLOWED = (in_allow = false, on_allow = true, out_allow = false)
+f

We can see that these two lines touch only at their endpoints.

julia
GO.touches(l1, l2)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait.

Each of these calls a method in the geom_geom_processors file. The methods in this file determine if the given geometries meet a set of criteria. For the touches function and arguments g1 and g2, this criteria is as follows: - points of g1 are not allowed to be in the interior of g2 - points of g1 are allowed to be on the boundary of g2 - points of g1 are allowed to be in the exterior of g2 - no points of g1 are required to be in the interior of g2 - at least one point of g1 is required to be on the boundary of g2 - no points of g1 are required to be in the exterior of g2

The code for the specific implementations is in the geom_geom_processors file.

julia
const TOUCHES_POINT_ALLOWED = (in_allow = false, on_allow = true, out_allow = false)
 const TOUCHES_CURVE_ALLOWED = (over_allow = false, cross_allow = false, on_allow = true, out_allow = true)
 const TOUCHES_POLYGON_ALLOWS = (in_allow = false, on_allow = true, out_allow = true)
 const TOUCHES_REQUIRES = (in_require = false, on_require = true, out_require = false)
@@ -39,7 +39,7 @@
 
 Return `true` if the first geometry touches the second geometry. In other words,
 the two interiors cannot interact, but one of the geometries must have a
-boundary point that interacts with either the other geometies interior or
+boundary point that interacts with either the other geometry's interior or
 boundary.
 
 # Examples
@@ -82,8 +82,8 @@
 _touches(
     trait1::Union{GI.AbstractCurveTrait, GI.PolygonTrait}, g1,
     trait2::GI.PointTrait, g2,
-) = _touches(trait2, g2, trait1, g1)

Lines touching geometries

julia
#= Linestring touches another line if at least one bounday point interacts with
-the bounday of interior of the other line, but the interiors don't interact. =#
+) = _touches(trait2, g2, trait1, g1)

Lines touching geometries

julia
#= Linestring touches another line if at least one boundary point interacts with
+the boundary of interior of the other line, but the interiors don't interact. =#
 _touches(
     ::Union{GI.LineTrait, GI.LineStringTrait}, g1,
     ::Union{GI.LineTrait, GI.LineStringTrait}, g2,
@@ -130,14 +130,14 @@
 ) = _touches(trait2, g2, trait1, g1)
 
 #= Linearring cannot touch another linear ring since they are both exclusively
-made up of interior points and no bounday points =#
+made up of interior points and no boundary points =#
 _touches(
     ::GI.LinearRingTrait, g1,
     ::GI.LinearRingTrait, g2,
 ) = false
 
 #= Linearring touches a polygon if at least one of the points of the ring
-interact with the polygon bounday and non are in the polygon interior. =#
+interact with the polygon boundary and non are in the polygon interior. =#
 _touches(
     ::GI.LinearRingTrait, g1,
     ::GI.PolygonTrait, g2,
@@ -147,8 +147,8 @@
     TOUCHES_REQUIRES...,
     TOUCHES_EXACT...,
     closed_line = true,
-)

Polygons touch geometries

julia
#= Polygon touches a curve if at least one of the curve bounday points interacts
-with the polygon's bounday and no curve points interact with the interior.=#
+)

Polygons touch geometries

julia
#= Polygon touches a curve if at least one of the curve boundary points interacts
+with the polygon's boundary and no curve points interact with the interior.=#
 _touches(
     trait1::GI.PolygonTrait, g1,
     trait2::GI.AbstractCurveTrait, g2
@@ -192,7 +192,7 @@
     end
     return true
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/geom_relations/within.html b/previews/PR135/source/methods/geom_relations/within.html index 36e238724..86cdab821 100644 --- a/previews/PR135/source/methods/geom_relations/within.html +++ b/previews/PR135/source/methods/geom_relations/within.html @@ -5,20 +5,20 @@ Within | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Within

julia
export within

What is within?

The within function checks if one geometry is inside another geometry. This requires that the two interiors intersect and that the interior and boundary of the first geometry is not in the exterior of the second geometry.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
+    
Skip to content

Within

julia
export within

What is within?

The within function checks if one geometry is inside another geometry. This requires that the two interiors intersect and that the interior and boundary of the first geometry is not in the exterior of the second geometry.

To provide an example, consider these two lines:

julia
import GeometryOps as GO
 import GeoInterface as GI
 using Makie
 using CairoMakie
@@ -29,8 +29,8 @@
 scatter!(GI.getpoint(l1), color = :blue)
 lines!(GI.getpoint(l2), color = :orange)
 scatter!(GI.getpoint(l2), color = :orange)
-f

We can see that all of the points and edges of l2 are within l1, so l2 is within l1, but l1 is not within l2

julia
GO.within(l1, l2)  # false
-GO.within(l2, l1)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait.

Each of these calls a method in the geom_geom_processors file. The methods in this file determine if the given geometries meet a set of criteria. For the within function and arguments g1 and g2, this criteria is as follows: - points of g1 are allowed to be in the interior of g2 (either through overlap or crossing for lines) - points of g1 are allowed to be on the boundary of g2 - points of g1 are not allowed to be in the exterior of g2 - at least one point of g1 is required to be in the interior of g2 - no points of g1 are required to be on the boundary of g2 - no points of g1 are required to be in the exterior of g2

The code for the specific implementations is in the geom_geom_processors file.

julia
const WITHIN_POINT_ALLOWS = (in_allow = true, on_allow = false, out_allow = false)
+f

We can see that all of the points and edges of l2 are within l1, so l2 is within l1, but l1 is not within l2

julia
GO.within(l1, l2)  # false
+GO.within(l2, l1)  # true
true

Implementation

This is the GeoInterface-compatible implementation.

First, we implement a wrapper method that dispatches to the correct implementation based on the geometry trait.

Each of these calls a method in the geom_geom_processors file. The methods in this file determine if the given geometries meet a set of criteria. For the within function and arguments g1 and g2, this criteria is as follows: - points of g1 are allowed to be in the interior of g2 (either through overlap or crossing for lines) - points of g1 are allowed to be on the boundary of g2 - points of g1 are not allowed to be in the exterior of g2 - at least one point of g1 is required to be in the interior of g2 - no points of g1 are required to be on the boundary of g2 - no points of g1 are required to be in the exterior of g2

The code for the specific implementations is in the geom_geom_processors file.

julia
const WITHIN_POINT_ALLOWS = (in_allow = true, on_allow = false, out_allow = false)
 const WITHIN_CURVE_ALLOWS = (over_allow = true, cross_allow = true, on_allow = true, out_allow = false)
 const WITHIN_POLYGON_ALLOWS = (in_allow = true, on_allow = true, out_allow = false)
 const WITHIN_REQUIRES = (in_require = true, on_require = false, out_require = false)
@@ -211,7 +211,7 @@
     end
     return true
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/orientation.html b/previews/PR135/source/methods/orientation.html index 2d6e3bc3f..dbd997a96 100644 --- a/previews/PR135/source/methods/orientation.html +++ b/previews/PR135/source/methods/orientation.html @@ -5,20 +5,20 @@ Orientation | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Orientation

julia
export isclockwise, isconcave

isclockwise

The orientation of a geometry is whether it runs clockwise or counter-clockwise.

This is defined for linestrings, linear rings, or vectors of points.

isconcave

A polygon is concave if it has at least one interior angle greater than 180 degrees, meaning that the interior of the polygon is not a convex set.

These are all adapted from Turf.jl.

The may not necessarily be what want in the end but work for now!

julia
"""
+    
Skip to content

Orientation

julia
export isclockwise, isconcave

isclockwise

The orientation of a geometry is whether it runs clockwise or counter-clockwise.

This is defined for linestrings, linear rings, or vectors of points.

isconcave

A polygon is concave if it has at least one interior angle greater than 180 degrees, meaning that the interior of the polygon is not a convex set.

These are all adapted from Turf.jl.

The may not necessarily be what want in the end but work for now!

julia
"""
     isclockwise(line::Union{LineString, Vector{Position}})::Bool
 
 Take a ring and return `true` if the line goes clockwise, or `false` if the line goes
@@ -118,7 +118,7 @@
     _isparallel(bx - ax, by - ay, dx - cx, dy - cy)
 
 _isparallel(Δx1, Δy1, Δx2, Δy2) = (Δx1 * Δy2 == Δy1 * Δx2)

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/methods/polygonize.html b/previews/PR135/source/methods/polygonize.html index d13ca8e89..9c947b090 100644 --- a/previews/PR135/source/methods/polygonize.html +++ b/previews/PR135/source/methods/polygonize.html @@ -5,20 +5,20 @@ Polygonizing raster data | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Polygonizing raster data

julia
export polygonize
+    
Skip to content

Polygonizing raster data

julia
export polygonize
 
 #=
 The methods in this file convert a raster image into a set of polygons,
@@ -53,7 +53,7 @@
 Now, we can use the `polygonize` function to convert the raster data into polygons.
 
 For this particular example, we chose a range of z-values between 0.8 and 3.2,
-which would provide two distinct polyogns with holes.
+which would provide two distinct polygons with holes.
 
 ```@example polygonize
 polygons = polygonize(xs, ys, 0.8 .< zs .< 3.2)
@@ -266,7 +266,7 @@
     assigned_holes = count(assigned)
     assigned_holes == length(holes) || @warn "Not all holes were assigned to polygons, $(length(holes) - assigned_holes) where missed from $(length(holes)) holes and $(length(polygons)) polygons"
 
-    if isempty(polygons)

TODO: this really should return an emtpty MultiPolygon but GeoInterface wrappers cant do that yet, which is not ideal...

julia
        @warn "No polgons found, check your data or try another function for `f`"
+    if isempty(polygons)

TODO: this really should return an empty MultiPolygon but GeoInterface wrappers cant do that yet, which is not ideal...

julia
        @warn "No polgons found, check your data or try another function for `f`"
         return nothing
     else

Otherwise return a wrapped MultiPolygon

julia
        return GI.MultiPolygon(polygons; crs, extent = mapreduce(GI.extent, Extents.union, polygons))
     end
@@ -307,7 +307,7 @@
     end
     return edges
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/not_implemented_yet.html b/previews/PR135/source/not_implemented_yet.html index 2ce87ada8..9d185a667 100644 --- a/previews/PR135/source/not_implemented_yet.html +++ b/previews/PR135/source/not_implemented_yet.html @@ -5,24 +5,24 @@ Not implemented yet | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Not implemented yet

All of the functions in this file are not implemented in Julia yet. Some of them may have implementations in LibGEOS which we can use via an extension, but there is no native-Julia implementation for them.

julia
function symdifference end
+    
Skip to content

Not implemented yet

All of the functions in this file are not implemented in Julia yet. Some of them may have implementations in LibGEOS which we can use via an extension, but there is no native-Julia implementation for them.

julia
function symdifference end
 function buffer end
 function convexhull end
 function concavehull end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/primitives.html b/previews/PR135/source/primitives.html index dbba97097..eba226871 100644 --- a/previews/PR135/source/primitives.html +++ b/previews/PR135/source/primitives.html @@ -5,23 +5,23 @@ Primitive functions | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Primitive functions

julia
export apply, applyreduce, TraitTarget

This file mainly defines the apply and applyreduce functions, and some related functionality.

In general, the idea behind the apply framework is to take as input any geometry, vector of geometries, or feature collection, deconstruct it to the given trait target (any arbitrary GI.AbstractTrait or TraitTarget union thereof, like PointTrait or PolygonTrait) and perform some operation on it.

This allows for a simple and consistent framework within which users can define their own operations trivially easily, and removes a lot of the complexity involved with handling complex geometry structures.

For example, a simple way to flip the x and y coordinates of a geometry is:

julia
flipped_geom = GO.apply(GI.PointTrait(), geom) do p
+    
Skip to content

Primitive functions

julia
export apply, applyreduce, TraitTarget

This file mainly defines the apply and applyreduce functions, and some related functionality.

In general, the idea behind the apply framework is to take as input any geometry, vector of geometries, or feature collection, deconstruct it to the given trait target (any arbitrary GI.AbstractTrait or TraitTarget union thereof, like PointTrait or PolygonTrait) and perform some operation on it.

This allows for a simple and consistent framework within which users can define their own operations trivially easily, and removes a lot of the complexity involved with handling complex geometry structures.

For example, a simple way to flip the x and y coordinates of a geometry is:

julia
flipped_geom = GO.apply(GI.PointTrait(), geom) do p
     (GI.y(p), GI.x(p))
 end

As simple as that. There's no need to implement your own decomposition because it's done for you.

Functions like flip, reproject, transform, even segmentize and simplify have been implemented using the apply framework. Similarly, centroid, area and distance have been implemented using the applyreduce framework.

Docstrings

Functions

Missing docstring.

Missing docstring for apply. Check Documenter's build log for details.

Missing docstring.

Missing docstring for applyreduce. Check Documenter's build log for details.

Missing docstring.

Missing docstring for GeometryOps.unwrap. Check Documenter's build log for details.

# GeometryOps.flattenFunction.
julia
flatten(target::Type{<:GI.AbstractTrait}, obj)
-flatten(f, target::Type{<:GI.AbstractTrait}, obj)

Lazily flatten any AbstractArray, iterator, FeatureCollectionTrait, FeatureTrait or AbstractGeometryTrait object obj, so that objects with the target trait are returned by the iterator.

If f is passed in it will be applied to the target geometries.

source


# GeometryOps.reconstructFunction.
julia
reconstruct(geom, components)

Reconstruct geom from an iterable of component objects that match its structure.

All objects in components must have the same GeoInterface.trait.

Ususally used in combination with flatten.

source


# GeometryOps.rebuildFunction.
julia
rebuild(geom, child_geoms)

Rebuild a geometry from child geometries.

By default geometries will be rebuilt as a GeoInterface.Wrappers geometry, but rebuild can have methods added to it to dispatch on geometries from other packages and specify how to rebuild them.

(Maybe it should go into GeoInterface.jl)

source


Types

Missing docstring.

Missing docstring for TraitTarget. Check Documenter's build log for details.

Implementation

julia
const THREADED_KEYWORD = "- `threaded`: `true` or `false`. Whether to use multithreading. Defaults to `false`."
+flatten(f, target::Type{<:GI.AbstractTrait}, obj)

Lazily flatten any AbstractArray, iterator, FeatureCollectionTrait, FeatureTrait or AbstractGeometryTrait object obj, so that objects with the target trait are returned by the iterator.

If f is passed in it will be applied to the target geometries.

source


# GeometryOps.reconstructFunction.
julia
reconstruct(geom, components)

Reconstruct geom from an iterable of component objects that match its structure.

All objects in components must have the same GeoInterface.trait.

Usually used in combination with flatten.

source


# GeometryOps.rebuildFunction.
julia
rebuild(geom, child_geoms)

Rebuild a geometry from child geometries.

By default geometries will be rebuilt as a GeoInterface.Wrappers geometry, but rebuild can have methods added to it to dispatch on geometries from other packages and specify how to rebuild them.

(Maybe it should go into GeoInterface.jl)

source


Types

Missing docstring.

Missing docstring for TraitTarget. Check Documenter's build log for details.

Implementation

julia
const THREADED_KEYWORD = "- `threaded`: `true` or `false`. Whether to use multithreading. Defaults to `false`."
 const CRS_KEYWORD = "- `crs`: The CRS to attach to geometries. Defaults to `nothing`."
 const CALC_EXTENT_KEYWORD = "- `calc_extent`: `true` or `false`. Whether to calculate the extent. Defaults to `false`."
 
@@ -106,14 +106,14 @@
 ) where F

Run _apply on all features in the feature collection, possibly threaded

julia
    apply_to_feature(i) =
         _apply(f, target, GI.getfeature(fc, i); crs, calc_extent, threaded=_False())::GI.Feature
     features = _maptasks(apply_to_feature, 1:GI.nfeature(fc), threaded)
-    if calc_extent isa _True

Calculate the extent of the features

julia
        extent = mapreduce(GI.extent, Extents.union, features)

Return a FeatureCollection with features, crs and caculated extent

julia
        return GI.FeatureCollection(features; crs, extent)
+    if calc_extent isa _True

Calculate the extent of the features

julia
        extent = mapreduce(GI.extent, Extents.union, features)

Return a FeatureCollection with features, crs and calculated extent

julia
        return GI.FeatureCollection(features; crs, extent)
     else

Return a FeatureCollection with features and crs

julia
        return GI.FeatureCollection(features; crs)
     end
 end

Rewrap all FeatureTrait features as GI.Feature, keeping the properties

julia
@inline function _apply(f::F, target, ::GI.FeatureTrait, feature;
     crs=GI.crs(feature), calc_extent=_False(), threaded
 ) where F

Run _apply on the contained geometry

julia
    geometry = _apply(f, target, GI.geometry(feature); crs, calc_extent, threaded)

Get the feature properties

julia
    properties = GI.properties(feature)
-    if calc_extent isa _True

Calculate the extent of the geometry

julia
        extent = GI.extent(geometry)

Return a new Feature with the new geometry and calculated extent, but the oroginal properties and crs

julia
        return GI.Feature(geometry; properties, crs, extent)
-    else

Return a new Feature with the new geometry, but the oroginal properties and crs

julia
        return GI.Feature(geometry; properties, crs)
+    if calc_extent isa _True

Calculate the extent of the geometry

julia
        extent = GI.extent(geometry)

Return a new Feature with the new geometry and calculated extent, but the original properties and crs

julia
        return GI.Feature(geometry; properties, crs, extent)
+    else

Return a new Feature with the new geometry, but the original properties and crs

julia
        return GI.Feature(geometry; properties, crs)
     end
 end

Reconstruct nested geometries, maybe using threads to call _apply on component geoms

julia
@inline function _apply(f::F, target, trait, geom;
     crs=GI.crs(geom), calc_extent=_False(), threaded
@@ -132,9 +132,9 @@
     end
     return _apply_inner(geom, geoms, crs, calc_extent)
 end
-function _apply_inner(geom, geoms, crs, calc_extent::_True)

Calculate the extent of the sub geometries

julia
    extent = mapreduce(GI.extent, Extents.union, geoms)

Return a new geometry of the same trait as geom, holding tnew geoms with crs and calcualted extent

julia
    return rebuild(geom, geoms; crs, extent)
+function _apply_inner(geom, geoms, crs, calc_extent::_True)

Calculate the extent of the sub geometries

julia
    extent = mapreduce(GI.extent, Extents.union, geoms)

Return a new geometry of the same trait as geom, holding the new geoms with crs and calculated extent

julia
    return rebuild(geom, geoms; crs, extent)
 end
-function _apply_inner(geom, geoms, crs, calc_extent::_False)

Return a new geometryof the same trait as geom, holding the new geoms with crs

julia
    return rebuild(geom, geoms; crs)
+function _apply_inner(geom, geoms, crs, calc_extent::_False)

Return a new geometry of the same trait as geom, holding the new geoms with crs

julia
    return rebuild(geom, geoms; crs)
 end

Fail loudly if we hit PointTrait without running f (after PointTrait there is no further to dig with _apply) @inline _apply(f, ::TraitTarget{Target}, trait::GI.PointTrait, geom; crs=nothing, kw...) where Target = throw(ArgumentError("target Target not found, but reached a PointTrait leaf")) Finally, these short methods are the main purpose of apply. The Trait is a subtype of the Target (or identical to it) So the Target is found. We apply f to geom and return it to previous _apply calls to be wrapped with the outer geometries/feature/featurecollection/array.

julia
_apply(f::F, ::TraitTarget{Target}, ::Trait, geom; crs=GI.crs(geom), kw...) where {F,Target,Trait<:Target} = f(geom)

Define some specific cases of this match to avoid method ambiguity

julia
for T in (
     GI.PointTrait, GI.LinearRing, GI.LineString,
     GI.MultiPoint, GI.FeatureTrait, GI.FeatureCollectionTrait
@@ -161,7 +161,7 @@
 end
 
 @inline _applyreduce(f::F, op::O, target, geom; threaded, init) where {F, O} =
-    _applyreduce(f, op, target, GI.trait(geom), geom; threaded, init)

Maybe use threads recucing over arrays

julia
@inline function _applyreduce(f::F, op::O, target, ::Nothing, A::AbstractArray; threaded, init) where {F, O}
+    _applyreduce(f, op, target, GI.trait(geom), geom; threaded, init)

Maybe use threads reducing over arrays

julia
@inline function _applyreduce(f::F, op::O, target, ::Nothing, A::AbstractArray; threaded, init) where {F, O}
     applyreduce_array(i) = _applyreduce(f, op, target, A[i]; threaded=_False(), init)
     _mapreducetasks(applyreduce_array, op, eachindex(A), threaded; init)
 end

Try to applyreduce over iterables

julia
@inline function _applyreduce(f::F, op::O, target, ::Nothing, iterable::IterableType; threaded, init) where {F, O, IterableType}
@@ -258,7 +258,7 @@
 
 All objects in `components` must have the same `GeoInterface.trait`.
 
-Ususally used in combination with `flatten`.
+Usually used in combination with `flatten`.
 """
 function reconstruct(geom, components)
     obj, iter = _reconstruct(geom, components)
@@ -318,14 +318,14 @@
     end
 end
 
-using Base.Threads: nthreads, @threads, @spawn

Threading utility, modified Mason Protters threading PSA run f over ntasks, where f recieves an AbstractArray/range of linear indices

julia
@inline function _maptasks(f::F, taskrange, threaded::_True)::Vector where F
+using Base.Threads: nthreads, @threads, @spawn

Threading utility, modified Mason Protters threading PSA run f over ntasks, where f receives an AbstractArray/range of linear indices

julia
@inline function _maptasks(f::F, taskrange, threaded::_True)::Vector where F
     ntasks = length(taskrange)

Customize this as needed. More tasks have more overhead, but better load balancing

julia
    tasks_per_thread = 2
     chunk_size = max(1, ntasks ÷ (tasks_per_thread * nthreads()))

partition the range into chunks

julia
    task_chunks = Iterators.partition(taskrange, chunk_size)

Map over the chunks

julia
    tasks = map(task_chunks) do chunk

Spawn a task to process this chunk

julia
        @spawn begin

Where we map f over the chunk indices

julia
            map(f, chunk)
         end
     end

Finally we join the results into a new vector

julia
    return mapreduce(fetch, vcat, tasks)
 end

Here we use the compiler directive @assume_effects :foldable to force the compiler to lookup through the closure. This alone makes e.g. flip 2.5x faster!

julia
Base.@assume_effects :foldable @inline function _maptasks(f::F, taskrange, threaded::_False)::Vector where F
     map(f, taskrange)
-end

Threading utility, modified Mason Protters threading PSA run f over ntasks, where f recieves an AbstractArray/range of linear indices

WARNING: this will not work for mean/median - only ops where grouping is possible

julia
@inline function _mapreducetasks(f::F, op, taskrange, threaded::_True; init) where F
+end

Threading utility, modified Mason Protters threading PSA run f over ntasks, where f receives an AbstractArray/range of linear indices

WARNING: this will not work for mean/median - only ops where grouping is possible

julia
@inline function _mapreducetasks(f::F, op, taskrange, threaded::_True; init) where F
     ntasks = length(taskrange)

Customize this as needed. More tasks have more overhead, but better load balancing

julia
    tasks_per_thread = 2
     chunk_size = max(1, ntasks ÷ (tasks_per_thread * nthreads()))

partition the range into chunks

julia
    task_chunks = Iterators.partition(taskrange, chunk_size)

Map over the chunks

julia
    tasks = map(task_chunks) do chunk

Spawn a task to process this chunk

julia
        @spawn begin

Where we map f over the chunk indices

julia
            mapreduce(f, op, chunk; init)
         end
@@ -334,7 +334,7 @@
 Base.@assume_effects :foldable function _mapreducetasks(f::F, op, taskrange, threaded::_False; init) where F
     mapreduce(f, op, taskrange; init)
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/transformations/correction/closed_ring.html b/previews/PR135/source/transformations/correction/closed_ring.html index 5e2500cac..64f1381ae 100644 --- a/previews/PR135/source/transformations/correction/closed_ring.html +++ b/previews/PR135/source/transformations/correction/closed_ring.html @@ -5,20 +5,20 @@ Closed Rings | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Closed Rings

julia
export ClosedRing

A closed ring is a ring that has the same start and end point. This is a requirement for a valid polygon (technically, for a valid LinearRing). This correction is used to ensure that the polygon is valid.

The reason this operates on the polygon level is that several packages are loose about whether they return LinearRings (which is correct) or LineStrings (which is incorrect) for the contents of a polygon. Therefore, we decompose manually to ensure correctness.

Example

Many polygon providers do not close their polygons, which makes them invalid according to the specification. Quite a few geometry algorithms assume that polygons are closed, and leaving them open can lead to incorrect results!

For example, the following polygon is not valid:

julia
import GeoInterface as GI
+    
Skip to content

Closed Rings

julia
export ClosedRing

A closed ring is a ring that has the same start and end point. This is a requirement for a valid polygon (technically, for a valid LinearRing). This correction is used to ensure that the polygon is valid.

The reason this operates on the polygon level is that several packages are loose about whether they return LinearRings (which is correct) or LineStrings (which is incorrect) for the contents of a polygon. Therefore, we decompose manually to ensure correctness.

Example

Many polygon providers do not close their polygons, which makes them invalid according to the specification. Quite a few geometry algorithms assume that polygons are closed, and leaving them open can lead to incorrect results!

For example, the following polygon is not valid:

julia
import GeoInterface as GI
 polygon = GI.Polygon([[(0, 0), (1, 0), (1, 1), (0, 1)]])
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Int64, Int64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Int64, Int64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Int64, Int64}}, Nothing, Nothing}([(0, 0), (1, 0), (1, 1), (0, 1)], nothing, nothing)], nothing, nothing)

even though it will look correct when visualized, and indeed appears correct.

julia
import GeometryOps as GO
 GO.fix(polygon, corrections = [GO.ClosedRing()])
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}([(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 1.0), (0.0, 0.0)], nothing, nothing)], nothing, nothing)

You can see that the last point of the ring here is equal to the first point. For a polygon with n sides, there should be n+1 vertices.

Implementation

julia
"""
     ClosedRing() <: GeometryCorrection
@@ -48,7 +48,7 @@
     else

Assemble the ring as a vector

julia
        tups = tuples.(GI.getpoint(ring))

Close the ring

julia
        push!(tups, tups[1])

Return an actual ring

julia
        return GI.LinearRing(tups)
     end
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/transformations/correction/geometry_correction.html b/previews/PR135/source/transformations/correction/geometry_correction.html index 891029eab..b0ee686f2 100644 --- a/previews/PR135/source/transformations/correction/geometry_correction.html +++ b/previews/PR135/source/transformations/correction/geometry_correction.html @@ -5,20 +5,20 @@ Geometry Corrections | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Geometry Corrections

julia
export fix

This file simply defines the GeometryCorrection abstract type, and the interface that any GeometryCorrection must implement.

A geometry correction is a transformation that is applied to a geometry to correct it in some way.

For example, a ClosedRing correction might be applied to a Polygon to ensure that its exterior ring is closed.

Interface

All GeometryCorrections are callable structs which, when called, apply the correction to the given geometry, and return either a copy or the original geometry (if nothing needed to be corrected).

See below for the full interface specification.

# GeometryOps.GeometryCorrectionType.
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source


Any geometry correction must implement the interface as given above.

julia
"""
+    
Skip to content

Geometry Corrections

julia
export fix

This file simply defines the GeometryCorrection abstract type, and the interface that any GeometryCorrection must implement.

A geometry correction is a transformation that is applied to a geometry to correct it in some way.

For example, a ClosedRing correction might be applied to a Polygon to ensure that its exterior ring is closed.

Interface

All GeometryCorrections are callable structs which, when called, apply the correction to the given geometry, and return either a copy or the original geometry (if nothing needed to be corrected).

See below for the full interface specification.

# GeometryOps.GeometryCorrectionType.
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source


Any geometry correction must implement the interface as given above.

julia
"""
     abstract type GeometryCorrection
 
 This abstract type represents a geometry correction.
@@ -48,8 +48,8 @@
         final_geometry = apply(net_function, Trait, final_geometry; kwargs...)
     end
     return final_geometry
-end

Available corrections

# GeometryOps.ClosedRingType.
julia
ClosedRing() <: GeometryCorrection

This correction ensures that a polygon's exterior and interior rings are closed.

It can be called on any geometry correction as usual.

See also GeometryCorrection.

source


# GeometryOps.DiffIntersectingPolygonsType.
julia
DiffIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygons included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be made nonintersecting through the difference operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area. See also GeometryCorrection, UnionIntersectingPolygons.

source


# GeometryOps.GeometryCorrectionType.
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source


# GeometryOps.UnionIntersectingPolygonsType.
julia
UnionIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygon's included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be combined through the union operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area.

See also GeometryCorrection.

source



This page was generated using Literate.jl.

- +end

Available corrections

# GeometryOps.ClosedRingType.
julia
ClosedRing() <: GeometryCorrection

This correction ensures that a polygon's exterior and interior rings are closed.

It can be called on any geometry correction as usual.

See also GeometryCorrection.

source


# GeometryOps.DiffIntersectingPolygonsType.
julia
DiffIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygons included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be made nonintersecting through the difference operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area. See also GeometryCorrection, UnionIntersectingPolygons.

source


# GeometryOps.GeometryCorrectionType.
julia
abstract type GeometryCorrection

This abstract type represents a geometry correction.

Interface

Any GeometryCorrection must implement two functions: * application_level(::GeometryCorrection)::AbstractGeometryTrait: This function should return the GeoInterface trait that the correction is intended to be applied to, like PointTrait or LineStringTrait or PolygonTrait. * (::GeometryCorrection)(::AbstractGeometryTrait, geometry)::(some_geometry): This function should apply the correction to the given geometry, and return a new geometry.

source


# GeometryOps.UnionIntersectingPolygonsType.
julia
UnionIntersectingPolygons() <: GeometryCorrection

This correction ensures that the polygon's included in a multipolygon aren't intersecting. If any polygon's are intersecting, they will be combined through the union operation to create a unique set of disjoint (other than potentially connections by a single point) polygons covering the same area.

See also GeometryCorrection.

source



This page was generated using Literate.jl.

+ \ No newline at end of file diff --git a/previews/PR135/source/transformations/correction/intersecting_polygons.html b/previews/PR135/source/transformations/correction/intersecting_polygons.html index 2e2b822c7..a4b6d59ba 100644 --- a/previews/PR135/source/transformations/correction/intersecting_polygons.html +++ b/previews/PR135/source/transformations/correction/intersecting_polygons.html @@ -5,20 +5,20 @@ Intersecting Polygons | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Intersecting Polygons

julia
export UnionIntersectingPolygons

If the sub-polygons of a multipolygon are intersecting, this makes them invalid according to specification. Each sub-polygon of a multipolygon being disjoint (other than by a single point) is a requirment for a valid multipolygon. However, different libraries may achieve this in different ways.

For example, taking the union of all sub-polygons of a multipolygon will create a new multipolygon where each sub-polygon is disjoint. This can be done with the UnionIntersectingPolygons correction.

The reason this operates on a multipolygon level is that it is easy for users to mistakenly create multipolygon's that overlap, which can then be detrimental to polygon clipping performance and even create wrong answers.

Example

Multipolygon providers may not check that the polygons making up their multipolygons do not intersect, which makes them invalid according to the specification.

For example, the following multipolygon is not valid:

julia
import GeoInterface as GI
+    
Skip to content

Intersecting Polygons

julia
export UnionIntersectingPolygons

If the sub-polygons of a multipolygon are intersecting, this makes them invalid according to specification. Each sub-polygon of a multipolygon being disjoint (other than by a single point) is a requirement for a valid multipolygon. However, different libraries may achieve this in different ways.

For example, taking the union of all sub-polygons of a multipolygon will create a new multipolygon where each sub-polygon is disjoint. This can be done with the UnionIntersectingPolygons correction.

The reason this operates on a multipolygon level is that it is easy for users to mistakenly create multipolygon's that overlap, which can then be detrimental to polygon clipping performance and even create wrong answers.

Example

Multipolygon providers may not check that the polygons making up their multipolygons do not intersect, which makes them invalid according to the specification.

For example, the following multipolygon is not valid:

julia
import GeoInterface as GI
 polygon = GI.Polygon([[(0.0, 0.0), (3.0, 0.0), (3.0, 3.0), (0.0, 3.0), (0.0, 0.0)]])
 multipolygon = GI.MultiPolygon([polygon, polygon])
GeoInterface.Wrappers.MultiPolygon{false, false, Vector{GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}[GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}([(0.0, 0.0), (3.0, 0.0), (3.0, 3.0), (0.0, 3.0), (0.0, 0.0)], nothing, nothing)], nothing, nothing), GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}([(0.0, 0.0), (3.0, 0.0), (3.0, 3.0), (0.0, 3.0), (0.0, 0.0)], nothing, nothing)], nothing, nothing)], nothing, nothing)

given that the two sub-polygons are the exact same shape.

julia
import GeometryOps as GO
 GO.fix(multipolygon, corrections = [GO.UnionIntersectingPolygons()])
GeoInterface.Wrappers.MultiPolygon{false, false, Vector{GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}[GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Tuple{Float64, Float64}}, Nothing, Nothing}([(0.0, 0.0), (3.0, 0.0), (3.0, 3.0), (0.0, 3.0), (0.0, 0.0)], nothing, nothing)], nothing, nothing)], nothing, nothing)

You can see that the the multipolygon now only contains one sub-polygon, rather than the two identical ones provided.

Implementation

julia
"""
@@ -37,7 +37,6 @@
 
 function (::UnionIntersectingPolygons)(::GI.MultiPolygonTrait, multipoly)
     union_multipoly = tuples(multipoly)
-    @show union_multipoly
     n_polys = GI.npolygon(multipoly)
     if n_polys > 1
         keep_idx = trues(n_polys)  # keep track of sub-polygons to remove

Combine any sub-polygons that intersect

julia
        for (curr_idx, _) in Iterators.filter(last, Iterators.enumerate(keep_idx))
@@ -116,7 +115,7 @@
     end
     return diff_multipoly
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/transformations/extent.html b/previews/PR135/source/transformations/extent.html index 0951ef1bb..b4da89094 100644 --- a/previews/PR135/source/transformations/extent.html +++ b/previews/PR135/source/transformations/extent.html @@ -5,20 +5,20 @@ Extent embedding | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Extent embedding

julia
"""
+    
Skip to content

Extent embedding

julia
"""
     embed_extent(obj)
 
 Recursively wrap the object with a GeoInterface.jl geometry,
@@ -31,7 +31,7 @@
 """
 embed_extent(x; threaded=false, crs=nothing) =
     apply(identity, GI.PointTrait(), x; calc_extent=true, threaded, crs)

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/transformations/flip.html b/previews/PR135/source/transformations/flip.html index ff0737d0f..d0e1e43c3 100644 --- a/previews/PR135/source/transformations/flip.html +++ b/previews/PR135/source/transformations/flip.html @@ -5,20 +5,20 @@ Coordinate flipping | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Coordinate flipping

This is a simple example of how to use the apply functionality in a function, by flipping the x and y coordinates of a geometry.

julia
"""
+    
Skip to content

Coordinate flipping

This is a simple example of how to use the apply functionality in a function, by flipping the x and y coordinates of a geometry.

julia
"""
     flip(obj)
 
 Swap all of the x and y coordinates in obj, otherwise
@@ -40,7 +40,7 @@
         end
     end
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/transformations/reproject.html b/previews/PR135/source/transformations/reproject.html index 3a5b0bfff..d1da91ef6 100644 --- a/previews/PR135/source/transformations/reproject.html +++ b/previews/PR135/source/transformations/reproject.html @@ -5,20 +5,20 @@ Geometry reprojection | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Geometry reprojection

julia
export reproject

This file is pretty simple - it simply reprojects a geometry pointwise from one CRS to another. It uses the Proj package for the transformation, but this could be moved to an extension if needed.

Note that the actual implementation is in the GeometryOpsProjExt extension module.

This works using the apply functionality.

julia
"""
+    
Skip to content

Geometry reprojection

julia
export reproject

This file is pretty simple - it simply reprojects a geometry pointwise from one CRS to another. It uses the Proj package for the transformation, but this could be moved to an extension if needed.

Note that the actual implementation is in the GeometryOpsProjExt extension module.

This works using the apply functionality.

julia
"""
     reproject(geometry; source_crs, target_crs, transform, always_xy, time)
     reproject(geometry, source_crs, target_crs; always_xy, time)
     reproject(geometry, transform; always_xy, time)
@@ -35,12 +35,12 @@
 # Arguments
 
 - `geometry`: Any GeoInterface.jl compatible geometries.
-- `source_crs`: the source coordinate referece system, as a GeoFormatTypes.jl object or a string.
-- `target_crs`: the target coordinate referece system, as a GeoFormatTypes.jl object or a string.
+- `source_crs`: the source coordinate reference system, as a GeoFormatTypes.jl object or a string.
+- `target_crs`: the target coordinate reference system, as a GeoFormatTypes.jl object or a string.
 
 If these a passed as keywords, `transform` will take priority.
 Without it `target_crs` is always needed, and `source_crs` is
-needed if it is not retreivable from the geometry with `GeoInterface.crs(geometry)`.
+needed if it is not retrievable from the geometry with `GeoInterface.crs(geometry)`.
 
 # Keywords
 
@@ -59,7 +59,7 @@
         nothing
     end
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/transformations/segmentize.html b/previews/PR135/source/transformations/segmentize.html index 73cdde42e..574abc726 100644 --- a/previews/PR135/source/transformations/segmentize.html +++ b/previews/PR135/source/transformations/segmentize.html @@ -5,20 +5,20 @@ Segmentize | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Segmentize

julia
export segmentize
+    
Skip to content

Segmentize

julia
export segmentize
 export LinearSegments, GeodesicSegments

This function "segmentizes" or "densifies" a geometry by adding extra vertices to the geometry so that no segment is longer than a given distance. This is useful for plotting geometries with a limited number of vertices, or for ensuring that a geometry is not too "coarse" for a given application.

Info

We plan to add interpolated segmentization from DataInterpolations.jl in the future, which will be available to any vector of point-like objects.

For now, this function only works on 2D geometries. We will also support 3D geometries, as well as measure interpolation, in the future.

Examples

julia
import GeometryOps as GO, GeoInterface as GI
 rectangle = GI.Wrappers.Polygon([[(0.0, 50.0), (7.071, 57.07), (0, 64.14), (-7.07, 57.07), (0.0, 50.0)]])
 linear = GO.segmentize(rectangle; max_distance = 5)
@@ -39,7 +39,7 @@
 f, a, p = poly(collect(GI.getpoint(linear)); label = "Linear", axis = (; aspect = DataAspect()))
 p2 = poly!(collect(GI.getpoint(geodesic)); label = "Geodesic")
 axislegend(a; position = :lt)
-f

There are two methods available for segmentizing geometries at the moment:

Missing docstring.

Missing docstring for LinearSegments. Check Documenter's build log for details.

Missing docstring.

Missing docstring for GeodesicSegments. Check Documenter's build log for details.

Benchmark

We benchmark our method against LibGEOS's GEOSDensify method, which is a similar method for densifying geometries.

julia
using BenchmarkTools: BenchmarkGroup
+f

There are two methods available for segmentizing geometries at the moment:

Missing docstring.

Missing docstring for LinearSegments. Check Documenter's build log for details.

Missing docstring.

Missing docstring for GeodesicSegments. Check Documenter's build log for details.

Benchmark

We benchmark our method against LibGEOS's GEOSDensify method, which is a similar method for densifying geometries.

julia
using BenchmarkTools: BenchmarkGroup
 using Chairmarks: @be
 using Main: plot_trials
 using CairoMakie
@@ -77,7 +77,7 @@
 
 end
 
-plot_trials(segmentize_suite)

julia
abstract type SegmentizeMethod end
+plot_trials(segmentize_suite)

julia
abstract type SegmentizeMethod end
 """
     LinearSegments(; max_distance::Real)
 
@@ -172,7 +172,7 @@
     end

End the line with the original coordinate, to avoid any multiplication errors.

julia
    push!(new_coords, (x2, y2))
     return nothing
 end

Note

The _fill_linear_kernel definition for GeodesicSegments is in the GeometryOpsProjExt extension module, in the segmentize.jl file.


This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/transformations/simplify.html b/previews/PR135/source/transformations/simplify.html index 5c4bfdc03..81f77fd85 100644 --- a/previews/PR135/source/transformations/simplify.html +++ b/previews/PR135/source/transformations/simplify.html @@ -5,20 +5,20 @@ Geometry simplification | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Geometry simplification

This file holds implementations for the RadialDistance, Douglas-Peucker, and Visvalingam-Whyatt algorithms for simplifying geometries (specifically for polygons and lines).

The GEOS extension also allows for GEOS's topology preserving simplification as well as Douglas-Peucker simplification implemented in GEOS. Call this by passing GEOS(; method = :TopologyPreserve) or GEOS(; method = :DouglasPeucker) to the algorithm.

Examples

A quick and dirty example is:

julia
using Makie, GeoInterfaceMakie
+    
Skip to content

Geometry simplification

This file holds implementations for the RadialDistance, Douglas-Peucker, and Visvalingam-Whyatt algorithms for simplifying geometries (specifically for polygons and lines).

The GEOS extension also allows for GEOS's topology preserving simplification as well as Douglas-Peucker simplification implemented in GEOS. Call this by passing GEOS(; method = :TopologyPreserve) or GEOS(; method = :DouglasPeucker) to the algorithm.

Examples

A quick and dirty example is:

julia
using Makie, GeoInterfaceMakie
 import GeoInterface as GI
 import GeometryOps as GO
 
@@ -29,19 +29,20 @@
 f, a, p = poly(original; label = "Original")
 poly!(simple; label = "Simplified")
 axislegend(a)
-f

Benchmark

We benchmark these methods against LibGEOS's simplify implementation, which uses the Douglas-Peucker algorithm.

julia
using BenchmarkTools, Chairmarks, GeoJSON, CairoMakie
+f

Benchmark

We benchmark these methods against LibGEOS's simplify implementation, which uses the Douglas-Peucker algorithm.

julia
using BenchmarkTools, Chairmarks, GeoJSON, CairoMakie
 import GeometryOps as GO, LibGEOS as LG, GeoInterface as GI
 using CoordinateTransformations
+using NaturalEarth
 lg_and_go(geometry) = (GI.convert(LG, geometry), GO.tuples(geometry))
 # Load in the Natural Earth admin GeoJSON, then extract the USA's geometry
-fc = GeoJSON.read(read(download("https://rawcdn.githack.com/nvkelso/natural-earth-vector/ca96624a56bd078437bca8184e78163e5039ad19/geojson/ne_10m_admin_0_countries.geojson")))
+fc = NaturalEarth.naturalearth("admin_0_countries", 10)
 usa_multipoly = fc.geometry[findfirst(==("United States of America"), fc.NAME)] |> x -> GI.convert(LG, x) |> LG.makeValid |> GO.tuples
 include(joinpath(dirname(dirname(pathof(GO))), "test", "data", "polygon_generation.jl"))
 
 usa_poly = GI.getgeom(usa_multipoly, findmax(GO.area.(GI.getgeom(usa_multipoly)))[2]) # isolate the poly with the most area
 usa_centroid = GO.centroid(usa_poly)
 usa_reflected = GO.transform(Translation(usa_centroid...)  LinearMap(Makie.rotmatrix2d(π))  Translation((-).(usa_centroid)...), usa_poly)
-f, a, p = plot(usa_poly; label = "Original", axis = (; aspect = DataAspect()))#; plot!(usa_reflected; label = "Reflected")

This is the complex polygon we'll be benchmarking.

julia
simplify_suite = BenchmarkGroup(["Simplify"])
+f, a, p = plot(usa_poly; label = "Original", axis = (; aspect = DataAspect()))#; plot!(usa_reflected; label = "Reflected")

This is the complex polygon we'll be benchmarking.

julia
simplify_suite = BenchmarkGroup(["Simplify"])
 singlepoly_suite = BenchmarkGroup(["Polygon", "title:Polygon simplify", "subtitle:Random blob"])
 
 include(joinpath(dirname(dirname(pathof(GO))), "test", "data", "polygon_generation.jl"))
@@ -55,7 +56,7 @@
     singlepoly_suite["LibGEOS"][GI.npoint(geom)] = @be LG.simplify($geom_lg, 0.1) seconds=1
 end
 
-plot_trials(singlepoly_suite; legend_position=(1, 1, TopRight()), legend_valign = -2, legend_halign = 1.2, legend_orientation = :horizontal)

julia
multipoly_suite = BenchmarkGroup(["MultiPolygon", "title:Multipolygon simplify", "subtitle:USA multipolygon"])
+plot_trials(singlepoly_suite; legend_position=(1, 1, TopRight()), legend_valign = -2, legend_halign = 1.2, legend_orientation = :horizontal)

julia
multipoly_suite = BenchmarkGroup(["MultiPolygon", "title:Multipolygon simplify", "subtitle:USA multipolygon"])
 
 for frac in exp10.(LinRange(log10(0.3), log10(1), 6)) # TODO: this example isn't the best.  How can we get this better?
     geom = GO.simplify(usa_multipoly; ratio = frac)
@@ -74,7 +75,7 @@
     # GO-VW : $(GI.npoint( GO.simplify((GO.VisvalingamWhyatt(; tol = _tol)), geom_go)))
     println()
 end
-plot_trials(multipoly_suite)

julia
export simplify, VisvalingamWhyatt, DouglasPeucker, RadialDistance
+plot_trials(multipoly_suite)

julia
export simplify, VisvalingamWhyatt, DouglasPeucker, RadialDistance
 
 const _SIMPLIFY_TARGET = TraitTarget{Union{GI.PolygonTrait, GI.AbstractCurveTrait, GI.MultiPointTrait, GI.PointTrait}}()
 const MIN_POINTS = 3
@@ -115,7 +116,7 @@
 
 `RadialDistance`, `DouglasPeucker`, or
 `VisvalingamWhyatt` algorithms are available,
-listed in order of increasing quality but decreaseing performance.
+listed in order of increasing quality but decreasing performance.
 
 `PoinTrait` and `MultiPointTrait` are returned unchanged.
 
@@ -166,7 +167,7 @@
  ) = _simplify(DouglasPeucker(; kw...), data; prefilter_alg, calc_extent, threaded, crs)
 
 
-#= For each algorithm, apply simplication to all curves, multipoints, and
+#= For each algorithm, apply simplification to all curves, multipoints, and
 points, reconstructing everything else around them. =#
 function _simplify(alg::Union{SimplifyAlg, GEOS}, data; prefilter_alg=nothing, kw...)
     simplifier(geom) = _simplify(GI.trait(geom), alg, geom; prefilter_alg)
@@ -208,7 +209,7 @@
 $SIMPLIFY_ALG_KEYWORDS
 - `tol`: the minimum distance between points.
 
-Note: user input `tol` is squared to avoid uneccesary computation in algorithm.
+Note: user input `tol` is squared to avoid unnecessary computation in algorithm.
 """
 @kwdef struct RadialDistance <: SimplifyAlg
     number::Union{Int64,Nothing} = nothing
@@ -241,7 +242,7 @@
 distance from the line between its neighboring points.
 
 $DOUGLAS_PEUCKER_KEYWORDS
-Note: user input `tol` is squared to avoid uneccesary computation in algorithm.
+Note: user input `tol` is squared to avoid unnecessary computation in algorithm.
 """
 @kwdef struct DouglasPeucker <: SimplifyAlg
     number::Union{Int64,Nothing} = nothing
@@ -258,7 +259,7 @@
 (https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm). =#
 function _simplify(alg::DouglasPeucker, points::Vector, preserve_endpoint)
     npoints = length(points)
-    npoints <= MIN_POINTS && return points

Determine stopping critetia

julia
    max_points = if !isnothing(alg.tol)
+    npoints <= MIN_POINTS && return points

Determine stopping criteria

julia
    max_points = if !isnothing(alg.tol)
         npoints
     else
         npts = !isnothing(alg.number) ? alg.number : max(3, round(Int, alg.ratio * npoints))
@@ -324,7 +325,7 @@
 end
 
 #= find maximum distance of any point between the start_idx and end_idx to the line formed
-by conencting the points at start_idx and end_idx. Note that the first index of maximum
+by connecting the points at start_idx and end_idx. Note that the first index of maximum
 value will be used, which might cause differences in results from other algorithms.=#
 function _find_max_squared_dist(points, start_idx, end_idx)
     max_idx = start_idx
@@ -348,7 +349,7 @@
 $SIMPLIFY_ALG_KEYWORDS
 - `tol`: the minimum area of a triangle made with a point and
     its neighboring points.
-Note: user input `tol` is doubled to avoid uneccesary computation in algorithm.
+Note: user input `tol` is doubled to avoid unnecessary computation in algorithm.
 """
 @kwdef struct VisvalingamWhyatt <: SimplifyAlg
     number::Union{Int,Nothing} = nothing
@@ -507,7 +508,7 @@
     end
     return nothing
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/transformations/transform.html b/previews/PR135/source/transformations/transform.html index b51057f21..573792ac7 100644 --- a/previews/PR135/source/transformations/transform.html +++ b/previews/PR135/source/transformations/transform.html @@ -5,20 +5,20 @@ Pointwise transformation | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Pointwise transformation

julia
"""
+    
Skip to content

Pointwise transformation

julia
"""
     transform(f, obj)
 
 Apply a function `f` to all the points in `obj`.
@@ -49,7 +49,7 @@
 rraysCore.SVector{2, Float64}[[6.5, 5.5], [8.5, 7.5], [9.5, 8.5], [6.5, 5.5]], nothing, nothing)], nothing, nothing)
 ```
 
-With Rotations.jl you need to actuall multiply the Rotation
+With Rotations.jl you need to actually multiply the Rotation
 by the `SVector` point, which is easy using an anonymous function.
 
 ```julia
@@ -73,7 +73,7 @@
         end
     end
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/transformations/tuples.html b/previews/PR135/source/transformations/tuples.html index 6034b991a..fc8f2e964 100644 --- a/previews/PR135/source/transformations/tuples.html +++ b/previews/PR135/source/transformations/tuples.html @@ -5,20 +5,20 @@ Tuple conversion | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Tuple conversion

julia
"""
+    
Skip to content

Tuple conversion

julia
"""
     tuples(obj)
 
 Convert all points in `obj` to `Tuple`s, wherever the are nested.
@@ -37,7 +37,7 @@
         end
     end
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/types.html b/previews/PR135/source/types.html index 4702c0feb..5ece51d46 100644 --- a/previews/PR135/source/types.html +++ b/previews/PR135/source/types.html @@ -5,20 +5,20 @@ Types | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Types

This file defines some fundamental types used in GeometryOps.

Warning

Unlike in other Julia packages, only some types are defined in this file, not all. This is because we define types in the files where they are used, to make it easier to understand the code.

julia
export TraitTarget, GEOS

TraitTarget

This struct holds a trait parameter or a union of trait parameters. It's essentially a way to construct unions.

julia
"""
+    
Skip to content

Types

This file defines some fundamental types used in GeometryOps.

Warning

Unlike in other Julia packages, only some types are defined in this file, not all. This is because we define types in the files where they are used, to make it easier to understand the code.

julia
export TraitTarget, GEOS

TraitTarget

This struct holds a trait parameter or a union of trait parameters. It's essentially a way to construct unions.

julia
"""
     TraitTarget{T}
 
 This struct holds a trait parameter or a union of trait parameters.
@@ -85,7 +85,7 @@
         error("$(f) requires a `$(kw)` keyword argument to the `GEOS` algorithm, which was not provided.")
     end
 end

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/source/utils.html b/previews/PR135/source/utils.html index d4161fbfb..57b63ee1f 100644 --- a/previews/PR135/source/utils.html +++ b/previews/PR135/source/utils.html @@ -5,20 +5,20 @@ Utility functions | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Utility functions

julia
_is3d(geom)::Bool = _is3d(GI.trait(geom), geom)
+    
Skip to content

Utility functions

julia
_is3d(geom)::Bool = _is3d(GI.trait(geom), geom)
 _is3d(::GI.AbstractGeometryTrait, geom)::Bool = GI.is3d(geom)
 _is3d(::GI.FeatureTrait, feature)::Bool = _is3d(GI.geometry(feature))
 _is3d(::GI.FeatureCollectionTrait, fc)::Bool = _is3d(GI.getfeature(fc, 1))
@@ -141,7 +141,7 @@
 
 _linearring(geom::GI.LineString) = GI.LinearRing(parent(geom); extent=geom.extent, crs=geom.crs)
 _linearring(geom::GI.LinearRing) = geom

This page was generated using Literate.jl.

- + \ No newline at end of file diff --git a/previews/PR135/tutorials/creating_geometry.html b/previews/PR135/tutorials/creating_geometry.html index 49a2a8178..ba3828750 100644 --- a/previews/PR135/tutorials/creating_geometry.html +++ b/previews/PR135/tutorials/creating_geometry.html @@ -5,20 +5,20 @@ Creating Geometry | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Creating Geometry

In this tutorial, we're going to:

  1. Create and plot geometries

  2. Plot geometries on a map using GeoMakie and coordinate reference system (CRS)

  3. Create geospatial geometries with embedded coordinate reference system information

  4. Assign attributes to geospatial geometries

  5. Save geospatial geometries to common geospatial file formats

First, we load some required packages.

julia
# Geospatial packages from Julia
+    
Skip to content

Creating Geometry

In this tutorial, we're going to:

  1. Create and plot geometries

  2. Plot geometries on a map using GeoMakie and coordinate reference system (CRS)

  3. Create geospatial geometries with embedded coordinate reference system information

  4. Assign attributes to geospatial geometries

  5. Save geospatial geometries to common geospatial file formats

First, we load some required packages.

julia
# Geospatial packages from Julia
 import GeoInterface as GI
 import GeometryOps as GO
 import GeoFormatTypes as GFT
@@ -28,37 +28,37 @@
 import Proj
 # Plotting
 using CairoMakie
-using GeoMakie

Creating and plotting geometries

Let's start by making a single Point.

julia
point = GI.Point(0, 0)
GeoInterface.Wrappers.Point{false, false, Tuple{Int64, Int64}, Nothing}((0, 0), nothing)

Now, let's plot our point.

julia
fig, ax, plt = plot(point)

Let's create a set of points, and have a bit more fun with plotting.

julia
x = [-5, 0, 5, 0];
+using GeoMakie

Creating and plotting geometries

Let's start by making a single Point.

julia
point = GI.Point(0, 0)
GeoInterface.Wrappers.Point{false, false, Tuple{Int64, Int64}, Nothing}((0, 0), nothing)

Now, let's plot our point.

julia
fig, ax, plt = plot(point)

Let's create a set of points, and have a bit more fun with plotting.

julia
x = [-5, 0, 5, 0];
 y = [0, -5, 0, 5];
 points = GI.Point.(zip(x,y));
 plot!(ax, points; marker = '✈', markersize = 30)
-fig

Points can be combined into a single MultiPoint geometry.

julia
x = [-5, -5, 5, 5];
+fig

Points can be combined into a single MultiPoint geometry.

julia
x = [-5, -5, 5, 5];
 y = [-5, 5, 5, -5];
 multipoint = GI.MultiPoint(GI.Point.(zip(x, y)));
 plot!(ax, multipoint; marker = '☁', markersize = 30)
-fig

Let's create a LineString connecting two points.

julia
p1 = GI.Point.(-5, 0);
+fig

Let's create a LineString connecting two points.

julia
p1 = GI.Point.(-5, 0);
 p2 = GI.Point.(5, 0);
 line = GI.LineString([p1,p2])
 plot!(ax, line; color = :red)
-fig

Now, let's create a line connecting multiple points (i.e. a LineString). This time we get a bit more fancy with point creation.

julia
r = 2;
+fig

Now, let's create a line connecting multiple points (i.e. a LineString). This time we get a bit more fancy with point creation.

julia
r = 2;
 k = 10;
 ϴ = 0:0.01:2pi;
 x = r .* (k + 1) .* cos.(ϴ) .- r .* cos.((k + 1) .* ϴ);
 y = r .* (k + 1) .* sin.(ϴ) .- r .* sin.((k + 1) .* ϴ);
 lines = GI.LineString(GI.Point.(zip(x,y)));
 plot!(ax, lines; linewidth = 5)
-fig

We can also create a single LinearRing trait, the building block of a polygon. A LinearRing is simply a LineString with the same beginning and endpoint, i.e., an arbitrary closed shape composed of point pairs.

A LinearRing is composed of a series of points.

julia
ring1 = GI.LinearRing(GI.getpoint(lines));
GeoInterface.Wrappers.LinearRing{false, false, Vector{GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}[GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.0, 0.0), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.010987813253244, 0.0004397316773170068), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.043805248003498, 0.0035114210915891397), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.098016055420953, 0.011814947665167774), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.172899020101585, 0.027886421973952302), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.267456684570245, 0.05416726609360478), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.380427415579764, 0.09297443860091348), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.51030066635026, 0.1464721641710074), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.655335250260467, 0.21664550952386064), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.813580405100698, 0.30527612515520186), nothing)  …  GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.866418416586406, -0.3376428491230612), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.704405820024185, -0.24279488312757858), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.55494217175954, -0.16692537029320365), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.420040147662014, -0.10832215707812454), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.30151010318639, -0.0650624499034016), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.200938172182195, -0.03503632062070827), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.119667078681967, -0.01597247419241532), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.058779893613323, -0.005465967083412071), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.019086932781654, -0.0010075412835199304), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.001115954499138, -1.4219350464667047e-5), nothing)], nothing, nothing)

Now, let's make the LinearRing into a Polygon.

julia
polygon1 = GI.Polygon([ring1]);
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}[GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.0, 0.0), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.010987813253244, 0.0004397316773170068), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.043805248003498, 0.0035114210915891397), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.098016055420953, 0.011814947665167774), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.172899020101585, 0.027886421973952302), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.267456684570245, 0.05416726609360478), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.380427415579764, 0.09297443860091348), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.51030066635026, 0.1464721641710074), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.655335250260467, 0.21664550952386064), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.813580405100698, 0.30527612515520186), nothing)  …  GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.866418416586406, -0.3376428491230612), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.704405820024185, -0.24279488312757858), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.55494217175954, -0.16692537029320365), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.420040147662014, -0.10832215707812454), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.30151010318639, -0.0650624499034016), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.200938172182195, -0.03503632062070827), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.119667078681967, -0.01597247419241532), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.058779893613323, -0.005465967083412071), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.019086932781654, -0.0010075412835199304), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.001115954499138, -1.4219350464667047e-5), nothing)], nothing, nothing)], nothing, nothing)

Now, we can use GeometryOps and CoordinateTransformations to shift polygon1 up, to avoid plotting over our earlier results. This is done through the GeometryOps.transform function.

julia
xoffset = 0.;
+fig

We can also create a single LinearRing trait, the building block of a polygon. A LinearRing is simply a LineString with the same beginning and endpoint, i.e., an arbitrary closed shape composed of point pairs.

A LinearRing is composed of a series of points.

julia
ring1 = GI.LinearRing(GI.getpoint(lines));
GeoInterface.Wrappers.LinearRing{false, false, Vector{GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}[GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.0, 0.0), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.010987813253244, 0.0004397316773170068), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.043805248003498, 0.0035114210915891397), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.098016055420953, 0.011814947665167774), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.172899020101585, 0.027886421973952302), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.267456684570245, 0.05416726609360478), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.380427415579764, 0.09297443860091348), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.51030066635026, 0.1464721641710074), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.655335250260467, 0.21664550952386064), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.813580405100698, 0.30527612515520186), nothing)  …  GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.866418416586406, -0.3376428491230612), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.704405820024185, -0.24279488312757858), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.55494217175954, -0.16692537029320365), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.420040147662014, -0.10832215707812454), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.30151010318639, -0.0650624499034016), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.200938172182195, -0.03503632062070827), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.119667078681967, -0.01597247419241532), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.058779893613323, -0.005465967083412071), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.019086932781654, -0.0010075412835199304), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.001115954499138, -1.4219350464667047e-5), nothing)], nothing, nothing)

Now, let's make the LinearRing into a Polygon.

julia
polygon1 = GI.Polygon([ring1]);
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}[GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.0, 0.0), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.010987813253244, 0.0004397316773170068), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.043805248003498, 0.0035114210915891397), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.098016055420953, 0.011814947665167774), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.172899020101585, 0.027886421973952302), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.267456684570245, 0.05416726609360478), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.380427415579764, 0.09297443860091348), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.51030066635026, 0.1464721641710074), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.655335250260467, 0.21664550952386064), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.813580405100698, 0.30527612515520186), nothing)  …  GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.866418416586406, -0.3376428491230612), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.704405820024185, -0.24279488312757858), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.55494217175954, -0.16692537029320365), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.420040147662014, -0.10832215707812454), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.30151010318639, -0.0650624499034016), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.200938172182195, -0.03503632062070827), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.119667078681967, -0.01597247419241532), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.058779893613323, -0.005465967083412071), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.019086932781654, -0.0010075412835199304), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.001115954499138, -1.4219350464667047e-5), nothing)], nothing, nothing)], nothing, nothing)

Now, we can use GeometryOps and CoordinateTransformations to shift polygon1 up, to avoid plotting over our earlier results. This is done through the GeometryOps.transform function.

julia
xoffset = 0.;
 yoffset = 50.;
 f = CoordinateTransformations.Translation(xoffset, yoffset);
 polygon1 = GO.transform(f, polygon1);
 plot!(polygon1)
-fig

Polygons can contain "holes". The first LinearRing in a polygon is the exterior, and all subsequent LinearRings are treated as holes in the leading LinearRing.

GeoInterface offers the GI.getexterior(poly) and GI.gethole(poly) methods to get the exterior ring and an iterable of holes, respectively.

julia
hole = GI.LinearRing(GI.getpoint(multipoint))
+fig

Polygons can contain "holes". The first LinearRing in a polygon is the exterior, and all subsequent LinearRings are treated as holes in the leading LinearRing.

GeoInterface offers the GI.getexterior(poly) and GI.gethole(poly) methods to get the exterior ring and an iterable of holes, respectively.

julia
hole = GI.LinearRing(GI.getpoint(multipoint))
 polygon2 = GI.Polygon([ring1, hole])
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, T, Nothing, Nothing} where T}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, T, Nothing, Nothing} where T[GeoInterface.Wrappers.LinearRing{false, false, Vector{GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}[GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.0, 0.0), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.010987813253244, 0.0004397316773170068), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.043805248003498, 0.0035114210915891397), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.098016055420953, 0.011814947665167774), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.172899020101585, 0.027886421973952302), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.267456684570245, 0.05416726609360478), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.380427415579764, 0.09297443860091348), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.51030066635026, 0.1464721641710074), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.655335250260467, 0.21664550952386064), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.813580405100698, 0.30527612515520186), nothing)  …  GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.866418416586406, -0.3376428491230612), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.704405820024185, -0.24279488312757858), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.55494217175954, -0.16692537029320365), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.420040147662014, -0.10832215707812454), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.30151010318639, -0.0650624499034016), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.200938172182195, -0.03503632062070827), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.119667078681967, -0.01597247419241532), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.058779893613323, -0.005465967083412071), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.019086932781654, -0.0010075412835199304), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Float64, Float64}, Nothing}((20.001115954499138, -1.4219350464667047e-5), nothing)], nothing, nothing), GeoInterface.Wrappers.LinearRing{false, false, Vector{GeoInterface.Wrappers.Point{false, false, Tuple{Int64, Int64}, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.Point{false, false, Tuple{Int64, Int64}, Nothing}[GeoInterface.Wrappers.Point{false, false, Tuple{Int64, Int64}, Nothing}((-5, -5), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Int64, Int64}, Nothing}((-5, 5), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Int64, Int64}, Nothing}((5, 5), nothing), GeoInterface.Wrappers.Point{false, false, Tuple{Int64, Int64}, Nothing}((5, -5), nothing)], nothing, nothing)], nothing, nothing)

Shift polygon2 to the right, to avoid plotting over our earlier results.

julia
xoffset = 50.;
 yoffset = 0.;
 f = CoordinateTransformations.Translation(xoffset, yoffset);
 polygon2 = GO.transform(f, polygon2);
 plot!(polygon2)
-fig

Polygons can also be grouped together as a MultiPolygon.

julia
r = 5;
+fig

Polygons can also be grouped together as a MultiPolygon.

julia
r = 5;
 x = cos.(reverse(ϴ)) .* r .+ xoffset;
 y = sin.(reverse(ϴ)) .* r .+ yoffset;
 ring2 =  GI.LinearRing(GI.Point.(zip(x,y)));
@@ -68,7 +68,7 @@
 f = CoordinateTransformations.Translation(xoffset, yoffset);
 multipolygon = GO.transform(f, multipolygon);
 plot!(multipolygon)
-fig

Great, now we can make Points, MultiPoints, Lines, LineStrings, Polygons (with holes), and MultiPolygons and modify them using [CoordinateTransformations] and [GeometryOps].

Plot geometries on a map using GeoMakie and coordinate reference system (CRS)

In geospatial sciences we often have data in one Coordinate Reference System (CRS) (source) and would like to display it in different (destination) CRS. GeoMakie allows us to do this by automatically projecting from source to destination CRS.

Here, our source CRS is common geographic (i.e. coordinates of latitude and longitude), WGS84.

julia
source_crs1 = GFT.EPSG(4326)
GeoFormatTypes.EPSG{1}((4326,))

Now let's pick a destination CRS for displaying our map. Here we'll pick natearth2.

julia
destination_crs = "+proj=natearth2"
"+proj=natearth2"

Let's add land area for context. First, download and open the Natural Earth global land polygons at 110 m resolution.GeoMakie ships with this particular dataset, so we will access it from there.

julia
land_path = GeoMakie.assetpath("ne_110m_land.geojson")
"/home/runner/.julia/packages/GeoMakie/nOel0/assets/ne_110m_land.geojson"

Note

Natural Earth has lots of other datasets, and there is a Julia package that provides an interface to it called NaturalEarth.jl.

Read the land MultiPolygons as a GeoJSON.FeatureCollection.

julia
land_geo = GeoJSON.read(land_path)
FeatureCollection with 127 Features

We then need to create a figure with a GeoAxis that can handle the projection between source and destinaton CRS. For GeoMakie, source is the CRS of the input and dest is the CRS you want to visualize in.

julia
fig = Figure(size=(1000, 500));
+fig

Great, now we can make Points, MultiPoints, Lines, LineStrings, Polygons (with holes), and MultiPolygons and modify them using [CoordinateTransformations] and [GeometryOps].

Plot geometries on a map using GeoMakie and coordinate reference system (CRS)

In geospatial sciences we often have data in one Coordinate Reference System (CRS) (source) and would like to display it in different (destination) CRS. GeoMakie allows us to do this by automatically projecting from source to destination CRS.

Here, our source CRS is common geographic (i.e. coordinates of latitude and longitude), WGS84.

julia
source_crs1 = GFT.EPSG(4326)
GeoFormatTypes.EPSG{1}((4326,))

Now let's pick a destination CRS for displaying our map. Here we'll pick natearth2.

julia
destination_crs = "+proj=natearth2"
"+proj=natearth2"

Let's add land area for context. First, download and open the Natural Earth global land polygons at 110 m resolution.GeoMakie ships with this particular dataset, so we will access it from there.

julia
land_path = GeoMakie.assetpath("ne_110m_land.geojson")
"/home/runner/.julia/packages/GeoMakie/2upVC/assets/ne_110m_land.geojson"

Note

Natural Earth has lots of other datasets, and there is a Julia package that provides an interface to it called NaturalEarth.jl.

Read the land MultiPolygons as a GeoJSON.FeatureCollection.

julia
land_geo = GeoJSON.read(land_path)
FeatureCollection with 127 Features

We then need to create a figure with a GeoAxis that can handle the projection between source and destination CRS. For GeoMakie, source is the CRS of the input and dest is the CRS you want to visualize in.

julia
fig = Figure(size=(1000, 500));
 ga = GeoAxis(
     fig[1, 1];
     source = source_crs1,
@@ -76,8 +76,8 @@
     xticklabelsvisible = false,
     yticklabelsvisible = false,
 );

Plot land for context.

julia
poly!(ga, land_geo, color=:black)
-fig

Now let's plot a Polygon like before, but this time with a CRS that differs from our source data

julia
plot!(multipolygon; color = :green)
-fig

But what if we want to plot geometries with a different source CRS on the same figure?

To show how to do this let's create a geometry with coordinates in UTM (Universal Transverse Mercator) zone 10N EPSG:32610.

julia
source_crs2 = GFT.EPSG(32610)
GeoFormatTypes.EPSG{1}((32610,))

Create a polygon (we're working in meters now, not latitude and longitude)

julia
r = 1000000;
+fig

Now let's plot a Polygon like before, but this time with a CRS that differs from our source data

julia
plot!(multipolygon; color = :green)
+fig

But what if we want to plot geometries with a different source CRS on the same figure?

To show how to do this let's create a geometry with coordinates in UTM (Universal Transverse Mercator) zone 10N EPSG:32610.

julia
source_crs2 = GFT.EPSG(32610)
GeoFormatTypes.EPSG{1}((32610,))

Create a polygon (we're working in meters now, not latitude and longitude)

julia
r = 1000000;
 ϴ = 0:0.01:2pi;
 x = r .* cos.(ϴ).^3 .+ 500000;
 y = r .* sin.(ϴ) .^ 3 .+5000000;
629-element Vector{Float64}:
@@ -87,12 +87,12 @@
 
  5.0e6
  5.0e6

Now create a LinearRing from Points

julia
ring3 = GI.LinearRing(Point.(zip(x, y)))
GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}(Point{2, Float64}[[1.5e6, 5.0e6], [1.4998500087497458e6, 5.000000999950001e6], [1.4994001399837343e6, 5.000007998400139e6], [1.4986507085647392e6, 5.000026987852369e6], [1.4976022389592e6, 5.000063948817746e6], [1.4962554647802354e6, 5.000124843834609e6], [1.4946113281484335e6, 5.000215611503127e6], [1.4926709788709967e6, 5.000342160541625e6], [1.4904357734399722e6, 5.000510363870095e6], [1.4879072738504685e6, 5.0007260527263e6]  …  [1.4870405593989636e6, 4.999194331880103e6], [1.4896621210021754e6, 4.999426363321033e6], [1.491990928929295e6, 4.999609061508909e6], [1.4940253560034204e6, 4.999748243174828e6], [1.4957639801366436e6, 4.999849768598615e6], [1.497205585568957e6, 4.999919535736425e6], [1.4983491639274692e6, 4.999963474314044e6], [1.4991939151049731e6, 4.999987539891298e6], [1.4997392479570867e6, 4.999997707902938e6], [1.499984780817334e6, 4.999999967681458e6]], nothing, nothing)

Now create a Polygon from the LineRing

julia
polygon3 = GI.Polygon([ring3])
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}}, Nothing, Nothing}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}(Point{2, Float64}[[1.5e6, 5.0e6], [1.4998500087497458e6, 5.000000999950001e6], [1.4994001399837343e6, 5.000007998400139e6], [1.4986507085647392e6, 5.000026987852369e6], [1.4976022389592e6, 5.000063948817746e6], [1.4962554647802354e6, 5.000124843834609e6], [1.4946113281484335e6, 5.000215611503127e6], [1.4926709788709967e6, 5.000342160541625e6], [1.4904357734399722e6, 5.000510363870095e6], [1.4879072738504685e6, 5.0007260527263e6]  …  [1.4870405593989636e6, 4.999194331880103e6], [1.4896621210021754e6, 4.999426363321033e6], [1.491990928929295e6, 4.999609061508909e6], [1.4940253560034204e6, 4.999748243174828e6], [1.4957639801366436e6, 4.999849768598615e6], [1.497205585568957e6, 4.999919535736425e6], [1.4983491639274692e6, 4.999963474314044e6], [1.4991939151049731e6, 4.999987539891298e6], [1.4997392479570867e6, 4.999997707902938e6], [1.499984780817334e6, 4.999999967681458e6]], nothing, nothing)], nothing, nothing)

Now plot on the existing GeoAxis.

Note

The keyword argument source is used to specify the source CRS of that particular plot, when plotting on an existing GeoAxis.

julia
plot!(ga,polygon3; color=:red, source = source_crs2)
-fig

Create geospatial geometries with embedded coordinate reference system information

Great, we can make geometries and plot them on a map... now let's export the data to common geospatial data formats. To do this we now need to create geometries with embedded CRS information, making it a geospatial geometry. All that's needed is to include ; crs = crs as a keyword argument when constructing the geometry.

Let's do this for a new Polygon

julia
r = 3;
+fig

Create geospatial geometries with embedded coordinate reference system information

Great, we can make geometries and plot them on a map... now let's export the data to common geospatial data formats. To do this we now need to create geometries with embedded CRS information, making it a geospatial geometry. All that's needed is to include ; crs = crs as a keyword argument when constructing the geometry.

Let's do this for a new Polygon

julia
r = 3;
 k = 7;
 ϴ = 0:0.01:2pi;
 x = r .* (k + 1) .* cos.(ϴ) .- r .* cos.((k + 1) .* ϴ);
 y = r .* (k + 1) .* sin.(ϴ) .- r .* sin.((k + 1) .* ϴ);
-ring4 = GI.LinearRing(Point.(zip(x, y)))
GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}(Point{2, Float64}[[21.0, 0.0], [21.00839489109211, 0.00025191811248184703], [21.033518309870985, 0.0020133807972559925], [21.075186885419612, 0.006784125578492062], [21.13309630561615, 0.016044338630866517], [21.206823267470536, 0.031245035570328428], [21.29582819010705, 0.053798628882221644], [21.39945867303846, 0.08506974233813636], [21.516953677609987, 0.12636633117296836], [21.64744840486518, 0.17893116483784577]  …  [21.69159119078359, -0.19823293781563178], [21.557153362189904, -0.14182952335952814], [21.43541888381864, -0.09707519809793252], [21.327284472232776, -0.06274967861547665], [21.233544778745394, -0.03756486776283019], [21.15488729606723, -0.020173244847778715], [21.091887951911644, -0.0091766360295773], [21.045007417743918, -0.0031353088009582475], [21.01458815628695, -0.0005773323690041465], [21.00085222666982, -8.14404531208901e-6]], nothing, nothing)

But this time when we create the Polygon we beed to specify the CRS at the time of creation, making it a geospatial polygon

julia
geopoly1 = GI.Polygon([ring4], crs = source_crs1)
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}}, Nothing, GeoFormatTypes.EPSG{1}}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}(Point{2, Float64}[[21.0, 0.0], [21.00839489109211, 0.00025191811248184703], [21.033518309870985, 0.0020133807972559925], [21.075186885419612, 0.006784125578492062], [21.13309630561615, 0.016044338630866517], [21.206823267470536, 0.031245035570328428], [21.29582819010705, 0.053798628882221644], [21.39945867303846, 0.08506974233813636], [21.516953677609987, 0.12636633117296836], [21.64744840486518, 0.17893116483784577]  …  [21.69159119078359, -0.19823293781563178], [21.557153362189904, -0.14182952335952814], [21.43541888381864, -0.09707519809793252], [21.327284472232776, -0.06274967861547665], [21.233544778745394, -0.03756486776283019], [21.15488729606723, -0.020173244847778715], [21.091887951911644, -0.0091766360295773], [21.045007417743918, -0.0031353088009582475], [21.01458815628695, -0.0005773323690041465], [21.00085222666982, -8.14404531208901e-6]], nothing, nothing)], nothing, GeoFormatTypes.EPSG{1}((4326,)))

Note

It is good practice to only include CRS information with the highest-level geometry. Not doing so can bloat the memory footprint of the geometry. CRS information can be included at the individual Point level but is discouraged.

And let's create second Polygon by shifting the first using CoordinateTransformations

julia
xoffset = 20.;
+ring4 = GI.LinearRing(Point.(zip(x, y)))
GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}(Point{2, Float64}[[21.0, 0.0], [21.00839489109211, 0.00025191811248184703], [21.033518309870985, 0.0020133807972559925], [21.075186885419612, 0.006784125578492062], [21.13309630561615, 0.016044338630866517], [21.206823267470536, 0.031245035570328428], [21.29582819010705, 0.053798628882221644], [21.39945867303846, 0.08506974233813636], [21.516953677609987, 0.12636633117296836], [21.64744840486518, 0.17893116483784577]  …  [21.69159119078359, -0.19823293781563178], [21.557153362189904, -0.14182952335952814], [21.43541888381864, -0.09707519809793252], [21.327284472232776, -0.06274967861547665], [21.233544778745394, -0.03756486776283019], [21.15488729606723, -0.020173244847778715], [21.091887951911644, -0.0091766360295773], [21.045007417743918, -0.0031353088009582475], [21.01458815628695, -0.0005773323690041465], [21.00085222666982, -8.14404531208901e-6]], nothing, nothing)

But this time when we create the Polygon we need to specify the CRS at the time of creation, making it a geospatial polygon

julia
geopoly1 = GI.Polygon([ring4], crs = source_crs1)
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}}, Nothing, GeoFormatTypes.EPSG{1}}(GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}[GeoInterface.Wrappers.LinearRing{false, false, Vector{Point{2, Float64}}, Nothing, Nothing}(Point{2, Float64}[[21.0, 0.0], [21.00839489109211, 0.00025191811248184703], [21.033518309870985, 0.0020133807972559925], [21.075186885419612, 0.006784125578492062], [21.13309630561615, 0.016044338630866517], [21.206823267470536, 0.031245035570328428], [21.29582819010705, 0.053798628882221644], [21.39945867303846, 0.08506974233813636], [21.516953677609987, 0.12636633117296836], [21.64744840486518, 0.17893116483784577]  …  [21.69159119078359, -0.19823293781563178], [21.557153362189904, -0.14182952335952814], [21.43541888381864, -0.09707519809793252], [21.327284472232776, -0.06274967861547665], [21.233544778745394, -0.03756486776283019], [21.15488729606723, -0.020173244847778715], [21.091887951911644, -0.0091766360295773], [21.045007417743918, -0.0031353088009582475], [21.01458815628695, -0.0005773323690041465], [21.00085222666982, -8.14404531208901e-6]], nothing, nothing)], nothing, GeoFormatTypes.EPSG{1}((4326,)))

Note

It is good practice to only include CRS information with the highest-level geometry. Not doing so can bloat the memory footprint of the geometry. CRS information can be included at the individual Point level but is discouraged.

And let's create second Polygon by shifting the first using CoordinateTransformations

julia
xoffset = 20.;
 yoffset = -25.;
 f = CoordinateTransformations.Translation(xoffset, yoffset);
 geopoly2 = GO.transform(f, geopoly1);
GeoInterface.Wrappers.Polygon{false, false, Vector{GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, GeoFormatTypes.EPSG{1}}}, Nothing, GeoFormatTypes.EPSG{1}}(GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, GeoFormatTypes.EPSG{1}}[GeoInterface.Wrappers.LinearRing{false, false, Vector{StaticArraysCore.SVector{2, Float64}}, Nothing, GeoFormatTypes.EPSG{1}}(StaticArraysCore.SVector{2, Float64}[[41.0, -25.0], [41.00839489109211, -24.999748081887518], [41.033518309870985, -24.997986619202745], [41.07518688541961, -24.99321587442151], [41.13309630561615, -24.983955661369134], [41.20682326747054, -24.96875496442967], [41.295828190107045, -24.946201371117777], [41.39945867303846, -24.914930257661865], [41.51695367760999, -24.873633668827033], [41.64744840486518, -24.821068835162155]  …  [41.69159119078359, -25.198232937815632], [41.55715336218991, -25.14182952335953], [41.43541888381864, -25.097075198097933], [41.327284472232776, -25.062749678615475], [41.2335447787454, -25.037564867762832], [41.15488729606723, -25.02017324484778], [41.091887951911644, -25.009176636029576], [41.04500741774392, -25.003135308800957], [41.01458815628695, -25.000577332369005], [41.00085222666982, -25.000008144045314]], nothing, GeoFormatTypes.EPSG{1}((4326,)))], nothing, GeoFormatTypes.EPSG{1}((4326,)))

Creating a table with attributes and geometry

Typically, you'll also want to include attributes with your geometries. Attributes are simply data that are attributed to each geometry. The easiest way to do this is to create a table with a :geometry column. Let's do this using DataFrames.

julia
using DataFrames
@@ -107,7 +107,7 @@
 GeoParquet.write(fn, df, (:geometry,))
"shapes.parquet"

Finally, if there's no Julia-native package that can write data to your desired format (e.g. .gpkg, .gml, etc), you can use GeoDataFrames. This package uses the GDAL library under the hood which supports writing to nearly all geospatial formats.

julia
import GeoDataFrames
 fn = "shapes.gpkg"
 GeoDataFrames.write(fn, df)
"shapes.gpkg"

And there we go, you can now create mapped geometries from scratch, manipulate them, plot them on a map, and save them in multiple geospatial data formats.

- + \ No newline at end of file diff --git a/previews/PR135/tutorials/geodesic_paths.html b/previews/PR135/tutorials/geodesic_paths.html new file mode 100644 index 000000000..aceee8a9f --- /dev/null +++ b/previews/PR135/tutorials/geodesic_paths.html @@ -0,0 +1,35 @@ + + + + + + Geodesic paths | GeometryOps.jl + + + + + + + + + + + + + + +
Skip to content

Geodesic paths

Geodesic paths are paths computed on an ellipsoid, as opposed to a plane.

julia
import GeometryOps as GO, GeoInterface as GI
+using CairoMakie, GeoMakie
+
+
+IAH = (-95.358421, 29.749907)
+AMS = (4.897070, 52.377956)
+
+
+fig, ga, _cp = lines(GeoMakie.coastlines(); axis = (; type = GeoAxis))
+lines!(ga, GO.segmentize(GO.GeodesicSegments(; max_distance = 100_000), GI.LineString([IAH, AMS])); color = Makie.wong_colors()[2])
+fig

+ + + + \ No newline at end of file diff --git a/previews/PR135/tutorials/spatial_joins.html b/previews/PR135/tutorials/spatial_joins.html index 57296cdef..cc9b484f0 100644 --- a/previews/PR135/tutorials/spatial_joins.html +++ b/previews/PR135/tutorials/spatial_joins.html @@ -5,20 +5,20 @@ Spatial joins | GeometryOps.jl - - + + - + - - - + + + -
Skip to content

Spatial joins

Spatial joins are table joins which are based not on equality, but on some predicate p(x,y), which takes two geometries, and returns a value of either true or false. For geometries, the DE-9IM spatial relationship model is used to determine the spatial relationship between two geometries.

Spatial joins can be done between any geometry types (from geometrycollections to points), just as geometrical predicates can be evaluated on any geometries.

In this tutorial, we will show how to perform a spatial join on first a toy dataset and then two Natural Earth datasets, to show how this can be used in the real world.

In order to perform the spatial join, we use FlexiJoins.jl to perform the join, specifically using its by_pred joining method. This allows the user to specify a predicate in the following manner:

julia
[inner/left/right/outer/...]join((table1, table1),
+    
Skip to content

Spatial joins

Spatial joins are table joins which are based not on equality, but on some predicate p(x,y), which takes two geometries, and returns a value of either true or false. For geometries, the DE-9IM spatial relationship model is used to determine the spatial relationship between two geometries.

Spatial joins can be done between any geometry types (from geometrycollections to points), just as geometrical predicates can be evaluated on any geometries.

In this tutorial, we will show how to perform a spatial join on first a toy dataset and then two Natural Earth datasets, to show how this can be used in the real world.

In order to perform the spatial join, we use FlexiJoins.jl to perform the join, specifically using its by_pred joining method. This allows the user to specify a predicate in the following manner:

julia
[inner/left/right/outer/...]join((table1, table1),
     by_pred(:table1_column, predicate_function, :table2_column) # & add other conditions here
 )

We have enabled the use of all of GeometryOps' boolean comparisons here. These are:

julia
GO.contains, GO.within, GO.intersects, GO.touches, GO.crosses, GO.disjoint, GO.overlaps, GO.covers, GO.coveredby, GO.equals

Tip

Always place the dataframe with more complex geometries second, as that is the one which will be sorted into a tree.

Simple example

This example demonstrates how to perform a spatial join between two datasets: a set of polygons and a set of randomly generated points.

The polygons are represented as a DataFrame with geometries and colors, while the points are stored in a separate DataFrame.

The spatial join is performed using the contains predicate from GeometryOps, which checks if each point is contained within any of the polygons. The resulting joined DataFrame is then used to plot the points, colored according to the containing polygon.

First, we generate our data. We create two triangle polygons which, together, span the rectangle (0, 0, 1, 1), and a set of points which are randomly distributed within this rectangle.

julia
import GeoInterface as GI, GeometryOps as GO
 using FlexiJoins, DataFrames
@@ -28,14 +28,14 @@
 pl = GI.Polygon([GI.LinearRing([(0, 0), (1, 0), (1, 1), (0, 0)])])
 pu = GI.Polygon([GI.LinearRing([(0, 0), (0, 1), (1, 1), (0, 0)])])
 poly_df = DataFrame(geometry = [pl, pu], color = [:red, :blue])
-f, a, p = poly(poly_df.geometry; color = tuple.(poly_df.color, 0.3))

Here, the upper polygon is blue, and the lower polygon is red. Keep this in mind!

Now, we generate the points.

julia
points = tuple.(rand(1000), rand(1000))
+f, a, p = poly(poly_df.geometry; color = tuple.(poly_df.color, 0.3))

Here, the upper polygon is blue, and the lower polygon is red. Keep this in mind!

Now, we generate the points.

julia
points = tuple.(rand(1000), rand(1000))
 points_df = DataFrame(geometry = points)
 scatter!(points_df.geometry)
-f

You can see that they are evenly distributed around the box. But how do we know which points are in which polygons?

We have to join the two dataframes based on which polygon (if any) each point lies within.

Now, we can perform the "spatial join" using FlexiJoins. We are performing an outer join here

julia
@time joined_df = FlexiJoins.innerjoin(
+f

You can see that they are evenly distributed around the box. But how do we know which points are in which polygons?

We have to join the two dataframes based on which polygon (if any) each point lies within.

Now, we can perform the "spatial join" using FlexiJoins. We are performing an outer join here

julia
@time joined_df = FlexiJoins.innerjoin(
     (points_df, poly_df),
     by_pred(:geometry, GO.within, :geometry)
 )
julia
scatter!(a, joined_df.geometry; color = joined_df.color)
-f

Here, you can see that the colors were assigned appropriately to the scattered points!

Real-world example

Suppose I have a list of polygons representing administrative regions (or mining sites, or what have you), and I have a list of polygons for each country. I want to find the country each region is in.

julia
import GeoInterface as GI, GeometryOps as GO
+f

Here, you can see that the colors were assigned appropriately to the scattered points!

Real-world example

Suppose I have a list of polygons representing administrative regions (or mining sites, or what have you), and I have a list of polygons for each country. I want to find the country each region is in.

julia
import GeoInterface as GI, GeometryOps as GO
 using FlexiJoins, DataFrames, GADM # GADM gives us country and sublevel geometry
 
 using CairoMakie, GeoInterfaceMakie
@@ -60,7 +60,7 @@
     ::FlexiJoins.ByPred{typeof(my_predicate_function)}, 
     datas
 ) = true

This will enable FlexiJoins to support your custom function, when it's passed to by_pred(:geometry, my_predicate_function, :geometry).

- + \ No newline at end of file