packages feed

combinat-diagrams-0.2: test/Test.hs

module Main where

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

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

import Math.Combinat.Diagrams

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

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

svgSize = mkWidth 1000

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

boxSep xs = myPad 1.10 $ vcatSep $ map hcatSep $ yys where
  nn = length xs
  m = max 1 (ceiling $ sqrt $ (fromIntegral $ length xs :: Double))
  yys = go xs where
    go [] = []
    go zs = take m zs : go (drop m zs) 

myPad s = pad s . centerXY

main = do
  renderSVG "svg/dyckpaths.svg" svgSize $ boxSep $ map drawLatticePath $ dyckPaths 5
  renderSVG "svg/latpaths.svg"  svgSize $ boxSep $ map (drawLatticePath' UpRight blue True) $ latticePaths (9,3)

  renderSVG "svg/partitions.svg" svgSize $ boxSep $ map (drawFerrersDiagram' EnglishNotationCCW red True) $ partitions 7

  let part = mkPartition [4,3,1]
  renderSVG "svg/tableaux.svg" svgSize $ boxSep $ map (drawTableau' EnglishNotation red) $ standardYoungTableaux part
  renderSVG "svg/tableau1.svg" svgSize $ boxSep $ map (drawTableau' EnglishNotation red) $ 
    [ [[123,57,9,8,88],[99,6,66,2],[1,17,3]] 
    , [[1,2,3,4,5],[6,7,8],[9,10]]
    ]

  renderSVG "svg/noncrossing.svg" svgSize $ boxSep $ map (drawNonCrossingCircleDiagram' green True) $ nonCrossingPartitions 5

  renderSVG "svg/planepart.svg" svgSize $ boxSep $ map drawPlanePartition3D $ 
    [ PlanePart [[5,4,3,3,1],[4,4,2,1],[3,2],[2,1],[1],[1],[1]] 
    , PlanePart [[6,2,2,1,1],[3,1,1,1],[1]] 
    , PlanePart [[2,1,1,1,1],[1,1,1,1],[1]] 
    , PlanePart [[2,1],[1]] 
    , PlanePart [[1,1,1,1,1],[1,1,1,1],[1]] 
    , PlanePart [[6,2,2,1,1],[3,1,1,1],[1]] 
    , PlanePart [[1]] 
    ]

  renderSVG "svg/bintree.svg" svgSize $ boxSep $ map (drawBinTree_) $ binaryTrees 5

  let skew1 = mkSkewPartition (Partition [8,7,3,2,2,1] , Partition [5,3,3])
      skew2 = mkSkewPartition (Partition [9,7,3,2,2,1] , Partition [5,3,2,1])
  renderSVG "svg/skew.svg" svgSize $ boxSep $ 
    [ drawSkewFerrersDiagram  skew1
    , drawSkewFerrersDiagram' FrenchNotation green True (True,True) skew1
    , drawSkewPartitionBoxes  EnglishNotationCCW skew1
    , drawSkewFerrersDiagram  skew2
    , drawSkewFerrersDiagram' FrenchNotation green True (True,True) skew2
    , drawSkewPartitionBoxes  EnglishNotationCCW skew2
    ]

  let skewtableau  = (semiStandardSkewTableaux 7 skew2) !! 123
      skewtableau2 = (semiStandardSkewTableaux 6 skew1) !! 223
  renderSVG "svg/skewtableau.svg" svgSize $ boxSep $ 
    [ drawSkewTableau  skewtableau
    , drawSkewTableau' FrenchNotation red True skewtableau2
    ]