MagicHaskeller 0.9.6.7 → 0.9.6.8
raw patch · 23 files changed
+311/−123 lines, 23 filesdep +haskell-src-extsdep ~base
Dependencies added: haskell-src-exts
Dependency ranges changed: base
Files
- Control/Monad/Search/Combinatorial.lhs +12/−0
- MagicHaskeller.cabal +38/−6
- MagicHaskeller.lhs +4/−3
- MagicHaskeller/CGI.lhs +1/−1
- MagicHaskeller/CoreLang.lhs +1/−1
- MagicHaskeller/ExecuteAPI610.hs +3/−2
- MagicHaskeller/ExpToHtml.hs +1/−1
- MagicHaskeller/FMType.lhs +7/−0
- MagicHaskeller/GetTime.hs +7/−4
- MagicHaskeller/LibExcel.hs +5/−0
- MagicHaskeller/LibTH.hs +1/−1
- MagicHaskeller/MHTH.lhs +1/−1
- MagicHaskeller/PriorSubsts.lhs +18/−0
- MagicHaskeller/ProgGen.lhs +0/−2
- MagicHaskeller/ProgGenSF.lhs +4/−0
- MagicHaskeller/ProgramGenerator.lhs +0/−1
- MagicHaskeller/ReadHsExtsType.hs +56/−0
- MagicHaskeller/ReadHsType.hs +1/−1
- MagicHaskeller/ReadTHType.lhs +15/−4
- MagicHaskeller/ReadTypeRep.hs +3/−0
- MagicHaskeller/SimpleServer.hs +128/−94
- changelog.txt +4/−0
- xlmap +1/−1
Control/Monad/Search/Combinatorial.lhs view
@@ -16,6 +16,9 @@ #ifdef HOOD import Observe #endif+#ifdef SEMIGROUP+import Data.Semigroup+#endif import Data.Monoid -- Matrix, and any (MonadPlus a) => a, should be a Monoid. #ifdef QUICKCHECK@@ -28,6 +31,15 @@ import Data.Array -- import AList -- append list used as the Bag++#ifdef SEMIGROUP+instance Semigroup (Matrix a) where+ (<>) = mplus+instance Semigroup (Recomp a) where+ (<>) = mplus+instance (Functor m, Monad m) => Semigroup (RecompT m a) where+ (<>) = mplus+#endif -- instance (MonadPlus m) => Monoid (m a) where instance Monoid (Matrix a) where
MagicHaskeller.cabal view
@@ -1,5 +1,5 @@ Name: MagicHaskeller-Version: 0.9.6.7+Version: 0.9.6.8 Cabal-Version: >= 1.8 License: BSD3 License-file: LICENSE @@ -10,14 +10,14 @@ bug-reports: mailto:skata@cs.miyazaki-u.ac.jp Synopsis: Automatic inductive functional programmer by systematic search Description: MagicHaskeller is an inductive functional programming system for Haskell.- This package contains the MagicHaskeller library, which can be used within GHCi or as an API for inductive program synthesis.- It also contains the MagicHaskeller executable that is a standalone synthesis program which can be used interactively or as a backend server,- and the MagicHaskeller.cgi executable that is a CGI frontend for providing the Web interface.+ This package contains the MagicHaskeller library, which can be used within GHCi or as an API for inductive program synthesis.+ It also contains the MagicHaskeller executable that is a standalone synthesis program which can be used interactively or as a backend server,+ and the MagicHaskeller.cgi executable that is a CGI frontend for providing the Web interface. Build-Type: Simple Category: Language data-files: ExperimIOP.hs MagicHaskeller/predicates MagicHaskeller/predicatesAug2014 MagicHaskeller.conf MagicHaskeller/predicatesServed primitives.txt Extra-source-files: xlmap changelog.txt-Tested-with: GHC == 7.6.3, GHC == 7.10.3, GHC == 8.0.2+Tested-with: GHC == 7.6.3, GHC == 7.10.3, GHC == 8.0.2, GHC == 8.4.4 Flag TFRANDOM Description: Use the tf-random package instead of the random package@@ -31,6 +31,11 @@ Description: Enable to read a component library file Default: True +-- This is being introduced. Not practical without parsers for classes and contexts.+Flag READFILEEXTS+ Description: Enable to read a component library file using haskell-src-exts+ Default: False+ Flag DEBUG Description: Force typechecking at each dynamic application Default: False@@ -39,12 +44,16 @@ Description: Find Network.URI in network-uri rather than in network < 2.6 (This is a workaround for the changes made in those packages.) Default: True +Flag SEMIGROUP+ Description: Introduce Semigroup as the superclass of Monoid.+ Default: True+ -- Flag ForcibleTO -- Flag Debug -- Flag Benchmark Library- Build-depends: time, template-haskell, base >= 4 && < 5, syb, containers, array, random, directory, bytestring, mtl, html, pretty, hashable+ Build-depends: time, template-haskell, base >= 4 && < 5, syb, containers, array, random, directory, bytestring, mtl, html, pretty, hashable, transformers Exposed-modules: MagicHaskeller, Control.Monad.Search.Combinatorial, Control.Monad.Search.Best, MagicHaskeller.ProgramGenerator, MagicHaskeller.ProgGen, MagicHaskeller.ProgGenSF, MagicHaskeller.ProgGenSFIORef, MagicHaskeller.Expression, MagicHaskeller.LibTH, MagicHaskeller.Analytical, MagicHaskeller.Options, MagicHaskeller.Classification, MagicHaskeller.GetTime, MagicHaskeller.Minimal, MagicHaskeller.IOGenerator, MagicHaskeller.FastRatio, MagicHaskeller.LibExcel, MagicHaskeller.CoreLang, MagicHaskeller.Individual, MagicHaskeller.PolyDynamic, MagicHaskeller.Instantiate, MagicHaskeller.TICE Other-modules: MagicHaskeller.MemoToFiles, MagicHaskeller.ShortString, @@ -74,6 +83,11 @@ cpp-options: -DHASKELLSRC Other-modules: MagicHaskeller.ReadHsType + if flag(READFILEEXTS)+ Build-depends: haskell-src-exts+ cpp-options: -DHASKELLSRCEXTS+ Other-modules: MagicHaskeller.ReadHsExtsType+ if flag(DEBUG) cpp-options: -DREALDYNAMIC @@ -82,6 +96,12 @@ else Build-depends: network < 2.6, network-uri < 2.6 + if flag(SEMIGROUP)+ Build-depends: base >= 4.11+ cpp-options: -DSEMIGROUP+ else+ Build-depends: base < 4.11+ Executable MagicHaskeller Main-is: Backend.hs Build-depends: MagicHaskeller, time, template-haskell, base >= 4 && < 5, syb, containers, array, random, directory, bytestring, mtl, html, pretty, hashable, process, monad-par, transformers, abstract-par, ghc-paths, ghc@@ -114,6 +134,12 @@ else Build-depends: network < 2.6, network-uri < 2.6 + if flag(SEMIGROUP)+ Build-depends: base >= 4.11+ cpp-options: -DSEMIGROUP+ else+ Build-depends: base < 4.11+ -- It is strongly recommended to use a UNIX server for the CGI frontend. -- Non-UNIX servers cannot use mueval, which means the functionality of generating input/output examples is not available. Executable MagicHaskeller.cgi@@ -139,3 +165,9 @@ Build-depends: network >= 2.6, network-uri >= 2.6 else Build-depends: network < 2.6, network-uri < 2.6++ if flag(SEMIGROUP)+ Build-depends: base >= 4.11+ cpp-options: -DSEMIGROUP+ else+ Build-depends: base < 4.11
MagicHaskeller.lhs view
@@ -60,7 +60,7 @@ -- | These are versions for 'ProgramGeneratorIO'. mkPGIO, mkPGXOptIO, -#ifdef HASKELLSRC+#if defined HASKELLSRC || defined HASKELLSRCEXTS -- *** Alternative way to create your program generator algorithm -- | 'load' and 'f' provides an alternative scheme to create program generator algorithms. load, f,@@ -134,6 +134,8 @@ import Language.Haskell.TH as TH #ifdef HASKELLSRC import MagicHaskeller.ReadHsType(readHsTypeSigs)+#elif defined HASKELLSRCEXTS+import MagicHaskeller.ReadHsExtsType(readHsTypeSigs) #endif import MagicHaskeller.TyConLib import qualified Data.Map as Map@@ -191,7 +193,6 @@ import Control.Concurrent.MVar import Control.Concurrent -import Debug.Trace \end{code} \begin{code}@@ -512,7 +513,7 @@ zipAppend xss [] = xss zipAppend (xs:xss) (ys:yss) = (xs++ys) : zipAppend xss yss -#ifdef HASKELLSRC+#if defined HASKELLSRC || defined HASKELLSRCEXTS -- | 'load' loads a component library file. load :: FilePath -> TH.ExpQ -- ^ This becomes @[Primitive]@ when spliced.
MagicHaskeller/CGI.lhs view
@@ -99,7 +99,7 @@ " </HEAD>" ++ " <BODY>" ++ " <H1> " ++ configToTitle config ++ " </H1>" ++- " <div id='version' align='right'>(CGI frontend version " ++ verInfo ++ ") (<a href='?predicate=:version'>Identify the backend version</a>)</div>" +++ " <div id='version' align='right'>(CGI frontend version " ++ verInfo ++ ") (<a href='?predicate=%3Aversion'>Identify the backend version</a>)</div>" ++ " Specify a function f by writing a predicate as a boolean-valued expression. You will get functions generalizing the specification.<BR>" ++ predicateBox (myPath config) "90" showAbsents predicate ++ (case computerLanguage config of
MagicHaskeller/CoreLang.lhs view
@@ -312,7 +312,7 @@ = let hsx0 = x2hsx dep fdep e0 hsx1 = x2hsx dep fdep e1 n = primId p- in case PD.dynExp (vl ! n) of + in case PD.dynExp (vl!n) of e@(VarE name) | head base `elem` "!@#$%&*+./<=>?\\^|-~" -> InfixE (Just hsx0) (actualVarName base) (Just hsx1) | otherwise -> (actualVarName base `AppE` hsx0) `AppE` hsx1
MagicHaskeller/ExecuteAPI610.hs view
@@ -44,7 +44,7 @@ import Type (pprType, Type) import CoreLint (lintUnfolding)-import VarSet (varSetElems)+-- import VarSet (varSetElems) import Panic (panic) import Var -- (Var(..))@@ -332,7 +332,8 @@ noLoc $ #endif HsValBinds (ValBindsIn (Bag.unitBag (HsUtils.mk_easy_FunBind noSrcSpan (Unqual $ mkOccName OccName.varName "__cmCompileExpr") [] expr)) [])-thExpToLHsExpr :: HscEnv -> TH.Exp -> HsExpr.LHsExpr RdrName.RdrName+-- thExpToLHsExpr :: HscEnv -> TH.Exp -> HsExpr.LHsExpr RdrName.RdrName -- for old versions of GHC API+-- thExpToLHsExpr :: HscEnv -> TH.Exp -> HsExpr.LHsExpr GhcPs -- for new versions of GHC API thExpToLHsExpr hscEnv e = case Convert.convertToHsExpr noSrcSpan e of #if __GLASGOW_HASKELL__ >= 706 Left msg -> error $ showSDoc (hsc_dflags hscEnv) msg
MagicHaskeller/ExpToHtml.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP, TemplateHaskell #-}+{-# LANGUAGE CPP, TemplateHaskell, PatternGuards #-} module MagicHaskeller.ExpToHtml(QueryOptions(..), defaultQO, review, expToPlainString, expSigToString, refer, pprnn, annotateFree, annotateString, Language(..)) where
MagicHaskeller/FMType.lhs view
@@ -11,6 +11,9 @@ -- import CoreLang +#ifdef SEMIGROUP+import Data.Semigroup+#endif import Data.Monoid data FMType a = EmptyFMT@@ -89,6 +92,10 @@ unitFMT x t = updateFMT undefined x t EmptyFMT -- used by FMSubst.lhs +#ifdef SEMIGROUP+instance Semigroup a => Semigroup (FMType a) where+ (<>) = unionFMT (<>)+#endif instance Monoid a => Monoid (FMType a) where mappend = unionFMT mappend mempty = EmptyFMT
MagicHaskeller/GetTime.hs view
@@ -7,6 +7,7 @@ import Data.Time import System.IO import Control.Monad(liftM2)+import Control.Monad.IO.Class batchWrite :: FilePath -> [IO a] -> IO () batchWrite filename ios = do is <- batchRun ios@@ -16,10 +17,12 @@ batchRun [] = return [] batchRun (io:ios) = liftM2 (:) (fmap snd $ time io) (batchRun ios) -time :: IO a -> IO (a, Integer)-time act = do beginCT <- getCurrentTime- begin <- getCPUTime- result <- act+time :: MonadIO m => m a -> m (a, Integer)+time act = do+ beginCT <- liftIO getCurrentTime+ begin <- liftIO getCPUTime+ result <- act+ liftIO $ do end <- getCPUTime endCT <- getCurrentTime hPutStrLn stderr (show (diffUTCTime endCT beginCT) ++ " in real,")
MagicHaskeller/LibExcel.hs view
@@ -20,6 +20,11 @@ import qualified Data.IntMap as IM -- import Data.Hashable +#ifdef SEMIGROUP+import Prelude hiding ((<>))+#endif++ -- whether succ is used only for numbers or not succOnlyForNumbers = True -- This is True for Excel.
MagicHaskeller/LibTH.hs view
@@ -1,7 +1,7 @@ -- -- (c) Susumu Katayama ---{-# OPTIONS -XTemplateHaskell -XNoMonomorphismRestriction -cpp #-}+{-# OPTIONS -XTemplateHaskell -XNoMonomorphismRestriction -cpp -XRankNTypes #-} module MagicHaskeller.LibTH(module MagicHaskeller.LibTH, module MagicHaskeller) where import MagicHaskeller
MagicHaskeller/MHTH.lhs view
@@ -7,7 +7,7 @@ {-# OPTIONS -XTemplateHaskell -cpp #-} module MagicHaskeller.MHTH(expToExpExp, typeToExpType, decsToExpDecs) where -import Language.Haskell.TH+import Language.Haskell.TH hiding (plainTV) -- Since template-haskell-2.12.0.0, TH.Lib.plainTV is exported to TH. Its definition is plainTV=PlainTV. import System.IO.Unsafe(unsafePerformIO) import Data.IORef -- import Types
MagicHaskeller/PriorSubsts.lhs view
@@ -15,6 +15,9 @@ -- import Control.Monad.Search.BalancedMerge import MagicHaskeller.Types import Data.Array.IArray+#ifdef SEMIGROUP+import Data.Semigroup+#endif import Data.Monoid import MagicHaskeller.T10(mergeWithBy) @@ -85,12 +88,27 @@ mplus = distPS mplus instance Delay m => Delay (PriorSubsts m) where delay (PS f) = PS $ \s i -> delay $ f s i++#ifdef SEMIGROUP+instance Semigroup a => Semigroup (PriorSubsts [] a) where+ (<>) = distPS $ mergeWithBy (\(xs,k,i) (ys,_,_) -> (xs <> ys, k, i)) (\ (_,k,_) (_,l,_) -> k `compare` l)+instance Semigroup a => Semigroup (PriorSubsts Recomp a) where+ PS f <> PS g = PS $ \s i -> Rc $ \dep -> mergeWithBy (\(xs,k,i) (ys,_,_) -> (xs <> ys, k, i)) (\ (_,k,_) (_,l,_) -> k `compare` l) (unRc (f s i) dep) (unRc (g s i) dep)++instance Semigroup a => Monoid (PriorSubsts [] a) where+ mempty = PS (\_ _ -> [])+ mappend = (<>)+instance Semigroup a => Monoid (PriorSubsts Recomp a) where+ mempty = PS (\_ _ -> mzero)+ mappend = (<>)+#else instance Monoid a => Monoid (PriorSubsts [] a) where mempty = PS (\_ _ -> []) mappend = distPS $ mergeWithBy (\(xs,k,i) (ys,_,_) -> (xs `mappend` ys, k, i)) (\ (_,k,_) (_,l,_) -> k `compare` l) instance Monoid a => Monoid (PriorSubsts Recomp a) where mempty = PS (\_ _ -> mzero) PS f `mappend` PS g = PS $ \s i -> Rc $ \dep -> mergeWithBy (\(xs,k,i) (ys,_,_) -> (xs `mappend` ys, k, i)) (\ (_,k,_) (_,l,_) -> k `compare` l) (unRc (f s i) dep) (unRc (g s i) dep)+#endif instance Functor m => Functor (PriorSubsts m) where fmap f (PS g) = PS (\s i -> fmap (\ (x, s', i') -> (f x, s', i')) (g s i))
MagicHaskeller/ProgGen.lhs view
@@ -31,8 +31,6 @@ import Debug.Trace -import Data.Monoid- import MagicHaskeller.MemoToFiles hiding (freezePS,fps) traceTy _ = id
MagicHaskeller/ProgGenSF.lhs view
@@ -279,6 +279,10 @@ -- quantifyはmemo先で既にやられているので不要 applyPS ty +#ifdef SEMIGROUP+instance Semigroup BitSet where+ (<>) = (.|.)+#endif instance Monoid BitSet where mappend = (.|.) mempty = 0
MagicHaskeller/ProgramGenerator.lhs view
@@ -25,7 +25,6 @@ import Debug.Trace -import Data.Monoid import System.Random import MagicHaskeller.MyDynamic
+ MagicHaskeller/ReadHsExtsType.hs view
@@ -0,0 +1,56 @@+-- ReadHsTypeでhaskell-srcの代わりにhaskell-src-extsを使ったもの.+-- 実際の所,これを使うより,ghcにtextとしてreadableなhiを出力させてparseするなり,module GHCで同様のことをするほうが簡単で柔軟性がありそう.+-- exportされている関数のみを使用するべきな訳で.+-- あと,そもそもまずはclass関係のパーサをちゃんと作るべき.+module MagicHaskeller.ReadHsExtsType(readHsTypeSigs) where+import Language.Haskell.TH as TH+import Language.Haskell.Exts+import Data.List++import MagicHaskeller.ReadTHType(plainTV)++-- | @readHsTypeSigs@ reads a module string and returns an Exp that can be supplied to MagicHaskeller.p+readHsTypeSigs :: String -> TH.Exp+readHsTypeSigs str = TupE [ mkSigE hsname hsqty+ | TypeSig _loc hsnames hsqty <- readHsDecls str+ , hsname <- hsnames ]++mkSigE :: Name l -> Type l -> TH.Exp+mkSigE hsname hsqty = SigE (VarE $ hsNameToTHName hsname) (hsTypeToTHType hsqty)++hsTypeToTHType :: Type -> TH.Type+-- hsQTypeToTHType (HsQualType cxt hsty) = ForallT (map (plainTV . hsNameToTHName) $ map head $ group $ sort $ varnames [] hsty) (map hsAsstToTHType cxt) (hsTypeToTHType hsty) -- This is incorrect since template-haskell-2.4*, so just forget the contexts. +hsTypeToTHType (TyForall _l Nothing [] hsty) = ForallT (map (plainTV . hsNameToTHName) $ map head $ group $ sort $ varnames [] hsty) [] (hsTypeToTHType hsty)+hsTypeToTHType (TyForall _l _bnd _cxt _hsty) = error "Contexts and type binding are not supported yet."+hsTypeToTHType (TyTuple _l Boxed hts) = foldl AppT (TupleT (length hts)) (map hsTypeToTHType hts)+hsTypeToTHType (TyFun _l ht0 ht1) = ArrowT `AppT` (hsTypeToTHType ht0) `AppT` (hsTypeToTHType ht1)+hsTypeToTHType (TyApp _l ht0 ht1) = (hsTypeToTHType ht0) `AppT` (hsTypeToTHType ht1)+hsTypeToTHType (TyCon _l hsqname) = hsQNameToTHType hsqname+hsTypeToTHType (TyVar _l hsname) = VarT $ hsNameToTHName hsname+-- The above definition should be exhaustive+varnames vs (TyTuple _l _ hts) = foldl varnames vs hts+varnames vs (TyFun _l ht0 ht1) = varnames (varnames vs ht0) ht1+varnames vs (TyApp _l ht0 ht1) = varnames (varnames vs ht0) ht1+varnames vs (TyCon _l _) = vs+varnames vs (TyVar _l hsname) = hsname:vs++hsNameToTHName = mkName . hsNameToString++hsNameToString (Ident _l str) = str+hsNameToString (Symbol _l str) = str -- Was: '(':str++")"++hsAsstToTHType :: HsAsst -> TH.Type+hsAsstToTHType (hsqname, hstypes) = foldl AppT (hsQNameToTHType hsqname) (map hsTypeToTHType hstypes)++hsQNameToTHType (UnQual _l hsname) = ConT $ hsNameToTHName hsname+hsQNameToTHType (Qual _l _ hsname) = ConT $ hsNameToTHName hsname -- qualifications over type names are ignored for now.+hsQNameToTHType (Special _l (FunCon _l)) = ArrowT+hsQNameToTHType (Special _l (UnitCon _l)) = ConT $ mkName "()"+hsQNameToTHType (Special _l (ListCon _l)) = ListT+hsQNameToTHType (Special _l (TupleCon _l Boxed n)) = TupleT n+++readHsDecls :: String -> [HsDecl]+readHsDecls src = case parseFileContents src of ParseOk (Module _loc _namEx _pragma _imports decls) -> decls+ ParseFailed (SrcLoc _fn line column) str+ -> error (str ++ " in " ++ shows line ":" ++ shows column " of\n" ++ src)
MagicHaskeller/ReadHsType.hs view
@@ -1,5 +1,5 @@ module MagicHaskeller.ReadHsType(readHsTypeSigs) where-import Language.Haskell.TH as TH+import Language.Haskell.TH as TH hiding (plainTV) -- Since template-haskell-2.12.0.0, TH.Lib.plainTV is exported to TH. Its definition is plainTV=PlainTV. import Language.Haskell.Syntax import Language.Haskell.Parser import Data.List
MagicHaskeller/ReadTHType.lhs view
@@ -8,18 +8,29 @@ import MagicHaskeller.Types as Types import MagicHaskeller.TyConLib-import Language.Haskell.TH as TH+import Language.Haskell.TH as TH hiding (plainTV) -- Since template-haskell-2.12.0.0, TH.Lib.plainTV is exported to TH. Its definition is plainTV=PlainTV. import Data.Array((!), inRange, bounds) import Data.Char(ord,chr)-import Data.List(nub)+import Data.List(nub, union) import Data.Map(lookup) showTypeName = TH.nameBase -- Use the unqualified name to avoid confusion because Data.Typeable.tyConString shows the unqualified name for types defined in the Standard Hierarchical Library (though the qualified name is shown when Typeable is derived). -- showTypeName = show -- maybe in future, when TypeRep can be shown qualified. --- MyDynamicでしか使われていないので,ForallTは単に無視する.PolyDynamicのチェックがちょっと緩くなるだけ.+-- Since GHC-8.4, ForallT is not inserted by default if the outermost forall is omitted. So thTypeToType has to bind unbound variables.+unboundTHTyvars vs (ForallT bs [] t) = unboundTHTyvars (vs++map tyVarBndrToName bs) t+unboundTHTyvars _ (ForallT _ (_:_) t) = error "Type classes are not supported yet."+unboundTHTyvars _ (TupleT _) = []+unboundTHTyvars _ ListT = []+unboundTHTyvars _ ArrowT = []+unboundTHTyvars vs (AppT ht0 ht1) = unboundTHTyvars vs ht0 `union` unboundTHTyvars vs ht1+unboundTHTyvars _ (ConT name) = []+unboundTHTyvars vs (VarT name) = case Prelude.lookup name $ zip vs [0..] of Nothing -> [name]+ Just _ -> []+ thTypeToType :: TyConLib -> TH.Type -> Types.Type-thTypeToType tcl t = normalize $ thTypeToType' tcl [] t+thTypeToType tcl t = -- trace ("thTypeToType " ++ show t) $ -- pprint t)+ normalize $ thTypeToType' tcl (unboundTHTyvars [] t) t thTypeToType' tcl vs (ForallT bs [] t) = thTypeToType' tcl (vs++map tyVarBndrToName bs) t thTypeToType' tcl _ (ForallT _ (_:_) t) = error "Type classes are not supported yet." thTypeToType' tcl _ (TupleT n) = TC (tuple tcl n)
MagicHaskeller/ReadTypeRep.hs view
@@ -61,9 +61,12 @@ -- Do the following, because (mkTyCon "(->)") may or may not be equivalent to TyCon for functions in general. funTyCon :: Data.Typeable.TyCon+funTyCon = typeRepTyCon (typeOf (&&)) +{- mkTyConApp and mkTyCon3 have been obsoleted since base-4.10. funTyCon = typeRepTyCon (mkFunTy undefTC undefTC) -- undef = error "funTyCon" -- Dunno why, but seemingly mkFunTy is strict. undefTC = mkTyConApp (mkTyCon3 "base" "Prelude" "Hoge") []+-} trToTHType :: TypeRep -> TH.Type trToTHType tr = case splitTyConApp tr of
MagicHaskeller/SimpleServer.hs view
@@ -24,7 +24,10 @@ import Network import System.IO import System.IO.Error(isEOFError)+ import Control.Exception+--import Control.Monad.Catch+ import Data.Char(isAlphaNum, isSpace) import Text.Html(stringToHtmlString) @@ -51,7 +54,7 @@ import Control.Monad.Par.Class import Control.Monad.Par.IO-import Control.Monad.IO.Class(liftIO)+import Control.Monad.IO.Class(MonadIO, liftIO) -- import Control.Concurrent.ParallelIO(stopGlobalPool) @@ -103,7 +106,7 @@ , Option [] ["ratio-only"] (NoArg RatioOnly) "use the library only including (Ratio Int)-related functions. This is introduced for debugging, but there may be other uses. This overrides -b, -w, --individual, and -2." , Option ['2'] ["with-double"] (NoArg WithDouble) "use the library with Double-related functions. This requires more memory, but fractional numbers become available. This overrides -b, -w, --ratio-only, and --individual." , Option [] ["individual"] (ReqArg Individual "FILEPATH") "itemize library functions and their priorities in FILEPATH. This overrides -b, -w, --ratio-only, and -2. Note that only functions (and non-functions) appearing in the bundled primitives.txt can be used unless you hack the source."- , Option [] ["dump-primitives"] (NoArg DumpPrimitives) "dump a sample primitive file (to be used with --dump-primitives=...) to stdout and exit. The bundled primitives.txt is more user-friendly, but this option is useful if you hack the source and add some primitives."+ , Option [] ["dump-primitives"] (NoArg DumpPrimitives) "dump a sample primitive file (to be used with --individual=...) to stdout and exit. The bundled primitives.txt is more user-friendly, but this option is useful if you hack the source and add some primitives." , Option ['a'] ["absents"] (NoArg WithAbsents) "generate functions with unused arguments in addition to other useful ones" #if __GLASGOW_HASKELL__ >= 706 , Option [] ["default"] (OptArg Default "DEFAULT_TYPES") "default declaration for type defaulting (--default='(Int,Integer,Double, Ratio Int, Char,(),String)' by default). The outermost parens can be omitted."@@ -182,9 +185,10 @@ dump = putStrLn $ unlines $ "## Lines starting with # will be ignored, so you can exclude individual functions by commenting them out. The number at the beginning of each line represents the priority, where 0 means the most prioritized." : map ("0 "++) availableNames -main'' versionString so = do+main'' versionString so = withSocketsDo $ do hPutStrLn stderr versionString qhandle <- openFile queryOut AppendMode+ hSetBuffering qhandle LineBuffering beginCT <- getCurrentTime hPutStrLn stderr ("started at " ++ show beginCT) @@ -203,66 +207,65 @@ (PGExcel, Just sz) -> liftIO $ mkPgExcels sz (PGIndividual file, mb) -> do cs <- readFile file prioritizedNamesToPg mb $ map parsePrioritizedName $ filter ((/='#').head) $ filter (not.null) $ lines cs-- hscEnv <- prepareGHCAPI ["MagicHaskeller.Minimal","MagicHaskeller.FastRatio"] -- (Fast)Ratio must be here if Ratio is referred by the default declaration.+ runGhc (Just libdir) $ do+ prepareGHCAPI ["MagicHaskeller.Minimal","MagicHaskeller.FastRatio"] -- (Fast)Ratio must be here if Ratio is referred by the default declaration. #if __GLASGOW_HASKELL__ >= 706- hscEnv <- case defaultTypes so of Nothing -> return hscEnv- Just def -> declareDefaults hscEnv def+ case defaultTypes so of+ Nothing -> return ()+ Just def -> declareDefaults def #endif- let stat = (versionString, qhandle, so, pgf, hscEnv)- case (parallelTraining so, sequentialTraining so) of- (Just fp, Just fs) -> do -- In this case, we make sure sequantial training starts after all the parallel training processes have finished. (The sequential training will be done for testing and benchmarking purposes.)- trainPara stat fp- trainSeq stat fs- (Just fp, Nothing) -> do -- In this case, every synthesis should be done in parallel. The service is started while training, but we prefer to be notified when all the training processes finish.- forkIO $ trainPara stat fp- return ()- (Nothing, Just fs) -> trainSeq stat fs- (Nothing, Nothing) -> return ()- hSetBuffering qhandle LineBuffering- case howToServe so of- Network pid ->- withSocketsDo $ do+ let stat = (versionString, qhandle, so, pgf)+ mbPara <- mbParse (postprocessor so) $ parallelTraining so+-- mbSeq <- mbParse (postprocessor so) $ sequentialTraining so+ case (mbPara, sequentialTraining so) of+ (Just res, Just fp) -> do -- In this case, we make sure sequantial training starts after all the parallel training processes have finished. (The sequential training will be done for testing and benchmarking purposes.)+ liftIO $ trainPara stat res+ trainSeq stat fp+ (Just res, Nothing) -> do -- In this case, every synthesis should be done in parallel. The service is started while training, but we prefer to be notified when all the training processes finish.+ liftIO $ forkIO $ trainPara stat res+ return ()+ (Nothing, Just fp) -> trainSeq stat fp+ (Nothing, Nothing) -> return ()+ case howToServe so of+ Network pid -> do #ifdef UNIX- installHandler sigPIPE Ignore Nothing -- as suggested by /usr/share/doc/libghc6-network-doc/html/Network.html+ liftIO $ installHandler sigPIPE Ignore Nothing -- as suggested by /usr/share/doc/libghc6-network-doc/html/Network.html #endif- socket <- listenOn pid- loop stat socket- STDIO -> interactive stat- PS -> do pgn <- getProgName+ socket <- liftIO $ listenOn pid+ loop stat socket+ STDIO -> interactive stat+ PS -> liftIO $ do+ pgn <- getProgName system $ "ps u -C "++pgn return () -- stopGlobalPool- NoService -> return () -- stopGlobalPool+ NoService -> return () -- stopGlobalPool parsePrioritizedName :: String -> (Int,String) parsePrioritizedName str = case reads str of [] -> error "error while parsing the primitives file." [(i,s)] -> (i, dropWhile isSpace s) #if __GLASGOW_HASKELL__ >= 706-declareDefaults hscEnv str- = runGhc (Just libdir) $ do- setSession hscEnv+declareDefaults str = do+ hscEnv <- getSession+# if __GLASGOW_HASKELL__ >= 802+ tupTy <- exprType TM_Default $ "undefined :: (" ++ str ++ ")"+# else tupTy <- exprType $ "undefined :: (" ++ str ++ ")"+# endif case splitTyConApp_maybe tupTy of Nothing -> error $ str ++ " : invalid default type sequence"- Just (_tuptc, defaultTypes) -> setSession hscEnv{hsc_IC = (hsc_IC hscEnv){ic_default = Just defaultTypes}} >> getSession+ Just (_tuptc, defaultTypes) -> setSession hscEnv{hsc_IC = (hsc_IC hscEnv){ic_default = Just defaultTypes}} #endif -waitUntil0 :: MVar Int -> IO Int-waitUntil0 mv = do i <- readMVar mv- yield- if (i>0) then waitUntil0 mv else return i- loop stat socket = do- (handle, hostname, _portnum) <- accept socket- hPutStr stderr $ "Connection from " ++ hostname ++ ".\n"- tid <- forkIO $ do hSetBuffering handle LineBuffering- answerHIO stat handle handle- hPutStrLn stderr "closing"- hClose handle+ (handle, hostname, _portnum) <- liftIO $ accept socket+ liftIO $ hPutStr stderr $ "Connection from " ++ hostname ++ ".\n"+ liftIO $ hSetBuffering handle LineBuffering+ answerHIO True stat handle handle loop stat socket + {- pgfの計算を入れんといかん. -- same as main, with option `--interactive --no-training' mainstd = do hscEnv <- prepareGHCAPI ["MagicHaskeller.Minimal"]@@ -271,72 +274,81 @@ interactive qhandle defaultSO pgf hscEnv -} -interactive stat = sequence_ $ repeat $ hPutStrLn stderr "\\f -> ?" >> answerHIO stat stdin stdout+interactive stat = processSeq "\\f -> ?" stat stdin+{-+interactive stat = do liftIO (hPutStrLn stderr "\\f -> ?")+ cont <- answerHIO False stat stdin stdout+ when cont $ interactive stat+-} +mbParse postproc Nothing = return Nothing+mbParse postproc (Just fp) = tryOpening fp (\e -> couldNotOpen fp >> return Nothing)+ (\h -> fmap Just $ parseHandle postproc h)++tryOpening :: MonadIO m => FilePath -> (IOException -> IO a) -> (Handle -> m a) -> m a tryOpening fp onException onSuccess = do- r <- try $ openFile fp ReadMode+ r <- liftIO $ try $ openFile fp ReadMode case r :: Either IOException Handle of Left e -> do #ifdef CABAL- fn <- getDataFileName ("MagicHaskeller/"++fp)- s <- try $ openFile fn ReadMode- either onException onSuccess (s :: Either IOException Handle)+ fn <- liftIO $ getDataFileName ("MagicHaskeller/"++fp)+ s <- liftIO $ try $ openFile fn ReadMode+ either (liftIO . onException) onSuccess (s :: Either IOException Handle) #else- onException e+ liftIO $ onException e #endif Right h -> onSuccess h trainSeq stat fp = do- tryOpening fp (\e -> hPutStrLn stderr ("An exception occurred while opening `"++fp++"'. The learner has not been trained sequentially beforehand."))+ tryOpening fp (\e -> couldNotOpen fp) (\h -> do time $ do- processTrainers (preferPlain stat) h- hPutStrLn stderr "In total,"+ processSeq ("reading from "++fp) (preferPlain stat) h+ liftIO $ hPutStrLn stderr "In total," return ())+ liftIO reportGCSummary+reportGCSummary = do hPutStrLn stderr "performing GC..." performGC hPutStrLn stderr "done.\a" #if __GLASGOW_HASKELL__ >= 706+# if __GLASGOW_HASKELL__ >= 802+ -- base>=4.10+ gcStatsAvailable <- getRTSStatsEnabled+ when gcStatsAvailable $ getRTSStats >>= print+# else gcStatsAvailable <- getGCStatsEnabled when gcStatsAvailable $ getGCStats >>= print+# endif #endif-processTrainers stat h = do- (r,t) <- time $ try (answerHIO stat h stdout)- case r of Left e | isEOFError e -> do hClose h- return t- | otherwise -> error ("While training:\n" ++ show e)- Right () -> fmap (+t) $ processTrainers stat h+processSeq prompt stat h = do+ liftIO $ hPutStrLn stderr prompt+ cont <- answerHIO False stat h stdout+ when cont $ processSeq prompt stat h -trainPara stat fp =- tryOpening fp (\e -> hPutStrLn stderr ("An exception occurred while opening `"++fp++"'. The learner has not been trained in parallel beforehand."))- (\h -> do - cs <- hGetContents h+couldNotOpen fp = hPutStrLn stderr ("An exception occurred while opening `"++fp++"'. The learner has not been trained in parallel beforehand.")++trainPara stat@(_,_,so,_) res =+ liftIO $ do beginCT <- getCurrentTime- runParIO $ trainParaPar (preferPlain stat) $ lines cs+ runParIO $ trainParaPar (preferPlain stat) res -- trainParaIO (preferPlain so) pgf hscEnv $ lines cs endParaCT <- getCurrentTime hPutStrLn stderr "All the training processes have finished."- hPutStrLn stderr $ show (diffUTCTime endParaCT beginCT) ++ " have passed since the training started.")-trainParaIO stat css = do- numUnfinished <- newMVar (length css)- mapM_ (processTrainerPara (preferPlain stat) numUnfinished) css- waitUntil0 numUnfinished-processTrainerPara stat numUnfinished line = do- mid <- myThreadId- forkIO $ ((answerSIO stat line >>= \(_,k) -> k `seq` modifyMVar_ numUnfinished (return . pred))- `Control.Exception.catch` \exception -> throwTo mid (exception::SomeException)- )- return ()-preferPlain (vs, qh, so, pgf, he) = (vs, qh, preferPlain' so, pgf, he)+ hPutStrLn stderr $ show (diffUTCTime endParaCT beginCT) ++ " have passed since the training started."+++preferPlain (vs, qh, so, pgf) = (vs, qh, preferPlain' so, pgf) preferPlain' so = case format so of DefaultFormat -> so{format=ForcePlain} _ -> so -trainParaPar :: (String, Handle, ServerOptions, ProgGenSF, HscEnv) -> [String] -> ParIO ()-trainParaPar stat css = do ivks <- mapM (\line -> spawn $ liftIO $ fmap snd $ answerSIO stat line) css+type Parsed = (String, Either (ProgGenSF -> Bool -> IO [[Exp]], String) String)++trainParaPar :: (String, Handle, ServerOptions, ProgGenSF) -> [Parsed] -> ParIO ()+trainParaPar stat res = do+ ivks <- mapM (\line -> spawn $ liftIO $ fmap snd $ answerSIO stat line) res ks <- mapM get ivks sum ks `seq` return () -filterCompile :: GhcMonad m => String -> String -> m (ProgGenSF -> Bool -> [[Exp]])-filterCompile postprocessor predStr = fmap unsafeCoerce (compileExpr ("f1EF " ++ postprocessor ++ " (\\f -> "++predStr++")")) -- :: m GHC.HValue) -- InteractiveEval.exprTypeで明示的に型推論するってことは,IntegerでなくIntでdefaultしたりしやすいってことか.めんどくさければとりあえずはエラーにしてmonomorphicなのを要求してもよい. @@ -363,22 +375,45 @@ -} +++parseHandle :: String -> Handle -> Ghc [Parsed]+parseHandle postproc h = do+ cs <- liftIO $ hGetContents h+ let css = lines cs+ mapM (\xs -> compileOrFail postproc xs >>= \r -> return (xs,r)) css+++ -- stdinとstdoutで動作確認できるように,inとoutを分ける.-answerHIO :: (String, Handle, ServerOptions, ProgGenSF, HscEnv) -> Handle -> Handle -> IO ()-answerHIO (versionString, qhandle, so, pgf, hscEnv) ihandle ohandle = do- inp <- hGetLine ihandle -- hGetContents ihandleだと,最後に改行文字を入れちゃった時面倒.あと,hGetContentsの方がだいぶ遅いみたい.- case lex inp of [(":",rest)] -> if filter (not . isSpace) rest == "version" then hPutStrLn ohandle versionString else hPutStrLn ohandle $ inp ++ " : command unknown"- _ -> do- let (so', pred) = case reads inp of [(qo, pred)] -> (so{queryOptions=qo}, pred)- [] -> (so, inp)+answerHIO forkOrNot (versionString, qhandle, so, pgf) ihandle ohandle = do+ eithinp <- liftIO $ try $ hGetLine ihandle -- hGetContents ihandleだと,最後に改行文字を入れちゃった時面倒.あと,hGetContentsの方がだいぶ遅いみたい.+ case eithinp of+ Left e | isEOFError e -> return False+ | otherwise -> do liftIO $ hPutStrLn stderr $ show e+ return False+ Right inp -> do+ case lex inp of+ [(":",rest)] -> liftIO $ hPutStrLn ohandle $ if filter (not . isSpace) rest == "version" then versionString else inp ++ " : command unknown"+ _ -> do+ let (so', pred) = case reads inp of [(qo, pred)] -> (so{queryOptions=qo}, pred)+ [] -> (so, inp)++ cmpd <- compileOrFail (postprocessor so') pred+ liftIO $ (if forkOrNot then fmap (\_->()) . forkIO else id) $ do putStrLn ("the predicate is "++pred) hPutStrLn qhandle pred- (out,_) <- answerSIO (versionString, qhandle, so', pgf, hscEnv) pred- hPutStrLn ohandle out+ (if forkOrNot then id else fmap fst . time) $ do+ (out,len) <- answerSIO (versionString, qhandle, so', pgf) (pred,cmpd)+ hPutStrLn ohandle out+ when forkOrNot $ do+ hPutStrLn stderr "closing"+ hClose ohandle+ return True -answerSIO :: (a, b, ServerOptions, ProgGenSF, HscEnv) -> String -> IO (String, Int)-answerSIO (_, _, so, pgf, hscEnv) pred = do- cmpd <- runGhc (Just libdir) $ setSession hscEnv >> compileOrFail (postprocessor so) pred++answerSIO :: (a, b, ServerOptions, ProgGenSF) -> Parsed -> IO (String, Int)+answerSIO (_, _, so, pgf) (pred,cmpd) = do case cmpd of Left (funIO, sig) -> do let e2s = case howToServe so of STDIO | not $ format so == ForceHTML -> expToPlainString@@ -425,8 +460,8 @@ | otherwise -> reverse (dropWhile isAlphaNum $ reverse tk) ++ removeQuantification dr (tk,"") -> tk -prepareGHCAPI :: [FilePath] -> IO HscEnv-prepareGHCAPI allfss = runGhc (Just libdir) $ do+prepareGHCAPI :: [FilePath] -> Ghc ()+prepareGHCAPI allfss = do dfs <- getSessionDynFlags #if __GLASGOW_HASKELL__ >= 700 -- x # if __GLASGOW_HASKELL__ >= 708@@ -454,8 +489,7 @@ #else setContext [] modules #endif- getSession-+ packageNameToFlag :: String -> PackageFlag #if __GLASGOW_HASKELL__ < 710 packageNameToFlag = ExposePackage
changelog.txt view
@@ -1,3 +1,7 @@+0.9.6.8:+ * Fix segfault of Executable MagicHaskeller caused by parallel execution of GHC API+ * support GHC 8.4+ 0.9.6.7: * add functions for incremental learning to the library
xlmap view
@@ -1,1 +1,1 @@-[("SUM","SUM-function-043e1c7d-7726-4e80-8f32-07b23e057f89"),("IF","IF-function-69aed7c9-4e8a-4755-a9bc-aa8bbff73be2"),("LOOKUP","LOOKUP-function-446d94af-663b-451d-8251-369d5e3864cb"),("VLOOKUP","VLOOKUP-function-0bbc8083-26fe-4963-8ab8-93a18ad188a1"),("MATCH","MATCH-function-e8dffd45-c762-47d6-bf89-533f4a37673a"),("CHOOSE","CHOOSE-function-fc5c184f-cb62-4ec7-a46e-38653b98f5bc"),("DATE","DATE-function-e36c0c8c-4104-49da-ab83-82328b832349"),("DAYS","DAYS-function-57740535-d549-4395-8728-0f07bff0b9df"),("FIND","FIND-FINDB-functions-c7912941-af2a-4bdf-a553-d0d89b0a0628"),("FINDB","FIND-FINDB-functions-c7912941-af2a-4bdf-a553-d0d89b0a0628"),("INDEX","INDEX-function-a5dcf0dd-996d-40a4-a822-b56b061328bd"),("BETADIST","BETADIST-function-49f1b9a9-a5da-470f-8077-5f1730b5fd47"),("BETAINV","BETAINV-function-8b914ade-b902-43c1-ac9c-c05c54f10d6c"),("BINOMDIST","BINOMDIST-function-506a663e-c4ca-428d-b9a8-05583d68789c"),("CHIDIST","CHIDIST-function-c90d0fbc-5b56-4f5f-ab57-34af1bf6897e"),("CHIINV","CHIINV-function-cfbea3f6-6e4f-40c9-a87f-20472e0512af"),("CHITEST","CHITEST-function-981ff871-b694-4134-848e-38ec704577ac"),("CONCATENATE","CONCATENATE-function-8f8ae884-2ca8-4f7a-b093-75d702bea31d"),("CONFIDENCE","CONFIDENCE-function-75ccc007-f77c-4343-bc14-673642091ad6"),("COVAR","COVAR-function-50479552-2c03-4daf-bd71-a5ab88b2db03"),("CRITBINOM","CRITBINOM-function-eb6b871d-796b-4d21-b69b-e4350d5f407b"),("EXPONDIST","EXPONDIST-function-68ab45fd-cd6d-4887-9770-9357eb8ee06a"),("FDIST","FDIST-function-ecf76fba-b3f1-4e7d-a57e-6a5b7460b786"),("FINV","FINV-function-4d46c97c-c368-4852-bc15-41e8e31140b1"),("FLOOR","FLOOR-function-14bb497c-24f2-4e04-b327-b0b4de5a8886"),("FORECAST","FORECAST-function-50ca49c9-7b40-4892-94e4-7ad38bbeda99"),("FTEST","FTEST-function-4c9e1202-53fe-428c-a737-976f6fc3f9fd"),("GAMMADIST","GAMMADIST-function-7327c94d-0f05-4511-83df-1dd7ed23e19e"),("GAMMAINV","GAMMAINV-function-06393558-37ab-47d0-aa63-432f99e7916d"),("HYPGEOMDIST","HYPGEOMDIST-function-23e37961-2871-4195-9629-d0b2c108a12e"),("LOGINV","LOGINV-function-0bd7631a-2725-482b-afb4-de23df77acfe"),("LOGNORMDIST","LOGNORMDIST-function-f8d194cb-9ee3-4034-8c75-1bdb3884100b"),("MODE","MODE-function-e45192ce-9122-4980-82ed-4bdc34973120"),("NEGBINOMDIST","NEGBINOMDIST-function-f59b0a37-bae2-408d-b115-a315609ba714"),("NORMDIST","NORMDIST-function-126db625-c53e-4591-9a22-c9ff422d6d58"),("NORMINV","NORMINV-function-87981ab8-2de0-4cb0-b1aa-e21d4cb879b8"),("NORMSDIST","NORMSDIST-function-463369ea-0345-445d-802a-4ff0d6ce7cac"),("NORMSINV","NORMSINV-function-8d1bce66-8e4d-4f3b-967c-30eed61f019d"),("PERCENTILE","PERCENTILE-function-91b43a53-543c-4708-93de-d626debdddca"),("PERCENTRANK","PERCENTRANK-function-f1b5836c-9619-4847-9fc9-080ec9024442"),("POISSON","POISSON-function-d81f7294-9d7c-4f75-bc23-80aa8624173a"),("QUARTILE","QUARTILE-function-93cf8f62-60cd-4fdb-8a92-8451041e1a2a"),("RANK","RANK-function-6a2fc49d-1831-4a03-9d8c-c279cf99f723"),("STDEV","STDEV-function-51fecaaa-231e-4bbb-9230-33650a72c9b0"),("STDEVP","STDEVP-function-1f7c1c88-1bec-4422-8242-e9f7dc8bb195"),("TDIST","TDIST-function-630a7695-4021-4853-9468-4a1f9dcdd192"),("TINV","TINV-function-a7c85b9d-90f5-41fe-9ca5-1cd2f3e1ed7c"),("TTEST","TTEST-function-1696ffc1-4811-40fd-9d13-a0eaad83c7ae"),("VAR","VAR-function-1f2b7ab2-954d-4e17-ba2c-9e58b15a7da2"),("VARP","VARP-function-26a541c4-ecee-464d-a731-bd4c575b1a6b"),("WEIBULL","WEIBULL-function-b83dc2c6-260b-4754-bef2-633196f6fdcc"),("ZTEST","ZTEST-function-8f33be8a-6bd6-4ecc-8e3a-d9a4420c4a6a"),("CUBEKPIMEMBER","CUBEKPIMEMBER-function-744608bf-2c62-42cd-b67a-a56109f4b03b"),("CUBEMEMBER","CUBEMEMBER-function-0f6a15b9-2c18-4819-ae89-e1b5c8b398ad"),("CUBEMEMBERPROPERTY","CUBEMEMBERPROPERTY-function-001e57d6-b35a-49e5-abcd-05ff599e8951"),("CUBERANKEDMEMBER","CUBERANKEDMEMBER-function-07efecde-e669-4075-b4bf-6b40df2dc4b3"),("CUBESET","CUBESET-function-5b2146bd-62d6-4d04-9d8f-670e993ee1d9"),("CUBESETCOUNT","CUBESETCOUNT-function-c4c2a438-c1ff-4061-80fe-982f2d705286"),("CUBEVALUE","CUBEVALUE-function-8733da24-26d1-4e34-9b3a-84a8f00dcbe0"),("DAVERAGE","DAVERAGE-function-a6a2d5ac-4b4b-48cd-a1d8-7b37834e5aee"),("DCOUNT","DCOUNT-function-c1fc7b93-fb0d-4d8d-97db-8d5f076eaeb1"),("DCOUNTA","DCOUNTA-function-00232a6d-5a66-4a01-a25b-c1653fda1244"),("DGET","DGET-function-455568bf-4eef-45f7-90f0-ec250d00892e"),("DMAX","DMAX-function-f4e8209d-8958-4c3d-a1ee-6351665d41c2"),("DMIN","DMIN-function-4ae6f1d9-1f26-40f1-a783-6dc3680192a3"),("DPRODUCT","DPRODUCT-function-4f96b13e-d49c-47a7-b769-22f6d017cb31"),("DSTDEV","DSTDEV-function-026b8c73-616d-4b5e-b072-241871c4ab96"),("DSTDEVP","DSTDEVP-function-04b78995-da03-4813-bbd9-d74fd0f5d94b"),("DSUM","DSUM-function-53181285-0c4b-4f5a-aaa3-529a322be41b"),("DVAR","DVAR-function-d6747ca9-99c7-48bb-996e-9d7af00f3ed1"),("DVARP","DVARP-function-eb0ba387-9cb7-45c8-81e9-0394912502fc"),("DATE","DATE-function-e36c0c8c-4104-49da-ab83-82328b832349"),("DATEDIF","DATEDIF-function-25dba1a4-2812-480b-84dd-8b32a451b35c"),("DATEVALUE","DATEVALUE-function-df8b07d4-7761-4a93-bc33-b7471bbff252"),("DAY","DAY-function-8a7d1cbb-6c7d-4ba1-8aea-25c134d03101"),("DAYS","DAYS-function-57740535-d549-4395-8728-0f07bff0b9df"),("DAYS360","DAYS360-function-b9a509fd-49ef-407e-94df-0cbda5718c2a"),("EDATE","EDATE-function-3c920eb2-6e66-44e7-a1f5-753ae47ee4f5"),("EOMONTH","EOMONTH-function-7314ffa1-2bc9-4005-9d66-f49db127d628"),("HOUR","HOUR-function-a3afa879-86cb-4339-b1b5-2dd2d7310ac7"),("ISOWEEKNUM","ISOWEEKNUM-function-1c2d0afe-d25b-4ab1-8894-8d0520e90e0e"),("MINUTE","MINUTE-function-af728df0-05c4-4b07-9eed-a84801a60589"),("MONTH","MONTH-function-579a2881-199b-48b2-ab90-ddba0eba86e8"),("NETWORKDAYS","NETWORKDAYS-function-48e717bf-a7a3-495f-969e-5005e3eb18e7"),("NETWORKDAYS.INTL","NETWORKDAYSINTL-function-a9b26239-4f20-46a1-9ab8-4e925bfd5e28"),("NOW","NOW-function-3337fd29-145a-4347-b2e6-20c904739c46"),("SECOND","SECOND-function-740d1cfc-553c-4099-b668-80eaa24e8af1"),("TIME","TIME-function-9a5aff99-8f7d-4611-845e-747d0b8d5457"),("TIMEVALUE","TIMEVALUE-function-0b615c12-33d8-4431-bf3d-f3eb6d186645"),("TODAY","TODAY-function-5eb3078d-a82c-4736-8930-2f51a028fdd9"),("WEEKDAY","WEEKDAY-function-60e44483-2ed1-439f-8bd0-e404c190949a"),("WEEKNUM","WEEKNUM-function-e5c43a03-b4ab-426c-b411-b18c13c75340"),("WORKDAY","WORKDAY-function-f764a5b7-05fc-4494-9486-60d494efbf33"),("WORKDAY.INTL","WORKDAYINTL-function-a378391c-9ba7-4678-8a39-39611a9bf81d"),("YEAR","YEAR-function-c64f017a-1354-490d-981f-578e8ec8d3b9"),("YEARFRAC","YEARFRAC-function-3844141e-c76d-4143-82b6-208454ddc6a8"),("BESSELI","BESSELI-function-8d33855c-9a8d-444b-98e0-852267b1c0df"),("BESSELJ","BESSELJ-function-839cb181-48de-408b-9d80-bd02982d94f7"),("BESSELK","BESSELK-function-606d11bc-06d3-4d53-9ecb-2803e2b90b70"),("BESSELY","BESSELY-function-f3a356b3-da89-42c3-8974-2da54d6353a2"),("BIN2DEC","BIN2DEC-function-63905b57-b3a0-453d-99f4-647bb519cd6c"),("BIN2HEX","BIN2HEX-function-0375e507-f5e5-4077-9af8-28d84f9f41cc"),("BIN2OCT","BIN2OCT-function-0a4e01ba-ac8d-4158-9b29-16c25c4c23fd"),("BITAND","BITAND-function-8a2be3d7-91c3-4b48-9517-64548008563a"),("BITLSHIFT","BITLSHIFT-function-c55bb27e-cacd-4c7c-b258-d80861a03c9c"),("BITOR","BITOR-function-f6ead5c8-5b98-4c9e-9053-8ad5234919b2"),("BITRSHIFT","BITRSHIFT-function-274d6996-f42c-4743-abdb-4ff95351222c"),("BITXOR","BITXOR-function-c81306a1-03f9-4e89-85ac-b86c3cba10e4"),("COMPLEX","COMPLEX-function-f0b8f3a9-51cc-4d6d-86fb-3a9362fa4128"),("CONVERT","CONVERT-function-d785bef1-808e-4aac-bdcd-666c810f9af2"),("DEC2BIN","DEC2BIN-function-0f63dd0e-5d1a-42d8-b511-5bf5c6d43838"),("DEC2HEX","DEC2HEX-function-6344ee8b-b6b5-4c6a-a672-f64666704619"),("DEC2OCT","DEC2OCT-function-c9d835ca-20b7-40c4-8a9e-d3be351ce00f"),("DELTA","DELTA-function-2f763672-c959-4e07-ac33-fe03220ba432"),("ERF","ERF-function-c53c7e7b-5482-4b6c-883e-56df3c9af349"),("ERF.PRECISE","ERFPRECISE-function-9a349593-705c-4278-9a98-e4122831a8e0"),("ERFC","ERFC-function-736e0318-70ba-4e8b-8d08-461fe68b71b3"),("ERFC.PRECISE","ERFCPRECISE-function-e90e6bab-f45e-45df-b2ac-cd2eb4d4a273"),("GESTEP","GESTEP-function-f37e7d2a-41da-4129-be95-640883fca9df"),("HEX2BIN","HEX2BIN-function-a13aafaa-5737-4920-8424-643e581828c1"),("HEX2DEC","HEX2DEC-function-8c8c3155-9f37-45a5-a3ee-ee5379ef106e"),("HEX2OCT","HEX2OCT-function-54d52808-5d19-4bd0-8a63-1096a5d11912"),("IMABS","IMABS-function-b31e73c6-d90c-4062-90bc-8eb351d765a1"),("IMAGINARY","IMAGINARY-function-dd5952fd-473d-44d9-95a1-9a17b23e428a"),("IMARGUMENT","IMARGUMENT-function-eed37ec1-23b3-4f59-b9f3-d340358a034a"),("IMCONJUGATE","IMCONJUGATE-function-2e2fc1ea-f32b-4f9b-9de6-233853bafd42"),("IMCOS","IMCOS-function-dad75277-f592-4a6b-ad6c-be93a808a53c"),("IMCOSH","IMCOSH-function-053e4ddb-4122-458b-be9a-457c405e90ff"),("IMCOT","IMCOT-function-dc6a3607-d26a-4d06-8b41-8931da36442c"),("IMCSC","IMCSC-function-9e158d8f-2ddf-46cd-9b1d-98e29904a323"),("IMCSCH","IMCSCH-function-c0ae4f54-5f09-4fef-8da0-dc33ea2c5ca9"),("IMDIV","IMDIV-function-a505aff7-af8a-4451-8142-77ec3d74d83f"),("IMEXP","IMEXP-function-c6f8da1f-e024-4c0c-b802-a60e7147a95f"),("IMLN","IMLN-function-32b98bcf-8b81-437c-a636-6fb3aad509d8"),("IMLOG10","IMLOG10-function-58200fca-e2a2-4271-8a98-ccd4360213a5"),("IMLOG2","IMLOG2-function-152e13b4-bc79-486c-a243-e6a676878c51"),("IMPOWER","IMPOWER-function-210fd2f5-f8ff-4c6a-9d60-30e34fbdef39"),("IMPRODUCT","IMPRODUCT-function-2fb8651a-a4f2-444f-975e-8ba7aab3a5ba"),("IMREAL","IMREAL-function-d12bc4c0-25d0-4bb3-a25f-ece1938bf366"),("IMSEC","IMSEC-function-6df11132-4411-4df4-a3dc-1f17372459e0"),("IMSECH","IMSECH-function-f250304f-788b-4505-954e-eb01fa50903b"),("IMSIN","IMSIN-function-1ab02a39-a721-48de-82ef-f52bf37859f6"),("IMSINH","IMSINH-function-dfb9ec9e-8783-4985-8c42-b028e9e8da3d"),("IMSQRT","IMSQRT-function-e1753f80-ba11-4664-a10e-e17368396b70"),("IMSUB","IMSUB-function-2e404b4d-4935-4e85-9f52-cb08b9a45054"),("IMSUM","IMSUM-function-81542999-5f1c-4da6-9ffe-f1d7aaa9457f"),("IMTAN","IMTAN-function-8478f45d-610a-43cf-8544-9fc0b553a132"),("OCT2BIN","OCT2BIN-function-55383471-3c56-4d27-9522-1a8ec646c589"),("OCT2DEC","OCT2DEC-function-87606014-cb98-44b2-8dbb-e48f8ced1554"),("OCT2HEX","OCT2HEX-function-912175b4-d497-41b4-a029-221f051b858f"),("ACCRINT","ACCRINT-function-fe45d089-6722-4fb3-9379-e1f911d8dc74"),("ACCRINTM","ACCRINTM-function-f62f01f9-5754-4cc4-805b-0e70199328a7"),("AMORDEGRC","AMORDEGRC-function-a14d0ca1-64a4-42eb-9b3d-b0dededf9e51"),("AMORLINC","AMORLINC-function-7d417b45-f7f5-4dba-a0a5-3451a81079a8"),("COUPDAYBS","COUPDAYBS-function-eb9a8dfb-2fb2-4c61-8e5d-690b320cf872"),("COUPDAYS","COUPDAYS-function-cc64380b-315b-4e7b-950c-b30b0a76f671"),("COUPDAYSNC","COUPDAYSNC-function-5ab3f0b2-029f-4a8b-bb65-47d525eea547"),("COUPNCD","COUPNCD-function-fd962fef-506b-4d9d-8590-16df5393691f"),("COUPNUM","COUPNUM-function-a90af57b-de53-4969-9c99-dd6139db2522"),("COUPPCD","COUPPCD-function-2eb50473-6ee9-4052-a206-77a9a385d5b3"),("CUMIPMT","CUMIPMT-function-61067bb0-9016-427d-b95b-1a752af0e606"),("CUMPRINC","CUMPRINC-function-94a4516d-bd65-41a1-bc16-053a6af4c04d"),("DB","DB-function-354e7d28-5f93-4ff1-8a52-eb4ee549d9d7"),("DDB","DDB-function-519a7a37-8772-4c96-85c0-ed2c209717a5"),("DISC","DISC-function-71fce9f3-3f05-4acf-a5a3-eac6ef4daa53"),("DOLLARDE","DOLLARDE-function-db85aab0-1677-428a-9dfd-a38476693427"),("DOLLARFR","DOLLARFR-function-0835d163-3023-4a33-9824-3042c5d4f495"),("DURATION","DURATION-function-b254ea57-eadc-4602-a86a-c8e369334038"),("EFFECT","EFFECT-function-910d4e4c-79e2-4009-95e6-507e04f11bc4"),("FV","FV-function-2eef9f44-a084-4c61-bdd8-4fe4bb1b71b3"),("FVSCHEDULE","FVSCHEDULE-function-bec29522-bd87-4082-bab9-a241f3fb251d"),("INTRATE","INTRATE-function-5cb34dde-a221-4cb6-b3eb-0b9e55e1316f"),("IPMT","IPMT-function-5cce0ad6-8402-4a41-8d29-61a0b054cb6f"),("IRR","IRR-function-64925eaa-9988-495b-b290-3ad0c163c1bc"),("ISPMT","ISPMT-function-fa58adb6-9d39-4ce0-8f43-75399cea56cc"),("MDURATION","MDURATION-function-b3786a69-4f20-469a-94ad-33e5b90a763c"),("MIRR","MIRR-function-b020f038-7492-4fb4-93c1-35c345b53524"),("NOMINAL","NOMINAL-function-7f1ae29b-6b92-435e-b950-ad8b190ddd2b"),("NPER","NPER-function-240535b5-6653-4d2d-bfcf-b6a38151d815"),("NPV","NPV-function-8672cb67-2576-4d07-b67b-ac28acf2a568"),("ODDFPRICE","ODDFPRICE-function-d7d664a8-34df-4233-8d2b-922bcf6a69e1"),("ODDFYIELD","ODDFYIELD-function-66bc8b7b-6501-4c93-9ce3-2fd16220fe37"),("ODDLPRICE","ODDLPRICE-function-fb657749-d200-4902-afaf-ed5445027fc4"),("ODDLYIELD","ODDLYIELD-function-c873d088-cf40-435f-8d41-c8232fee9238"),("PDURATION","PDURATION-function-44f33460-5be5-4c90-b857-22308892adaf"),("PMT","PMT-function-0214da64-9a63-4996-bc20-214433fa6441"),("PPMT","PPMT-function-c370d9e3-7749-4ca4-beea-b06c6ac95e1b"),("PRICE","PRICE-function-3ea9deac-8dfa-436f-a7c8-17ea02c21b0a"),("PRICEDISC","PRICEDISC-function-d06ad7c1-380e-4be7-9fd9-75e3079acfd3"),("PRICEMAT","PRICEMAT-function-52c3b4da-bc7e-476a-989f-a95f675cae77"),("PV","PV-function-23879d31-0e02-4321-be01-da16e8168cbd"),("RATE","RATE-function-9f665657-4a7e-4bb7-a030-83fc59e748ce"),("RECEIVED","RECEIVED-function-7a3f8b93-6611-4f81-8576-828312c9b5e5"),("RRI","RRI-function-6f5822d8-7ef1-4233-944c-79e8172930f4"),("SLN","SLN-function-cdb666e5-c1c6-40a7-806a-e695edc2f1c8"),("SYD","SYD-function-069f8106-b60b-4ca2-98e0-2a0f206bdb27"),("TBILLEQ","TBILLEQ-function-2ab72d90-9b4d-4efe-9fc2-0f81f2c19c8c"),("TBILLPRICE","TBILLPRICE-function-eacca992-c29d-425a-9eb8-0513fe6035a2"),("TBILLYIELD","TBILLYIELD-function-6d381232-f4b0-4cd5-8e97-45b9c03468ba"),("VDB","VDB-function-dde4e207-f3fa-488d-91d2-66d55e861d73"),("XIRR","XIRR-function-de1242ec-6477-445b-b11b-a303ad9adc9d"),("XNPV","XNPV-function-1b42bbf6-370f-4532-a0eb-d67c16b664b7"),("YIELD","YIELD-function-f5f5ca43-c4bd-434f-8bd2-ed3c9727a4fe"),("YIELDDISC","YIELDDISC-function-a9dbdbae-7dae-46de-b995-615faffaaed7"),("YIELDMAT","YIELDMAT-function-ba7d1809-0d33-4bcb-96c7-6c56ec62ef6f"),("CELL","CELL-function-51bd39a5-f338-4dbe-a33f-955d67c2b2cf"),("ERROR.TYPE","ERRORTYPE-function-10958677-7c8d-44f7-ae77-b9a9ee6eefaa"),("INFO","INFO-function-725f259a-0e4b-49b3-8b52-58815c69acae"),("ISBLANK","ISBLANK-function-0f2d7971-6019-40a0-a171-f2d869135665"),("ISERR","ISERR-function-0f2d7971-6019-40a0-a171-f2d869135665"),("ISERROR","ISERROR-function-0f2d7971-6019-40a0-a171-f2d869135665"),("ISEVEN","ISEVEN-function-aa15929a-d77b-4fbb-92f4-2f479af55356"),("ISFORMULA","ISFORMULA-function-e4d1355f-7121-4ef2-801e-3839bfd6b1e5"),("ISLOGICAL","ISLOGICAL-function-0f2d7971-6019-40a0-a171-f2d869135665"),("ISNA","ISNA-function-0f2d7971-6019-40a0-a171-f2d869135665"),("ISNONTEXT","ISNONTEXT-function-0f2d7971-6019-40a0-a171-f2d869135665"),("ISNUMBER","ISNUMBER-function-0f2d7971-6019-40a0-a171-f2d869135665"),("ISODD","ISODD-function-0f2d7971-6019-40a0-a171-f2d869135665"),("ISREF","ISREF-function-0f2d7971-6019-40a0-a171-f2d869135665"),("ISTEXT","ISTEXT-function-0f2d7971-6019-40a0-a171-f2d869135665"),("N","N-function-a624cad1-3635-4208-b54a-29733d1278c9"),("NA","NA-function-5469c2d1-a90c-4fb5-9bbc-64bd9bb6b47c"),("SHEET","SHEET-function-44718b6f-8b87-47a1-a9d6-b701c06cff24"),("SHEETS","SHEETS-function-770515eb-e1e8-45ce-8066-b557e5e4b80b"),("TYPE","TYPE-function-45b4e688-4bc3-48b3-a105-ffa892995899"),("AND","AND-function-5f19b2e8-e1df-4408-897a-ce285a19e9d9"),("FALSE","FALSE-function-2d58dfa5-9c03-4259-bf8f-f0ae14346904"),("IF","IF-function-69aed7c9-4e8a-4755-a9bc-aa8bbff73be2"),("IFERROR","IFERROR-function-c526fd07-caeb-47b8-8bb6-63f3e417f611"),("IFNA","IFNA-function-6626c961-a569-42fc-a49d-79b4951fd461"),("IFS","IFS-function-36329a26-37b2-467c-972b-4a39bd951d45"),("NOT","NOT-function-9cfc6011-a054-40c7-a140-cd4ba2d87d77"),("OR","OR-function-7d17ad14-8700-4281-b308-00b131e22af0"),("SWITCH","SWITCH-function-47ab33c0-28ce-4530-8a45-d532ec4aa25e"),("TRUE","TRUE-function-7652c6e3-8987-48d0-97cd-ef223246b3fb"),("XOR","XOR-function-1548d4c2-5e47-4f77-9a92-0533bba14f37"),("ADDRESS","ADDRESS-function-d0c26c0d-3991-446b-8de4-ab46431d4f89"),("AREAS","AREAS-function-8392ba32-7a41-43b3-96b0-3695d2ec6152"),("CHOOSE","CHOOSE-function-fc5c184f-cb62-4ec7-a46e-38653b98f5bc"),("COLUMN","COLUMN-function-44e8c754-711c-4df3-9da4-47a55042554b"),("COLUMNS","COLUMNS-function-4e8e7b4e-e603-43e8-b177-956088fa48ca"),("FORMULATEXT","FORMULATEXT-function-0a786771-54fd-4ae2-96ee-09cda35439c8"),("GETPIVOTDATA","GETPIVOTDATA-function-8c083b99-a922-4ca0-af5e-3af55960761f"),("HLOOKUP","HLOOKUP-function-a3034eec-b719-4ba3-bb65-e1ad662ed95f"),("HYPERLINK","HYPERLINK-function-333c7ce6-c5ae-4164-9c47-7de9b76f577f"),("INDEX","INDEX-function-a5dcf0dd-996d-40a4-a822-b56b061328bd"),("INDIRECT","INDIRECT-function-474b3a3a-8a26-4f44-b491-92b6306fa261"),("LOOKUP","LOOKUP-function-446d94af-663b-451d-8251-369d5e3864cb"),("MATCH","MATCH-function-e8dffd45-c762-47d6-bf89-533f4a37673a"),("OFFSET","OFFSET-function-c8de19ae-dd79-4b9b-a14e-b4d906d11b66"),("ROW","ROW-function-3a63b74a-c4d0-4093-b49a-e76eb49a6d8d"),("ROWS","ROWS-function-b592593e-3fc2-47f2-bec1-bda493811597"),("RTD","RTD-function-e0cc001a-56f0-470a-9b19-9455dc0eb593"),("TRANSPOSE","TRANSPOSE-function-ed039415-ed8a-4a81-93e9-4b6dfac76027"),("VLOOKUP","VLOOKUP-function-0bbc8083-26fe-4963-8ab8-93a18ad188a1"),("ABS","ABS-function-3420200f-5628-4e8c-99da-c99d7c87713c"),("ACOS","ACOS-function-cb73173f-d089-4582-afa1-76e5524b5d5b"),("ACOSH","ACOSH-function-e3992cc1-103f-4e72-9f04-624b9ef5ebfe"),("ACOT","ACOT-function-dc7e5008-fe6b-402e-bdd6-2eea8383d905"),("ACOTH","ACOTH-function-cc49480f-f684-4171-9fc5-73e4e852300f"),("AGGREGATE","AGGREGATE-function-43b9278e-6aa7-4f17-92b6-e19993fa26df"),("ARABIC","ARABIC-function-9a8da418-c17b-4ef9-a657-9370a30a674f"),("ASIN","ASIN-function-81fb95e5-6d6f-48c4-bc45-58f955c6d347"),("ASINH","ASINH-function-4e00475a-067a-43cf-926a-765b0249717c"),("ATAN","ATAN-function-50746fa8-630a-406b-81d0-4a2aed395543"),("ATAN2","ATAN2-function-c04592ab-b9e3-4908-b428-c96b3a565033"),("ATANH","ATANH-function-3cd65768-0de7-4f1d-b312-d01c8c930d90"),("BASE","BASE-function-2ef61411-aee9-4f29-a811-1c42456c6342"),("CEILING","CEILING-function-0a5cd7c8-0720-4f0a-bd2c-c943e510899f"),("CEILING.MATH","CEILINGMATH-function-80f95d2f-b499-4eee-9f16-f795a8e306c8"),("CEILING.PRECISE","CEILINGPRECISE-function-f366a774-527a-4c92-ba49-af0a196e66cb"),("COMBIN","COMBIN-function-12a3f276-0a21-423a-8de6-06990aaf638a"),("COMBINA","COMBINA-function-efb49eaa-4f4c-4cd2-8179-0ddfcf9d035d"),("COS","COS-function-0fb808a5-95d6-4553-8148-22aebdce5f05"),("COSH","COSH-function-e460d426-c471-43e8-9540-a57ff3b70555"),("COT","COT-function-c446f34d-6fe4-40dc-84f8-cf59e5f5e31a"),("COTH","COTH-function-2e0b4cb6-0ba0-403e-aed4-deaa71b49df5"),("CSC","CSC-function-07379361-219a-4398-8675-07ddc4f135c1"),("CSCH","CSCH-function-f58f2c22-eb75-4dd6-84f4-a503527f8eeb"),("DECIMAL","DECIMAL-function-ee554665-6176-46ef-82de-0a283658da2e"),("DEGREES","DEGREES-function-4d6ec4db-e694-4b94-ace0-1cc3f61f9ba1"),("EVEN","EVEN-function-197b5f06-c795-4c1e-8696-3c3b8a646cf9"),("EXP","EXP-function-c578f034-2c45-4c37-bc8c-329660a63abe"),("FACT","FACT-function-ca8588c2-15f2-41c0-8e8c-c11bd471a4f3"),("FACTDOUBLE","FACTDOUBLE-function-e67697ac-d214-48eb-b7b7-cce2589ecac8"),("FLOOR","FLOOR-function-14bb497c-24f2-4e04-b327-b0b4de5a8886"),("FLOOR.MATH","FLOORMATH-function-c302b599-fbdb-4177-ba19-2c2b1249a2f5"),("FLOOR.PRECISE","FLOORPRECISE-function-f769b468-1452-4617-8dc3-02f842a0702e"),("GCD","GCD-function-d5107a51-69e3-461f-8e4c-ddfc21b5073a"),("INT","INT-function-a6c4af9e-356d-4369-ab6a-cb1fd9d343ef"),("ISO.CEILING","ISOCEILING-function-e587bb73-6cc2-4113-b664-ff5b09859a83"),("LCM","LCM-function-7152b67a-8bb5-4075-ae5c-06ede5563c94"),("LN","LN-function-81fe1ed7-dac9-4acd-ba1d-07a142c6118f"),("LOG","LOG-function-4e82f196-1ca9-4747-8fb0-6c4a3abb3280"),("LOG10","LOG10-function-c75b881b-49dd-44fb-b6f4-37e3486a0211"),("MDETERM","MDETERM-function-e7bfa857-3834-422b-b871-0ffd03717020"),("MINVERSE","MINVERSE-function-11f55086-adde-4c9f-8eb9-59da2d72efc6"),("MMULT","MMULT-function-40593ed7-a3cd-4b6b-b9a3-e4ad3c7245eb"),("MOD","MOD-function-9b6cd169-b6ee-406a-a97b-edf2a9dc24f3"),("MROUND","MROUND-function-c299c3b0-15a5-426d-aa4b-d2d5b3baf427"),("MULTINOMIAL","MULTINOMIAL-function-6fa6373c-6533-41a2-a45e-a56db1db1bf6"),("MUNIT","MUNIT-function-c9fe916a-dc26-4105-997d-ba22799853a3"),("ODD","ODD-function-deae64eb-e08a-4c88-8b40-6d0b42575c98"),("PI","PI-function-264199d0-a3ba-46b8-975a-c4a04608989b"),("POWER","POWER-function-d3f2908b-56f4-4c3f-895a-07fb519c362a"),("PRODUCT","PRODUCT-function-8e6b5b24-90ee-4650-aeec-80982a0512ce"),("QUOTIENT","QUOTIENT-function-9f7bf099-2a18-4282-8fa4-65290cc99dee"),("RADIANS","RADIANS-function-ac409508-3d48-45f5-ac02-1497c92de5bf"),("RAND","RAND-function-4cbfa695-8869-4788-8d90-021ea9f5be73"),("RANDBETWEEN","RANDBETWEEN-function-4cc7f0d1-87dc-4eb7-987f-a469ab381685"),("ROMAN","ROMAN-function-d6b0b99e-de46-4704-a518-b45a0f8b56f5"),("ROUND","ROUND-function-c018c5d8-40fb-4053-90b1-b3e7f61a213c"),("ROUNDDOWN","ROUNDDOWN-function-2ec94c73-241f-4b01-8c6f-17e6d7968f53"),("ROUNDUP","ROUNDUP-function-f8bc9b23-e795-47db-8703-db171d0c42a7"),("SEC","SEC-function-ff224717-9c87-4170-9b58-d069ced6d5f7"),("SECH","SECH-function-e05a789f-5ff7-4d7f-984a-5edb9b09556f"),("SERIESSUM","SERIESSUM-function-a3ab25b5-1093-4f5b-b084-96c49087f637"),("SIGN","SIGN-function-109c932d-fcdc-4023-91f1-2dd0e916a1d8"),("SIN","SIN-function-cf0e3432-8b9e-483c-bc55-a76651c95602"),("SINH","SINH-function-1e4e8b9f-2b65-43fc-ab8a-0a37f4081fa7"),("SQRT","SQRT-function-654975c2-05c4-4831-9a24-2c65e4040fdf"),("SQRTPI","SQRTPI-function-1fb4e63f-9b51-46d6-ad68-b3e7a8b519b4"),("SUBTOTAL","SUBTOTAL-function-7b027003-f060-4ade-9040-e478765b9939"),("SUM","SUM-function-043e1c7d-7726-4e80-8f32-07b23e057f89"),("SUMIF","SUMIF-function-169b8c99-c05c-4483-a712-1697a653039b"),("SUMIFS","SUMIFS-function-c9e748f5-7ea7-455d-9406-611cebce642b"),("SUMPRODUCT","SUMPRODUCT-function-16753e75-9f68-4874-94ac-4d2145a2fd2e"),("SUMSQ","SUMSQ-function-e3313c02-51cc-4963-aae6-31442d9ec307"),("SUMX2MY2","SUMX2MY2-function-9e599cc5-5399-48e9-a5e0-e37812dfa3e9"),("SUMX2PY2","SUMX2PY2-function-826b60b4-0aa2-4e5e-81d2-be704d3d786f"),("SUMXMY2","SUMXMY2-function-9d144ac1-4d79-43de-b524-e2ecee23b299"),("TAN","TAN-function-08851a40-179f-4052-b789-d7f699447401"),("TANH","TANH-function-017222f0-a0c3-4f69-9787-b3202295dc6c"),("TRUNC","TRUNC-function-8b86a64c-3127-43db-ba14-aa5ceb292721"),("AVEDEV","AVEDEV-function-58fe8d65-2a84-4dc7-8052-f3f87b5c6639"),("AVERAGE","AVERAGE-function-047bac88-d466-426c-a32b-8f33eb960cf6"),("AVERAGEA","AVERAGEA-function-f5f84098-d453-4f4c-bbba-3d2c66356091"),("AVERAGEIF","AVERAGEIF-function-faec8e2e-0dec-4308-af69-f5576d8ac642"),("AVERAGEIFS","AVERAGEIFS-function-48910c45-1fc0-4389-a028-f7c5c3001690"),("BETA.DIST","BETADIST-function-11188c9c-780a-42c7-ba43-9ecb5a878d31"),("BETA.INV","BETAINV-function-e84cb8aa-8df0-4cf6-9892-83a341d252eb"),("BINOM.DIST","BINOMDIST-function-c5ae37b6-f39c-4be2-94c2-509a1480770c"),("BINOM.DIST.RANGE","BINOMDISTRANGE-function-17331329-74c7-4053-bb4c-6653a7421595"),("BINOM.INV","BINOMINV-function-80a0370c-ada6-49b4-83e7-05a91ba77ac9"),("CHISQ.DIST","CHISQDIST-function-8486b05e-5c05-4942-a9ea-f6b341518732"),("CHISQ.DIST.RT","CHISQDISTRT-function-dc4832e8-ed2b-49ae-8d7c-b28d5804c0f2"),("CHISQ.INV","CHISQINV-function-400db556-62b3-472d-80b3-254723e7092f"),("CHISQ.INV.RT","CHISQINVRT-function-435b5ed8-98d5-4da6-823f-293e2cbc94fe"),("CHISQ.TEST","CHISQTEST-function-2e8a7861-b14a-4985-aa93-fb88de3f260f"),("CONFIDENCE.NORM","CONFIDENCENORM-function-7cec58a6-85bb-488d-91c3-63828d4fbfd4"),("CONFIDENCE.T","CONFIDENCET-function-e8eca395-6c3a-4ba9-9003-79ccc61d3c53"),("CORREL","CORREL-function-995dcef7-0c0a-4bed-a3fb-239d7b68ca92"),("COUNT","COUNT-function-a59cd7fc-b623-4d93-87a4-d23bf411294c"),("COUNTA","COUNTA-function-7dc98875-d5c1-46f1-9a82-53f3219e2509"),("COUNTBLANK","COUNTBLANK-function-6a92d772-675c-4bee-b346-24af6bd3ac22"),("COUNTIF","COUNTIF-function-e0de10c6-f885-4e71-abb4-1f464816df34"),("COUNTIFS","COUNTIFS-function-dda3dc6e-f74e-4aee-88bc-aa8c2a866842"),("COVARIANCE.P","COVARIANCEP-function-6f0e1e6d-956d-4e4b-9943-cfef0bf9edfc"),("COVARIANCE.S","COVARIANCES-function-0a539b74-7371-42aa-a18f-1f5320314977"),("DEVSQ","DEVSQ-function-8b739616-8376-4df5-8bd0-cfe0a6caf444"),("EXPON.DIST","EXPONDIST-function-4c12ae24-e563-4155-bf3e-8b78b6ae140e"),("F.DIST","FDIST-function-a887efdc-7c8e-46cb-a74a-f884cd29b25d"),("F.DIST.RT","FDISTRT-function-d74cbb00-6017-4ac9-b7d7-6049badc0520"),("F.INV","FINV-function-0dda0cf9-4ea0-42fd-8c3c-417a1ff30dbe"),("F.INV.RT","FINVRT-function-d371aa8f-b0b1-40ef-9cc2-496f0693ac00"),("F.TEST","FTEST-function-100a59e7-4108-46f8-8443-78ffacb6c0a7"),("FISHER","FISHER-function-d656523c-5076-4f95-b87b-7741bf236c69"),("FISHERINV","FISHERINV-function-62504b39-415a-4284-a285-19c8e82f86bb"),("FORECAST","FORECAST-function-50ca49c9-7b40-4892-94e4-7ad38bbeda99"),("FORECAST.ETS","FORECASTETS-function-897a2fe9-6595-4680-a0b0-93e0308d5f6e#_forecast.ets"),("FORECAST.ETS.CONFINT","FORECASTETSCONFINT-function-897a2fe9-6595-4680-a0b0-93e0308d5f6e#_forecast.ets.confint"),("FORECAST.ETS.SEASONALITY","FORECASTETSSEASONALITY-function-897a2fe9-6595-4680-a0b0-93e0308d5f6e#_forecast.ets.seasonality"),("FORECAST.ETS.STAT","FORECASTETSSTAT-function-897a2fe9-6595-4680-a0b0-93e0308d5f6e#_forecast.ets.stat"),("FORECAST.LINEAR","FORECASTLINEAR-function-897a2fe9-6595-4680-a0b0-93e0308d5f6e#_forecast.linear"),("FREQUENCY","FREQUENCY-function-44e3be2b-eca0-42cd-a3f7-fd9ea898fdb9"),("GAMMA","GAMMA-function-ce1702b1-cf55-471d-8307-f83be0fc5297"),("GAMMA.DIST","GAMMADIST-function-9b6f1538-d11c-4d5f-8966-21f6a2201def"),("GAMMA.INV","GAMMAINV-function-74991443-c2b0-4be5-aaab-1aa4d71fbb18"),("GAMMALN","GAMMALN-function-b838c48b-c65f-484f-9e1d-141c55470eb9"),("GAMMALN.PRECISE","GAMMALNPRECISE-function-5cdfe601-4e1e-4189-9d74-241ef1caa599"),("GAUSS","GAUSS-function-069f1b4e-7dee-4d6a-a71f-4b69044a6b33"),("GEOMEAN","GEOMEAN-function-db1ac48d-25a5-40a0-ab83-0b38980e40d5"),("GROWTH","GROWTH-function-541a91dc-3d5e-437d-b156-21324e68b80d"),("HARMEAN","HARMEAN-function-5efd9184-fab5-42f9-b1d3-57883a1d3bc6"),("HYPGEOM.DIST","HYPGEOMDIST-function-6dbd547f-1d12-4b1f-8ae5-b0d9e3d22fbf"),("INTERCEPT","INTERCEPT-function-2a9b74e2-9d47-4772-b663-3bca70bf63ef"),("KURT","KURT-function-bc3a265c-5da4-4dcb-b7fd-c237789095ab"),("LARGE","LARGE-function-3af0af19-1190-42bb-bb8b-01672ec00a64"),("LINEST","LINEST-function-84d7d0d9-6e50-4101-977a-fa7abf772b6d"),("LOGEST","LOGEST-function-f27462d8-3657-4030-866b-a272c1d18b4b"),("LOGNORM.DIST","LOGNORMDIST-function-eb60d00b-48a9-4217-be2b-6074aee6b070"),("LOGNORM.INV","LOGNORMINV-function-fe79751a-f1f2-4af8-a0a1-e151b2d4f600"),("MAX","MAX-function-e0012414-9ac8-4b34-9a47-73e662c08098"),("MAXA","MAXA-function-814bda1e-3840-4bff-9365-2f59ac2ee62d"),("MAXIFS","MAXIFS-function-dfd611e6-da2c-488a-919b-9b6376b28883"),("MEDIAN","MEDIAN-function-d0916313-4753-414c-8537-ce85bdd967d2"),("MIN","MIN-function-61635d12-920f-4ce2-a70f-96f202dcc152"),("MINA","MINA-function-245a6f46-7ca5-4dc7-ab49-805341bc31d3"),("MINIFS","MINIFS-function-6ca1ddaa-079b-4e74-80cc-72eef32e6599"),("MODE.MULT","MODEMULT-function-50fd9464-b2ba-4191-b57a-39446689ae8c"),("MODE.SNGL","MODESNGL-function-f1267c16-66c6-4386-959f-8fba5f8bb7f8"),("NEGBINOM.DIST","NEGBINOMDIST-function-c8239f89-c2d0-45bd-b6af-172e570f8599"),("NORM.DIST","NORMDIST-function-edb1cc14-a21c-4e53-839d-8082074c9f8d"),("NORM.INV","NORMINV-function-54b30935-fee7-493c-bedb-2278a9db7e13"),("NORM.S.DIST","NORMSDIST-function-1e787282-3832-4520-a9ae-bd2a8d99ba88"),("NORM.S.INV","NORMSINV-function-d6d556b4-ab7f-49cd-b526-5a20918452b1"),("PEARSON","PEARSON-function-0c3e30fc-e5af-49c4-808a-3ef66e034c18"),("PERCENTILE.EXC","PERCENTILEEXC-function-bbaa7204-e9e1-4010-85bf-c31dc5dce4ba"),("PERCENTILE.INC","PERCENTILEINC-function-680f9539-45eb-410b-9a5e-c1355e5fe2ed"),("PERCENTRANK.EXC","PERCENTRANKEXC-function-d8afee96-b7e2-4a2f-8c01-8fcdedaa6314"),("PERCENTRANK.INC","PERCENTRANKINC-function-149592c9-00c0-49ba-86c1-c1f45b80463a"),("PERMUT","PERMUT-function-3bd1cb9a-2880-41ab-a197-f246a7a602d3"),("PERMUTATIONA","PERMUTATIONA-function-6c7d7fdc-d657-44e6-aa19-2857b25cae4e"),("PHI","PHI-function-23e49bc6-a8e8-402d-98d3-9ded87f6295c"),("POISSON.DIST","POISSONDIST-function-8fe148ff-39a2-46cb-abf3-7772695d9636"),("PROB","PROB-function-9ac30561-c81c-4259-8253-34f0a238fc49"),("QUARTILE.EXC","QUARTILEEXC-function-5a355b7a-840b-4a01-b0f1-f538c2864cad"),("QUARTILE.INC","QUARTILEINC-function-1bbacc80-5075-42f1-aed6-47d735c4819d"),("RANK.AVG","RANKAVG-function-bd406a6f-eb38-4d73-aa8e-6d1c3c72e83a"),("RANK.EQ","RANKEQ-function-284858ce-8ef6-450e-b662-26245be04a40"),("RSQ","RSQ-function-d7161715-250d-4a01-b80d-a8364f2be08f"),("SKEW","SKEW-function-bdf49d86-b1ef-4804-a046-28eaea69c9fa"),("SKEW.P","SKEWP-function-76530a5c-99b9-48a1-8392-26632d542fcb"),("SLOPE","SLOPE-function-11fb8f97-3117-4813-98aa-61d7e01276b9"),("SMALL","SMALL-function-17da8222-7c82-42b2-961b-14c45384df07"),("STANDARDIZE","STANDARDIZE-function-81d66554-2d54-40ec-ba83-6437108ee775"),("STDEV.P","STDEVP-function-6e917c05-31a0-496f-ade7-4f4e7462f285"),("STDEV.S","STDEVS-function-7d69cf97-0c1f-4acf-be27-f3e83904cc23"),("STDEVA","STDEVA-function-5ff38888-7ea5-48de-9a6d-11ed73b29e9d"),("STDEVPA","STDEVPA-function-5578d4d6-455a-4308-9991-d405afe2c28c"),("STEYX","STEYX-function-6ce74b2c-449d-4a6e-b9ac-f9cef5ba48ab"),("T.DIST","TDIST-function-4329459f-ae91-48c2-bba8-1ead1c6c21b2"),("T.DIST.2T","TDIST2T-function-198e9340-e360-4230-bd21-f52f22ff5c28"),("T.DIST.RT","TDISTRT-function-20a30020-86f9-4b35-af1f-7ef6ae683eda"),("T.INV","TINV-function-2908272b-4e61-4942-9df9-a25fec9b0e2e"),("T.INV.2T","TINV2T-function-ce72ea19-ec6c-4be7-bed2-b9baf2264f17"),("T.TEST","TTEST-function-d4e08ec3-c545-485f-962e-276f7cbed055"),("TREND","TREND-function-e2f135f0-8827-4096-9873-9a7cf7b51ef1"),("TRIMMEAN","TRIMMEAN-function-d90c9878-a119-4746-88fa-63d988f511d3"),("VAR.P","VARP-function-73d1285c-108c-4843-ba5d-a51f90656f3a"),("VAR.S","VARS-function-913633de-136b-449d-813e-65a00b2b990b"),("VARA","VARA-function-3de77469-fa3a-47b4-85fd-81758a1e1d07"),("VARPA","VARPA-function-59a62635-4e89-4fad-88ac-ce4dc0513b96"),("WEIBULL.DIST","WEIBULLDIST-function-4e783c39-9325-49be-bbc9-a83ef82b45db"),("Z.TEST","ZTEST-function-d633d5a3-2031-4614-a016-92180ad82bee"),("ASC","ASC-function-0b6abf1c-c663-4004-a964-ebc00b723266"),("BAHTTEXT","BAHTTEXT-function-5ba4d0b4-abd3-4325-8d22-7a92d59aab9c"),("CHAR","CHAR-function-bbd249c8-b36e-4a91-8017-1c133f9b837a"),("CLEAN","CLEAN-function-26f3d7c5-475f-4a9c-90e5-4b8ba987ba41"),("CODE","CODE-function-c32b692b-2ed0-4a04-bdd9-75640144b928"),("CONCAT","CONCAT-function-9b1a9a3f-94ff-41af-9736-694cbd6b4ca2"),("CONCATENATE","CONCATENATE-function-8f8ae884-2ca8-4f7a-b093-75d702bea31d"),("DBCS","DBCS-function-a4025e73-63d2-4958-9423-21a24794c9e5"),("DOLLAR","DOLLAR-function-a6cd05d9-9740-4ad3-a469-8109d18ff611"),("EXACT","EXACT-function-d3087698-fc15-4a15-9631-12575cf29926"),("FIND","FIND-FINDB-functions-c7912941-af2a-4bdf-a553-d0d89b0a0628"),("FINDB","FIND-FINDB-functions-c7912941-af2a-4bdf-a553-d0d89b0a0628"),("FIXED","FIXED-function-ffd5723c-324c-45e9-8b96-e41be2a8274a"),("LEFT","LEFT-LEFTB-functions-9203d2d2-7960-479b-84c6-1ea52b99640c"),("LEFTB","LEFT-LEFTB-functions-9203d2d2-7960-479b-84c6-1ea52b99640c"),("LEN","LEN-LENB-functions-29236f94-cedc-429d-affd-b5e33d2c67cb"),("LENB","LEN-LENB-functions-29236f94-cedc-429d-affd-b5e33d2c67cb"),("LOWER","LOWER-function-3f21df02-a80c-44b2-afaf-81358f9fdeb4"),("MID","MID-MIDB-functions-d5f9e25c-d7d6-472e-b568-4ecb12433028"),("MIDB","MID-MIDB-functions-d5f9e25c-d7d6-472e-b568-4ecb12433028"),("NUMBERVALUE","NUMBERVALUE-function-1b05c8cf-2bfa-4437-af70-596c7ea7d879"),("PHONETIC","PHONETIC-function-9a329dac-0c0f-42f8-9a55-639086988554"),("PROPER","PROPER-function-52a5a283-e8b2-49be-8506-b2887b889f94"),("REPLACE","REPLACE-REPLACEB-functions-8d799074-2425-4a8a-84bc-82472868878a"),("REPLACEB","REPLACE-REPLACEB-functions-8d799074-2425-4a8a-84bc-82472868878a"),("REPT","REPT-function-04c4d778-e712-43b4-9c15-d656582bb061"),("RIGHT","RIGHT-RIGHTB-functions-240267ee-9afa-4639-a02b-f19e1786cf2f"),("RIGHTB","RIGHT-RIGHTB-functions-240267ee-9afa-4639-a02b-f19e1786cf2f"),("SEARCH","SEARCH-SEARCHB-functions-9ab04538-0e55-4719-a72e-b6f54513b495"),("SEARCHB","SEARCH-SEARCHB-functions-9ab04538-0e55-4719-a72e-b6f54513b495"),("SUBSTITUTE","SUBSTITUTE-function-6434944e-a904-4336-a9b0-1e58df3bc332"),("T","T-function-fb83aeec-45e7-4924-af95-53e073541228"),("TEXT","TEXT-function-20d5ac4d-7b94-49fd-bb38-93d29371225c"),("TEXTJOIN","TEXTJOIN-function-357b449a-ec91-49d0-80c3-0e8fc845691c"),("TRIM","TRIM-function-410388fa-c5df-49c6-b16c-9e5630b479f9"),("UNICHAR","UNICHAR-function-ffeb64f5-f131-44c6-b332-5cd72f0659b8"),("UNICODE","UNICODE-function-adb74aaa-a2a5-4dde-aff6-966e4e81f16f"),("UPPER","UPPER-function-c11f29b3-d1a3-4537-8df6-04d0049963d6"),("VALUE","VALUE-function-257d0108-07dc-437d-ae1c-bc2d3953d8c2"),("CALL","CALL-function-32d58445-e646-4ffd-8d5e-b45077a5e995"),("EUROCONVERT","EUROCONVERT-function-79c8fd67-c665-450c-bb6c-15fc92f8345c"),("REGISTER.ID","REGISTERID-function-f8f0af0f-fd66-4704-a0f2-87b27b175b50"),("SQL.REQUEST","SQLREQUEST-function-4da47f3a-ff08-46ed-886c-3329aa5df008"),("ENCODEURL","ENCODEURL-function-07c7fb90-7c60-4bff-8687-fac50fe33d0e"),("FILTERXML","FILTERXML-function-4df72efc-11ec-4951-86f5-c1374812f5b7"),("WEBSERVICE","WEBSERVICE-function-0546a35a-ecc6-4739-aed7-c0b7ce1562c4")]+[]