{-| Module : FiniteCategories Description : An exemple of a 'dataMigration' exported with GraphViz. Copyright : Guillaume Sabbagh 2022 License : GPL-3 Maintainer : guillaumesabbagh@protonmail.com Stability : experimental Portability : portable An exemple of 'dataMigration' exported with GraphViz. Export a data migration in the directory "OutputGraphViz\/Examples\/Functor\/DataMigration". -} module Math.Functors.DataMigration.Example ( main ) where import Math.FiniteCategory import Math.FiniteCategories.SafeCompositionGraph import Math.FiniteCategories import Math.Functors.DataMigration import Math.Categories.FinSet import Math.IO.FiniteCategories.ExportGraphViz import Data.WeakSet (Set) import qualified Data.WeakSet as Set import Data.WeakSet.Safe import Data.WeakMap (Map) import qualified Data.WeakMap as Map import Data.WeakMap.Safe -- | An exemple of 'DataMigration' exported with GraphViz. main :: IO () main = do putStrLn "Start of Math.Functors.DataMigration.Example" -- let Right graphSketch = readSCGString "3\nE -s-> V\nE -t-> V" -- let Right autographSketch = readSCGString "3\nA -s-> A -s-> A = A -t-> A\nA -s-> A -t-> A = \nA -t-> A -s-> A = \n A -t-> A -t-> A = A -s-> A" -- let f = (setToList $ ob (FunctorCategory graphSketch autographSketch)) !! 7 -- --Diagram{src=graphSketch, tgt=autographSketch, omap=memorizeFunction (const.anElement.ob $ autographSketch) (ob graphSketch), mmap = weakMap (zip (setToList (arrows graphSketch)) (setToList (arrows autographSketch)))} -- catToPdf graphSketch "OutputGraphViz/Examples/Functors/DataMigration/graphSketch" -- catToPdf autographSketch "OutputGraphViz/Examples/Functors/DataMigration/autographSketch" -- diagToPdf2 f "OutputGraphViz/Examples/Functors/DataMigration/f" -- putStrLn (show f) -- let universe = ens $ set [set [1 :: Int,2]] -- let delta = (deltaFunctor universe f) -- let anInstance = anElement (ob.source $ delta) -- diagToPdf anInstance "OutputGraphViz/Examples/Functors/DataMigration/autograph1" -- diagToPdf (delta ->$ anInstance) "OutputGraphViz/Examples/Functors/DataMigration/delta_autograph1" -- let universe = ens $ set [set[], set[1], set[1 :: Int,2]] -- let pii = (piFunctor universe f) -- let anInstance = (setToList.ob.source $ delta) !! 0 -- diagToPdf anInstance "OutputGraphViz/Examples/Functors/DataMigration/graph1" -- diagToPdf (pii ->$ anInstance) "OutputGraphViz/Examples/Functors/DataMigration/pi_graph1" -- let c = V -- let d = numberCategory 2 -- let f = completeDiagram Diagram{src=c,tgt=d,omap=weakMap [(VA,2),(VB,1),(VC,1)],mmap=weakMap [(VF,IsSmallerThan 1 2),(VG,IsSmallerThan 1 2)]} let c = Parallel let d = discreteCategory (set "A") let f = completeDiagram Diagram{src=d,tgt=c,omap=weakMap [('A',ParallelA)],mmap = Map.empty} diagToPdf f "OutputGraphViz/Examples/Functors/DataMigration/functor" let universe = ens $ set [set[], set [1 :: Int,2], set [1]] let anInstance = completeDiagram Diagram{src=d,tgt=universe,omap=weakMap [('A',set [1])],mmap=Map.empty} diagToPdf anInstance "OutputGraphViz/Examples/Functors/DataMigration/anInstance" diagToPdf2 anInstance "OutputGraphViz/Examples/Functors/DataMigration/anInstance2" let pii = (piFunctor universe f) diagToPdf (pii ->$ anInstance) "OutputGraphViz/Examples/Functors/DataMigration/pi_anInstance1" diagToPdf2 (pii ->$ anInstance) "OutputGraphViz/Examples/Functors/DataMigration/pi_anInstance2" putStrLn $ show (pii ->$ anInstance) let sigmaa = (sigmaFunctor universe f) diagToPdf (sigmaa ->$ anInstance) "OutputGraphViz/Examples/Functors/DataMigration/sigma_anInstance1" diagToPdf2 (sigmaa ->$ anInstance) "OutputGraphViz/Examples/Functors/DataMigration/sigma_anInstance2" putStrLn $ show (sigmaa ->$ anInstance) putStrLn "End of Math.Functors.DataMigration.Example"