packages feed

braid-0.1.0.0: app/KappaView.hs

module KappaView
where

import System.Environment (getArgs)
import Data.Maybe (isJust, fromJust )
import Diagrams (QDiagram)
import Diagrams.TwoD.Types (V2)
import Diagrams.TwoD.Size (mkHeight)
import Diagrams.Backend.SVG (renderSVG, B)
import Data.Monoid (Any)
import Control.Monad (forM_)

import Braids (Braid)
import Kappa (computeKappa')
import Parse
import Braiddiagrams
import qualified Data.Map as M (keys)

main :: IO ()
main = do
        input <- getArgs
        let braid = parse input
        let imagesNumbered = zip (images braid) [1..]
        let maybeKappa = computeKappa' braid
        if isJust maybeKappa then do
            putStrLn ("Kappa is " ++ (show . fst . fromJust $ maybeKappa) ++ ".")
            forM_ imagesNumbered (\(image, number) -> 
                    renderSVG ("psiKiller" ++ (show number) ++ ".svg") (mkHeight 2000) image >>
                    putStrLn ("Canceling element printed to psiKiller" ++ (show number) ++ ".svg.")
                    )
        else putStrLn "Psi does not vanish for this braid."

images :: Braid -> [QDiagram B V2 Double Any]
images b = fmap (printCube . bigGeneratorD b) gens where
            Just (_, mors) = computeKappa' b 
            gens = M.keys $ mors