packages feed

combinat-0.2.10.1: svg/src/gen_figures.hs

-- | A script to generate the SVG figures in the documentation.
-- We use the @combinat-diagrams@ library for that.

module Main where

--------------------------------------------------------------------------------

import Math.Combinat.Partitions.Integer
import Math.Combinat.Partitions.Plane
import Math.Combinat.Partitions.NonCrossing
import Math.Combinat.Partitions.Skew
import Math.Combinat.Tableaux
import Math.Combinat.Tableaux.Skew
import Math.Combinat.LatticePaths
import Math.Combinat.Trees.Binary

import Math.Combinat.Diagrams.Partitions.Integer
import Math.Combinat.Diagrams.Partitions.Plane
import Math.Combinat.Diagrams.Partitions.NonCrossing
import Math.Combinat.Diagrams.Partitions.Skew
import Math.Combinat.Diagrams.Tableaux
import Math.Combinat.Diagrams.Tableaux.Skew
import Math.Combinat.Diagrams.LatticePaths
import Math.Combinat.Diagrams.Trees.Binary

import Diagrams.Core
import Diagrams.Prelude
import Diagrams.Backend.SVG

--------------------------------------------------------------------------------

export fpath size what = renderSVG fpath size $ pad 1.10 what

vcatSep = vcat' (with & sep .~ 1) 
hcatSep = hcat' (with & sep .~ 1) 

boxSep m xs = pad 1.05 $ vcatSep $ map hcatSep $ yys where
  yys = go xs where
    go [] = []
    go zs = take m zs : go (drop m zs) 

padding fac diag = pad fac $ centerXY diag
margin  siz diag = hcat [ strutX siz , vcat [ strutY siz , centerXY diag , strutY siz ] , strutX siz ]

--------------------------------------------------------------------------------

main = do 

  export "plane_partition.svg" (mkWidth 320) $ margin 0.05 $ drawPlanePartition3D $
    PlanePart [[5,4,3,3,1],[4,4,2,1],[3,2],[2,1],[1],[1]] 

  export "noncrossing.svg" (mkWidth 256) $ padding 1.10 $ drawNonCrossingCircleDiagram' orange True $
    NonCrossing [[3],[5,4,2],[7,6,1],[9,8]]

  export "young_tableau.svg" (mkWidth 256) $ margin 0.05 $ drawTableau $ 
    [ [ 1 , 3 , 4 , 6 , 7 ]
    , [ 2 , 5 , 8 ,10 ]
    , [ 9 ]
    ]

  let u = UpStep
      d = DownStep
      path = [ u,u,d,u,u,u,d,u,d,d,u,d,u,u,u,d,d,d,d,d,u,d,u,u,d,d ]     
  export "dyck_path.svg" (mkWidth 500) $ margin 0.05 $ drawLatticePath $ path
  -- print (pathHeight path, pathNumberOfZeroTouches path, pathNumberOfPeaks path)

  export "ferrers.svg" (mkWidth 256) $ margin 0.05 $ drawFerrersDiagram' EnglishNotation red True $
    Partition [8,6,3,3,1]

  export "bintrees.svg" (mkWidth 750) $ boxSep 7 $ map drawBinTree_ (binaryTrees 4)

  let skew = mkSkewPartition (Partition [9,7,3,2,2,1] , Partition [5,3,2,1])
  -- export "skew.svg"  (mkWidth 256) $ margin 0.05 $ drawSkewFerrersDiagram  skew
  -- export "skew2.svg" (mkWidth 256) $ margin 0.05 $ drawSkewFerrersDiagram' EnglishNotation green True (True,True) skew
  export "skew3.svg" (mkWidth 256) $ margin 0.05 $ drawSkewPartitionBoxes  EnglishNotation skew

  let skewtableau  = (semiStandardSkewTableaux 7 skew) !! 123
  export "skew_tableau.svg" (mkWidth 320) $ margin 0.05 $ drawSkewTableau' EnglishNotation blue True skewtableau

--------------------------------------------------------------------------------