penrose: Create beautiful diagrams just by typing mathematical notation in plain text.

[ library, mit, program, unclassified ] [ Propose Tags ]

[Skip to Readme]
Versions [faq] 0.1.0.0, 0.1.0.1, 0.1.0.2, 0.1.1.0, 0.1.1.1 (info)
Change log ChangeLog.md
Dependencies ad, aeson, ansi-terminal, array, base (>=4.12 && <5), bytestring, containers, directory, docopt, extra, hmatrix, hslogger, http-types, megaparsec, mtl, multimap, network, old-time, parser-combinators, penrose, pretty, pretty-show, pretty-terminal, process, random, random-shuffle, scotty, split, text, unordered-containers, uuid, websockets [details]
License MIT
Author team-penrose
Maintainer penrose.team@gmail.com
Home page http://penrose.ink
Source repo head: git clone https://github.com/penrose/penrose.git
Uploaded by wodeni at Tue Jul 2 22:46:42 UTC 2019
Distributions NixOS:0.1.1.1
Executables penrose
Downloads 989 total (142 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs not available [build log]
All reported builds failed as of 2019-07-02 [all 3 reports]

Modules

  • Penrose
    • Penrose.API
    • Penrose.Element
    • Penrose.Env
    • Penrose.Functions
    • Penrose.GenOptProblem
    • Penrose.Optimizer
    • Penrose.Plugins
    • Penrose.Serializer
    • Penrose.Server
    • Penrose.ShadowMain
    • Penrose.Shapes
    • Penrose.Style
    • Penrose.Substance
    • Penrose.SubstanceJSON
    • Penrose.SubstanceTokenizer
    • Penrose.Sugarer
    • Penrose.Tokenizer
    • Penrose.Transforms
    • Penrose.Util

Downloads

Maintainer's Corner

For package maintainers and hackage trustees


Readme for penrose-0.1.1.1

[back to package description]

Penrose CircleCI

Penrose is an early-stage system that is still in development. Our system is not ready for contributions or public use yet, but hopefully will be soon. Send us an email if you're interested in collaborating.

  • See the site for more information and examples.
  • See the wiki for more system-specific information on building, running, testing, and debugging the system.
  • For even more documentation, see Nimo Ni's README.

Example

Here's a simple Penrose visualization in the domain of set theory.

<img src="https://i.imgur.com/3JHZeaX.png" width=300>

It's specified by the following Substance and Style programs.

  • tree.sub
    Set A
    Set B
    Set C
    Set D
    Set E
    Set F
    Set G
    Subset B A
    Subset C A 
    Subset D B
    Subset E B
    Subset F C
    Subset G C
    NoIntersect E D
    NoIntersect F G
    NoIntersect B C
    
  • venn.sty
    Set x {
        shape = Circle { }
        constraint contains(x, x.label)
    }
    
    Intersect x y {
        constraint overlapping(x, y)
        constraint outsideOf(y.label, x)
        constraint outsideOf(x.label, y)
    }
    
    NoIntersect x y {
        constraint nonOverlapping(x, y)
    }
    
    Subset x y {
        constraint contains(y, x)
        constraint smallerThan(x, y)
        constraint outsideOf(y.label, x)
    }
    
    NoSubset x y {
        objective repel(x, y)
        constraint outsideOf(x, y)
        constraint outsideOf(y.label, x)
        constraint outsideOf(x.label, y)
        constraint nonOverlapping(x, y)
    }
    

Here's how the optimization looks live in the UI.

<img src="https://github.com/penrose/penrose/blob/master/assets/penrose_readme.gif?raw=true" width=500>