Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unit support for Axes & Recipes, a.k.a axis converts #3226

Merged
merged 100 commits into from
Apr 30, 2024

Conversation

SimonDanisch
Copy link
Member

@SimonDanisch SimonDanisch commented Sep 11, 2023

Continuation of #1347.

Axis conversion

  • Axis specifies types it can handle and creates objects that track global states for those types (e.g. categorical needs to track all categories of all plots in one axis)
  • Axis compatible types => scene compatible types plus more types.
  • Axis conversion can return axis parameters, which can be overridden step-by-step, similar to Plots.jl recipes.
  • Scene conversions don't handle further axis-related tasks.
  • For each plot command, we figure out the axis convert type, and then compare it to the existing axis conversion types in that axis. We then compare them by something like the Base.promotion trait system, and error if e.g. one tries to plot categorical values into a time axis.
  • Each axis global (e.g. CategoricalConversion) will have an axis dimension associated and will be assigned to (dim)ticks of the axis, whcih then correctly creates axis labels etc.

We can implement float32 rescaling as a axis conversion:

  • Update data rescaling only when axis limits change.
  • The "limits" referred to in rescaling aren't the axis limits but the 2D scene limits.
    • Example: For user-facing limits from 1 to 100 and a log10 scale, scene limits would be 0 to 2. So, a real value of 1000
      would be transformed to 3 and then rescaled to (3 - 0) / (2 - 0) = 1.5.
  • Example: Some type is converted by the axis to float128, which then gets converted + scaled for the scene to float32.
  • The scene then converts float128 to float32.
  • Transform functions need to occur before data rescaling
  • We can optimize rescaling if inputs are already float32.

This PR right now ports all docs & examples and the actual implementation of unit conversions and bases it against #3113.
We still need to implement the actual axis conversion more cleanly, which was the Achilles heel for #1347 and the reason it wasn't merged yet. Since most work was getting units, printing and conversions to work, I hope that now with a better plan the axis conversion won't take that long to implement anymore.

@SimonDanisch SimonDanisch marked this pull request as draft September 11, 2023 17:04
@MakieBot
Copy link
Collaborator

MakieBot commented Sep 11, 2023

Compile Times benchmark

Note, that these numbers may fluctuate on the CI servers, so take them with a grain of salt. All benchmark results are based on the mean time and negative percent mean faster than the base branch. Note, that GLMakie + WGLMakie run on an emulated GPU, so the runtime benchmark is much slower. Results are from running:

using_time = @ctime using Backend
# Compile time
create_time = @ctime fig = scatter(1:4; color=1:4, colormap=:turbo, markersize=20, visible=true)
display_time = @ctime Makie.colorbuffer(display(fig))
# Runtime
create_time = @benchmark fig = scatter(1:4; color=1:4, colormap=:turbo, markersize=20, visible=true)
display_time = @benchmark Makie.colorbuffer(display(fig))
using create display create display
GLMakie 3.51s (3.49, 3.55) 0.02+- 106.78ms (104.22, 108.76) 1.88+- 520.35ms (515.45, 524.78) 3.18+- 7.69ms (7.64, 7.78) 0.05+- 25.59ms (25.46, 25.96) 0.17+-
sd/beta-20 3.40s (3.36, 3.44) 0.03+- 134.19ms (131.55, 135.96) 1.53+- 530.70ms (521.53, 537.84) 5.37+- 7.86ms (7.82, 7.91) 0.03+- 25.49ms (25.39, 25.61) 0.08+-
evaluation 0.97x slower X, 0.11s (4.53d, 0.00p, 0.02std) 1.26x faster✅, -27.41ms (-16.01d, 0.00p, 1.70std) 1.02x faster ✓, -10.35ms (-2.35d, 0.00p, 4.27std) 1.02x faster ✓, -0.17ms (-3.89d, 0.00p, 0.04std) 1.00x invariant, 0.1ms (0.80d, 0.17p, 0.12std)
CairoMakie 3.13s (3.12, 3.15) 0.01+- 106.18ms (105.38, 107.56) 0.90+- 127.03ms (125.89, 129.13) 1.28+- 7.42ms (7.34, 7.59) 0.08+- 968.16μs (958.99, 975.64) 5.12+-
sd/beta-20 3.05s (3.01, 3.09) 0.03+- 134.20ms (131.73, 135.65) 1.43+- 118.62ms (116.14, 121.68) 1.76+- 7.66ms (7.62, 7.73) 0.04+- 969.90μs (957.62, 1007.65) 17.00+-
evaluation 0.97x slower X, 0.08s (3.70d, 0.00p, 0.02std) 1.26x faster✅, -28.03ms (-23.37d, 0.00p, 1.17std) 0.93x slower❌, 8.41ms (5.46d, 0.00p, 1.52std) 1.03x faster ✓, -0.24ms (-3.77d, 0.00p, 0.06std) 1.00x invariant, -1.74μs (-0.14d, 0.80p, 11.06std)
WGLMakie 3.94s (3.80, 4.06) 0.10+- 110.78ms (106.86, 116.65) 3.41+- 8.79s (8.47, 9.08) 0.23+- 9.87ms (9.51, 10.30) 0.33+- 71.12ms (70.10, 72.15) 0.76+-
sd/beta-20 3.70s (3.59, 3.79) 0.08+- 137.51ms (134.27, 142.04) 2.96+- 8.74s (8.53, 8.91) 0.14+- 10.31ms (10.06, 10.52) 0.17+- 71.28ms (70.53, 72.22) 0.63+-
evaluation 0.94x slower❌, 0.23s (2.51d, 0.00p, 0.09std) 1.24x faster✅, -26.73ms (-8.36d, 0.00p, 3.19std) 1.00x invariant, 0.04s (0.22d, 0.70p, 0.19std) 1.04x faster ✓, -0.44ms (-1.68d, 0.01p, 0.25std) 1.00x invariant, -0.16ms (-0.23d, 0.67p, 0.70std)

@SimonDanisch SimonDanisch mentioned this pull request Oct 27, 2023
@ffreyer
Copy link
Collaborator

ffreyer commented Jan 10, 2024

I want to collect some information and thoughts on Float32.

Conversion Pipeline

Conversion steps (current):

  1. convert_arguments normalizes type and structure of plot.input_args, generating plot.converted
  2. transform_func applies any function to positional data in plot.converted
  3. model moves the result into world space (translation + rotation + scale, technically arbitrary matrix transform)
  4. view moves data into camera space (translation + basis change)
  5. projection moves data into clip space, -1..1 range (perspective projection, scaling)
  6. viewport/pixel_space moves data into pixel space, 0..w range (scaling, translation)

There might be some additional steps to deal with markerspace. All of those use matrices from steps 3-6.

Float issues:

  1. Truncates to Float32, reducing precision
  2. Can do arbitrary things such as moving data to a range with more float precision issues. (E.g. x -> x + 1e6, exp)
  3. May introduce precision issues from translation
  4. Same
  5. Should be save since data gets scaled to -1..1 range before perspective projection?
  6. Save

Steps 3-6 are Matrix operations and therefore can and should run on the GPU. We want to use Float32 here. (Note that Axis currently has translation in the projection matrix. We can easily move that to view. TODO: Check PolarAxis, Axis3)

Fixing things

To fix precision issues while keeping 3-6 on the GPU we need to remove translation partially or fully from view * model. Scaling shouldn't matter. For example 1e6 .+ collect(0:10) has precision issues. Removing translations would move the data into a -5:5 range, fixing the problem. Something like 10 .^ (1:10) does not have issues. On the full range of 10^10 float precision of e.g. 1 never becomes relevant. Zooming would result in a translation keeping precision high.

In 3D view = basis_transform * translationmatrix(-eyepositon) so extracting the translation is easy. (2D can be adjusted to match.) For a "normal" model matrix composed out of a translation, rotation and scale we have

$$\begin{align} &view \cdot model \cdot p \\ = &basis \cdot translationmatrix(-eyepos) \cdot (scale \cdot rotation \cdot p + translation) \\ = &basis \cdot (scale \cdot rotation \cdot p + translation - eyepostion) \\ = &basis \cdot scale \cdot rotation \cdot (p + rotation^{-1} \cdot scale^{-1} \cdot (translation - eyeposition)) \\ = &basis \cdot scale \cdot rotation \cdot (p - inv(model) \cdot eyeposition) \end{align}$$

For an arbitrary model matrix we could calculate M = translationmatrix(-eyepos) \cdot model, generate a matrix $M'$ with the translating part of M set to 0 and compute a translation matrix $T = inv(M') \cdot M$ such that $M = M' \cdot T$. It is not clear to me whether this fixes float precision issues. However this is also an edge case which we may just want to ignore or disallow for this purpose.

With this we have an extra conversion step p -> Float32(p + translation(view, model)) applying after step 2 and before step 3. Data in step 1 and 2 would need to be kept at it's original precision to remain accurate.

  • Can't we just use eyeposition? - Technically no, as plots could be translated into positions that cause float precision issues
  • Can we apply this earlier? - In most cases we can probably just inverse transform the offset, but there might be some transform functions that are not (locally) invertible or cause precision issues themselves. Things like log(0) or InversePolar(-5, 30°) could also cause issues

TODO

Following the above I think our Float32 TODO would be:

  • remove Float32 conversion from convert_arguments (I guess this means keeping the user type and just adjusting the structure of data (e.g. 3x Vector{<: Real} -> Point3 Vector)?)
  • generalize transform_funcs to take arbitrary numeric types
  • remove translations from the view matrix (and projection) and keep track of them in camera.eyeposition
  • add a conversion step between transfunc and model that applies an offset derived from camera.eyeposition and plot.model to transformed data
  • And to allow non-Real types I think we'd need to extend convert_arguments accordingly

What to do with categorical data is still a question. In this structure they would have to fit in with convert_arguments, but they also need to talk to the axis/scene...

Tangent:
Why is our model matrix defined as scale_translation * rotation rather than rotation * scale_translation? This means that scale!(p, Vec3f(1,1,2)); rotate!(p, Vec3f(1,0,0), pi/4) scales the plot y and z coordinates (world z) rather than just plot z (world y and z). Do we want that?
We're also missing inv(::Quaternion).

Copy link
Collaborator

@ffreyer ffreyer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I removed some things that seemed like forgotten comments/prototyping in the last commit. Also tried to rephrase some bits in the documentation.

MakieCore/src/MakieCore.jl Outdated Show resolved Hide resolved
src/specapi.jl Outdated Show resolved Hide resolved
Comment on lines +355 to +358
# TODO, this throws ERROR: MethodError: no method matching adjust_axes(::CellGrid, ::Matrix{Int64}, ::Matrix{Int64}, ::Matrix{Float64})
# Is this what we want to test for?
@test_throws MethodError convert_arguments(Heatmap, m1, m2, m3) === (m1, m2, m3)
@test convert_arguments(Heatmap, m1, m2) === (m1, m2)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Something like [1 2; 1.5 2.5] doesn't work for heatmaps since the cells are rectangular. So you can't use the extra freedom a Matrix input gives you. I think that's what the missing conversion/test is implying.

@SimonDanisch SimonDanisch merged commit 5e1bc2c into breaking-0.21 Apr 30, 2024
17 of 18 checks passed
@SimonDanisch SimonDanisch deleted the sd/axis-converts branch April 30, 2024 18:45
SimonDanisch added a commit that referenced this pull request May 8, 2024
* run CI against this PR

* bump version

* fix circular reference

* remove GeoInterfaceMakie tests for good to avoid circular dependencies

* add poly1

* Rework line shaders for WGLMakie compatability (#3558)

* prototyping

* fix joint with non-uniform linewidths

* fix transform

* add patterns

* fix pattern sampling

* fix truncated join cutoff + some cleanup

* improve pattern overwrite threshhold

* reorganize code

* cleanup

* add function for line vec -> line normal

* don't try to cleanup joints if linewidth difference is critical

* rename some variables

* cleanup comments, restructure linewidth sdf generation

* minor cleanup + notes

* fix orientation problems with truncated joints

* minor performance tweaks + cleanup

* handle line joints in fragment shader & ditch variable linewidths

* improve truncation overlap/gap

* improve pattern adjustments for truncated joints

* cleanup

* reorganize code to reduce memory usage

* mostly fix gap in sharp joints

* explain pattern overwrite a bit more

* use new fragment shader for linesegments

* disable debug rendering

* fix incorrect line placement

* adjust line segments to pattern

* use const over define & fix dots

* tweak debug rendering

* make truncation overlap a bit nicer

* minor cleanup

* fix linestyle in linesegments

* skip rendering at 0 linewidth

* add slight bias to avoid missing pixels

* differentiate different segments in debug render

* make color interpolation continuous at joint

* fix dense line color artifacts

* remove unused

* allocate space for joints

* use sdf for AA + debug render

* add miter joints

* handle colors

* some cleanup + linesegments prep

* fix some errors [skip ci]

* add patterns

* clean up linesegments

* add normal rendering mode

* minor cleanup

* experiment with geometry adjustments

* use rounding to solve joint over/underdraw

* WebGL doesn't like scaling

* smooth out inner edge of truncated join

* remove derivative to reduce float accuracy issues

* improve thin lines

* fix lastlen error

* match buffer sizes to number of drawn segments

* avoid dissipation of lines at high point densities

* calculate uv from quad_sdf1

* reduce number of interleaved buffers

* fix disappearing grid lines

* fix missing preprocessors

* fix pattern artifacts in dense line sections

* cleanup some variables

* allow patterns to adjust to linewidth

* fix AA at line end

* fix nan handling

* discard fully transparent pixels

* fix patterns with nan, reset pattern on nan

* fix size issues

* extrude lines slightly to cleanly close them

* fix pixel skipping?

* cleanup patterns

* remove linewidth from pattern based line adjustments

* consider AA in shape factor

* reset shape_factor if pattern changes segment shape

* minor cleanup

* apply changes to WGLMakie + cleanup

* cleanup pattern overwrite

* use the same AA_RADIUS in fragment shader

* fix linelen transform

* disable debug

* fix line start/end AA

* fix px_per_unit?

* fix px_per_unit?

* reduce line start/end extrusion

* simplify extrusion and shape_factor

* summarize breaking changes

* move miter joint test

* update docstring

* minor cleanup

* enable more tests

* move gappy & friends to Makie

* note change to linestyle scaling

* cleanup

* fix line start/end AA

* remove global var

* disable GeoMakie tests for now

* improve transparency for WGLMakie

* fix problems with 180° change in line direction

* fix directionality

* interpolate colormap in fragment shader

* remove util.vert from line/segments

---------

Co-authored-by: SimonDanisch <sdanisch@protonmail.com>

* fix line inversion (#3651)

* fix lines shader

* cleanup debug code

* fix rebase error

* fix pattern connectivity

* some cleanup

* apply changes to WGLMakie

* add test

* fix CairoMakie too

* update changelog

* fix missing start/end segment

* Update CHANGELOG.md

* update comments

---------

Co-authored-by: Simon <sdanisch@protonmail.com>

* Documented / validated plot attributes (#3626)

* add second `@recipe` method

* rename function

* implement recipe and keyword validation

* fix some bugs

* rename for clarity

* change Scatter recipe

* use argument symbols correctly

* change Lines

* change linesegments

* do a bunch of plots more

* fix text bugs

* splice in internal attribute after mesh creation

* add allowlist

* fix text

* add attribute deprecation mechanism

* add explanation

* remove `text` for GLMakie

* fix contour volume attributes

* add rasterize to allowlist

* add `enable_depth` to volume

* add `matcap` to mesh

* set `fxaa = false` on scatter, lines, linesegments, text

* move fxaa after mixins

* fix keywords

* remove markersize attribute

* remove invalid markersize

* add depthsorting to attributes for scatter

* fix forwarded attributes

* add absorption to volume

* don't use `used_attributes` for datashader canvas convert

* fix positional args

* image

* add better printing and rudimentary tests

* make allowlist a tuple for fewer allocations

* attribute names tuple instead of set

* make deprecations also a tuple

* avoid intermediate vector to speed up attribute creation

* apply same optimization to blocks

* implement mechanism to augment user docstring

* delete manually written out attribute docs

* use funcsym in docstring

* incorporate attribute docs into docstring again

* use equal

* add changelog

* introduce `DocumentedAttributes` with macro

* add function to access `DocumentedAttributes` of a recipe

* fix module mutation problem for now

* move definition behind PlotType

* return Attributes instead of Dict

* convert wireframe recipe

* close over reference

* don't include prereleases in benchmark, failed with 1.11 alpha

* stringify default expr

* convert arrows

* add docs

* directly convert default exprs to strings

* convert ablines

* print wrong attribute in red

* convert annotations

* convert arc

* remove attributes in arrows docstring

* convert band

* fix escaping issue

* convert barplot

* convert bracket

* fix barplot usage in hist

* convert contourf

* typo

* convert contour

* fix waterfall

* comment out arrows test

* convert datashader

* convert errorbar and rangebar

* convert hvlines

* convert hvspan

* convert pie

* convert rainclouds

* convert scatterlines

* convert series

* convert spy

* convert stairs

* convert stem

* convert streamplot

* convert timeseries

* convert tooltip

* convert tricontourf

* add transformation to allowlist

* convert triplot

* convert volumeslices

* convert voronoiplot

* convert waterfall

* convert boxplot

* convert crossbar

* convert density

* convert qqplot and qqnorm

* convert ecdfplot

* convert hexbin

* convert hist

* convert violin

* improve error message printing

* add docstrings for mutating functions and plot types

* add missing docstrings

* reconnect lines docstring

* move functions out of macro

* fix arrows example and adjust docs

* put necessary functions back into macro

---------

Co-authored-by: Simon <sdanisch@protonmail.com>

* Add voxel plot type (#3527)

* create voxel rendering prototype

* enable lighting

* prototype voxel id generation & color handling

* add is_air attribute

* prototype texture mapping

* fix shader reloading

* fix texture mapping

* implement local updates

* optimize render order (depthsorting = false)

* add depthsorting = true

* render z planes first

* add lowclip and highclip

* add refimg tests + some fixes

* fix colorrange

* fix local chunk update

* handle colorrange more efficiently

* handle voxel id data more efficiently

* docstring & formatting

* switch back to lrbt order for uvmap

* add docs

* try fix tests

* fix show

* fix test?

* add missing dimensions

* add arguments for placement and scale

* allow Colon

* add Colon() to local_update

* minor cleanup

* prototype WGLMakie version

* add fallback in CairoMakie

* add RPRMakie fallback

* skip invisible voxels

* fix typo

* rename voxel -> voxels

* update docs, fix placement

* update news

* fix Colorbar for voxels

* enable tests

* fix texture rotation

* cleanup print

* cleanup comment

* generalize array access

* debug WGLMakie

* get voxels rendering in WGLMakie

* fix texture mapping

* activate tests

* fix moving planes, cleanup prints

* add unit tests

* add gap attribute

* tests & docs

* mention potential issues with picking

* fix WGLMakie picking

* fix depthsorting/gap handling

* switch to integer mod

* fix render order

* use RNG

* fix 1.6 3d array syntax

* fix refimage

* Update CHANGELOG.md

* fix julia 1.6

---------

Co-authored-by: Simon <sdanisch@protonmail.com>

* implement Float32 without losing Float64 precision (rebased) (#3681)

* implement float64 precision

* remove merge conflicts

* update CairoMakie

* move some code around

* simplify syntax

* add non-Observable apply_transform_and_f32_conversion

* clean up convert_arguments

* update WGLMakie

* fix tests

* patch model to act after f32convert

* fix function name

* update project and plot_to_screen

* fix patch_model

* add first test

* rename file

* fix type after patch_model

* fix ticks beyond limits

* fix image and heatmap conversion

* convert to float types

* update test

* Fix CairoMakie not precompiling

missed a `Makie.` in the image recipe

* update mesh converts

* fix poly convert type

* fix dict access

* fix first test in WGLMakie

* don't use triangle_mesh

* fix incorrect convert_arguments

* fix test

* fix DataInspector error

* add meshscatter + surface to tests, fix convert_arguments for poly

* Fix docs + Makie tests

* Fix 1.6!?

* fix picking test

* update DataInspector

* fix indicator rotation for meshscatter in DataInspector

* fix Vector{<: Integer}, Vector{Float32} -> Vector{Float32} [skip ci]

* fix stackoverflow on mixed tuple types [skip ci]

* fix tuples correctly [skip ci]

* fix geom -> points eltype [skip ci]

* fix geom -> PointBased output type

* fix Rect2 -> points output type [skip ci]

* fix PointBased mesh conversion

* fix PointBased multi-linestrings type [skip ci]

* update bezierpath

* split up conversions

* fix missing Points convert [skip ci]

* fix CellGridBased types [skip ci]

* always convert volumes to float32

* start adding type tests for every convert_arguments

* fix tests

* undo splitting conversions.jl

* test and cleanup mesh conversions

* fix docs

* update & test Annotations

* update & test arrows

* update and test band and bracket

* update & test errorbars and rangebars conversions

* test & update series converts

* make type stable on 1.6

* update & test remaining convert_arguments

* fix & test model application

* add tests for float32convert

* at floatmin/max refimg test

* fix typo

* update text bbox test & add backtrace

* avoid Float32 in data_limits

* fix Polygon -> Bezierpath conversion

* fix WGLMakie meshscatter model patching

* fix Float64 normals

* fix Float64 matrices in Voxels

* test normal and uv types

* fix for 1.6

* make new project method more complete

* clean up some TODOs

* restore text tests

* restore Polar transform tests

* avoid BBox for Axis limits

* fix rectangle zoom, deprecate to_world with matrix inputs

* fix 1.6

* fix Float64 latexstrings

* fix hvlines, hvspan, errorbars, rangebars

* fix & test ablines

* fix other usage of projview_to_2d_limits

* remove dublicated line

* update changelog + cleanup [skip ci]

* fix missing to_value

* consider markersize and offset for scatter data_limits

* fix tests

* revert BBox -> Rect2d changes

* get hist and barplot working

---------

Co-authored-by: ffreyer <frederic481994@hotmail.de>
Co-authored-by: Anshul Singhvi <anshulsinghvi@gmail.com>

* Document conversion pipeline (#3719)

* document conversion pipeline

* fix doc build

* fix block

---------

Co-authored-by: SimonDanisch <sdanisch@protonmail.com>

* Deprecate `rotations` for `rotation` for Scatter and MeshScatter (#3724)

* deprecate `rotations` for `rotation` for Scatter and MeshScatter

* one more rename

* remove double conversion

* fix cairomakie meshscatter

* fix usage in docs

* remove mat4 code again

* fix CairoMakie rror

* change one more rotations

* fix WGLMakie

* add changelog entry

---------

Co-authored-by: ffreyer <frederic481994@hotmail.de>

* fix merge

* update scatter boundingbox (#3716)

* implement scatter boundingbox with marker metrics

* add tests

* always consider marker rotations

* update changelog [skip ci]

* fix data_limits

* fix some more issues

* rotations -> rotation

* Update boundingboxes.jl

---------

Co-authored-by: Simon <sdanisch@protonmail.com>

* Change how boundingbox(::Text) is deprecated (#3723)

* change how boundingbox is deprecated

* update changelog

* fix test errors

* fix docs errors and cleanup error message

* fix type instability

* fix function name

* fix function name

* fix boundingbox overwrites

* update changelog

* add types to function args

maybe this allows boundingbox(::MyPlot, space) to work without ::Symbol...

* fix typing

* fully remove :world space

* fix test

* Various fixes for next release (#3731)

* fix error for 2d meshscatter data_limits

* avoid Rect3(::Rect2) constructor

* allow :inspector_label

* allow inspector_clear and inspector_hover too

* fix rect zoom & cleanup to_world

* move inspector attributes to default attributes

* fix NaN handling in limits & deprecate _update_rect

* Update CHANGELOG.md

* Fix some issues with voxels (#3748)

* fix single color

* update to new attribute docs and hide internal attributes

* fix missing voxel planes in Axis3

* use transformationmatrix

* should be normalized

* make view_direction optimization less error prone

* Fix rare missing/duplicate pixels in truncated joint (#3794)

* rework truncated joint discard

* update WGLMakie

* fix non-solid linestyle joints

* Add linecaps and jointstyles (#3771)

* add attributes

* prototype linecap & linestyle in GLMakie

* move code around, add comments

* add capstyle for linesegments

* update WGLMakie

* revert change in padding of uncapped lines

* make sure truncation can't trigger

* update CairoMakie

* add :bevel

* make miter_limit adjustable

* capstyle -> linecap

* update changelog

* add refimg tests

* add example

* fix rendering issue with bevel for continued lines

* use named constants

* add more space to test

* consider miter_limit in CairoMakie as well

* also enable refimg test

* switch to angle based miter_limit

* fix default

* tweak tests

* note change in default miter_limit

* add new attributes to recipes

* rename jointstyle -> joinstyle

* update a few more jointstyles

* Fix rare missing/duplicate pixels in truncated joint (#3794)

* rework truncated joint discard

* update WGLMakie

* fix non-solid linestyle joints

* improve truncated linecap a bit

* regenerate wglmakie bundled

* tweak shape_factor

* restore file

* try fix connected sphere

* add debug refimgs

* more testing

* more testing

* revert debugging

* fix test?

* Cleanup for breaking 0.21 (#3765)

* cleanup temp defitions

* finalize data_limits cleanup

* GeometryBasics should probably be breaking

* adjust other versions

* use newly tagged GeometryBasics

* use breaking gridlayoutbase

* try updating registry

* somehow this is needed?!

* add to missing CI

---------

Co-authored-by: SimonDanisch <sdanisch@protonmail.com>

* Unit support for Axes & Recipes, a.k.a axis converts (#3226)

* take over most of the work from #1347

* add typed argument conversion (#3565)

* add typed argument conversion

* fix volume

* add function to get available conversions

* make conversion apply more narrowly

* more cleanly separate recursion in convert_arguments

* clean up

* allow to get axis before creating a plot

* clean up

* fix tests

* bring back dim converts (axis_convert)

* update tests

* fix tests and work around conversion problems

* fix WGLMakie

* fix errors

* clean up conversion pipeline

* fix tests

* add changelog entry

* disable project run

* improve performance slightly

* might as well use array

* tmp

* wip

* implement axis convert recursion

* fix tests

* fix datashader

* fix datashader

* move unitful integration

* fix performance regression!?

* fix merge & new date time improvements

* fix scaling test

* remove test false

* clean up

* converts shouldnt be here

* move axis converts to scene

* further refactor [skip ci]

* finish refactor for AxisConversion type

* allow limit setting and ticks

* make tests less noisy

* cleanup

* clean up and fix unitful/date conversion

* make sure all tests work correctly

* remove rand

* rename, clean up and make axis spec work

* clean up and test new conversion pipeline

* undo feature deletion, don't reintroduce Rect2f

* be explicit about Volume Interval types

* minor docstring cleanup

* try to clarify new conversion docstrings

* remove convert_arguments_typed in favor of types_for_plot_arguments

* fix remaining bugs for conversion simplification

* fix ticks not updating

* fix specapi

* fix qqnorm

* clean up types_for_plot_arguments

* fix tuple conversion

* try to fix compile time regression

* try to fix compile time regression

* clean up and introduce expand_dimensions

* fix #3655 and clean up convert_arguments + add tests

* fix #3509 and add tests for

* clean up observables and more docs

* final rename

* fix docs

* cleanup

* small clean up

* small doc improvements

* improve docs

* fix docs

* try relative link

* try without .md

* take out link

* try fix

---------

Co-authored-by: ffreyer <frederic481994@hotmail.de>

* fix comment

* Add wrap recipe tutorial (#3816)

* [Docs] add wrap/redirect recipe tutorial

* fix sentence

* Update docs/tutorials/wrap-existing-recipe.md

Co-authored-by: Anshul Singhvi <anshulsinghvi@gmail.com>

* update

* fix doc build

* add changelog

* fix preview

---------

Co-authored-by: Moelf <proton@jling.dev>
Co-authored-by: Anshul Singhvi <anshulsinghvi@gmail.com>

* only forward attributes usable by recipe

* make sharing of attributes explicit

* ci

* fix RPRMakie material

* small fixes

* fix RPRMakie

* fix series with BezierPath

* fix series conversions

---------

Co-authored-by: Frederic Freyer <frederic481994@hotmail.de>
Co-authored-by: Julius Krumbiegel <22495855+jkrumbiegel@users.noreply.github.com>
Co-authored-by: Anshul Singhvi <anshulsinghvi@gmail.com>
Co-authored-by: Moelf <proton@jling.dev>
@t-bltg t-bltg added the units aka dim converts label May 27, 2024
@ffreyer ffreyer mentioned this pull request Aug 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
units aka dim converts
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants