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: deduplication of mutated Substance programs in edgeworth #1481

Merged
merged 3 commits into from Jun 13, 2023

Conversation

rjainrjain
Copy link
Contributor

Description

Deduplication of program statements within a mutated Substance program exists in Edgeworth, but until now deduplication between mutated Substance programs themselves has not existed. This PR introduces such deduplication of programs themselves.

Implementation strategy and design decisions

We add a function dedupSynthesizedSubstances to SubstanceAnalysis.ts, which reduces together the prettyprint strings of each program statement, compares the concatenated strings of each program supplied to it, and removes duplicates. Then, in the generateSubstances function in Synthesizer.ts we run dedupSynthesizedSubstances until the desired number of unique program mutations is reached.

Examples with steps to reproduce them

Using the Edgeworth tool, generate 10 diagram mutations under the lewis_0 option. Checking the Substance programs of each of these mutations will show that none of the programs are duplicates, though some programs still produce visually duplicated SVGs while having different underlying Substance programs. Consider the example below:

Screen Shot 2023-06-12 at 9 45 26 AM

These SVGs look the same but as shown in the next image, they have different Substance programs/underlying mutations:

Screen Shot 2023-06-12 at 9 45 49 AM

This PR therefore ensures the uniqueness of displayed mutated programs but not the uniqueness of their diagrams.

Checklist

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

Open questions

This does not resolve the problem of mutated diagrams' SVGs appearing the same despite stemming from different, unique programs.

@github-actions
Copy link

github-actions bot commented Jun 12, 2023

± Registry diff

📊 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   7s   8s
     |    |    |    |    |    |    |    |    |
name ▝▀▀▀▀▀▀▀▀▀▚▄▄▄▄▄▄▄▄▞▀▀▀▀▀▀▀▀▀▀▚▄▄▄▄▄▄▄▄▄▖
      compiling labeling 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
                                                          |    |    |    |    |    |
set-theory-domain/tree-venn                               ▝▀▞▖
set-theory-domain/tree-tree                               ▝▀▄▚
set-theory-domain/tree-venn-3d                            ▝▚▚▖
group-theory/quaternion-multiplication-table              ▝▀▀▄▚▄
group-theory/quaternion-cayley-graph                      ▝▀▞▖
atoms-and-bonds/wet-floor                                 ▝▚▀▀▀▖
atoms-and-bonds/one-water-molecule                        ▝▞▖
set-theory-domain/continuousmap                           ▝▞▖
linear-algebra-domain/two-vectors-perp                    ▝▚▚
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                           ▝▀▀▚▀▀▖
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                  ▝▀▞▖
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                            ▝▞▖
structural-formula/molecules/caffeine                     ▝▀▚▀▄
mobius/mobius                                             ▝▞▖
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                    ▝▀▀▀▀▞▀▀▚
curve-examples/blobs                                      ▝▀▀▀▀▀▀▞▀▀▀▀▀▀▀▀▀▀▀▀▀▀▖
curve-examples/space-curves                               ▝▀▀▀▀▞▀▀▚
solid/triangles                                           ▐
solid/vectors                                             ▐
solid/eigenspace                                          ▐
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                      ▝▀▀▀▀▀▀▀▚▚▄

@rjainrjain rjainrjain marked this pull request as ready for review June 12, 2023 13:56
@rjainrjain rjainrjain requested a review from wodeni June 12, 2023 13:56
@rjainrjain rjainrjain changed the title fix: deduplication of mutated Substance programs in edgeworth feat: deduplication of mutated Substance programs in edgeworth Jun 12, 2023
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 good! Thanks for the PR. Some small refactoring for readability below.

packages/edgeworth/src/analysis/SubstanceAnalysis.ts Outdated Show resolved Hide resolved
packages/edgeworth/src/synthesis/Synthesizer.ts Outdated Show resolved Hide resolved
packages/edgeworth/src/synthesis/Synthesizer.ts Outdated Show resolved Hide resolved
Co-authored-by: Wode "Nimo" Ni <wn2155@columbia.edu>
@cloudflare-pages
Copy link

cloudflare-pages bot commented Jun 13, 2023

Deploying with  Cloudflare Pages  Cloudflare Pages

Latest commit: 6b79d4e
Status: ✅  Deploy successful!
Preview URL: https://025f94f7.penrose-72l.pages.dev
Branch Preview URL: https://rijul-dedup.penrose-72l.pages.dev

View logs

@rjainrjain rjainrjain requested a review from wodeni June 13, 2023 13:54
@rjainrjain rjainrjain merged commit 9eec6d1 into main Jun 13, 2023
10 checks passed
@rjainrjain rjainrjain deleted the rijul/dedup branch June 13, 2023 14:08
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.

None yet

2 participants