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

feat: nondistinct matching #1567

Merged
merged 5 commits into from Jul 19, 2023
Merged

feat: nondistinct matching #1567

merged 5 commits into from Jul 19, 2023

Conversation

liangyiliang
Copy link
Contributor

@liangyiliang liangyiliang commented Jul 18, 2023

Description

Resolves #1065 .

We implement Solution 1 from #1065 to support nondistinct matching.

Implementation strategy and design decisions

A new keyword, repeatable, is added to selectors and collectors. The repeatable essentially allows the selector / collector block to match multiple Style variables to the same Substance variable. This is done by disabling the filter when the repeatable flag is enabled:

  if (repeatable) {
    return filteredSubsts.toArray();
  } else {
    const correctSubsts = filteredSubsts.filter(uniqueKeysAndVals);
    return correctSubsts.toArray();
  }

Examples with steps to reproduce them

We modify the "Quaternions as table" example and the "Quaternions as Cayley graph" example to use repeatable.

Checklist

  • I have commented my code, particularly in hard-to-understand areas
  • I have reviewed any generated registry diagram changes

@cloudflare-pages
Copy link

cloudflare-pages bot commented Jul 18, 2023

Deploying with  Cloudflare Pages  Cloudflare Pages

Latest commit: 6c0237e
Status: ✅  Deploy successful!
Preview URL: https://f9ea55aa.penrose-72l.pages.dev
Branch Preview URL: https://nd.penrose-72l.pages.dev

View logs

@github-actions
Copy link

github-actions bot commented Jul 18, 2023

± Registry diff

M	group-theory/quaternion-cayley-graph.svg
M	group-theory/quaternion-multiplication-table.svg

📊 Performance

Key

Note that each bar component rounds up to the nearest 100ms, so each full bar is an overestimate by up to 400ms.

     0s   1s   2s   3s   4s   5s   6s
     |    |    |    |    |    |    |
name ▝▀▀▀▀▀▀▀▀▀▚▄▄▄▄▄▄▄▄▄▄▞▀▀▀▀▀▀▀▀▀▘
      compiling optimizing rendering

If a row has only one bar instead of four, that means it's not a trio and the bar just shows the total time spent for that example, again rounded up to the nearest 100ms.

Data

                                                          0s   1s   2s   3s   4s   5s   6s   7s
                                                          |    |    |    |    |    |    |    |
set-theory-domain/tree-venn                               ▝▀▚▘
set-theory-domain/tree-tree                               ▝▚▘
group-theory/quaternion-multiplication-table              ▝▀▀▀▚▀▘
walk-on-spheres/SignedAngleOutside                        ▝▀▀▀▞▘
spectral-graphs/examples/hypercube                        ▝▀▀▞
group-theory/quaternion-cayley-graph                      ▝▀▚▀
set-theory-domain/tree-venn-3d                            ▝▚▀
atoms-and-bonds/one-water-molecule                        ▝▞
structural-formula/molecules/caffeine                     ▝▀▀▀▚▄▀▘
walk-on-spheres/walk-on-stars                             ▝▀▀▀▀▚▀▀▀
set-theory-domain/continuousmap                           ▝▚▘
mobius/mobius                                             ▝▚▘
linear-algebra-domain/two-vectors-perp                    ▝▞
tutorials/tutorial1                                       ▝▞
tutorials/tutorial2                                       ▝▞
tutorials/tutorial3                                       ▝▞
molecules/nitricacid-lewis                                ▝▀▀▞
exterior-algebra/vector-wedge                             ▝▚▘
shape-spec/all-shapes                                     ▝▚▀▀▘
shape-spec/arrowheads                                     ▝▞
graph-domain/textbook/sec1/fig1                           ▝▀▀▚▞
graph-domain/textbook/sec1/fig2                           ▝▀▀▚▄▘
graph-domain/textbook/sec1/fig3                           ▝▀▀▀▄▄▘
graph-domain/textbook/sec1/fig4                           ▝▀▀▀▄▄▘
spectral-graphs/examples/hexagonal-lattice                ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄▞▀▘
graph-domain/textbook/sec1/fig5                           ▝▀▀▀▀▀▄▄▄▞
graph-domain/textbook/sec1/fig6                           ▝▀▀▀▀▀▀▀▀▀▀▚▄▄▄▄▄▄▄▄▄▄▄▘
graph-domain/textbook/sec1/fig7                           ▝▀▚▘
graph-domain/textbook/sec1/fig8a                          ▝▀▀▀▀▀▄▄▞
graph-domain/textbook/sec1/fig8b                          ▝▀▀▀▄▄▘
graph-domain/textbook/sec1/fig9                           ▝▀▀▄▘
graph-domain/textbook/sec1/fig10                          ▝▀▀▞▘
graph-domain/textbook/sec1/fig11                          ▝▀▀▀▄▀▘
graph-domain/textbook/sec1/fig12                          ▝▀▀▀▀▚▄▀
graph-domain/textbook/sec1/fig13                          ▝▀▀▀▚▄▞
graph-domain/textbook/sec2/fig3                           ▝▀▀▀▀▀▀▚▄▄▄▞
graph-domain/textbook/sec2/fig4                           ▝▀▀▀▀▄▄▞
graph-domain/textbook/sec2/fig5                           ▝▀▀▀▀▀▀▚▄▄▄▞
graph-domain/textbook/sec2/fig6                           ▝▀▀▀▀▀▀▚▄▄▄▞
graph-domain/textbook/sec2/fig9                           ▝▀▀▀▀▀▀▀▀▀▚▄▄▄▄▄▞
graph-domain/textbook/sec2/fig10a                         ▝▀▀▄▞
graph-domain/textbook/sec2/fig10b                         ▝▀▀▄▘
graph-domain/textbook/sec2/fig11a                         ▝▀▚▀
graph-domain/textbook/sec2/fig11b                         ▝▀▞
graph-domain/textbook/sec2/fig11c                         ▝▀▞
graph-domain/textbook/sec2/fig12                          ▝▀▞
graph-domain/textbook/sec2/fig13                          ▝▀▀▀▀▀▀▀▀▀▀▀▄▄▄▄▄▄▄▄▄▄▄▄▘
graph-domain/textbook/sec2/fig14                          ▝▀▀▚▄▘
graph-domain/textbook/sec2/fig16b                         ▝▀▚▀
geometry-domain/textbook_problems/c05p13                  ▝▀▚▘
geometry-domain/textbook_problems/c01p01                  ▝▀▚▘
geometry-domain/textbook_problems/c03p01                  ▝▀▚▘
geometry-domain/textbook_problems/c05p01                  ▝▀▚▘
geometry-domain/textbook_problems/ex                      ▝▀▀▚▞
triangle-mesh-3d/two-triangles                            ▝▚▘
random-sampling/test                                      ▝▀▀▀▞
geometry-domain/textbook_problems/c11p12                  ▝▀▚▘
curve-examples/catmull-rom/catmull-rom                    ▝▚▘
word-cloud/example                                        ▝▀▚▞
geometry-domain/siggraph-teaser                           ▝▀▚▘
minkowski-tests/maze/non-convex                           ▝▚▘
lagrange-bases/lagrange-bases                             ▝▚▘
hypergraph/hypergraph                                     ▝▀▀▀▄▄▄▄▄▄▄▞
persistent-homology/persistent-homology                   ▝▀▀▄▄▄▀
walk-on-spheres/laplace-estimator                         ▝▀▚▘
walk-on-spheres/poisson-estimator                         ▝▀▀▀▞
walk-on-spheres/nested-estimator                          ▝▀▀▚▀
walk-on-spheres/offcenter-estimator                       ▝▀▚▘
shape-distance/points-around-star                         ▝▀▀▚▘
shape-distance/points-around-polyline                     ▝▀▚▘
shape-distance/points-around-line                         ▝▀▞
shape-distance/lines-around-rect                          ▝▚▘
fake-3d-linear-algebra/projection                         ▝▞
animation/center-shrink-circle                            ▝▞
graph-domain/other-examples/hamiltonian-cycle             ▝▀▀▀▚▄▘
structural-formula/reactions/methane-combustion           ▝▀▀▀▚▄▄▄▘
molecules/glutamine                                       ▝▀▞
matrix-ops/tests/matrix-matrix-addition                   ▝▚▘
matrix-ops/tests/matrix-matrix-division-elementwise       ▝▚▘
matrix-ops/tests/matrix-matrix-multiplication-elementwise ▝▚▘
matrix-ops/tests/matrix-matrix-multiplication             ▝▚▘
matrix-ops/tests/matrix-matrix-subtraction                ▝▚▘
matrix-ops/tests/matrix-transpose                         ▝▚▘
matrix-ops/tests/matrix-vector-left-multiplication        ▝▚▘
matrix-ops/tests/matrix-vector-right-multiplication       ▝▚▘
matrix-ops/tests/scalar-vector-division                   ▝▚▘
matrix-ops/tests/scalar-vector-left-multiplication        ▝▚▘
matrix-ops/tests/scalar-vector-right-multiplication       ▝▚▘
matrix-ops/tests/vector-vector-addition                   ▝▚▘
matrix-ops/tests/vector-vector-division-elementwise       ▝▚▘
matrix-ops/tests/vector-vector-multiplication-elementwise ▝▚▘
matrix-ops/tests/vector-vector-outerproduct               ▝▚▘
matrix-ops/tests/vector-vector-subtraction                ▝▀▞
logic-circuit-domain/half-adder                           ▝▚▘
curve-examples/cubic-bezier                               ▝▀▄▘
triangle-mesh-2d/diagrams/cotan-formula                   ▝▀▞
triangle-mesh-2d/diagrams/concyclic-pair                  ▝▀▞
triangle-mesh-2d/diagrams/halfedge-mesh                   ▝▀▞
triangle-mesh-2d/diagrams/relative-orientation            ▝▀▞
triangle-mesh-2d/diagrams/triangle-centers                ▝▚▘
triangle-mesh-2d/diagrams/angle-equivalence               ▝▀▚▄▘
timeline/penrose                                          ▝▀▀▀▞
graph-domain/textbook/sec5/ex32                           ▝▀▀▀▀▀▀▀▀▀▄▄▄▄▄▄▄▄▄▞
curve-examples/open-elastic-curve                         ▝▀▚▞
curve-examples/closed-elastic-curve                       ▝▀▚▞
graph-domain/other-examples/arpanet                       ▝▀▀▀▀▀▀▀▀▀▄▄▄▄▄▄▄▄▘
graph-domain/other-examples/nyc-subway                    ▝▀▀▀▀▀▀▀▀▀▀▚▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▞
fancy-text/fancy-text                                     ▝▀▄▘
curve-examples/blobs                                      ▝▀▀▀▀▀▚▄▄▄▄▄▄▄▄▄▄▄▄▘
curve-examples/space-curves                               ▝▀▀▀▀▀▄▄▘
geometric-queries/ray-intersect/test-group                ▝▀▀▀▀▀▀▀▚▀
ray-tracing/path-trace                                    ▝▀▀▞
ray-tracing/bidirectional                                 ▝▀▚▘
ray-tracing/next-event-estimation                         ▝▀▀▞
geometric-queries/test                                    ▝▀▞▀
geometric-queries/closest-point/test-group                ▝▀▞
geometric-queries/closest-point/test                      ▝▚▘
geometric-queries/closest-silhouette-point/test           ▝▚▘
geometric-queries/ray-intersect/test                      ▝▀▀▀▀▀▀▚▀▘
box-arrow-diagram/computer-architecture                   ▝▀▀▀▀▀▀▀▀▀▚▄▄▄▄▄▄▄▄▄▄▄▄▘
stochastic-process/stochastic-process                     ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▞▀▀▘
stochastic-process/epsilon-shell/AbsorbingBoundary        ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▞▀▀▀▀▀▀▀▀▘
solid/eigenspace                                          ▐█
solid/triangles                                           ▐█▌
solid/vectors                                             ▐▌
tsne/tsne                                                 ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄▄▄▄▄▄▀▀▀▀▀▀▀▀▘
spectral-graphs/examples/4x4-sudoku-graph                 ▝▀▀▚▀
spectral-graphs/examples/dodecahedral-graph               ▝▀▞
atoms-and-bonds/wet-floor                                 ▝▚▘
curve-examples/offset                                     ▝▚▞
curve-examples/frenet-frame                               ▝▚▘
curve-examples/osculating-circle                          ▝▞
curve-examples/evolute-of-cardioid                        ▝▀▀▚▘

@liangyiliang liangyiliang marked this pull request as ready for review July 18, 2023 20:03
Copy link
Member

@wodeni wodeni left a comment

Choose a reason for hiding this comment

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

Looks great! Just wanted to add another test case or two to be super sure.

packages/core/src/compiler/Style.test.ts Show resolved Hide resolved
@liangyiliang liangyiliang requested a review from wodeni July 19, 2023 15:29
Copy link
Member

@wodeni wodeni left a comment

Choose a reason for hiding this comment

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

Great! Thx for adding the test case

@wodeni wodeni merged commit 77e2714 into main Jul 19, 2023
10 checks passed
@wodeni wodeni deleted the nd branch July 19, 2023 20:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Better Matching Semantics
2 participants