In [ ]:
. ./nbs_header.ps1
. ./core.ps1
In [ ]:
{ pwsh ../apps/builder/build.ps1 } | Invoke-Block
── markdown ──────────────────────────────────────────────────────────────────── │ # DibParser (Polyglot) ── fsharp ────────────────────────────────────────────────────────────────────── #r @"../../../../../../../.nuget/packages/fsharp.control.asyncseq/3.2.1/lib/netstan dard2.1/FSharp.Control.AsyncSeq.dll" #r @"../../../../../../../.nuget/packages/system.reactive/6.0.1-preview.1/lib/net6. 0/System.Reactive.dll" #r @"../../../../../../../.nuget/packages/system.reactive.linq/6.0.1-preview.1/lib/ netstandard2.0/System.Reactive.Linq.dll" #r @"../../../../../../../.nuget/packages/argu/6.2.4/lib/netstandard2.0/Argu.dll" #r @"../../../../../../../.nuget/packages/fparsec/2.0.0-beta2/lib/netstandard2.1/FP arsec.dll" #r @"../../../../../../../.nuget/packages/fparsec/2.0.0-beta2/lib/netstandard2.1/FP arsecCS.dll" ── pwsh ──────────────────────────────────────────────────────────────────────── ls ~/.nuget/packages/argu ── [ 233.98ms - stdout ] ─────────────────────────────────────────────────────── │ 6.2.4 │ 6.2.5 │ ── fsharp ────────────────────────────────────────────────────────────────────── #if !INTERACTIVE open Lib #endif ── fsharp ────────────────────────────────────────────────────────────────────── open Common open FParsec open SpiralFileSystem.Operators ── markdown ──────────────────────────────────────────────────────────────────── │ ## escapeCell (test) ── fsharp ────────────────────────────────────────────────────────────────────── //// test let inline escapeCell input = input |> SpiralSm.split "\n" |> Array.map (function | line when line |> SpiralSm.starts_with "\\#!" || line |> SpiralSm.starts_with "\\#r" -> System.Text.RegularExpressions.Regex.Replace (line, "^\\\\#", "#") | line -> line ) |> SpiralSm.concat "\n" ── fsharp ────────────────────────────────────────────────────────────────────── //// test $"a{nl}\\#!magic{nl}b{nl}" |> escapeCell |> _assertEqual ( $"a{nl}#!magic{nl}b{nl}" ) ── [ 44.34ms - stdout ] ──────────────────────────────────────────────────────── │ "a │ #!magic │ b │ " │ │ ── markdown ──────────────────────────────────────────────────────────────────── │ ## magicMarker ── fsharp ────────────────────────────────────────────────────────────────────── let magicMarker : Parser<string, unit> = pstring "#!" ── fsharp ────────────────────────────────────────────────────────────────────── //// test "#!magic" |> run magicMarker |> _assertEqual ( Success ("#!", (), Position ("", 2, 1, 3)) ) ── [ 36.11ms - stdout ] ──────────────────────────────────────────────────────── │ Success: "#!" │ │ ── fsharp ────────────────────────────────────────────────────────────────────── //// test "##!magic" |> run magicMarker |> _assertEqual ( Failure ( $"Error in Ln: 1 Col: 1{nl}##!magic{nl}^{nl}Expecting: '#!'{nl}", ParserError ( Position ("", 0, 1, 1), (), ErrorMessageList (ExpectedString "#!") ), () ) ) ── [ 37.83ms - stdout ] ──────────────────────────────────────────────────────── │ Failure: │ Error in Ln: 1 Col: 1 │ ##!magic │ ^ │ Expecting: '#!' │ │ │ ── markdown ──────────────────────────────────────────────────────────────────── │ ## magicCommand ── fsharp ────────────────────────────────────────────────────────────────────── let magicCommand = magicMarker >>. manyTill anyChar newline |>> (System.String.Concat >> SpiralSm.trim) ── fsharp ────────────────────────────────────────────────────────────────────── //// test "#!magic a" |> run magicCommand |> _assertEqual ( Success ("magic", (), Position ("", 8, 2, 1)) ) ── [ 15.84ms - stdout ] ──────────────────────────────────────────────────────── │ Success: "magic" │ │ ── fsharp ────────────────────────────────────────────────────────────────────── //// test " #!magic a" |> run magicCommand |> _assertEqual ( Failure ( $"Error in Ln: 1 Col: 1{nl} #!magic{nl}^{nl}Expecting: '#!'{nl}", ParserError ( Position ("", 0, 1, 1), (), ErrorMessageList (ExpectedString "#!") ), () ) ) ── [ 20.43ms - stdout ] ──────────────────────────────────────────────────────── │ Failure: │ Error in Ln: 1 Col: 1 │ #!magic │ ^ │ Expecting: '#!' │ │ │ ── markdown ──────────────────────────────────────────────────────────────────── │ ## content ── fsharp ────────────────────────────────────────────────────────────────────── let content = (newline >>. magicMarker) <|> (eof >>. preturn "") |> attempt |> lookAhead |> manyTill anyChar |>> (System.String.Concat >> SpiralSm.trim) ── fsharp ────────────────────────────────────────────────────────────────────── //// test "#!magic a " |> run content |> _assertEqual ( Success ("#!magic a", (), Position ("", 14, 7, 1)) ) ── [ 14.61ms - stdout ] ──────────────────────────────────────────────────────── │ Success: "#!magic │ │ │ a" │ │ ── markdown ──────────────────────────────────────────────────────────────────── │ ## Output ── fsharp ────────────────────────────────────────────────────────────────────── type Output = | Fs | Md | Spi | Spir ── markdown ──────────────────────────────────────────────────────────────────── │ ## Magic ── fsharp ────────────────────────────────────────────────────────────────────── type Magic = | Fsharp | Markdown | Spiral of Output | Magic of string ── markdown ──────────────────────────────────────────────────────────────────── │ ## kernelOutputs ── fsharp ────────────────────────────────────────────────────────────────────── let inline kernelOutputs magic = match magic with | Fsharp -> [[ Fs ]] | Markdown -> [[ Md ]] | Spiral output -> [[ output ]] | _ -> [[]] ── markdown ──────────────────────────────────────────────────────────────────── │ ## Block ── fsharp ────────────────────────────────────────────────────────────────────── type Block = { magic : Magic content : string } ── markdown ──────────────────────────────────────────────────────────────────── │ ## block ── fsharp ────────────────────────────────────────────────────────────────────── let block = pipe2 magicCommand content (fun magic content -> let magic, content = match magic with | "fsharp" -> Fsharp, content | "markdown" -> Markdown, content | "spiral" -> let output = if content |> SpiralSm.contains "//// real\n" then Spir else Spi let content = if output = Spi then content else content |> SpiralSm.replace "//// real\n\n" "" |> SpiralSm.replace "//// real\n" "" Spiral output, content | magic -> magic |> Magic, content { magic = magic content = content }) ── fsharp ────────────────────────────────────────────────────────────────────── //// test "#!magic a " |> run block |> _assertEqual ( Success ( { magic = Magic "magic"; content = "a" }, (), Position ("", 14, 7, 1) ) ) ── [ 26.19ms - stdout ] ──────────────────────────────────────────────────────── │ Success: { magic = Magic "magic" │ content = "a" } │ │ ── markdown ──────────────────────────────────────────────────────────────────── │ ## blocks ── fsharp ────────────────────────────────────────────────────────────────────── let blocks = skipMany newline >>. sepEndBy block (skipMany1 newline) ── fsharp ────────────────────────────────────────────────────────────────────── //// test "#!magic1 a \#!magic2 b " |> escapeCell |> run blocks |> _assertEqual ( Success ( [[ { magic = Magic "magic1"; content = "a" } { magic = Magic "magic2"; content = "b" } ]], (), Position ("", 26, 9, 1) ) ) ── [ 26.17ms - stdout ] ──────────────────────────────────────────────────────── │ Success: [{ magic = Magic "magic1" │ content = "a" }; { magic = Magic "magic2" │ content = "b" }] │ │ ── markdown ──────────────────────────────────────────────────────────────────── │ ## formatBlock ── fsharp ────────────────────────────────────────────────────────────────────── let inline formatBlock output (block : Block) = match output, block with | output, { magic = Markdown; content = content } -> let markdownComment = match output with | Spi | Spir -> "/// " | Fs -> "/// " | _ -> "" content |> SpiralSm.split "\n" |> Array.map (SpiralSm.trim_end [[||]]) |> Array.filter (SpiralSm.ends_with " (test)" >> not) |> Array.map (function | "" -> markdownComment | line -> System.Text.RegularExpressions.Regex.Replace (line, "^\\s*", $"$&{markdownComment}") ) |> SpiralSm.concat "\n" | Fs, { magic = Fsharp; content = content } -> let trimmedContent = content |> SpiralSm.trim if trimmedContent |> SpiralSm.contains "//// test\n" || trimmedContent |> SpiralSm.contains "//// ignore\n" then "" else content |> SpiralSm.split "\n" |> Array.filter (SpiralSm.trim_start [[||]] >> SpiralSm.starts_with "#r" >> not) |> SpiralSm.concat "\n" | (Spi | Spir), { magic = Spiral output'; content = content } when output' = output -> let trimmedContent = content |> SpiralSm.trim if trimmedContent |> SpiralSm.contains "//// test\n" || trimmedContent |> SpiralSm.contains "//// ignore\n" then "" else content | _ -> "" ── fsharp ────────────────────────────────────────────────────────────────────── //// test "#!markdown a b c \#!markdown c \#!fsharp let a = 1" |> escapeCell |> run block |> function | Success (block, _, _) -> formatBlock Fs block | Failure (msg, _, _) -> failwith msg |> _assertEqual "/// a /// /// b /// /// c" ── [ 32.69ms - stdout ] ──────────────────────────────────────────────────────── │ "/// a │ /// │ /// b │ /// │ /// c" │ │ ── markdown ──────────────────────────────────────────────────────────────────── │ ## formatBlocks ── fsharp ────────────────────────────────────────────────────────────────────── let inline formatBlocks output blocks = blocks |> List.map (fun block -> block, formatBlock output block ) |> List.filter (snd >> (<>) "") |> fun list -> (list, (None, [[]])) ||> List.foldBack (fun (block, content) (lastMagic, acc) -> let lineBreak = if block.magic = Markdown && lastMagic <> Some Markdown && lastMagic <> None then "" else "\n" Some block.magic, $"{content}{lineBreak}" :: acc ) |> snd |> SpiralSm.concat "\n" ── fsharp ────────────────────────────────────────────────────────────────────── //// test "#!markdown a b \#!markdown c \#!fsharp let a = 1 \#!markdown d (test) \#!fsharp //// test let a = 2 \#!markdown e \#!fsharp let a = 3" |> escapeCell |> run blocks |> function | Success (blocks, _, _) -> formatBlocks Fs blocks | Failure (msg, _, _) -> failwith msg |> _assertEqual "/// a /// /// b /// c let a = 1 /// e let a = 3 " ── [ 41.40ms - stdout ] ──────────────────────────────────────────────────────── │ "/// a │ /// │ /// b │ │ /// c │ let a = 1 │ │ /// e │ let a = 3 │ " │ │ ── markdown ──────────────────────────────────────────────────────────────────── │ ## indentBlock ── fsharp ────────────────────────────────────────────────────────────────────── let inline indentBlock (block : Block) = { block with content = block.content |> SpiralSm.split "\n" |> Array.fold (fun (lines, isMultiline) line -> let trimmedLine = line |> SpiralSm.trim if trimmedLine = "" then "" :: lines, isMultiline else let inline singleQuoteLine () = trimmedLine |> Seq.sumBy ((=) '"' >> System.Convert.ToInt32) = 1 && trimmedLine |> SpiralSm.contains @"'""'" |> not && trimmedLine |> SpiralSm.ends_with "{" |> not && trimmedLine |> SpiralSm.ends_with "{|" |> not && trimmedLine |> SpiralSm.starts_with "}" |> not && trimmedLine |> SpiralSm.starts_with "|}" |> not match isMultiline, trimmedLine |> SpiralSm.split_string [[| $"{q}{q}{q}" |]] with | false, [[| _; _ |]] -> $" {line}" :: lines, true | true, [[| _; _ |]] -> line :: lines, false | false, _ when singleQuoteLine () -> $" {line}" :: lines, true | false, _ when line |> SpiralSm.starts_with "#" && block.magic = Fsharp -> line :: lines, false | false, _ -> $" {line}" :: lines, false | true, _ when singleQuoteLine () && line |> SpiralSm.starts_with " " -> $" {line}" :: lines, false | true, _ when singleQuoteLine () -> line :: lines, false | true, _ -> line :: lines, true ) ([[]], false) |> fst |> List.rev |> SpiralSm.concat "\n" } ── markdown ──────────────────────────────────────────────────────────────────── │ ## parse ── fsharp ────────────────────────────────────────────────────────────────────── let inline parse output input = match run blocks input with | Success (blocks, _, _) -> blocks |> List.filter (fun block -> block.magic |> kernelOutputs |> List.contains output || block.magic = Markdown ) |> List.map Some |> fun x -> x @ [[ None ]] |> List.pairwise |> List.choose (function | Some { magic = Markdown } as block, Some { magic = Markdown } -> block | Some { magic = Markdown } as block, Some { magic = magic } when magic |> kernelOutputs |> List.contains output -> block | Some { magic = Markdown } as block, _ when output = Md -> block | Some { magic = Markdown }, _ -> None | Some block, _ -> Some block | _ -> None ) |> List.fold (fun (acc, indent) -> function | { magic = Markdown; content = content } when output = Fs && content |> SpiralSm.starts_with "# " && content |> SpiralSm.ends_with ")" -> let moduleName, namespaceName = System.Text.RegularExpressions.Regex.Match (content, @"# (.*) \((.*)\)$") |> fun m -> m.Groups.[[1]].Value, m.Groups.[[2]].Value let moduleBlock = { magic = Fsharp content = $"#if !INTERACTIVE namespace {namespaceName} #endif module {moduleName} =" } moduleBlock :: acc, (indent + 1) | { magic = magic ; content = content } as block when indent > 0 -> indentBlock block :: acc, indent | block -> block :: acc, indent ) ([[]], 0) |> fst |> List.rev |> Result.Ok | Failure (errorMsg, _, _) -> Result.Error errorMsg ── fsharp ────────────────────────────────────────────────────────────────────── //// test let example1 = $"""#!meta {{"kernelInfo":{{"defaultKernelName":"fsharp","items":[[{{"aliases":[[]],"name": "fsharp"}},{{"aliases":[[]],"name":"fsharp"}}]]}}}} \#!markdown # TestModule (TestNamespace) \#!fsharp \#!import file.dib \#!fsharp \#r "nuget:Expecto" \#!markdown ## ParserLibrary \#!fsharp open System \#!markdown ## x (test) \#!fsharp //// ignore let x = 1 \#!spiral //// test inl x = 1i32 \#!spiral //// real inl x = 2i32 \#!spiral inl x = 3i32 \#!markdown ### TextInput \#!fsharp let str1 = "abc def" let str2 = "abc\ def" let str3 = $"1{{ 1 }}1" let str4 = $"1{{({{| a = 1 |}}).a}}1" let str5 = "abc \ def" let x = match '"' with | '"' -> true | _ -> false let long1 = {q}{q}{q}a{q}{q}{q} let long2 = {q}{q}{q} a {q}{q}{q} \#!fsharp type Position = {{ #if INTERACTIVE line : string #else line : int #endif column : int }}""" |> escapeCell ── fsharp ────────────────────────────────────────────────────────────────────── //// test example1 |> parse Fs |> Result.toOption |> Option.get |> (formatBlocks Fs) |> _assertEqual $"""#if !INTERACTIVE namespace TestNamespace #endif module TestModule = /// ## ParserLibrary open System /// ### TextInput let str1 = "abc def" let str2 = "abc\ def" let str3 = $"1{{ 1 }}1" let str4 = $"1{{({{| a = 1 |}}).a}}1" let str5 = "abc \ def" let x = match '"' with | '"' -> true | _ -> false let long1 = {q}{q}{q}a{q}{q}{q} let long2 = {q}{q}{q} a {q}{q}{q} type Position = {{ #if INTERACTIVE line : string #else line : int #endif column : int }} """ ── [ 87.84ms - stdout ] ──────────────────────────────────────────────────────── │ "#if !INTERACTIVE │ namespace TestNamespace │ #endif │ │ module TestModule = │ │ /// ## ParserLibrary │ open System │ │ /// ### TextInput │ let str1 = "abc │ def" │ │ let str2 = │ "abc\ │ def" │ │ let str3 = │ $"1{ │ 1 │ }1" │ │ let str4 = │ $"1{({| │ a = 1 │ |}).a}1" │ │ let str5 = │ "abc \ │ def" │ │ let x = │ match '"' with │ | '"' -> true │ | _ -> false │ │ let long1 = """a""" │ │ let long2 = │ """ │ a │ """ │ │ type Position = │ { │ #if INTERACTIVE │ line : string │ #else │ line : int │ #endif │ column : int │ } │ " │ │ ── fsharp ────────────────────────────────────────────────────────────────────── //// test example1 |> parse Md |> Result.toOption |> Option.get |> (formatBlocks Md) |> _assertEqual "# TestModule (TestNamespace) ## ParserLibrary ### TextInput " ── [ 78.24ms - stdout ] ──────────────────────────────────────────────────────── │ "# TestModule (TestNamespace) │ │ ## ParserLibrary │ │ ### TextInput │ " │ │ ── fsharp ────────────────────────────────────────────────────────────────────── //// test example1 |> parse Spi |> Result.toOption |> Option.get |> (formatBlocks Spi) |> _assertEqual "/// # TestModule (TestNamespace) /// ## ParserLibrary inl x = 3i32 " ── [ 79.30ms - stdout ] ──────────────────────────────────────────────────────── │ "/// # TestModule (TestNamespace) │ │ /// ## ParserLibrary │ inl x = 3i32 │ " │ │ ── fsharp ────────────────────────────────────────────────────────────────────── //// test example1 |> parse Spir |> Result.toOption |> Option.get |> (formatBlocks Spir) |> _assertEqual "/// # TestModule (TestNamespace) /// ## ParserLibrary inl x = 2i32 " ── [ 83.25ms - stdout ] ──────────────────────────────────────────────────────── │ "/// # TestModule (TestNamespace) │ │ /// ## ParserLibrary │ inl x = 2i32 │ " │ │ ── markdown ──────────────────────────────────────────────────────────────────── │ ## parseDibCode ── fsharp ────────────────────────────────────────────────────────────────────── let inline parseDibCode output file = async { trace Debug (fun () -> "parseDibCode") (fun () -> $"output: {output} / file: {file} / {_locals ()}") let! input = file |> SpiralFileSystem.read_all_text_async match parse output input with | Result.Ok blocks -> return blocks |> formatBlocks output | Result.Error msg -> return failwith msg } ── markdown ──────────────────────────────────────────────────────────────────── │ ## writeDibCode ── fsharp ────────────────────────────────────────────────────────────────────── let inline writeDibCode output path = async { trace Debug (fun () -> "writeDibCode") (fun () -> $"output: {output} / path: {path} / {_locals ()}") let! result = parseDibCode output path let pathDir = path |> System.IO.Path.GetDirectoryName let fileNameWithoutExt = match output, path |> System.IO.Path.GetFileNameWithoutExtension with | Spir, fileNameWithoutExt -> $"{fileNameWithoutExt}_real" | _, fileNameWithoutExt -> fileNameWithoutExt let outputPath = pathDir </> $"{fileNameWithoutExt}.{output |> string |> SpiralSm.to_lower}" do! result |> SpiralFileSystem.write_all_text_async outputPath } ── markdown ──────────────────────────────────────────────────────────────────── │ ## Arguments ── fsharp ────────────────────────────────────────────────────────────────────── [[<RequireQualifiedAccess>]] type Arguments = | [[<Argu.ArguAttributes.MainCommand; Argu.ArguAttributes.Mandatory>]] File of file : string * Output interface Argu.IArgParserTemplate with member s.Usage = match s with | File _ -> nameof File ── fsharp ────────────────────────────────────────────────────────────────────── //// test Argu.ArgumentParser.Create<Arguments>().PrintUsage () ── [ 75.47ms - return value ] ────────────────────────────────────────────────── │ "USAGE: dotnet-repl [--help] <file> <fs|md|spi|spir> │ │ FILE: │ │ <file> <fs|md|spi|spir> │ File │ │ OPTIONS: │ │ --help display this list of options. │ " │ ── markdown ──────────────────────────────────────────────────────────────────── │ ## main ── fsharp ────────────────────────────────────────────────────────────────────── let main args = let argsMap = args |> Runtime.parseArgsMap<Arguments> let files = argsMap.[[nameof Arguments.File]] |> List.map (function | Arguments.File (path, output) -> path, output ) files |> List.map (fun (path, output) -> path |> writeDibCode output) |> Async.Parallel |> Async.Ignore |> Async.runWithTimeout 30000 |> function | Some () -> 0 | None -> 1 ── fsharp ────────────────────────────────────────────────────────────────────── //// test let args = System.Environment.GetEnvironmentVariable "ARGS" |> SpiralRuntime.split_args |> Result.toArray |> Array.collect id match args with | [[||]] -> 0 | args -> if main args = 0 then 0 else failwith "main failed" ── [ 122.72ms - return value ] ───────────────────────────────────────────────── │ <div class="dni-plaintext"><pre>0 │ </pre></div><style> │ .dni-code-hint { │ font-style: italic; │ overflow: hidden; │ white-space: nowrap; │ } │ .dni-treeview { │ white-space: nowrap; │ } │ .dni-treeview td { │ vertical-align: top; │ text-align: start; │ } │ details.dni-treeview { │ padding-left: 1em; │ } │ table td { │ text-align: start; │ } │ table tr { │ vertical-align: top; │ margin: 0em 0px; │ } │ table tr td pre │ { │ vertical-align: top !important; │ margin: 0em 0px !important; │ } │ table th { │ text-align: start; │ } │ </style> ── [ 123.38ms - stdout ] ─────────────────────────────────────────────────────── │ 00:00:03 d #1 writeDibCode / output: Fs / path: Builder.dib │ 00:00:03 d #2 parseDibCode / output: Fs / file: Builder.dib │ 00:00:00 d #1 spiral.main / { args = Array(MutCell(["dib", "--path", "Builder.dib"])) } 00:00:00 d #2 runtime.execute_with_options / { file_name = dotnet; arguments = ["repl", "--exit-after-run", "--run", "/home/runner/work/polyglot/polyglot/apps/builder/Builder.dib", "--output-path", "/home/runner/work/polyglot/polyglot/apps/builder/Builder.dib.ipynb"]; options = { command = dotnet repl --exit-after-run --run "/home/runner/work/polyglot/polyglot/apps/builder/Builder.dib" --output-path "/home/runner/work/polyglot/polyglot/apps/builder/Builder.dib.ipynb"; cancellation_token = None; environment_variables = Array(MutCell([("TRACE_LEVEL", "Verbose"), ("AUTOMATION", "True")])); on_line = None; stdin = None; trace = false; working_directory = None } } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ # Builder (Polyglot) > > ── fsharp ────────────────────────────────────────────────────────────────────── > #r > @"../../../../../../../.nuget/packages/fsharp.control.asyncseq/3.2.1/lib/netstan > dard2.1/FSharp.Control.AsyncSeq.dll" > #r > @"../../../../../../../.nuget/packages/system.reactive/6.0.1-preview.1/lib/net6. > 0/System.Reactive.dll" > #r > @"../../../../../../../.nuget/packages/system.reactive.linq/6.0.1-preview.1/lib/ > netstandard2.0/System.Reactive.Linq.dll" > #r > @"../../../../../../../.nuget/packages/argu/6.2.4/lib/netstandard2.0/Argu.dll" > > ── fsharp ────────────────────────────────────────────────────────────────────── > #if !INTERACTIVE > open Lib > #endif > > ── fsharp ────────────────────────────────────────────────────────────────────── > open Common > open SpiralFileSystem.Operators > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## buildProject > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline buildProject runtime outputDir path = async { > let fullPath = path |> System.IO.Path.GetFullPath > let fileDir = fullPath |> System.IO.Path.GetDirectoryName > let extension = fullPath |> System.IO.Path.GetExtension > > trace Debug > (fun () -> "buildProject") > (fun () -> $"fullPath: {fullPath} / {_locals ()}") > > match extension with > | ".fsproj" -> () > | _ -> failwith "Invalid project file" > > let runtimes = > runtime > |> Option.map List.singleton > |> Option.defaultValue [[ "linux-x64"; "win-x64" ]] > > let outputDir = outputDir |> Option.defaultValue "dist" > > return! > runtimes > |> List.map (fun runtime -> async { > let command = $@"dotnet publish ""{path}"" --configuration Release > --output ""{outputDir}"" --runtime {runtime}" > let! exitCode, _result = > SpiralRuntime.execution_options (fun x -> > { x with > l0 = command > l6 = Some fileDir > } > ) > |> SpiralRuntime.execute_with_options_async > return exitCode > }) > |> Async.Sequential > |> Async.map Array.sum > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## persistCodeProject > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline persistCodeProject packages modules name hash code = async { > trace Debug > (fun () -> "persistCodeProject") > (fun () -> $"packages: {packages} / modules: {modules} / name: {name} / > hash: {hash} / code.Length: {code |> String.length} / {_locals ()}") > > let workspaceRoot = SpiralFileSystem.get_workspace_root () > > let targetDir = > let targetDir = workspaceRoot </> "target/Builder" </> name > match hash with > | Some hash -> targetDir </> "packages" </> hash > | None -> targetDir > targetDir |> System.IO.Directory.CreateDirectory |> ignore > > let filePath = targetDir </> $"{name}.fs" |> System.IO.Path.GetFullPath > do! code |> SpiralFileSystem.write_all_text_exists filePath > > let modulesCode = > modules > |> List.map (fun path -> $"""<Compile Include="{workspaceRoot </> path}" > />""") > |> SpiralSm.concat "\n " > > let fsprojPath = targetDir </> $"{name}.fsproj" > let fsprojCode = $"""<Project Sdk="Microsoft.NET.Sdk"> > <PropertyGroup> > <TargetFramework>net9.0</TargetFramework> > <LangVersion>preview</LangVersion> > <RollForward>Major</RollForward> > <TargetLatestRuntimePatch>true</TargetLatestRuntimePatch> > <ServerGarbageCollection>true</ServerGarbageCollection> > <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> > <PublishAot>false</PublishAot> > <PublishTrimmed>false</PublishTrimmed> > <PublishSingleFile>true</PublishSingleFile> > <SelfContained>true</SelfContained> > <Version>0.0.1-alpha.1</Version> > <OutputType>Exe</OutputType> > </PropertyGroup> > > <PropertyGroup Condition="$([[MSBuild]]::IsOSPlatform('FreeBSD'))"> > <DefineConstants>_FREEBSD</DefineConstants> > </PropertyGroup> > > <PropertyGroup Condition="$([[MSBuild]]::IsOSPlatform('Linux'))"> > <DefineConstants>_LINUX</DefineConstants> > </PropertyGroup> > > <PropertyGroup Condition="$([[MSBuild]]::IsOSPlatform('OSX'))"> > <DefineConstants>_OSX</DefineConstants> > </PropertyGroup> > > <PropertyGroup Condition="$([[MSBuild]]::IsOSPlatform('Windows'))"> > <DefineConstants>_WINDOWS</DefineConstants> > </PropertyGroup> > > <ItemGroup> > {modulesCode} > <Compile Include="{filePath}" /> > </ItemGroup> > > <ItemGroup> > <FrameworkReference Include="Microsoft.AspNetCore.App" /> > </ItemGroup> > > <Import Project="{workspaceRoot}/.paket/Paket.Restore.targets" /> > </Project> > """ > do! fsprojCode |> SpiralFileSystem.write_all_text_exists fsprojPath > > let paketReferencesPath = targetDir </> "paket.references" > let paketReferencesCode = > "FSharp.Core" :: packages > |> SpiralSm.concat "\n" > do! paketReferencesCode |> SpiralFileSystem.write_all_text_exists > paketReferencesPath > > return fsprojPath > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## buildCode > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline buildCode runtime packages modules outputDir name code = async { > let! fsprojPath = code |> persistCodeProject packages modules name None > let! exitCode = fsprojPath |> buildProject runtime outputDir > if exitCode <> 0 then > let! fsprojText = fsprojPath |> SpiralFileSystem.read_all_text_async > trace Critical > (fun () -> "buildCode") > (fun () -> $"code: {code |> SpiralSm.ellipsis_end 400} / fsprojText: > {fsprojText} / {_locals ()}") > return exitCode > } > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > "1 + 1 |> ignore" > |> buildCode None [[]] [[]] None "test1" > |> Async.runWithTimeout 180000 > |> _assertEqual (Some 0) > > ── [ 10.50s - stdout ] ───────────────────────────────────────────────────────── > │ 00:00:01 d #1 persistCodeProject / packages: [] / > modules: [] / name: test1 / hash: / code.Length: 15 > │ 00:00:01 d #2 buildProject / fullPath: > /home/runner/work/polyglot/polyglot/target/Builder/test1/test1.fsproj > │ 00:00:03 d #1 runtime.execute_with_options_async / { > file_name = dotnet; arguments = US5_0 > │ "publish > "/home/runner/work/polyglot/polyglot/target/Builder/test1/test1.fsproj" > --configuration Release --output "dist" --runtime linux-x64"; options = { > command = dotnet publish > "/home/runner/work/polyglot/polyglot/target/Builder/test1/test1.fsproj" > --configuration Release --output "dist" --runtime linux-x64; cancellation_token > = None; environment_variables = [||]; on_line = None; stdin = None; trace = > true; working_directory = Some > "/home/runner/work/polyglot/polyglot/target/Builder/test1" } } > │ 00:00:04 v #2 > Determining projects to restore... > │ 00:00:04 v #3 > Paket version > 9.0.2+a9b12aaeb8d8d5e47a415a3442b7920ed04e98e0 > │ 00:00:04 v #4 > The last full restore is still up to > date. Nothing left to do. > │ 00:00:04 v #5 > Total time taken: 0 milliseconds > │ 00:00:04 v #6 > Paket version > 9.0.2+a9b12aaeb8d8d5e47a415a3442b7920ed04e98e0 > │ 00:00:05 v #7 > Restoring > /home/runner/work/polyglot/polyglot/target/Builder/test1/test1.fsproj > │ 00:00:05 v #8 > Starting restore process. > │ 00:00:05 v #9 > Total time taken: 0 milliseconds > │ 00:00:05 v #10 > Restored > /home/runner/work/polyglot/polyglot/target/Builder/test1/test1.fsproj (in 282 > ms). > │ 00:00:07 v #11 > > /home/runner/work/polyglot/polyglot/target/Builder/test1/test1.fs(1,16): warning > FS0988: Main module of program is empty: nothing will happen when it is run > [/home/runner/work/polyglot/polyglot/target/Builder/test1/test1.fsproj] > │ 00:00:08 v #12 > test1 -> > /home/runner/work/polyglot/polyglot/target/Builder/test1/bin/Release/net9.0/linu > x-x64/test1.dll > │ 00:00:09 v #13 > test1 -> > /home/runner/work/polyglot/polyglot/target/Builder/test1/dist > │ 00:00:09 d #14 runtime.execute_with_options_async / { > exit_code = 0; output_length = 911; options = { command = dotnet publish > "/home/runner/work/polyglot/polyglot/target/Builder/test1/test1.fsproj" > --configuration Release --output "dist" --runtime linux-x64; cancellation_token > = None; environment_variables = [||]; on_line = None; stdin = None; trace = > true; working_directory = Some > "/home/runner/work/polyglot/polyglot/target/Builder/test1" } } > │ 00:00:09 d #15 runtime.execute_with_options_async / { > file_name = dotnet; arguments = US5_0 > │ "publish > "/home/runner/work/polyglot/polyglot/target/Builder/test1/test1.fsproj" > --configuration Release --output "dist" --runtime win-x64"; options = { command > = dotnet publish > "/home/runner/work/polyglot/polyglot/target/Builder/test1/test1.fsproj" > --configuration Release --output "dist" --runtime win-x64; cancellation_token = > None; environment_variables = [||]; on_line = None; stdin = None; trace = true; > working_directory = Some > "/home/runner/work/polyglot/polyglot/target/Builder/test1" } } > │ 00:00:09 v #16 > Determining projects to restore... > │ 00:00:10 v #17 > Paket version > 9.0.2+a9b12aaeb8d8d5e47a415a3442b7920ed04e98e0 > │ 00:00:10 v #18 > The last full restore is still up to > date. Nothing left to do. > │ 00:00:10 v #19 > Total time taken: 0 milliseconds > │ 00:00:10 v #20 > Restored > /home/runner/work/polyglot/polyglot/target/Builder/test1/test1.fsproj (in 254 > ms). > │ 00:00:12 v #21 > > /home/runner/work/polyglot/polyglot/target/Builder/test1/test1.fs(1,16): warning > FS0988: Main module of program is empty: nothing will happen when it is run > [/home/runner/work/polyglot/polyglot/target/Builder/test1/test1.fsproj] > │ 00:00:13 v #22 > test1 -> > /home/runner/work/polyglot/polyglot/target/Builder/test1/bin/Release/net9.0/win- > x64/test1.dll > │ 00:00:13 v #23 > test1 -> > /home/runner/work/polyglot/polyglot/target/Builder/test1/dist > │ 00:00:13 d #24 runtime.execute_with_options_async / { > exit_code = 0; output_length = 701; options = { command = dotnet publish > "/home/runner/work/polyglot/polyglot/target/Builder/test1/test1.fsproj" > --configuration Release --output "dist" --runtime win-x64; cancellation_token = > None; environment_variables = [||]; on_line = None; stdin = None; trace = true; > working_directory = Some > "/home/runner/work/polyglot/polyglot/target/Builder/test1" } } > │ Some 0 > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > "1 + a |> ignore" > |> buildCode None [[]] [[]] None "test2" > |> Async.runWithTimeout 180000 > |> _assertEqual (Some 2) > > ── [ 7.03s - stdout ] ────────────────────────────────────────────────────────── > │ 00:00:11 d #3 persistCodeProject / packages: [] / > modules: [] / name: test2 / hash: / code.Length: 15 > │ 00:00:11 d #4 buildProject / fullPath: > /home/runner/work/polyglot/polyglot/target/Builder/test2/test2.fsproj > │ 00:00:14 d #25 runtime.execute_with_options_async / { > file_name = dotnet; arguments = US5_0 > │ "publish > "/home/runner/work/polyglot/polyglot/target/Builder/test2/test2.fsproj" > --configuration Release --output "dist" --runtime linux-x64"; options = { > command = dotnet publish > "/home/runner/work/polyglot/polyglot/target/Builder/test2/test2.fsproj" > --configuration Release --output "dist" --runtime linux-x64; cancellation_token > = None; environment_variables = [||]; on_line = None; stdin = None; trace = > true; working_directory = Some > "/home/runner/work/polyglot/polyglot/target/Builder/test2" } } > │ 00:00:14 v #26 > Determining projects to restore... > │ 00:00:14 v #27 > Paket version > 9.0.2+a9b12aaeb8d8d5e47a415a3442b7920ed04e98e0 > │ 00:00:14 v #28 > The last full restore is still up to > date. Nothing left to do. > │ 00:00:14 v #29 > Total time taken: 0 milliseconds > │ 00:00:15 v #30 > Paket version > 9.0.2+a9b12aaeb8d8d5e47a415a3442b7920ed04e98e0 > │ 00:00:15 v #31 > Restoring > /home/runner/work/polyglot/polyglot/target/Builder/test2/test2.fsproj > │ 00:00:15 v #32 > Starting restore process. > │ 00:00:15 v #33 > Total time taken: 0 milliseconds > │ 00:00:16 v #34 > Restored > /home/runner/work/polyglot/polyglot/target/Builder/test2/test2.fsproj (in 247 > ms). > │ 00:00:17 v #35 > > /home/runner/work/polyglot/polyglot/target/Builder/test2/test2.fs(1,5): error > FS0039: The value or constructor 'a' is not defined. > [/home/runner/work/polyglot/polyglot/target/Builder/test2/test2.fsproj] > │ 00:00:17 d #36 runtime.execute_with_options_async / { > exit_code = 1; output_length = 704; options = { command = dotnet publish > "/home/runner/work/polyglot/polyglot/target/Builder/test2/test2.fsproj" > --configuration Release --output "dist" --runtime linux-x64; cancellation_token > = None; environment_variables = [||]; on_line = None; stdin = None; trace = > true; working_directory = Some > "/home/runner/work/polyglot/polyglot/target/Builder/test2" } } > │ 00:00:17 d #37 runtime.execute_with_options_async / { > file_name = dotnet; arguments = US5_0 > │ "publish > "/home/runner/work/polyglot/polyglot/target/Builder/test2/test2.fsproj" > --configuration Release --output "dist" --runtime win-x64"; options = { command > = dotnet publish > "/home/runner/work/polyglot/polyglot/target/Builder/test2/test2.fsproj" > --configuration Release --output "dist" --runtime win-x64; cancellation_token = > None; environment_variables = [||]; on_line = None; stdin = None; trace = true; > working_directory = Some > "/home/runner/work/polyglot/polyglot/target/Builder/test2" } } > │ 00:00:18 v #38 > Determining projects to restore... > │ 00:00:18 v #39 > Paket version > 9.0.2+a9b12aaeb8d8d5e47a415a3442b7920ed04e98e0 > │ 00:00:18 v #40 > The last full restore is still up to > date. Nothing left to do. > │ 00:00:18 v #41 > Total time taken: 0 milliseconds > │ 00:00:19 v #42 > Restored > /home/runner/work/polyglot/polyglot/target/Builder/test2/test2.fsproj (in 252 > ms). > │ 00:00:20 v #43 > > /home/runner/work/polyglot/polyglot/target/Builder/test2/test2.fs(1,5): error > FS0039: The value or constructor 'a' is not defined. > [/home/runner/work/polyglot/polyglot/target/Builder/test2/test2.fsproj] > │ 00:00:20 d #44 runtime.execute_with_options_async / { > exit_code = 1; output_length = 496; options = { command = dotnet publish > "/home/runner/work/polyglot/polyglot/target/Builder/test2/test2.fsproj" > --configuration Release --output "dist" --runtime win-x64; cancellation_token = > None; environment_variables = [||]; on_line = None; stdin = None; trace = true; > working_directory = Some > "/home/runner/work/polyglot/polyglot/target/Builder/test2" } } > │ 00:00:18 c #5 buildCode / code: 1 + a |> ignore / > fsprojText: <Project Sdk="Microsoft.NET.Sdk"> > │ <PropertyGroup> > │ <TargetFramework>net9.0</TargetFramework> > │ <LangVersion>preview</LangVersion> > │ <RollForward>Major</RollForward> > │ > <TargetLatestRuntimePatch>true</TargetLatestRuntimePatch> > │ > <ServerGarbageCollection>true</ServerGarbageCollection> > │ > <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> > │ <PublishAot>false</PublishAot> > │ <PublishTrimmed>false</PublishTrimmed> > │ <PublishSingleFile>true</PublishSingleFile> > │ <SelfContained>true</SelfContained> > │ <Version>0.0.1-alpha.1</Version> > │ <OutputType>Exe</OutputType> > │ </PropertyGroup> > │ > │ <PropertyGroup > Condition="$([MSBuild]::IsOSPlatform('FreeBSD'))"> > │ <DefineConstants>_FREEBSD</DefineConstants> > │ </PropertyGroup> > │ > │ <PropertyGroup > Condition="$([MSBuild]::IsOSPlatform('Linux'))"> > │ <DefineConstants>_LINUX</DefineConstants> > │ </PropertyGroup> > │ > │ <PropertyGroup > Condition="$([MSBuild]::IsOSPlatform('OSX'))"> > │ <DefineConstants>_OSX</DefineConstants> > │ </PropertyGroup> > │ > │ <PropertyGroup > Condition="$([MSBuild]::IsOSPlatform('Windows'))"> > │ <DefineConstants>_WINDOWS</DefineConstants> > │ </PropertyGroup> > │ > │ <ItemGroup> > │ > │ <Compile > Include="/home/runner/work/polyglot/polyglot/target/Builder/test2/test2.fs" /> > │ </ItemGroup> > │ > │ <ItemGroup> > │ <FrameworkReference > Include="Microsoft.AspNetCore.App" /> > │ </ItemGroup> > │ > │ <Import > Project="/home/runner/work/polyglot/polyglot/.paket/Paket.Restore.targets" /> > │ </Project> > │ > │ Some 2 > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## readFile > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline readFile path = async { > let! code = path |> SpiralFileSystem.read_all_text_async > > let code = System.Text.RegularExpressions.Regex.Replace ( > code, > @"( *)(let\s+main\s+\w+\s*=)", > fun m -> m.Groups.[[1]].Value + "[[<EntryPoint>]]\n" + > m.Groups.[[1]].Value + m.Groups.[[2]].Value > ) > > let codeTrim = code |> SpiralSm.trim_end [[||]] > return > if codeTrim |> SpiralSm.ends_with "\n()" > then codeTrim |> SpiralSm.slice 0 ((codeTrim |> String.length) - 3) > else code > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## buildFile > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline buildFile runtime packages modules path = async { > let fullPath = path |> System.IO.Path.GetFullPath > let dir = fullPath |> System.IO.Path.GetDirectoryName > let name = fullPath |> System.IO.Path.GetFileNameWithoutExtension > let! code = fullPath |> readFile > return! code |> buildCode runtime packages modules (dir </> "dist" |> Some) > name > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## persistFile > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline persistFile packages modules path = async { > let fullPath = path |> System.IO.Path.GetFullPath > let name = fullPath |> System.IO.Path.GetFileNameWithoutExtension > let! code = fullPath |> readFile > return! code |> persistCodeProject packages modules name None > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## Arguments > > ── fsharp ────────────────────────────────────────────────────────────────────── > [[<RequireQualifiedAccess>]] > type Arguments = > | [[<Argu.ArguAttributes.MainCommand; Argu.ArguAttributes.ExactlyOnce>]] > Path of path : string > | [[<Argu.ArguAttributes.Unique>]] Packages of packages : string list > | [[<Argu.ArguAttributes.Unique>]] Modules of modules : string list > | [[<Argu.ArguAttributes.Unique>]] Runtime of runtime : string > | [[<Argu.ArguAttributes.Unique>]] Persist_Only > > interface Argu.IArgParserTemplate with > member s.Usage = > match s with > | Path _ -> nameof Path > | Packages _ -> nameof Packages > | Modules _ -> nameof Modules > | Runtime _ -> nameof Runtime > | Persist_Only -> nameof Persist_Only > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > Argu.ArgumentParser.Create<Arguments>().PrintUsage () > > ── [ 78.89ms - return value ] ────────────────────────────────────────────────── > │ "USAGE: dotnet-repl [--help] [--packages [<packages>...]] > │ [--modules [<modules>...]] [--runtime > <runtime>] > │ [--persist-only] <path> > │ > │ PATH: > │ > │ <path> Path > │ > │ OPTIONS: > │ > │ --packages [<packages>...] > │ Packages > │ --modules [<modules>...] > │ Modules > │ --runtime <runtime> Runtime > │ --persist-only Persist_Only > │ --help display this list of options. > │ " > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## main > > ── fsharp ────────────────────────────────────────────────────────────────────── > let main args = > let argsMap = args |> Runtime.parseArgsMap<Arguments> > > let path = > match argsMap.[[nameof Arguments.Path]] with > | [[ Arguments.Path path ]] -> Some path > | _ -> None > |> Option.get > > let packages = > match argsMap |> Map.tryFind (nameof Arguments.Packages) with > | Some [[ Arguments.Packages packages ]] -> packages > | _ -> [[]] > > let modules = > match argsMap |> Map.tryFind (nameof Arguments.Modules) with > | Some [[ Arguments.Modules modules ]] -> modules > | _ -> [[]] > > let runtime = > match argsMap |> Map.tryFind (nameof Arguments.Runtime) with > | Some [[ Arguments.Runtime runtime ]] -> Some runtime > | _ -> None > > let persistOnly = argsMap |> Map.containsKey (nameof Arguments.Persist_Only) > > if persistOnly > then path |> persistFile packages modules |> Async.map (fun _ -> 0) > else path |> buildFile runtime packages modules > |> Async.runWithTimeout (60001 * 60 * 24) > |> function > | Some exitCode -> exitCode > | None -> 1 > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let args = > System.Environment.GetEnvironmentVariable "ARGS" > |> SpiralRuntime.split_args > |> Result.toArray > |> Array.collect id > > match args with > | [[||]] -> 0 > | args -> if main args = 0 then 0 else failwith "main failed" > > ── [ 14.51s - return value ] ─────────────────────────────────────────────────── > │ <div class="dni-plaintext"><pre>0 > │ </pre></div><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 14.51s - stdout ] ───────────────────────────────────────────────────────── > │ 00:00:19 d #6 persistCodeProject / packages: [Argu; > FSharp.Control.AsyncSeq; System.Reactive.Linq] / modules: > [deps/spiral/lib/spiral/common.fsx; deps/spiral/lib/spiral/sm.fsx; > deps/spiral/lib/spiral/crypto.fsx; ... ] / name: Builder / hash: / code.Length: > 8451 > │ 00:00:19 d #7 buildProject / fullPath: > /home/runner/work/polyglot/polyglot/target/Builder/Builder/Builder.fsproj > │ 00:00:21 d #45 runtime.execute_with_options_async / { > file_name = dotnet; arguments = US5_0 > │ "publish > "/home/runner/work/polyglot/polyglot/target/Builder/Builder/Builder.fsproj" > --configuration Release --output > "/home/runner/work/polyglot/polyglot/apps/builder/dist" --runtime linux-x64"; > options = { command = dotnet publish > "/home/runner/work/polyglot/polyglot/target/Builder/Builder/Builder.fsproj" > --configuration Release --output > "/home/runner/work/polyglot/polyglot/apps/builder/dist" --runtime linux-x64; > cancellation_token = None; environment_variables = [||]; on_line = None; stdin = > None; trace = true; working_directory = Some > "/home/runner/work/polyglot/polyglot/target/Builder/Builder" } } > │ 00:00:22 v #46 > Determining projects to restore... > │ 00:00:22 v #47 > Paket version > 9.0.2+a9b12aaeb8d8d5e47a415a3442b7920ed04e98e0 > │ 00:00:22 v #48 > The last full restore is still up to > date. Nothing left to do. > │ 00:00:22 v #49 > Total time taken: 0 milliseconds > │ 00:00:22 v #50 > Paket version > 9.0.2+a9b12aaeb8d8d5e47a415a3442b7920ed04e98e0 > │ 00:00:22 v #51 > Restoring > /home/runner/work/polyglot/polyglot/target/Builder/Builder/Builder.fsproj > │ 00:00:22 v #52 > Starting restore process. > │ 00:00:22 v #53 > Total time taken: 0 milliseconds > │ 00:00:23 v #54 > Restored > /home/runner/work/polyglot/polyglot/target/Builder/Builder/Builder.fsproj (in > 273 ms). > │ 00:00:35 v #55 > Builder -> > /home/runner/work/polyglot/polyglot/target/Builder/Builder/bin/Release/net9.0/li > nux-x64/Builder.dll > │ 00:00:35 v #56 > Builder -> > /home/runner/work/polyglot/polyglot/apps/builder/dist > │ 00:00:35 d #57 runtime.execute_with_options_async / { > exit_code = 0; output_length = 690; options = { command = dotnet publish > "/home/runner/work/polyglot/polyglot/target/Builder/Builder/Builder.fsproj" > --configuration Release --output > "/home/runner/work/polyglot/polyglot/apps/builder/dist" --runtime linux-x64; > cancellation_token = None; environment_variables = [||]; on_line = None; stdin = > None; trace = true; working_directory = Some > "/home/runner/work/polyglot/polyglot/target/Builder/Builder" } } > │ 00:00:48 v #3 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 29635 } 00:00:48 d #4 runtime.execute_with_options / { file_name = jupyter; arguments = ["nbconvert", "/home/runner/work/polyglot/polyglot/apps/builder/Builder.dib.ipynb", "--to", "html", "--HTMLExporter.theme=dark"]; options = { command = jupyter nbconvert "/home/runner/work/polyglot/polyglot/apps/builder/Builder.dib.ipynb" --to html --HTMLExporter.theme=dark; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:49 v #5 ! [NbConvertApp] Converting notebook /home/runner/work/polyglot/polyglot/apps/builder/Builder.dib.ipynb to html 00:00:49 v #6 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbformat/__init__.py:96: MissingIDFieldWarning: Cell is missing an id field, this will become a hard error in future nbformat versions. You may want to use `normalize()` on your notebooks before validations (available since nbformat 5.1.4). Previous versions of nbformat are fixing this issue transparently, and will stop doing so in the future. 00:00:49 v #7 ! validate(nb) 00:00:50 v #8 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbconvert/filters/highlight.py:71: UserWarning: IPython3 lexer unavailable, falling back on Python 3 00:00:50 v #9 ! return _pygments_highlight( 00:00:50 v #10 ! [NbConvertApp] Writing 337922 bytes to /home/runner/work/polyglot/polyglot/apps/builder/Builder.dib.html 00:00:50 v #11 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 902 } 00:00:50 d #12 spiral.run / dib / jupyter nbconvert / { exit_code = 0; jupyter_result_length = 902 } 00:00:50 d #13 runtime.execute_with_options / { file_name = pwsh; arguments = ["-c", "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/builder/Builder.dib.html'; (Get-Content $path -Raw) -replace '(id=\\\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"]; options = { command = pwsh -c "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/builder/Builder.dib.html'; (Get-Content $path -Raw) -replace '(id=\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:50 v #14 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 0 } 00:00:50 d #15 spiral.run / dib / html cell ids / { exit_code = 0; pwsh_replace_html_result_length = 0 } 00:00:50 d #16 spiral.run / dib / { exit_code = 0; result_length = 30596 } polyglot/apps/builder/build.ps1 / $env:CI:'true'
In [ ]:
{ pwsh ../deps/spiral/apps/spiral/build.ps1 -fast 1 -SkipFsx 1 } | Invoke-Block
spiral/apps/spiral/build.ps1 / ScriptDir: /home/runner/work/polyglot/polyglot/deps/spiral/apps/spiral / ResolvedScriptDir: /home/runner/work/polyglot/spiral/apps/spiral 00:00:00 d #1 persistCodeProject / packages: [Fable.Core] / modules: [deps/spiral/lib/spiral/common.fsx; deps/spiral/lib/spiral/sm.fsx; deps/spiral/lib/spiral/crypto.fsx; ... ] / name: spiral / hash: / code.Length: 1978446 spiral/lib/spiral/lib.ps1/GetTargetDir / targetDir: /home/runner/work/polyglot/polyglot/target/Builder/spiral polyglot/scripts/core.ps1/ResolveLink #4 / Path: /home/runner/work/polyglot/polyglot/deps/spiral/deps/polyglot/deps/spiral/lib/spiral/../../deps/polyglot / parent_target: / path_target: /home/runner/work/polyglot/polyglot / parent: /home/runner/work/polyglot/polyglot/deps/spiral/deps/polyglot/deps/spiral/lib/spiral/../../deps / End: polyglot spiral/lib/spiral/lib.ps1/BuildFable / TargetDir: /home/runner/work/polyglot/polyglot/target/Builder/spiral / ProjectName: spiral / Language: rs / Runtime: / root: /home/runner/work/polyglot/polyglot Fable 5.0.0-alpha.9: F# to Rust compiler (status: alpha) Thanks to the contributor! @battermann Stand with Ukraine! https://standwithukraine.com.ua/ Parsing target/Builder/spiral/spiral.fsproj... Project and references (14 source files) parsed in 3159ms Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.JSInterop.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Routing.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Routing.Abstractions.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Mvc.ViewFeatures.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Mvc.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Mvc.Core.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Http.Abstractions.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Components.Forms.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Components.Endpoints.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Components.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Started Fable compilation... Fable compilation finished in 14149ms ./deps/spiral/lib/spiral/common.fsx(2209,0): (2209,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/sm.fsx(561,0): (561,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/async_.fsx(250,0): (250,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/threading.fsx(139,0): (139,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/crypto.fsx(2436,0): (2436,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/date_time.fsx(2547,0): (2547,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/platform.fsx(122,0): (122,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/networking.fsx(5525,0): (5525,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/trace.fsx(2244,0): (2244,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/runtime.fsx(8246,0): (8246,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/file_system.fsx(20811,0): (20811,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! spiral/apps/spiral/build.ps1 / path: /home/runner/work/polyglot/polyglot/target/Builder/spiral/target/rs/spiral.rs spiral/apps/spiral/build.ps1 / $projectName: spiral / $env:CI:'true' Compiling spiral v0.0.1 (/home/runner/work/polyglot/spiral/apps/spiral) Finished `release` profile [optimized] target(s) in 18.03s
In [ ]:
{ pwsh ../apps/parser/build.ps1 } | Invoke-Block
00:00:00 d #1 spiral.main / { args = Array(MutCell(["dib", "--path", "DibParser.dib"])) } 00:00:00 d #2 runtime.execute_with_options / { file_name = dotnet; arguments = ["repl", "--exit-after-run", "--run", "/home/runner/work/polyglot/polyglot/apps/parser/DibParser.dib", "--output-path", "/home/runner/work/polyglot/polyglot/apps/parser/DibParser.dib.ipynb"]; options = { command = dotnet repl --exit-after-run --run "/home/runner/work/polyglot/polyglot/apps/parser/DibParser.dib" --output-path "/home/runner/work/polyglot/polyglot/apps/parser/DibParser.dib.ipynb"; cancellation_token = None; environment_variables = Array(MutCell([("TRACE_LEVEL", "Verbose"), ("AUTOMATION", "True")])); on_line = None; stdin = None; trace = false; working_directory = None } } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ # DibParser (Polyglot) > > ── fsharp ────────────────────────────────────────────────────────────────────── > #r > @"../../../../../../../.nuget/packages/fsharp.control.asyncseq/3.2.1/lib/netstan > dard2.1/FSharp.Control.AsyncSeq.dll" > #r > @"../../../../../../../.nuget/packages/system.reactive/6.0.1-preview.1/lib/net6. > 0/System.Reactive.dll" > #r > @"../../../../../../../.nuget/packages/system.reactive.linq/6.0.1-preview.1/lib/ > netstandard2.0/System.Reactive.Linq.dll" > #r > @"../../../../../../../.nuget/packages/argu/6.2.4/lib/netstandard2.0/Argu.dll" > #r > @"../../../../../../../.nuget/packages/fparsec/2.0.0-beta2/lib/netstandard2.1/FP > arsec.dll" > #r > @"../../../../../../../.nuget/packages/fparsec/2.0.0-beta2/lib/netstandard2.1/FP > arsecCS.dll" > > ── pwsh ──────────────────────────────────────────────────────────────────────── > ls ~/.nuget/packages/argu > > ── [ 241.56ms - stdout ] ─────────────────────────────────────────────────────── > │ 6.2.4 > │ 6.2.5 > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > #if !INTERACTIVE > open Lib > #endif > > ── fsharp ────────────────────────────────────────────────────────────────────── > open Common > open FParsec > open SpiralFileSystem.Operators > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## escapeCell (test) > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let inline escapeCell input = > input > |> SpiralSm.split "\n" > |> Array.map (function > | line when line |> SpiralSm.starts_with "\\#!" || line |> > SpiralSm.starts_with "\\#r" -> > System.Text.RegularExpressions.Regex.Replace (line, "^\\\\#", "#") > | line -> line > ) > |> SpiralSm.concat "\n" > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > $"a{nl}\\#!magic{nl}b{nl}" > |> escapeCell > |> _assertEqual ( > $"a{nl}#!magic{nl}b{nl}" > ) > > ── [ 43.98ms - stdout ] ──────────────────────────────────────────────────────── > │ "a > │ #!magic > │ b > │ " > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## magicMarker > > ── fsharp ────────────────────────────────────────────────────────────────────── > let magicMarker : Parser<string, unit> = pstring "#!" > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > "#!magic" > |> run magicMarker > |> _assertEqual ( > Success ("#!", (), Position ("", 2, 1, 3)) > ) > > ── [ 26.08ms - stdout ] ──────────────────────────────────────────────────────── > │ Success: "#!" > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > "##!magic" > |> run magicMarker > |> _assertEqual ( > Failure ( > $"Error in Ln: 1 Col: 1{nl}##!magic{nl}^{nl}Expecting: '#!'{nl}", > ParserError ( > Position ("", 0, 1, 1), > (), > ErrorMessageList (ExpectedString "#!") > ), > () > ) > ) > > ── [ 23.90ms - stdout ] ──────────────────────────────────────────────────────── > │ Failure: > │ Error in Ln: 1 Col: 1 > │ ##!magic > │ ^ > │ Expecting: '#!' > │ > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## magicCommand > > ── fsharp ────────────────────────────────────────────────────────────────────── > let magicCommand = > magicMarker > >>. manyTill anyChar newline > |>> (System.String.Concat >> SpiralSm.trim) > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > "#!magic > > a" > |> run magicCommand > |> _assertEqual ( > Success ("magic", (), Position ("", 8, 2, 1)) > ) > > ── [ 15.97ms - stdout ] ──────────────────────────────────────────────────────── > │ Success: "magic" > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > " #!magic > > a" > |> run magicCommand > |> _assertEqual ( > Failure ( > $"Error in Ln: 1 Col: 1{nl} #!magic{nl}^{nl}Expecting: '#!'{nl}", > ParserError ( > Position ("", 0, 1, 1), > (), > ErrorMessageList (ExpectedString "#!") > ), > () > ) > ) > > ── [ 15.87ms - stdout ] ──────────────────────────────────────────────────────── > │ Failure: > │ Error in Ln: 1 Col: 1 > │ #!magic > │ ^ > │ Expecting: '#!' > │ > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## content > > ── fsharp ────────────────────────────────────────────────────────────────────── > let content = > (newline >>. magicMarker) <|> (eof >>. preturn "") > |> attempt > |> lookAhead > |> manyTill anyChar > |>> (System.String.Concat >> SpiralSm.trim) > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > "#!magic > > > a > > > " > |> run content > |> _assertEqual ( > Success ("#!magic > > > a", (), Position ("", 14, 7, 1)) > ) > > ── [ 15.22ms - stdout ] ──────────────────────────────────────────────────────── > │ Success: "#!magic > │ > │ > │ a" > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## Output > > ── fsharp ────────────────────────────────────────────────────────────────────── > type Output = > | Fs > | Md > | Spi > | Spir > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## Magic > > ── fsharp ────────────────────────────────────────────────────────────────────── > type Magic = > | Fsharp > | Markdown > | Spiral of Output > | Magic of string > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## kernelOutputs > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline kernelOutputs magic = > match magic with > | Fsharp -> [[ Fs ]] > | Markdown -> [[ Md ]] > | Spiral output -> [[ output ]] > | _ -> [[]] > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## Block > > ── fsharp ────────────────────────────────────────────────────────────────────── > type Block = > { > magic : Magic > content : string > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## block > > ── fsharp ────────────────────────────────────────────────────────────────────── > let block = > pipe2 > magicCommand > content > (fun magic content -> > let magic, content = > match magic with > | "fsharp" -> Fsharp, content > | "markdown" -> Markdown, content > | "spiral" -> > let output = if content |> SpiralSm.contains "//// real\n" > then Spir else Spi > let content = > if output = Spi > then content > else > content > |> SpiralSm.replace "//// real\n\n" "" > |> SpiralSm.replace "//// real\n" "" > Spiral output, content > | magic -> magic |> Magic, content > { > magic = magic > content = content > }) > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > "#!magic > > > a > > > " > |> run block > |> _assertEqual ( > Success ( > { magic = Magic "magic"; content = "a" }, > (), > Position ("", 14, 7, 1) > ) > ) > > ── [ 25.44ms - stdout ] ──────────────────────────────────────────────────────── > │ Success: { magic = Magic "magic" > │ content = "a" } > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## blocks > > ── fsharp ────────────────────────────────────────────────────────────────────── > let blocks = > skipMany newline > >>. sepEndBy block (skipMany1 newline) > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > > "#!magic1 > > a > > \#!magic2 > > b > > " > |> escapeCell > |> run blocks > |> _assertEqual ( > Success ( > [[ > { magic = Magic "magic1"; content = "a" } > { magic = Magic "magic2"; content = "b" } > ]], > (), > Position ("", 26, 9, 1) > ) > ) > > ── [ 25.44ms - stdout ] ──────────────────────────────────────────────────────── > │ Success: [{ magic = Magic "magic1" > │ content = "a" }; { magic = Magic "magic2" > │ content = "b" }] > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## formatBlock > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline formatBlock output (block : Block) = > match output, block with > | output, { magic = Markdown; content = content } -> > let markdownComment = > match output with > | Spi | Spir -> "/// " > | Fs -> "/// " > | _ -> "" > content > |> SpiralSm.split "\n" > |> Array.map (SpiralSm.trim_end [[||]]) > |> Array.filter (SpiralSm.ends_with " (test)" >> not) > |> Array.map (function > | "" -> markdownComment > | line -> System.Text.RegularExpressions.Regex.Replace (line, > "^\\s*", $"$&{markdownComment}") > ) > |> SpiralSm.concat "\n" > | Fs, { magic = Fsharp; content = content } -> > let trimmedContent = content |> SpiralSm.trim > if trimmedContent |> SpiralSm.contains "//// test\n" > || trimmedContent |> SpiralSm.contains "//// ignore\n" > then "" > else > content > |> SpiralSm.split "\n" > |> Array.filter (SpiralSm.trim_start [[||]] >> SpiralSm.starts_with > "#r" >> not) > |> SpiralSm.concat "\n" > | (Spi | Spir), { magic = Spiral output'; content = content } when output' = > output -> > let trimmedContent = content |> SpiralSm.trim > if trimmedContent |> SpiralSm.contains "//// test\n" > || trimmedContent |> SpiralSm.contains "//// ignore\n" > then "" > else content > | _ -> "" > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > "#!markdown > > > a > > b > > c > > > \#!markdown > > > c > > > \#!fsharp > > > let a = 1" > |> escapeCell > |> run block > |> function > | Success (block, _, _) -> formatBlock Fs block > | Failure (msg, _, _) -> failwith msg > |> _assertEqual "/// a > /// > /// b > /// > /// c" > > ── [ 32.51ms - stdout ] ──────────────────────────────────────────────────────── > │ "/// a > │ /// > │ /// b > │ /// > │ /// c" > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## formatBlocks > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline formatBlocks output blocks = > blocks > |> List.map (fun block -> > block, formatBlock output block > ) > |> List.filter (snd >> (<>) "") > |> fun list -> > (list, (None, [[]])) > ||> List.foldBack (fun (block, content) (lastMagic, acc) -> > let lineBreak = > if block.magic = Markdown && lastMagic <> Some Markdown && > lastMagic <> None > then "" > else "\n" > Some block.magic, $"{content}{lineBreak}" :: acc > ) > |> snd > |> SpiralSm.concat "\n" > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > "#!markdown > > > a > > b > > > \#!markdown > > > c > > > \#!fsharp > > > let a = 1 > > \#!markdown > > d (test) > > \#!fsharp > > //// test > > let a = 2 > > \#!markdown > > e > > \#!fsharp > > let a = 3" > |> escapeCell > |> run blocks > |> function > | Success (blocks, _, _) -> formatBlocks Fs blocks > | Failure (msg, _, _) -> failwith msg > |> _assertEqual "/// a > /// > /// b > > /// c > let a = 1 > > /// e > let a = 3 > " > > ── [ 40.75ms - stdout ] ──────────────────────────────────────────────────────── > │ "/// a > │ /// > │ /// b > │ > │ /// c > │ let a = 1 > │ > │ /// e > │ let a = 3 > │ " > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## indentBlock > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline indentBlock (block : Block) = > { block with > content = > block.content > |> SpiralSm.split "\n" > |> Array.fold > (fun (lines, isMultiline) line -> > let trimmedLine = line |> SpiralSm.trim > if trimmedLine = "" > then "" :: lines, isMultiline > else > let inline singleQuoteLine () = > trimmedLine |> Seq.sumBy ((=) '"' >> > System.Convert.ToInt32) = 1 > && trimmedLine |> SpiralSm.contains @"'""'" |> not > && trimmedLine |> SpiralSm.ends_with "{" |> not > && trimmedLine |> SpiralSm.ends_with "{|" |> not > && trimmedLine |> SpiralSm.starts_with "}" |> not > && trimmedLine |> SpiralSm.starts_with "|}" |> not > > match isMultiline, trimmedLine |> SpiralSm.split_string > [[| $"{q}{q}{q}" |]] with > | false, [[| _; _ |]] -> > $" {line}" :: lines, true > > | true, [[| _; _ |]] -> > line :: lines, false > > | false, _ when singleQuoteLine () -> > $" {line}" :: lines, true > > | false, _ when line |> SpiralSm.starts_with "#" && > block.magic = Fsharp -> > line :: lines, false > > | false, _ -> > $" {line}" :: lines, false > > | true, _ when singleQuoteLine () && line |> > SpiralSm.starts_with " " -> > $" {line}" :: lines, false > > | true, _ when singleQuoteLine () -> > line :: lines, false > > | true, _ -> > line :: lines, true > ) > ([[]], false) > |> fst > |> List.rev > |> SpiralSm.concat "\n" > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## parse > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline parse output input = > match run blocks input with > | Success (blocks, _, _) -> > blocks > |> List.filter (fun block -> > block.magic |> kernelOutputs |> List.contains output || block.magic > = Markdown > ) > |> List.map Some > |> fun x -> x @ [[ None ]] > |> List.pairwise > |> List.choose (function > | Some { magic = Markdown } as block, Some { magic = Markdown } -> > block > | Some { magic = Markdown } as block, Some { magic = magic } > when magic |> kernelOutputs |> List.contains output -> block > | Some { magic = Markdown } as block, _ when output = Md -> block > | Some { magic = Markdown }, _ -> None > | Some block, _ -> Some block > | _ -> None > ) > |> List.fold > (fun (acc, indent) -> function > | { magic = Markdown; content = content } > when output = Fs > && content |> SpiralSm.starts_with "# " > && content |> SpiralSm.ends_with ")" > -> > let moduleName, namespaceName = > System.Text.RegularExpressions.Regex.Match (content, @"# > (.*) \((.*)\)$") > |> fun m -> m.Groups.[[1]].Value, m.Groups.[[2]].Value > > let moduleBlock = > { > magic = Fsharp > content = > $"#if !INTERACTIVE > namespace {namespaceName} > #endif > > module {moduleName} =" > } > > moduleBlock :: acc, (indent + 1) > | { magic = magic ; content = content } as block > when indent > 0 > -> > indentBlock block :: acc, indent > | block -> block :: acc, indent > ) > ([[]], 0) > |> fst > |> List.rev > |> Result.Ok > | Failure (errorMsg, _, _) -> Result.Error errorMsg > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let example1 = > $"""#!meta > > {{"kernelInfo":{{"defaultKernelName":"fsharp","items":[[{{"aliases":[[]],"name": > "fsharp"}},{{"aliases":[[]],"name":"fsharp"}}]]}}}} > > \#!markdown > > # TestModule (TestNamespace) > > \#!fsharp > > \#!import file.dib > > \#!fsharp > > \#r "nuget:Expecto" > > \#!markdown > > ## ParserLibrary > > \#!fsharp > > open System > > \#!markdown > > ## x (test) > > \#!fsharp > > //// ignore > > let x = 1 > > \#!spiral > > //// test > > inl x = 1i32 > > \#!spiral > > //// real > > inl x = 2i32 > > \#!spiral > > inl x = 3i32 > > \#!markdown > > ### TextInput > > \#!fsharp > > let str1 = "abc > def" > > let str2 = > "abc\ > def" > > let str3 = > $"1{{ > 1 > }}1" > > let str4 = > $"1{{({{| > a = 1 > |}}).a}}1" > > let str5 = > "abc \ > def" > > let x = > match '"' with > | '"' -> true > | _ -> false > > let long1 = {q}{q}{q}a{q}{q}{q} > > let long2 = > {q}{q}{q} > a > {q}{q}{q} > > \#!fsharp > > type Position = > {{ > #if INTERACTIVE > line : string > #else > line : int > #endif > column : int > }}""" > |> escapeCell > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > example1 > |> parse Fs > |> Result.toOption > |> Option.get > |> (formatBlocks Fs) > |> _assertEqual $"""#if !INTERACTIVE > namespace TestNamespace > #endif > > module TestModule = > > /// ## ParserLibrary > open System > > /// ### TextInput > let str1 = "abc > def" > > let str2 = > "abc\ > def" > > let str3 = > $"1{{ > 1 > }}1" > > let str4 = > $"1{{({{| > a = 1 > |}}).a}}1" > > let str5 = > "abc \ > def" > > let x = > match '"' with > | '"' -> true > | _ -> false > > let long1 = {q}{q}{q}a{q}{q}{q} > > let long2 = > {q}{q}{q} > a > {q}{q}{q} > > type Position = > {{ > #if INTERACTIVE > line : string > #else > line : int > #endif > column : int > }} > """ > > ── [ 86.45ms - stdout ] ──────────────────────────────────────────────────────── > │ "#if !INTERACTIVE > │ namespace TestNamespace > │ #endif > │ > │ module TestModule = > │ > │ /// ## ParserLibrary > │ open System > │ > │ /// ### TextInput > │ let str1 = "abc > │ def" > │ > │ let str2 = > │ "abc\ > │ def" > │ > │ let str3 = > │ $"1{ > │ 1 > │ }1" > │ > │ let str4 = > │ $"1{({| > │ a = 1 > │ |}).a}1" > │ > │ let str5 = > │ "abc \ > │ def" > │ > │ let x = > │ match '"' with > │ | '"' -> true > │ | _ -> false > │ > │ let long1 = """a""" > │ > │ let long2 = > │ """ > │ a > │ """ > │ > │ type Position = > │ { > │ #if INTERACTIVE > │ line : string > │ #else > │ line : int > │ #endif > │ column : int > │ } > │ " > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > example1 > |> parse Md > |> Result.toOption > |> Option.get > |> (formatBlocks Md) > |> _assertEqual "# TestModule (TestNamespace) > > ## ParserLibrary > > ### TextInput > " > > ── [ 76.09ms - stdout ] ──────────────────────────────────────────────────────── > │ "# TestModule (TestNamespace) > │ > │ ## ParserLibrary > │ > │ ### TextInput > │ " > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > example1 > |> parse Spi > |> Result.toOption > |> Option.get > |> (formatBlocks Spi) > |> _assertEqual "/// # TestModule (TestNamespace) > > /// ## ParserLibrary > inl x = 3i32 > " > > ── [ 77.04ms - stdout ] ──────────────────────────────────────────────────────── > │ "/// # TestModule (TestNamespace) > │ > │ /// ## ParserLibrary > │ inl x = 3i32 > │ " > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > example1 > |> parse Spir > |> Result.toOption > |> Option.get > |> (formatBlocks Spir) > |> _assertEqual "/// # TestModule (TestNamespace) > > /// ## ParserLibrary > inl x = 2i32 > " > > ── [ 84.47ms - stdout ] ──────────────────────────────────────────────────────── > │ "/// # TestModule (TestNamespace) > │ > │ /// ## ParserLibrary > │ inl x = 2i32 > │ " > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## parseDibCode > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline parseDibCode output file = async { > trace Debug > (fun () -> "parseDibCode") > (fun () -> $"output: {output} / file: {file} / {_locals ()}") > let! input = file |> SpiralFileSystem.read_all_text_async > match parse output input with > | Result.Ok blocks -> return blocks |> formatBlocks output > | Result.Error msg -> return failwith msg > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## writeDibCode > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline writeDibCode output path = async { > trace Debug > (fun () -> "writeDibCode") > (fun () -> $"output: {output} / path: {path} / {_locals ()}") > let! result = parseDibCode output path > let pathDir = path |> System.IO.Path.GetDirectoryName > let fileNameWithoutExt = > match output, path |> System.IO.Path.GetFileNameWithoutExtension with > | Spir, fileNameWithoutExt -> $"{fileNameWithoutExt}_real" > | _, fileNameWithoutExt -> fileNameWithoutExt > let outputPath = pathDir </> $"{fileNameWithoutExt}.{output |> string |> > SpiralSm.to_lower}" > do! result |> SpiralFileSystem.write_all_text_async outputPath > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## Arguments > > ── fsharp ────────────────────────────────────────────────────────────────────── > [[<RequireQualifiedAccess>]] > type Arguments = > | [[<Argu.ArguAttributes.MainCommand; Argu.ArguAttributes.Mandatory>]] > File of file : string * Output > > interface Argu.IArgParserTemplate with > member s.Usage = > match s with > | File _ -> nameof File > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > Argu.ArgumentParser.Create<Arguments>().PrintUsage () > > ── [ 65.16ms - return value ] ────────────────────────────────────────────────── > │ "USAGE: dotnet-repl [--help] <file> <fs|md|spi|spir> > │ > │ FILE: > │ > │ <file> <fs|md|spi|spir> > │ File > │ > │ OPTIONS: > │ > │ --help display this list of options. > │ " > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## main > > ── fsharp ────────────────────────────────────────────────────────────────────── > let main args = > let argsMap = args |> Runtime.parseArgsMap<Arguments> > > let files = > argsMap.[[nameof Arguments.File]] > |> List.map (function > | Arguments.File (path, output) -> path, output > ) > > files > |> List.map (fun (path, output) -> path |> writeDibCode output) > |> Async.Parallel > |> Async.Ignore > |> Async.runWithTimeout 30000 > |> function > | Some () -> 0 > | None -> 1 > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let args = > System.Environment.GetEnvironmentVariable "ARGS" > |> SpiralRuntime.split_args > |> Result.toArray > |> Array.collect id > > match args with > | [[||]] -> 0 > | args -> if main args = 0 then 0 else failwith "main failed" > > ── [ 121.84ms - return value ] ───────────────────────────────────────────────── > │ <div class="dni-plaintext"><pre>0 > │ </pre></div><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 122.57ms - stdout ] ─────────────────────────────────────────────────────── > │ 00:00:03 d #1 writeDibCode / output: Fs / path: > DibParser.dib > │ 00:00:03 d #2 parseDibCode / output: Fs / file: > DibParser.dib > │ 00:00:18 v #3 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 30075 } 00:00:18 d #4 runtime.execute_with_options / { file_name = jupyter; arguments = ["nbconvert", "/home/runner/work/polyglot/polyglot/apps/parser/DibParser.dib.ipynb", "--to", "html", "--HTMLExporter.theme=dark"]; options = { command = jupyter nbconvert "/home/runner/work/polyglot/polyglot/apps/parser/DibParser.dib.ipynb" --to html --HTMLExporter.theme=dark; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:18 v #5 ! [NbConvertApp] Converting notebook /home/runner/work/polyglot/polyglot/apps/parser/DibParser.dib.ipynb to html 00:00:18 v #6 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbformat/__init__.py:96: MissingIDFieldWarning: Cell is missing an id field, this will become a hard error in future nbformat versions. You may want to use `normalize()` on your notebooks before validations (available since nbformat 5.1.4). Previous versions of nbformat are fixing this issue transparently, and will stop doing so in the future. 00:00:18 v #7 ! validate(nb) 00:00:19 v #8 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbconvert/filters/highlight.py:71: UserWarning: IPython3 lexer unavailable, falling back on Python 3 00:00:19 v #9 ! return _pygments_highlight( 00:00:19 v #10 ! [NbConvertApp] Writing 381005 bytes to /home/runner/work/polyglot/polyglot/apps/parser/DibParser.dib.html 00:00:19 v #11 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 904 } 00:00:19 d #12 spiral.run / dib / jupyter nbconvert / { exit_code = 0; jupyter_result_length = 904 } 00:00:19 d #13 runtime.execute_with_options / { file_name = pwsh; arguments = ["-c", "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/parser/DibParser.dib.html'; (Get-Content $path -Raw) -replace '(id=\\\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"]; options = { command = pwsh -c "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/parser/DibParser.dib.html'; (Get-Content $path -Raw) -replace '(id=\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:20 v #14 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 0 } 00:00:20 d #15 spiral.run / dib / html cell ids / { exit_code = 0; pwsh_replace_html_result_length = 0 } 00:00:20 d #16 spiral.run / dib / { exit_code = 0; result_length = 31038 } 00:00:00 d #1 persistCodeProject / packages: [Argu; FParsec; FSharp.Control.AsyncSeq; ... ] / modules: [deps/spiral/lib/spiral/common.fsx; deps/spiral/lib/spiral/sm.fsx; deps/spiral/lib/spiral/crypto.fsx; ... ] / name: DibParser / hash: / code.Length: 11045 00:00:00 d #2 buildProject / fullPath: /home/runner/work/polyglot/polyglot/target/Builder/DibParser/DibParser.fsproj 00:00:00 d #1 runtime.execute_with_options_async / { file_name = dotnet; arguments = US5_0 "publish "/home/runner/work/polyglot/polyglot/target/Builder/DibParser/DibParser.fsproj" --configuration Release --output "/home/runner/work/polyglot/polyglot/apps/parser/dist" --runtime linux-x64"; options = { command = dotnet publish "/home/runner/work/polyglot/polyglot/target/Builder/DibParser/DibParser.fsproj" --configuration Release --output "/home/runner/work/polyglot/polyglot/apps/parser/dist" --runtime linux-x64; cancellation_token = None; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot/target/Builder/DibParser" } } 00:00:00 v #2 > Determining projects to restore... 00:00:01 v #3 > Paket version 9.0.2+a9b12aaeb8d8d5e47a415a3442b7920ed04e98e0 00:00:01 v #4 > The last full restore is still up to date. Nothing left to do. 00:00:01 v #5 > Total time taken: 0 milliseconds 00:00:01 v #6 > Paket version 9.0.2+a9b12aaeb8d8d5e47a415a3442b7920ed04e98e0 00:00:01 v #7 > Restoring /home/runner/work/polyglot/polyglot/target/Builder/DibParser/DibParser.fsproj 00:00:01 v #8 > Starting restore process. 00:00:01 v #9 > Total time taken: 0 milliseconds 00:00:02 v #10 > Restored /home/runner/work/polyglot/polyglot/target/Builder/DibParser/DibParser.fsproj (in 261 ms). 00:00:13 v #11 > DibParser -> /home/runner/work/polyglot/polyglot/target/Builder/DibParser/bin/Release/net9.0/linux-x64/DibParser.dll 00:00:13 v #12 > DibParser -> /home/runner/work/polyglot/polyglot/apps/parser/dist 00:00:13 d #13 runtime.execute_with_options_async / { exit_code = 0; output_length = 705; options = { command = dotnet publish "/home/runner/work/polyglot/polyglot/target/Builder/DibParser/DibParser.fsproj" --configuration Release --output "/home/runner/work/polyglot/polyglot/apps/parser/dist" --runtime linux-x64; cancellation_token = None; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot/target/Builder/DibParser" } } 00:00:00 d #1 spiral.main / { args = Array(MutCell(["dib", "--path", "JsonParser.dib"])) } 00:00:00 d #2 runtime.execute_with_options / { file_name = dotnet; arguments = ["repl", "--exit-after-run", "--run", "/home/runner/work/polyglot/polyglot/apps/parser/JsonParser.dib", "--output-path", "/home/runner/work/polyglot/polyglot/apps/parser/JsonParser.dib.ipynb"]; options = { command = dotnet repl --exit-after-run --run "/home/runner/work/polyglot/polyglot/apps/parser/JsonParser.dib" --output-path "/home/runner/work/polyglot/polyglot/apps/parser/JsonParser.dib.ipynb"; cancellation_token = None; environment_variables = Array(MutCell([("TRACE_LEVEL", "Verbose"), ("AUTOMATION", "True")])); on_line = None; stdin = None; trace = false; working_directory = None } } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ # JsonParser (Polyglot) > > ── fsharp ────────────────────────────────────────────────────────────────────── > open Common > open Parser > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## JsonParser > > ── fsharp ────────────────────────────────────────────────────────────────────── > (* > // -------------------------------- > JSON spec from http://www.json.org/ > // -------------------------------- > > The JSON spec is available at [[json.org]](http://www.json.org/). I'll paraphase > it here: > > * A `value` can be a `string` or a `number` or a `bool` or `null` or an `object` > or an `array`. > * These structures can be nested. > * A `string` is a sequence of zero or more Unicode characters, wrapped in double > quotes, using backslash escapes. > * A `number` is very much like a C or Java number, except that the octal and > hexadecimal formats are not used. > * A `boolean` is the literal `true` or `false` > * A `null` is the literal `null` > * An `object` is an unordered set of name/value pairs. > * An object begins with { (left brace) and ends with } (right brace). > * Each name is followed by : (colon) and the name/value pairs are separated by > , (comma). > * An `array` is an ordered collection of values. > * An array begins with [[ (left bracket) and ends with ]] (right bracket). > * Values are separated by , (comma). > * Whitespace can be inserted between any pair of tokens. > *) > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let inline parserEqual (expected : ParseResult<'a>) (actual : ParseResult<'a * > Input>) = > match actual, expected with > | Success (_actual, _), Success _expected -> > printResult actual > _actual |> _assertEqual _expected > | Failure (l1, e1, p1), Failure (l2, e2, p2) when l1 = l2 && e1 = e2 && p1 = > p2 -> > printResult actual > | _ -> > printfn $"Actual: {actual}" > printfn $"Expected: {expected}" > failwith "Parse failed" > actual > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### JValue > > ── fsharp ────────────────────────────────────────────────────────────────────── > type JValue = > | JString of string > | JNumber of float > | JBool of bool > | JNull > | JObject of Map<string, JValue> > | JArray of JValue list > > ── fsharp ────────────────────────────────────────────────────────────────────── > let jValue, jValueRef = createParserForwardedToRef<JValue> () > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### jNull > > ── fsharp ────────────────────────────────────────────────────────────────────── > let jNull = > pstring "null" > >>% JNull > <?> "null" > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > jValueRef <| > choice > [[ > jNull > ]] > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jValue "null" > |> parserEqual (Success JNull) > > ── [ 167.78ms - return value ] ───────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success (JNull, { lines = [|"null"|]<br /> > position = { line = 0<br /> column = 4 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JNull, { lines = [|"null"|]<br /> > position = { line = 0<br /> column = 4 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JNull</code></span></summary><div><table><thead><tr> > </tr></thead><tbody></tbody></table></div></details></td></tr><tr><td>Item2</td> > <td><details class="dni-treeview"><summary><span class="dni-code-hint"><code>{ > lines = [|"null"|]<br /> position = { line = 0<br /> > column = 4 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ null > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 0<br /> > column = 4 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>4 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 176.82ms - stdout ] ─────────────────────────────────────────────────────── > │ JNull > │ JNull > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jNull "nulp" > |> parserEqual ( > Failure ( > "null", > "Unexpected 'p'", > { currentLine = "nulp"; line = 0; column = 3 } > ) > ) > > ── [ 35.36ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Failure ("null", "Unexpected > 'p'", { currentLine = "nulp"<br /> > line = 0<br /> column = 3 > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><div class="dni-plaintext"><pre>"null" > │ </pre></div></td></tr><tr><td>Item2</td><td><div > class="dni-plaintext"><pre>"Unexpected 'p'" > │ </pre></div></td></tr><tr><td>Item3</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ currentLine = > "nulp"<br /> line = 0<br /> column = 3 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>curr > entLine</td><td><div class="dni-plaintext"><pre>"nulp" > │ </pre></div></td></tr><tr><td>line</td><td><div > class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>3 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 36.62ms - stdout ] ──────────────────────────────────────────────────────── > │ Line:0 Col:3 Error parsing null > │ nulp > │ ^Unexpected 'p' > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### jBool > > ── fsharp ────────────────────────────────────────────────────────────────────── > let jBool = > let jtrue = > pstring "true" > >>% JBool true > let jfalse = > pstring "false" > >>% JBool false > > jtrue <|> jfalse > <?> "bool" > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > jValueRef <| > choice > [[ > jNull > jBool > ]] > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jBool "true" > |> parserEqual (Success (JBool true)) > > ── [ 31.70ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success (JBool true, { lines = > [|"true"|]<br /> position = { line = 0<br /> > column = 4 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JBool true, { lines = [|"true"|]<br /> > position = { line = 0<br /> column = 4 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JBool > true</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>I > tem</td><td><div class="dni-plaintext"><pre>true > │ > </pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Item2</t > d><td><details class="dni-treeview"><summary><span class="dni-code-hint"><code>{ > lines = [|"true"|]<br /> position = { line = 0<br /> > column = 4 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ true > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 0<br /> > column = 4 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>4 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 33.52ms - stdout ] ──────────────────────────────────────────────────────── > │ JBool true > │ JBool true > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jBool "false" > |> parserEqual (Success (JBool false)) > > ── [ 23.78ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success (JBool false, { lines = > [|"false"|]<br /> position = { line = 0<br /> > column = 5 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JBool false, { lines = [|"false"|]<br /> > position = { line = 0<br /> column = 5 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JBool > false</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td> > Item</td><td><div class="dni-plaintext"><pre>false > │ > </pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Item2</t > d><td><details class="dni-treeview"><summary><span class="dni-code-hint"><code>{ > lines = [|"false"|]<br /> position = { line = 0<br /> > column = 5 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ false > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 0<br /> > column = 5 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>5 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 25.49ms - stdout ] ──────────────────────────────────────────────────────── > │ JBool false > │ JBool false > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jBool "truX" > |> parserEqual ( > Failure ( > "bool", > "Unexpected 't'", > { currentLine = "truX"; line = 0; column = 0 } > ) > ) > > ── [ 19.69ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Failure ("bool", "Unexpected > 't'", { currentLine = "truX"<br /> > line = 0<br /> column = 0 > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><div class="dni-plaintext"><pre>"bool" > │ </pre></div></td></tr><tr><td>Item2</td><td><div > class="dni-plaintext"><pre>"Unexpected 't'" > │ </pre></div></td></tr><tr><td>Item3</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ currentLine = > "truX"<br /> line = 0<br /> column = 0 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>curr > entLine</td><td><div class="dni-plaintext"><pre>"truX" > │ </pre></div></td></tr><tr><td>line</td><td><div > class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 20.97ms - stdout ] ──────────────────────────────────────────────────────── > │ Line:0 Col:0 Error parsing bool > │ truX > │ ^Unexpected 't' > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### jUnescapedChar > > ── fsharp ────────────────────────────────────────────────────────────────────── > let jUnescapedChar = > satisfy (fun ch -> ch <> '\\' && ch <> '\"') "char" > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jUnescapedChar "a" > |> parserEqual (Success 'a') > > ── [ 33.96ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success ('a', { lines = [|"a"|]<br > /> position = { line = 0<br /> column > = 1 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(a, { lines = [|"a"|]<br /> position = { > line = 0<br /> column = 1 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><div class="dni-plaintext"><pre>'a' > │ </pre></div></td></tr><tr><td>Item2</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ lines = > [|"a"|]<br /> position = { line = 0<br /> column = 1 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ a > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 0<br /> > column = 1 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>1 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 35.64ms - stdout ] ──────────────────────────────────────────────────────── > │ 'a' > │ 'a' > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jUnescapedChar "\\" > |> parserEqual ( > Failure ( > "char", > "Unexpected '\\'", > { currentLine = "\\"; line = 0; column = 0 } > ) > ) > > ── [ 25.86ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Failure ("char", "Unexpected > '\'", { currentLine = "\"<br /> > line = 0<br /> column = 0 > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><div class="dni-plaintext"><pre>"char" > │ </pre></div></td></tr><tr><td>Item2</td><td><div > class="dni-plaintext"><pre>"Unexpected '\'" > │ </pre></div></td></tr><tr><td>Item3</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ currentLine = > "\"<br /> line = 0<br /> column = 0 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>curr > entLine</td><td><div class="dni-plaintext"><pre>"\" > │ </pre></div></td></tr><tr><td>line</td><td><div > class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 27.06ms - stdout ] ──────────────────────────────────────────────────────── > │ Line:0 Col:0 Error parsing char > │ \ > │ ^Unexpected '\' > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### jEscapedChar > > ── fsharp ────────────────────────────────────────────────────────────────────── > let jEscapedChar = > [[ > ("\\\"",'\"') > ("\\\\",'\\') > ("\\/",'/') > ("\\b",'\b') > ("\\f",'\f') > ("\\n",'\n') > ("\\r",'\r') > ("\\t",'\t') > ]] > |> List.map (fun (toMatch, result) -> > pstring toMatch >>% result > ) > |> choice > <?> "escaped char" > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jEscapedChar "\\\\" > |> parserEqual (Success '\\') > > ── [ 22.48ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success ('\\', { lines = > [|"\\"|]<br /> position = { line = 0<br /> > column = 2 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(\, { lines = [|"\\"|]<br /> position = { > line = 0<br /> column = 2 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><div class="dni-plaintext"><pre>'\\' > │ </pre></div></td></tr><tr><td>Item2</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ lines = > [|"\\"|]<br /> position = { line = 0<br /> column = 2 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ \\ > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 0<br /> > column = 2 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>2 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 24.76ms - stdout ] ──────────────────────────────────────────────────────── > │ '\\' > │ '\\' > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jEscapedChar "\\t" > |> parserEqual (Success '\t') > > ── [ 43.88ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success ('\009', { lines = > [|"\t"|]<br /> position = { line = 0<br /> > column = 2 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>( , { lines = [|"\t"|]<br /> position = { > line = 0<br /> column = 2 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><div class="dni-plaintext"><pre>'\009' > │ </pre></div></td></tr><tr><td>Item2</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ lines = > [|"\t"|]<br /> position = { line = 0<br /> column = 2 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ \t > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 0<br /> > column = 2 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>2 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 45.94ms - stdout ] ──────────────────────────────────────────────────────── > │ '\009' > │ '\009' > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jEscapedChar @"\\" > |> parserEqual (Success '\\') > > ── [ 20.03ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success ('\\', { lines = > [|"\\"|]<br /> position = { line = 0<br /> > column = 2 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(\, { lines = [|"\\"|]<br /> position = { > line = 0<br /> column = 2 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><div class="dni-plaintext"><pre>'\\' > │ </pre></div></td></tr><tr><td>Item2</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ lines = > [|"\\"|]<br /> position = { line = 0<br /> column = 2 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ \\ > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 0<br /> > column = 2 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>2 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 21.61ms - stdout ] ──────────────────────────────────────────────────────── > │ '\\' > │ '\\' > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jEscapedChar @"\n" > |> parserEqual (Success '\n') > > ── [ 19.44ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success ('\010', { lines = [|"<br > />"|]<br /> position = { line = 0<br /> > column = 2 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(<br />, { lines = [|"<br />"|]<br /> > position = { line = 0<br /> column = 2 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><div class="dni-plaintext"><pre>'\010' > │ </pre></div></td></tr><tr><td>Item2</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ lines = > [|"<br />"|]<br /> position = { line = 0<br /> column = > 2 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ <br /> > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 0<br /> > column = 2 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>2 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 21.14ms - stdout ] ──────────────────────────────────────────────────────── > │ '\010' > │ '\010' > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jEscapedChar "a" > |> parserEqual ( > Failure ( > "escaped char", > "Unexpected 'a'", > { currentLine = "a"; line = 0; column = 0 } > ) > ) > > ── [ 19.25ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Failure ("escaped char", "Unexpected > 'a'", { currentLine = "a"<br /> > line = 0<br /> column = 0 > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><div class="dni-plaintext"><pre>"escaped char" > │ </pre></div></td></tr><tr><td>Item2</td><td><div > class="dni-plaintext"><pre>"Unexpected 'a'" > │ </pre></div></td></tr><tr><td>Item3</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ currentLine = > "a"<br /> line = 0<br /> column = 0 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>curr > entLine</td><td><div class="dni-plaintext"><pre>"a" > │ </pre></div></td></tr><tr><td>line</td><td><div > class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 20.50ms - stdout ] ──────────────────────────────────────────────────────── > │ Line:0 Col:0 Error parsing escaped char > │ a > │ ^Unexpected 'a' > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### jUnicodeChar > > ── fsharp ────────────────────────────────────────────────────────────────────── > let jUnicodeChar = > let backslash = pchar '\\' > let uChar = pchar 'u' > let hexdigit = anyOf ([[ '0' .. '9' ]] @ [[ 'A' .. 'F' ]] @ [[ 'a' .. 'f' > ]]) > let fourHexDigits = hexdigit .>>. hexdigit .>>. hexdigit .>>. hexdigit > > let inline convertToChar (((h1, h2), h3), h4) = > let str = $"%c{h1}%c{h2}%c{h3}%c{h4}" > Int32.Parse (str, Globalization.NumberStyles.HexNumber) |> char > > backslash >>. uChar >>. fourHexDigits > |>> convertToChar > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jUnicodeChar "\\u263A" > |> parserEqual (Success '☺') > > ── [ 28.24ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success ('☺', { lines = > [|"\u263A"|]<br /> position = { line = 0<br /> > column = 6 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(☺, { lines = [|"\u263A"|]<br /> position > = { line = 0<br /> column = 6 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><div class="dni-plaintext"><pre>'☺' > │ </pre></div></td></tr><tr><td>Item2</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ lines = > [|"\u263A"|]<br /> position = { line = 0<br /> column = > 6 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ \u263A > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 0<br /> > column = 6 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>6 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 29.87ms - stdout ] ──────────────────────────────────────────────────────── > │ '☺' > │ '☺' > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### jString > > ── fsharp ────────────────────────────────────────────────────────────────────── > let quotedString = > let quote = pchar '\"' <?> "quote" > let jchar = jUnescapedChar <|> jEscapedChar <|> jUnicodeChar > > quote >>. manyChars jchar .>> quote > > ── fsharp ────────────────────────────────────────────────────────────────────── > let jString = > quotedString > |>> JString > <?> "quoted string" > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > jValueRef <| > choice > [[ > jNull > jBool > jString > ]] > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jString "\"\"" > |> parserEqual (Success (JString "")) > > ── [ 29.08ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success (JString "", { lines = > [|""""|]<br /> position = { line = > 0<br /> column = 2 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JString "", { lines = > [|""""|]<br /> position = { line = 0<br /> > column = 2 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JString > ""</code></span></summary><div><table><thead><tr></tr></thead><tbody>< > tr><td>Item</td><td><div class="dni-plaintext"><pre>"" > │ > </pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Item2</t > d><td><details class="dni-treeview"><summary><span class="dni-code-hint"><code>{ > lines = [|""""|]<br /> position = { line = 0<br /> > column = 2 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ "" > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 0<br /> > column = 2 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>2 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 30.80ms - stdout ] ──────────────────────────────────────────────────────── > │ JString "" > │ JString "" > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jString "\"a\"" > |> parserEqual (Success (JString "a")) > > ── [ 21.94ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success (JString "a", { lines = > [|""a""|]<br /> position = { line = > 0<br /> column = 3 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JString "a", { lines = > [|""a""|]<br /> position = { line = 0<br /> > column = 3 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JString > "a"</code></span></summary><div><table><thead><tr></tr></thead><tbody> > <tr><td>Item</td><td><div class="dni-plaintext"><pre>"a" > │ > </pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Item2</t > d><td><details class="dni-treeview"><summary><span class="dni-code-hint"><code>{ > lines = [|""a""|]<br /> position = { line = 0<br /> > column = 3 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ "a" > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 0<br /> > column = 3 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>3 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 23.66ms - stdout ] ──────────────────────────────────────────────────────── > │ JString "a" > │ JString "a" > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jString "\"ab\"" > |> parserEqual (Success (JString "ab")) > > ── [ 21.76ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success (JString "ab", { lines = > [|""ab""|]<br /> position = { line = > 0<br /> column = 4 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JString "ab", { lines = > [|""ab""|]<br /> position = { line = 0<br /> > column = 4 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JString > "ab"</code></span></summary><div><table><thead><tr></tr></thead><tbody > ><tr><td>Item</td><td><div class="dni-plaintext"><pre>"ab" > │ > </pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Item2</t > d><td><details class="dni-treeview"><summary><span class="dni-code-hint"><code>{ > lines = [|""ab""|]<br /> position = { line = 0<br /> > column = 4 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ "ab" > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 0<br /> > column = 4 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>4 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 23.50ms - stdout ] ──────────────────────────────────────────────────────── > │ JString "ab" > │ JString "ab" > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jString "\"ab\\tde\"" > |> parserEqual (Success (JString "ab\tde")) > > ── [ 22.39ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success (JString "ab de", { lines = > [|""ab\tde""|]<br /> position = { > line = 0<br /> column = 8 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JString "ab de", { lines = > [|""ab\tde""|]<br /> position = { line = 0<br /> > column = 8 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JString "ab > de"</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr>< > td>Item</td><td><div class="dni-plaintext"><pre>"ab de" > │ > </pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Item2</t > d><td><details class="dni-treeview"><summary><span class="dni-code-hint"><code>{ > lines = [|""ab\tde""|]<br /> position = { line = 0<br /> > column = 8 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ "ab\tde" > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 0<br /> > column = 8 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>8 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 24.17ms - stdout ] ──────────────────────────────────────────────────────── > │ JString "ab de" > │ JString "ab de" > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jString "\"ab\\u263Ade\"" > |> parserEqual (Success (JString "ab☺de")) > > ── [ 22.70ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success (JString "ab☺de", { lines = > [|""ab\u263Ade""|]<br /> position > = { line = 0<br /> column = 12 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JString "ab☺de", { lines = > [|""ab\u263Ade""|]<br /> position = { line = 0<br /> > column = 12 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JString > "ab☺de"</code></span></summary><div><table><thead><tr></tr></thead><tb > ody><tr><td>Item</td><td><div class="dni-plaintext"><pre>"ab☺de" > │ > </pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Item2</t > d><td><details class="dni-treeview"><summary><span class="dni-code-hint"><code>{ > lines = [|""ab\u263Ade""|]<br /> position = { line = 0<br > /> column = 12 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ "ab\u263Ade" > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 0<br /> > column = 12 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>12 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 24.36ms - stdout ] ──────────────────────────────────────────────────────── > │ JString "ab☺de" > │ JString "ab☺de" > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### jNumber > > ── fsharp ────────────────────────────────────────────────────────────────────── > let jNumber = > let optSign = opt (pchar '-') > > let zero = pstring "0" > > let digitOneNine = > satisfy (fun ch -> Char.IsDigit ch && ch <> '0') "1-9" > > let digit = > satisfy Char.IsDigit "digit" > > let point = pchar '.' > > let e = pchar 'e' <|> pchar 'E' > > let optPlusMinus = opt (pchar '-' <|> pchar '+') > > let nonZeroInt = > digitOneNine .>>. manyChars digit > |>> fun (first, rest) -> string first + rest > > let intPart = zero <|> nonZeroInt > > let fractionPart = point >>. manyChars1 digit > > let exponentPart = e >>. optPlusMinus .>>. manyChars1 digit > > let inline (|>?) opt f = > match opt with > | None -> "" > | Some x -> f x > > let inline convertToJNumber (((optSign, intPart), fractionPart), expPart) = > let signStr = > optSign > |>? string > > let fractionPartStr = > fractionPart > |>? (fun digits -> "." + digits) > > let expPartStr = > expPart > |>? fun (optSign, digits) -> > let sign = optSign |>? string > "e" + sign + digits > > (signStr + intPart + fractionPartStr + expPartStr) > |> float > |> JNumber > > optSign .>>. intPart .>>. opt fractionPart .>>. opt exponentPart > |>> convertToJNumber > <?> "number" > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > jValueRef <| > choice > [[ > jNull > jBool > jString > jNumber > ]] > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jNumber "123" > |> parserEqual (Success (JNumber 123.0)) > > ── [ 39.58ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success (JNumber 123.0, { lines = > [|"123"|]<br /> position = { line = 0<br /> > column = 3 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JNumber 123.0, { lines = [|"123"|]<br /> > position = { line = 0<br /> column = 3 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JNumber > 123.0</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td> > Item</td><td><div class="dni-plaintext"><pre>123.0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Item2</t > d><td><details class="dni-treeview"><summary><span class="dni-code-hint"><code>{ > lines = [|"123"|]<br /> position = { line = 0<br /> > column = 3 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ 123 > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 0<br /> > column = 3 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>3 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 41.37ms - stdout ] ──────────────────────────────────────────────────────── > │ JNumber 123.0 > │ JNumber 123.0 > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jNumber "-123" > |> parserEqual (Success (JNumber -123.0)) > > ── [ 23.19ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success (JNumber -123.0, { lines = > [|"-123"|]<br /> position = { line = 0<br /> > column = 4 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JNumber -123.0, { lines = [|"-123"|]<br > /> position = { line = 0<br /> column = 4 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JNumber > -123.0</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td > >Item</td><td><div class="dni-plaintext"><pre>-123.0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Item2</t > d><td><details class="dni-treeview"><summary><span class="dni-code-hint"><code>{ > lines = [|"-123"|]<br /> position = { line = 0<br /> > column = 4 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ -123 > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 0<br /> > column = 4 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>4 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 24.94ms - stdout ] ──────────────────────────────────────────────────────── > │ JNumber -123.0 > │ JNumber -123.0 > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jNumber "123.4" > |> parserEqual (Success (JNumber 123.4)) > > ── [ 25.28ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success (JNumber 123.4, { lines = > [|"123.4"|]<br /> position = { line = 0<br /> > column = 5 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JNumber 123.4, { lines = [|"123.4"|]<br > /> position = { line = 0<br /> column = 5 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JNumber > 123.4</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td> > Item</td><td><div class="dni-plaintext"><pre>123.4 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Item2</t > d><td><details class="dni-treeview"><summary><span class="dni-code-hint"><code>{ > lines = [|"123.4"|]<br /> position = { line = 0<br /> > column = 5 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ 123.4 > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 0<br /> > column = 5 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>5 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 27.07ms - stdout ] ──────────────────────────────────────────────────────── > │ JNumber 123.4 > │ JNumber 123.4 > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jNumber "-123." > |> parserEqual (Success (JNumber -123.0)) > > ── [ 22.01ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success (JNumber -123.0, { lines = > [|"-123."|]<br /> position = { line = 0<br > /> column = 4 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JNumber -123.0, { lines = [|"-123."|]<br > /> position = { line = 0<br /> column = 4 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JNumber > -123.0</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td > >Item</td><td><div class="dni-plaintext"><pre>-123.0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Item2</t > d><td><details class="dni-treeview"><summary><span class="dni-code-hint"><code>{ > lines = [|"-123."|]<br /> position = { line = 0<br /> > column = 4 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ -123. > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 0<br /> > column = 4 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>4 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 23.72ms - stdout ] ──────────────────────────────────────────────────────── > │ JNumber -123.0 > │ JNumber -123.0 > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jNumber "00.1" > |> parserEqual (Success (JNumber 0.0)) > > ── [ 22.92ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success (JNumber 0.0, { lines = > [|"00.1"|]<br /> position = { line = 0<br /> > column = 1 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JNumber 0.0, { lines = [|"00.1"|]<br /> > position = { line = 0<br /> column = 1 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JNumber > 0.0</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>It > em</td><td><div class="dni-plaintext"><pre>0.0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Item2</t > d><td><details class="dni-treeview"><summary><span class="dni-code-hint"><code>{ > lines = [|"00.1"|]<br /> position = { line = 0<br /> > column = 1 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ 00.1 > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 0<br /> > column = 1 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>1 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 24.61ms - stdout ] ──────────────────────────────────────────────────────── > │ JNumber 0.0 > │ JNumber 0.0 > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let jNumber_ = jNumber .>> spaces1 > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jNumber_ "123" > |> parserEqual (Success (JNumber 123.0)) > > ── [ 24.89ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success (JNumber 123.0, { lines = > [|"123"|]<br /> position = { line = 1<br /> > column = 0 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JNumber 123.0, { lines = [|"123"|]<br /> > position = { line = 1<br /> column = 0 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JNumber > 123.0</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td> > Item</td><td><div class="dni-plaintext"><pre>123.0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Item2</t > d><td><details class="dni-treeview"><summary><span class="dni-code-hint"><code>{ > lines = [|"123"|]<br /> position = { line = 1<br /> > column = 0 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ 123 > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 1<br /> > column = 0 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>1 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 26.61ms - stdout ] ──────────────────────────────────────────────────────── > │ JNumber 123.0 > │ JNumber 123.0 > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jNumber_ "-123" > |> parserEqual (Success (JNumber -123.0)) > > ── [ 23.44ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success (JNumber -123.0, { lines = > [|"-123"|]<br /> position = { line = 1<br /> > column = 0 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JNumber -123.0, { lines = [|"-123"|]<br > /> position = { line = 1<br /> column = 0 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JNumber > -123.0</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td > >Item</td><td><div class="dni-plaintext"><pre>-123.0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Item2</t > d><td><details class="dni-treeview"><summary><span class="dni-code-hint"><code>{ > lines = [|"-123"|]<br /> position = { line = 1<br /> > column = 0 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ -123 > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 1<br /> > column = 0 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>1 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 25.22ms - stdout ] ──────────────────────────────────────────────────────── > │ JNumber -123.0 > │ JNumber -123.0 > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jNumber_ "-123." > |> parserEqual ( > Failure ( > "number andThen many1 whitespace", > "Unexpected '.'", > { currentLine = "-123."; line = 0; column = 4 } > ) > ) > > ── [ 21.21ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Failure<br /> ("number andThen many1 > whitespace", "Unexpected '.'", { currentLine = > "-123."<br /> > line = 0<br /> column = > 4 > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><div class="dni-plaintext"><pre>"number andThen many1 > whitespace" > │ </pre></div></td></tr><tr><td>Item2</td><td><div > class="dni-plaintext"><pre>"Unexpected '.'" > │ </pre></div></td></tr><tr><td>Item3</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ currentLine = > "-123."<br /> line = 0<br /> column = 4 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>curr > entLine</td><td><div class="dni-plaintext"><pre>"-123." > │ </pre></div></td></tr><tr><td>line</td><td><div > class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>4 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 22.49ms - stdout ] ──────────────────────────────────────────────────────── > │ Line:0 Col:4 Error parsing number andThen many1 whitespace > │ -123. > │ ^Unexpected '.' > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jNumber_ "123.4" > |> parserEqual (Success (JNumber 123.4)) > > ── [ 24.21ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success (JNumber 123.4, { lines = > [|"123.4"|]<br /> position = { line = 1<br /> > column = 0 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JNumber 123.4, { lines = [|"123.4"|]<br > /> position = { line = 1<br /> column = 0 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JNumber > 123.4</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td> > Item</td><td><div class="dni-plaintext"><pre>123.4 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Item2</t > d><td><details class="dni-treeview"><summary><span class="dni-code-hint"><code>{ > lines = [|"123.4"|]<br /> position = { line = 1<br /> > column = 0 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ 123.4 > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 1<br /> > column = 0 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>1 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 25.94ms - stdout ] ──────────────────────────────────────────────────────── > │ JNumber 123.4 > │ JNumber 123.4 > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jNumber_ "00.4" > |> parserEqual ( > Failure ( > "number andThen many1 whitespace", > "Unexpected '0'", > { currentLine = "00.4"; line = 0; column = 1 } > ) > ) > > ── [ 20.84ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Failure<br /> ("number andThen many1 > whitespace", "Unexpected '0'", { currentLine = > "00.4"<br /> > line = 0<br /> column = > 1 > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><div class="dni-plaintext"><pre>"number andThen many1 > whitespace" > │ </pre></div></td></tr><tr><td>Item2</td><td><div > class="dni-plaintext"><pre>"Unexpected '0'" > │ </pre></div></td></tr><tr><td>Item3</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ currentLine = > "00.4"<br /> line = 0<br /> column = 1 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>curr > entLine</td><td><div class="dni-plaintext"><pre>"00.4" > │ </pre></div></td></tr><tr><td>line</td><td><div > class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>1 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 22.17ms - stdout ] ──────────────────────────────────────────────────────── > │ Line:0 Col:1 Error parsing number andThen many1 whitespace > │ 00.4 > │ ^Unexpected '0' > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jNumber_ "123e4" > |> parserEqual (Success (JNumber 1230000.0)) > > ── [ 27.56ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success (JNumber 1230000.0, { lines = > [|"123e4"|]<br /> position = { line = > 1<br /> column = 0 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JNumber 1230000.0, { lines = > [|"123e4"|]<br /> position = { line = 1<br /> column = > 0 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JNumber > 1230000.0</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr> > <td>Item</td><td><div class="dni-plaintext"><pre>1230000.0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Item2</t > d><td><details class="dni-treeview"><summary><span class="dni-code-hint"><code>{ > lines = [|"123e4"|]<br /> position = { line = 1<br /> > column = 0 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ 123e4 > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 1<br /> > column = 0 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>1 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 29.41ms - stdout ] ──────────────────────────────────────────────────────── > │ JNumber 1230000.0 > │ JNumber 1230000.0 > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jNumber_ "123.4e5" > |> parserEqual (Success (JNumber 12340000.0)) > > ── [ 24.80ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success (JNumber 12340000.0, { lines = > [|"123.4e5"|]<br /> position = { line = > 1<br /> column = 0 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JNumber 12340000.0, { lines = > [|"123.4e5"|]<br /> position = { line = 1<br /> column > = 0 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JNumber > 12340000.0</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr > ><td>Item</td><td><div class="dni-plaintext"><pre>12340000.0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Item2</t > d><td><details class="dni-treeview"><summary><span class="dni-code-hint"><code>{ > lines = [|"123.4e5"|]<br /> position = { line = 1<br /> > column = 0 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ 123.4e5 > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 1<br /> > column = 0 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>1 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 26.50ms - stdout ] ──────────────────────────────────────────────────────── > │ JNumber 12340000.0 > │ JNumber 12340000.0 > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jNumber_ "123.4e-5" > |> parserEqual (Success (JNumber 0.001234)) > > ── [ 23.44ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success (JNumber 0.001234, { lines = > [|"123.4e-5"|]<br /> position = { line = > 1<br /> column = 0 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JNumber 0.001234, { lines = > [|"123.4e-5"|]<br /> position = { line = 1<br /> column > = 0 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JNumber > 0.001234</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr>< > td>Item</td><td><div class="dni-plaintext"><pre>0.001234 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>Item2</t > d><td><details class="dni-treeview"><summary><span class="dni-code-hint"><code>{ > lines = [|"123.4e-5"|]<br /> position = { line = 1<br /> > column = 0 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ 123.4e-5 > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 1<br /> > column = 0 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>1 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 25.10ms - stdout ] ──────────────────────────────────────────────────────── > │ JNumber 0.001234 > │ JNumber 0.001234 > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### jArray > > ── fsharp ────────────────────────────────────────────────────────────────────── > let jArray = > let left = pchar '[[' .>> spaces > let right = pchar ']]' .>> spaces > let comma = pchar ',' .>> spaces > let value = jValue .>> spaces > > let values = sepBy value comma > > between left values right > |>> JArray > <?> "array" > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > jValueRef <| > choice > [[ > jNull > jBool > jString > jNumber > jArray > ]] > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jArray "[[ 1, 2 ]]" > |> parserEqual (Success (JArray [[ JNumber 1.0; JNumber 2.0 ]])) > > ── [ 99.04ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success (JArray [JNumber 1.0; JNumber 2.0], { lines > = [|"[ 1, 2 ]"|]<br /> > position = { line = 1<br /> > column = 0 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JArray [JNumber 1.0; JNumber 2.0], { lines = > [|"[ 1, 2 ]"|]<br /> position = { line = 1<br /> column > = 0 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JArray [JNumber 1.0; JNumber > 2.0]</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>I > tem</td><td><table><thead><tr><th><i>index</i></th><th>value</th></tr></thead><t > body><tr><td>0</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JNumber > 1.0</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>It > em</td><td><div class="dni-plaintext"><pre>1.0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr><tr><td>1</td><t > d><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JNumber > 2.0</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>It > em</td><td><div class="dni-plaintext"><pre>2.0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </td></tr></tbody></table></div></details></td></tr><tr><td>Item2</td><td><detai > ls class="dni-treeview"><summary><span class="dni-code-hint"><code>{ lines = > [|"[ 1, 2 ]"|]<br /> position = { line = 1<br /> column > = 0 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ [ 1, 2 ] > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 1<br /> > column = 0 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>1 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 101.09ms - stdout ] ─────────────────────────────────────────────────────── > │ JArray [JNumber 1.0; JNumber 2.0] > │ JArray [JNumber 1.0; JNumber 2.0] > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jArray "[[ 1, 2, ]]" > |> parserEqual ( > Failure ( > "array", > "Unexpected ','", > { currentLine = "[[ 1, 2, ]]"; line = 0; column = 6 } > ) > ) > > ── [ 24.81ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Failure ("array", "Unexpected > ','", { currentLine = "[ 1, 2, ]"<br /> > line = 0<br /> column = 6 > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><div class="dni-plaintext"><pre>"array" > │ </pre></div></td></tr><tr><td>Item2</td><td><div > class="dni-plaintext"><pre>"Unexpected ','" > │ </pre></div></td></tr><tr><td>Item3</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ currentLine = > "[ 1, 2, ]"<br /> line = 0<br /> column = 6 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>curr > entLine</td><td><div class="dni-plaintext"><pre>"[ 1, 2, ]" > │ </pre></div></td></tr><tr><td>line</td><td><div > class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>6 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 26.17ms - stdout ] ──────────────────────────────────────────────────────── > │ Line:0 Col:6 Error parsing array > │ [ 1, 2, ] > │ ^Unexpected ',' > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### jObject > > ── fsharp ────────────────────────────────────────────────────────────────────── > let jObject = > let left = spaces >>. pchar '{' .>> spaces > let right = pchar '}' .>> spaces > let colon = pchar ':' .>> spaces > let comma = pchar ',' .>> spaces > let key = quotedString .>> spaces > let value = jValue .>> spaces > > let keyValue = (key .>> colon) .>>. value > let keyValues = sepBy keyValue comma > > between left keyValues right > |>> Map.ofList > |>> JObject > <?> "object" > > ── fsharp ────────────────────────────────────────────────────────────────────── > jValueRef <| > choice > [[ > jNull > jBool > jString > jNumber > jArray > jObject > ]] > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jObject """{ "a":1, "b" : 2 }""" > |> parserEqual ( > Success ( > JObject ( > Map.ofList [[ > "a", JNumber 1.0 > "b", JNumber 2.0 > ]] > ) > ) > ) > > ── [ 62.17ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success<br /> (JObject (map [("a", > JNumber 1.0); ("b", JNumber 2.0)]),<br /> { lines = [|"{ > "a":1, "b" : 2 }"|]<br /> position = { line = > 1<br /> column = 0 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JObject (map [("a", JNumber 1.0); > ("b", JNumber 2.0)]), { lines = [|"{ "a":1, > "b" : 2 }"|]<br /> position = { line = 1<br /> > column = 0 } > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JObject (map [("a", JNumber 1.0); > ("b", JNumber > 2.0)])</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td > >Item</td><td><table><thead><tr><th><i>key</i></th><th>value</th></tr></thead><t > body><tr><td><div class="dni-plaintext"><pre>"a" > │ </pre></div></td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>JNumber > 1.0</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>It > em</td><td><div class="dni-plaintext"><pre>1.0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr><tr><td><div > class="dni-plaintext"><pre>"b" > │ > </pre></div>...</details></td></tr></tbody></table></td></tr></tbody></table></d > iv></details></td></tr><tr><td>Item2</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ lines = > [|"{ "a":1, "b" : 2 }"|]<br /> position = { > line = 1<br /> column = 0 } > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > s</td><td><div class="dni-plaintext"><pre>[ { "a":1, "b" : > 2 } ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 1<br /> > column = 0 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>1 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 64.31ms - stdout ] ──────────────────────────────────────────────────────── > │ JObject (map [("a", JNumber 1.0); ("b", JNumber 2.0)]) > │ JObject (map [("a", JNumber 1.0); ("b", JNumber 2.0)]) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run jObject """{ "a":1, "b" : 2, }""" > |> parserEqual ( > Failure ( > "object", > "Unexpected ','", > { currentLine = """{ "a":1, "b" : 2, }"""; line = 0; column = 18 } > ) > ) > > ── [ 27.06ms - return value ] ────────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Failure ("object", "Unexpected > ','", { currentLine = "{ "a":1, "b" : 2, > }"<br /> line = 0<br /> > column = 18 > })</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>Ite > m1</td><td><div class="dni-plaintext"><pre>"object" > │ </pre></div></td></tr><tr><td>Item2</td><td><div > class="dni-plaintext"><pre>"Unexpected ','" > │ </pre></div></td></tr><tr><td>Item3</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ currentLine = > "{ "a":1, "b" : 2, }"<br /> line = 0<br /> > column = 18 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>curr > entLine</td><td><div class="dni-plaintext"><pre>"{ "a":1, > "b" : 2, }" > │ </pre></div></td></tr><tr><td>line</td><td><div > class="dni-plaintext"><pre>0 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>18 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 28.32ms - stdout ] ──────────────────────────────────────────────────────── > │ Line:0 Col:18 Error parsing object > │ { "a":1, "b" : 2, } > │ ^Unexpected ',' > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### jValue > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let example1 = """{ > "name" : "Scott", > "isMale" : true, > "bday" : {"year":2001, "month":12, "day":25 }, > "favouriteColors" : [["blue", "green"]], > "emptyArray" : [[]], > "emptyObject" : {} > }""" > run jValue example1 > |> parserEqual ( > Success ( > JObject ( > Map.ofList [[ > "name", JString "Scott" > "isMale", JBool true > "bday", JObject ( > Map.ofList [[ > "year", JNumber 2001.0 > "month", JNumber 12.0 > "day", JNumber 25.0 > ]] > ) > "favouriteColors", JArray [[ JString "blue"; JString "green" ]] > "emptyArray", JArray [[]] > "emptyObject", JObject Map.empty > ]] > ) > ) > ) > > ── [ 110.94ms - return value ] ───────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success<br /> (JObject<br /> (map<br /> > [("bday",<br /> JObject<br /> (map<br /> > [("day", JNumber 25.0); ("month", JNumber 12.0);<br /> > ("year", JNumber 2001.0)])); ("emptyArray", JArray []);<br > /> ("emptyObject", JObject (map []));<br /> > ("favouriteColors", > ...</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>It > em</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JObject<br /> (map<br /> > [("bday",<br /> JObject<br /> (map<br /> > [("day", JNumber 25.0); ("month", JNumber 12.0);<br /> > ("year", JNumber 2001.0)])); ("emptyArray", JArray []);<br > /> ("emptyObject", JObject (map []));<br /> > ("favouriteColors", JArray [JString "blue"; JString > "gr...</code></span></summary><div><table><thead><tr></tr></thead><tbody><t > r><td>Item1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JObject<br /> (map<br /> [("bday",<br > /> JObject<br /> (map<br /> [("day", JNumber > 25.0); ("month", JNumber 12.0);<br /> ("year", > JNumber 2001.0)])); ("emptyArray", JArra...= 8<br /> > column = 0 } > ...</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>li > nes</td><td><div class="dni-plaintext"><pre>[ {, "name" : > "Scott",, "isMale" : true,, "bday" : > {"year":2001, "month":12, "day":25 },, > "favouriteColors" : ["blue", "green"],, > "emptyArray" : [],, "emptyObject" : {}, } > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 8<br /> > column = 0 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>8 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 112.75ms - stdout ] ─────────────────────────────────────────────────────── > │ JObject > │ (map > │ [("bday", > │ JObject > │ (map > │ [("day", JNumber 25.0); ("month", JNumber 12.0); > │ ("year", JNumber 2001.0)])); ("emptyArray", > JArray []); > │ ("emptyObject", JObject (map [])); > │ ("favouriteColors", JArray [JString "blue"; JString > "green"]); > │ ("isMale", JBool true); ("name", JString "Scott")]) > │ JObject > │ (map > │ [("bday", JObject (map [("day", JNumber 25.0); ("month", > JNumber 12.0); ("year", JNumber 2001.0)])); > │ ("emptyArray", JArray []); ("emptyObject", JObject (map > [])); > │ ("favouriteColors", JArray [JString "blue"; JString > "green"]); ("isMale", JBool true); ("name", JString "Scott")]) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let example2 = """{"widget": { > "debug": "on", > "window": { > "title": "Sample Konfabulator Widget", > "name": "main_window", > "width": 500, > "height": 500 > }, > "image": { > "src": "Images/Sun.png", > "name": "sun1", > "hOffset": 250, > "vOffset": 250, > "alignment": "center" > }, > "text": { > "data": "Click Here", > "size": 36, > "style": "bold", > "name": "text1", > "hOffset": 250, > "vOffset": 100, > "alignment": "center", > "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" > } > }}""" > > run jValue example2 > |> parserEqual ( > Success ( > JObject ( > Map.ofList [[ > "widget", JObject ( > Map.ofList [[ > "debug", JString "on" > "window", JObject ( > Map.ofList [[ > "title", JString "Sample Konfabulator Widget" > "name", JString "main_window" > "width", JNumber 500.0 > "height", JNumber 500.0 > ]] > ) > "image", JObject ( > Map.ofList [[ > "src", JString "Images/Sun.png" > "name", JString "sun1" > "hOffset", JNumber 250.0 > "vOffset", JNumber 250.0 > "alignment", JString "center" > ]] > ) > "text", JObject ( > Map.ofList [[ > "data", JString "Click Here" > "size", JNumber 36.0 > "style", JString "bold" > "name", JString "text1" > "hOffset", JNumber 250.0 > "vOffset", JNumber 100.0 > "alignment", JString "center" > "onMouseUp", JString "sun1.opacity = > (sun1.opacity / 100) * 90;" > ]] > ) > ]] > ) > ]] > ) > ) > ) > > ── [ 223.10ms - return value ] ───────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success<br /> (JObject<br /> (map<br /> > [("widget",<br /> JObject<br /> (map<br /> > [("debug", JString "on");<br /> > ("image",<br /> JObject<br /> > (map<br /> [("alignment", JString > "center");<br /> > ("hOffset"...</code></span></summary><div><table><thead><tr></tr></the > ad><tbody><tr><td>Item</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JObject<br /> (map<br /> > [("widget",<br /> JObject<br /> (map<br /> > [("debug", JString "on");<br /> > ("image",<br /> JObject<br /> (map<br /> > [("alignment", JString "center"); ("hOffset", > JNumber 250.0);<br /> ("name", JString > "sun1"...</code></span></summary><div><table><thead><tr></tr></thead>< > tbody><tr><td>Item1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JObject<br /> (map<br /> > [("widget",<br /> JObject<br /> (map<br /> > [("debug", JString "on");<br /> > ("image",<br /> JObject<br /> (... > "alignment": "center", },, "text": {, > "data": "Click Here",, "size": 36,, > "style": "bold",, "name": > "text1",, "hOffset": 250,, > "vOffset": 100,, "alignment": "center",, > "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;", > }, }} ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 26<br > /> column = 0 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>26 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 224.93ms - stdout ] ─────────────────────────────────────────────────────── > │ JObject > │ (map > │ [("widget", > │ JObject > │ (map > │ [("debug", JString "on"); > │ ("image", > │ JObject > │ (map > │ [("alignment", JString "center"); > ("hOffset", JNumber 250.0); > │ ("name", JString "sun1"); ("src", JString > "Images/Sun.png"); > │ ("vOffset", JNumber 250.0)])); > │ ("text", > │ JObject > │ (map > │ [("alignment", JString "center"); > │ ("data", JString "Click Here"); > ("hOffset", JNumber 250.0); > │ ("name", JString "text1"); > │ ("onMouseUp", > │ JString "sun1.opacity = (sun1.opacity / > 100) * 90;"); > │ ("size", JNumber 36.0); ("style", JString > "bold"); > │ ("vOffset", JNumber 100.0)])); > │ ("window", > │ JObject > │ (map > │ [("height", JNumber 500.0); ("name", > JString "main_window"); > │ ("title", JString "Sample Konfabulator > Widget"); > │ ("width", JNumber 500.0)]))]))]) > │ JObject > │ (map > │ [("widget", > │ JObject > │ (map > │ [("debug", JString "on"); > │ ("image", > │ JObject > │ (map > │ [("alignment", JString "center"); > ("hOffset", JNumber 250.0); ("name", JString "sun1"); > │ ("src", JString "Images/Sun.png"); > ("vOffset", JNumber 250.0)])); > │ ("text", > │ JObject > │ (map > │ [("alignment", JString "center"); ("data", > JString "Click Here"); ("hOffset", JNumber 250.0); > │ ("name", JString "text1"); ("onMouseUp", > JString "sun1.opacity = (sun1.opacity / 100) * 90;"); > │ ("size", JNumber 36.0); ("style", JString > "bold"); ("vOffset", JNumber 100.0)])); > │ ("window", > │ JObject > │ (map > │ [("height", JNumber 500.0); ("name", > JString "main_window"); > │ ("title", JString "Sample Konfabulator > Widget"); ("width", JNumber 500.0)]))]))]) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let example3 = """{ > "string": "Hello, \"World\"!", > "escapedString": "This string contains \\/\\\\\\b\\f\\n\\r\\t\\\"\\'", > "number": 42, > "scientificNumber": 3.14e-10, > "boolean": true, > "nullValue": null, > "array": [[1, 2, 3, 4, 5]], > "unicodeString1": "프리마", > "unicodeString2": "\u0048\u0065\u006C\u006C\u006F, > \u0022\u0057\u006F\u0072\u006C\u0064\u0022!", > "specialCharacters": "!@#$%^&*()", > "emptyArray": [[]], > "emptyObject": {}, > "nestedArrays": [[[[1, 2, 3]], [[4, 5, 6]]]], > "object": { > "nestedString": "Nested Value", > "nestedNumber": 3.14, > "nestedBoolean": false, > "nestedNull": null, > "nestedArray": [["a", "b", "c"]], > "nestedObject": { > "nestedProperty": "Nested Object Value" > } > }, > "nestedObjects": [[ > {"name": "Alice", "age": 25}, > {"name": "Bob", "age": 30} > ]] > }""" > run jValue example3 > |> parserEqual ( > Success ( > JObject ( > Map.ofList [[ > "string", JString @"Hello, ""World""!" > "escapedString", JString @"This string contains > \/\\\b\f\n\r\t\""\'" > "number", JNumber 42.0 > "scientificNumber", JNumber 3.14e-10 > "boolean", JBool true > "nullValue", JNull > "array", JArray [[ > JNumber 1.0; JNumber 2.0; JNumber 3.0; JNumber 4.0; JNumber > 5.0 > ]] > "unicodeString1", JString "프리마" > "unicodeString2", JString @"Hello, ""World""!" > "specialCharacters", JString "!@#$%^&*()" > "emptyArray", JArray [[]] > "emptyObject", JObject Map.empty > "nestedArrays", JArray [[ > JArray [[ JNumber 1.0; JNumber 2.0; JNumber 3.0 ]] > JArray [[ JNumber 4.0; JNumber 5.0; JNumber 6.0 ]] > ]] > "object", JObject ( > Map.ofList [[ > "nestedString", JString "Nested Value" > "nestedNumber", JNumber 3.14 > "nestedBoolean", JBool false > "nestedNull", JNull > "nestedArray", JArray [[JString "a"; JString "b"; > JString "c"]] > "nestedObject", JObject ( > Map.ofList [[ > "nestedProperty", JString "Nested Object Value" > ]] > ) > ]] > ) > "nestedObjects", JArray [[ > JObject (Map.ofList [[ "name", JString "Alice"; "age", JNumber > 25.0 ]]) > JObject (Map.ofList [[ "name", JString "Bob"; "age", JNumber > 30.0 ]]) > ]] > ]] > ) > ) > ) > > ── [ 305.72ms - return value ] ───────────────────────────────────────────────── > │ <details open="open" class="dni-treeview"><summary><span > class="dni-code-hint"><code>Success<br /> (JObject<br /> (map<br /> > [("array",<br /> JArray<br /> [JNumber 1.0; > JNumber 2.0; JNumber 3.0; JNumber 4.0; JNumber 5.0]);<br /> > ("boolean", JBool true); ("emptyArray", JArray []);<br /> > ("emptyObject", JObject (map []));<br /> > ("escapedString", JString "This > s...</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>I > tem</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>(JObject<br /> (map<br /> > [("array",<br /> JArray [JNumber 1.0; JNumber 2.0; JNumber 3.0; > JNumber 4.0; JNumber 5.0]);<br /> ("boolean", JBool true); > ("emptyArray", JArray []);<br /> ("emptyObject", > JObject (map []));<br /> ("escapedString", JString "This > string contains \/\\\b\f<br />\r\t\"\'");<br /> > ...</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>It > em1</td><td><details class="dni-treeview"><summary><span > class="dni-code-hint"><code>JObject<br /> (map<br /> > [("array",<br /> JArray [JNumber 1.0; JNumber 2.0; JNumber 3.0; > JNumber 4.0; JNumber 5.0]);<br /> ("boolean", JBool true); > ("emptyArray", JArray []);<br /> ("emptyObject", > JObject (map []));<br /> ("es...quot;,, "nestedNumber": > 3.14,, "nestedBoolean": false,, "nestedNull": null,, > "nestedArray": ["a", "b", "c"],, > "nestedObject": {, "nestedProperty": "Nested > Object Value", }, },, "nestedObjects": [, > {"name": "Alice", "age": 25},, > {"name": "Bob", "age": 30}, ], } > ]</pre></div></td></tr><tr><td>position</td><td><details > class="dni-treeview"><summary><span class="dni-code-hint"><code>{ line = 29<br > /> column = 0 > }</code></span></summary><div><table><thead><tr></tr></thead><tbody><tr><td>line > </td><td><div class="dni-plaintext"><pre>29 > │ </pre></div></td></tr><tr><td>column</td><td><div > class="dni-plaintext"><pre>0 > │ > </pre></div></td></tr></tbody></table></div></details></td></tr></tbody></table> > </div></details></td></tr></tbody></table></div></details></td></tr></tbody></ta > ble></div></details><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> > > ── [ 307.50ms - stdout ] ─────────────────────────────────────────────────────── > │ JObject > │ (map > │ [("array", > │ JArray [JNumber 1.0; JNumber 2.0; JNumber 3.0; JNumber > 4.0; JNumber 5.0]); > │ ("boolean", JBool true); ("emptyArray", JArray []); > │ ("emptyObject", JObject (map [])); > │ ("escapedString", JString "This string contains > \/\\\b\f\n\r\t\"\'"); > │ ("nestedArrays", > │ JArray > │ [JArray [JNumber 1.0; JNumber 2.0; JNumber 3.0]; > │ JArray [JNumber 4.0; JNumber 5.0; JNumber 6.0]]); > │ ("nestedObjects", > │ JArray > │ [JObject (map [("age", JNumber 25.0); ("name", > JString "Alice")]); > │ JObject (map [("age", JNumber 30.0); ("name", > JString "Bob")])]); > │ ("nullValue", JNull); ("number", JNumber 42.0); ...]) > │ JObject > │ (map > │ [("array", JArray [JNumber 1.0; JNumber 2.0; JNumber > 3.0; JNumber 4.0; JNumber 5.0]); ("boolean", JBool true); > │ ("emptyArray", JArray []); ("emptyObject", JObject (map > [])); > │ ("escapedString", JString "This string contains > \/\\\b\f\n\r\t\"\'"); > │ ("nestedArrays", > │ JArray [JArray [JNumber 1.0; JNumber 2.0; JNumber > 3.0]; JArray [JNumber 4.0; JNumber 5.0; JNumber 6.0]]); > │ ("nestedObjects", > │ JArray > │ [JObject (map [("age", JNumber 25.0); ("name", > JString "Alice")]); > │ JObject (map [("age", JNumber 30.0); ("name", > JString "Bob")])]); ("nullValue", JNull); > │ ("number", JNumber 42.0); ...]) > │ > │ 00:00:18 v #3 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 154933 } 00:00:18 d #4 runtime.execute_with_options / { file_name = jupyter; arguments = ["nbconvert", "/home/runner/work/polyglot/polyglot/apps/parser/JsonParser.dib.ipynb", "--to", "html", "--HTMLExporter.theme=dark"]; options = { command = jupyter nbconvert "/home/runner/work/polyglot/polyglot/apps/parser/JsonParser.dib.ipynb" --to html --HTMLExporter.theme=dark; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:19 v #5 ! [NbConvertApp] Converting notebook /home/runner/work/polyglot/polyglot/apps/parser/JsonParser.dib.ipynb to html 00:00:19 v #6 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbformat/__init__.py:96: MissingIDFieldWarning: Cell is missing an id field, this will become a hard error in future nbformat versions. You may want to use `normalize()` on your notebooks before validations (available since nbformat 5.1.4). Previous versions of nbformat are fixing this issue transparently, and will stop doing so in the future. 00:00:19 v #7 ! validate(nb) 00:00:19 v #8 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbconvert/filters/highlight.py:71: UserWarning: IPython3 lexer unavailable, falling back on Python 3 00:00:19 v #9 ! return _pygments_highlight( 00:00:20 v #10 ! [NbConvertApp] Writing 500494 bytes to /home/runner/work/polyglot/polyglot/apps/parser/JsonParser.dib.html 00:00:20 v #11 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 906 } 00:00:20 d #12 spiral.run / dib / jupyter nbconvert / { exit_code = 0; jupyter_result_length = 906 } 00:00:20 d #13 runtime.execute_with_options / { file_name = pwsh; arguments = ["-c", "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/parser/JsonParser.dib.html'; (Get-Content $path -Raw) -replace '(id=\\\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"]; options = { command = pwsh -c "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/parser/JsonParser.dib.html'; (Get-Content $path -Raw) -replace '(id=\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:20 v #14 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 0 } 00:00:20 d #15 spiral.run / dib / html cell ids / { exit_code = 0; pwsh_replace_html_result_length = 0 } 00:00:20 d #16 spiral.run / dib / { exit_code = 0; result_length = 155898 } 00:00:00 d #1 spiral.main / { args = Array(MutCell(["dib", "--path", "Parser.dib"])) } 00:00:00 d #2 runtime.execute_with_options / { file_name = dotnet; arguments = ["repl", "--exit-after-run", "--run", "/home/runner/work/polyglot/polyglot/apps/parser/Parser.dib", "--output-path", "/home/runner/work/polyglot/polyglot/apps/parser/Parser.dib.ipynb"]; options = { command = dotnet repl --exit-after-run --run "/home/runner/work/polyglot/polyglot/apps/parser/Parser.dib" --output-path "/home/runner/work/polyglot/polyglot/apps/parser/Parser.dib.ipynb"; cancellation_token = None; environment_variables = Array(MutCell([("TRACE_LEVEL", "Verbose"), ("AUTOMATION", "True")])); on_line = None; stdin = None; trace = false; working_directory = None } } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ # Parser (Polyglot) > > ── fsharp ────────────────────────────────────────────────────────────────────── > open Common > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### TextInput > > ── fsharp ────────────────────────────────────────────────────────────────────── > type Position = > { > line : int > column : int > } > > ── fsharp ────────────────────────────────────────────────────────────────────── > let initialPos = { line = 0; column = 0 } > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline incrCol (pos : Position) = > { pos with column = pos.column + 1 } > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline incrLine pos = > { line = pos.line + 1; column = 0 } > > ── fsharp ────────────────────────────────────────────────────────────────────── > type InputState = > { > lines : string[[]] > position : Position > } > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline fromStr str = > { > lines = > if str |> String.IsNullOrEmpty > then [[||]] > else str |> SpiralSm.split_string [[| "\r\n"; "\n" |]] > position = initialPos > } > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > fromStr "" |> _assertEqual { > lines = [[||]] > position = { line = 0; column = 0 } > } > > ── [ 41.91ms - stdout ] ──────────────────────────────────────────────────────── > │ { lines = [||] > │ position = { line = 0 > │ column = 0 } } > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > fromStr "Hello \n World" |> _assertEqual { > lines = [[| "Hello "; " World" |]] > position = { line = 0; column = 0 } > } > > ── [ 19.93ms - stdout ] ──────────────────────────────────────────────────────── > │ { lines = [|"Hello "; " World"|] > │ position = { line = 0 > │ column = 0 } } > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline currentLine inputState = > let linePos = inputState.position.line > if linePos < inputState.lines.Length > then inputState.lines.[[linePos]] > else "end of file" > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline nextChar input = > let linePos = input.position.line > let colPos = input.position.column > > if linePos >= input.lines.Length > then input, None > else > let currentLine = currentLine input > if colPos < currentLine.Length then > let char = currentLine.[[colPos]] > let newPos = incrCol input.position > let newState = { input with position = newPos } > newState, Some char > else > let char = '\n' > let newPos = incrLine input.position > let newState = { input with position = newPos } > newState, Some char > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let newInput, charOpt = fromStr "Hello World" |> nextChar > > newInput |> _assertEqual { > lines = [[| "Hello World" |]] > position = { line = 0; column = 1 } > } > charOpt |> _assertEqual (Some 'H') > > ── [ 29.43ms - stdout ] ──────────────────────────────────────────────────────── > │ { lines = [|"Hello World"|] > │ position = { line = 0 > │ column = 1 } } > │ > │ Some 'H' > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let newInput, charOpt = fromStr "Hello\n\nWorld" |> nextChar > > newInput |> _assertEqual { > lines = [[| "Hello"; ""; "World" |]] > position = { line = 0; column = 1 } > } > charOpt |> _assertEqual (Some 'H') > > ── [ 20.32ms - stdout ] ──────────────────────────────────────────────────────── > │ { lines = [|"Hello"; ""; "World"|] > │ position = { line = 0 > │ column = 1 } } > │ > │ Some 'H' > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### Parser > > ── fsharp ────────────────────────────────────────────────────────────────────── > type Input = InputState > type ParserLabel = string > type ParserError = string > > type ParserPosition = > { > currentLine : string > line : int > column : int > } > > type ParseResult<'a> = > | Success of 'a > | Failure of ParserLabel * ParserError * ParserPosition > > type Parser<'a> = > { > label : ParserLabel > parseFn : Input -> ParseResult<'a * Input> > } > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline printResult result = > match result with > | Success (value, input) -> > printfn $"%A{value}" > | Failure (label, error, parserPos) -> > let errorLine = parserPos.currentLine > let colPos = parserPos.column > let linePos = parserPos.line > let failureCaret = $"{' ' |> string |> String.replicate colPos}^{error}" > printfn $"Line:%i{linePos} Col:%i{colPos} Error parsing > %s{label}\n%s{errorLine}\n%s{failureCaret}" > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline runOnInput parser input = > parser.parseFn input > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline run parser inputStr = > runOnInput parser (fromStr inputStr) > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline parserPositionFromInputState (inputState : Input) = > { > currentLine = currentLine inputState > line = inputState.position.line > column = inputState.position.column > } > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline getLabel parser = > parser.label > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline setLabel parser newLabel = > { > label = newLabel > parseFn = fun input -> > match parser.parseFn input with > | Success s -> Success s > | Failure (oldLabel, err, pos) -> Failure (newLabel, err, pos) > } > > ── fsharp ────────────────────────────────────────────────────────────────────── > let (<?>) = setLabel > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline satisfy predicate label = > { > label = label > parseFn = fun input -> > let remainingInput, charOpt = nextChar input > match charOpt with > | None -> > let err = "No more input" > let pos = parserPositionFromInputState input > Failure (label, err, pos) > | Some first -> > if predicate first > then Success (first, remainingInput) > else > let err = $"Unexpected '%c{first}'" > let pos = parserPositionFromInputState input > Failure (label, err, pos) > } > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let input = fromStr "Hello" > let parser = satisfy (fun c -> c = 'H') "H" > runOnInput parser input |> _assertEqual ( > Success ( > 'H', > { > lines = [[| "Hello" |]] > position = { line = 0; column = 1 } > } > ) > ) > > ── [ 26.59ms - stdout ] ──────────────────────────────────────────────────────── > │ Success ('H', { lines = [|"Hello"|] > │ position = { line = 0 > │ column = 1 } }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let input = fromStr "World" > let parser = satisfy (fun c -> c = 'H') "H" > runOnInput parser input |> _assertEqual ( > Failure ( > "H", > "Unexpected 'W'", > { > currentLine = "World" > line = 0 > column = 0 > } > ) > ) > > ── [ 23.47ms - stdout ] ──────────────────────────────────────────────────────── > │ Failure ("H", "Unexpected 'W'", { currentLine = "World" > │ line = 0 > │ column = 0 }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline bindP f p = > { > label = "unknown" > parseFn = fun input -> > match runOnInput p input with > | Failure (label, err, pos) -> Failure (label, err, pos) > | Success (value1, remainingInput) -> runOnInput (f value1) > remainingInput > } > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline (>>=) p f = bindP f p > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let input = fromStr "Hello" > let parser = satisfy (fun c -> c = 'H') "H" > let parser2 = parser >>= fun c -> satisfy (fun c -> c = 'e') "e" > runOnInput parser2 input |> _assertEqual ( > Success ( > 'e', > { > lines = [[| "Hello" |]] > position = { line = 0; column = 2 } > } > ) > ) > > ── [ 30.29ms - stdout ] ──────────────────────────────────────────────────────── > │ Success ('e', { lines = [|"Hello"|] > │ position = { line = 0 > │ column = 2 } }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let input = fromStr "World" > let parser = satisfy (fun c -> c = 'W') "W" > let parser2 = parser >>= fun c -> satisfy (fun c -> c = 'e') "e" > runOnInput parser2 input |> _assertEqual ( > Failure ( > "e", > "Unexpected 'o'", > { > currentLine = "World" > line = 0 > column = 1 > } > ) > ) > > ── [ 29.17ms - stdout ] ──────────────────────────────────────────────────────── > │ Failure ("e", "Unexpected 'o'", { currentLine = "World" > │ line = 0 > │ column = 1 }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline returnP x = > { > label = $"%A{x}" > parseFn = fun input -> Success (x, input) > } > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let input = fromStr "Hello" > let parser = returnP "Hello" > runOnInput parser input |> _assertEqual ( > Success ( > "Hello", > { > lines = [[| "Hello" |]] > position = { line = 0; column = 0 } > } > ) > ) > > ── [ 18.16ms - stdout ] ──────────────────────────────────────────────────────── > │ Success ("Hello", { lines = [|"Hello"|] > │ position = { line = 0 > │ column = 0 } }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline mapP f = > bindP (f >> returnP) > > ── fsharp ────────────────────────────────────────────────────────────────────── > let (<!>) = mapP > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline (|>>) x f = f <!> x > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let input = fromStr "Hello" > let parser = satisfy (fun c -> c = 'H') "H" > let parser2 = parser |>> string > runOnInput parser2 input |> _assertEqual ( > Success ( > "H", > { > lines = [[| "Hello" |]] > position = { line = 0; column = 1 } > } > ) > ) > > ── [ 32.59ms - stdout ] ──────────────────────────────────────────────────────── > │ Success ("H", { lines = [|"Hello"|] > │ position = { line = 0 > │ column = 1 } }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline applyP fP xP = > fP >>= > fun f -> > xP >>= > fun x -> > returnP (f x) > > ── fsharp ────────────────────────────────────────────────────────────────────── > let (<*>) = applyP > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline lift2 f xP yP = > returnP f <*> xP <*> yP > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let input = fromStr "Hello" > let parser = satisfy (fun c -> c = 'H') "H" > let parser2 = satisfy (fun c -> c = 'e') "e" > let parser3 = lift2 (fun c1 c2 -> string c1 + string c2) parser parser2 > runOnInput parser3 input |> _assertEqual ( > Success ( > "He", > { > lines = [[| "Hello" |]] > position = { line = 0; column = 2 } > } > ) > ) > > ── [ 43.46ms - stdout ] ──────────────────────────────────────────────────────── > │ Success ("He", { lines = [|"Hello"|] > │ position = { line = 0 > │ column = 2 } }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline andThen p1 p2 = > p1 >>= > fun p1Result -> > p2 >>= > fun p2Result -> > returnP (p1Result, p2Result) > <?> $"{getLabel p1} andThen {getLabel p2}" > > ── fsharp ────────────────────────────────────────────────────────────────────── > let (.>>.) = andThen > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let input = fromStr "Hello" > let parser = satisfy (fun c -> c = 'H') "H" > let parser2 = satisfy (fun c -> c = 'e') "e" > let parser3 = parser .>>. parser2 > runOnInput parser3 input |> _assertEqual ( > Success ( > ('H', 'e'), > { > lines = [[| "Hello" |]] > position = { line = 0; column = 2 } > } > ) > ) > > ── [ 29.98ms - stdout ] ──────────────────────────────────────────────────────── > │ Success (('H', 'e'), { lines = [|"Hello"|] > │ position = { line = 0 > │ column = 2 } }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline orElse p1 p2 = > { > label = $"{getLabel p1} orElse {getLabel p2}" > parseFn = fun input -> > match runOnInput p1 input with > | Success _ as result -> result > | Failure _ -> runOnInput p2 input > } > > ── fsharp ────────────────────────────────────────────────────────────────────── > let (<|>) = orElse > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let input = fromStr "hello" > let parser = satisfy (fun c -> c = 'H') "H" > let parser2 = satisfy (fun c -> c = 'h') "h" > let parser3 = parser <|> parser2 > runOnInput parser3 input |> _assertEqual ( > Success ( > 'h', > { > lines = [[| "hello" |]] > position = { line = 0; column = 1 } > } > ) > ) > > ── [ 26.39ms - stdout ] ──────────────────────────────────────────────────────── > │ Success ('h', { lines = [|"hello"|] > │ position = { line = 0 > │ column = 1 } }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline choice listOfParsers = > listOfParsers |> List.reduce (<|>) > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let input = fromStr "hello" > let parser = satisfy (fun c -> c = 'H') "H" > let parser2 = satisfy (fun c -> c = 'h') "h" > let parser3 = choice [[ parser; parser2 ]] > runOnInput parser3 input |> _assertEqual ( > Success ( > 'h', > { > lines = [[| "hello" |]] > position = { line = 0; column = 1 } > } > ) > ) > > ── [ 26.15ms - stdout ] ──────────────────────────────────────────────────────── > │ Success ('h', { lines = [|"hello"|] > │ position = { line = 0 > │ column = 1 } }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let rec sequence parserList = > match parserList with > | [[]] -> returnP [[]] > | head :: tail -> (lift2 cons) head (sequence tail) > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let input = fromStr "Hello" > let parser = satisfy (fun c -> c = 'H') "H" > let parser2 = satisfy (fun c -> c = 'e') "e" > let parser3 = sequence [[ parser; parser2 ]] > runOnInput parser3 input |> _assertEqual ( > Success ( > [[ 'H'; 'e' ]], > { > lines = [[| "Hello" |]] > position = { line = 0; column = 2 } > } > ) > ) > > ── [ 33.82ms - stdout ] ──────────────────────────────────────────────────────── > │ Success (['H'; 'e'], { lines = [|"Hello"|] > │ position = { line = 0 > │ column = 2 } }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let rec parseZeroOrMore parser input = > match runOnInput parser input with > | Failure (_, _, _) -> > [[]], input > | Success (firstValue, inputAfterFirstParse) -> > let subsequentValues, remainingInput = parseZeroOrMore parser > inputAfterFirstParse > firstValue :: subsequentValues, remainingInput > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline many parser = > { > label = $"many {getLabel parser}" > parseFn = fun input -> Success (parseZeroOrMore parser input) > } > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let input = fromStr "hello" > let parser = satisfy (fun c -> c = 'H') "H" > let parser2 = many parser > runOnInput parser2 input |> _assertEqual ( > Success ( > [[]], > { > lines = [[| "hello" |]] > position = { line = 0; column = 0 } > } > ) > ) > > ── [ 23.29ms - stdout ] ──────────────────────────────────────────────────────── > │ Success ([], { lines = [|"hello"|] > │ position = { line = 0 > │ column = 0 } }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline many1 p = > p >>= > fun head -> > many p >>= > fun tail -> > returnP (head :: tail) > <?> $"many1 {getLabel p}" > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let input = fromStr "hello" > let parser = satisfy (fun c -> c = 'H') "H" > let parser2 = many1 parser > runOnInput parser2 input |> _assertEqual ( > Failure ( > "many1 H", > "Unexpected 'h'", > { > currentLine = "hello" > line = 0 > column = 0 > } > ) > ) > > ── [ 67.37ms - stdout ] ──────────────────────────────────────────────────────── > │ Failure ("many1 H", "Unexpected 'h'", { currentLine = "hello" > │ line = 0 > │ column = 0 }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline opt p = > let some = p |>> Some > let none = returnP None > (some <|> none) > <?> $"opt {getLabel p}" > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let input = fromStr "hello" > let parser = satisfy (fun c -> c = 'H') "H" > let parser2 = opt parser > runOnInput parser2 input |> _assertEqual ( > Success ( > None, > { > lines = [[| "hello" |]] > position = { line = 0; column = 0 } > } > ) > ) > > ── [ 27.44ms - stdout ] ──────────────────────────────────────────────────────── > │ Success (None, { lines = [|"hello"|] > │ position = { line = 0 > │ column = 0 } }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline (.>>) p1 p2 = > p1 .>>. p2 > |> mapP fst > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline (>>.) p1 p2 = > p1 .>>. p2 > |> mapP snd > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline between p1 p2 p3 = > p1 >>. p2 .>> p3 > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let input = fromStr "[[Hello]]" > let parser = > between > (satisfy (fun c -> c = '[[') "[[") > (many (satisfy (fun c -> [[ 'a' .. 'z' ]] @ [[ 'A' .. 'Z' ]] |> > List.contains c) "letter")) > (satisfy (fun c -> c = ']]') "]]") > runOnInput parser input |> _assertEqual ( > Success ( > [[ 'H'; 'e'; 'l'; 'l'; 'o' ]], > { > lines = [[| "[[Hello]]" |]] > position = { line = 0; column = 7 } > } > ) > ) > > ── [ 87.58ms - stdout ] ──────────────────────────────────────────────────────── > │ Success (['H'; 'e'; 'l'; 'l'; 'o'], { lines = [|"[Hello]"|] > │ position = { line = 0 > │ column = 7 > } }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline sepBy1 p sep = > let sepThenP = sep >>. p > p .>>. many sepThenP > |>> fun (p, pList) -> p :: pList > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline sepBy p sep = > sepBy1 p sep <|> returnP [[]] > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let input = fromStr "Hello,World" > let parser = sepBy (many (satisfy (fun c -> c <> ',') "not comma")) (satisfy > (fun c -> c = ',') "comma") > runOnInput parser input |> _assertEqual ( > Success ( > [[ [[ 'H'; 'e'; 'l'; 'l'; 'o' ]]; [[ 'W'; 'o'; 'r'; 'l'; 'd'; '\n' ]] > ]], > { > lines = [[| "Hello,World" |]] > position = { line = 1; column = 0 } > } > ) > ) > > ── [ 54.37ms - stdout ] ──────────────────────────────────────────────────────── > │ Success ([['H'; 'e'; 'l'; 'l'; 'o']; ['W'; 'o'; 'r'; 'l'; > 'd'; '\010']], { lines = [|"Hello,World"|] > │ > position = { line = 1 > │ > > column = 0 } }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline pchar charToMatch = > satisfy ((=) charToMatch) $"%c{charToMatch}" > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline anyOf listOfChars = > listOfChars > |> List.map pchar > |> choice > <?> $"anyOf %A{listOfChars}" > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let input = fromStr "Hello" > let parser = anyOf [[ 'H'; 'e'; 'l'; 'o' ]] |> many > runOnInput parser input |> _assertEqual ( > Success ( > [[ 'H'; 'e'; 'l'; 'l'; 'o' ]], > { > lines = [[| "Hello" |]] > position = { line = 0; column = 5 } > } > ) > ) > > ── [ 28.86ms - stdout ] ──────────────────────────────────────────────────────── > │ Success (['H'; 'e'; 'l'; 'l'; 'o'], { lines = [|"Hello"|] > │ position = { line = 0 > │ column = 5 > } }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline charListToStr charList = > charList |> List.toArray |> String > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline manyChars cp = > many cp > |>> charListToStr > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline manyChars1 cp = > many1 cp > |>> charListToStr > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let input = fromStr "Hello" > let parser = manyChars1 (anyOf [[ 'H'; 'e'; 'l'; 'o' ]]) > runOnInput parser input |> _assertEqual ( > Success ( > "Hello", > { > lines = [[| "Hello" |]] > position = { line = 0; column = 5 } > } > ) > ) > > ── [ 38.60ms - stdout ] ──────────────────────────────────────────────────────── > │ Success ("Hello", { lines = [|"Hello"|] > │ position = { line = 0 > │ column = 5 } }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline pstring str = > str > |> List.ofSeq > |> List.map pchar > |> sequence > |> mapP charListToStr > <?> str > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let input = fromStr "Hello" > let parser = pstring "Hello" > runOnInput parser input |> _assertEqual ( > Success ( > "Hello", > { > lines = [[| "Hello" |]] > position = { line = 0; column = 5 } > } > ) > ) > > ── [ 40.03ms - stdout ] ──────────────────────────────────────────────────────── > │ Success ("Hello", { lines = [|"Hello"|] > │ position = { line = 0 > │ column = 5 } }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let whitespaceChar = > satisfy Char.IsWhiteSpace "whitespace" > > ── fsharp ────────────────────────────────────────────────────────────────────── > let spaces = many whitespaceChar > > ── fsharp ────────────────────────────────────────────────────────────────────── > let spaces1 = many1 whitespaceChar > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let input = fromStr " Hello" > let parser = spaces1 .>>. pstring "Hello" > runOnInput parser input |> _assertEqual ( > Success ( > ([[ ' '; ' ' ]], "Hello"), > { > lines = [[| " Hello" |]] > position = { line = 0; column = 7 } > } > ) > ) > > ── [ 36.48ms - stdout ] ──────────────────────────────────────────────────────── > │ Success (([' '; ' '], "Hello"), { lines = [|" Hello"|] > │ position = { line = 0 > │ column = 7 } > }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let digitChar = > satisfy Char.IsDigit "digit" > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let input = fromStr "Hello" > let parser = digitChar > runOnInput parser input |> _assertEqual ( > Failure ( > "digit", > "Unexpected 'H'", > { > currentLine = "Hello" > line = 0 > column = 0 > } > ) > ) > > ── [ 21.12ms - stdout ] ──────────────────────────────────────────────────────── > │ Failure ("digit", "Unexpected 'H'", { currentLine = "Hello" > │ line = 0 > │ column = 0 }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let pint = > let inline resultToInt (sign, digits) = > let i = int digits > match sign with > | Some ch -> -i > | None -> i > > let digits = manyChars1 digitChar > > opt (pchar '-') .>>. digits > |> mapP resultToInt > <?> "integer" > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run pint "-123" > |> _assertEqual ( > Success ( > -123, > { > lines = [[| "-123" |]] > position = { line = 0; column = 4 } > } > ) > ) > > ── [ 19.84ms - stdout ] ──────────────────────────────────────────────────────── > │ Success (-123, { lines = [|"-123"|] > │ position = { line = 0 > │ column = 4 } }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let pfloat = > let inline resultToFloat (((sign, digits1), point), digits2) = > let fl = float $"{digits1}.{digits2}" > match sign with > | Some ch -> -fl > | None -> fl > > let digits = manyChars1 digitChar > > opt (pchar '-') .>>. digits .>>. pchar '.' .>>. digits > |> mapP resultToFloat > <?> "float" > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > run pfloat "-123.45" > |> _assertEqual ( > Success ( > -123.45, > { > lines = [[| "-123.45" |]] > position = { line = 0; column = 7 } > } > ) > ) > > ── [ 24.32ms - stdout ] ──────────────────────────────────────────────────────── > │ Success (-123.45, { lines = [|"-123.45"|] > │ position = { line = 0 > │ column = 7 } }) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline createParserForwardedToRef<'a> () = > let mutable parserRef : Parser<'a> = > { > label = "unknown" > parseFn = fun _ -> failwith "unfixed forwarded parser" > } > > let wrapperParser = > { parserRef with > parseFn = fun input -> runOnInput parserRef input > } > > wrapperParser, (fun v -> parserRef <- v) > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline (>>%) p x = > p > |>> fun _ -> x 00:00:17 v #3 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 33524 } 00:00:17 d #4 runtime.execute_with_options / { file_name = jupyter; arguments = ["nbconvert", "/home/runner/work/polyglot/polyglot/apps/parser/Parser.dib.ipynb", "--to", "html", "--HTMLExporter.theme=dark"]; options = { command = jupyter nbconvert "/home/runner/work/polyglot/polyglot/apps/parser/Parser.dib.ipynb" --to html --HTMLExporter.theme=dark; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:17 v #5 ! [NbConvertApp] Converting notebook /home/runner/work/polyglot/polyglot/apps/parser/Parser.dib.ipynb to html 00:00:17 v #6 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbformat/__init__.py:96: MissingIDFieldWarning: Cell is missing an id field, this will become a hard error in future nbformat versions. You may want to use `normalize()` on your notebooks before validations (available since nbformat 5.1.4). Previous versions of nbformat are fixing this issue transparently, and will stop doing so in the future. 00:00:17 v #7 ! validate(nb) 00:00:18 v #8 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbconvert/filters/highlight.py:71: UserWarning: IPython3 lexer unavailable, falling back on Python 3 00:00:18 v #9 ! return _pygments_highlight( 00:00:18 v #10 ! [NbConvertApp] Writing 413727 bytes to /home/runner/work/polyglot/polyglot/apps/parser/Parser.dib.html 00:00:19 v #11 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 898 } 00:00:19 d #12 spiral.run / dib / jupyter nbconvert / { exit_code = 0; jupyter_result_length = 898 } 00:00:19 d #13 runtime.execute_with_options / { file_name = pwsh; arguments = ["-c", "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/parser/Parser.dib.html'; (Get-Content $path -Raw) -replace '(id=\\\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"]; options = { command = pwsh -c "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/parser/Parser.dib.html'; (Get-Content $path -Raw) -replace '(id=\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:19 v #14 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 0 } 00:00:19 d #15 spiral.run / dib / html cell ids / { exit_code = 0; pwsh_replace_html_result_length = 0 } 00:00:19 d #16 spiral.run / dib / { exit_code = 0; result_length = 34481 } 00:00:00 d #1 writeDibCode / output: Fs / path: Parser.dib 00:00:00 d #1 writeDibCode / output: Fs / path: JsonParser.dib 00:00:00 d #2 parseDibCode / output: Fs / file: Parser.dib 00:00:00 d #3 parseDibCode / output: Fs / file: JsonParser.dib polyglot/apps/parser/build.ps1 / $env:CI:'true'
In [ ]:
{ pwsh ../apps/spiral/build.ps1 } | Invoke-Block
00:00:00 d #1 writeDibCode / output: Fs / path: spiral_compiler.dib 00:00:00 d #2 parseDibCode / output: Fs / file: spiral_compiler.dib 00:00:00 d #1 persistCodeProject / packages: [Fable.Core; FSharp.Control.AsyncSeq; FSharpx.Collections; ... ] / modules: [deps/spiral/lib/spiral/common.fsx; deps/spiral/lib/spiral/sm.fsx; deps/spiral/lib/spiral/crypto.fsx; ... ] / name: spiral_compiler / hash: / code.Length: 825640 00:00:00 d #2 buildProject / fullPath: /home/runner/work/polyglot/polyglot/target/Builder/spiral_compiler/spiral_compiler.fsproj 00:00:00 d #1 runtime.execute_with_options_async / { file_name = dotnet; arguments = US5_0 "publish "/home/runner/work/polyglot/polyglot/target/Builder/spiral_compiler/spiral_compiler.fsproj" --configuration Release --output "/home/runner/work/polyglot/spiral/apps/compiler/dist" --runtime linux-x64"; options = { command = dotnet publish "/home/runner/work/polyglot/polyglot/target/Builder/spiral_compiler/spiral_compiler.fsproj" --configuration Release --output "/home/runner/work/polyglot/spiral/apps/compiler/dist" --runtime linux-x64; cancellation_token = None; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot/target/Builder/spiral_compiler" } } 00:00:00 v #2 > Determining projects to restore... 00:00:01 v #3 > Paket version 9.0.2+a9b12aaeb8d8d5e47a415a3442b7920ed04e98e0 00:00:01 v #4 > The last full restore is still up to date. Nothing left to do. 00:00:01 v #5 > Total time taken: 0 milliseconds 00:00:01 v #6 > Paket version 9.0.2+a9b12aaeb8d8d5e47a415a3442b7920ed04e98e0 00:00:01 v #7 > Restoring /home/runner/work/polyglot/polyglot/target/Builder/spiral_compiler/spiral_compiler.fsproj 00:00:01 v #8 > Starting restore process. 00:00:01 v #9 > Total time taken: 0 milliseconds 00:00:02 v #10 > Restored /home/runner/work/polyglot/polyglot/target/Builder/spiral_compiler/spiral_compiler.fsproj (in 303 ms). 00:00:29 v #11 > spiral_compiler -> /home/runner/work/polyglot/polyglot/target/Builder/spiral_compiler/bin/Release/net9.0/linux-x64/spiral_compiler.dll 00:00:29 v #12 > spiral_compiler -> /home/runner/work/polyglot/spiral/apps/compiler/dist 00:00:29 d #13 runtime.execute_with_options_async / { exit_code = 0; output_length = 753; options = { command = dotnet publish "/home/runner/work/polyglot/polyglot/target/Builder/spiral_compiler/spiral_compiler.fsproj" --configuration Release --output "/home/runner/work/polyglot/spiral/apps/compiler/dist" --runtime linux-x64; cancellation_token = None; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot/target/Builder/spiral_compiler" } } spiral/lib/spiral/lib.ps1/GetTargetDir / targetDir: /home/runner/work/polyglot/polyglot/target/Builder/spiral_compiler spiral/apps/compiler/build.ps1 / $targetDir = /home/runner/work/polyglot/polyglot/target/Builder/spiral_compiler / $projectName: spiral_compiler / $env:CI:'true' 00:00:00 d #1 spiral.main / { args = Array(MutCell(["dib", "--path", "Supervisor.dib", "--retries", "3"])) } 00:00:00 d #2 runtime.execute_with_options / { file_name = dotnet; arguments = ["repl", "--exit-after-run", "--run", "/home/runner/work/polyglot/polyglot/apps/spiral/Supervisor.dib", "--output-path", "/home/runner/work/polyglot/polyglot/apps/spiral/Supervisor.dib.ipynb"]; options = { command = dotnet repl --exit-after-run --run "/home/runner/work/polyglot/polyglot/apps/spiral/Supervisor.dib" --output-path "/home/runner/work/polyglot/polyglot/apps/spiral/Supervisor.dib.ipynb"; cancellation_token = None; environment_variables = Array(MutCell([("TRACE_LEVEL", "Verbose"), ("AUTOMATION", "True")])); on_line = None; stdin = None; trace = false; working_directory = None } } > > ── fsharp ────────────────────────────────────────────────────────────────────── > #nowarn 0686 > > ── markdown ──────────────────────────────────────────────────────────────────── > │ # Supervisor (Polyglot) > > ── fsharp ────────────────────────────────────────────────────────────────────── > #r > @"../../../../../../../.nuget/packages/fsharp.control.asyncseq/3.2.1/lib/netstan > dard2.1/FSharp.Control.AsyncSeq.dll" > #r > @"../../../../../../../.nuget/packages/system.reactive/6.0.1-preview.1/lib/net6. > 0/System.Reactive.dll" > #r > @"../../../../../../../.nuget/packages/system.reactive.linq/6.0.1-preview.1/lib/ > netstandard2.0/System.Reactive.Linq.dll" > #r > @"../../../../../../../.nuget/packages/argu/6.2.4/lib/netstandard2.0/Argu.dll" > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.http.connections.com > mon/7.0.0/lib/net7.0/Microsoft.AspNetCore.Http.Connections.Common.dll" > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.http.connections.cli > ent/7.0.0/lib/net7.0/Microsoft.AspNetCore.Http.Connections.Client.dll" > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.signalr.common/7.0.0 > /lib/net7.0/Microsoft.AspNetCore.SignalR.Common.dll" > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.signalr.client/7.0.0 > /lib/net7.0/Microsoft.AspNetCore.SignalR.Client.dll" > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.signalr.client.core/ > 7.0.0/lib/net7.0/Microsoft.AspNetCore.SignalR.Client.Core.dll" > #r > @"../../../../../../../.nuget/packages/fsharp.json/0.4.1/lib/netstandard2.0/FSha > rp.Json.dll" > > ── fsharp ────────────────────────────────────────────────────────────────────── > #if !INTERACTIVE > open Lib > #endif > > ── fsharp ────────────────────────────────────────────────────────────────────── > open Common > open SpiralFileSystem.Operators > open Microsoft.AspNetCore.SignalR.Client > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### sendJson > > ── fsharp ────────────────────────────────────────────────────────────────────── > let sendJson (port : int) (json : string) = async { > let host = "127.0.0.1" > let! portOpen = SpiralNetworking.test_port_open host port > if portOpen then > try > let connection = > HubConnectionBuilder().WithUrl($"http://{host}:{port}").Build() > do! connection.StartAsync () |> Async.AwaitTask > let! result = connection.InvokeAsync<string> ("ClientToServerMsg", > json) |> Async.AwaitTask > do! connection.StopAsync () |> Async.AwaitTask > trace Verbose (fun () -> $"Supervisor.sendJson / port: {port} / > json: {json |> SpiralSm.ellipsis_end 200} / result: {result |> Option.ofObj |> > Option.map (SpiralSm.ellipsis_end 200)}") _locals > return Some result > with ex -> > trace Critical (fun () -> $"Supervisor.sendJson / port: {port} / > json: {json |> SpiralSm.ellipsis_end 200} / ex: {ex |> > SpiralSm.format_exception}") _locals > return None > else > trace Debug (fun () -> $"Supervisor.sendJson / port: {port} / error: > port not open") _locals > return None > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### sendObj > > ── fsharp ────────────────────────────────────────────────────────────────────── > let sendObj port obj = > obj > |> System.Text.Json.JsonSerializer.Serialize > |> sendJson port > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### workspaceRoot > > ── fsharp ────────────────────────────────────────────────────────────────────── > let workspaceRoot = SpiralFileSystem.get_workspace_root () > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### getFilePathFromUri > > ── fsharp ────────────────────────────────────────────────────────────────────── > let getFilePathFromUri uri = > match System.Uri.TryCreate (uri, System.UriKind.Absolute) with > | true, uri -> uri.AbsolutePath |> System.IO.Path.GetFullPath > | _ -> failwith "invalid uri" > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### getCompilerPort > > ── fsharp ────────────────────────────────────────────────────────────────────── > let getCompilerPort () = > 13805 > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### serialize_obj > > ── fsharp ────────────────────────────────────────────────────────────────────── > let serializeObj obj = > try > obj > |> FSharp.Json.Json.serialize > |> SpiralSm.replace "\\\\" "\\" > |> SpiralSm.replace "\\r\\n" "\n" > |> SpiralSm.replace "\\n" "\n" > with ex -> > trace Critical (fun () -> "Supervisor.serialize_obj / obj: %A{obj}") > _locals > "" > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### Backend > > ── fsharp ────────────────────────────────────────────────────────────────────── > type Backend = > | Gleam > | Fsharp > | Python > | Cpp > > ── fsharp ────────────────────────────────────────────────────────────────────── > #r > @"../../../../../../../.nuget/packages/fsharpx.collections/3.1.0/lib/netstandard > 2.0/FSharpx.Collections.dll" > #r > @"../../../../../../../.nuget/packages/hopac/0.5.1/lib/netstandard2.0/Hopac.dll" > #r > @"../../../../../../../.nuget/packages/hopac/0.5.1/lib/netstandard2.0/Hopac.Core > .dll" > #r > @"../../../../../../../.nuget/packages/fparsec/2.0.0-beta2/lib/netstandard2.1/FP > arsec.dll" > #r > @"../../../../../../../.nuget/packages/fparsec/2.0.0-beta2/lib/netstandard2.1/FP > arsecCS.dll" > > > > #if _LINUX > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.linux-x6 > 4/9.0.3/runtimes/linux-x64/lib/net9.0/Microsoft.AspNetCore.dll" > #else > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.win-x64/ > 9.0.3/runtimes/win-x64/lib/net9.0/Microsoft.AspNetCore.dll" > #endif > > #if _LINUX > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.linux-x6 > 4/9.0.3/runtimes/linux-x64/lib/net9.0/Microsoft.AspNetCore.SignalR.dll" > #else > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.win-x64/ > 9.0.3/runtimes/win-x64/lib/net9.0/Microsoft.AspNetCore.SignalR.dll" > #endif > > #if _LINUX > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.linux-x6 > 4/9.0.3/runtimes/linux-x64/lib/net9.0/Microsoft.AspNetCore.SignalR.Core.dll" > #else > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.win-x64/ > 9.0.3/runtimes/win-x64/lib/net9.0/Microsoft.AspNetCore.SignalR.Core.dll" > #endif > > #if _LINUX > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.linux-x6 > 4/9.0.3/runtimes/linux-x64/lib/net9.0/Microsoft.AspNetCore.Cors.dll" > #else > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.win-x64/ > 9.0.3/runtimes/win-x64/lib/net9.0/Microsoft.AspNetCore.Cors.dll" > #endif > > #if _LINUX > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.linux-x6 > 4/9.0.3/runtimes/linux-x64/lib/net9.0/Microsoft.AspNetCore.Http.Abstractions.dll > " > #else > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.win-x64/ > 9.0.3/runtimes/win-x64/lib/net9.0/Microsoft.AspNetCore.Http.Abstractions.dll" > #endif > > #if _LINUX > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.linux-x6 > 4/9.0.3/runtimes/linux-x64/lib/net9.0/Microsoft.AspNetCore.Connections.Abstracti > ons.dll" > #else > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.win-x64/ > 9.0.3/runtimes/win-x64/lib/net9.0/Microsoft.AspNetCore.Connections.Abstractions. > dll" > #endif > > #if _LINUX > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.linux-x6 > 4/9.0.3/runtimes/linux-x64/lib/net9.0/Microsoft.AspNetCore.Hosting.Abstractions. > dll" > #else > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.win-x64/ > 9.0.3/runtimes/win-x64/lib/net9.0/Microsoft.AspNetCore.Hosting.Abstractions.dll" > #endif > > #if _LINUX > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.linux-x6 > 4/9.0.3/runtimes/linux-x64/lib/net9.0/Microsoft.AspNetCore.Http.Connections.dll" > #else > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.win-x64/ > 9.0.3/runtimes/win-x64/lib/net9.0/Microsoft.AspNetCore.Http.Connections.dll" > #endif > > #if _LINUX > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.linux-x6 > 4/9.0.3/runtimes/linux-x64/lib/net9.0/Microsoft.AspNetCore.Routing.dll" > #else > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.win-x64/ > 9.0.3/runtimes/win-x64/lib/net9.0/Microsoft.AspNetCore.Routing.dll" > #endif > > ── fsharp ────────────────────────────────────────────────────────────────────── > #r > @"../../../../../../../.nuget/packages/microsoft.extensions.logging/9.0.0/lib/ne > t9.0/Microsoft.Extensions.Logging.dll" > #r > @"../../../../../../../.nuget/packages/microsoft.extensions.logging.abstractions > /9.0.0/lib/net9.0/Microsoft.Extensions.Logging.Abstractions.dll" > #r > @"../../../../../../../.nuget/packages/microsoft.extensions.dependencyinjection. > abstractions/9.0.0/lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstracti > ons.dll" > > ── fsharp ────────────────────────────────────────────────────────────────────── > #r > @"../../../../../../../.nuget/packages/system.management/9.0.0/lib/netstandard2. > 0/System.Management.dll" > > ── fsharp ────────────────────────────────────────────────────────────────────── > open spiral_compiler > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### awaitCompiler > > ── fsharp ────────────────────────────────────────────────────────────────────── > let awaitCompiler port cancellationToken = async { > let host = "127.0.0.1" > let struct (ct, disposable) = cancellationToken |> > SpiralThreading.new_disposable_token > let! ct = ct |> SpiralAsync.merge_cancellation_token_with_default_async > > let compiler = MailboxProcessor.Start (fun inbox -> async { > let! availablePort = SpiralNetworking.get_available_port (Some 180) host > port > if availablePort <> port then > inbox.Post (port, false) > else > let compilerDir = > workspaceRoot </> "deps/spiral/apps/compiler/dist" > |> System.IO.Path.GetFullPath > > let compilerPath = compilerDir </> > $"spiral_compiler{SpiralPlatform.get_executable_suffix ()}" > > let! exitCode, result = > SpiralRuntime.execution_options (fun x -> > { x with > l0 = $"\"{compilerPath}\" --port {availablePort} > --default-int i32 --default-float f64" > l1 = Some ct > l3 = Some (fun struct (_, line, _) -> async { > if line |> SpiralSm.contains > $"System.IO.IOException: Failed to bind to address http://{host}:{port}: address > already in use." then > inbox.Post (port, false) > > if line |> SpiralSm.contains $"Server bound to: > http://localhost:{availablePort}" then > let rec loop retry = async { > do! > SpiralNetworking.wait_for_port_access > (Some 100) true host availablePort > |> Async.runWithTimeoutAsync 500 > |> Async.Ignore > > let _locals () = $"port: {availablePort} / > retry: {retry} / {_locals ()}" > try > let pingObj = {| Ping = true |} > let! pingResult = pingObj |> sendObj > availablePort > trace Verbose (fun () -> > $"Supervisor.awaitCompiler / Ping / result: '%A{pingResult}'") _locals > > match pingResult with > | Some _ -> inbox.Post (availablePort, > true) > | None -> do! loop (retry + 1) > with ex -> > trace Verbose (fun () -> > $"Supervisor.awaitCompiler / Ping / ex: {ex |> SpiralSm.format_exception}") > _locals > do! loop (retry + 1) > } > do! loop 1 > }) > l6 = Some workspaceRoot > } > ) > |> SpiralRuntime.execute_with_options_async > > trace Debug (fun () -> $"Supervisor.awaitCompiler / exitCode: > {exitCode} / result: {result}") _locals > disposable.Dispose () > }, ct) > > let! serverPort, managed = compiler.Receive () > > let connection = > HubConnectionBuilder().WithUrl($"http://{host}:{serverPort}").Build () > do! connection.StartAsync () |> Async.AwaitTask > > let event = Event<_> () > let disposable' = connection.On<string> ("ServerToClientMsg", event.Trigger) > let stream = > FSharp.Control.AsyncSeq.unfoldAsync > (fun () -> async { > let! msg = event.Publish |> Async.AwaitEvent > return Some (msg |> > FSharp.Json.Json.deserialize<ClientErrorsRes>, ()) > }) > () > > let disposable' = > new_disposable (fun () -> > async { > disposable'.Dispose () > do! connection.StopAsync () |> Async.AwaitTask > disposable.Dispose () > if managed > then do! > SpiralNetworking.wait_for_port_access (Some 100) false host > serverPort > |> Async.runWithTimeoutAsync 1500 > |> Async.Ignore > } > |> Async.RunSynchronously > ) > > return > serverPort, > stream, > ct, > disposable' > } > > ── fsharp ────────────────────────────────────────────────────────────────────── > open Hopac > open Hopac.Infixes > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### server > > ── fsharp ────────────────────────────────────────────────────────────────────── > let server1 = new_server<Job<unit>, obj, string option, Job<unit>, unit> () > let server2 = new_server<Job<unit>, obj, int array, Job<unit>, unit> () > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### buildFile > > ── fsharp ────────────────────────────────────────────────────────────────────── > let buildFile backend timeout port cancellationToken path = > let rec loop retry = async { > let fullPath = path |> System.IO.Path.GetFullPath |> > SpiralFileSystem.normalize_path > let fileDir = fullPath |> System.IO.Path.GetDirectoryName > let fileName = fullPath |> System.IO.Path.GetFileNameWithoutExtension > let! code = fullPath |> SpiralFileSystem.read_all_text_async > > // let stream, disposable = fileDir |> FileSystem.watchDirectory (fun _ > -> true) > // use _ = disposable > > let struct (token, disposable) = SpiralThreading.new_disposable_token > cancellationToken > use _ = disposable > > let outputFileName = > match backend with > | Gleam -> $"{fileName}.gleam" > | Fsharp -> $"{fileName}.fsx" > | Python -> $"{fileName}.py" > | Cpp -> $"{fileName}.cpp" > > // let outputContentSeq = > // stream > // |> FSharp.Control.AsyncSeq.chooseAsync (function > // | _, (FileSystem.FileSystemChange.Changed (path, Some text)) > // when (path |> System.IO.Path.GetFileName) = > outputFileName > // -> > // // fileDir </> path |> > SpiralFileSystem.read_all_text_retry_async > // text |> Some |> Async.init > // | _ -> None |> Async.init > // ) > // |> FSharp.Control.AsyncSeq.map (fun content -> > // Some (content |> SpiralSm.replace "\r\n" "\n"), None > // ) > > let printErrorData (data : {| uri : string; errors : RString list |}) = > let fileName = data.uri |> System.IO.Path.GetFileName > let errors = > data.errors > |> List.map snd > |> SpiralSm.concat "\n" > $"{fileName}:\n{errors}" > > > let port = port |> Option.defaultWith getCompilerPort > // let! serverPort, errors, ct, disposable = awaitCompiler port (Some > token) > let serverPort = port > // use _ = disposable > > let errorsSeq = > server1.errors > |> FSharp.Control.AsyncSeq.choose (fun error -> > match error with > | FatalError message -> > Some (message, error) > | TracedError data -> > Some (data.message, error) > | PackageErrors data when data.errors |> List.isEmpty |> not -> > Some (data |> printErrorData, error) > | TokenizerErrors data when data.errors |> List.isEmpty |> not > -> > Some (data |> printErrorData, error) > | ParserErrors data when data.errors |> List.isEmpty |> not -> > Some (data |> printErrorData, error) > | TypeErrors data when data.errors |> List.isEmpty |> not -> > Some (data |> printErrorData, error) > | _ -> None > ) > |> FSharp.Control.AsyncSeq.map (fun (message, error) -> > None, Some (message, error) > ) > > let timerSeq = > 500 > |> FSharp.Control.AsyncSeq.intervalMs > |> FSharp.Control.AsyncSeq.map (fun _ -> None, None) > > let compilerEvent = Event<option<string> * option<string * > ClientErrorsRes>> () > // let disposable' = connection.On<string> ("ServerToClientMsg", > event.Trigger) > let outputContentSeq = > FSharp.Control.AsyncSeq.unfoldAsync > (fun () -> async { > let! msg = compilerEvent.Publish |> Async.AwaitEvent > trace Verbose (fun () -> $"Supervisor.buildFile / > outputContentSeq unfoldAsync / msg: %A{msg}") _locals > return Some (msg, ()) > }) > () > > let compilerEvent2 = Event<option<string> * (string * ClientErrorsRes) > list * int> () > // let disposable' = connection.On<string> ("ServerToClientMsg", > event.Trigger) > let outputContentSeq2 = > FSharp.Control.AsyncSeq.unfoldAsync > (fun () -> async { > let! msg = compilerEvent2.Publish |> Async.AwaitEvent > trace Verbose (fun () -> $"Supervisor.buildFile / > outputContentSeq2 unfoldAsync / msg: %A{msg}") _locals > return Some (msg, ()) > }) > () > > let outputSeq = > [[ outputContentSeq; errorsSeq; timerSeq ]] > // [[ errorsSeq; timerSeq ]] > |> FSharp.Control.AsyncSeq.mergeAll > > let! outputChild = > ((None, [[]], 0), outputSeq) > ||> FSharp.Control.AsyncSeq.scan ( > fun (outputContentResult, errors, typeErrorCount) > (outputContent, error) -> > trace Verbose (fun () -> $"Supervisor.buildFile / > AsyncSeq.scan / outputContent:\n'{outputContent |> Option.map > (SpiralSm.ellipsis_end 1500)} / errors: {errors |> serializeObj} / > outputContentResult: {outputContentResult} / typeErrorCount: {typeErrorCount} / > retry: {retry} / error: {error} / path: {path}'") _locals > match outputContent, error with > | Some outputContent, None -> Some outputContent, errors, > typeErrorCount > | None, Some ( > _, > FatalError "File main has a type error somewhere in its > path." > ) -> > outputContentResult, errors, typeErrorCount + 1 > | None, Some error -> outputContentResult, error :: errors, > typeErrorCount > | None, None when typeErrorCount >= 1 -> > outputContentResult, errors, typeErrorCount + 1 > | _ -> outputContentResult, errors, typeErrorCount > ) > |> FSharp.Control.AsyncSeq.takeWhileInclusive (fun (outputContent, > errors, typeErrorCount) -> > trace > Verbose > (fun () -> $"Supervisor.buildFile / takeWhileInclusive / > outputContent:\n'{outputContent |> Option.map (SpiralSm.ellipsis_end 1500)}' / > errors: {errors |> serializeObj} / typeErrorCount: {typeErrorCount} / retry: > {retry} / path: {path}") > _locals > #if INTERACTIVE > let errorWait = 1 > #else > let errorWait = 1 > #endif > match outputContent, errors with > | None, [[]] when typeErrorCount > errorWait -> false > | _, [[ message, TypeErrors errors ]] -> > compilerEvent.Trigger (None, Some (message, TypeErrors > errors)) > trace Verbose (fun () -> $"Supervisor.buildFile / > takeWhileInclusive / TypeErrors trigger") _locals > false > | None, [[]] -> true > | _ -> false > ) > |> FSharp.Control.AsyncSeq.tryLast > // |> Async.withCancellationToken ct > |> Async.catch > |> Async.runWithTimeoutAsync timeout > |> Async.StartChild > > // do! Async.Sleep 60 > > let fullPathUri = fullPath |> SpiralFileSystem.normalize_path |> > SpiralFileSystem.new_file_uri > > trace Verbose (fun () -> $"Supervisor.buildFile / fullPathUri: > %A{fullPathUri}") (fun () -> "") > > // let fileOpenObj = {| FileOpen = {| uri = fullPathUri; spiText = code > |} |} > > // let! _fileOpenResult = fileOpenObj |> sendObj serverPort > let fileOpenArgs = {| uri = fullPathUri; spiText = code |} > let! _fileOpenResult = > server1.job_null (server1.supervisor *<+ SupervisorReq.FileOpen > fileOpenArgs) > |> Async.AwaitTask > |> Async.runWithTimeoutAsync 60000 > |> Async.map Option.get > trace Verbose (fun () -> $"Supervisor.buildFile / _fileOpenResult: > %A{_fileOpenResult}") (fun () -> "") > > // let! _fileOpenResult = fileOpenObj |> sendObj serverPort > > // do! Async.Sleep 60 > > let backendId = > match backend with > | Gleam -> "Gleam" > | Fsharp -> "Fsharp" > | Python -> "Python + Cuda" > | Cpp -> "Cpp + Cuda" > // let buildFileObj = {| BuildFile = {| uri = fullPathUri; backend = > backendId |} |} > > // let backend = Supervisor.Fsharp > let buildFileArgs = {| uri = fullPathUri; backend = backendId |} > let buildFileResultAsync = > server1.job_val (fun res -> server1.supervisor *<+ > SupervisorReq.BuildFile(buildFileArgs,res)) > |> Async.AwaitTask > |> Async.runWithTimeoutAsync timeout > |> Async.map Option.get > > let buildFileResultAsync = async { > let! buildFileResult = buildFileResultAsync > let buildFileResult = > if buildFileResult = "" || buildFileResult = null > then None > else buildFileResult |> SpiralSm.replace "\r\n" "\n" |> Some > trace Verbose (fun () -> $"Supervisor.buildFile / buildFileResult: > %A{buildFileResult}") (fun () -> "") > if buildFileResult.IsSome then > compilerEvent2.Trigger (buildFileResult, [[]], 0) > return buildFileResult, [[]], 0 > } > > let resultAsync = > outputChild > |> Async.map (fun x -> > trace Verbose (fun () -> $"Supervisor.buildFile / outputChild / > x: %A{x}") _locals > match x with > | Some (Ok (Some (outputCode, errors, typeErrorCount))) -> > let x = > match errors with > | [[ message, TypeErrors errors ]] -> > trace Verbose (fun () -> $"Supervisor.buildFile / > outputChild |> Async.map") _locals > compilerEvent2.Trigger (None, [[ message, TypeErrors > errors ]], 0) > trace Verbose (fun () -> $"Supervisor.buildFile / > outputChild |> Async.map") _locals > | _ -> () > outputCode, errors |> List.distinct |> List.rev, > typeErrorCount > | Some (Error ex) -> > trace Critical (fun () -> $"Supervisor.buildFile / error: > {ex |> SpiralSm.format_exception} / retry: {retry}") _locals > None, [[]], 0 > | _ -> None, [[]], 0 > ) > > trace Verbose (fun () -> $"Supervisor.buildFile / before result: > %A{()}") (fun () -> "") > > // let resultSeq = > // [[| buildFileResultAsync; resultAsync |]] > // |> FSharp.Control.AsyncSeq.ofSeqAsync > > > let buildFileResultSeq = [[| buildFileResultAsync |]] |> > FSharp.Control.AsyncSeq.ofSeqAsync > let resultSeq = [[| resultAsync |]] |> > FSharp.Control.AsyncSeq.ofSeqAsync > > let resultSeq = > [[ outputContentSeq2; buildFileResultSeq; resultSeq ]] > |> FSharp.Control.AsyncSeq.mergeAll > > let! buildFileResult, result, typeErrorCount = > resultSeq > // |> FSharp.Control.AsyncSeq.collect (Array.singleton >> > FSharp.Control.AsyncSeq.ofSeq) > |> FSharp.Control.AsyncSeq.collect (fun x -> > trace Verbose (fun () -> $"Supervisor.buildFile / ofSeqAsync / > x: %A{x}") _locals > match x with > | Some _, _, _ as x -> [[| x |]] > | _, _ :: _, _ as x -> [[| x |]] > | _ -> [[||]] > |> FSharp.Control.AsyncSeq.ofSeq > ) > |> FSharp.Control.AsyncSeq.tryFirst > |> Async.map Option.get > > trace Verbose (fun () -> $"Supervisor.buildFile / result: %A{result} / > buildFileResult: %A{buildFileResult} / typeErrorCount: {typeErrorCount}") (fun > () -> "") > > match buildFileResult with > // | None when typeErrorCount > 0 && retry = 0 -> > // trace Verbose (fun () -> $"Supervisor.buildFile / result: > {result} / retry: {retry} / typeErrorCount: {typeErrorCount} / fileDir: > {fileDir} / targetDir: {targetDir}") _locals > // return! loop (retry + 1) > | _ -> > let targetDir = workspaceRoot </> "target" > trace Verbose (fun () -> $"Supervisor.buildFile / retry: {retry} / > typeErrorCount: {typeErrorCount} / fileDir: {fileDir} / targetDir: {targetDir}") > _locals > if fileDir |> SpiralSm.starts_with targetDir then > let fileDirUri = fileDir |> SpiralFileSystem.normalize_path |> > SpiralFileSystem.new_file_uri > > // let fileDeleteObj = {| FileDelete = {| uris = [[| fileDirUri > |]] |} |} > // let! _fileDeleteResult = fileDeleteObj |> sendObj serverPort > let fileDeleteArgs = {| uris = [[| fileDirUri |]] |} > let! _fileDeleteResult = > server1.job_null (server1.supervisor *<+ > SupervisorReq.FileDelete fileDeleteArgs) > |> Async.AwaitTask > () > > let outputPath = fileDir </> outputFileName > return outputPath, buildFileResult, result > } > loop 0 > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### SpiralInput > > ── fsharp ────────────────────────────────────────────────────────────────────── > type SpiralInput = > | Spi of string * string option > | Spir of string > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### persistCode > > ── fsharp ────────────────────────────────────────────────────────────────────── > let persistCode (input: {| backend : Backend option; input: SpiralInput; > packages: string [[]] |}) = async { > let targetDir = workspaceRoot </> "target/spiral_Eval" > > let packagesDir = targetDir </> "packages" > > let hashHex = $"%A{input.backend}%A{input.input}" |> SpiralCrypto.hash_text > > let packageDir = packagesDir </> hashHex > > let packageDir = > if input.backend = Some Gleam > then packageDir </> "src" > else packageDir > > packageDir |> System.IO.Directory.CreateDirectory |> ignore > > let moduleName = "main" > > let spirModule, spiModule = > match input.input with > | Spi (_spi, Some _spir) -> true, true > | Spi (_spi, None) -> false, true > | Spir _spir -> true, false > |> fun (spir, spi) -> > (if spir then $"{moduleName}_real*-" else ""), > if spi then moduleName else "" > > let libLinkTargetPath = workspaceRoot </> "../spiral/lib/spiral" > let libLinkPath = packageDir </> "spiral" > > let packagesModule = > input.packages > |> Array.map (fun package -> > let path = workspaceRoot </> package > let packageName = path |> System.IO.Path.GetFileName > let libLinkPath = packageDir </> packageName > libLinkPath |> SpiralFileSystem.link_directory path > $"{packageName}-" > ) > |> String.concat "\n " > > let packageDir' = > if input.packages |> Array.isEmpty > then workspaceRoot </> "../spiral/lib" > else > libLinkPath |> SpiralFileSystem.link_directory libLinkTargetPath > packageDir > > let spiprojPath = packageDir </> "package.spiproj" > let spiprojCode = > $"""packageDir: {packageDir'} > packages: > |core- > spiral- > {packagesModule} > modules: > {spirModule} > {spiModule} > """ > do! spiprojCode |> SpiralFileSystem.write_all_text_exists spiprojPath > > let spirPath = packageDir </> $"{moduleName}_real.spir" > let spiPath = packageDir </> $"{moduleName}.spi" > > let spirCode, spiCode = > match input.input with > | Spi (spi, Some spir) -> Some spir, Some spi > | Spi (spi, None) -> None, Some spi > | Spir spir -> Some spir, None > > match spirCode with > | Some spir -> do! spir |> SpiralFileSystem.write_all_text_exists spirPath > | None -> () > match spiCode with > | Some spi -> do! spi |> SpiralFileSystem.write_all_text_exists spiPath > | None -> () > > let spiralPath = > match input.input with > | Spi _ -> spiPath > | Spir _ -> spirPath > match input.backend with > | None -> return spiralPath, None > | Some backend -> > let outputFileName = > let fileName = > match input.input with > | Spi _ -> moduleName > | Spir _ -> $"{moduleName}_real" > match backend with > | Gleam -> $"{fileName}.gleam" > | Fsharp -> $"{fileName}.fsx" > | Python -> $"{fileName}.py" > | Cpp -> $"{fileName}.cpp" > let outputPath = packageDir </> outputFileName > if outputPath |> System.IO.File.Exists |> not > then return spiralPath, None > else > let! oldCode = spiralPath |> SpiralFileSystem.read_all_text_async > if oldCode <> (spiCode |> Option.defaultValue (spirCode |> > Option.defaultValue "")) > then return spiralPath, None > else > let! outputCode = outputPath |> > SpiralFileSystem.read_all_text_async > return spiralPath, Some (outputPath, outputCode |> > SpiralSm.replace "\r\n" "\n") > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### buildCode > > ── fsharp ────────────────────────────────────────────────────────────────────── > let buildCode backend packages isCache timeout cancellationToken input = async { > let! mainPath, outputCache = > persistCode {| input = input; backend = Some backend; packages = > packages |} > match outputCache with > | Some (outputPath, outputCode) when isCache -> return mainPath, > (outputPath, Some outputCode), [[]] > | _ -> > let! outputPath, outputCode, errors = mainPath |> buildFile backend > timeout None cancellationToken > return mainPath, (outputPath, outputCode), errors > } > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > SpiralTrace.TraceLevel.US0_0 |> set_trace_level > """inl app () = > console.write_line "text" > 1i32 > > inl main () = > app > |> dyn > |> ignore > """ > |> fun code -> Spi (code, None) > |> buildCode Fsharp [[||]] false 20000 None > |> Async.runWithTimeout 21000 > |> Option.map (fun (_, (_, outputContent), errors) -> outputContent, errors |> > List.map fst) > |> _assertEqual ( > Some ( > Some """let rec closure1 () () : unit = > let v0 : (string -> unit) = System.Console.WriteLine > let v1 : string = "text" > v0 v1 > and closure0 () () : int32 = > let v3 : unit = () > let v4 : (unit -> unit) = closure1() > let v5 : unit = (fun () -> v4 (); v3) () > 1 > let v0 : (unit -> int32) = closure0() > () > """, > [[]] > ) > ) > > ── [ 2.75s - stdout ] ────────────────────────────────────────────────────────── > │ 00:00:55 v #1 Supervisor.buildFile / fullPathUri: > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/22ccd043 > 17d5605c65f81c7f777766f357e85dc69f2d6d04b9dc60aebd08a0d6/main.spi" > │ 00:00:55 v #2 Supervisor.buildFile / _fileOpenResult: > <null> > │ 00:00:55 v #3 Supervisor.buildFile / before result: () > │ 00:00:55 v #4 Supervisor.buildFile / takeWhileInclusive > / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/22ccd04317d5605c > 65f81c7f777766f357e85dc69f2d6d04b9dc60aebd08a0d6/main.spi > │ 00:00:55 v #7 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/22ccd04317d5605c > 65f81c7f777766f357e85dc69f2d6d04b9dc60aebd08a0d6/main.spi' > │ 00:00:55 v #8 Supervisor.buildFile / takeWhileInclusive > / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/22ccd04317d5605c > 65f81c7f777766f357e85dc69f2d6d04b9dc60aebd08a0d6/main.spi > │ 00:00:56 v #540 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/22ccd04317d5605c > 65f81c7f777766f357e85dc69f2d6d04b9dc60aebd08a0d6/main.spi' > │ 00:00:56 v #541 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/22ccd04317d5605c > 65f81c7f777766f357e85dc69f2d6d04b9dc60aebd08a0d6/main.spi > │ 00:00:56 v #849 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/22ccd04317d5605c > 65f81c7f777766f357e85dc69f2d6d04b9dc60aebd08a0d6/main.spi' > │ 00:00:56 v #850 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/22ccd04317d5605c > 65f81c7f777766f357e85dc69f2d6d04b9dc60aebd08a0d6/main.spi > │ 00:00:57 v #1137 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/22ccd04317d5605c > 65f81c7f777766f357e85dc69f2d6d04b9dc60aebd08a0d6/main.spi' > │ 00:00:57 v #1138 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/22ccd04317d5605c > 65f81c7f777766f357e85dc69f2d6d04b9dc60aebd08a0d6/main.spi > │ 00:00:57 v #1315 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/22ccd04317d5605c > 65f81c7f777766f357e85dc69f2d6d04b9dc60aebd08a0d6/main.spi' > │ 00:00:57 v #1316 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/22ccd04317d5605c > 65f81c7f777766f357e85dc69f2d6d04b9dc60aebd08a0d6/main.spi > │ 00:00:58 v #1326 Supervisor.buildFile / buildFileResult: > Some > │ "let rec closure1 () () : unit = > │ let v0 : (string -> unit) = System.Console.WriteLine > │ let v1 : string = "text" > │ v0 v1 > │ and closure0 () () : int32 = > │ let v3 : unit = () > │ let v4 : (unit -> unit) = closure1() > │ let v5 : unit = (fun () -> v4 (); v3) () > │ 1 > │ let v0 : (unit -> int32) = closure0() > │ () > │ " > │ 00:00:58 v #1327 Supervisor.buildFile / > outputContentSeq2 unfoldAsync / msg: (Some > │ "let rec closure1 () () : unit = > │ let v0 : (string -> unit) = System.Console.WriteLine > │ let v1 : string = "text" > │ v0 v1 > │ and closure0 () () : int32 = > │ let v3 : unit = () > │ let v4 : (unit -> unit) = closure1() > │ let v5 : unit = (fun () -> v4 (); v3) () > │ 1 > │ let v0 : (unit -> int32) = closure0() > │ () > │ ", > │ [], 0) > │ 00:00:58 v #1328 Supervisor.buildFile / ofSeqAsync / x: > (Some > │ "let rec closure1 () () : unit = > │ let v0 : (string -> unit) = System.Console.WriteLine > │ let v1 : string = "text" > │ v0 v1 > │ and closure0 () () : int32 = > │ let v3 : unit = () > │ let v4 : (unit -> unit) = closure1() > │ let v5 : unit = (fun () -> v4 (); v3) () > │ 1 > │ let v0 : (unit -> int32) = closure0() > │ () > │ ", > │ [], 0) > │ 00:00:58 v #1329 Supervisor.buildFile / result: [] / > buildFileResult: Some > │ "let rec closure1 () () : unit = > │ let v0 : (string -> unit) = System.Console.WriteLine > │ let v1 : string = "text" > │ v0 v1 > │ and closure0 () () : int32 = > │ let v3 : unit = () > │ let v4 : (unit -> unit) = closure1() > │ let v5 : unit = (fun () -> v4 (); v3) () > │ 1 > │ let v0 : (unit -> int32) = closure0() > │ () > │ " / typeErrorCount: 0 > │ 00:00:58 v #1330 Supervisor.buildFile / retry: 0 / > typeErrorCount: 0 / fileDir: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/22ccd04317d5605c > 65f81c7f777766f357e85dc69f2d6d04b9dc60aebd08a0d6 / targetDir: > /home/runner/work/polyglot/polyglot/target > │ Some > │ (Some > │ "let rec closure1 () () : unit = > │ let v0 : (string -> unit) = System.Console.WriteLine > │ let v1 : string = "text" > │ v0 v1 > │ and closure0 () () : int32 = > │ let v3 : unit = () > │ let v4 : (unit -> unit) = closure1() > │ let v5 : unit = (fun () -> v4 (); v3) () > │ 1 > │ let v0 : (unit -> int32) = closure0() > │ () > │ ", > │ []) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > """ > inl init_series start end inc = > inl total : f64 = conv ((end - start) / inc) + 1 > listm.init total (conv >> (*) inc >> (+) start) : list f64 > > type integration = (f64 -> f64) -> f64 -> f64 -> f64 > > inl integral dt : integration = > fun f a b => > init_series (a + dt / 2) (b - dt / 2) dt > |> listm.map (f >> (*) dt) > |> listm.fold (+) 0 > > inl main () = > integral 0.1 (fun x => x ** 2) 0 1 > """ > |> fun code -> Spi (code, None) > |> buildCode Fsharp [[||]] false 10000 None > |> Async.runWithTimeout 11000 > |> Option.map (fun (_, (_, outputContent), errors) -> outputContent, errors |> > List.map fst) > |> _assertEqual ( > Some ( > Some "0.3325000000000001\n", > [[]] > ) > ) > > ── [ 344.05ms - stdout ] ─────────────────────────────────────────────────────── > │ 00:00:58 v #1349 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/c127414de2a2a92d > 9fd93ea5a8e9312a6aad9129ffd3cbd56ac7f0327106f1db/main.spi > │ 00:00:58 v #1350 Supervisor.buildFile / fullPathUri: > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/c127414d > e2a2a92d9fd93ea5a8e9312a6aad9129ffd3cbd56ac7f0327106f1db/main.spi" > │ 00:00:58 v #1351 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/c127414de2a2a92d > 9fd93ea5a8e9312a6aad9129ffd3cbd56ac7f0327106f1db/main.spi' > │ 00:00:58 v #1352 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/c127414de2a2a92d > 9fd93ea5a8e9312a6aad9129ffd3cbd56ac7f0327106f1db/main.spi > │ 00:00:58 v #1353 Supervisor.buildFile / _fileOpenResult: > <null> > │ 00:00:58 v #1354 Supervisor.buildFile / before result: > () > │ 00:00:58 v #1590 Supervisor.buildFile / buildFileResult: > Some "0.3325000000000001 > │ " > │ 00:00:58 v #1591 Supervisor.buildFile / > outputContentSeq2 unfoldAsync / msg: (Some "0.3325000000000001 > │ ", [], 0) > │ 00:00:58 v #1592 Supervisor.buildFile / ofSeqAsync / x: > (Some "0.3325000000000001 > │ ", [], 0) > │ 00:00:58 v #1593 Supervisor.buildFile / result: [] / > buildFileResult: Some "0.3325000000000001 > │ " / typeErrorCount: 0 > │ 00:00:58 v #1594 Supervisor.buildFile / retry: 0 / > typeErrorCount: 0 / fileDir: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/c127414de2a2a92d > 9fd93ea5a8e9312a6aad9129ffd3cbd56ac7f0327106f1db / targetDir: > /home/runner/work/polyglot/polyglot/target > │ Some (Some "0.3325000000000001 > │ ", []) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > """ > inl init_series start end inc = > inl total : f64 = conv ((end - start) / inc) + 1 > listm.init total (conv >> (*) inc >> (+) start) : list f64 > > type integration = (f64 -> f64) -> f64 -> f64 -> f64 > > inl integral dt : integration = > fun f a b => > init_series (a + dt / 2) (b - dt / 2) dt > |> listm.map (f >> (*) dt) > |> listm.fold (+) 0 > > inl main () = > integral 0.1 (fun x => x ** 2) 0 1 > """ > |> fun code -> Spi (code, None) > |> buildCode Python [[||]] false 10000 None > |> Async.runWithTimeout 11000 > |> Option.map (fun (_, (_, outputContent), errors) -> outputContent, errors |> > List.map fst) > |> _assertEqual ( > Some ( > Some @"kernels_aux = r"""""" > // The types of these two will be replaced during compilation by the Spiral code > generator. > // It matches on `using default_int = ` and `;` with the inner part being > replaced so the form should be kept as is. > // The two statements need to begin at the start of a line. > using default_int = int; > using default_uint = unsigned int; > > #ifndef __NVRTC__ > // NVRTC has these includes by default so they need to be left out if it is used > as the compiler. > #include <new> > #include <assert.h> > #include <stdio.h> > #endif > > // For error checking on the host. > #define gpuErrchk(ans) { gpuAssert((ans), __FILE__, __LINE__); } > template <typename T> inline __device__ void destroy(T& obj) { obj.~T(); } > inline void gpuAssert(cudaError error, const char *file, int line, bool > abort=true) { > if (error != cudaSuccess) { > fprintf(stderr, ""GPUassert: %s %s %d\n"", cudaGetErrorString(error), > file, line); > if (abort) exit(error); > } > } > > template <typename el> > struct sptr // Shared pointer for the Spiral datatypes. They have to have the > refc field inside them to work. > { > el* base; > > __device__ sptr() : base(nullptr) {} > __device__ sptr(el* ptr) : base(ptr) { this->base->refc++; } > > __device__ ~sptr() > { > if (this->base != nullptr && --this->base->refc == 0) > { > delete this->base; > this->base = nullptr; > } > } > > __device__ sptr(sptr& x) > { > this->base = x.base; > this->base->refc++; > } > > __device__ sptr(sptr&& x) > { > this->base = x.base; > x.base = nullptr; > } > > __device__ sptr& operator=(sptr& x) > { > if (this->base != x.base) > { > delete this->base; > this->base = x.base; > this->base->refc++; > } > return *this; > } > > __device__ sptr& operator=(sptr&& x) > { > if (this->base != x.base) > { > delete this->base; > this->base = x.base; > x.base = nullptr; > } > return *this; > } > }; > > template <typename el> > struct csptr : public sptr<el> > { // Shared pointer for closures specifically. > using sptr<el>::sptr; > template <typename... Args> > __device__ auto operator()(Args... args) -> > decltype(this->base->operator()(args...)) > { > return this->base->operator()(args...); > } > }; > > template <typename el, default_int max_length> > struct static_array > { > el ptr[[max_length]]; > __device__ el& operator[[]](default_int i) { > assert(""The index has to be in range."" && 0 <= i && i < max_length); > return this->ptr[[i]]; > } > }; > > template <typename el, default_int max_length> > struct static_array_list > { > default_int length{ 0 }; > el ptr[[max_length]]; > > __device__ el& operator[[]](default_int i) { > assert(""The index has to be in range."" && 0 <= i && i < this->length); > return this->ptr[[i]]; > } > __device__ void push(el& x) { > ptr[[this->length++]] = x; > assert(""The array after pushing should not be greater than max > length."" && this->length <= max_length); > } > __device__ void push(el&& x) { > ptr[[this->length++]] = std::move(x); > assert(""The array after pushing should not be greater than max > length."" && this->length <= max_length); > } > __device__ el pop() { > assert(""The array before popping should be greater than 0."" && 0 < > this->length); > auto x = ptr[[--this->length]]; > ptr[[this->length]].~el(); > new (&ptr[[this->length]]) el(); > return x; > } > // Should be used only during initialization. > __device__ void unsafe_set_length(default_int i) { > assert(""The new length should be in range."" && 0 <= i && i <= > max_length); > this->length = i; > } > }; > > template <typename el, default_int max_length> > struct dynamic_array_base > { > int refc{ 0 }; > el* ptr; > > __device__ dynamic_array_base() : ptr(new el[[max_length]]) {} > __device__ ~dynamic_array_base() { delete[[]] this->ptr; } > > __device__ el& operator[[]](default_int i) { > assert(""The index has to be in range."" && 0 <= i && i < this->length); > return this->ptr[[i]]; > } > }; > > template <typename el, default_int max_length> > struct dynamic_array > { > sptr<dynamic_array_base<el, max_length>> ptr; > > __device__ dynamic_array() = default; > __device__ dynamic_array(bool t) : ptr(new dynamic_array_base<el, > max_length>()) {} > __device__ el& operator[[]](default_int i) { > return this->ptr.base->operator[[]](i); > } > }; > > template <typename el, default_int max_length> > struct dynamic_array_list_base > { > int refc{ 0 }; > default_int length{ 0 }; > el* ptr; > > __device__ dynamic_array_list_base() : ptr(new el[[max_length]]) {} > __device__ dynamic_array_list_base(default_int l) : ptr(new > el[[max_length]]) { this->unsafe_set_length(l); } > __device__ ~dynamic_array_list_base() { delete[[]] this->ptr; } > > __device__ el& operator[[]](default_int i) { > assert(""The index has to be in range."" && 0 <= i && i < this->length); > return this->ptr[[i]]; > } > __device__ void push(el& x) { > ptr[[this->length++]] = x; > assert(""The array after pushing should not be greater than max > length."" && this->length <= max_length); > } > __device__ void push(el&& x) { > ptr[[this->length++]] = std::move(x); > assert(""The array after pushing should not be greater than max > length."" && this->length <= max_length); > } > __device__ el pop() { > assert(""The array before popping should be greater than 0."" && 0 < > this->length); > auto x = ptr[[--this->length]]; > ptr[[this->length]].~el(); > new (&ptr[[this->length]]) el(); > return x; > } > // Should be used only during initialization. > __device__ void unsafe_set_length(default_int i) { > assert(""The new length should be in range."" && 0 <= i && i <= > max_length); > this->length = i; > } > }; > > template <typename el, default_int max_length> > struct dynamic_array_list > { > sptr<dynamic_array_list_base<el, max_length>> ptr; > > __device__ dynamic_array_list() = default; > __device__ dynamic_array_list(default_int l) : ptr(new > dynamic_array_list_base<el, max_length>(l)) {} > > __device__ el& operator[[]](default_int i) { > return this->ptr.base->operator[[]](i); > } > __device__ void push(el& x) { > this->ptr.base->push(x); > } > __device__ void push(el&& x) { > this->ptr.base->push(std::move(x)); > } > __device__ el pop() { > return this->ptr.base->pop(); > } > // Should be used only during initialization. > __device__ void unsafe_set_length(default_int i) { > this->ptr.base->unsafe_set_length(i); > } > __device__ default_int length_() { > return this->ptr.base->length; > } > }; > """""" > class static_array(): > def __init__(self, length): > self.ptr = [[]] > for _ in range(length): > self.ptr.append(None) > > def __getitem__(self, index): > assert 0 <= index < len(self.ptr), ""The get index needs to be in > range."" > return self.ptr[[index]] > > def __setitem__(self, index, value): > assert 0 <= index < len(self.ptr), ""The set index needs to be in > range."" > self.ptr[[index]] = value > > class static_array_list(static_array): > def __init__(self, length): > super().__init__(length) > self.length = 0 > > def __getitem__(self, index): > assert 0 <= index < self.length, ""The get index needs to be in range."" > return self.ptr[[index]] > > def __setitem__(self, index, value): > assert 0 <= index < self.length, ""The set index needs to be in range."" > self.ptr[[index]] = value > > def push(self,value): > assert (self.length < len(self.ptr)), ""The length before pushing has to > be less than the maximum length of the array."" > self.ptr[[self.length]] = value > self.length += 1 > > def pop(self): > assert (0 < self.length), ""The length before popping has to be greater > than 0."" > self.length -= 1 > return self.ptr[[self.length]] > > def unsafe_set_length(self,i): > assert 0 <= i <= len(self.ptr), ""The new length has to be in range."" > self.length = i > > class dynamic_array(static_array): > pass > > class dynamic_array_list(static_array_list): > def length_(self): return self.length > > > kernels_main = r"""""" > """""" > from main_auto import * > kernels = kernels_aux + kernels_main > import cupy as cp > import numpy as np > from dataclasses import dataclass > from typing import NamedTuple, Union, Callable, Tuple > i8 = int; i16 = int; i32 = int; i64 = int; u8 = int; u16 = int; u32 = int; u64 = > int; f32 = float; f64 = float; char = str; string = str > cuda = False > > > # fwd_dcls > # types > # functions > # main_defs > def main_body(): > return 0.3325000000000001 > > def main(): > r = main_body() > if cuda: cp.cuda.get_current_stream().synchronize() # This line is here so > the `__trap()` calls on the kernel aren't missed. > return r > > if __name__ == '__main__': result = main(); None if result is None else > print(result) > ", > [[]] > ) > ) > > ── [ 409.32ms - stdout ] ─────────────────────────────────────────────────────── > │ 00:00:58 v #1611 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/a4224c9f3d674d70 > fd56b6ecd3ae8c8ff3178a7124ae34f592336fef263568ea/main.spi > │ 00:00:58 v #1612 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/a4224c9f3d674d70 > fd56b6ecd3ae8c8ff3178a7124ae34f592336fef263568ea/main.spi' > │ 00:00:58 v #1613 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/a4224c9f3d674d70 > fd56b6ecd3ae8c8ff3178a7124ae34f592336fef263568ea/main.spi > │ 00:00:58 v #1614 Supervisor.buildFile / fullPathUri: > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/a4224c9f > 3d674d70fd56b6ecd3ae8c8ff3178a7124ae34f592336fef263568ea/main.spi" > │ 00:00:58 v #1615 Supervisor.buildFile / _fileOpenResult: > <null> > │ 00:00:58 v #1616 Supervisor.buildFile / before result: > () > │ 00:00:59 v #1854 Supervisor.buildFile / buildFileResult: > Some > │ "kernels_aux = r""" > │ // The types of these two will be replaced during compilation > by the Spiral code generator. > │ // It matches on `using default_int = ` and `;` with the > inner part being replaced so the form should be kept as is. > │ // The two statements need to begin at the start of a line. > │ using default_int = int; > │ using default_uint = unsigned int; > │ > │ #ifndef __NVRTC__ > │ // NVRTC has these includes by default so they need to be > left out if it is used as the compiler. > │ #include <new> > │ #include <assert.h> > │ #include <stdio.h> > │ #endif > │ > │ // For error checking on the host. > │ #define gpuErrchk(ans) { gpuAssert((ans), __FILE__, > __LINE__); } > │ template <typename T> inline __device__ void destroy(T& obj) > { obj.~T(); } > │ inline void gpuAssert(cudaError error, const char *file, int > line, bool abort=true) { > │ if (error != cudaSuccess) { > │ fprintf(stderr, "GPUassert: %s %s %d\n", > cudaGetErrorString(error), file, line); > │ if (abort) exit(error); > │ } > │ } > │ > │ template <typename el> > │ struct sptr // Shared pointer for the Spiral datatypes. They > have to have the refc field inside them to work. > │ { > │ el* base; > │ > │ __device__ sptr() : base(nullptr) {} > │ __device__ sptr(el* ptr) : base(ptr) { > this->base->refc++; } > │ > │ __device__ ~sptr() > │ { > │ if (this->base != nullptr && --this->base->refc == 0) > │ { > │ delete this->base; > │ this->base = nullptr; > │ } > │ } > │ > │ __device__ sptr(sptr& x) > │ { > │ this->base = x.base; > │ this->base->refc++; > │ } > │ > │ __device__ sptr(sptr&& x) > │ { > │ this->base = x.base; > │ x.base = nullptr; > │ } > │ > │ __device__ sptr& operator=(sptr& x) > │ { > │ if (this->base != x.base) > │ { > │ delete this->base; > │ this->base = x.base; > │ this->base->refc++; > │ } > │ return *this; > │ } > │ > │ __device__ sptr& operator=(sptr&& x) > │ { > │ if (this->base != x.base) > │ { > │ delete this->base; > │ this->base = x.base; > │ x.base = nullptr; > │ } > │ return *this; > │ } > │ }; > │ > │ template <typename el> > │ struct csptr : public sptr<el> > │ { // Shared pointer for closures specifically. > │ using sptr<el>::sptr; > │ template <typename... Args> > │ __device__ auto operator()(Args... args) -> > decltype(this->base->operator()(args...)) > │ { > │ return this->base->operator()(args...); > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct static_array > │ { > │ el ptr[max_length]; > │ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < max_length); > │ return this->ptr[i]; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct static_array_list > │ { > │ default_int length{ 0 }; > │ el ptr[max_length]; > │ > │ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ __device__ void push(el& x) { > │ ptr[this->length++] = x; > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __device__ void push(el&& x) { > │ ptr[this->length++] = std::move(x); > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __device__ el pop() { > │ assert("The array before popping should be greater > than 0." && 0 < this->length); > │ auto x = ptr[--this->length]; > │ ptr[this->length].~el(); > │ new (&ptr[this->length]) el(); > │ return x; > │ } > │ // Should be used only during initialization. > │ __device__ void unsafe_set_length(default_int i) { > │ assert("The new length should be in range." && 0 <= i > && i <= max_length); > │ this->length = i; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_base > │ { > │ int refc{ 0 }; > │ el* ptr; > │ > │ __device__ dynamic_array_base() : ptr(new el[max_length]) > {} > │ __device__ ~dynamic_array_base() { delete[] this->ptr; } > │ > │ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array > │ { > │ sptr<dynamic_array_base<el, max_length>> ptr; > │ > │ __device__ dynamic_array() = default; > │ __device__ dynamic_array(bool t) : ptr(new > dynamic_array_base<el, max_length>()) {} > │ __device__ el& operator[](default_int i) { > │ return this->ptr.base->operator[](i); > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_list_base > │ { > │ int refc{ 0 }; > │ default_int length{ 0 }; > │ el* ptr; > │ > │ __device__ dynamic_array_list_base() : ptr(new > el[max_length]) {} > │ __device__ dynamic_array_list_base(default_int l) : > ptr(new el[max_length]) { this->unsafe_set_length(l); } > │ __device__ ~dynamic_array_list_base() { delete[] > this->ptr; } > │ > │ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ __device__ void push(el& x) { > │ ptr[this->length++] = x; > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __device__ void push(el&& x) { > │ ptr[this->length++] = std::move(x); > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __device__ el pop() { > │ assert("The array before popping should be greater > than 0." && 0 < this->length); > │ auto x = ptr[--this->length]; > │ ptr[this->length].~el(); > │ new (&ptr[this->length]) el(); > │ return x; > │ } > │ // Should be used only during initialization. > │ __device__ void unsafe_set_length(default_int i) { > │ assert("The new length should be in range." && 0 <= i > && i <= max_length); > │ this->length = i; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_list > │ { > │ sptr<dynamic_array_list_base<el, max_length>> ptr; > │ > │ __device__ dynamic_array_list() = default; > │ __device__ dynamic_array_list(default_int l) : ptr(new > dynamic_array_list_base<el, max_length>(l)) {} > │ > │ __device__ el& operator[](default_int i) { > │ return this->ptr.base->operator[](i); > │ } > │ __device__ void push(el& x) { > │ this->ptr.base->push(x); > │ } > │ __device__ void push(el&& x) { > │ this->ptr.base->push(std::move(x)); > │ } > │ __device__ el pop() { > │ return this->ptr.base->pop(); > │ } > │ // Should be used only during initialization. > │ __device__ void unsafe_set_length(default_int i) { > │ this->ptr.base->unsafe_set_length(i); > │ } > │ __device__ default_int length_() { > │ return this->ptr.base->length; > │ } > │ }; > │ """ > │ class static_array(): > │ def __init__(self, length): > │ self.ptr = [] > │ for _ in range(length): > │ self.ptr.append(None) > │ > │ def __getitem__(self, index): > │ assert 0 <= index < len(self.ptr), "The get index > needs to be in range." > │ return self.ptr[index] > │ > │ def __setitem__(self, index, value): > │ assert 0 <= index < len(self.ptr), "The set index > needs to be in range." > │ self.ptr[index] = value > │ > │ class static_array_list(static_array): > │ def __init__(self, length): > │ super().__init__(length) > │ self.length = 0 > │ > │ def __getitem__(self, index): > │ assert 0 <= index < self.length, "The get index needs > to be in range." > │ return self.ptr[index] > │ > │ def __setitem__(self, index, value): > │ assert 0 <= index < self.length, "The set index needs > to be in range." > │ self.ptr[index] = value > │ > │ def push(self,value): > │ assert (self.length < len(self.ptr)), "The length > before pushing has to be less than the maximum length of the array." > │ self.ptr[self.length] = value > │ self.length += 1 > │ > │ def pop(self): > │ assert (0 < self.length), "The length before popping > has to be greater than 0." > │ self.length -= 1 > │ return self.ptr[self.length] > │ > │ def unsafe_set_length(self,i): > │ assert 0 <= i <= len(self.ptr), "The new length has > to be in range." > │ self.length = i > │ > │ class dynamic_array(static_array): > │ pass > │ > │ class dynamic_array_list(static_array_list): > │ def length_(self): return self.length > │ > │ > │ kernels_main = r""" > │ """ > │ from main_auto import * > │ kernels = kernels_aux + kernels_main > │ import cupy as cp > │ import numpy as np > │ from dataclasses import dataclass > │ from typing import NamedTuple, Union, Callable, Tuple > │ i8 = int; i16 = int; i32 = int; i64 = int; u8 = int; u16 = > int; u32 = int; u64 = int; f32 = float; f64 = float; char = str; string = str > │ cuda = False > │ > │ > │ # fwd_dcls > │ # types > │ # functions > │ # main_defs > │ def main_body(): > │ return 0.3325000000000001 > │ > │ def main(): > │ r = main_body() > │ if cuda: cp.cuda.get_current_stream().synchronize() # > This line is here so the `__trap()` calls on the kernel aren't missed. > │ return r > │ > │ if __name__ == '__main__': result = main(); None if result is > None else print(result) > │ " > │ 00:00:59 v #1855 Supervisor.buildFile / > outputContentSeq2 unfoldAsync / msg: (Some > │ "kernels_aux = r""" > │ // The types of these two will be replaced during compilation > by the Spiral code generator. > │ // It matches on `using default_int = ` and `;` with the > inner part being replaced so the form should be kept as is. > │ // The two statements need to begin at the start of a line. > │ using default_int = int; > │ using default_uint = unsigned int; > │ > │ #ifndef __NVRTC__ > │ // NVRTC has these includes by default so they need to be > left out if it is used as the compiler. > │ #include <new> > │ #include <assert.h> > │ #include <stdio.h> > │ #endif > │ > │ // For error checking on the host. > │ #define gpuErrchk(ans) { gpuAssert((ans), __FILE__, > __LINE__); } > │ template <typename T> inline __device__ void destroy(T& obj) > { obj.~T(); } > │ inline void gpuAssert(cudaError error, const char *file, int > line, bool abort=true) { > │ if (error != cudaSuccess) { > │ fprintf(stderr, "GPUassert: %s %s %d\n", > cudaGetErrorString(error), file, line); > │ if (abort) exit(error); > │ } > │ } > │ > │ template <typename el> > │ struct sptr // Shared pointer for the Spiral datatypes. They > have to have the refc field inside them to work. > │ { > │ el* base; > │ > │ __device__ sptr() : base(nullptr) {} > │ __device__ sptr(el* ptr) : base(ptr) { > this->base->refc++; } > │ > │ __device__ ~sptr() > │ { > │ if (this->base != nullptr && --this->base->refc == 0) > │ { > │ delete this->base; > │ this->base = nullptr; > │ } > │ } > │ > │ __device__ sptr(sptr& x) > │ { > │ this->base = x.base; > │ this->base->refc++; > │ } > │ > │ __device__ sptr(sptr&& x) > │ { > │ this->base = x.base; > │ x.base = nullptr; > │ } > │ > │ __device__ sptr& operator=(sptr& x) > │ { > │ if (this->base != x.base) > │ { > │ delete this->base; > │ this->base = x.base; > │ this->base->refc++; > │ } > │ return *this; > │ } > │ > │ __device__ sptr& operator=(sptr&& x) > │ { > │ if (this->base != x.base) > │ { > │ delete this->base; > │ this->base = x.base; > │ x.base = nullptr; > │ } > │ return *this; > │ } > │ }; > │ > │ template <typename el> > │ struct csptr : public sptr<el> > │ { // Shared pointer for closures specifically. > │ using sptr<el>::sptr; > │ template <typename... Args> > │ __device__ auto operator()(Args... args) -> > decltype(this->base->operator()(args...)) > │ { > │ return this->base->operator()(args...); > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct static_array > │ { > │ el ptr[max_length]; > │ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < max_length); > │ return this->ptr[i]; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct static_array_list > │ { > │ default_int length{ 0 }; > │ el ptr[max_length]; > │ > │ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ __device__ void push(el& x) { > │ ptr[this->length++] = x; > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __device__ void push(el&& x) { > │ ptr[this->length++] = std::move(x); > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __device__ el pop() { > │ assert("The array before popping should be greater > than 0." && 0 < this->length); > │ auto x = ptr[--this->length]; > │ ptr[this->length].~el(); > │ new (&ptr[this->length]) el(); > │ return x; > │ } > │ // Should be used only during initialization. > │ __device__ void unsafe_set_length(default_int i) { > │ assert("The new length should be in range." && 0 <= i > && i <= max_length); > │ this->length = i; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_base > │ { > │ int refc{ 0 }; > │ el* ptr; > │ > │ __device__ dynamic_array_base() : ptr(new el[max_length]) > {} > │ __device__ ~dynamic_array_base() { delete[] this->ptr; } > │ > │ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array > │ { > │ sptr<dynamic_array_base<el, max_length>> ptr; > │ > │ __device__ dynamic_array() = default; > │ __device__ dynamic_array(bool t) : ptr(new > dynamic_array_base<el, max_length>()) {} > │ __device__ el& operator[](default_int i) { > │ return this->ptr.base->operator[](i); > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_list_base > │ { > │ int refc{ 0 }; > │ default_int length{ 0 }; > │ el* ptr; > │ > │ __device__ dynamic_array_list_base() : ptr(new > el[max_length]) {} > │ __device__ dynamic_array_list_base(default_int l) : > ptr(new el[max_length]) { this->unsafe_set_length(l); } > │ __device__ ~dynamic_array_list_base() { delete[] > this->ptr; } > │ > │ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ __device__ void push(el& x) { > │ ptr[this->length++] = x; > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __device__ void push(el&& x) { > │ ptr[this->length++] = std::move(x); > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __device__ el pop() { > │ assert("The array before popping should be greater > than 0." && 0 < this->length); > │ auto x = ptr[--this->length]; > │ ptr[this->length].~el(); > │ new (&ptr[this->length]) el(); > │ return x; > │ } > │ // Should be used only during initialization. > │ __device__ void unsafe_set_length(default_int i) { > │ assert("The new length should be in range." && 0 <= i > && i <= max_length); > │ this->length = i; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_list > │ { > │ sptr<dynamic_array_list_base<el, max_length>> ptr; > │ > │ __device__ dynamic_array_list() = default; > │ __device__ dynamic_array_list(default_int l) : ptr(new > dynamic_array_list_base<el, max_length>(l)) {} > │ > │ __device__ el& operator[](default_int i) { > │ return this->ptr.base->operator[](i); > │ } > │ __device__ void push(el& x) { > │ this->ptr.base->push(x); > │ } > │ __device__ void push(el&& x) { > │ this->ptr.base->push(std::move(x)); > │ } > │ __device__ el pop() { > │ return this->ptr.base->pop(); > │ } > │ // Should be used only during initialization. > │ __device__ void unsafe_set_length(default_int i) { > │ this->ptr.base->unsafe_set_length(i); > │ } > │ __device__ default_int length_() { > │ return this->ptr.base->length; > │ } > │ }; > │ """ > │ class static_array(): > │ def __init__(self, length): > │ self.ptr = [] > │ for _ in range(length): > │ self.ptr.append(None) > │ > │ def __getitem__(self, index): > │ assert 0 <= index < len(self.ptr), "The get index > needs to be in range." > │ return self.ptr[index] > │ > │ def __setitem__(self, index, value): > │ assert 0 <= index < len(self.ptr), "The set index > needs to be in range." > │ self.ptr[index] = value > │ > │ class static_array_list(static_array): > │ def __init__(self, length): > │ super().__init__(length) > │ self.length = 0 > │ > │ def __getitem__(self, index): > │ assert 0 <= index < self.length, "The get index needs > to be in range." > │ return self.ptr[index] > │ > │ def __setitem__(self, index, value): > │ assert 0 <= index < self.length, "The set index needs > to be in range." > │ self.ptr[index] = value > │ > │ def push(self,value): > │ assert (self.length < len(self.ptr)), "The length > before pushing has to be less than the maximum length of the array." > │ self.ptr[self.length] = value > │ self.length += 1 > │ > │ def pop(self): > │ assert (0 < self.length), "The length before popping > has to be greater than 0." > │ self.length -= 1 > │ return self.ptr[self.length] > │ > │ def unsafe_set_length(self,i): > │ assert 0 <= i <= len(self.ptr), "The new length has > to be in range." > │ self.length = i > │ > │ class dynamic_array(static_array): > │ pass > │ > │ class dynamic_array_list(static_array_list): > │ def length_(self): return self.length > │ > │ > │ kernels_main = r""" > │ """ > │ from main_auto import * > │ kernels = kernels_aux + kernels_main > │ import cupy as cp > │ import numpy as np > │ from dataclasses import dataclass > │ from typing import NamedTuple, Union, Callable, Tuple > │ i8 = int; i16 = int; i32 = int; i64 = int; u8 = int; u16 = > int; u32 = int; u64 = int; f32 = float; f64 = float; char = str; string = str > │ cuda = False > │ > │ > │ # fwd_dcls > │ # types > │ # functions > │ # main_defs > │ def main_body(): > │ return 0.3325000000000001 > │ > │ def main(): > │ r = main_body() > │ if cuda: cp.cuda.get_current_stream().synchronize() # > This line is here so the `__trap()` calls on the kernel aren't missed. > │ return r > │ > │ if __name__ == '__main__': result = main(); None if result is > None else print(result) > │ ", > │ [], 0) > │ 00:00:59 v #1856 Supervisor.buildFile / ofSeqAsync / x: > (Some > │ "kernels_aux = r""" > │ // The types of these two will be replaced during compilation > by the Spiral code generator. > │ // It matches on `using default_int = ` and `;` with the > inner part being replaced so the form should be kept as is. > │ // The two statements need to begin at the start of a line. > │ using default_int = int; > │ using default_uint = unsigned int; > │ > │ #ifndef __NVRTC__ > │ // NVRTC has these includes by default so they need to be > left out if it is used as the compiler. > │ #include <new> > │ #include <assert.h> > │ #include <stdio.h> > │ #endif > │ > │ // For error checking on the host. > │ #define gpuErrchk(ans) { gpuAssert((ans), __FILE__, > __LINE__); } > │ template <typename T> inline __device__ void destroy(T& obj) > { obj.~T(); } > │ inline void gpuAssert(cudaError error, const char *file, int > line, bool abort=true) { > │ if (error != cudaSuccess) { > │ fprintf(stderr, "GPUassert: %s %s %d\n", > cudaGetErrorString(error), file, line); > │ if (abort) exit(error); > │ } > │ } > │ > │ template <typename el> > │ struct sptr // Shared pointer for the Spiral datatypes. They > have to have the refc field inside them to work. > │ { > │ el* base; > │ > │ __device__ sptr() : base(nullptr) {} > │ __device__ sptr(el* ptr) : base(ptr) { > this->base->refc++; } > │ > │ __device__ ~sptr() > │ { > │ if (this->base != nullptr && --this->base->refc == 0) > │ { > │ delete this->base; > │ this->base = nullptr; > │ } > │ } > │ > │ __device__ sptr(sptr& x) > │ { > │ this->base = x.base; > │ this->base->refc++; > │ } > │ > │ __device__ sptr(sptr&& x) > │ { > │ this->base = x.base; > │ x.base = nullptr; > │ } > │ > │ __device__ sptr& operator=(sptr& x) > │ { > │ if (this->base != x.base) > │ { > │ delete this->base; > │ this->base = x.base; > │ this->base->refc++; > │ } > │ return *this; > │ } > │ > │ __device__ sptr& operator=(sptr&& x) > │ { > │ if (this->base != x.base) > │ { > │ delete this->base; > │ this->base = x.base; > │ x.base = nullptr; > │ } > │ return *this; > │ } > │ }; > │ > │ template <typename el> > │ struct csptr : public sptr<el> > │ { // Shared pointer for closures specifically. > │ using sptr<el>::sptr; > │ template <typename... Args> > │ __device__ auto operator()(Args... args) -> > decltype(this->base->operator()(args...)) > │ { > │ return this->base->operator()(args...); > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct static_array > │ { > │ el ptr[max_length]; > │ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < max_length); > │ return this->ptr[i]; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct static_array_list > │ { > │ default_int length{ 0 }; > │ el ptr[max_length]; > │ > │ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ __device__ void push(el& x) { > │ ptr[this->length++] = x; > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __device__ void push(el&& x) { > │ ptr[this->length++] = std::move(x); > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __device__ el pop() { > │ assert("The array before popping should be greater > than 0." && 0 < this->length); > │ auto x = ptr[--this->length]; > │ ptr[this->length].~el(); > │ new (&ptr[this->length]) el(); > │ return x; > │ } > │ // Should be used only during initialization. > │ __device__ void unsafe_set_length(default_int i) { > │ assert("The new length should be in range." && 0 <= i > && i <= max_length); > │ this->length = i; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_base > │ { > │ int refc{ 0 }; > │ el* ptr; > │ > │ __device__ dynamic_array_base() : ptr(new el[max_length]) > {} > │ __device__ ~dynamic_array_base() { delete[] this->ptr; } > │ > │ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array > │ { > │ sptr<dynamic_array_base<el, max_length>> ptr; > │ > │ __device__ dynamic_array() = default; > │ __device__ dynamic_array(bool t) : ptr(new > dynamic_array_base<el, max_length>()) {} > │ __device__ el& operator[](default_int i) { > │ return this->ptr.base->operator[](i); > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_list_base > │ { > │ int refc{ 0 }; > │ default_int length{ 0 }; > │ el* ptr; > │ > │ __device__ dynamic_array_list_base() : ptr(new > el[max_length]) {} > │ __device__ dynamic_array_list_base(default_int l) : > ptr(new el[max_length]) { this->unsafe_set_length(l); } > │ __device__ ~dynamic_array_list_base() { delete[] > this->ptr; } > │ > │ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ __device__ void push(el& x) { > │ ptr[this->length++] = x; > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __device__ void push(el&& x) { > │ ptr[this->length++] = std::move(x); > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __device__ el pop() { > │ assert("The array before popping should be greater > than 0." && 0 < this->length); > │ auto x = ptr[--this->length]; > │ ptr[this->length].~el(); > │ new (&ptr[this->length]) el(); > │ return x; > │ } > │ // Should be used only during initialization. > │ __device__ void unsafe_set_length(default_int i) { > │ assert("The new length should be in range." && 0 <= i > && i <= max_length); > │ this->length = i; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_list > │ { > │ sptr<dynamic_array_list_base<el, max_length>> ptr; > │ > │ __device__ dynamic_array_list() = default; > │ __device__ dynamic_array_list(default_int l) : ptr(new > dynamic_array_list_base<el, max_length>(l)) {} > │ > │ __device__ el& operator[](default_int i) { > │ return this->ptr.base->operator[](i); > │ } > │ __device__ void push(el& x) { > │ this->ptr.base->push(x); > │ } > │ __device__ void push(el&& x) { > │ this->ptr.base->push(std::move(x)); > │ } > │ __device__ el pop() { > │ return this->ptr.base->pop(); > │ } > │ // Should be used only during initialization. > │ __device__ void unsafe_set_length(default_int i) { > │ this->ptr.base->unsafe_set_length(i); > │ } > │ __device__ default_int length_() { > │ return this->ptr.base->length; > │ } > │ }; > │ """ > │ class static_array(): > │ def __init__(self, length): > │ self.ptr = [] > │ for _ in range(length): > │ self.ptr.append(None) > │ > │ def __getitem__(self, index): > │ assert 0 <= index < len(self.ptr), "The get index > needs to be in range." > │ return self.ptr[index] > │ > │ def __setitem__(self, index, value): > │ assert 0 <= index < len(self.ptr), "The set index > needs to be in range." > │ self.ptr[index] = value > │ > │ class static_array_list(static_array): > │ def __init__(self, length): > │ super().__init__(length) > │ self.length = 0 > │ > │ def __getitem__(self, index): > │ assert 0 <= index < self.length, "The get index needs > to be in range." > │ return self.ptr[index] > │ > │ def __setitem__(self, index, value): > │ assert 0 <= index < self.length, "The set index needs > to be in range." > │ self.ptr[index] = value > │ > │ def push(self,value): > │ assert (self.length < len(self.ptr)), "The length > before pushing has to be less than the maximum length of the array." > │ self.ptr[self.length] = value > │ self.length += 1 > │ > │ def pop(self): > │ assert (0 < self.length), "The length before popping > has to be greater than 0." > │ self.length -= 1 > │ return self.ptr[self.length] > │ > │ def unsafe_set_length(self,i): > │ assert 0 <= i <= len(self.ptr), "The new length has > to be in range." > │ self.length = i > │ > │ class dynamic_array(static_array): > │ pass > │ > │ class dynamic_array_list(static_array_list): > │ def length_(self): return self.length > │ > │ > │ kernels_main = r""" > │ """ > │ from main_auto import * > │ kernels = kernels_aux + kernels_main > │ import cupy as cp > │ import numpy as np > │ from dataclasses import dataclass > │ from typing import NamedTuple, Union, Callable, Tuple > │ i8 = int; i16 = int; i32 = int; i64 = int; u8 = int; u16 = > int; u32 = int; u64 = int; f32 = float; f64 = float; char = str; string = str > │ cuda = False > │ > │ > │ # fwd_dcls > │ # types > │ # functions > │ # main_defs > │ def main_body(): > │ return 0.3325000000000001 > │ > │ def main(): > │ r = main_body() > │ if cuda: cp.cuda.get_current_stream().synchronize() # > This line is here so the `__trap()` calls on the kernel aren't missed. > │ return r > │ > │ if __name__ == '__main__': result = main(); None if result is > None else print(result) > │ ", > │ [], 0) > │ 00:00:59 v #1857 Supervisor.buildFile / result: [] / > buildFileResult: Some > │ "kernels_aux = r""" > │ // The types of these two will be replaced during compilation > by the Spiral code generator. > │ // It matches on `using default_int = ` and `;` with the > inner part being replaced so the form should be kept as is. > │ // The two statements need to begin at the start of a line. > │ using default_int = int; > │ using default_uint = unsigned int; > │ > │ #ifndef __NVRTC__ > │ // NVRTC has these includes by default so they need to be > left out if it is used as the compiler. > │ #include <new> > │ #include <assert.h> > │ #include <stdio.h> > │ #endif > │ > │ // For error checking on the host. > │ #define gpuErrchk(ans) { gpuAssert((ans), __FILE__, > __LINE__); } > │ template <typename T> inline __device__ void destroy(T& obj) > { obj.~T(); } > │ inline void gpuAssert(cudaError error, const char *file, int > line, bool abort=true) { > │ if (error != cudaSuccess) { > │ fprintf(stderr, "GPUassert: %s %s %d\n", > cudaGetErrorString(error), file, line); > │ if (abort) exit(error); > │ } > │ } > │ > │ template <typename el> > │ struct sptr // Shared pointer for the Spiral datatypes. They > have to have the refc field inside them to work. > │ { > │ el* base; > │ > │ __device__ sptr() : base(nullptr) {} > │ __device__ sptr(el* ptr) : base(ptr) { > this->base->refc++; } > │ > │ __device__ ~sptr() > │ { > │ if (this->base != nullptr && --this->base->refc == 0) > │ { > │ delete this->base; > │ this->base = nullptr; > │ } > │ } > │ > │ __device__ sptr(sptr& x) > │ { > │ this->base = x.base; > │ this->base->refc++; > │ } > │ > │ __device__ sptr(sptr&& x) > │ { > │ this->base = x.base; > │ x.base = nullptr; > │ } > │ > │ __device__ sptr& operator=(sptr& x) > │ { > │ if (this->base != x.base) > │ { > │ delete this->base; > │ this->base = x.base; > │ this->base->refc++; > │ } > │ return *this; > │ } > │ > │ __device__ sptr& operator=(sptr&& x) > │ { > │ if (this->base != x.base) > │ { > │ delete this->base; > │ this->base = x.base; > │ x.base = nullptr; > │ } > │ return *this; > │ } > │ }; > │ > │ template <typename el> > │ struct csptr : public sptr<el> > │ { // Shared pointer for closures specifically. > │ using sptr<el>::sptr; > │ template <typename... Args> > │ __device__ auto operator()(Args... args) -> > decltype(this->base->operator()(args...)) > │ { > │ return this->base->operator()(args...); > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct static_array > │ { > │ el ptr[max_length]; > │ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < max_length); > │ return this->ptr[i]; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct static_array_list > │ { > │ default_int length{ 0 }; > │ el ptr[max_length]; > │ > │ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ __device__ void push(el& x) { > │ ptr[this->length++] = x; > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __device__ void push(el&& x) { > │ ptr[this->length++] = std::move(x); > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __device__ el pop() { > │ assert("The array before popping should be greater > than 0." && 0 < this->length); > │ auto x = ptr[--this->length]; > │ ptr[this->length].~el(); > │ new (&ptr[this->length]) el(); > │ return x; > │ } > │ // Should be used only during initialization. > │ __device__ void unsafe_set_length(default_int i) { > │ assert("The new length should be in range." && 0 <= i > && i <= max_length); > │ this->length = i; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_base > │ { > │ int refc{ 0 }; > │ el* ptr; > │ > │ __device__ dynamic_array_base() : ptr(new el[max_length]) > {} > │ __device__ ~dynamic_array_base() { delete[] this->ptr; } > │ > │ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array > │ { > │ sptr<dynamic_array_base<el, max_length>> ptr; > │ > │ __device__ dynamic_array() = default; > │ __device__ dynamic_array(bool t) : ptr(new > dynamic_array_base<el, max_length>()) {} > │ __device__ el& operator[](default_int i) { > │ return this->ptr.base->operator[](i); > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_list_base > │ { > │ int refc{ 0 }; > │ default_int length{ 0 }; > │ el* ptr; > │ > │ __device__ dynamic_array_list_base() : ptr(new > el[max_length]) {} > │ __device__ dynamic_array_list_base(default_int l) : > ptr(new el[max_length]) { this->unsafe_set_length(l); } > │ __device__ ~dynamic_array_list_base() { delete[] > this->ptr; } > │ > │ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ __device__ void push(el& x) { > │ ptr[this->length++] = x; > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __device__ void push(el&& x) { > │ ptr[this->length++] = std::move(x); > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __device__ el pop() { > │ assert("The array before popping should be greater > than 0." && 0 < this->length); > │ auto x = ptr[--this->length]; > │ ptr[this->length].~el(); > │ new (&ptr[this->length]) el(); > │ return x; > │ } > │ // Should be used only during initialization. > │ __device__ void unsafe_set_length(default_int i) { > │ assert("The new length should be in range." && 0 <= i > && i <= max_length); > │ this->length = i; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_list > │ { > │ sptr<dynamic_array_list_base<el, max_length>> ptr; > │ > │ __device__ dynamic_array_list() = default; > │ __device__ dynamic_array_list(default_int l) : ptr(new > dynamic_array_list_base<el, max_length>(l)) {} > │ > │ __device__ el& operator[](default_int i) { > │ return this->ptr.base->operator[](i); > │ } > │ __device__ void push(el& x) { > │ this->ptr.base->push(x); > │ } > │ __device__ void push(el&& x) { > │ this->ptr.base->push(std::move(x)); > │ } > │ __device__ el pop() { > │ return this->ptr.base->pop(); > │ } > │ // Should be used only during initialization. > │ __device__ void unsafe_set_length(default_int i) { > │ this->ptr.base->unsafe_set_length(i); > │ } > │ __device__ default_int length_() { > │ return this->ptr.base->length; > │ } > │ }; > │ """ > │ class static_array(): > │ def __init__(self, length): > │ self.ptr = [] > │ for _ in range(length): > │ self.ptr.append(None) > │ > │ def __getitem__(self, index): > │ assert 0 <= index < len(self.ptr), "The get index > needs to be in range." > │ return self.ptr[index] > │ > │ def __setitem__(self, index, value): > │ assert 0 <= index < len(self.ptr), "The set index > needs to be in range." > │ self.ptr[index] = value > │ > │ class static_array_list(static_array): > │ def __init__(self, length): > │ super().__init__(length) > │ self.length = 0 > │ > │ def __getitem__(self, index): > │ assert 0 <= index < self.length, "The get index needs > to be in range." > │ return self.ptr[index] > │ > │ def __setitem__(self, index, value): > │ assert 0 <= index < self.length, "The set index needs > to be in range." > │ self.ptr[index] = value > │ > │ def push(self,value): > │ assert (self.length < len(self.ptr)), "The length > before pushing has to be less than the maximum length of the array." > │ self.ptr[self.length] = value > │ self.length += 1 > │ > │ def pop(self): > │ assert (0 < self.length), "The length before popping > has to be greater than 0." > │ self.length -= 1 > │ return self.ptr[self.length] > │ > │ def unsafe_set_length(self,i): > │ assert 0 <= i <= len(self.ptr), "The new length has > to be in range." > │ self.length = i > │ > │ class dynamic_array(static_array): > │ pass > │ > │ class dynamic_array_list(static_array_list): > │ def length_(self): return self.length > │ > │ > │ kernels_main = r""" > │ """ > │ from main_auto import * > │ kernels = kernels_aux + kernels_main > │ import cupy as cp > │ import numpy as np > │ from dataclasses import dataclass > │ from typing import NamedTuple, Union, Callable, Tuple > │ i8 = int; i16 = int; i32 = int; i64 = int; u8 = int; u16 = > int; u32 = int; u64 = int; f32 = float; f64 = float; char = str; string = str > │ cuda = False > │ > │ > │ # fwd_dcls > │ # types > │ # functions > │ # main_defs > │ def main_body(): > │ return 0.3325000000000001 > │ > │ def main(): > │ r = main_body() > │ if cuda: cp.cuda.get_current_stream().synchronize() # > This line is here so the `__trap()` calls on the kernel aren't missed. > │ return r > │ > │ if __name__ == '__main__': result = main(); None if result is > None else print(result) > │ " / typeErrorCount: 0 > │ 00:00:59 v #1858 Supervisor.buildFile / retry: 0 / > typeErrorCount: 0 / fileDir: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/a4224c9f3d674d70 > fd56b6ecd3ae8c8ff3178a7124ae34f592336fef263568ea / targetDir: > /home/runner/work/polyglot/polyglot/target > │ Some > │ (Some > │ "kernels_aux = r""" > │ // The types of these two will be replaced during compilation > by the Spiral code generator. > │ // It matches on `using default_int = ` and `;` with the > inner part being replaced so the form should be kept as is. > │ // The two statements need to begin at the start of a line. > │ using default_int = int; > │ using default_uint = unsigned int; > │ > │ #ifndef __NVRTC__ > │ // NVRTC has these includes by default so they need to be > left out if it is used as the compiler. > │ #include <new> > │ #include <assert.h> > │ #include <stdio.h> > │ #endif > │ > │ // For error checking on the host. > │ #define gpuErrchk(ans) { gpuAssert((ans), __FILE__, > __LINE__); } > │ template <typename T> inline __device__ void destroy(T& obj) > { obj.~T(); } > │ inline void gpuAssert(cudaError error, const char *file, int > line, bool abort=true) { > │ if (error != cudaSuccess) { > │ fprintf(stderr, "GPUassert: %s %s %d\n", > cudaGetErrorString(error), file, line); > │ if (abort) exit(error); > │ } > │ } > │ > │ template <typename el> > │ struct sptr // Shared pointer for the Spiral datatypes. They > have to have the refc field inside them to work. > │ { > │ el* base; > │ > │ __device__ sptr() : base(nullptr) {} > │ __device__ sptr(el* ptr) : base(ptr) { > this->base->refc++; } > │ > │ __device__ ~sptr() > │ { > │ if (this->base != nullptr && --this->base->refc == 0) > │ { > │ delete this->base; > │ this->base = nullptr; > │ } > │ } > │ > │ __device__ sptr(sptr& x) > │ { > │ this->base = x.base; > │ this->base->refc++; > │ } > │ > │ __device__ sptr(sptr&& x) > │ { > │ this->base = x.base; > │ x.base = nullptr; > │ } > │ > │ __device__ sptr& operator=(sptr& x) > │ { > │ if (this->base != x.base) > │ { > │ delete this->base; > │ this->base = x.base; > │ this->base->refc++; > │ } > │ return *this; > │ } > │ > │ __device__ sptr& operator=(sptr&& x) > │ { > │ if (this->base != x.base) > │ { > │ delete this->base; > │ this->base = x.base; > │ x.base = nullptr; > │ } > │ return *this; > │ } > │ }; > │ > │ template <typename el> > │ struct csptr : public sptr<el> > │ { // Shared pointer for closures specifically. > │ using sptr<el>::sptr; > │ template <typename... Args> > │ __device__ auto operator()(Args... args) -> > decltype(this->base->operator()(args...)) > │ { > │ return this->base->operator()(args...); > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct static_array > │ { > │ el ptr[max_length]; > │ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < max_length); > │ return this->ptr[i]; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct static_array_list > │ { > │ default_int length{ 0 }; > │ el ptr[max_length]; > │ > │ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ __device__ void push(el& x) { > │ ptr[this->length++] = x; > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __device__ void push(el&& x) { > │ ptr[this->length++] = std::move(x); > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __device__ el pop() { > │ assert("The array before popping should be greater > than 0." && 0 < this->length); > │ auto x = ptr[--this->length]; > │ ptr[this->length].~el(); > │ new (&ptr[this->length]) el(); > │ return x; > │ } > │ // Should be used only during initialization. > │ __device__ void unsafe_set_length(default_int i) { > │ assert("The new length should be in range." && 0 <= i > && i <= max_length); > │ this->length = i; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_base > │ { > │ int refc{ 0 }; > │ el* ptr; > │ > │ __device__ dynamic_array_base() : ptr(new el[max_length]) > {} > │ __device__ ~dynamic_array_base() { delete[] this->ptr; } > │ > │ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array > │ { > │ sptr<dynamic_array_base<el, max_length>> ptr; > │ > │ __device__ dynamic_array() = default; > │ __device__ dynamic_array(bool t) : ptr(new > dynamic_array_base<el, max_length>()) {} > │ __device__ el& operator[](default_int i) { > │ return this->ptr.base->operator[](i); > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_list_base > │ { > │ int refc{ 0 }; > │ default_int length{ 0 }; > │ el* ptr; > │ > │ __device__ dynamic_array_list_base() : ptr(new > el[max_length]) {} > │ __device__ dynamic_array_list_base(default_int l) : > ptr(new el[max_length]) { this->unsafe_set_length(l); } > │ __device__ ~dynamic_array_list_base() { delete[] > this->ptr; } > │ > │ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ __device__ void push(el& x) { > │ ptr[this->length++] = x; > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __device__ void push(el&& x) { > │ ptr[this->length++] = std::move(x); > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __device__ el pop() { > │ assert("The array before popping should be greater > than 0." && 0 < this->length); > │ auto x = ptr[--this->length]; > │ ptr[this->length].~el(); > │ new (&ptr[this->length]) el(); > │ return x; > │ } > │ // Should be used only during initialization. > │ __device__ void unsafe_set_length(default_int i) { > │ assert("The new length should be in range." && 0 <= i > && i <= max_length); > │ this->length = i; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_list > │ { > │ sptr<dynamic_array_list_base<el, max_length>> ptr; > │ > │ __device__ dynamic_array_list() = default; > │ __device__ dynamic_array_list(default_int l) : ptr(new > dynamic_array_list_base<el, max_length>(l)) {} > │ > │ __device__ el& operator[](default_int i) { > │ return this->ptr.base->operator[](i); > │ } > │ __device__ void push(el& x) { > │ this->ptr.base->push(x); > │ } > │ __device__ void push(el&& x) { > │ this->ptr.base->push(std::move(x)); > │ } > │ __device__ el pop() { > │ return this->ptr.base->pop(); > │ } > │ // Should be used only during initialization. > │ __device__ void unsafe_set_length(default_int i) { > │ this->ptr.base->unsafe_set_length(i); > │ } > │ __device__ default_int length_() { > │ return this->ptr.base->length; > │ } > │ }; > │ """ > │ class static_array(): > │ def __init__(self, length): > │ self.ptr = [] > │ for _ in range(length): > │ self.ptr.append(None) > │ > │ def __getitem__(self, index): > │ assert 0 <= index < len(self.ptr), "The get index > needs to be in range." > │ return self.ptr[index] > │ > │ def __setitem__(self, index, value): > │ assert 0 <= index < len(self.ptr), "The set index > needs to be in range." > │ self.ptr[index] = value > │ > │ class static_array_list(static_array): > │ def __init__(self, length): > │ super().__init__(length) > │ self.length = 0 > │ > │ def __getitem__(self, index): > │ assert 0 <= index < self.length, "The get index needs > to be in range." > │ return self.ptr[index] > │ > │ def __setitem__(self, index, value): > │ assert 0 <= index < self.length, "The set index needs > to be in range." > │ self.ptr[index] = value > │ > │ def push(self,value): > │ assert (self.length < len(self.ptr)), "The length > before pushing has to be less than the maximum length of the array." > │ self.ptr[self.length] = value > │ self.length += 1 > │ > │ def pop(self): > │ assert (0 < self.length), "The length before popping > has to be greater than 0." > │ self.length -= 1 > │ return self.ptr[self.length] > │ > │ def unsafe_set_length(self,i): > │ assert 0 <= i <= len(self.ptr), "The new length has > to be in range." > │ self.length = i > │ > │ class dynamic_array(static_array): > │ pass > │ > │ class dynamic_array_list(static_array_list): > │ def length_(self): return self.length > │ > │ > │ kernels_main = r""" > │ """ > │ from main_auto import * > │ kernels = kernels_aux + kernels_main > │ import cupy as cp > │ import numpy as np > │ from dataclasses import dataclass > │ from typing import NamedTuple, Union, Callable, Tuple > │ i8 = int; i16 = int; i32 = int; i64 = int; u8 = int; u16 = > int; u32 = int; u64 = int; f32 = float; f64 = float; char = str; string = str > │ cuda = False > │ > │ > │ # fwd_dcls > │ # types > │ # functions > │ # main_defs > │ def main_body(): > │ return 0.3325000000000001 > │ > │ def main(): > │ r = main_body() > │ if cuda: cp.cuda.get_current_stream().synchronize() # > This line is here so the `__trap()` calls on the kernel aren't missed. > │ return r > │ > │ if __name__ == '__main__': result = main(); None if result is > None else print(result) > │ ", > │ []) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > """ > inl init_series start end inc = > inl total : f64 = conv ((end - start) / inc) + 1 > listm.init total (conv >> (*) inc >> (+) start) : list f64 > > type integration = (f64 -> f64) -> f64 -> f64 -> f64 > > inl integral dt : integration = > fun f a b => > init_series (a + dt / 2) (b - dt / 2) dt > |> listm.map (f >> (*) dt) > |> listm.fold (+) 0 > > inl main () = > integral 0.1 (fun x => x ** 2) 0 1 |> convert : i32 > """ > |> fun code -> Spi (code, None) > |> buildCode Cpp [[||]] false 10000 None > |> Async.runWithTimeout 11000 > |> Option.map (fun (_, (_, outputContent), errors) -> outputContent, errors |> > List.map fst) > |> _assertEqual ( > Some ( > Some @"// The types of these two will be replaced during compilation by > the Spiral code generator. > // It matches on `using default_int = ` and `;` with the inner part being > replaced so the form should be kept as is. > // The two statements need to begin at the start of a line. > using default_int = int; > using default_uint = unsigned int; > > #ifndef __NVRTC__ > // NVRTC has these includes by default so they need to be left out if it is used > as the compiler. > #include <new> > #include <assert.h> > #include <stdio.h> > #endif > > // For error checking on the host. > #define gpuErrchk(ans) { gpuAssert((ans), __FILE__, __LINE__); } > template <typename T> inline __host__ __device__ void destroy(T& obj) { > obj.~T(); } > inline void gpuAssert(cudaError error, const char *file, int line, bool > abort=true) { > if (error != cudaSuccess) { > fprintf(stderr, ""GPUassert: %s %s %d\n"", cudaGetErrorString(error), > file, line); > if (abort) exit(error); > } > } > > template <typename el> > struct sptr // Shared pointer for the Spiral datatypes. They have to have the > refc field inside them to work. > { > el* base; > > __host__ __device__ sptr() : base(nullptr) {} > __host__ __device__ sptr(el* ptr) : base(ptr) { this->base->refc++; } > > __host__ __device__ ~sptr() > { > if (this->base != nullptr && --this->base->refc == 0) > { > delete this->base; > this->base = nullptr; > } > } > > __host__ __device__ sptr(sptr& x) > { > this->base = x.base; > this->base->refc++; > } > > __host__ __device__ sptr(sptr&& x) > { > this->base = x.base; > x.base = nullptr; > } > > __host__ __device__ sptr& operator=(sptr& x) > { > if (this->base != x.base) > { > delete this->base; > this->base = x.base; > this->base->refc++; > } > return *this; > } > > __host__ __device__ sptr& operator=(sptr&& x) > { > if (this->base != x.base) > { > delete this->base; > this->base = x.base; > x.base = nullptr; > } > return *this; > } > }; > > template <typename el> > struct csptr : public sptr<el> > { // Shared pointer for closures specifically. > using sptr<el>::sptr; > template <typename... Args> > __host__ __device__ auto operator()(Args... args) -> > decltype(this->base->operator()(args...)) > { > return this->base->operator()(args...); > } > }; > > template <typename el, default_int max_length> > struct static_array > { > el ptr[[max_length]]; > __host__ __device__ el& operator[[]](default_int i) { > assert(""The index has to be in range."" && 0 <= i && i < max_length); > return this->ptr[[i]]; > } > }; > > template <typename el, default_int max_length> > struct static_array_list > { > default_int length{ 0 }; > el ptr[[max_length]]; > > __host__ __device__ el& operator[[]](default_int i) { > assert(""The index has to be in range."" && 0 <= i && i < this->length); > return this->ptr[[i]]; > } > __host__ __device__ void push(el& x) { > ptr[[this->length++]] = x; > assert(""The array after pushing should not be greater than max > length."" && this->length <= max_length); > } > __host__ __device__ void push(el&& x) { > ptr[[this->length++]] = std::move(x); > assert(""The array after pushing should not be greater than max > length."" && this->length <= max_length); > } > __host__ __device__ el pop() { > assert(""The array before popping should be greater than 0."" && 0 < > this->length); > auto x = ptr[[--this->length]]; > ptr[[this->length]].~el(); > new (&ptr[[this->length]]) el(); > return x; > } > // Should be used only during initialization. > __host__ __device__ void unsafe_set_length(default_int i) { > assert(""The new length should be in range."" && 0 <= i && i <= > max_length); > this->length = i; > } > }; > > template <typename el, default_int max_length> > struct dynamic_array_base > { > int refc{ 0 }; > el* ptr; > > __host__ __device__ dynamic_array_base() : ptr(new el[[max_length]]) {} > __host__ __device__ ~dynamic_array_base() { delete[[]] this->ptr; } > > __host__ __device__ el& operator[[]](default_int i) { > assert(""The index has to be in range."" && 0 <= i && i < this->length); > return this->ptr[[i]]; > } > }; > > template <typename el, default_int max_length> > struct dynamic_array > { > sptr<dynamic_array_base<el, max_length>> ptr; > > __host__ __device__ dynamic_array() = default; > __host__ __device__ dynamic_array(bool t) : ptr(new dynamic_array_base<el, > max_length>()) {} > __host__ __device__ el& operator[[]](default_int i) { > return this->ptr.base->operator[[]](i); > } > }; > > template <typename el, default_int max_length> > struct dynamic_array_list_base > { > int refc{ 0 }; > default_int length{ 0 }; > el* ptr; > > __host__ __device__ dynamic_array_list_base() : ptr(new el[[max_length]]) {} > __host__ __device__ dynamic_array_list_base(default_int l) : ptr(new > el[[max_length]]) { this->unsafe_set_length(l); } > __host__ __device__ ~dynamic_array_list_base() { delete[[]] this->ptr; } > > __host__ __device__ el& operator[[]](default_int i) { > assert(""The index has to be in range."" && 0 <= i && i < this->length); > return this->ptr[[i]]; > } > __host__ __device__ void push(el& x) { > ptr[[this->length++]] = x; > assert(""The array after pushing should not be greater than max > length."" && this->length <= max_length); > } > __host__ __device__ void push(el&& x) { > ptr[[this->length++]] = std::move(x); > assert(""The array after pushing should not be greater than max > length."" && this->length <= max_length); > } > __host__ __device__ el pop() { > assert(""The array before popping should be greater than 0."" && 0 < > this->length); > auto x = ptr[[--this->length]]; > ptr[[this->length]].~el(); > new (&ptr[[this->length]]) el(); > return x; > } > // Should be used only during initialization. > __host__ __device__ void unsafe_set_length(default_int i) { > assert(""The new length should be in range."" && 0 <= i && i <= > max_length); > this->length = i; > } > }; > > template <typename el, default_int max_length> > struct dynamic_array_list > { > sptr<dynamic_array_list_base<el, max_length>> ptr; > > __host__ __device__ dynamic_array_list() = default; > __host__ __device__ dynamic_array_list(default_int l) : ptr(new > dynamic_array_list_base<el, max_length>(l)) {} > > __host__ __device__ el& operator[[]](default_int i) { > return this->ptr.base->operator[[]](i); > } > __host__ __device__ void push(el& x) { > this->ptr.base->push(x); > } > __host__ __device__ void push(el&& x) { > this->ptr.base->push(std::move(x)); > } > __host__ __device__ el pop() { > return this->ptr.base->pop(); > } > // Should be used only during initialization. > __host__ __device__ void unsafe_set_length(default_int i) { > this->ptr.base->unsafe_set_length(i); > } > __host__ __device__ default_int length_() { > return this->ptr.base->length; > } > }; > #include ""main.auto.cu"" > namespace Device { > } > int main_body() { > int v3; > v3 = ; > return v3; > } > int main(){ > auto r = main_body(); > gpuErrchk(cudaDeviceSynchronize()); // This line is here so the `__trap()` > calls on the kernel aren't missed. > return r; > } > ", > [[]] > ) > ) > > ── [ 353.63ms - stdout ] ─────────────────────────────────────────────────────── > │ 00:00:59 v #1876 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/a702c5b29a050ecc > fe7c911beeea63f353f61e71985bbebdb653ac32f3395c52/main.spi > │ 00:00:59 v #1877 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/a702c5b29a050ecc > fe7c911beeea63f353f61e71985bbebdb653ac32f3395c52/main.spi' > │ 00:00:59 v #1878 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/a702c5b29a050ecc > fe7c911beeea63f353f61e71985bbebdb653ac32f3395c52/main.spi > │ 00:00:59 v #1879 Supervisor.buildFile / fullPathUri: > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/a702c5b2 > 9a050eccfe7c911beeea63f353f61e71985bbebdb653ac32f3395c52/main.spi" > │ 00:00:59 v #1880 Supervisor.buildFile / _fileOpenResult: > <null> > │ 00:00:59 v #1881 Supervisor.buildFile / before result: > () > │ 00:00:59 v #2121 Supervisor.buildFile / buildFileResult: > Some > │ "// The types of these two will be replaced during > compilation by the Spiral code generator. > │ // It matches on `using default_int = ` and `;` with the > inner part being replaced so the form should be kept as is. > │ // The two statements need to begin at the start of a line. > │ using default_int = int; > │ using default_uint = unsigned int; > │ > │ #ifndef __NVRTC__ > │ // NVRTC has these includes by default so they need to be > left out if it is used as the compiler. > │ #include <new> > │ #include <assert.h> > │ #include <stdio.h> > │ #endif > │ > │ // For error checking on the host. > │ #define gpuErrchk(ans) { gpuAssert((ans), __FILE__, > __LINE__); } > │ template <typename T> inline __host__ __device__ void > destroy(T& obj) { obj.~T(); } > │ inline void gpuAssert(cudaError error, const char *file, int > line, bool abort=true) { > │ if (error != cudaSuccess) { > │ fprintf(stderr, "GPUassert: %s %s %d\n", > cudaGetErrorString(error), file, line); > │ if (abort) exit(error); > │ } > │ } > │ > │ template <typename el> > │ struct sptr // Shared pointer for the Spiral datatypes. They > have to have the refc field inside them to work. > │ { > │ el* base; > │ > │ __host__ __device__ sptr() : base(nullptr) {} > │ __host__ __device__ sptr(el* ptr) : base(ptr) { > this->base->refc++; } > │ > │ __host__ __device__ ~sptr() > │ { > │ if (this->base != nullptr && --this->base->refc == 0) > │ { > │ delete this->base; > │ this->base = nullptr; > │ } > │ } > │ > │ __host__ __device__ sptr(sptr& x) > │ { > │ this->base = x.base; > │ this->base->refc++; > │ } > │ > │ __host__ __device__ sptr(sptr&& x) > │ { > │ this->base = x.base; > │ x.base = nullptr; > │ } > │ > │ __host__ __device__ sptr& operator=(sptr& x) > │ { > │ if (this->base != x.base) > │ { > │ delete this->base; > │ this->base = x.base; > │ this->base->refc++; > │ } > │ return *this; > │ } > │ > │ __host__ __device__ sptr& operator=(sptr&& x) > │ { > │ if (this->base != x.base) > │ { > │ delete this->base; > │ this->base = x.base; > │ x.base = nullptr; > │ } > │ return *this; > │ } > │ }; > │ > │ template <typename el> > │ struct csptr : public sptr<el> > │ { // Shared pointer for closures specifically. > │ using sptr<el>::sptr; > │ template <typename... Args> > │ __host__ __device__ auto operator()(Args... args) -> > decltype(this->base->operator()(args...)) > │ { > │ return this->base->operator()(args...); > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct static_array > │ { > │ el ptr[max_length]; > │ __host__ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < max_length); > │ return this->ptr[i]; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct static_array_list > │ { > │ default_int length{ 0 }; > │ el ptr[max_length]; > │ > │ __host__ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ __host__ __device__ void push(el& x) { > │ ptr[this->length++] = x; > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __host__ __device__ void push(el&& x) { > │ ptr[this->length++] = std::move(x); > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __host__ __device__ el pop() { > │ assert("The array before popping should be greater > than 0." && 0 < this->length); > │ auto x = ptr[--this->length]; > │ ptr[this->length].~el(); > │ new (&ptr[this->length]) el(); > │ return x; > │ } > │ // Should be used only during initialization. > │ __host__ __device__ void unsafe_set_length(default_int i) > { > │ assert("The new length should be in range." && 0 <= i > && i <= max_length); > │ this->length = i; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_base > │ { > │ int refc{ 0 }; > │ el* ptr; > │ > │ __host__ __device__ dynamic_array_base() : ptr(new > el[max_length]) {} > │ __host__ __device__ ~dynamic_array_base() { delete[] > this->ptr; } > │ > │ __host__ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array > │ { > │ sptr<dynamic_array_base<el, max_length>> ptr; > │ > │ __host__ __device__ dynamic_array() = default; > │ __host__ __device__ dynamic_array(bool t) : ptr(new > dynamic_array_base<el, max_length>()) {} > │ __host__ __device__ el& operator[](default_int i) { > │ return this->ptr.base->operator[](i); > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_list_base > │ { > │ int refc{ 0 }; > │ default_int length{ 0 }; > │ el* ptr; > │ > │ __host__ __device__ dynamic_array_list_base() : ptr(new > el[max_length]) {} > │ __host__ __device__ dynamic_array_list_base(default_int > l) : ptr(new el[max_length]) { this->unsafe_set_length(l); } > │ __host__ __device__ ~dynamic_array_list_base() { delete[] > this->ptr; } > │ > │ __host__ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ __host__ __device__ void push(el& x) { > │ ptr[this->length++] = x; > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __host__ __device__ void push(el&& x) { > │ ptr[this->length++] = std::move(x); > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __host__ __device__ el pop() { > │ assert("The array before popping should be greater > than 0." && 0 < this->length); > │ auto x = ptr[--this->length]; > │ ptr[this->length].~el(); > │ new (&ptr[this->length]) el(); > │ return x; > │ } > │ // Should be used only during initialization. > │ __host__ __device__ void unsafe_set_length(default_int i) > { > │ assert("The new length should be in range." && 0 <= i > && i <= max_length); > │ this->length = i; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_list > │ { > │ sptr<dynamic_array_list_base<el, max_length>> ptr; > │ > │ __host__ __device__ dynamic_array_list() = default; > │ __host__ __device__ dynamic_array_list(default_int l) : > ptr(new dynamic_array_list_base<el, max_length>(l)) {} > │ > │ __host__ __device__ el& operator[](default_int i) { > │ return this->ptr.base->operator[](i); > │ } > │ __host__ __device__ void push(el& x) { > │ this->ptr.base->push(x); > │ } > │ __host__ __device__ void push(el&& x) { > │ this->ptr.base->push(std::move(x)); > │ } > │ __host__ __device__ el pop() { > │ return this->ptr.base->pop(); > │ } > │ // Should be used only during initialization. > │ __host__ __device__ void unsafe_set_length(default_int i) > { > │ this->ptr.base->unsafe_set_length(i); > │ } > │ __host__ __device__ default_int length_() { > │ return this->ptr.base->length; > │ } > │ }; > │ #include "main.auto.cu" > │ namespace Device { > │ } > │ int main_body() { > │ int v3; > │ v3 = ; > │ return v3; > │ } > │ int main(){ > │ auto r = main_body(); > │ gpuErrchk(cudaDeviceSynchronize()); // This line is here > so the `__trap()` calls on the kernel aren't missed. > │ return r; > │ } > │ " > │ 00:00:59 v #2122 Supervisor.buildFile / > outputContentSeq2 unfoldAsync / msg: (Some > │ "// The types of these two will be replaced during > compilation by the Spiral code generator. > │ // It matches on `using default_int = ` and `;` with the > inner part being replaced so the form should be kept as is. > │ // The two statements need to begin at the start of a line. > │ using default_int = int; > │ using default_uint = unsigned int; > │ > │ #ifndef __NVRTC__ > │ // NVRTC has these includes by default so they need to be > left out if it is used as the compiler. > │ #include <new> > │ #include <assert.h> > │ #include <stdio.h> > │ #endif > │ > │ // For error checking on the host. > │ #define gpuErrchk(ans) { gpuAssert((ans), __FILE__, > __LINE__); } > │ template <typename T> inline __host__ __device__ void > destroy(T& obj) { obj.~T(); } > │ inline void gpuAssert(cudaError error, const char *file, int > line, bool abort=true) { > │ if (error != cudaSuccess) { > │ fprintf(stderr, "GPUassert: %s %s %d\n", > cudaGetErrorString(error), file, line); > │ if (abort) exit(error); > │ } > │ } > │ > │ template <typename el> > │ struct sptr // Shared pointer for the Spiral datatypes. They > have to have the refc field inside them to work. > │ { > │ el* base; > │ > │ __host__ __device__ sptr() : base(nullptr) {} > │ __host__ __device__ sptr(el* ptr) : base(ptr) { > this->base->refc++; } > │ > │ __host__ __device__ ~sptr() > │ { > │ if (this->base != nullptr && --this->base->refc == 0) > │ { > │ delete this->base; > │ this->base = nullptr; > │ } > │ } > │ > │ __host__ __device__ sptr(sptr& x) > │ { > │ this->base = x.base; > │ this->base->refc++; > │ } > │ > │ __host__ __device__ sptr(sptr&& x) > │ { > │ this->base = x.base; > │ x.base = nullptr; > │ } > │ > │ __host__ __device__ sptr& operator=(sptr& x) > │ { > │ if (this->base != x.base) > │ { > │ delete this->base; > │ this->base = x.base; > │ this->base->refc++; > │ } > │ return *this; > │ } > │ > │ __host__ __device__ sptr& operator=(sptr&& x) > │ { > │ if (this->base != x.base) > │ { > │ delete this->base; > │ this->base = x.base; > │ x.base = nullptr; > │ } > │ return *this; > │ } > │ }; > │ > │ template <typename el> > │ struct csptr : public sptr<el> > │ { // Shared pointer for closures specifically. > │ using sptr<el>::sptr; > │ template <typename... Args> > │ __host__ __device__ auto operator()(Args... args) -> > decltype(this->base->operator()(args...)) > │ { > │ return this->base->operator()(args...); > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct static_array > │ { > │ el ptr[max_length]; > │ __host__ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < max_length); > │ return this->ptr[i]; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct static_array_list > │ { > │ default_int length{ 0 }; > │ el ptr[max_length]; > │ > │ __host__ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ __host__ __device__ void push(el& x) { > │ ptr[this->length++] = x; > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __host__ __device__ void push(el&& x) { > │ ptr[this->length++] = std::move(x); > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __host__ __device__ el pop() { > │ assert("The array before popping should be greater > than 0." && 0 < this->length); > │ auto x = ptr[--this->length]; > │ ptr[this->length].~el(); > │ new (&ptr[this->length]) el(); > │ return x; > │ } > │ // Should be used only during initialization. > │ __host__ __device__ void unsafe_set_length(default_int i) > { > │ assert("The new length should be in range." && 0 <= i > && i <= max_length); > │ this->length = i; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_base > │ { > │ int refc{ 0 }; > │ el* ptr; > │ > │ __host__ __device__ dynamic_array_base() : ptr(new > el[max_length]) {} > │ __host__ __device__ ~dynamic_array_base() { delete[] > this->ptr; } > │ > │ __host__ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array > │ { > │ sptr<dynamic_array_base<el, max_length>> ptr; > │ > │ __host__ __device__ dynamic_array() = default; > │ __host__ __device__ dynamic_array(bool t) : ptr(new > dynamic_array_base<el, max_length>()) {} > │ __host__ __device__ el& operator[](default_int i) { > │ return this->ptr.base->operator[](i); > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_list_base > │ { > │ int refc{ 0 }; > │ default_int length{ 0 }; > │ el* ptr; > │ > │ __host__ __device__ dynamic_array_list_base() : ptr(new > el[max_length]) {} > │ __host__ __device__ dynamic_array_list_base(default_int > l) : ptr(new el[max_length]) { this->unsafe_set_length(l); } > │ __host__ __device__ ~dynamic_array_list_base() { delete[] > this->ptr; } > │ > │ __host__ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ __host__ __device__ void push(el& x) { > │ ptr[this->length++] = x; > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __host__ __device__ void push(el&& x) { > │ ptr[this->length++] = std::move(x); > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __host__ __device__ el pop() { > │ assert("The array before popping should be greater > than 0." && 0 < this->length); > │ auto x = ptr[--this->length]; > │ ptr[this->length].~el(); > │ new (&ptr[this->length]) el(); > │ return x; > │ } > │ // Should be used only during initialization. > │ __host__ __device__ void unsafe_set_length(default_int i) > { > │ assert("The new length should be in range." && 0 <= i > && i <= max_length); > │ this->length = i; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_list > │ { > │ sptr<dynamic_array_list_base<el, max_length>> ptr; > │ > │ __host__ __device__ dynamic_array_list() = default; > │ __host__ __device__ dynamic_array_list(default_int l) : > ptr(new dynamic_array_list_base<el, max_length>(l)) {} > │ > │ __host__ __device__ el& operator[](default_int i) { > │ return this->ptr.base->operator[](i); > │ } > │ __host__ __device__ void push(el& x) { > │ this->ptr.base->push(x); > │ } > │ __host__ __device__ void push(el&& x) { > │ this->ptr.base->push(std::move(x)); > │ } > │ __host__ __device__ el pop() { > │ return this->ptr.base->pop(); > │ } > │ // Should be used only during initialization. > │ __host__ __device__ void unsafe_set_length(default_int i) > { > │ this->ptr.base->unsafe_set_length(i); > │ } > │ __host__ __device__ default_int length_() { > │ return this->ptr.base->length; > │ } > │ }; > │ #include "main.auto.cu" > │ namespace Device { > │ } > │ int main_body() { > │ int v3; > │ v3 = ; > │ return v3; > │ } > │ int main(){ > │ auto r = main_body(); > │ gpuErrchk(cudaDeviceSynchronize()); // This line is here > so the `__trap()` calls on the kernel aren't missed. > │ return r; > │ } > │ ", > │ [], 0) > │ 00:00:59 v #2123 Supervisor.buildFile / ofSeqAsync / x: > (Some > │ "// The types of these two will be replaced during > compilation by the Spiral code generator. > │ // It matches on `using default_int = ` and `;` with the > inner part being replaced so the form should be kept as is. > │ // The two statements need to begin at the start of a line. > │ using default_int = int; > │ using default_uint = unsigned int; > │ > │ #ifndef __NVRTC__ > │ // NVRTC has these includes by default so they need to be > left out if it is used as the compiler. > │ #include <new> > │ #include <assert.h> > │ #include <stdio.h> > │ #endif > │ > │ // For error checking on the host. > │ #define gpuErrchk(ans) { gpuAssert((ans), __FILE__, > __LINE__); } > │ template <typename T> inline __host__ __device__ void > destroy(T& obj) { obj.~T(); } > │ inline void gpuAssert(cudaError error, const char *file, int > line, bool abort=true) { > │ if (error != cudaSuccess) { > │ fprintf(stderr, "GPUassert: %s %s %d\n", > cudaGetErrorString(error), file, line); > │ if (abort) exit(error); > │ } > │ } > │ > │ template <typename el> > │ struct sptr // Shared pointer for the Spiral datatypes. They > have to have the refc field inside them to work. > │ { > │ el* base; > │ > │ __host__ __device__ sptr() : base(nullptr) {} > │ __host__ __device__ sptr(el* ptr) : base(ptr) { > this->base->refc++; } > │ > │ __host__ __device__ ~sptr() > │ { > │ if (this->base != nullptr && --this->base->refc == 0) > │ { > │ delete this->base; > │ this->base = nullptr; > │ } > │ } > │ > │ __host__ __device__ sptr(sptr& x) > │ { > │ this->base = x.base; > │ this->base->refc++; > │ } > │ > │ __host__ __device__ sptr(sptr&& x) > │ { > │ this->base = x.base; > │ x.base = nullptr; > │ } > │ > │ __host__ __device__ sptr& operator=(sptr& x) > │ { > │ if (this->base != x.base) > │ { > │ delete this->base; > │ this->base = x.base; > │ this->base->refc++; > │ } > │ return *this; > │ } > │ > │ __host__ __device__ sptr& operator=(sptr&& x) > │ { > │ if (this->base != x.base) > │ { > │ delete this->base; > │ this->base = x.base; > │ x.base = nullptr; > │ } > │ return *this; > │ } > │ }; > │ > │ template <typename el> > │ struct csptr : public sptr<el> > │ { // Shared pointer for closures specifically. > │ using sptr<el>::sptr; > │ template <typename... Args> > │ __host__ __device__ auto operator()(Args... args) -> > decltype(this->base->operator()(args...)) > │ { > │ return this->base->operator()(args...); > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct static_array > │ { > │ el ptr[max_length]; > │ __host__ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < max_length); > │ return this->ptr[i]; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct static_array_list > │ { > │ default_int length{ 0 }; > │ el ptr[max_length]; > │ > │ __host__ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ __host__ __device__ void push(el& x) { > │ ptr[this->length++] = x; > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __host__ __device__ void push(el&& x) { > │ ptr[this->length++] = std::move(x); > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __host__ __device__ el pop() { > │ assert("The array before popping should be greater > than 0." && 0 < this->length); > │ auto x = ptr[--this->length]; > │ ptr[this->length].~el(); > │ new (&ptr[this->length]) el(); > │ return x; > │ } > │ // Should be used only during initialization. > │ __host__ __device__ void unsafe_set_length(default_int i) > { > │ assert("The new length should be in range." && 0 <= i > && i <= max_length); > │ this->length = i; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_base > │ { > │ int refc{ 0 }; > │ el* ptr; > │ > │ __host__ __device__ dynamic_array_base() : ptr(new > el[max_length]) {} > │ __host__ __device__ ~dynamic_array_base() { delete[] > this->ptr; } > │ > │ __host__ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array > │ { > │ sptr<dynamic_array_base<el, max_length>> ptr; > │ > │ __host__ __device__ dynamic_array() = default; > │ __host__ __device__ dynamic_array(bool t) : ptr(new > dynamic_array_base<el, max_length>()) {} > │ __host__ __device__ el& operator[](default_int i) { > │ return this->ptr.base->operator[](i); > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_list_base > │ { > │ int refc{ 0 }; > │ default_int length{ 0 }; > │ el* ptr; > │ > │ __host__ __device__ dynamic_array_list_base() : ptr(new > el[max_length]) {} > │ __host__ __device__ dynamic_array_list_base(default_int > l) : ptr(new el[max_length]) { this->unsafe_set_length(l); } > │ __host__ __device__ ~dynamic_array_list_base() { delete[] > this->ptr; } > │ > │ __host__ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ __host__ __device__ void push(el& x) { > │ ptr[this->length++] = x; > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __host__ __device__ void push(el&& x) { > │ ptr[this->length++] = std::move(x); > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __host__ __device__ el pop() { > │ assert("The array before popping should be greater > than 0." && 0 < this->length); > │ auto x = ptr[--this->length]; > │ ptr[this->length].~el(); > │ new (&ptr[this->length]) el(); > │ return x; > │ } > │ // Should be used only during initialization. > │ __host__ __device__ void unsafe_set_length(default_int i) > { > │ assert("The new length should be in range." && 0 <= i > && i <= max_length); > │ this->length = i; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_list > │ { > │ sptr<dynamic_array_list_base<el, max_length>> ptr; > │ > │ __host__ __device__ dynamic_array_list() = default; > │ __host__ __device__ dynamic_array_list(default_int l) : > ptr(new dynamic_array_list_base<el, max_length>(l)) {} > │ > │ __host__ __device__ el& operator[](default_int i) { > │ return this->ptr.base->operator[](i); > │ } > │ __host__ __device__ void push(el& x) { > │ this->ptr.base->push(x); > │ } > │ __host__ __device__ void push(el&& x) { > │ this->ptr.base->push(std::move(x)); > │ } > │ __host__ __device__ el pop() { > │ return this->ptr.base->pop(); > │ } > │ // Should be used only during initialization. > │ __host__ __device__ void unsafe_set_length(default_int i) > { > │ this->ptr.base->unsafe_set_length(i); > │ } > │ __host__ __device__ default_int length_() { > │ return this->ptr.base->length; > │ } > │ }; > │ #include "main.auto.cu" > │ namespace Device { > │ } > │ int main_body() { > │ int v3; > │ v3 = ; > │ return v3; > │ } > │ int main(){ > │ auto r = main_body(); > │ gpuErrchk(cudaDeviceSynchronize()); // This line is here > so the `__trap()` calls on the kernel aren't missed. > │ return r; > │ } > │ ", > │ [], 0) > │ 00:00:59 v #2124 Supervisor.buildFile / result: [] / > buildFileResult: Some > │ "// The types of these two will be replaced during > compilation by the Spiral code generator. > │ // It matches on `using default_int = ` and `;` with the > inner part being replaced so the form should be kept as is. > │ // The two statements need to begin at the start of a line. > │ using default_int = int; > │ using default_uint = unsigned int; > │ > │ #ifndef __NVRTC__ > │ // NVRTC has these includes by default so they need to be > left out if it is used as the compiler. > │ #include <new> > │ #include <assert.h> > │ #include <stdio.h> > │ #endif > │ > │ // For error checking on the host. > │ #define gpuErrchk(ans) { gpuAssert((ans), __FILE__, > __LINE__); } > │ template <typename T> inline __host__ __device__ void > destroy(T& obj) { obj.~T(); } > │ inline void gpuAssert(cudaError error, const char *file, int > line, bool abort=true) { > │ if (error != cudaSuccess) { > │ fprintf(stderr, "GPUassert: %s %s %d\n", > cudaGetErrorString(error), file, line); > │ if (abort) exit(error); > │ } > │ } > │ > │ template <typename el> > │ struct sptr // Shared pointer for the Spiral datatypes. They > have to have the refc field inside them to work. > │ { > │ el* base; > │ > │ __host__ __device__ sptr() : base(nullptr) {} > │ __host__ __device__ sptr(el* ptr) : base(ptr) { > this->base->refc++; } > │ > │ __host__ __device__ ~sptr() > │ { > │ if (this->base != nullptr && --this->base->refc == 0) > │ { > │ delete this->base; > │ this->base = nullptr; > │ } > │ } > │ > │ __host__ __device__ sptr(sptr& x) > │ { > │ this->base = x.base; > │ this->base->refc++; > │ } > │ > │ __host__ __device__ sptr(sptr&& x) > │ { > │ this->base = x.base; > │ x.base = nullptr; > │ } > │ > │ __host__ __device__ sptr& operator=(sptr& x) > │ { > │ if (this->base != x.base) > │ { > │ delete this->base; > │ this->base = x.base; > │ this->base->refc++; > │ } > │ return *this; > │ } > │ > │ __host__ __device__ sptr& operator=(sptr&& x) > │ { > │ if (this->base != x.base) > │ { > │ delete this->base; > │ this->base = x.base; > │ x.base = nullptr; > │ } > │ return *this; > │ } > │ }; > │ > │ template <typename el> > │ struct csptr : public sptr<el> > │ { // Shared pointer for closures specifically. > │ using sptr<el>::sptr; > │ template <typename... Args> > │ __host__ __device__ auto operator()(Args... args) -> > decltype(this->base->operator()(args...)) > │ { > │ return this->base->operator()(args...); > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct static_array > │ { > │ el ptr[max_length]; > │ __host__ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < max_length); > │ return this->ptr[i]; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct static_array_list > │ { > │ default_int length{ 0 }; > │ el ptr[max_length]; > │ > │ __host__ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ __host__ __device__ void push(el& x) { > │ ptr[this->length++] = x; > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __host__ __device__ void push(el&& x) { > │ ptr[this->length++] = std::move(x); > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __host__ __device__ el pop() { > │ assert("The array before popping should be greater > than 0." && 0 < this->length); > │ auto x = ptr[--this->length]; > │ ptr[this->length].~el(); > │ new (&ptr[this->length]) el(); > │ return x; > │ } > │ // Should be used only during initialization. > │ __host__ __device__ void unsafe_set_length(default_int i) > { > │ assert("The new length should be in range." && 0 <= i > && i <= max_length); > │ this->length = i; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_base > │ { > │ int refc{ 0 }; > │ el* ptr; > │ > │ __host__ __device__ dynamic_array_base() : ptr(new > el[max_length]) {} > │ __host__ __device__ ~dynamic_array_base() { delete[] > this->ptr; } > │ > │ __host__ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array > │ { > │ sptr<dynamic_array_base<el, max_length>> ptr; > │ > │ __host__ __device__ dynamic_array() = default; > │ __host__ __device__ dynamic_array(bool t) : ptr(new > dynamic_array_base<el, max_length>()) {} > │ __host__ __device__ el& operator[](default_int i) { > │ return this->ptr.base->operator[](i); > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_list_base > │ { > │ int refc{ 0 }; > │ default_int length{ 0 }; > │ el* ptr; > │ > │ __host__ __device__ dynamic_array_list_base() : ptr(new > el[max_length]) {} > │ __host__ __device__ dynamic_array_list_base(default_int > l) : ptr(new el[max_length]) { this->unsafe_set_length(l); } > │ __host__ __device__ ~dynamic_array_list_base() { delete[] > this->ptr; } > │ > │ __host__ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ __host__ __device__ void push(el& x) { > │ ptr[this->length++] = x; > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __host__ __device__ void push(el&& x) { > │ ptr[this->length++] = std::move(x); > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __host__ __device__ el pop() { > │ assert("The array before popping should be greater > than 0." && 0 < this->length); > │ auto x = ptr[--this->length]; > │ ptr[this->length].~el(); > │ new (&ptr[this->length]) el(); > │ return x; > │ } > │ // Should be used only during initialization. > │ __host__ __device__ void unsafe_set_length(default_int i) > { > │ assert("The new length should be in range." && 0 <= i > && i <= max_length); > │ this->length = i; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_list > │ { > │ sptr<dynamic_array_list_base<el, max_length>> ptr; > │ > │ __host__ __device__ dynamic_array_list() = default; > │ __host__ __device__ dynamic_array_list(default_int l) : > ptr(new dynamic_array_list_base<el, max_length>(l)) {} > │ > │ __host__ __device__ el& operator[](default_int i) { > │ return this->ptr.base->operator[](i); > │ } > │ __host__ __device__ void push(el& x) { > │ this->ptr.base->push(x); > │ } > │ __host__ __device__ void push(el&& x) { > │ this->ptr.base->push(std::move(x)); > │ } > │ __host__ __device__ el pop() { > │ return this->ptr.base->pop(); > │ } > │ // Should be used only during initialization. > │ __host__ __device__ void unsafe_set_length(default_int i) > { > │ this->ptr.base->unsafe_set_length(i); > │ } > │ __host__ __device__ default_int length_() { > │ return this->ptr.base->length; > │ } > │ }; > │ #include "main.auto.cu" > │ namespace Device { > │ } > │ int main_body() { > │ int v3; > │ v3 = ; > │ return v3; > │ } > │ int main(){ > │ auto r = main_body(); > │ gpuErrchk(cudaDeviceSynchronize()); // This line is here > so the `__trap()` calls on the kernel aren't missed. > │ return r; > │ } > │ " / typeErrorCount: 0 > │ 00:00:59 v #2125 Supervisor.buildFile / retry: 0 / > typeErrorCount: 0 / fileDir: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/a702c5b29a050ecc > fe7c911beeea63f353f61e71985bbebdb653ac32f3395c52 / targetDir: > /home/runner/work/polyglot/polyglot/target > │ Some > │ (Some > │ "// The types of these two will be replaced during > compilation by the Spiral code generator. > │ // It matches on `using default_int = ` and `;` with the > inner part being replaced so the form should be kept as is. > │ // The two statements need to begin at the start of a line. > │ using default_int = int; > │ using default_uint = unsigned int; > │ > │ #ifndef __NVRTC__ > │ // NVRTC has these includes by default so they need to be > left out if it is used as the compiler. > │ #include <new> > │ #include <assert.h> > │ #include <stdio.h> > │ #endif > │ > │ // For error checking on the host. > │ #define gpuErrchk(ans) { gpuAssert((ans), __FILE__, > __LINE__); } > │ template <typename T> inline __host__ __device__ void > destroy(T& obj) { obj.~T(); } > │ inline void gpuAssert(cudaError error, const char *file, int > line, bool abort=true) { > │ if (error != cudaSuccess) { > │ fprintf(stderr, "GPUassert: %s %s %d\n", > cudaGetErrorString(error), file, line); > │ if (abort) exit(error); > │ } > │ } > │ > │ template <typename el> > │ struct sptr // Shared pointer for the Spiral datatypes. They > have to have the refc field inside them to work. > │ { > │ el* base; > │ > │ __host__ __device__ sptr() : base(nullptr) {} > │ __host__ __device__ sptr(el* ptr) : base(ptr) { > this->base->refc++; } > │ > │ __host__ __device__ ~sptr() > │ { > │ if (this->base != nullptr && --this->base->refc == 0) > │ { > │ delete this->base; > │ this->base = nullptr; > │ } > │ } > │ > │ __host__ __device__ sptr(sptr& x) > │ { > │ this->base = x.base; > │ this->base->refc++; > │ } > │ > │ __host__ __device__ sptr(sptr&& x) > │ { > │ this->base = x.base; > │ x.base = nullptr; > │ } > │ > │ __host__ __device__ sptr& operator=(sptr& x) > │ { > │ if (this->base != x.base) > │ { > │ delete this->base; > │ this->base = x.base; > │ this->base->refc++; > │ } > │ return *this; > │ } > │ > │ __host__ __device__ sptr& operator=(sptr&& x) > │ { > │ if (this->base != x.base) > │ { > │ delete this->base; > │ this->base = x.base; > │ x.base = nullptr; > │ } > │ return *this; > │ } > │ }; > │ > │ template <typename el> > │ struct csptr : public sptr<el> > │ { // Shared pointer for closures specifically. > │ using sptr<el>::sptr; > │ template <typename... Args> > │ __host__ __device__ auto operator()(Args... args) -> > decltype(this->base->operator()(args...)) > │ { > │ return this->base->operator()(args...); > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct static_array > │ { > │ el ptr[max_length]; > │ __host__ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < max_length); > │ return this->ptr[i]; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct static_array_list > │ { > │ default_int length{ 0 }; > │ el ptr[max_length]; > │ > │ __host__ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ __host__ __device__ void push(el& x) { > │ ptr[this->length++] = x; > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __host__ __device__ void push(el&& x) { > │ ptr[this->length++] = std::move(x); > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __host__ __device__ el pop() { > │ assert("The array before popping should be greater > than 0." && 0 < this->length); > │ auto x = ptr[--this->length]; > │ ptr[this->length].~el(); > │ new (&ptr[this->length]) el(); > │ return x; > │ } > │ // Should be used only during initialization. > │ __host__ __device__ void unsafe_set_length(default_int i) > { > │ assert("The new length should be in range." && 0 <= i > && i <= max_length); > │ this->length = i; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_base > │ { > │ int refc{ 0 }; > │ el* ptr; > │ > │ __host__ __device__ dynamic_array_base() : ptr(new > el[max_length]) {} > │ __host__ __device__ ~dynamic_array_base() { delete[] > this->ptr; } > │ > │ __host__ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array > │ { > │ sptr<dynamic_array_base<el, max_length>> ptr; > │ > │ __host__ __device__ dynamic_array() = default; > │ __host__ __device__ dynamic_array(bool t) : ptr(new > dynamic_array_base<el, max_length>()) {} > │ __host__ __device__ el& operator[](default_int i) { > │ return this->ptr.base->operator[](i); > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_list_base > │ { > │ int refc{ 0 }; > │ default_int length{ 0 }; > │ el* ptr; > │ > │ __host__ __device__ dynamic_array_list_base() : ptr(new > el[max_length]) {} > │ __host__ __device__ dynamic_array_list_base(default_int > l) : ptr(new el[max_length]) { this->unsafe_set_length(l); } > │ __host__ __device__ ~dynamic_array_list_base() { delete[] > this->ptr; } > │ > │ __host__ __device__ el& operator[](default_int i) { > │ assert("The index has to be in range." && 0 <= i && i > < this->length); > │ return this->ptr[i]; > │ } > │ __host__ __device__ void push(el& x) { > │ ptr[this->length++] = x; > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __host__ __device__ void push(el&& x) { > │ ptr[this->length++] = std::move(x); > │ assert("The array after pushing should not be greater > than max length." && this->length <= max_length); > │ } > │ __host__ __device__ el pop() { > │ assert("The array before popping should be greater > than 0." && 0 < this->length); > │ auto x = ptr[--this->length]; > │ ptr[this->length].~el(); > │ new (&ptr[this->length]) el(); > │ return x; > │ } > │ // Should be used only during initialization. > │ __host__ __device__ void unsafe_set_length(default_int i) > { > │ assert("The new length should be in range." && 0 <= i > && i <= max_length); > │ this->length = i; > │ } > │ }; > │ > │ template <typename el, default_int max_length> > │ struct dynamic_array_list > │ { > │ sptr<dynamic_array_list_base<el, max_length>> ptr; > │ > │ __host__ __device__ dynamic_array_list() = default; > │ __host__ __device__ dynamic_array_list(default_int l) : > ptr(new dynamic_array_list_base<el, max_length>(l)) {} > │ > │ __host__ __device__ el& operator[](default_int i) { > │ return this->ptr.base->operator[](i); > │ } > │ __host__ __device__ void push(el& x) { > │ this->ptr.base->push(x); > │ } > │ __host__ __device__ void push(el&& x) { > │ this->ptr.base->push(std::move(x)); > │ } > │ __host__ __device__ el pop() { > │ return this->ptr.base->pop(); > │ } > │ // Should be used only during initialization. > │ __host__ __device__ void unsafe_set_length(default_int i) > { > │ this->ptr.base->unsafe_set_length(i); > │ } > │ __host__ __device__ default_int length_() { > │ return this->ptr.base->length; > │ } > │ }; > │ #include "main.auto.cu" > │ namespace Device { > │ } > │ int main_body() { > │ int v3; > │ v3 = ; > │ return v3; > │ } > │ int main(){ > │ auto r = main_body(); > │ gpuErrchk(cudaDeviceSynchronize()); // This line is here > so the `__trap()` calls on the kernel aren't missed. > │ return r; > │ } > │ ", > │ []) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > """ > inl init_series start end inc = > inl total : f64 = conv ((end - start) / inc) + 1 > listm.init total (conv >> (*) inc >> (+) start) : list f64 > > type integration = (f64 -> f64) -> f64 -> f64 -> f64 > > inl integral dt : integration = > fun f a b => > init_series (a + dt / 2) (b - dt / 2) dt > |> listm.map (f >> (*) dt) > |> listm.fold (+) 0 > > inl main () = > integral 0.1 (fun x => x ** 2) 0 1 > """ > |> fun code -> Spi (code, None) > |> buildCode Gleam [[||]] false 10000 None > |> Async.runWithTimeout 11000 > |> Option.map (fun (_, (_, outputContent), errors) -> outputContent, errors |> > List.map fst) > |> _assertEqual ( > Some ( > Some "pub fn main () { 0.3325000000000001\n }", > [[]] > ) > ) > > ── [ 328.89ms - stdout ] ─────────────────────────────────────────────────────── > │ 00:00:59 v #2145 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/9fee147a19a3a90a > b5113d3c8fb7b0b2072de018aa3d73cd2d4eb0e7e7a32620/src/main.spi > │ 00:00:59 v #2146 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/9fee147a19a3a90a > b5113d3c8fb7b0b2072de018aa3d73cd2d4eb0e7e7a32620/src/main.spi' > │ 00:00:59 v #2147 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/9fee147a19a3a90a > b5113d3c8fb7b0b2072de018aa3d73cd2d4eb0e7e7a32620/src/main.spi > │ 00:00:59 v #2148 Supervisor.buildFile / fullPathUri: > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/9fee147a > 19a3a90ab5113d3c8fb7b0b2072de018aa3d73cd2d4eb0e7e7a32620/src/main.spi" > │ 00:00:59 v #2149 Supervisor.buildFile / _fileOpenResult: > <null> > │ 00:00:59 v #2150 Supervisor.buildFile / before result: > () > │ 00:00:59 v #2388 Supervisor.buildFile / buildFileResult: > Some "pub fn main () { 0.3325000000000001 > │ }" > │ 00:00:59 v #2389 Supervisor.buildFile / > outputContentSeq2 unfoldAsync / msg: (Some "pub fn main () { 0.3325000000000001 > │ }", [], 0) > │ 00:00:59 v #2390 Supervisor.buildFile / ofSeqAsync / x: > (Some "pub fn main () { 0.3325000000000001 > │ }", [], 0) > │ 00:00:59 v #2391 Supervisor.buildFile / result: [] / > buildFileResult: Some "pub fn main () { 0.3325000000000001 > │ }" / typeErrorCount: 0 > │ 00:00:59 v #2392 Supervisor.buildFile / retry: 0 / > typeErrorCount: 0 / fileDir: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/9fee147a19a3a90a > b5113d3c8fb7b0b2072de018aa3d73cd2d4eb0e7e7a32620/src / targetDir: > /home/runner/work/polyglot/polyglot/target > │ Some (Some "pub fn main () { 0.3325000000000001 > │ }", []) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > SpiralTrace.TraceLevel.US0_0 |> set_trace_level > """ > inl init_series start end inc = > inl total : f64 = conv ((end - start) / inc) + 1 > listm.init total (conv >> (*) inc >> (+) start) : list f64 > > type integration = (f64 -> f64) -> f64 -> f64 -> f64 > > inl integral dt : integration = > fun f a b => > init_series (a + dt / 2) (b - dt / 2) dt > |> listm.map (f >> (*) dt) > |> listm.fold (+) 0 > > inl main () = > integral 0.01 (fun x => x ** 2) 0 1 > """ > |> fun code -> Spi (code, None) > |> buildCode Fsharp [[||]] false 10000 None > |> Async.runWithTimeout 11000 > |> Option.map (fun (_, (_, outputContent), errors) -> outputContent, errors |> > List.map fst) > |> _assertEqual ( > Some ( > Some "0.33332500000000004\n", > [[]] > ) > ) > // |> _assertEqual None > // |> fun x -> printfn $"{x.ToDisplayString ()}" > > ── [ 404.10ms - stdout ] ─────────────────────────────────────────────────────── > │ 00:01:00 v #2415 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/2acc44d97e6b50ce > 3caf39a0b93135633484d22c3ef6e7797ce64875a41451f4/main.spi > │ 00:01:00 v #2416 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/2acc44d97e6b50ce > 3caf39a0b93135633484d22c3ef6e7797ce64875a41451f4/main.spi' > │ 00:01:00 v #2417 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/2acc44d97e6b50ce > 3caf39a0b93135633484d22c3ef6e7797ce64875a41451f4/main.spi > │ 00:01:00 v #2418 Supervisor.buildFile / fullPathUri: > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/2acc44d9 > 7e6b50ce3caf39a0b93135633484d22c3ef6e7797ce64875a41451f4/main.spi" > │ 00:01:00 v #2419 Supervisor.buildFile / _fileOpenResult: > <null> > │ 00:01:00 v #2420 Supervisor.buildFile / before result: > () > │ 00:01:00 v #2658 Supervisor.buildFile / buildFileResult: > Some "0.33332500000000004 > │ " > │ 00:01:00 v #2659 Supervisor.buildFile / > outputContentSeq2 unfoldAsync / msg: (Some "0.33332500000000004 > │ ", [], 0) > │ 00:01:00 v #2660 Supervisor.buildFile / ofSeqAsync / x: > (Some "0.33332500000000004 > │ ", [], 0) > │ 00:01:00 v #2661 Supervisor.buildFile / result: [] / > buildFileResult: Some "0.33332500000000004 > │ " / typeErrorCount: 0 > │ 00:01:00 v #2662 Supervisor.buildFile / retry: 0 / > typeErrorCount: 0 / fileDir: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/2acc44d97e6b50ce > 3caf39a0b93135633484d22c3ef6e7797ce64875a41451f4 / targetDir: > /home/runner/work/polyglot/polyglot/target > │ Some (Some "0.33332500000000004 > │ ", []) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > SpiralTrace.TraceLevel.US0_0 |> set_trace_level > "" > |> fun code -> Spi (code, None) > |> buildCode Fsharp [[||]] false 10000 None > |> Async.runWithTimeout 11000 > |> Option.map (fun (_, (_, outputContent), errors) -> outputContent, errors |> > List.map fst) > |> _assertEqual ( > Some ( > None, > [[ "Cannot find `main` in file main." ]] > ) > ) > > ── [ 360.98ms - stdout ] ─────────────────────────────────────────────────────── > │ 00:01:00 v #2686 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/a65342ccc7da0da9 > 67b18d8e705d0260e9a932e5e68c0feb33db55c4d28170aa/main.spi > │ 00:01:00 v #2687 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/a65342ccc7da0da9 > 67b18d8e705d0260e9a932e5e68c0feb33db55c4d28170aa/main.spi' > │ 00:01:00 v #2688 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/a65342ccc7da0da9 > 67b18d8e705d0260e9a932e5e68c0feb33db55c4d28170aa/main.spi > │ 00:01:00 v #2689 Supervisor.buildFile / fullPathUri: > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/a65342cc > c7da0da967b18d8e705d0260e9a932e5e68c0feb33db55c4d28170aa/main.spi" > │ 00:01:00 v #2690 Supervisor.buildFile / _fileOpenResult: > <null> > │ 00:01:00 v #2691 Supervisor.buildFile / before result: > () > │ 00:01:00 v #2932 Supervisor.buildFile / buildFileResult: > None > │ 00:01:00 v #2933 Supervisor.buildFile / ofSeqAsync / x: > (None, [], 0) > │ 00:01:00 v #2946 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: Some((Cannot find `main` in file main., FatalError "Cannot > find `main` in file main.")) / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/a65342ccc7da0da9 > 67b18d8e705d0260e9a932e5e68c0feb33db55c4d28170aa/main.spi' > │ 00:01:00 v #2947 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [ > │ [ > │ "Cannot find `main` in file main.", > │ { > │ "FatalError": "Cannot find `main` in file main." > │ } > │ ] > │ ] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/a65342ccc7da0da9 > 67b18d8e705d0260e9a932e5e68c0feb33db55c4d28170aa/main.spi > │ 00:01:00 v #2953 Supervisor.buildFile / outputChild / x: > Some > │ (Ok > │ (Some > │ (None, > │ [("Cannot find `main` in file main.", > │ FatalError "Cannot find `main` in file main.")], > 0))) > │ 00:01:00 v #2955 Supervisor.buildFile / ofSeqAsync / x: > (None, > │ [("Cannot find `main` in file main.", > │ FatalError "Cannot find `main` in file main.")], 0) > │ 00:01:00 v #2956 Supervisor.buildFile / result: > [("Cannot find `main` in file main.", > │ FatalError "Cannot find `main` in file main.")] / > buildFileResult: None / typeErrorCount: 0 > │ 00:01:00 v #2957 Supervisor.buildFile / retry: 0 / > typeErrorCount: 0 / fileDir: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/a65342ccc7da0da9 > 67b18d8e705d0260e9a932e5e68c0feb33db55c4d28170aa / targetDir: > /home/runner/work/polyglot/polyglot/target > │ Some (None, ["Cannot find `main` in file main."]) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > SpiralTrace.TraceLevel.US0_0 |> set_trace_level > """inl main () = > 1i32 / 0i32 > """ > |> fun code -> Spi (code, None) > |> buildCode Fsharp [[||]] false 10000 None > |> Async.runWithTimeout 11000 > |> Option.map (fun (_, (_, outputContent), errors) -> outputContent, errors |> > List.map fst) > |> _assertEqual ( > Some ( > None, > [[ "An attempt to divide by zero has been detected at compile time." ]] > ) > ) > > ── [ 388.02ms - stdout ] ─────────────────────────────────────────────────────── > │ 00:01:00 v #2975 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/fef9812d9b06b75b > 1ab26589e52c6d6ff05910b73ead9e8c4f27f88d2a5cdfb2/main.spi > │ 00:01:00 v #2976 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/fef9812d9b06b75b > 1ab26589e52c6d6ff05910b73ead9e8c4f27f88d2a5cdfb2/main.spi' > │ 00:01:00 v #2977 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/fef9812d9b06b75b > 1ab26589e52c6d6ff05910b73ead9e8c4f27f88d2a5cdfb2/main.spi > │ 00:01:00 v #2978 Supervisor.buildFile / fullPathUri: > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/fef9812d > 9b06b75b1ab26589e52c6d6ff05910b73ead9e8c4f27f88d2a5cdfb2/main.spi" > │ 00:01:00 v #2979 Supervisor.buildFile / _fileOpenResult: > <null> > │ 00:01:00 v #2980 Supervisor.buildFile / before result: > () > │ 00:01:00 v #3217 Supervisor.buildFile / buildFileResult: > None > │ 00:01:00 v #3218 Supervisor.buildFile / ofSeqAsync / x: > (None, [], 0) > │ 00:01:00 v #3219 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: Some((An attempt to divide by zero has been detected at > compile time., TracedError > │ { message = "An attempt to divide by zero has been detected > at compile time." > │ trace = > │ ["Error trace on line: 1, column: 10 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/fef9812d9b06b75b > 1ab26589e52c6d6ff05910b73ead9e8c4f27f88d2a5cdfb2/main.spi. > │ inl main () = > │ ^ > │ "; > │ "Error trace on line: 2, column: 5 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/fef9812d9b06b75b > 1ab26589e52c6d6ff05910b73ead9e8c4f27f88d2a5cdfb2/main.spi. > │ 1i32 / 0i32 > │ ^ > │ "] })) / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/fef9812d9b06b75b > 1ab26589e52c6d6ff05910b73ead9e8c4f27f88d2a5cdfb2/main.spi' > │ 00:01:00 v #3220 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [ > │ [ > │ "An attempt to divide by zero has been detected at > compile time.", > │ { > │ "TracedError": { > │ "message": "An attempt to divide by zero has been > detected at compile time.", > │ "trace": [ > │ "Error trace on line: 1, column: 10 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/fef9812d9b06b75b > 1ab26589e52c6d6ff05910b73ead9e8c4f27f88d2a5cdfb2/main.spi. > │ inl main () = > │ ^ > │ ", > │ "Error trace on line: 2, column: 5 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/fef9812d9b06b75b > 1ab26589e52c6d6ff05910b73ead9e8c4f27f88d2a5cdfb2/main.spi. > │ 1i32 / 0i32 > │ ^ > │ " > │ ] > │ } > │ } > │ ] > │ ] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/fef9812d9b06b75b > 1ab26589e52c6d6ff05910b73ead9e8c4f27f88d2a5cdfb2/main.spi > │ 00:01:00 v #3222 Supervisor.buildFile / outputChild / x: > Some > │ (Ok > │ (Some > │ (None, > │ [("An attempt to divide by zero has been detected at > compile time.", > │ TracedError > │ { message = > │ "An attempt to divide by zero has been > detected at compile time." > │ trace = > │ ["Error trace on line: 1, column: 10 in > module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/fef9812d9b06b75b > 1ab26589e52c6d6ff05910b73ead9e8c4f27f88d2a5cdfb2/main.spi. > │ inl main () = > │ ^ > │ "; > │ "Error trace on line: 2, column: 5 in > module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/fef9812d9b06b75b > 1ab26589e52c6d6ff05910b73ead9e8c4f27f88d2a5cdfb2/main.spi. > │ 1i32 / 0i32 > │ ^ > │ "] })], > │ 0))) > │ 00:01:00 v #3223 Supervisor.buildFile / ofSeqAsync / x: > (None, > │ [("An attempt to divide by zero has been detected at compile > time.", > │ TracedError > │ { message = > │ "An attempt to divide by zero has been detected at > compile time." > │ trace = > │ ["Error trace on line: 1, column: 10 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/fef9812d9b06b75b > 1ab26589e52c6d6ff05910b73ead9e8c4f27f88d2a5cdfb2/main.spi. > │ inl main () = > │ ^ > │ "; > │ "Error trace on line: 2, column: 5 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/fef9812d9b06b75b > 1ab26589e52c6d6ff05910b73ead9e8c4f27f88d2a5cdfb2/main.spi. > │ 1i32 / 0i32 > │ ^ > │ "] })], > │ 0) > │ 00:01:00 v #3224 Supervisor.buildFile / result: [("An > attempt to divide by zero has been detected at compile time.", > │ TracedError > │ { message = > │ "An attempt to divide by zero has been detected at > compile time." > │ trace = > │ ["Error trace on line: 1, column: 10 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/fef9812d9b06b75b > 1ab26589e52c6d6ff05910b73ead9e8c4f27f88d2a5cdfb2/main.spi. > │ inl main () = > │ ^ > │ "; > │ "Error trace on line: 2, column: 5 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/fef9812d9b06b75b > 1ab26589e52c6d6ff05910b73ead9e8c4f27f88d2a5cdfb2/main.spi. > │ 1i32 / 0i32 > │ ^ > │ "] })] / buildFileResult: None / typeErrorCount: 0 > │ 00:01:00 v #3225 Supervisor.buildFile / retry: 0 / > typeErrorCount: 0 / fileDir: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/fef9812d9b06b75b > 1ab26589e52c6d6ff05910b73ead9e8c4f27f88d2a5cdfb2 / targetDir: > /home/runner/work/polyglot/polyglot/target > │ Some (None, ["An attempt to divide by zero has been detected > at compile time."]) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > SpiralTrace.TraceLevel.US0_0 |> set_trace_level > """ > inl main () = > real > inl unbox_real forall a. (obj : a) : a = > typecase obj with > | _ => obj > unbox_real () > () > """ > |> fun code -> Spi (code, None) > |> buildCode Fsharp [[||]] false 10000 None > |> Async.runWithTimeout 11000 > |> Option.map (fun (_, (_, outputContent), errors) -> outputContent, errors |> > List.map fst) > |> _assertEqual ( > Some ( > None, > [[ "Cannot apply a forall with a term." ]] > ) > ) > > ── [ 324.56ms - stdout ] ─────────────────────────────────────────────────────── > │ 00:01:01 v #3243 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi > │ 00:01:01 v #3244 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi' > │ 00:01:01 v #3245 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi > │ 00:01:01 v #3246 Supervisor.buildFile / fullPathUri: > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/66752865 > 9dc2e5af51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi" > │ 00:01:01 v #3247 Supervisor.buildFile / _fileOpenResult: > <null> > │ 00:01:01 v #3248 Supervisor.buildFile / before result: > () > │ 00:01:01 v #3485 Supervisor.buildFile / buildFileResult: > None > │ 00:01:01 v #3486 Supervisor.buildFile / ofSeqAsync / x: > (None, [], 0) > │ 00:01:01 v #3487 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: Some((Cannot apply a forall with a term., TracedError > │ { message = "Cannot apply a forall with a term." > │ trace = > │ ["Error trace on line: 2, column: 10 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ inl main () = > │ ^ > │ "; > │ "Error trace on line: 4, column: 9 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ inl unbox_real forall a. (obj : a) : a = > │ ^ > │ "; > │ "Error trace on line: 7, column: 9 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ unbox_real () > │ ^ > │ "] })) / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi' > │ 00:01:01 v #3488 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [ > │ [ > │ "Cannot apply a forall with a term.", > │ { > │ "TracedError": { > │ "message": "Cannot apply a forall with a term.", > │ "trace": [ > │ "Error trace on line: 2, column: 10 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ inl main () = > │ ^ > │ ", > │ "Error trace on line: 4, column: 9 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ inl unbox_real forall a. (obj : a) : a = > │ ^ > │ ", > │ "Error trace on line: 7, column: 9 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ unbox_real () > │ ^ > │ " > │ ] > │ } > │ } > │ ] > │ ] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi > │ 00:01:01 v #3490 Supervisor.buildFile / outputChild / x: > Some > │ (Ok > │ (Some > │ (None, > │ [("Cannot apply a forall with a term.", > │ TracedError > │ { message = "Cannot apply a forall with a term." > │ trace = > │ ["Error trace on line: 2, column: 10 in > module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ inl main () = > │ ^ > │ "; > │ "Error trace on line: 4, column: 9 in > module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ inl unbox_real forall a. (obj : a) : a = > │ ^ > │ "; > │ "Error trace on line: 7, column: 9 in > module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ unbox_real () > │ ^ > │ "] })], > │ 0))) > │ 00:01:01 v #3491 Supervisor.buildFile / ofSeqAsync / x: > (None, > │ [("Cannot apply a forall with a term.", > │ TracedError > │ { message = "Cannot apply a forall with a term." > │ trace = > │ ["Error trace on line: 2, column: 10 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ inl main () = > │ ^ > │ "; > │ "Error trace on line: 4, column: 9 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ inl unbox_real forall a. (obj : a) : a = > │ ^ > │ "; > │ "Error trace on line: 7, column: 9 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ unbox_real () > │ ^ > │ "] })], > │ 0) > │ 00:01:01 v #3492 Supervisor.buildFile / result: > [("Cannot apply a forall with a term.", > │ TracedError > │ { message = "Cannot apply a forall with a term." > │ trace = > │ ["Error trace on line: 2, column: 10 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ inl main () = > │ ^ > │ "; > │ "Error trace on line: 4, column: 9 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ inl unbox_real forall a. (obj : a) : a = > │ ^ > │ "; > │ "Error trace on line: 7, column: 9 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ unbox_real () > │ ^ > │ "] })] / buildFileResult: None / typeErrorCount: 0 > │ 00:01:01 v #3493 Supervisor.buildFile / retry: 0 / > typeErrorCount: 0 / fileDir: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a / targetDir: > /home/runner/work/polyglot/polyglot/target > │ Some (None, ["Cannot apply a forall with a term."]) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > SpiralTrace.TraceLevel.US0_0 |> set_trace_level > """ > inl main () = > real > inl unbox_real forall a. (obj : a) : a = > typecase obj with > | _ => obj > unbox_real `i32 1 > """ > |> fun code -> Spi (code, None) > |> buildCode Fsharp [[||]] false 10000 None > |> Async.runWithTimeout 11000 > |> Option.map (fun (_, (_, outputContent), errors) -> outputContent, errors |> > List.map fst) > |> _assertEqual ( > Some ( > None, > [[ "The main function should not have a forall." ]] > ) > ) > > ── [ 376.35ms - stdout ] ─────────────────────────────────────────────────────── > │ 00:01:01 v #3509 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/0ba44c42df309b79 > 0acdf4f9fc55fcc7912380f5dd2d90fad118bad793251c4f/main.spi > │ 00:01:01 v #3510 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/0ba44c42df309b79 > 0acdf4f9fc55fcc7912380f5dd2d90fad118bad793251c4f/main.spi' > │ 00:01:01 v #3511 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/0ba44c42df309b79 > 0acdf4f9fc55fcc7912380f5dd2d90fad118bad793251c4f/main.spi > │ 00:01:01 v #3512 Supervisor.buildFile / fullPathUri: > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/0ba44c42 > df309b790acdf4f9fc55fcc7912380f5dd2d90fad118bad793251c4f/main.spi" > │ 00:01:01 v #3513 Supervisor.buildFile / _fileOpenResult: > <null> > │ 00:01:01 v #3514 Supervisor.buildFile / before result: > () > │ 00:01:01 v #3751 Supervisor.buildFile / buildFileResult: > None > │ 00:01:01 v #3752 Supervisor.buildFile / ofSeqAsync / x: > (None, [], 0) > │ 00:01:01 v #3753 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: Some((The main function should not have a forall., TracedError > { message = "The main function should not have a forall." > │ trace = [] })) / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/0ba44c42df309b79 > 0acdf4f9fc55fcc7912380f5dd2d90fad118bad793251c4f/main.spi' > │ 00:01:01 v #3754 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [ > │ [ > │ "The main function should not have a forall.", > │ { > │ "TracedError": { > │ "message": "The main function should not have a > forall.", > │ "trace": [] > │ } > │ } > │ ] > │ ] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/0ba44c42df309b79 > 0acdf4f9fc55fcc7912380f5dd2d90fad118bad793251c4f/main.spi > │ 00:01:01 v #3756 Supervisor.buildFile / outputChild / x: > Some > │ (Ok > │ (Some > │ (None, > │ [("The main function should not have a forall.", > │ TracedError { message = "The main function should > not have a forall." > │ trace = [] })], 0))) > │ 00:01:01 v #3757 Supervisor.buildFile / ofSeqAsync / x: > (None, > │ [("The main function should not have a forall.", > │ TracedError { message = "The main function should not have > a forall." > │ trace = [] })], 0) > │ 00:01:01 v #3758 Supervisor.buildFile / result: [("The > main function should not have a forall.", > │ TracedError { message = "The main function should not have > a forall." > │ trace = [] })] / buildFileResult: None / > typeErrorCount: 0 > │ 00:01:01 v #3759 Supervisor.buildFile / retry: 0 / > typeErrorCount: 0 / fileDir: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/0ba44c42df309b79 > 0acdf4f9fc55fcc7912380f5dd2d90fad118bad793251c4f / targetDir: > /home/runner/work/polyglot/polyglot/target > │ Some (None, ["The main function should not have a forall."]) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > SpiralTrace.TraceLevel.US0_0 |> set_trace_level > """ > inl main () = > real > inl unbox_real forall a. (obj : a) : a = > typecase obj with > | _ => obj > unbox_real () > () > """ > |> fun code -> Spi (code, None) > |> buildCode Fsharp [[||]] false 10000 None > |> Async.runWithTimeout 11000 > |> Option.map (fun (_, (_, outputContent), errors) -> outputContent, errors |> > List.map fst) > |> _assertEqual ( > Some ( > None, > [[ "Cannot apply a forall with a term." ]] > ) > ) > > ── [ 386.96ms - stdout ] ─────────────────────────────────────────────────────── > │ 00:01:01 v #3777 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi > │ 00:01:01 v #3778 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi' > │ 00:01:01 v #3779 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi > │ 00:01:01 v #3780 Supervisor.buildFile / fullPathUri: > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/66752865 > 9dc2e5af51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi" > │ 00:01:01 v #3781 Supervisor.buildFile / _fileOpenResult: > <null> > │ 00:01:01 v #3782 Supervisor.buildFile / before result: > () > │ 00:01:02 v #4019 Supervisor.buildFile / buildFileResult: > None > │ 00:01:02 v #4020 Supervisor.buildFile / ofSeqAsync / x: > (None, [], 0) > │ 00:01:02 v #4021 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: Some((Cannot apply a forall with a term., TracedError > │ { message = "Cannot apply a forall with a term." > │ trace = > │ ["Error trace on line: 2, column: 10 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ inl main () = > │ ^ > │ "; > │ "Error trace on line: 4, column: 9 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ inl unbox_real forall a. (obj : a) : a = > │ ^ > │ "; > │ "Error trace on line: 7, column: 9 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ unbox_real () > │ ^ > │ "] })) / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi' > │ 00:01:02 v #4022 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [ > │ [ > │ "Cannot apply a forall with a term.", > │ { > │ "TracedError": { > │ "message": "Cannot apply a forall with a term.", > │ "trace": [ > │ "Error trace on line: 2, column: 10 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ inl main () = > │ ^ > │ ", > │ "Error trace on line: 4, column: 9 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ inl unbox_real forall a. (obj : a) : a = > │ ^ > │ ", > │ "Error trace on line: 7, column: 9 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ unbox_real () > │ ^ > │ " > │ ] > │ } > │ } > │ ] > │ ] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi > │ 00:01:02 v #4024 Supervisor.buildFile / outputChild / x: > Some > │ (Ok > │ (Some > │ (None, > │ [("Cannot apply a forall with a term.", > │ TracedError > │ { message = "Cannot apply a forall with a term." > │ trace = > │ ["Error trace on line: 2, column: 10 in > module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ inl main () = > │ ^ > │ "; > │ "Error trace on line: 4, column: 9 in > module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ inl unbox_real forall a. (obj : a) : a = > │ ^ > │ "; > │ "Error trace on line: 7, column: 9 in > module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ unbox_real () > │ ^ > │ "] })], > │ 0))) > │ 00:01:02 v #4025 Supervisor.buildFile / ofSeqAsync / x: > (None, > │ [("Cannot apply a forall with a term.", > │ TracedError > │ { message = "Cannot apply a forall with a term." > │ trace = > │ ["Error trace on line: 2, column: 10 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ inl main () = > │ ^ > │ "; > │ "Error trace on line: 4, column: 9 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ inl unbox_real forall a. (obj : a) : a = > │ ^ > │ "; > │ "Error trace on line: 7, column: 9 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ unbox_real () > │ ^ > │ "] })], > │ 0) > │ 00:01:02 v #4026 Supervisor.buildFile / result: > [("Cannot apply a forall with a term.", > │ TracedError > │ { message = "Cannot apply a forall with a term." > │ trace = > │ ["Error trace on line: 2, column: 10 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ inl main () = > │ ^ > │ "; > │ "Error trace on line: 4, column: 9 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ inl unbox_real forall a. (obj : a) : a = > │ ^ > │ "; > │ "Error trace on line: 7, column: 9 in module: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a/main.spi. > │ unbox_real () > │ ^ > │ "] })] / buildFileResult: None / typeErrorCount: 0 > │ 00:01:02 v #4027 Supervisor.buildFile / retry: 0 / > typeErrorCount: 0 / fileDir: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/667528659dc2e5af > 51a6ec17f1774bd7ffff5b5a47e4e117eec78e740987f29a / targetDir: > /home/runner/work/polyglot/polyglot/target > │ Some (None, ["Cannot apply a forall with a term."]) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > SpiralTrace.TraceLevel.US0_0 |> set_trace_level > """inl main () = > 1 + "" > """ > |> fun code -> Spi (code, None) > |> buildCode Fsharp [[||]] false 10000 None > |> Async.runWithTimeout 11000 > |> Option.map (fun (_, (_, outputContent), errors) -> outputContent, errors |> > List.map fst) > |> _assertEqual ( > Some ( > None, > [[ > "main.spi: > Constraint satisfaction error. > Got: string > Fails to satisfy: number" > ]] > ) > ) > > ── [ 213.75ms - stdout ] ─────────────────────────────────────────────────────── > │ 00:01:02 v #4045 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/c030f84f8e553bef > cbdd9aabeace67685221d91a46e3655199e42df713504aa0/main.spi > │ 00:01:02 v #4046 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/c030f84f8e553bef > cbdd9aabeace67685221d91a46e3655199e42df713504aa0/main.spi' > │ 00:01:02 v #4047 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/c030f84f8e553bef > cbdd9aabeace67685221d91a46e3655199e42df713504aa0/main.spi > │ 00:01:02 v #4048 Supervisor.buildFile / fullPathUri: > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/c030f84f > 8e553befcbdd9aabeace67685221d91a46e3655199e42df713504aa0/main.spi" > │ 00:01:02 v #4049 Supervisor.buildFile / _fileOpenResult: > <null> > │ 00:01:02 v #4050 Supervisor.buildFile / before result: > () > │ 00:01:02 v #4130 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: Some((main.spi: > │ Constraint satisfaction error. > │ Got: string > │ Fails to satisfy: number, TypeErrors > │ { errors = > │ [(({ character = 8 > │ line = 1 }, { character = 10 > │ line = 1 }), > │ "Constraint satisfaction error. > │ Got: string > │ Fails to satisfy: number")] > │ uri = > │ > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/c030f84f > 8e553befcbdd9aabeace67685221d91a46e3655199e42df713504aa0/main.spi" })) / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/c030f84f8e553bef > cbdd9aabeace67685221d91a46e3655199e42df713504aa0/main.spi' > │ 00:01:02 v #4134 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [ > │ [ > │ "main.spi: > │ Constraint satisfaction error. > │ Got: string > │ Fails to satisfy: number", > │ { > │ "TypeErrors": { > │ "errors": [ > │ [ > │ [ > │ { > │ "character": 8, > │ "line": 1 > │ }, > │ { > │ "character": 10, > │ "line": 1 > │ } > │ ], > │ "Constraint satisfaction error. > │ Got: string > │ Fails to satisfy: number" > │ ] > │ ], > │ "uri": > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/c030f84f > 8e553befcbdd9aabeace67685221d91a46e3655199e42df713504aa0/main.spi" > │ } > │ } > │ ] > │ ] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/c030f84f8e553bef > cbdd9aabeace67685221d91a46e3655199e42df713504aa0/main.spi > │ 00:01:02 v #4141 Supervisor.buildFile / outputContentSeq > unfoldAsync / msg: (None, > │ Some > │ ("main.spi: > │ Constraint satisfaction error. > │ Got: string > │ Fails to satisfy: number", > │ TypeErrors > │ { errors = > │ [(({ character = 8 > │ line = 1 }, { character = 10 > │ line = 1 }), > │ "Constraint satisfaction error. > │ Got: string > │ Fails to satisfy: number")] > │ uri = > │ > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/c030f84f > 8e553befcbdd9aabeace67685221d91a46e3655199e42df713504aa0/main.spi" })) > │ 00:01:02 v #4143 Supervisor.buildFile / > takeWhileInclusive / TypeErrors trigger > │ 00:01:02 v #4148 Supervisor.buildFile / outputChild / x: > Some > │ (Ok > │ (Some > │ (None, > │ [("main.spi: > │ Constraint satisfaction error. > │ Got: string > │ Fails to satisfy: number", > │ TypeErrors > │ { errors = > │ [(({ character = 8 > │ line = 1 }, { character = 10 > │ line = 1 }), > │ "Constraint satisfaction error. > │ Got: string > │ Fails to satisfy: number")] > │ uri = > │ > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/c030f84f > 8e553befcbdd9aabeace67685221d91a46e3655199e42df713504aa0/main.spi" })], > │ 0))) > │ 00:01:02 v #4149 Supervisor.buildFile / outputChild |> > Async.map > │ 00:01:02 v #4152 Supervisor.buildFile / > outputContentSeq2 unfoldAsync / msg: (None, > │ [("main.spi: > │ Constraint satisfaction error. > │ Got: string > │ Fails to satisfy: number", > │ TypeErrors > │ { errors = > │ [(({ character = 8 > │ line = 1 }, { character = 10 > │ line = 1 }), > │ "Constraint satisfaction error. > │ Got: string > │ Fails to satisfy: number")] > │ uri = > │ > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/c030f84f > 8e553befcbdd9aabeace67685221d91a46e3655199e42df713504aa0/main.spi" })], > │ 0) > │ 00:01:02 v #4155 Supervisor.buildFile / ofSeqAsync / x: > (None, > │ [("main.spi: > │ Constraint satisfaction error. > │ Got: string > │ Fails to satisfy: number", > │ TypeErrors > │ { errors = > │ [(({ character = 8 > │ line = 1 }, { character = 10 > │ line = 1 }), > │ "Constraint satisfaction error. > │ Got: string > │ Fails to satisfy: number")] > │ uri = > │ > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/c030f84f > 8e553befcbdd9aabeace67685221d91a46e3655199e42df713504aa0/main.spi" })], > │ 0) > │ 00:01:02 v #4158 Supervisor.buildFile / result: > [("main.spi: > │ Constraint satisfaction error. > │ Got: string > │ Fails to satisfy: number", > │ TypeErrors > │ { errors = > │ [(({ character = 8 > │ line = 1 }, { character = 10 > │ line = 1 }), > │ "Constraint satisfaction error. > │ Got: string > │ Fails to satisfy: number")] > │ uri = > │ > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/c030f84f > 8e553befcbdd9aabeace67685221d91a46e3655199e42df713504aa0/main.spi" })] / > buildFileResult: None / typeErrorCount: 0 > │ 00:01:02 v #4159 Supervisor.buildFile / retry: 0 / > typeErrorCount: 0 / fileDir: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/c030f84f8e553bef > cbdd9aabeace67685221d91a46e3655199e42df713504aa0 / targetDir: > /home/runner/work/polyglot/polyglot/target > │ 00:01:02 v #4161 Supervisor.buildFile / outputChild |> > Async.map > │ Some (None, ["main.spi: > │ Constraint satisfaction error. > │ Got: string > │ Fails to satisfy: number"]) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > SpiralTrace.TraceLevel.US0_0 |> set_trace_level > """inl main () = > x + y > """ > |> fun code -> Spi (code, None) > |> buildCode Fsharp [[||]] false 10000 None > |> Async.runWithTimeout 11000 > |> Option.map (fun (_, (_, outputContent), errors) -> outputContent, errors |> > List.map fst) > |> _assertEqual ( > Some ( > None, > [[ > "main.spi: > Unbound variable: x. > Unbound variable: y." > ]] > ) > ) > > ── [ 210.49ms - stdout ] ─────────────────────────────────────────────────────── > │ 00:01:02 v #4316 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/6cdeec507f9de5ba > 9c8429cfa7049b777a622aa3bf7333b151c767fde35dc5d1/main.spi > │ 00:01:02 v #4317 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/6cdeec507f9de5ba > 9c8429cfa7049b777a622aa3bf7333b151c767fde35dc5d1/main.spi' > │ 00:01:02 v #4318 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/6cdeec507f9de5ba > 9c8429cfa7049b777a622aa3bf7333b151c767fde35dc5d1/main.spi > │ 00:01:02 v #4319 Supervisor.buildFile / fullPathUri: > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/6cdeec50 > 7f9de5ba9c8429cfa7049b777a622aa3bf7333b151c767fde35dc5d1/main.spi" > │ 00:01:02 v #4320 Supervisor.buildFile / _fileOpenResult: > <null> > │ 00:01:02 v #4321 Supervisor.buildFile / before result: > () > │ 00:01:02 v #4362 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: Some((main.spi: > │ Unbound variable: x. > │ Unbound variable: y., TypeErrors > │ { errors = > │ [(({ character = 4 > │ line = 1 }, { character = 5 > │ line = 1 }), "Unbound variable: x."); > │ (({ character = 8 > │ line = 1 }, { character = 9 > │ line = 1 }), "Unbound variable: y.")] > │ uri = > │ > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/6cdeec50 > 7f9de5ba9c8429cfa7049b777a622aa3bf7333b151c767fde35dc5d1/main.spi" })) / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/6cdeec507f9de5ba > 9c8429cfa7049b777a622aa3bf7333b151c767fde35dc5d1/main.spi' > │ 00:01:02 v #4364 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [ > │ [ > │ "main.spi: > │ Unbound variable: x. > │ Unbound variable: y.", > │ { > │ "TypeErrors": { > │ "errors": [ > │ [ > │ [ > │ { > │ "character": 4, > │ "line": 1 > │ }, > │ { > │ "character": 5, > │ "line": 1 > │ } > │ ], > │ "Unbound variable: x." > │ ], > │ [ > │ [ > │ { > │ "character": 8, > │ "line": 1 > │ }, > │ { > │ "character": 9, > │ "line": 1 > │ } > │ ], > │ "Unbound variable: y." > │ ] > │ ], > │ "uri": > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/6cdeec50 > 7f9de5ba9c8429cfa7049b777a622aa3bf7333b151c767fde35dc5d1/main.spi" > │ } > │ } > │ ] > │ ] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/6cdeec507f9de5ba > 9c8429cfa7049b777a622aa3bf7333b151c767fde35dc5d1/main.spi > │ 00:01:02 v #4368 Supervisor.buildFile / outputContentSeq > unfoldAsync / msg: (None, > │ Some > │ ("main.spi: > │ Unbound variable: x. > │ Unbound variable: y.", > │ TypeErrors > │ { errors = > │ [(({ character = 4 > │ line = 1 }, { character = 5 > │ line = 1 }), "Unbound variable: > x."); > │ (({ character = 8 > │ line = 1 }, { character = 9 > │ line = 1 }), "Unbound variable: > y.")] > │ uri = > │ > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/6cdeec50 > 7f9de5ba9c8429cfa7049b777a622aa3bf7333b151c767fde35dc5d1/main.spi" })) > │ 00:01:02 v #4369 Supervisor.buildFile / > takeWhileInclusive / TypeErrors trigger > │ 00:01:02 v #4374 Supervisor.buildFile / outputChild / x: > Some > │ (Ok > │ (Some > │ (None, > │ [("main.spi: > │ Unbound variable: x. > │ Unbound variable: y.", > │ TypeErrors > │ { errors = > │ [(({ character = 4 > │ line = 1 }, { character = 5 > │ line = 1 }), "Unbound > variable: x."); > │ (({ character = 8 > │ line = 1 }, { character = 9 > │ line = 1 }), "Unbound > variable: y.")] > │ uri = > │ > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/6cdeec50 > 7f9de5ba9c8429cfa7049b777a622aa3bf7333b151c767fde35dc5d1/main.spi" })], > │ 0))) > │ 00:01:02 v #4375 Supervisor.buildFile / outputChild |> > Async.map > │ 00:01:02 v #4378 Supervisor.buildFile / > outputContentSeq2 unfoldAsync / msg: (None, > │ [("main.spi: > │ Unbound variable: x. > │ Unbound variable: y.", > │ TypeErrors > │ { errors = > │ [(({ character = 4 > │ line = 1 }, { character = 5 > │ line = 1 }), "Unbound variable: > x."); > │ (({ character = 8 > │ line = 1 }, { character = 9 > │ line = 1 }), "Unbound variable: > y.")] > │ uri = > │ > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/6cdeec50 > 7f9de5ba9c8429cfa7049b777a622aa3bf7333b151c767fde35dc5d1/main.spi" })], > │ 0) > │ 00:01:02 v #4380 Supervisor.buildFile / ofSeqAsync / x: > (None, > │ [("main.spi: > │ Unbound variable: x. > │ Unbound variable: y.", > │ TypeErrors > │ { errors = > │ [(({ character = 4 > │ line = 1 }, { character = 5 > │ line = 1 }), "Unbound variable: > x."); > │ (({ character = 8 > │ line = 1 }, { character = 9 > │ line = 1 }), "Unbound variable: > y.")] > │ uri = > │ > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/6cdeec50 > 7f9de5ba9c8429cfa7049b777a622aa3bf7333b151c767fde35dc5d1/main.spi" })], > │ 0) > │ 00:01:02 v #4383 Supervisor.buildFile / result: > [("main.spi: > │ Unbound variable: x. > │ Unbound variable: y.", > │ TypeErrors > │ { errors = > │ [(({ character = 4 > │ line = 1 }, { character = 5 > │ line = 1 }), "Unbound variable: > x."); > │ (({ character = 8 > │ line = 1 }, { character = 9 > │ line = 1 }), "Unbound variable: > y.")] > │ uri = > │ > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/6cdeec50 > 7f9de5ba9c8429cfa7049b777a622aa3bf7333b151c767fde35dc5d1/main.spi" })] / > buildFileResult: None / typeErrorCount: 0 > │ 00:01:02 v #4384 Supervisor.buildFile / retry: 0 / > typeErrorCount: 0 / fileDir: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/6cdeec507f9de5ba > 9c8429cfa7049b777a622aa3bf7333b151c767fde35dc5d1 / targetDir: > /home/runner/work/polyglot/polyglot/target > │ 00:01:02 v #4386 Supervisor.buildFile / outputChild |> > Async.map > │ Some (None, ["main.spi: > │ Unbound variable: x. > │ Unbound variable: y."]) > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > SpiralTrace.TraceLevel.US0_0 |> set_trace_level > """inl rec main () = main""" > |> fun code -> Spi (code, None) > |> buildCode Fsharp [[||]] false 10000 None > |> Async.runWithTimeout 11000 > |> Option.map (fun (_, (_, outputContent), errors) -> outputContent, errors |> > List.map fst) > |> _assertEqual ( > Some ( > None, > [[ > "main.spi: > Recursive metavariables are not allowed. A metavar cannot be unified with a type > that has itself. > Got: 'a > Expected: () -> 'a" > ]] > ) > ) > // |> _assertEqual None > // |> fun x -> printfn $"{x.ToDisplayString ()}" > > ── [ 209.30ms - stdout ] ─────────────────────────────────────────────────────── > │ 00:01:02 v #4587 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/883e0123fe6304a9 > 501da46e85facc39c4ac4e3dbb77895f8ccd4581901ee2b7/main.spi > │ 00:01:02 v #4588 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/883e0123fe6304a9 > 501da46e85facc39c4ac4e3dbb77895f8ccd4581901ee2b7/main.spi' > │ 00:01:02 v #4589 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/883e0123fe6304a9 > 501da46e85facc39c4ac4e3dbb77895f8ccd4581901ee2b7/main.spi > │ 00:01:02 v #4590 Supervisor.buildFile / fullPathUri: > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/883e0123 > fe6304a9501da46e85facc39c4ac4e3dbb77895f8ccd4581901ee2b7/main.spi" > │ 00:01:02 v #4591 Supervisor.buildFile / _fileOpenResult: > <null> > │ 00:01:02 v #4592 Supervisor.buildFile / before result: > () > │ 00:01:02 v #4633 Supervisor.buildFile / AsyncSeq.scan / > outputContent: > │ ' / errors: [] / outputContentResult: / typeErrorCount: 0 / > retry: 0 / error: Some((main.spi: > │ Recursive metavariables are not allowed. A metavar cannot be > unified with a type that has itself. > │ Got: 'a > │ Expected: () -> 'a, TypeErrors > │ { errors = > │ [(({ character = 18 > │ line = 0 }, { character = 22 > │ line = 0 }), > │ "Recursive metavariables are not allowed. A metavar > cannot be unified with a type that has itself. > │ Got: 'a > │ Expected: () -> 'a")] > │ uri = > │ > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/883e0123 > fe6304a9501da46e85facc39c4ac4e3dbb77895f8ccd4581901ee2b7/main.spi" })) / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/883e0123fe6304a9 > 501da46e85facc39c4ac4e3dbb77895f8ccd4581901ee2b7/main.spi' > │ 00:01:02 v #4635 Supervisor.buildFile / > takeWhileInclusive / outputContent: > │ '' / errors: [ > │ [ > │ "main.spi: > │ Recursive metavariables are not allowed. A metavar cannot be > unified with a type that has itself. > │ Got: 'a > │ Expected: () -> 'a", > │ { > │ "TypeErrors": { > │ "errors": [ > │ [ > │ [ > │ { > │ "character": 18, > │ "line": 0 > │ }, > │ { > │ "character": 22, > │ "line": 0 > │ } > │ ], > │ "Recursive metavariables are not allowed. A > metavar cannot be unified with a type that has itself. > │ Got: 'a > │ Expected: () -> 'a" > │ ] > │ ], > │ "uri": > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/883e0123 > fe6304a9501da46e85facc39c4ac4e3dbb77895f8ccd4581901ee2b7/main.spi" > │ } > │ } > │ ] > │ ] / typeErrorCount: 0 / retry: 0 / path: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/883e0123fe6304a9 > 501da46e85facc39c4ac4e3dbb77895f8ccd4581901ee2b7/main.spi > │ 00:01:02 v #4637 Supervisor.buildFile / outputContentSeq > unfoldAsync / msg: (None, > │ Some > │ ("main.spi: > │ Recursive metavariables are not allowed. A metavar cannot be > unified with a type that has itself. > │ Got: 'a > │ Expected: () -> 'a", > │ TypeErrors > │ { errors = > │ [(({ character = 18 > │ line = 0 }, { character = 22 > │ line = 0 }), > │ "Recursive metavariables are not allowed. A > metavar cannot be unified with a type that has itself. > │ Got: 'a > │ Expected: () -> 'a")] > │ uri = > │ > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/883e0123 > fe6304a9501da46e85facc39c4ac4e3dbb77895f8ccd4581901ee2b7/main.spi" })) > │ 00:01:02 v #4638 Supervisor.buildFile / > takeWhileInclusive / TypeErrors trigger > │ 00:01:02 v #4641 Supervisor.buildFile / outputChild / x: > Some > │ (Ok > │ (Some > │ (None, > │ [("main.spi: > │ Recursive metavariables are not allowed. A metavar cannot be > unified with a type that has itself. > │ Got: 'a > │ Expected: () -> 'a", > │ TypeErrors > │ { errors = > │ [(({ character = 18 > │ line = 0 }, { character = 22 > │ line = 0 }), > │ "Recursive metavariables are not allowed. A > metavar cannot be unified with a type that has itself. > │ Got: 'a > │ Expected: () -> 'a")] > │ uri = > │ > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/883e0123 > fe6304a9501da46e85facc39c4ac4e3dbb77895f8ccd4581901ee2b7/main.spi" })], > │ 0))) > │ 00:01:02 v #4643 Supervisor.buildFile / outputChild |> > Async.map > │ 00:01:02 v #4645 Supervisor.buildFile / > outputContentSeq2 unfoldAsync / msg: (None, > │ [("main.spi: > │ Recursive metavariables are not allowed. A metavar cannot be > unified with a type that has itself. > │ Got: 'a > │ Expected: () -> 'a", > │ TypeErrors > │ { errors = > │ [(({ character = 18 > │ line = 0 }, { character = 22 > │ line = 0 }), > │ "Recursive metavariables are not allowed. A metavar > cannot be unified with a type that has itself. > │ Got: 'a > │ Expected: () -> 'a")] > │ uri = > │ > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/883e0123 > fe6304a9501da46e85facc39c4ac4e3dbb77895f8ccd4581901ee2b7/main.spi" })], > │ 0) > │ 00:01:02 v #4648 Supervisor.buildFile / ofSeqAsync / x: > (None, > │ [("main.spi: > │ Recursive metavariables are not allowed. A metavar cannot be > unified with a type that has itself. > │ Got: 'a > │ Expected: () -> 'a", > │ TypeErrors > │ { errors = > │ [(({ character = 18 > │ line = 0 }, { character = 22 > │ line = 0 }), > │ "Recursive metavariables are not allowed. A metavar > cannot be unified with a type that has itself. > │ Got: 'a > │ Expected: () -> 'a")] > │ uri = > │ > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/883e0123 > fe6304a9501da46e85facc39c4ac4e3dbb77895f8ccd4581901ee2b7/main.spi" })], > │ 0) > │ 00:01:02 v #4650 Supervisor.buildFile / result: > [("main.spi: > │ Recursive metavariables are not allowed. A metavar cannot be > unified with a type that has itself. > │ Got: 'a > │ Expected: () -> 'a", > │ TypeErrors > │ { errors = > │ [(({ character = 18 > │ line = 0 }, { character = 22 > │ line = 0 }), > │ "Recursive metavariables are not allowed. A metavar > cannot be unified with a type that has itself. > │ Got: 'a > │ Expected: () -> 'a")] > │ uri = > │ > "file:///home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/883e0123 > fe6304a9501da46e85facc39c4ac4e3dbb77895f8ccd4581901ee2b7/main.spi" })] / > buildFileResult: None / typeErrorCount: 0 > │ 00:01:02 v #4651 Supervisor.buildFile / retry: 0 / > typeErrorCount: 0 / fileDir: > /home/runner/work/polyglot/polyglot/target/spiral_Eval/packages/883e0123fe6304a9 > 501da46e85facc39c4ac4e3dbb77895f8ccd4581901ee2b7 / targetDir: > /home/runner/work/polyglot/polyglot/target > │ 00:01:02 v #4654 Supervisor.buildFile / outputChild |> > Async.map > │ Some > │ (None, > │ ["main.spi: > │ Recursive metavariables are not allowed. A metavar cannot be > unified with a type that has itself. > │ Got: 'a > │ Expected: () -> 'a"]) > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## getFileTokenRange > > ── fsharp ────────────────────────────────────────────────────────────────────── > let getFileTokenRange port cancellationToken path = async { > let fullPath = path |> System.IO.Path.GetFullPath > let! code = fullPath |> SpiralFileSystem.read_all_text_async > let lines = code |> SpiralSm.split "\n" > > let struct (token, disposable) = SpiralThreading.new_disposable_token > cancellationToken > use _ = disposable > > let port = port |> Option.defaultWith getCompilerPort > // let! serverPort, _errors, ct, disposable = awaitCompiler port (Some > token) > // use _ = disposable > > let fullPathUri = fullPath |> SpiralFileSystem.normalize_path |> > SpiralFileSystem.new_file_uri > > // let fileOpenObj = {| FileOpen = {| uri = fullPathUri; spiText = code |} > |} > // let! _fileOpenResult = fileOpenObj |> sendObj serverPort > let fileOpenArgs = {| uri = fullPathUri; spiText = code |} > let! _fileOpenResult = > server2.job_null (server2.supervisor *<+ SupervisorReq.FileOpen > fileOpenArgs) > |> Async.AwaitTask > > // do! Async.Sleep 60 > > let fileTokenRangeArgs = > {| > uri = fullPathUri > range = > {| > line = 0 > character = 0 > |}, > {| > line = lines.Length - 1 > character = lines.[[lines.Length - 1]].Length > |} > |} > // let! fileTokenRangeResult = > // fileTokenRangeObj > // |> sendObj serverPort > // |> Async.withCancellationToken ct > > // let fileTokenRangeArgs = {| uri = fullPathUri; backend = backendId |} > let! fileTokenRangeResult = > server2.job_val (fun res -> server2.supervisor *<+ > SupervisorReq.FileTokenRange(fileTokenRangeArgs,res)) > |> Async.AwaitTask > > let fileDir = fullPath |> System.IO.Path.GetDirectoryName > if fileDir |> SpiralSm.starts_with (workspaceRoot </> "target") then > let fileDirUri = fileDir |> SpiralFileSystem.normalize_path |> > SpiralFileSystem.new_file_uri > // let fileDeleteObj = {| FileDelete = {| uris = [[| fileDirUri |]] |} > |} > // let! _fileDeleteResult = fileDeleteObj |> sendObj serverPort > let fileDeleteArgs = {| uris = [[| fileDirUri |]] |} > let! _fileDeleteResult = > server2.job_null (server2.supervisor *<+ SupervisorReq.FileDelete > fileDeleteArgs) > |> Async.AwaitTask > () > > return fileTokenRangeResult |> FSharp.Json.Json.deserialize<int array> |> > Some > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## getCodeTokenRange > > ── fsharp ────────────────────────────────────────────────────────────────────── > let getCodeTokenRange cancellationToken code = async { > let! mainPath, _ = > persistCode {| input = Spi (code, None); backend = None; packages = > [[||]] |} > > let codeDir = mainPath |> System.IO.Path.GetDirectoryName > let tokensPath = codeDir </> "tokens.json" > let! tokens = async { > if tokensPath |> System.IO.File.Exists |> not > then return None > else > let! text = tokensPath |> SpiralFileSystem.read_all_text_async > > return > if text.Length > 2 > then text |> FSharp.Json.Json.deserialize<int array> |> Some > else None > } > match tokens with > | Some tokens -> > return tokens |> Some > | None -> return! mainPath |> getFileTokenRange None cancellationToken > } > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > """inl main () = ()""" > |> getCodeTokenRange None > |> Async.runWithTimeout 10000 > |> Option.flatten > |> _assertEqual (Some [[| 0; 0; 3; 7; 0; 0; 4; 4; 0; 0; 0; 5; 1; 8; 0; 0; 1; 1; > 8; 0; 0; 2; 1; 4; 0; 0; > 2; 1; 8; 0; 0; 1; 1; 8; 0 |]]) > > ── [ 502.94ms - stdout ] ─────────────────────────────────────────────────────── > │ Some [|0; 0; 3; 7; 0; 0; 4; 4; 0; 0; 0; 5; 1; 8; 0; 0; 1; 1; > 8; 0; 0; 2; 1; 4; 0; 0; 2; 1; 8; 0; 0; 1; 1; 8; 0|] > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > """inl main () = 1i32""" > |> getCodeTokenRange None > |> Async.runWithTimeout 10000 > |> Option.flatten > |> _assertEqual (Some [[| 0; 0; 3; 7; 0; 0; 4; 4; 0; 0; 0; 5; 1; 8; 0; 0; 1; 1; > 8; 0; 0; 2; 1; 4; 0; 0; > 2; 1; 3; 0; 0; 1; 3; 12; 0 |]]) > > ── [ 1.72s - stdout ] ────────────────────────────────────────────────────────── > │ Some [|0; 0; 3; 7; 0; 0; 4; 4; 0; 0; 0; 5; 1; 8; 0; 0; 1; 1; > 8; 0; 0; 2; 1; 4; 0; 0; 2; 1; 3; 0; 0; 1; 3; 12; 0|] > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## getFileHoverAt > > ── fsharp ────────────────────────────────────────────────────────────────────── > let getFileHoverAt > port > cancellationToken > path > (position : {| line: int; character: int |}) > = async { > let fullPath = path |> System.IO.Path.GetFullPath > let! code = fullPath |> SpiralFileSystem.read_all_text_async > let lines = code |> SpiralSm.split "\n" > > let struct (token, disposable) = SpiralThreading.new_disposable_token > cancellationToken > use _ = disposable > > let port = port |> Option.defaultWith getCompilerPort > // let! serverPort, _errors, ct, disposable = awaitCompiler port (Some > token) > // use _ = disposable > > let fullPathUri = fullPath |> SpiralFileSystem.normalize_path |> > SpiralFileSystem.new_file_uri > > // let fileOpenObj = {| FileOpen = {| uri = fullPathUri; spiText = code |} > |} > // let! _fileOpenResult = fileOpenObj |> sendObj serverPort > let fileOpenArgs = {| uri = fullPathUri; spiText = code |} > let! _fileOpenResult = > server1.job_null (server1.supervisor *<+ SupervisorReq.FileOpen > fileOpenArgs) > |> Async.AwaitTask > > // do! Async.Sleep 60 > > let hoverAtArgs = > {| > uri = fullPathUri > pos = position > |} > > let! hoverAtResult = > server1.job_val (fun res -> server1.supervisor *<+ > SupervisorReq.HoverAt(hoverAtArgs,res)) > |> Async.AwaitTask > > let fileDir = fullPath |> System.IO.Path.GetDirectoryName > if fileDir |> SpiralSm.starts_with (workspaceRoot </> "target") then > let fileDirUri = fileDir |> SpiralFileSystem.normalize_path |> > SpiralFileSystem.new_file_uri > // let fileDeleteObj = {| FileDelete = {| uris = [[| fileDirUri |]] |} > |} > // let! _fileDeleteResult = fileDeleteObj |> sendObj serverPort > let fileDeleteArgs = {| uris = [[| fileDirUri |]] |} > let! _fileDeleteResult = > server1.job_null (server1.supervisor *<+ SupervisorReq.FileDelete > fileDeleteArgs) > |> Async.AwaitTask > |> Async.runWithTimeoutAsync 60000 > |> Async.map Option.get > () > > return hoverAtResult |> Some > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## getCodeHoverAt > > ── fsharp ────────────────────────────────────────────────────────────────────── > let getCodeHoverAt cancellationToken code position = async { > let! mainPath, _ = > persistCode {| input = Spi (code, None); backend = None; packages = > [[||]] |} > > let codeDir = mainPath |> System.IO.Path.GetDirectoryName > let filePath = codeDir </> "hover.json" > let! output = async { > if filePath |> System.IO.File.Exists |> not > then return None > else > let! text = filePath |> SpiralFileSystem.read_all_text_async > > return > if text.Length > 2 > then text |> Some > else None > } > match output with > | Some output -> > return output |> Some > | None -> return! getFileHoverAt None cancellationToken mainPath position > } > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > getCodeHoverAt None """inl main () = ()""" {| line = 0; character = 4 |} > |> Async.runWithTimeout 10000 > |> Option.flatten > |> _assertEqual (Some "() -> ()") > > ── [ 201.27ms - stdout ] ─────────────────────────────────────────────────────── > │ Some "() -> ()" > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > getCodeHoverAt None """inl main () = ()""" {| line = 0; character = 0 |} > |> Async.runWithTimeout 10000 > |> Option.flatten > |> _assertEqual (Some null) > > ── [ 186.50ms - stdout ] ─────────────────────────────────────────────────────── > │ Some null > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > getCodeHoverAt None """inl rec main () = main""" {| line = 0; character = 8 |} > |> Async.runWithTimeout 10000 > |> Option.flatten > |> _assertEqual (Some "forall 'a. () -> 'a") > > ── [ 200.96ms - stdout ] ─────────────────────────────────────────────────────── > │ Some "forall 'a. () -> 'a" > │ > │ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > getCodeHoverAt None """inl main () = 1""" {| line = 0; character = 4 |} > |> Async.runWithTimeout 10000 > |> Option.flatten > |> _assertEqual (Some "forall 'a {number}. () -> 'a") > > ── [ 186.89ms - stdout ] ─────────────────────────────────────────────────────── > │ Some "forall 'a {number}. () -> 'a" > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## Arguments > > ── fsharp ────────────────────────────────────────────────────────────────────── > [[<RequireQualifiedAccess>]] > type Arguments = > | Build_File of string * string > | File_Token_Range of string * string > | File_Hover_At of string * string * int * int > | Execute_Command of string > | [[<Argu.ArguAttributes.Unique>]] Timeout of int > | [[<Argu.ArguAttributes.Unique>]] Port of int > | [[<Argu.ArguAttributes.Unique>]] Parallel > | [[<Argu.ArguAttributes.Unique>]] Exit_On_Error > > interface Argu.IArgParserTemplate with > member s.Usage = > match s with > | Build_File _ -> nameof Build_File > | File_Token_Range _ -> nameof File_Token_Range > | File_Hover_At _ -> nameof File_Hover_At > | Execute_Command _ -> nameof Execute_Command > | Timeout _ -> nameof Timeout > | Port _ -> nameof Port > | Parallel -> nameof Parallel > | Exit_On_Error-> nameof Exit_On_Error > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > Argu.ArgumentParser.Create<Arguments>().PrintUsage () > > ── [ 83.76ms - return value ] ────────────────────────────────────────────────── > │ "USAGE: dotnet-repl [--help] [--build-file <string> <string>] > │ [--file-token-range <string> <string>] > │ [--file-hover-at <string> <string> <int> > <int>] > │ [--execute-command <string>] [--timeout > <int>] [--port <int>] > │ [--parallel] [--exit-on-error] > │ > │ OPTIONS: > │ > │ --build-file <string> <string> > │ Build_File > │ --file-token-range <string> <string> > │ File_Token_Range > │ --file-hover-at <string> <string> <int> <int> > │ File_Hover_At > │ --execute-command <string> > │ Execute_Command > │ --timeout <int> Timeout > │ --port <int> Port > │ --parallel Parallel > │ --exit-on-error Exit_On_Error > │ --help display this list of options. > │ " > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## main > > ── fsharp ────────────────────────────────────────────────────────────────────── > let main args = > SpiralTrace.TraceLevel.US0_1 |> set_trace_level > let argsMap = args |> Runtime.parseArgsMap<Arguments> > > let buildFileActions = > argsMap > |> Map.tryFind (nameof Arguments.Build_File) > |> Option.defaultValue [[]] > |> List.choose (function > | Arguments.Build_File (inputPath, outputPath) -> Some (inputPath, > outputPath) > | _ -> None > ) > > let fileTokenRangeActions = > argsMap > |> Map.tryFind (nameof Arguments.File_Token_Range) > |> Option.defaultValue [[]] > |> List.choose (function > | Arguments.File_Token_Range (inputPath, outputPath) -> Some > (inputPath, outputPath) > | _ -> None > ) > > let fileHoverAtActions = > argsMap > |> Map.tryFind (nameof Arguments.File_Hover_At) > |> Option.defaultValue [[]] > |> List.choose (function > | Arguments.File_Hover_At (inputPath, outputPath, line, character) > -> > Some (inputPath, outputPath, line, character) > | _ -> None > ) > > let executeCommandActions = > argsMap > |> Map.tryFind (nameof Arguments.Execute_Command) > |> Option.defaultValue [[]] > |> List.choose (function > | Arguments.Execute_Command command -> Some command > | _ -> None > ) > > let timeout = > match argsMap |> Map.tryFind (nameof Arguments.Timeout) with > | Some [[ Arguments.Timeout timeout ]] -> timeout > | _ -> 60002 * 60 * 24 > > let port = > match argsMap |> Map.tryFind (nameof Arguments.Port) with > | Some [[ Arguments.Port port ]] -> Some port > | _ -> None > > let isParallel = argsMap |> Map.containsKey (nameof Arguments.Parallel) > > let isExitOnError = argsMap |> Map.containsKey (nameof > Arguments.Exit_On_Error) > > async { > let port = > port > |> Option.defaultWith getCompilerPort > let struct (localToken, disposable) = > SpiralThreading.new_disposable_token None > // let! serverPort, _errors, compilerToken, disposable = awaitCompiler > port (Some localToken) > let serverPort = port > let struct (compilerToken, disposable) = > SpiralThreading.new_disposable_token None > use _ = disposable > > let buildFileAsync = > buildFileActions > |> List.map (fun (inputPath, outputPath) -> async { > let! _outputPath, outputCode, errors = > let backend = > if outputPath |> SpiralSm.ends_with ".gleam" > then Gleam > elif outputPath |> SpiralSm.ends_with ".fsx" > then Fsharp > elif outputPath |> SpiralSm.ends_with ".py" > then Python > elif outputPath |> SpiralSm.ends_with ".cpp" > then Cpp > else failwith $"Supervisor.main / invalid backend / > outputPath: {outputPath}" > let isReal = inputPath |> SpiralSm.ends_with ".spir" > inputPath |> buildFile backend timeout (Some serverPort) > None > > errors > |> List.map snd > |> List.iter (fun error -> > trace Critical (fun () -> $"main / error: {error |> > serializeObj}") _locals > ) > > match outputCode with > | Some outputCode -> > do! outputCode |> SpiralFileSystem.write_all_text_exists > outputPath > return 0 > | None -> > if isExitOnError > then SpiralRuntime.current_process_kill () > > return 1 > }) > > let fileTokenRangeAsync = > fileTokenRangeActions > |> List.map (fun (inputPath, outputPath) -> async { > let! tokenRange = inputPath |> getFileTokenRange (Some > serverPort) None > match tokenRange with > | Some tokenRange -> > do! tokenRange |> FSharp.Json.Json.serialize |> > SpiralFileSystem.write_all_text_exists outputPath > return 0 > | None -> > if isExitOnError > then SpiralRuntime.current_process_kill () > > return 1 > }) > > let fileHoverAtAsync = > fileHoverAtActions > |> List.map (fun (inputPath, outputPath, line, character) -> async { > let! hoverAt = > getFileHoverAt > (Some serverPort) > None > inputPath > {| line = line; character = character |} > match hoverAt with > | Some hoverAt -> > do! hoverAt |> FSharp.Json.Json.serialize |> > SpiralFileSystem.write_all_text_exists outputPath > return 0 > | None -> > if isExitOnError > then SpiralRuntime.current_process_kill () > > return 1 > }) > > let executeCommandAsync = > executeCommandActions > |> List.map (fun command -> async { > let! exitCode, result = > SpiralRuntime.execution_options (fun x -> > { x with > l0 = command > l1 = Some compilerToken > } > ) > |> SpiralRuntime.execute_with_options_async > > trace Debug (fun () -> $"main / executeCommand / exitCode: > {exitCode} / command: {command}") _locals > > if isExitOnError && exitCode <> 0 > then SpiralRuntime.current_process_kill () > > return exitCode > }) > > return! > [[| buildFileAsync; fileTokenRangeAsync; fileHoverAtAsync; > executeCommandAsync |]] > |> Seq.collect id > |> fun x -> > if isParallel > then Async.Parallel (x, float System.Environment.ProcessorCount > * 0.51 |> ceil |> int) > else Async.Sequential x > |> Async.map Array.sum > } > |> Async.runWithTimeout timeout > |> Option.defaultValue 1 > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let args = > System.Environment.GetEnvironmentVariable "ARGS" > |> SpiralRuntime.split_args > |> Result.toArray > |> Array.collect id > > match args with > | [[||]] -> 0 > | args -> if main args = 0 then 0 else failwith "main failed" > > ── [ 70.22ms - return value ] ────────────────────────────────────────────────── > │ <div class="dni-plaintext"><pre>0 > │ </pre></div><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> 00:01:23 v #3 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 311936 } 00:01:23 d #4 runtime.execute_with_options / { file_name = jupyter; arguments = ["nbconvert", "/home/runner/work/polyglot/polyglot/apps/spiral/Supervisor.dib.ipynb", "--to", "html", "--HTMLExporter.theme=dark"]; options = { command = jupyter nbconvert "/home/runner/work/polyglot/polyglot/apps/spiral/Supervisor.dib.ipynb" --to html --HTMLExporter.theme=dark; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:01:24 v #5 ! [NbConvertApp] Converting notebook /home/runner/work/polyglot/polyglot/apps/spiral/Supervisor.dib.ipynb to html 00:01:24 v #6 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbformat/__init__.py:96: MissingIDFieldWarning: Cell is missing an id field, this will become a hard error in future nbformat versions. You may want to use `normalize()` on your notebooks before validations (available since nbformat 5.1.4). Previous versions of nbformat are fixing this issue transparently, and will stop doing so in the future. 00:01:24 v #7 ! validate(nb) 00:01:24 v #8 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbconvert/filters/highlight.py:71: UserWarning: IPython3 lexer unavailable, falling back on Python 3 00:01:24 v #9 ! return _pygments_highlight( 00:01:26 v #10 ! [NbConvertApp] Writing 748057 bytes to /home/runner/work/polyglot/polyglot/apps/spiral/Supervisor.dib.html 00:01:26 v #11 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 906 } 00:01:26 d #12 spiral.run / dib / jupyter nbconvert / { exit_code = 0; jupyter_result_length = 906 } 00:01:26 d #13 runtime.execute_with_options / { file_name = pwsh; arguments = ["-c", "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/spiral/Supervisor.dib.html'; (Get-Content $path -Raw) -replace '(id=\\\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"]; options = { command = pwsh -c "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/spiral/Supervisor.dib.html'; (Get-Content $path -Raw) -replace '(id=\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:01:26 v #14 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 0 } 00:01:26 d #15 spiral.run / dib / html cell ids / { exit_code = 0; pwsh_replace_html_result_length = 0 } 00:01:26 d #16 spiral.run / dib / { exit_code = 0; result_length = 312901 } 00:00:00 d #1 writeDibCode / output: Fs / path: Supervisor.dib 00:00:00 d #2 parseDibCode / output: Fs / file: Supervisor.dib 00:00:00 d #1 persistCodeProject / packages: [Argu; FSharp.Control.AsyncSeq; FSharp.Json; ... ] / modules: [deps/spiral/lib/spiral/common.fsx; deps/spiral/lib/spiral/sm.fsx; deps/spiral/lib/spiral/crypto.fsx; ... ] / name: Supervisor / hash: / code.Length: 40585 00:00:00 d #2 buildProject / fullPath: /home/runner/work/polyglot/polyglot/target/Builder/Supervisor/Supervisor.fsproj 00:00:00 d #1 runtime.execute_with_options_async / { file_name = dotnet; arguments = US5_0 "publish "/home/runner/work/polyglot/polyglot/target/Builder/Supervisor/Supervisor.fsproj" --configuration Release --output "/home/runner/work/polyglot/polyglot/apps/spiral/dist" --runtime linux-x64"; options = { command = dotnet publish "/home/runner/work/polyglot/polyglot/target/Builder/Supervisor/Supervisor.fsproj" --configuration Release --output "/home/runner/work/polyglot/polyglot/apps/spiral/dist" --runtime linux-x64; cancellation_token = None; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot/target/Builder/Supervisor" } } 00:00:00 v #2 > Determining projects to restore... 00:00:01 v #3 > Paket version 9.0.2+a9b12aaeb8d8d5e47a415a3442b7920ed04e98e0 00:00:01 v #4 > The last full restore is still up to date. Nothing left to do. 00:00:01 v #5 > Total time taken: 0 milliseconds 00:00:01 v #6 > Paket version 9.0.2+a9b12aaeb8d8d5e47a415a3442b7920ed04e98e0 00:00:01 v #7 > Restoring /home/runner/work/polyglot/polyglot/target/Builder/Supervisor/Supervisor.fsproj 00:00:01 v #8 > Starting restore process. 00:00:01 v #9 > Total time taken: 0 milliseconds 00:00:02 v #10 > Restored /home/runner/work/polyglot/polyglot/target/Builder/Supervisor/Supervisor.fsproj (in 289 ms). 00:00:29 v #11 > Supervisor -> /home/runner/work/polyglot/polyglot/target/Builder/Supervisor/bin/Release/net9.0/linux-x64/Supervisor.dll 00:00:30 v #12 > Supervisor -> /home/runner/work/polyglot/polyglot/apps/spiral/dist 00:00:30 d #13 runtime.execute_with_options_async / { exit_code = 0; output_length = 713; options = { command = dotnet publish "/home/runner/work/polyglot/polyglot/target/Builder/Supervisor/Supervisor.fsproj" --configuration Release --output "/home/runner/work/polyglot/polyglot/apps/spiral/dist" --runtime linux-x64; cancellation_token = None; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot/target/Builder/Supervisor" } } 00:00:00 d #1 spiral.main / { args = Array(MutCell(["dib", "--path", "Eval.dib", "--retries", "3"])) } 00:00:00 d #2 runtime.execute_with_options / { file_name = dotnet; arguments = ["repl", "--exit-after-run", "--run", "/home/runner/work/polyglot/polyglot/apps/spiral/Eval.dib", "--output-path", "/home/runner/work/polyglot/polyglot/apps/spiral/Eval.dib.ipynb"]; options = { command = dotnet repl --exit-after-run --run "/home/runner/work/polyglot/polyglot/apps/spiral/Eval.dib" --output-path "/home/runner/work/polyglot/polyglot/apps/spiral/Eval.dib.ipynb"; cancellation_token = None; environment_variables = Array(MutCell([("TRACE_LEVEL", "Verbose"), ("AUTOMATION", "True")])); on_line = None; stdin = None; trace = false; working_directory = None } } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ # Eval (Polyglot) > > ── fsharp ────────────────────────────────────────────────────────────────────── > #r > @"../../../../../../../.nuget/packages/fsharp.control.asyncseq/3.2.1/lib/netstan > dard2.1/FSharp.Control.AsyncSeq.dll" > #r > @"../../../../../../../.nuget/packages/system.reactive/6.0.1-preview.1/lib/net6. > 0/System.Reactive.dll" > #r > @"../../../../../../../.nuget/packages/system.reactive.linq/6.0.1-preview.1/lib/ > netstandard2.0/System.Reactive.Linq.dll" > #r > @"../../../../../../../.nuget/packages/argu/6.2.4/lib/netstandard2.0/Argu.dll" > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.http.connections.com > mon/7.0.0/lib/net7.0/Microsoft.AspNetCore.Http.Connections.Common.dll" > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.http.connections.cli > ent/7.0.0/lib/net7.0/Microsoft.AspNetCore.Http.Connections.Client.dll" > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.signalr.common/7.0.0 > /lib/net7.0/Microsoft.AspNetCore.SignalR.Common.dll" > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.signalr.client/7.0.0 > /lib/net7.0/Microsoft.AspNetCore.SignalR.Client.dll" > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.signalr.client.core/ > 7.0.0/lib/net7.0/Microsoft.AspNetCore.SignalR.Client.Core.dll" > #r > @"../../../../../../../.nuget/packages/fsharp.json/0.4.1/lib/netstandard2.0/FSha > rp.Json.dll" > #r > @"../../../../../../../.nuget/packages/system.management/7.0.0/lib/netstandard2. > 0/System.Management.dll" > > ── fsharp ────────────────────────────────────────────────────────────────────── > #r > @"../../../../../../../.nuget/packages/fsharpx.collections/3.1.0/lib/netstandard > 2.0/FSharpx.Collections.dll" > #r > @"../../../../../../../.nuget/packages/hopac/0.5.1/lib/netstandard2.0/Hopac.dll" > #r > @"../../../../../../../.nuget/packages/hopac/0.5.1/lib/netstandard2.0/Hopac.Core > .dll" > #r > @"../../../../../../../.nuget/packages/fparsec/2.0.0-beta2/lib/netstandard2.1/FP > arsec.dll" > #r > @"../../../../../../../.nuget/packages/fparsec/2.0.0-beta2/lib/netstandard2.1/FP > arsecCS.dll" > > ── fsharp ────────────────────────────────────────────────────────────────────── > #if _LINUX > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.linux-x6 > 4/9.0.3/runtimes/linux-x64/lib/net9.0/Microsoft.AspNetCore.dll" > #else > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.win-x64/ > 9.0.3/runtimes/win-x64/lib/net9.0/Microsoft.AspNetCore.dll" > #endif > > #if _LINUX > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.linux-x6 > 4/9.0.3/runtimes/linux-x64/lib/net9.0/Microsoft.AspNetCore.SignalR.dll" > #else > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.win-x64/ > 9.0.3/runtimes/win-x64/lib/net9.0/Microsoft.AspNetCore.SignalR.dll" > #endif > > #if _LINUX > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.linux-x6 > 4/9.0.3/runtimes/linux-x64/lib/net9.0/Microsoft.AspNetCore.SignalR.Core.dll" > #else > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.win-x64/ > 9.0.3/runtimes/win-x64/lib/net9.0/Microsoft.AspNetCore.SignalR.Core.dll" > #endif > > #if _LINUX > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.linux-x6 > 4/9.0.3/runtimes/linux-x64/lib/net9.0/Microsoft.AspNetCore.Cors.dll" > #else > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.win-x64/ > 9.0.3/runtimes/win-x64/lib/net9.0/Microsoft.AspNetCore.Cors.dll" > #endif > > #if _LINUX > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.linux-x6 > 4/9.0.3/runtimes/linux-x64/lib/net9.0/Microsoft.AspNetCore.Http.Abstractions.dll > " > #else > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.win-x64/ > 9.0.3/runtimes/win-x64/lib/net9.0/Microsoft.AspNetCore.Http.Abstractions.dll" > #endif > > #if _LINUX > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.linux-x6 > 4/9.0.3/runtimes/linux-x64/lib/net9.0/Microsoft.AspNetCore.Connections.Abstracti > ons.dll" > #else > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.win-x64/ > 9.0.3/runtimes/win-x64/lib/net9.0/Microsoft.AspNetCore.Connections.Abstractions. > dll" > #endif > > #if _LINUX > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.linux-x6 > 4/9.0.3/runtimes/linux-x64/lib/net9.0/Microsoft.AspNetCore.Hosting.Abstractions. > dll" > #else > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.win-x64/ > 9.0.3/runtimes/win-x64/lib/net9.0/Microsoft.AspNetCore.Hosting.Abstractions.dll" > #endif > > #if _LINUX > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.linux-x6 > 4/9.0.3/runtimes/linux-x64/lib/net9.0/Microsoft.AspNetCore.Http.Connections.dll" > #else > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.win-x64/ > 9.0.3/runtimes/win-x64/lib/net9.0/Microsoft.AspNetCore.Http.Connections.dll" > #endif > > #if _LINUX > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.linux-x6 > 4/9.0.3/runtimes/linux-x64/lib/net9.0/Microsoft.AspNetCore.Routing.dll" > #else > #r > @"../../../../../../../.nuget/packages/microsoft.aspnetcore.app.runtime.win-x64/ > 9.0.3/runtimes/win-x64/lib/net9.0/Microsoft.AspNetCore.Routing.dll" > #endif > > ── fsharp ────────────────────────────────────────────────────────────────────── > #r > @"../../../../../../../.nuget/packages/microsoft.extensions.logging/9.0.0/lib/ne > t9.0/Microsoft.Extensions.Logging.dll" > #r > @"../../../../../../../.nuget/packages/microsoft.extensions.logging.abstractions > /9.0.0/lib/net9.0/Microsoft.Extensions.Logging.Abstractions.dll" > #r > @"../../../../../../../.nuget/packages/microsoft.extensions.dependencyinjection. > abstractions/9.0.0/lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstracti > ons.dll" > > ── fsharp ────────────────────────────────────────────────────────────────────── > open spiral_compiler > > ── fsharp ────────────────────────────────────────────────────────────────────── > #if !INTERACTIVE > open Lib > #endif > > ── fsharp ────────────────────────────────────────────────────────────────────── > open Common > open SpiralFileSystem.Operators > open Microsoft.AspNetCore.SignalR.Client > > ── fsharp ────────────────────────────────────────────────────────────────────── > open System > open System.Collections.Generic > open System.IO > open System.Text > open System.Threading > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## mapErrors > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline mapErrors (severity, errors, lastTopLevelIndex) allCode = > let allCodeLineLength = > allCode |> SpiralSm.split "\n" |> Array.length > > errors > |> List.map (fun (_, error) -> > match error with > | FatalError message -> > ( > severity, message, 0, ("", (0, 0), (0, 0)) > ) > |> List.singleton > | TracedError data -> > data.trace > |> List.truncate 5 > |> List.append [[ data.message ]] > |> List.map (fun message -> > ( > severity, message, 0, ("", (0, 0), (0, 0)) > ) > ) > | PackageErrors data > | TokenizerErrors data > | ParserErrors data > | TypeErrors data -> > data.errors > |> List.filter (fun ((rangeStart, _), _) -> > trace Debug (fun () -> $"Eval.mapErrors / rangeStart.line: > {rangeStart.line} / lastTopLevelIndex: {lastTopLevelIndex} / allCodeLineLength: > {allCodeLineLength} / filtered: {rangeStart.line > allCodeLineLength}") _locals > rangeStart.line > allCodeLineLength > ) > |> List.map (fun ((rangeStart, rangeEnd), message) -> > ( > severity, > message, > 0, > ( > (data.uri |> System.IO.Path.GetFileName), > ( > (match lastTopLevelIndex with > | Some i when rangeStart.line >= i + > allCodeLineLength + 3 -> > rangeStart.line - allCodeLineLength - 2 > | _ -> rangeStart.line - allCodeLineLength), > (match lastTopLevelIndex with > | Some i when rangeStart.line >= i + > allCodeLineLength + 3 -> > rangeStart.character - 4 > | _ -> rangeStart.character) > ), > ( > (match lastTopLevelIndex with > | Some i when rangeStart.line >= i + > allCodeLineLength + 3 -> > rangeEnd.line - allCodeLineLength - 2 > | _ -> rangeEnd.line - allCodeLineLength), > (match lastTopLevelIndex with > | Some i when rangeStart.line >= i + > allCodeLineLength + 3 -> > rangeEnd.character - 4 > | _ -> rangeEnd.character) > ) > ) > ) > ) > ) > |> List.collect id > |> List.toArray > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### workspaceRoot > > ── fsharp ────────────────────────────────────────────────────────────────────── > let workspaceRoot = SpiralFileSystem.get_workspace_root () > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### targetDir > > ── fsharp ────────────────────────────────────────────────────────────────────── > let targetDir = workspaceRoot </> "target/spiral_Eval" > [[ targetDir ]] > |> List.iter (fun dir -> if Directory.Exists dir |> not then > Directory.CreateDirectory dir |> ignore) > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## allCode > > ── fsharp ────────────────────────────────────────────────────────────────────── > let mutable allCode = "" > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### allPackages > > ── fsharp ────────────────────────────────────────────────────────────────────── > let mutable allPackages : string [[]] = [[||]] > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## allCodeReal > > ── fsharp ────────────────────────────────────────────────────────────────────── > let mutable allCodeReal = "" > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## traceToggle > > ── fsharp ────────────────────────────────────────────────────────────────────── > let mutable traceToggle = false > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## startTokenRangeWatcher > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline startTokenRangeWatcher () = > if [[ "dotnet-repl" ]] |> List.contains spiral_compiler.assemblyName > then new_disposable (fun () -> ()) > else > let tokensDir = targetDir </> "tokens" > > [[ tokensDir ]] > |> List.iter (fun dir -> if Directory.Exists dir |> not then > Directory.CreateDirectory dir |> ignore) > > let stream, disposable = FileSystem.watchDirectory (fun _ -> false) > tokensDir > > try > let existingFilesChild = > tokensDir > |> System.IO.Directory.GetDirectories > |> Array.map (fun codeDir -> async { > try > let tokensPath = codeDir </> "tokens.json" > if tokensPath |> File.Exists |> not then > let spiralCodePath = codeDir </> "main.spi" > let spiralRealCodePath = codeDir </> > "main_real.spir" > let spiralExists = spiralCodePath |> > System.IO.File.Exists > let spiralRealExists = spiralRealCodePath |> > System.IO.File.Exists > if spiralExists |> not && spiralRealExists |> not > then do! codeDir |> > SpiralFileSystem.delete_directory_async |> Async.Ignore > else > let! tokens = > if spiralExists then spiralCodePath else > spiralRealCodePath > |> Supervisor.getFileTokenRange None None > match tokens with > | Some tokens -> > do! > tokens > |> FSharp.Json.Json.serialize > |> SpiralFileSystem.write_all_text_async > tokensPath > | None -> > trace Verbose (fun () -> > $"Eval.startTokenRangeWatcher / GetDirectories / tokens: None") _locals > with ex -> > trace Critical (fun () -> $"Eval.startTokenRangeWatcher > / GetDirectories / ex: {ex |> SpiralSm.format_exception}") _locals > }) > |> Async.Parallel > |> Async.Ignore > > let streamAsyncChild = > stream > |> FSharp.Control.AsyncSeq.iterAsyncParallel (fun (ticks, event) > -> > match event with > | FileSystem.FileSystemChange.Changed (codePath, _) > when [[ "main.spi"; "main_real.spir" ]] > |> List.contains (System.IO.Path.GetFileName > codePath) > -> > async { > let hashDir = codePath |> > System.IO.Directory.GetParent > let hashHex = hashDir.Name > let codePath = tokensDir </> codePath > let tokensPath = tokensDir </> hashHex </> > "tokens.json" > // do! Async.Sleep 30 > let rec loop retry = async { > let! tokens = codePath |> > Supervisor.getFileTokenRange None None > if retry = 3 || tokens <> Some [[||]] > then return tokens, retry > else > trace Debug > (fun () -> $"Eval.startTokenRangeWatcher > / iterAsyncParallel") > (fun () -> $"retry: {retry} / tokens: > %A{tokens}") > do! Async.Sleep 30 > return! loop (retry + 1) > } > let! tokens, retries = loop 1 > match tokens with > | Some tokens -> > do! > tokens > |> FSharp.Json.Json.serialize > |> SpiralFileSystem.write_all_text_exists > tokensPath > | None -> > trace Debug > (fun () -> $"Eval.startTokenRangeWatcher / > iterAsyncParallel") > (fun () -> $"retries: {retries} / tokens: > {tokens}") > } > |> Async.retryAsync 3 > |> Async.map (Result.toOption >> Option.defaultValue ()) > | _ -> () |> Async.init > ) > > async { > do! Async.Sleep 3000 > existingFilesChild |> Async.StartImmediate > streamAsyncChild |> Async.Start > } > |> Async.Start > with ex -> > trace Critical (fun () -> $"Eval.startTokenRangeWatcher / ex: {ex |> > SpiralSm.format_exception}") _locals > > disposable > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## startCommandsWatcher > > ── fsharp ────────────────────────────────────────────────────────────────────── > let startCommandsWatcher (uriServer : string) = > let commandsDir = targetDir </> "eval_commands" > let commandHistoryDir = targetDir </> "eval_command_history" > [[ commandsDir; commandHistoryDir ]] > |> List.iter (fun dir -> if Directory.Exists dir |> not then > Directory.CreateDirectory dir |> ignore) > > Directory.EnumerateFiles commandsDir |> Seq.iter File.Delete > > let stream, disposable = > commandsDir > |> FileSystem.watchDirectory (function > | FileSystem.FileSystemChange.Created _ -> true > | _ -> false > ) > > let connection = HubConnectionBuilder().WithUrl(uriServer).Build() > connection.StartAsync() |> Async.AwaitTask |> Async.Start > // let _ = connection.On<string>("ServerToClientMsg", fun x -> > // printfn $"ServerToClientMsg: '{x}'" > // ) > > stream > |> FSharp.Control.AsyncSeq.iterAsyncParallel (fun (ticks, event) -> async { > let _locals () = $"ticks: {ticks} / event: {event} / {_locals ()}" > trace Verbose (fun () -> "Eval.startCommandsWatcher / > iterAsyncParallel") _locals > > match event with > | FileSystem.FileSystemChange.Created (path, Some json) -> > try > let fullPath = commandsDir </> path > let! result = > connection.InvokeAsync<string>("ClientToServerMsg", json) |> Async.AwaitTask > let commandHistoryPath = commandHistoryDir </> path > do! fullPath |> SpiralFileSystem.move_file_async > commandHistoryPath |> Async.Ignore > if result |> SpiralSm.trim |> String.length > 0 then > let resultPath = commandHistoryDir </> > $"{Path.GetFileNameWithoutExtension path}_result.json" > do! result |> SpiralFileSystem.write_all_text_async > resultPath > with ex -> > let _locals () = $"ex: {ex |> SpiralSm.format_exception} / > {_locals ()}" > trace Critical (fun () -> "Eval.startCommandsWatcher / > iterAsyncParallel") _locals > | _ -> () > }) > |> Async.StartChild > |> Async.Ignore > |> Async.Start > > new_disposable (fun () -> > disposable.Dispose () > ) > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## prepareSpiral > > ── fsharp ────────────────────────────────────────────────────────────────────── > let prepareSpiral rawCellCode lines = > let lastBlock = > lines > |> Array.tryFindBack (fun line -> > line |> String.length > 0 > && line.[[0]] <> ' ' > ) > > let hasMain = > lastBlock > |> Option.exists (fun line -> > line |> SpiralSm.starts_with "inl main " > || line |> SpiralSm.starts_with "let main " > ) > > if hasMain > then rawCellCode, None > else > let lastTopLevelIndex, _ = > (lines |> Array.indexed, (None, false)) > ||> Array.foldBack (fun (i, line) (lastTopLevelIndex, finished) -> > // trace Verbose (fun () -> $"Eval.prepareSpiral / i: {i} / > line: '{line}' / lastTopLevelIndex: {lastTopLevelIndex} / finished: {finished}") > _locals > match line with > | _ when finished -> lastTopLevelIndex, true > | "" -> lastTopLevelIndex, false > | line when > line |> SpiralSm.starts_with " " > || line |> SpiralSm.starts_with "// " -> lastTopLevelIndex, > false > | line when > line |> SpiralSm.starts_with "open " > || line |> SpiralSm.starts_with "prototype " > || line |> SpiralSm.starts_with "instance " > || line |> SpiralSm.starts_with "type " > || line |> SpiralSm.starts_with "union " > || line |> SpiralSm.starts_with "nominal " -> > lastTopLevelIndex, true > | line when > line |> SpiralSm.starts_with "inl " > || line |> SpiralSm.starts_with "and " > || line |> SpiralSm.starts_with "let " -> > let m = > System.Text.RegularExpressions.Regex.Match ( > line, > @"^(?:and +)?(inl|let) +((?:[[{( > ]]*)?[[~\(\w]]+[[\w\d']]*(?:|[[\w\d']]+[[ }]]*(?:&? *[[\w\d']]*\))?| > *[[~\w]][[\w\d']]*\)|, *[[~\w]][[\w\d']]*)) +[[:=]](?! +function)" > ) > trace Verbose (fun () -> $"Eval.prepareSpi / m: '{m}' / > m.Groups.Count: {m.Groups.Count}") _locals > if m.Groups.Count = 3 > then Some i, false > else lastTopLevelIndex, true > | _ -> Some i, false > ) > let code = > match lastTopLevelIndex with > | Some lastTopLevelIndex -> > lines > |> Array.mapi (fun i line -> > match i with > | i when i < lastTopLevelIndex -> line > | i when i = lastTopLevelIndex -> $"\nlet main () =\n > {line}" > | _ when line |> SpiralSm.trim = "" -> "" > | _ -> $" {line}" > ) > |> SpiralSm.concat "\n" > | None -> $"{rawCellCode}\n\ninl main () = ()\n" > code, lastTopLevelIndex > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## processSpiralOutput > > ── fsharp ────────────────────────────────────────────────────────────────────── > let processSpiralOutput > (props : {| > printCode: bool > traceLevel: TraceLevel > builderCommands: string array > lastTopLevelIndex: int option > backend: Supervisor.Backend > cancellationToken: _ > spiralErrors: _ > code: string > outputPath: string > isReal: bool > |}) > = async { > let inline _trace (fn : unit -> string) = > if props.traceLevel = Verbose > then trace Info (fun () -> $"Eval.processSpiralOutput / props: {props |> > FSharp.Json.Json.serialize |> SpiralSm.ellipsis_end 400} / {fn ()}") _locals > else fn () |> System.Console.WriteLine > > if props.printCode > && props.backend <> Supervisor.Gleam > && props.backend <> Supervisor.Python > && props.backend <> Supervisor.Cpp then > let ext = props.outputPath |> System.IO.Path.GetExtension > _trace (fun () -> if props.builderCommands.Length > 0 then > $"{ext}:\n{props.code}\n" else props.code) > > let workspaceRootExternal = > let currentDir = System.IO.Directory.GetCurrentDirectory () |> > SpiralSm.to_lower > let workspaceRoot = workspaceRoot |> SpiralSm.to_lower > if currentDir |> SpiralSm.starts_with workspaceRoot > then None > else Some workspaceRoot > > let! spiralBuilderResults = > match props.builderCommands, props.lastTopLevelIndex with > | [[||]], _ | _, None -> [[||]] |> Async.init > | builderCommands, _ -> > builderCommands > |> Array.map (fun builderCommand -> > let path = > workspaceRoot </> > $@"deps/spiral/workspace/target/release/spiral{SpiralPlatform.get_executable_suf > fix ()}" > |> System.IO.Path.GetFullPath > let commands = > if props.backend = Supervisor.Fsharp > && ( > builderCommand |> SpiralSm.starts_with "rust" > || builderCommand |> SpiralSm.starts_with > "typescript" > || builderCommand |> SpiralSm.starts_with "python" > ) > then [[| $"{path} fable --fs-path \"{props.outputPath}\" > --command \"{builderCommand}\"" |]] > elif props.backend = Supervisor.Python > && builderCommand |> SpiralSm.starts_with "cuda" > then [[| $"{path} {builderCommand} --py-path > \"{props.outputPath}\"" |]] > elif props.backend = Supervisor.Cpp > && builderCommand |> SpiralSm.starts_with "cpp" > then [[| $"{path} {builderCommand} --cpp-path > \"{props.outputPath}\"" |]] > elif props.backend = Supervisor.Gleam > && builderCommand |> SpiralSm.starts_with "gleam" > then [[| $"{path} {builderCommand} --gleam-path > \"{props.outputPath}\"" |]] > else [[||]] > builderCommand, commands > ) > |> Array.filter (fun (_, commands) -> commands.Length > 0) > |> Array.collect (fun (builderCommand, commands) -> > commands > |> Array.map (fun command -> async { > let! exitCode, result = > SpiralRuntime.execution_options (fun x -> > { x with > l0 = command > l1 = props.cancellationToken > l2 = [[| > "AUTOMATION", spiral_compiler.assemblyName = > "dotnet-repl" |> string > "TRACE_LEVEL", $"%A{if props.printCode then > props.traceLevel else Info}" > |]] > l6 = workspaceRootExternal > } > ) > |> SpiralRuntime.execute_with_options_async > trace Debug > (fun () -> $"Eval.processSpiralOutput / spiral cli") > (fun () -> $"exitCode: {exitCode} / builderCommand: > {builderCommand} / command: {command} / result: {result |> SpiralSm.ellipsis_end > 400} / {_locals ()}") > return > if exitCode = 0 > then {| code = result; eval = false; builderCommand = > builderCommand |} |> Ok > else result |> Error > }) > ) > |> Async.Parallel > > let hasEval = > props.backend = Supervisor.Fsharp > && props.builderCommands |> Array.exists (fun x -> x |> > SpiralSm.starts_with "fsharp") > > let outputResult = > if props.builderCommands.Length > 0 && not hasEval > then None > else > let code = > if props.builderCommands.Length > 1 > then > let header = "System.Console.WriteLine \".fsx output:\"\n" > $"{header}{props.code}" > else props.code > Some (Ok [[ {| code = code; eval = true; builderCommand = "" |} ]]) > > match outputResult, spiralBuilderResults with > | Some outputResult, [[||]] -> > return outputResult, [[||]] > | None, [[||]] -> > return Ok [[ {| code = "()"; eval = true; builderCommand = "" |} ]], > [[||]] > | _, spiralBuilderResults -> > try > let spiralResults = > match outputResult with > | Some (Ok code) -> > spiralBuilderResults > |> Array.append (code |> List.map Ok |> List.toArray) > | _ -> spiralBuilderResults > let codes = > spiralResults > |> Array.map (fun spiralBuilderResult' -> > let commandResult, errors = > match spiralBuilderResult' with > | Ok result when result.eval = false -> > let result' = > result.code > |> > FSharp.Json.Json.deserialize<Map<string,string>> > let result = > match result' |> Map.tryFind "command_result" > with > | Some result'' -> > result'' > |> > FSharp.Json.Json.deserialize<Map<string,string>> > |> Map.add "builderCommand" > result.builderCommand > | None -> Map.empty > result, [[||]] > | Ok result when result.eval = true -> > let result = > [[ > "extension", "fsx" > "code", result.code > "output", "" > ]] > |> Map.ofList > result, [[||]] > | Error error -> > Map.empty, > [[| > ( > TraceLevel.Critical, > $"Eval.processSpiralOutput / evalResult error / errors[[0]] / outputPath: > {props.outputPath} / builderCommands: %A{props.builderCommands} / > spiralBuilderResult': %A{spiralBuilderResult'} / error: %A{error}", 0, ("", (0, > 0), (0, 0)) > ) > |]] > | _ -> > Map.empty, [[||]] > > if errors |> Array.isEmpty |> not > then Error (Exception $"Eval.processSpiralOutput / > evalResult errors / Exception / commandResult: %A{commandResult}"), errors > else > let extension = commandResult.[["extension"]] > let code = commandResult.[["code"]] > let output = commandResult.[["output"]] > let builderCommand = > commandResult > |> Map.tryFind "builderCommand" > |> Option.defaultValue "" > > let backendInfo = > match props.backend, builderCommand with > | Supervisor.Fsharp, builderCommand > when builderCommand |> SpiralSm.contains " " -> > $" ({builderCommand})" > | Supervisor.Fsharp, _ -> "" > | _ -> $" ({props.backend})" > > let eval = output = "" && extension = "fsx" > > if props.printCode && not eval > then _trace (fun () -> > $""".{extension}{backendInfo}:{'\n'}{code}""") > > trace Debug > (fun () -> $"Eval.processSpiralOutput / result") > (fun () -> $"builderCommand: {builderCommand} / > extension: {extension} / commandResult: {commandResult |> > FSharp.Json.Json.serialize |> SpiralSm.ellipsis_end 400}/ {_locals ()}") > > let code = > if props.printCode > || spiralResults.Length > 1 > || props.builderCommands.Length > 1 > then > if eval > then code > else > let header = $".{extension} > output{backendInfo}:\n" > $"""{if output |> SpiralSm.contains "\n" > then "\n" else ""}{header}{output}""" > elif eval > then code > else output > Ok {| code = code; eval = eval; builderCommand = > builderCommand |}, [[||]] > ) > trace Debug > (fun () -> $"Eval.processSpiralOutput / codes") > (fun () -> > let props = {| props with cancellationToken = None |} > $"codes: {codes |> FSharp.Json.Json.serialize |> > SpiralSm.ellipsis_end 400} / spiralResults: {spiralResults |> > FSharp.Json.Json.serialize |> SpiralSm.ellipsis_end 400} / spiralBuilderResults: > {spiralBuilderResults |> FSharp.Json.Json.serialize |> SpiralSm.ellipsis_end > 400} / props: {props |> FSharp.Json.Json.serialize |> SpiralSm.ellipsis_end 400} > / {_locals ()}") > return > (((Ok [[]]), [[||]]), codes) > ||> Array.fold (fun (acc_code, acc_errors) (code, errors) -> > match code, acc_code with > | Ok code, Ok acc_code -> > let errors = > acc_errors > |> Array.append errors > |> Array.append props.spiralErrors > let errors = > if errors |> Array.isEmpty > then errors > else > let code = $"%A{code}" > errors > |> Array.append [[| > TraceLevel.Critical, > $"Eval.processSpiralOutput / errors / errors[[-1]] / outputPath: > {props.outputPath} / builderCommands: %A{props.builderCommands} / code: {code |> > SpiralSm.ellipsis_end 400}", 0, ("", (0, 0), (0, 0)) > |]] > Ok (code :: acc_code), errors > | Error ex, _ > | _, Error ex -> > Error (Exception $"Eval.processSpiralOutput / -1 / > Exception / spiralBuilderResults: %A{spiralBuilderResults} / ex: {ex |> > SpiralSm.format_exception}"), > acc_errors |> Array.append errors > ) > with ex -> > trace Critical (fun () -> $"Eval.processSpiralOutput / try 2 ex / > spiralBuilderResults: %A{spiralBuilderResults} / ex: {ex |> > SpiralSm.format_exception}") _locals > return > Error (Exception $"Eval.processSpiralOutput / try 2 ex / > Exception / spiralBuilderResults: %A{spiralBuilderResults} / ex: {ex |> > SpiralSm.format_exception}"), > [[| > ( > TraceLevel.Critical, $"Eval.processSpiralOutput / try 2 > ex / errors[[0]] / spiralBuilderResults: %A{spiralBuilderResults} / ex: {ex |> > SpiralSm.format_exception}", 0, ("", (0, 0), (0, 0)) > ) > |]] > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## tryGetPropertyValue > > ── fsharp ────────────────────────────────────────────────────────────────────── > let tryGetPropertyValue (propertyName: string) (obj: obj) = > let objType = obj.GetType () > let propertyInfo = propertyName |> objType.GetProperty > if propertyInfo <> null > then propertyInfo.GetValue (obj, null) |> Some > else None > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## evalAsync > > ── fsharp ────────────────────────────────────────────────────────────────────── > let rec evalAsync > retry > (props : {| > rawCellCode: _ > lines: _ > isReal: _ > builderCommands: _ array > isCache: _ > timeout: _ > cancellationToken: _ > printCode: _ > traceLevel: _ > fsi_eval: _ > |}) > = async { > try > let cellCode, lastTopLevelIndex = prepareSpiral props.rawCellCode > props.lines > let newAllCode = > if props.isReal > then $"{allCodeReal}\n\n{cellCode}" > else $"{allCode}\n\n{cellCode}" > > let buildBackends = > if props.builderCommands.Length = 0 > then [[| Supervisor.Fsharp |]] > else > props.builderCommands > |> Array.map (fun x -> > if x |> SpiralSm.starts_with "gleam" > then Supervisor.Gleam > elif x |> SpiralSm.starts_with "cuda" > then Supervisor.Python > elif x |> SpiralSm.starts_with "cpp" > then Supervisor.Cpp > else Supervisor.Fsharp > ) > |> Array.distinct > > trace Verbose > (fun () -> $"Eval.eval") > (fun () -> $"lastTopLevelIndex: {lastTopLevelIndex} / > builderCommands: %A{props.builderCommands} / buildBackends: %A{buildBackends} / > isReal: {props.isReal} / {_locals ()}") > > let! buildCodeResults = > buildBackends > |> Array.map (fun backend -> async { > let! result = > if props.isReal > then Supervisor.Spir newAllCode > else > Supervisor.Spi > (newAllCode, if allCodeReal = "" then None else Some > allCodeReal) > |> Supervisor.buildCode backend allPackages props.isCache > props.timeout props.cancellationToken > return backend, result > }) > |> Async.Parallel > |> Async.catch > |> Async.runWithTimeoutAsync props.timeout > > match buildCodeResults with > | Some (Ok buildCodeResults) -> > let! result, errors = > ((Ok [[]], [[||]]), buildCodeResults) > ||> Async.fold (fun acc buildCodeResult -> async { > match buildCodeResult with > | backend, (_, (outputPath, Some code), spiralErrors) -> > let spiralErrors = > allCode |> mapErrors (Warning, spiralErrors, > lastTopLevelIndex) > let! result = > processSpiralOutput > {| > printCode = props.printCode > traceLevel = props.traceLevel > builderCommands = props.builderCommands > lastTopLevelIndex = lastTopLevelIndex > backend = backend > cancellationToken = props.cancellationToken > spiralErrors = spiralErrors > code = code > outputPath = outputPath > isReal = props.isReal > |} > match result, acc with > | (Ok code, errors), (Ok acc_code, acc_errors) -> > return Ok (acc_code @ code), acc_errors |> > Array.append errors > | (Error ex, errors), _ | _, (Error ex, errors) -> > return > Error (Exception $"Eval.evalAsync / > processSpiralOutput / Exception / buildCodeResult: %A{buildCodeResult |> > FSharp.Json.Json.serialize |> SpiralSm.ellipsis_end 400} / ex: {ex |> > SpiralSm.format_exception}"), > errors |> Array.append errors > | _, (_, _, errors) when errors |> List.isEmpty |> not -> > return errors.[[0]] |> fst |> Exception |> Error, > allCode |> mapErrors (TraceLevel.Critical, errors, > lastTopLevelIndex) > | _ -> return acc > }) > let cancellationToken = defaultArg props.cancellationToken > System.Threading.CancellationToken.None > match result, errors with > | Ok code, [[||]] -> > let code, eval = > code > |> List.map (fun code -> > if code.eval > then None, Some code.code > else Some code.code, None > ) > |> List.unzip > let code = code |> List.choose id > let eval = eval |> List.choose id > > trace Debug > (fun () -> $"Eval.eval") > (fun () -> $"eval: {eval |> FSharp.Json.Json.serialize |> > SpiralSm.ellipsis_end 400} / code: {code |> FSharp.Json.Json.serialize |> > SpiralSm.ellipsis_end 400} / {_locals ()}") > > let ch, errors = > match eval, code with > | [[]], [[]] -> > Choice2Of2 (Exception $"Eval.evalAsync / eval=[[]] / > code=[[]] / buildCodeResults: %A{buildCodeResults} / code: %A{code}"), errors > | [[ eval ]], [[]] -> > let eval = > if eval |> SpiralSm.contains "<script" > then $"{eval}, \"text/html1\"" > else eval > let ch, errors2 = props.fsi_eval eval cancellationToken > let errors = > errors2 > // |> Array.map (fun (e1, e2, e3, _) -> > // (e1, e2, e3, ("", (0, 0), (0, 0))) > // ) > |> Array.append errors > ch, errors > | [[]], _ -> > let code = code |> List.rev |> String.concat "\n\n" > let code = > if props.printCode > then $"\"\"\"{code}\n\n\"\"\"" > else $"\"\"\"{code}\n\"\"\"" > let code = > if code |> SpiralSm.contains "<script" > then $"{code}, \"text/html2\"" > else code > let ch, errors2 = props.fsi_eval code cancellationToken > let errors = > errors2 > // |> Array.map (fun (e1, e2, e3, _) -> > // (e1, e2, e3, ("", (0, 0), (0, 0))) > // ) > |> Array.append errors > ch, errors > | _ -> > let code, errors = > ((Ok (code |> List.rev), [[||]]), eval) > ||> List.fold (fun (acc, acc_errors) eval -> > match acc with > | Error ch -> Error ch, acc_errors > | Ok acc -> > let eval = > if eval |> SpiralSm.contains "<script" > then $"{eval}, \"text/html3\"" > else eval > let ch, errors = props.fsi_eval eval > cancellationToken > let errors = > errors > // |> Array.map (fun (e1, e2, e3, _) -> > // (e1, e2, e3, ("", (0, 0), (0, > 0))) > // ) > |> Array.append acc_errors > match ch with > | Choice1Of2 v -> > let v = > v > |> tryGetPropertyValue > "ReflectionValue" > |> Option.map (fun x -> $"%A{x}") > |> Option.defaultValue "" > Ok (v :: acc), errors > | Choice2Of2 ex -> > trace Critical (fun () -> > $"Eval.evalAsync / fsi_eval fold Choice error / buildCodeResults: > %A{buildCodeResults} / ex: {ex |> SpiralSm.format_exception}") _locals > Error ch, errors > ) > match code with > | Error ch -> ch, errors > | Ok code -> > let code = > code > |> List.filter ((<>) "") > |> String.concat "\n\n" > > let code = > if props.builderCommands.Length > 0 && > eval.Length = 0 > then code > elif code |> SpiralSm.contains "\n\n\n" > then $"{code}\n\n" > else $"{code}\n" > > let code = > if props.printCode > then $"\"\"\"{code}\n\n\n\"\"\"" > else $"\"\"\"{code}\n\"\"\"" > let code = > if code |> SpiralSm.contains "<script" > then $"{code}, \"text/html4\"" > else code > let ch, errors2 = props.fsi_eval code > cancellationToken > let errors = > errors2 > // |> Array.map (fun (e1, e2, e3, _) -> > // (e1, e2, e3, ("", (0, 0), (0, 0))) > // ) > |> Array.append errors > ch, errors > match ch with > | Choice1Of2 v -> > if props.isReal > then allCodeReal <- newAllCode > else allCode <- newAllCode > return Ok(v), errors > | Choice2Of2 ex -> > return > Error (Exception $"Eval.evalAsync / -2 / Exception / ex: > {ex |> SpiralSm.format_exception} / buildCodeResults: {buildCodeResults |> > FSharp.Json.Json.serialize |> SpiralSm.ellipsis_end 400}"), > errors > | Ok code, errors -> > return > Error (Exception "Eval.evalAsync / errors / > buildCodeResults: %A{buildCodeResults} / code: %A{code}"), > errors > | Error ex, errors -> > let ex = ex |> SpiralSm.format_exception > if retry <= 3 && > (ex |> SpiralSm.contains "Expected one of: inl, let, union, > nominal, prototype, type, instance, and, open") > || (ex |> SpiralSm.contains "Unexpected end of block past > this token.") > then return! evalAsync (retry + 1) props > else > return > Error (Exception $"Eval.evalAsync / -1 / Exception / ex: > {ex} / buildCodeResults: {buildCodeResults |> FSharp.Json.Json.serialize |> > SpiralSm.ellipsis_end 1500}"), > errors > | Some (Error ex) -> > trace Critical (fun () -> $"Eval.evalAsync / buildCodeResults Error > / buildCodeResults: %A{buildCodeResults} / ex: {ex |> > SpiralSm.format_exception}") _locals > return > Error (Exception $"Eval.evalAsync / buildCodeResults Error / > Exception / buildCodeResults: %A{buildCodeResults} / ex: {ex |> > SpiralSm.format_exception}"), > [[| > ( > TraceLevel.Critical, $"Eval.evalAsync / buildCodeResults > Error / errors[[0]] / ex: {ex |> SpiralSm.format_exception} / buildCodeResults: > %A{buildCodeResults}", 0, ("", (0, 0), (0, 0)) > ) > |]] > | _ -> > return > Error (Exception $"Eval.evalAsync / buildCodeResults / Exception > / buildCodeResults: %A{buildCodeResults}"), > [[| > ( > TraceLevel.Critical, $"Eval.evalAsync / buildCodeResults > / errors[[0]] / buildCodeResults: %A{buildCodeResults}", 0, ("", (0, 0), (0, 0)) > ) > |]] > with ex -> > trace Critical (fun () -> $"Eval.evalAsync / try 1 ex / ex: {ex |> > SpiralSm.format_exception} / lines: %A{props.lines}") _locals > return > Error (Exception $"Eval.evalAsync / try 1 ex / Exception / ex: {ex > |> SpiralSm.format_exception} / lines: %A{props.lines}"), > [[| > ( > TraceLevel.Critical, $"Eval.evalAsync / try 1 ex / > errors[[0]] / ex: {ex |> SpiralSm.format_exception} / lines: %A{props.lines}", > 0, ("", (0, 0), (0, 0)) > ) > |]] > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## eval > > ── fsharp ────────────────────────────────────────────────────────────────────── > let inline eval > (fsi_eval: > string > -> System.Threading.CancellationToken > -> Choice<'a, Exception> * (TraceLevel * string * int * (string * (int * > int) * (int * int))) array) > (cancellationToken: Option<System.Threading.CancellationToken>) > (code: string) > = > trace Verbose > (fun () -> $"Eval.eval") > (fun () -> $"code: {code |> SpiralSm.ellipsis_end 400} / {_locals ()}") > > let rawCellCode = > code |> SpiralSm.replace "\r\n" "\n" > > let lines = rawCellCode |> SpiralSm.split "\n" > > if lines |> Array.exists (fun line -> line |> SpiralSm.starts_with "#r " && > line |> SpiralSm.ends_with "\"") then > let cancellationToken = defaultArg cancellationToken > System.Threading.CancellationToken.None > let code = > if code |> SpiralSm.contains "<script" > then $"{code}, \"text/html5\"" > else code > let ch, errors = fsi_eval code cancellationToken > trace Verbose (fun () -> $"Eval.eval / fsi_eval 1 / ch: %A{ch} / errors: > %A{errors}") _locals > match ch with > | Choice1Of2 v -> Ok(v), errors > | Choice2Of2 ex -> Error(ex), errors > else > let builderCommands = > lines > |> Array.choose (fun line -> > if line |> SpiralSm.starts_with "///! " > then line |> SpiralSm.split "///! " |> Array.tryItem 1 > else None > ) > > let packages = > lines > |> Array.choose (fun line -> > if line |> SpiralSm.starts_with "//// package=" > then line |> SpiralSm.split "=" |> Array.skip 1 |> > SpiralSm.concat "" |> Some > else None > ) > > allPackages <- packages |> Array.append allPackages |> Array.distinct > > let timeout = > lines > |> Array.tryPick (fun line -> > if line |> SpiralSm.starts_with "//// timeout=" > then line |> SpiralSm.split "=" |> Array.tryItem 1 |> Option.map > int > else None > ) > |> Option.defaultValue (60003 * 60 * 24) > > let boolArg def command = > lines > |> Array.tryPick (fun line -> > let text = $"//// {command}" > match line.[[0..text.Length-1]], line.[[text.Length..]] with > | head, "" when head = text -> > Some true > | head, _ when head = text -> > line |> SpiralSm.split "=" |> Array.tryItem 1 |> Option.map > ((<>) "false") > | _ -> None > ) > |> Option.defaultValue def > > let printCode = "print_code" |> boolArg false > let isTraceToggle = "trace_toggle" |> boolArg false > let isTrace = "trace" |> boolArg false > let isCache = "cache" |> boolArg false > let isReal = "real" |> boolArg false > let timeout_continue = "timeout_continue" |> boolArg false > > if isTraceToggle > then traceToggle <- not traceToggle > > let oldLevel = get_trace_level () > let traceLevel = > if isTrace || traceToggle > then Verbose > else Info > traceLevel > |> to_trace_level > |> set_trace_level > use _ = (new_disposable (fun () -> > oldLevel |> set_trace_level > )) > > evalAsync 1 > {| > rawCellCode = rawCellCode > lines = lines > isReal = isReal > builderCommands = builderCommands > isCache = isCache > timeout = timeout > cancellationToken = cancellationToken > printCode = printCode > traceLevel = traceLevel > fsi_eval = fsi_eval > |} > |> Async.runWithTimeout timeout > |> (fun x -> > match x with > | Some ((Ok x), a) -> Some ((Ok x), a) > | Some ((Error x), a) -> > trace Info (fun () -> $"Eval.eval / error / exception: > {x.GetType().FullName} / a: %A{a} / x: %A{x}") (fun () -> "") > Some ((Error x), a) > | _ -> None > ) > |> Option.defaultWith (fun () -> ( > let lines = lines |> SpiralSm.concat (string '\n') |> > SpiralSm.ellipsis_end 1500 > in > Error (Exception $"Eval.eval / Async.runWithTimeout / Exception / > timeout: {timeout} / timeout_continue: {timeout_continue} / lines: {lines}"), > [[| > ( > TraceLevel.Critical, $"Eval.eval / Async.runWithTimeout / > errors[[0]] / timeout: {timeout} / lines: {lines}", 0, ("", (0, 0), (0, 0)) > ) > |]] > )) 00:01:18 v #3 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 54248 } 00:01:18 d #4 runtime.execute_with_options / { file_name = jupyter; arguments = ["nbconvert", "/home/runner/work/polyglot/polyglot/apps/spiral/Eval.dib.ipynb", "--to", "html", "--HTMLExporter.theme=dark"]; options = { command = jupyter nbconvert "/home/runner/work/polyglot/polyglot/apps/spiral/Eval.dib.ipynb" --to html --HTMLExporter.theme=dark; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:01:18 v #5 ! [NbConvertApp] Converting notebook /home/runner/work/polyglot/polyglot/apps/spiral/Eval.dib.ipynb to html 00:01:18 v #6 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbformat/__init__.py:96: MissingIDFieldWarning: Cell is missing an id field, this will become a hard error in future nbformat versions. You may want to use `normalize()` on your notebooks before validations (available since nbformat 5.1.4). Previous versions of nbformat are fixing this issue transparently, and will stop doing so in the future. 00:01:18 v #7 ! validate(nb) 00:01:19 v #8 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbconvert/filters/highlight.py:71: UserWarning: IPython3 lexer unavailable, falling back on Python 3 00:01:19 v #9 ! return _pygments_highlight( 00:01:19 v #10 ! [NbConvertApp] Writing 465335 bytes to /home/runner/work/polyglot/polyglot/apps/spiral/Eval.dib.html 00:01:20 v #11 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 894 } 00:01:20 d #12 spiral.run / dib / jupyter nbconvert / { exit_code = 0; jupyter_result_length = 894 } 00:01:20 d #13 runtime.execute_with_options / { file_name = pwsh; arguments = ["-c", "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/spiral/Eval.dib.html'; (Get-Content $path -Raw) -replace '(id=\\\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"]; options = { command = pwsh -c "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/spiral/Eval.dib.html'; (Get-Content $path -Raw) -replace '(id=\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:01:20 v #14 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 0 } 00:01:20 d #15 spiral.run / dib / html cell ids / { exit_code = 0; pwsh_replace_html_result_length = 0 } 00:01:20 d #16 spiral.run / dib / { exit_code = 0; result_length = 55201 } 00:00:00 d #1 writeDibCode / output: Fs / path: Eval.dib 00:00:00 d #2 parseDibCode / output: Fs / file: Eval.dib polyglot/apps/spiral/build.ps1 / $env:CI:'true'
In [ ]:
{ pwsh ../lib/fsharp/build.ps1 -sequential 1 } | Invoke-Block
00:00:00 d #1 runtime.execute_with_options_async / { file_name = ../../deps/spiral/workspace/target/release/spiral; arguments = US5_0 "dib --path Async.dib --retries 3"; options = { command = ../../deps/spiral/workspace/target/release/spiral dib --path Async.dib --retries 3; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:18 d #2 runtime.execute_with_options_async / { exit_code = 0; output_length = 20460; options = { command = ../../deps/spiral/workspace/target/release/spiral dib --path Async.dib --retries 3; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:18 d #1 main / executeCommand / exitCode: 0 / command: ../../deps/spiral/workspace/target/release/spiral dib --path Async.dib --retries 3 00:00:18 d #3 runtime.execute_with_options_async / { file_name = ../../deps/spiral/workspace/target/release/spiral; arguments = US5_0 "dib --path AsyncSeq.dib --retries 3"; options = { command = ../../deps/spiral/workspace/target/release/spiral dib --path AsyncSeq.dib --retries 3; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:37 d #4 runtime.execute_with_options_async / { exit_code = 0; output_length = 12205; options = { command = ../../deps/spiral/workspace/target/release/spiral dib --path AsyncSeq.dib --retries 3; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:37 d #2 main / executeCommand / exitCode: 0 / command: ../../deps/spiral/workspace/target/release/spiral dib --path AsyncSeq.dib --retries 3 00:00:37 d #5 runtime.execute_with_options_async / { file_name = ../../deps/spiral/workspace/target/release/spiral; arguments = US5_0 "dib --path Common.dib --retries 3"; options = { command = ../../deps/spiral/workspace/target/release/spiral dib --path Common.dib --retries 3; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:54 d #6 runtime.execute_with_options_async / { exit_code = 0; output_length = 5846; options = { command = ../../deps/spiral/workspace/target/release/spiral dib --path Common.dib --retries 3; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:54 d #3 main / executeCommand / exitCode: 0 / command: ../../deps/spiral/workspace/target/release/spiral dib --path Common.dib --retries 3 00:00:54 d #7 runtime.execute_with_options_async / { file_name = ../../deps/spiral/workspace/target/release/spiral; arguments = US5_0 "dib --path CommonFSharp.dib --retries 3"; options = { command = ../../deps/spiral/workspace/target/release/spiral dib --path CommonFSharp.dib --retries 3; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = None } } 00:01:11 d #8 runtime.execute_with_options_async / { exit_code = 0; output_length = 4728; options = { command = ../../deps/spiral/workspace/target/release/spiral dib --path CommonFSharp.dib --retries 3; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = None } } 00:01:11 d #4 main / executeCommand / exitCode: 0 / command: ../../deps/spiral/workspace/target/release/spiral dib --path CommonFSharp.dib --retries 3 00:01:11 d #9 runtime.execute_with_options_async / { file_name = ../../deps/spiral/workspace/target/release/spiral; arguments = US5_0 "dib --path FileSystem.dib --retries 3"; options = { command = ../../deps/spiral/workspace/target/release/spiral dib --path FileSystem.dib --retries 3; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = None } } 00:01:46 d #10 runtime.execute_with_options_async / { exit_code = 0; output_length = 95111; options = { command = ../../deps/spiral/workspace/target/release/spiral dib --path FileSystem.dib --retries 3; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = None } } 00:01:46 d #5 main / executeCommand / exitCode: 0 / command: ../../deps/spiral/workspace/target/release/spiral dib --path FileSystem.dib --retries 3 00:01:46 d #11 runtime.execute_with_options_async / { file_name = ../../deps/spiral/workspace/target/release/spiral; arguments = US5_0 "dib --path Runtime.dib --retries 3"; options = { command = ../../deps/spiral/workspace/target/release/spiral dib --path Runtime.dib --retries 3; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = None } } 00:02:05 d #12 runtime.execute_with_options_async / { exit_code = 0; output_length = 9656; options = { command = ../../deps/spiral/workspace/target/release/spiral dib --path Runtime.dib --retries 3; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = None } } 00:02:05 d #6 main / executeCommand / exitCode: 0 / command: ../../deps/spiral/workspace/target/release/spiral dib --path Runtime.dib --retries 3 00:00:00 d #1 writeDibCode / output: Fs / path: AsyncSeq.dib 00:00:00 d #1 writeDibCode / output: Fs / path: Common.dib 00:00:00 d #1 writeDibCode / output: Fs / path: CommonFSharp.dib 00:00:00 d #1 writeDibCode / output: Fs / path: Async.dib 00:00:00 d #2 parseDibCode / output: Fs / file: AsyncSeq.dib 00:00:00 d #3 parseDibCode / output: Fs / file: CommonFSharp.dib 00:00:00 d #3 parseDibCode / output: Fs / file: Async.dib 00:00:00 d #5 parseDibCode / output: Fs / file: Common.dib 00:00:00 d #6 writeDibCode / output: Fs / path: FileSystem.dib 00:00:00 d #6 writeDibCode / output: Fs / path: Runtime.dib 00:00:00 d #7 parseDibCode / output: Fs / file: Runtime.dib 00:00:00 d #8 parseDibCode / output: Fs / file: FileSystem.dib
In [ ]:
{ pwsh ../deps/spiral/apps/wasm/build.ps1 -SkipFsx 1 } | Invoke-Block
00:00:00 d #1 persistCodeProject / packages: [Fable.Core] / modules: [deps/spiral/lib/spiral/common.fsx; deps/spiral/lib/spiral/sm.fsx; deps/spiral/lib/spiral/crypto.fsx; ... ] / name: spiral_wasm / hash: / code.Length: 354720 spiral/lib/spiral/lib.ps1/GetTargetDir / targetDir: /home/runner/work/polyglot/polyglot/target/Builder/spiral_wasm polyglot/scripts/core.ps1/ResolveLink #4 / Path: /home/runner/work/polyglot/polyglot/deps/spiral/deps/polyglot/deps/spiral/lib/spiral/../../deps/polyglot / parent_target: / path_target: /home/runner/work/polyglot/polyglot / parent: /home/runner/work/polyglot/polyglot/deps/spiral/deps/polyglot/deps/spiral/lib/spiral/../../deps / End: polyglot spiral/lib/spiral/lib.ps1/BuildFable / TargetDir: /home/runner/work/polyglot/polyglot/target/Builder/spiral_wasm / ProjectName: spiral_wasm / Language: rs / Runtime: / root: /home/runner/work/polyglot/polyglot Fable 5.0.0-alpha.9: F# to Rust compiler (status: alpha) Thanks to the contributor! @MaxWilson Stand with Ukraine! https://standwithukraine.com.ua/ Parsing target/Builder/spiral_wasm/spiral_wasm.fsproj... Project and references (14 source files) parsed in 3172ms Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.JSInterop.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Routing.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Routing.Abstractions.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Mvc.ViewFeatures.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Mvc.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Mvc.Core.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Http.Abstractions.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Components.Forms.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Components.Endpoints.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Components.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Started Fable compilation... Fable compilation finished in 10234ms ./deps/spiral/lib/spiral/common.fsx(2209,0): (2209,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/sm.fsx(561,0): (561,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/async_.fsx(250,0): (250,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/threading.fsx(139,0): (139,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/crypto.fsx(2436,0): (2436,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/date_time.fsx(2547,0): (2547,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/platform.fsx(122,0): (122,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/networking.fsx(5525,0): (5525,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/trace.fsx(2244,0): (2244,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/runtime.fsx(8246,0): (8246,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/file_system.fsx(20811,0): (20811,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! spiral/apps/wasm/build.ps1 / path: /home/runner/work/polyglot/polyglot/target/Builder/spiral_wasm/target/rs/spiral_wasm.rs spiral/apps/wasm/build.ps1 / $targetDir = /home/runner/work/polyglot/polyglot/target/Builder/spiral_wasm / $projectName: spiral_wasm / $env:CI:'true' Downloading crates ... Downloaded atty v0.2.14 Downloaded async-stream-impl v0.3.6 Downloaded slipped10 v0.4.6 Downloaded strum v0.24.1 Downloaded indent_write v2.2.0 Downloaded hyper-timeout v0.4.1 Downloaded near-sys v0.2.2 Downloaded primitive-types v0.10.1 Downloaded ordered-float v4.6.0 Downloaded new_debug_unreachable v1.0.6 Downloaded opaque-debug v0.3.1 Downloaded once_cell v1.21.1 Downloaded num-rational v0.4.2 Downloaded near-workspaces v0.11.1 Downloaded prometheus v0.13.4 Downloaded opentelemetry-proto v0.5.0 Downloaded near-primitives v0.23.0 Downloaded opentelemetry_sdk v0.22.1 Downloaded rust_decimal v1.37.1 Downloaded curve25519-dalek v4.1.3 Downloaded rustls-webpki v0.103.0 Downloaded protobuf v2.28.0 Downloaded near-sdk v5.11.0 Downloaded num-bigint v0.3.3 Downloaded openssl v0.10.71 Downloaded gimli v0.28.1 Downloaded near-cli-rs v0.11.1 Downloaded rustix v0.37.28 Downloaded wasmparser v0.211.1 Downloaded icu_properties_data v1.5.0 Downloaded winnow v0.7.4 Downloaded rustix v1.0.3 Downloaded hyper v0.14.32 Downloaded pdb v0.7.0 Downloaded nix v0.26.4 Downloaded serde_with v3.12.0 Downloaded h2 v0.3.26 Downloaded color-spantrace v0.2.1 Downloaded zbus v3.15.2 Downloaded symbolic-debuginfo v8.8.0 Downloaded jiff v0.2.5 Downloaded color-eyre v0.6.3 Downloaded num-complex v0.4.6 Downloaded near-parameters v0.23.0 Downloaded gimli v0.26.2 Downloaded near-o11y v0.23.0 Downloaded prettyplease v0.1.25 Downloaded tokio v1.44.1 Downloaded csv v1.3.1 Downloaded sha3 v0.10.8 Downloaded openssl-sys v0.9.106 Downloaded ureq v2.12.1 Downloaded unicode-normalization v0.1.22 Downloaded tracing-opentelemetry v0.23.0 Downloaded goblin v0.5.4 Downloaded crossterm v0.25.0 Downloaded linux-raw-sys v0.3.8 Downloaded axum v0.6.20 Downloaded num v0.4.3 Downloaded nom-supreme v0.6.0 Downloaded near-token v0.3.0 Downloaded near-sdk-macros v5.11.0 Downloaded near-sandbox-utils v0.14.0 Downloaded near-primitives-core v0.23.0 Downloaded reed-solomon-erasure v4.0.2 Downloaded proc-macro-error v1.0.4 Downloaded proc-macro-crate v3.3.0 Downloaded opentelemetry v0.22.0 Downloaded mio v0.8.11 Downloaded inquire v0.7.5 Downloaded flate2 v1.1.0 Downloaded newline-converter v0.3.0 Downloaded near_schemafy_lib v0.7.0 Downloaded near-sandbox-utils v0.9.0 Downloaded near-rpc-error-core v0.23.0 Downloaded near-performance-metrics v0.23.0 Downloaded prost-derive v0.12.6 Downloaded prost v0.12.6 Downloaded proc-macro-error-attr v1.0.4 Downloaded prettytable v0.10.0 Downloaded polling v2.8.0 Downloaded owo-colors v3.5.0 Downloaded opentelemetry-semantic-conventions v0.14.0 Downloaded miniz_oxide v0.8.5 Downloaded zvariant v3.15.2 Downloaded wasmparser v0.83.0 Downloaded tonic v0.11.0 Downloaded secret-service v3.1.0 Downloaded secp256k1 v0.27.0 Downloaded http v0.2.12 Downloaded cc v1.2.17 Downloaded bip39 v2.1.0 Downloaded near_schemafy_core v0.7.0 Downloaded proc-macro-crate v1.3.1 Downloaded plain v0.2.3 Downloaded pbkdf2 v0.11.0 Downloaded password-hash v0.4.2 Downloaded ordered-stream v0.2.0 Downloaded opentelemetry-otlp v0.15.0 Downloaded keyring v2.3.3 Downloaded io-lifetimes v1.0.11 Downloaded zip v0.5.13 Downloaded xml-rs v0.8.25 Downloaded vte v0.11.1 Downloaded uriparse v0.6.4 Downloaded textwrap v0.16.2 Downloaded socket2 v0.5.8 Downloaded socket2 v0.4.10 Downloaded smallvec v1.14.0 Downloaded signal-hook v0.3.17 Downloaded serde_yaml v0.9.34+deprecated Downloaded indicatif v0.17.11 Downloaded indexmap v2.8.0 Downloaded crossbeam-channel v0.5.14 Downloaded actix v0.13.5 Downloaded num-rational v0.3.2 Downloaded near-jsonrpc-client v0.10.1 Downloaded near-crypto v0.23.0 Downloaded near-chain-configs v0.23.0 Downloaded near-async v0.23.0 Downloaded names v0.14.0 Downloaded miniz_oxide v0.7.4 Downloaded memmap2 v0.5.10 Downloaded matchit v0.7.3 Downloaded libloading v0.8.6 Downloaded json-patch v2.0.0 Downloaded joinery v2.1.0 Downloaded zstd-safe v5.0.2+zstd.1.5.2 Downloaded zstd v0.11.2+zstd.1.5.2 Downloaded zbus_macros v3.15.2 Downloaded vt100 v0.15.2 Downloaded linux-raw-sys v0.9.3 Downloaded uuid v0.8.2 Downloaded unicode-linebreak v0.1.5 Downloaded uint v0.9.5 Downloaded tracing-indicatif v0.3.9 Downloaded term v0.7.0 Downloaded symbolic-common v8.8.0 Downloaded secp256k1-sys v0.8.1 Downloaded smawk v0.3.2 Downloaded shellexpand v3.1.0 Downloaded serde_with_macros v3.12.0 Downloaded scroll v0.11.0 Downloaded scroll v0.10.2 Downloaded indexmap v1.9.3 Downloaded hyper-util v0.1.10 Downloaded ed25519-dalek v2.1.1 Downloaded darling_core v0.20.10 Downloaded borsh v1.5.6 Downloaded backtrace v0.3.71 Downloaded near-token v0.2.1 Downloaded near-time v0.23.0 Downloaded near-socialdb-client v0.3.2 Downloaded near-sandbox-utils v0.8.0 Downloaded near-rpc-error-macro v0.23.0 Downloaded near-jsonrpc-primitives v0.23.0 Downloaded near-gas v0.3.0 Downloaded near-gas v0.2.5 Downloaded near-fmt v0.23.0 Downloaded near-async-derive v0.23.0 Downloaded near-account-id v1.0.0 Downloaded near-abi-client v0.1.1 Downloaded near-abi v0.4.3 Downloaded memoffset v0.7.1 Downloaded linux-keyutils v0.2.4 Downloaded keccak v0.1.5 Downloaded jsonptr v0.4.7 Downloaded json_comments v0.2.2 Downloaded interactive-clap-derive v0.2.10 Downloaded interactive-clap v0.2.10 Downloaded zvariant_derive v3.15.2 Downloaded zbus_names v2.6.1 Downloaded vte_generate_state_changes v0.1.2 Downloaded tracing-error v0.2.1 Downloaded tracing-appender v0.2.3 Downloaded tokio-io-timeout v1.2.0 Downloaded strum_macros v0.24.3 Downloaded string_cache v0.8.8 Downloaded smart-default v0.7.1 Downloaded smart-default v0.6.0 Downloaded signal-hook-mio v0.2.4 Downloaded sha2 v0.9.9 Downloaded serde_repr v0.1.20 Downloaded icu_normalizer_data v1.5.0 Downloaded icu_locid_transform_data v1.5.0 Downloaded futures-lite v1.13.0 Downloaded fluent-uri v0.1.4 Downloaded env_logger v0.11.7 Downloaded encode_unicode v1.0.0 Downloaded easy-ext v1.0.2 Downloaded derivative v2.2.0 Downloaded csv-core v0.1.12 Downloaded colored v2.2.0 Downloaded cargo_metadata v0.18.1 Downloaded cargo-near v0.6.4 Downloaded bs58 v0.5.1 Downloaded bs58 v0.4.0 Downloaded borsh-derive v1.5.6 Downloaded blake2 v0.10.6 Downloaded bitcoin_hashes v0.13.0 Downloaded async-lock v2.8.0 Downloaded async-io v1.13.0 Downloaded async-executor v1.13.1 Downloaded arbitrary v1.4.1 Downloaded addr2line v0.21.0 Downloaded actix_derive v0.6.2 Downloaded near-stdx v0.23.0 Downloaded near-config-utils v0.23.0 Downloaded near-abi-client-macros v0.1.1 Downloaded near-abi-client-impl v0.1.1 Downloaded zvariant_utils v1.0.1 Downloaded xdg-home v1.3.0 Downloaded waker-fn v1.2.0 Downloaded urlencoding v2.1.3 Downloaded tokio-retry v0.3.0 Downloaded sync_wrapper v0.1.2 Downloaded http-body v0.4.6 Downloaded hmac v0.9.0 Downloaded hex-conservative v0.1.2 Downloaded hex v0.3.2 Downloaded heck v0.4.1 Downloaded glob v0.3.2 Downloaded fuzzy-matcher v0.3.7 Downloaded fs2 v0.4.3 Downloaded fixed-hash v0.7.0 Downloaded fastrand v1.9.0 Downloaded fallible-iterator v0.2.0 Downloaded event-listener v2.5.3 Downloaded enumflags2_derive v0.7.11 Downloaded enumflags2 v0.7.11 Downloaded enum-map-derive v0.17.0 Downloaded enum-map v2.7.3 Downloaded elementtree v0.7.0 Downloaded easy-ext v0.2.9 Downloaded dmsort v1.0.2 Downloaded dirs v5.0.1 Downloaded derive_arbitrary v1.4.1 Downloaded debugid v0.7.3 Downloaded darling v0.20.10 Downloaded curve25519-dalek-derive v0.1.1 Downloaded cargo-util v0.1.2 Downloaded errno v0.3.10 Downloaded ed25519 v2.2.3 Downloaded digest v0.9.0 Downloaded deranged v0.4.1 Downloaded crypto-mac v0.9.1 Downloaded crypto-hash v0.3.4 Downloaded convert_case v0.5.0 Downloaded bytesize v1.3.2 Downloaded brownstone v1.1.0 Downloaded bitcoin-internals v0.2.0 Downloaded binary-install v0.2.0 Downloaded axum-core v0.3.4 Downloaded async-stream v0.3.6 Downloaded async-fs v1.6.0 Downloaded async-broadcast v0.5.1 Downloaded adler v1.0.2 Downloaded actix-rt v2.10.0 Downloaded actix-macros v0.2.4 Downloaded Inflector v0.11.4 Downloaded ident_case v1.0.1 Downloaded darling_macro v0.20.10 Downloaded constant_time_eq v0.1.5 Downloaded block-buffer v0.9.0 Downloaded scroll_derive v0.11.1 Downloaded openssl-src v300.4.2+3.4.1 Compiling libc v0.2.171 Compiling serde v1.0.219 Compiling syn v2.0.100 Compiling version_check v0.9.5 Compiling shlex v1.3.0 Compiling once_cell v1.21.1 Compiling jobserver v0.1.32 Compiling generic-array v0.14.7 Compiling smallvec v1.14.0 Compiling cc v1.2.17 Compiling futures-core v0.3.31 Compiling pkg-config v0.3.32 Compiling lock_api v0.4.12 Compiling parking_lot_core v0.9.10 Compiling scopeguard v1.2.0 Compiling bytes v1.10.1 Compiling parking_lot v0.12.3 Compiling log v0.4.27 Compiling signal-hook-registry v1.4.2 Compiling getrandom v0.2.15 Compiling hashbrown v0.15.2 Compiling equivalent v1.0.2 Compiling toml_datetime v0.6.8 Compiling mio v1.0.3 Compiling socket2 v0.5.8 Compiling indexmap v2.8.0 Compiling tracing-core v0.1.33 Compiling synstructure v0.13.1 Compiling futures-sink v0.3.31 Compiling subtle v2.6.1 Compiling rand_core v0.6.4 Compiling crypto-common v0.1.6 Compiling futures-channel v0.3.31 Compiling num-traits v0.2.19 Compiling anyhow v1.0.97 Compiling block-buffer v0.10.4 Compiling syn v1.0.109 Compiling cfg_aliases v0.2.1 Compiling fnv v1.0.7 Compiling digest v0.10.7 Compiling winnow v0.7.4 Compiling zstd-sys v2.0.15+zstd.1.5.7 Compiling serde_derive v1.0.219 Compiling zerofrom-derive v0.1.6 Compiling yoke-derive v0.7.5 Compiling tokio-macros v2.5.0 Compiling zerovec-derive v0.10.3 Compiling tokio v1.44.1 Compiling tracing-attributes v0.1.28 Compiling tracing v0.1.41 Compiling displaydoc v0.2.5 Compiling futures-macro v0.3.31 Compiling toml_edit v0.22.24 Compiling futures-util v0.3.31 Compiling rustversion v1.0.20 Compiling crossbeam-utils v0.8.21 Compiling proc-macro-crate v3.3.0 Compiling icu_provider_macros v1.5.0 Compiling bitflags v2.9.0 Compiling borsh-derive v1.5.6 Compiling thiserror v1.0.69 Compiling thiserror-impl v1.0.69 Compiling lazy_static v1.5.0 Compiling rand_chacha v0.3.1 Compiling serde_json v1.0.140 Compiling byteorder v1.5.0 Compiling rand v0.8.5 Compiling borsh v1.5.6 Compiling stable_deref_trait v1.2.0 Compiling tokio-util v0.7.14 Compiling sha2 v0.10.8 Compiling semver v1.0.26 Compiling percent-encoding v2.3.1 Compiling zerofrom v0.1.6 Compiling bitflags v1.3.2 Compiling yoke v0.7.5 Compiling num-integer v0.1.46 Compiling memchr v2.7.4 Compiling httparse v1.10.1 Compiling tower-service v0.3.3 Compiling zerovec v0.10.4 Compiling hex v0.4.3 Compiling ring v0.17.14 Compiling try-lock v0.2.5 Compiling cfg-if v1.0.0 Compiling want v0.3.1 Compiling async-trait v0.1.88 Compiling static_assertions v1.1.0 Compiling typenum v1.18.0 Compiling tinystr v0.7.6 Compiling http v0.2.12 Compiling thread_local v1.1.8 Compiling powerfmt v0.2.0 Compiling writeable v0.5.5 Compiling litemap v0.7.5 Compiling regex-syntax v0.6.29 Compiling icu_locid v1.5.0 Compiling deranged v0.4.1 Compiling regex-automata v0.1.10 Compiling openssl-src v300.4.2+3.4.1 Compiling num_cpus v1.16.0 Compiling time-core v0.1.4 Compiling tower-layer v0.3.3 Compiling overload v0.1.1 Compiling num-conv v0.1.0 Compiling vcpkg v0.2.15 Compiling nu-ansi-term v0.46.0 Compiling time v0.3.41 Compiling openssl-sys v0.9.106 Compiling futures-executor v0.3.31 Compiling matchers v0.1.0 Compiling icu_provider v1.5.0 Compiling http-body v0.4.6 Compiling aho-corasick v1.1.3 Compiling rustc_version v0.4.1 Compiling sharded-slab v0.1.7 Compiling crossbeam-channel v0.5.14 Compiling pin-project-internal v1.1.10 Compiling serde_repr v0.1.20 Compiling tracing-log v0.2.0 Compiling bzip2-sys v0.1.13+1.0.8 Compiling indexmap v1.9.3 Compiling num-bigint v0.3.3 Compiling base64 v0.21.7 Compiling zstd-safe v5.0.2+zstd.1.5.2 Compiling regex-syntax v0.8.5 Compiling icu_locid_transform_data v1.5.0 Compiling pin-project v1.1.10 Compiling icu_locid_transform v1.5.0 Compiling tracing-subscriber v0.3.19 Compiling curve25519-dalek v4.1.3 Compiling regex-automata v0.4.9 Compiling h2 v0.3.26 Compiling icu_collections v1.5.0 Compiling near-account-id v1.0.0 Compiling axum-core v0.3.4 Compiling num-rational v0.3.2 Compiling hashbrown v0.12.3 Compiling base64 v0.22.1 Compiling httpdate v1.0.3 Compiling either v1.15.0 Compiling convert_case v0.4.0 Compiling strsim v0.11.1 Compiling crunchy v0.2.3 Compiling mime v0.3.17 Compiling icu_properties_data v1.5.0 Compiling ident_case v1.0.1 Compiling icu_properties v1.5.1 Compiling darling_core v0.20.10 Compiling derive_more v0.99.19 Compiling itertools v0.12.1 Compiling hyper v0.14.32 Compiling regex v1.11.1 Compiling axum v0.6.20 Compiling tokio-stream v0.1.17 Compiling enum-map-derive v0.17.0 Compiling curve25519-dalek-derive v0.1.1 Compiling derive_arbitrary v1.4.1 Compiling secp256k1-sys v0.8.1 Compiling signature v2.2.0 Compiling utf8_iter v1.0.4 Compiling heck v0.4.1 Compiling utf16_iter v1.0.5 Compiling urlencoding v2.1.3 Compiling heck v0.5.0 Compiling bs58 v0.4.0 Compiling write16 v1.0.0 Compiling schemars v0.8.22 Compiling rustls v0.23.25 Compiling rustls-pki-types v1.11.0 Compiling icu_normalizer_data v1.5.0 Compiling icu_normalizer v1.5.0 Compiling opentelemetry v0.22.0 Compiling strum_macros v0.24.3 Compiling arbitrary v1.4.1 Compiling ed25519 v2.2.3 Compiling enum-map v2.7.3 Compiling tower v0.4.13 Compiling prost-derive v0.12.6 Compiling darling_macro v0.20.10 Compiling concurrent-queue v2.5.0 Compiling tokio-io-timeout v1.2.0 Compiling async-stream-impl v0.3.6 Compiling ordered-float v4.6.0 Compiling serde_derive_internals v0.29.1 Compiling block-padding v0.3.3 Compiling foreign-types-shared v0.1.1 Compiling sync_wrapper v0.1.2 Compiling openssl v0.10.71 Compiling glob v0.3.2 Compiling matchit v0.7.3 Compiling opentelemetry_sdk v0.22.1 Compiling schemars_derive v0.8.22 Compiling foreign-types v0.3.2 Compiling prost v0.12.6 Compiling inout v0.1.4 Compiling async-stream v0.3.6 Compiling hyper-timeout v0.4.1 Compiling darling v0.20.10 Compiling uint v0.9.5 Compiling near-primitives-core v0.23.0 Compiling ed25519-dalek v2.1.1 Compiling strum v0.24.1 Compiling idna_adapter v1.2.0 Compiling fixed-hash v0.7.0 Compiling form_urlencoded v1.2.1 Compiling openssl-macros v0.1.1 Compiling http v1.3.1 Compiling protobuf v2.28.0 Compiling rustix v1.0.3 Compiling fastrand v2.3.0 Compiling json_comments v0.2.2 Compiling winnow v0.5.40 Compiling near-config-utils v0.23.0 Compiling primitive-types v0.10.1 Compiling idna v1.0.3 Compiling toml_edit v0.19.15 Compiling tonic v0.11.0 Compiling secp256k1 v0.27.0 Compiling cipher v0.4.4 Compiling actix-rt v2.10.0 Compiling actix_derive v0.6.2 Compiling actix-macros v0.2.4 Compiling blake2 v0.10.6 Compiling hmac v0.12.1 Compiling proc-macro-error-attr v1.0.4 Compiling arrayvec v0.7.6 Compiling itoa v1.0.15 Compiling near-stdx v0.23.0 Compiling zstd-safe v7.2.4 Compiling linux-raw-sys v0.9.3 Compiling ryu v1.0.20 Compiling adler2 v2.0.0 Compiling prometheus v0.13.4 Compiling clap_builder v4.5.32 Compiling miniz_oxide v0.8.5 Compiling near-crypto v0.23.0 Compiling actix v0.13.5 Compiling opentelemetry-proto v0.5.0 Compiling proc-macro-crate v1.3.1 Compiling url v2.5.4 Compiling http-body v1.0.1 Compiling event-listener v5.4.0 Compiling clap_derive v4.5.32 Compiling futures v0.3.31 Compiling sha1 v0.10.6 Compiling zvariant_utils v1.0.1 Compiling proc-macro-error v1.0.4 Compiling crc32fast v1.4.2 Compiling event-listener v2.5.3 Compiling native-tls v0.2.14 Compiling opentelemetry-semantic-conventions v0.14.0 Compiling cpufeatures v0.2.17 Compiling reed-solomon-erasure v4.0.2 Compiling io-lifetimes v1.0.11 Compiling unsafe-libyaml v0.2.11 Compiling serde_yaml v0.9.34+deprecated Compiling chrono v0.4.40 Compiling opentelemetry-otlp v0.15.0 Compiling flate2 v1.1.0 Compiling clap v4.5.32 Compiling event-listener-strategy v0.5.3 Compiling aes v0.8.4 Compiling h2 v0.4.8 Compiling serde_with_macros v3.12.0 Compiling tracing-opentelemetry v0.23.0 Compiling tracing-appender v0.2.3 Compiling near-time v0.23.0 Compiling near-rpc-error-core v0.23.0 Compiling enumflags2_derive v0.7.11 Compiling dirs-sys-next v0.1.2 Compiling futures-lite v2.6.0 Compiling memoffset v0.7.1 Compiling polling v2.8.0 Compiling rustix v0.37.28 Compiling openssl-probe v0.1.6 Compiling keccak v0.1.5 Compiling fastrand v1.9.0 Compiling dyn-clone v1.0.19 Compiling getrandom v0.3.2 Compiling waker-fn v1.2.0 Compiling untrusted v0.9.0 Compiling itertools v0.10.5 Compiling futures-lite v1.13.0 Compiling sha3 v0.10.8 Compiling enumflags2 v0.7.11 Compiling dirs-next v2.0.0 Compiling near-rpc-error-macro v0.23.0 Compiling hyper v1.6.0 Compiling near-o11y v0.23.0 Compiling serde_with v3.12.0 Compiling zstd v0.13.3 Compiling async-channel v2.3.1 Compiling near-parameters v0.23.0 Compiling async-lock v2.8.0 Compiling zvariant_derive v3.15.2 Compiling near-performance-metrics v0.23.0 Compiling piper v0.2.4 Compiling near-fmt v0.23.0 Compiling bytesize v1.3.2 Compiling smart-default v0.6.0 Compiling near-async-derive v0.23.0 Compiling filetime v0.2.25 Compiling async-io v1.13.0 Compiling async-fs v1.6.0 Compiling proc-macro2 v1.0.94 Compiling base64ct v1.7.3 Compiling signal-hook v0.3.17 Compiling linux-raw-sys v0.3.8 Compiling easy-ext v0.2.9 Compiling unicode-ident v1.0.18 Compiling unicode-width v0.1.14 Compiling near-primitives v0.23.0 Compiling password-hash v0.4.2 Compiling near-async v0.23.0 Compiling zvariant v3.15.2 Compiling blocking v1.6.1 Compiling interactive-clap-derive v0.2.10 Compiling hyper-util v0.1.10 Compiling rustls-webpki v0.103.0 Compiling Inflector v0.11.4 Compiling http-body-util v0.1.3 Compiling num-bigint v0.4.6 Compiling backtrace v0.3.71 Compiling socket2 v0.4.10 Compiling sync_wrapper v1.0.2 Compiling ahash v0.8.11 Compiling vte_generate_state_changes v0.1.2 Compiling eyre v0.6.12 Compiling zeroize v1.8.1 Compiling bitcoin-internals v0.2.0 Compiling portable-atomic v1.11.0 Compiling adler v1.0.2 Compiling unicode-width v0.2.0 Compiling gimli v0.28.1 Compiling miniz_oxide v0.7.4 Compiling vte v0.11.1 Compiling addr2line v0.21.0 Compiling tower v0.5.2 Compiling num-rational v0.4.2 Compiling pbkdf2 v0.11.0 Compiling near-chain-configs v0.23.0 Compiling nix v0.26.4 Compiling zstd v0.11.2+zstd.1.5.2 Compiling interactive-clap v0.2.10 Compiling zbus_names v2.6.1 Compiling bzip2 v0.4.4 Compiling xattr v1.5.0 Compiling quote v1.0.40 Compiling webpki-roots v0.26.8 Compiling async-executor v1.13.1 Compiling async-broadcast v0.5.1 Compiling zbus_macros v3.15.2 Compiling serde_urlencoded v0.7.1 Compiling rustls-pemfile v2.2.0 Compiling tracing-error v0.2.1 Compiling num-iter v0.1.45 Compiling derivative v2.2.0 Compiling async-recursion v1.1.1 Compiling num-complex v0.4.6 Compiling mio v0.8.11 Compiling digest v0.9.0 Compiling xdg-home v1.3.0 Compiling ordered-stream v0.2.0 Compiling object v0.32.2 Compiling constant_time_eq v0.1.5 Compiling zerocopy v0.7.35 Compiling radium v0.7.0 Compiling tinyvec_macros v0.1.1 Compiling owo-colors v3.5.0 Compiling indenter v0.3.3 Compiling siphasher v1.0.1 Compiling ipnet v2.11.0 Compiling rustc-demangle v0.1.24 Compiling option-ext v0.2.0 Compiling uuid v0.8.2 Compiling zip v0.6.6 Compiling dirs-sys v0.4.1 Compiling ureq v2.12.1 Compiling color-spantrace v0.2.1 Compiling phf_shared v0.11.3 Compiling tinyvec v1.9.0 Compiling zbus v3.15.2 Compiling signal-hook-mio v0.2.4 Compiling num v0.4.3 Compiling tar v0.4.44 Compiling near-jsonrpc-primitives v0.23.0 Compiling vt100 v0.15.2 Compiling console v0.15.11 Compiling near-abi v0.4.3 Compiling uriparse v0.6.4 Compiling near_schemafy_core v0.7.0 Compiling hkdf v0.12.4 Compiling cbc v0.1.2 Compiling serde_spanned v0.6.8 Compiling scroll_derive v0.11.1 Compiling crypto-mac v0.9.1 Compiling block-buffer v0.9.0 Compiling is-docker v0.2.0 Compiling fs2 v0.4.3 Compiling csv-core v0.1.12 Compiling iana-time-zone v0.1.62 Compiling hex-conservative v0.1.2 Compiling near-sandbox-utils v0.8.0 Compiling opaque-debug v0.3.1 Compiling rust_decimal v1.37.1 Compiling camino v1.1.9 Compiling hex v0.3.2 Compiling fallible-iterator v0.2.0 Compiling pin-project-lite v0.2.16 Compiling tap v1.0.1 Compiling unicode-segmentation v1.12.0 Compiling is_executable v0.1.2 Compiling number_prefix v0.4.0 Compiling precomputed-hash v0.1.1 Compiling minimal-lexical v0.2.1 Compiling same-file v1.0.6 Compiling siphasher v0.3.11 Compiling new_debug_unreachable v1.0.6 Compiling binary-install v0.2.0 Compiling string_cache v0.8.8 Compiling nom v7.1.3 Compiling walkdir v2.5.0 Compiling indicatif v0.17.11 Compiling newline-converter v0.3.0 Compiling wyz v0.5.1 Compiling bitcoin_hashes v0.13.0 Compiling sha2 v0.9.9 Compiling csv v1.3.1 Compiling scroll v0.11.0 Compiling is-wsl v0.4.0 Compiling hmac v0.9.0 Compiling secret-service v3.1.0 Compiling near_schemafy_lib v0.7.0 Compiling crossterm v0.25.0 Compiling unicode-normalization v0.1.22 Compiling hashbrown v0.14.5 Compiling color-eyre v0.6.3 Compiling dirs v5.0.1 Compiling debugid v0.7.3 Compiling near-token v0.2.1 Compiling tempfile v3.19.1 Compiling term v0.7.0 Compiling brownstone v1.1.0 Compiling fuzzy-matcher v0.3.7 Compiling fxhash v0.2.1 Compiling linux-keyutils v0.2.4 Compiling is-terminal v0.4.16 Compiling memmap2 v0.5.10 Compiling home v0.5.11 Compiling bs58 v0.5.1 Compiling indent_write v2.2.0 Compiling names v0.14.0 Compiling funty v2.0.0 Compiling shell-escape v0.1.5 Compiling prettyplease v0.1.25 Compiling unicode-linebreak v0.1.5 Compiling joinery v2.1.0 Compiling xml-rs v0.8.25 Compiling smawk v0.3.2 Compiling scroll v0.10.2 Compiling encode_unicode v1.0.0 Compiling plain v0.2.3 Compiling pathdiff v0.2.3 Compiling open v5.3.2 Compiling elementtree v0.7.0 Compiling prettytable v0.10.0 Compiling goblin v0.5.4 Compiling pdb v0.7.0 Compiling textwrap v0.16.2 Compiling nom-supreme v0.6.0 Compiling bitvec v1.0.1 Compiling symbolic-common v8.8.0 Compiling keyring v2.3.3 Compiling inquire v0.7.5 Compiling shellexpand v3.1.0 Compiling wasmparser v0.211.1 Compiling bip39 v2.1.0 Compiling near-abi-client-impl v0.1.1 Compiling slipped10 v0.4.6 Compiling toml v0.8.20 Compiling tracing-indicatif v0.3.9 Compiling gimli v0.26.2 Compiling near-gas v0.2.5 Compiling zip v0.5.13 Compiling env_filter v0.1.3 Compiling cargo-platform v0.1.9 Compiling linked-hash-map v0.5.6 Compiling smart-default v0.7.1 Compiling jiff v0.2.5 Compiling shell-words v1.1.0 Compiling easy-ext v1.0.2 Compiling near-sandbox-utils v0.9.0 Compiling near-sdk-macros v5.11.0 Compiling wasmparser v0.83.0 Compiling dmsort v1.0.2 Compiling lazycell v1.3.0 Compiling symbolic-debuginfo v8.8.0 Compiling env_logger v0.11.7 Compiling cargo_metadata v0.18.1 Compiling near-abi-client-macros v0.1.1 Compiling near-workspaces v0.11.1 Compiling strum_macros v0.26.4 Compiling jsonptr v0.4.7 Compiling colored v2.2.0 Compiling atty v0.2.14 Compiling libloading v0.8.6 Compiling dunce v1.0.5 Compiling strum v0.26.3 Compiling convert_case v0.5.0 Compiling near-sandbox-utils v0.14.0 Compiling json-patch v2.0.0 Compiling near-abi-client v0.1.1 Compiling uuid v1.16.0 Compiling tokio-retry v0.3.0 Compiling near-gas v0.3.0 Compiling near-token v0.3.0 Compiling near-sys v0.2.2 Compiling fable_library_rust v0.1.0 (/home/runner/work/polyglot/spiral/deps/polyglot/lib/rust/fable/fable_modules/fable-library-rust) Compiling near-sdk v5.11.0 Compiling crypto-hash v0.3.4 Compiling cargo-util v0.1.2 Compiling tokio-native-tls v0.3.1 Compiling hyper-tls v0.6.0 Compiling reqwest v0.12.15 Compiling near-jsonrpc-client v0.10.1 Compiling near-socialdb-client v0.3.2 Compiling near-cli-rs v0.11.1 Compiling cargo-near v0.6.4 Compiling spiral_wasm v0.0.1 (/home/runner/work/polyglot/spiral/apps/wasm) Finished `release` profile [optimized] target(s) in 4m 35s
In [ ]:
{ pwsh ../lib/math/build.ps1 } | Invoke-Block
00:00:00 d #1 spiral.main / { args = Array(MutCell(["dib", "--path", "math.dib", "--retries", "5"])) } 00:00:00 d #2 runtime.execute_with_options / { file_name = dotnet; arguments = ["repl", "--exit-after-run", "--run", "/home/runner/work/polyglot/polyglot/lib/math/math.dib", "--output-path", "/home/runner/work/polyglot/polyglot/lib/math/math.dib.ipynb"]; options = { command = dotnet repl --exit-after-run --run "/home/runner/work/polyglot/polyglot/lib/math/math.dib" --output-path "/home/runner/work/polyglot/polyglot/lib/math/math.dib.ipynb"; cancellation_token = None; environment_variables = Array(MutCell([("TRACE_LEVEL", "Verbose"), ("AUTOMATION", "True")])); on_line = None; stdin = None; trace = false; working_directory = None } } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ # math > > ── spiral ────────────────────────────────────────────────────────────────────── > open testing > open rust.rust_operators > open rust > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## complex > > ── spiral ────────────────────────────────────────────────────────────────────── > nominal complex t = > `( > global "#if FABLE_COMPILER\n[[<Fable.Core.Erase; > Fable.Core.Emit(\"num_complex::Complex<$0>\")>]]\n#endif\ntype > num_complex_Complex<'T> = class end" > $'' : $'num_complex_Complex<`t>' > ) > > inl complex forall t. ((re : t), (im : t)) : complex t = > !\\((re, im), $'"num_complex::Complex::new($0, $1)"') > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -d num-complex > > complex (0f64, 0f64) > |> sm'.format' > |> sm'.from_std_string > |> _assert_eq "0+0i" > > ── [ 12.27s - return value ] ─────────────────────────────────────────────────── > │ { name = __assert_eq; actual = 0+0i; expected = 0+0i } > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## re > > ── spiral ────────────────────────────────────────────────────────────────────── > inl re forall t. (c : complex t) : t = > !\\(c, $'"$0.re"') > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## im > > ── spiral ────────────────────────────────────────────────────────────────────── > inl im forall t. (c : complex t) : t = > !\\(c, $'"$0.im"') > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## complex_unbox > > ── spiral ────────────────────────────────────────────────────────────────────── > inl complex_unbox forall t. (c : complex t) = > re c, im c > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## (~.^) > > ── spiral ────────────────────────────────────────────────────────────────────── > inl (~.^) c = complex c > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## complex_eq > > ── spiral ────────────────────────────────────────────────────────────────────── > inl complex_eq forall t. (a : complex t) (b : complex t) : bool = > !\\((a, b), $'"$0 == $1"') > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## (.=) > > ── spiral ────────────────────────────────────────────────────────────────────── > inl (.=) a b = complex_eq a b > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## equable complex > > ── spiral ────────────────────────────────────────────────────────────────────── > instance equable complex t = complex_eq > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## complex_add > > ── spiral ────────────────────────────────────────────────────────────────────── > inl complex_add forall t. (a : complex t) (b : complex t) : complex t = > !\\((a, b), $'"$0 + $1"') > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## (.+) > > ── spiral ────────────────────────────────────────────────────────────────────── > inl (.+) a b = complex_add a b > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## complex_sub > > ── spiral ────────────────────────────────────────────────────────────────────── > inl complex_sub forall t. (a : complex t) (b : complex t) : complex t = > !\\((a, b), $'"$0 - $1"') > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## (.-) > > ── spiral ────────────────────────────────────────────────────────────────────── > inl (.-) a b = complex_sub a b > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## complex_mult > > ── spiral ────────────────────────────────────────────────────────────────────── > inl complex_mult forall t. (a : complex t) (b : complex t) : complex t = > !\\((a, b), $'"$0 * $1"') > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## (.*) > > ── spiral ────────────────────────────────────────────────────────────────────── > inl (.*) a b = complex_mult a b > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## complex_div > > ── spiral ────────────────────────────────────────────────────────────────────── > inl complex_div forall t. (a : complex t) (b : complex t) : complex t = > !\\((a, b), $'"$0 / $1"') > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## (./) > > ── spiral ────────────────────────────────────────────────────────────────────── > inl (./) a b = complex_div a b > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## powc > > ── spiral ────────────────────────────────────────────────────────────────────── > inl powc forall t. (s : complex t) (c : complex t) : complex t = > !\\((c, s), $'"num_complex::Complex::powc($0, $1)"') > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## (.**) > > ── spiral ────────────────────────────────────────────────────────────────────── > inl (.**) a b = powc b a > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## complex_sin > > ── spiral ────────────────────────────────────────────────────────────────────── > inl complex_sin forall t. (c : complex t) : complex t = > !\\(c, $'"$0.sin()"') > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## conj > > ── spiral ────────────────────────────────────────────────────────────────────── > inl conj forall t. (c : complex t) : complex t = > !\\(c, $'"$0.conj()"') > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## zeta > > ── spiral ────────────────────────────────────────────────────────────────────── > inl zeta log (gamma : complex f64 -> complex f64) (s : complex f64) : complex > f64 = > // inl rec zeta count gamma s = > inl rec zeta forall t {number}. > (count : t) > (gamma : complex f64 -> complex f64) > (s : complex f64) > : complex f64 > = > if log then > !\\((count, s), $'"println\!(\\\"zeta / count: {:?} / s: {:?}\\\", > $0, $1)"') > if re s > 1 then > (.^(0, 0), (am.init 10000i32 id : a i32 _)) > ||> am.fold fun acc n => > acc .+ (.^(1, 0) ./ (.^(f64 n, 0) .** s)) > else > inl gamma_term = gamma (.^(1, 0) .- s) > inl sin_term = .^(pi, 0) .* s ./ .^(2, 0) |> complex_sin > inl one_minus_s = .^(1 - re s, -(im s)) > inl mirror_term = > if re one_minus_s <= 1 > then .^(0, 0) > else > if count <= 3 > then zeta (count + 1) gamma one_minus_s > else one_minus_s > inl reflection_formula = > .^(2, 0) .* (.^(pi, 0) .** s) .* sin_term .* gamma_term .* > mirror_term > reflection_formula > join zeta 0i32 gamma s > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## bound > > ── spiral ────────────────────────────────────────────────────────────────────── > nominal bound t = > `( > backend_switch `(()) `({}) { > Fsharp = (fun () => > global "#if FABLE_COMPILER\n[[<Fable.Core.Erase; > Fable.Core.Emit(\"pyo3::Bound<$0>\")>]]\n#endif\ntype pyo3_Bound<'T> = class > end" > ) : () -> () > } > $'' : $'pyo3_Bound<`t>' > ) > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## python > > ── spiral ────────────────────────────────────────────────────────────────────── > nominal python = > `( > global "#if FABLE_COMPILER\n[[<Fable.Core.Erase; > Fable.Core.Emit(\"pyo3::Python\")>]]\n#endif\ntype pyo3_Python = class end" > $'' : $'pyo3_Python' > ) > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## pymodule > > ── spiral ────────────────────────────────────────────────────────────────────── > nominal pymodule = > `( > global "#if FABLE_COMPILER\n[[<Fable.Core.Erase; > Fable.Core.Emit(\"pyo3::types::PyModule\")>]]\n#endif\ntype pyo3_types_PyModule > = class end" > $'' : $'pyo3_types_PyModule' > ) > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## pyany > > ── spiral ────────────────────────────────────────────────────────────────────── > nominal pyany = > `( > global "#if FABLE_COMPILER\n[[<Fable.Core.Erase; > Fable.Core.Emit(\"pyo3::PyAny\")>]]\n#endif\ntype pyo3_PyAny = class end" > $'' : $'pyo3_PyAny' > ) > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## pyerr > > ── spiral ────────────────────────────────────────────────────────────────────── > nominal pyerr = > `( > global "#if FABLE_COMPILER\n[[<Fable.Core.Erase; > Fable.Core.Emit(\"pyo3::PyErr\")>]]\n#endif\ntype pyo3_PyErr = class end" > $'' : $'pyo3_PyErr' > ) > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## eval > > ── spiral ────────────────────────────────────────────────────────────────────── > inl module_from_code (py : python) (code : string) : _ (bound pymodule) _ = > inl py = join py > inl code = code |> sm'.to_std_string |> sm'.new_c_string > inl empty = "" |> sm'.to_std_string |> sm'.new_c_string > !\\(code, $'"pyo3::types::PyModule::from_code(!py, &$0, &!empty, &!empty)"') > |> resultm.map_error'' fun (x : pyerr) => x |> sm'.format' > > inl use_pyanymethods () = > global "Fable.Core.RustInterop.emitRustExpr () \");\nuse > pyo3::prelude::PyAnyMethods;\n//\"" > > inl getattr (attr : string) (module : bound pymodule) : _ (bound pyany) _ = > inl attr = join attr > inl attr = attr |> sm'.as_str > inl module = join module > use_pyanymethods () > !\\(attr, $'"!module.getattr($0)"') > |> resultm.map_error'' fun (x : pyerr) => x |> sm'.format' > > inl call forall t. (args : t) (module : bound pyany) : _ (bound pyany) _ = > inl args = join args > inl module = join module > !\($'"pyo3::prelude::PyAnyMethods::call(&!module, ((*!args).0, *(*!args).1), > None)"') > |> resultm.map_error'' fun (x : pyerr) => x |> sm'.format' > > inl extract forall t. (result : bound pyany) : _ t _ = > inl result = join result > use_pyanymethods () > !\($'"!result.extract()"') > |> resultm.map_error'' fun (x : pyerr) => x |> sm'.format' > > inl eval py code (args : pair bool (pair f64 f64)) : _ (_ f64) sm'.std_string = > inl code = > code > |> module_from_code py > |> resultm.unwrap' > inl fn = > code > |> getattr "fn" > |> resultm.unwrap' > > fn > |> call args > |> resultm.try' > |> extract > |> resultm.try' > |> complex > |> Ok > |> resultm.box > > inl call1_ log py s code = > inl code = join (a code : _ i32 _) |> sm'.concat_array "\n" > > inl s = new_pair (re s) (im s) > inl args = new_pair log s > > eval py code args > > inl call1_ log name py s line = > inl s = join s > join > ;[[ > $'$"import sys"' > $'$"import traceback"' > $'$"import re"' > $'$"count = 0"' > $'$"memory_address_pattern = re.compile(r\' at 0x[[0-9a-fA-F]]+\')"' > $'$"def trace_calls(frame, event, arg):"' > $'$" global count"' > $'$" count += 1"' > $'$" if count < 200:"' > $'$" try:"' > $'$" args = {{ k: v for k, v in frame.f_locals.items() if > frame.f_code.co_name \!= \'make_mpc\' and k not in [[\'ctx\']] and not > callable(v) }}"' > $'$" args_str = \', \'.join([[ > f\\\"{{k}}={{re.sub(memory_address_pattern, \' at 0x<?>\', repr(v))}}\\\" for k, > v in args.items() ]])"' > $'$" print(f\\\"{{event}}({!name}) / f_code.co_name: > {{frame.f_code.co_name}} / f_locals: {{args_str}} / f_lineno: {{frame.f_lineno}} > / f_code.co_filename: > {{frame.f_code.co_filename.split(\'site-packages\')[[-1]]}} / f_back.f_lineno: > {{ \'\' if frame.f_back is None else frame.f_back.f_lineno }} / > f_back.f_code.co_filename: {{ \'\' if frame.f_back is None else > frame.f_back.f_code.co_filename.split(\'site-packages\')[[-1]] }} / arg: > {{re.sub(memory_address_pattern, \' at 0x<?>\', repr(arg))}}\\\", flush=True)"' > $'$" except ValueError as e:"' > $'$" print(f\'{!name} / e: {{e}}\', flush=True)"' > $'$" return trace_calls"' > $'$"import mpmath"' > $'$"def fn(log, s):"' > $'$" global count"' > $'$" if log:"' > $'$" print(f\'{!name} / s: {{s}} / count: {{count}}\', > flush=True)"' > $'$" s = complex(*s)"' > $'$" try:"' > $'$" if log: sys.settrace(trace_calls)"' > line > $'$" if log:"' > $'$" sys.settrace(None)"' > $'$" print(f\'{!name} / result: {{s}} / count: > {{count}}\', flush=True)"' > $'$" except ValueError as e:"' > $'$" if s.real == 1:"' > $'$" s = complex(float(\'inf\'), 0)"' > $'$" return (s.real, s.imag)"' > ]] > |> call1_ log py s > > inl gamma_ log py s = > call1_ log "gamma_" py s $'$" s = mpmath.gamma(s)"' > > inl zeta_ log py s = > call1_ log "zeta_" py s $'$" s = mpmath.zeta(s)"' > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## run_test > > ── spiral ────────────────────────────────────────────────────────────────────── > inl run_test log (fn : (complex f64 -> complex f64) * (complex f64 -> complex > f64) -> ()) = > inl fn_ (py : python) : resultm.result' () pyerr = > inl nan () = > !\($'"f64::NAN"') > inl gamma__ = fun (s : complex f64) => > inl result = gamma_ log py s > if log then > inl s = join s > !\($'"println\!(\\\"gamma__ / s: {:?} / result: {:?}\\\", !s, > !result)"') > result |> resultm.ok' |> optionm'.unbox |> optionm'.default_value > .^(nan (), nan ()) > inl zeta__ = fun (s : complex f64) => > inl result = zeta_ log py s > > inl z = zeta true gamma__ s > > if log then > inl s = join s > !\($'"println\!(\\\"zeta__ / s: {:?} / result: {:?} / z: > {:?}\\\", !s, !result, !z)"') > > // re result - re x |> abs > // |> _assert_lt 0.001 > > // im result - im x |> abs > // |> _assert_lt 0.001 > > result |> resultm.ok' |> optionm'.unbox |> optionm'.default_value > .^(nan (), nan ()) > join fn (zeta__, gamma__) > > Ok () > |> resultm.box > > join > !\($'"pyo3::prepare_freethreaded_python()"') : () > > !\($'"let __run_test = pyo3::Python::with_gil(|py| -> pyo3::PyResult<()> > { //"') > > let x' = fn_ (!\($'"py"') : python) > inl x' = join x' > > inl closure_fix = 2u8, 1u8 > x' |> rust.fix_closure closure_fix > > (!\($'"__run_test"') : _ () pyerr) > |> resultm.unwrap' > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## test_zeta_at_known_values_ > > ── spiral ────────────────────────────────────────────────────────────────────── > inl test_zeta_at_known_values_ log = run_test log fun zeta, gamma => > ;[[ > .^(2, 0), pi ** 2 / 6 > .^(-1, 0), -1 / 12 > ]] > |> fun x => a x : _ i32 _ > |> am.iter fun s, e => > inl result = zeta s > > result |> im |> _assert_eq 0 > re result - e |> abs |> _assert_lt 0.0001 > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -d num-complex pyo3 > > test_zeta_at_known_values_ true > > ── [ 16.50s - return value ] ─────────────────────────────────────────────────── > │ zeta_ / s: (2.0, 0.0) / count: 0 > │ call(zeta_) / f_code.co_name: zeta / f_locals: s=(2+0j), a=1, > derivative=0, method=None, kwargs={} / f_lineno: 528 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(2+0j), a=1, > derivative=0, method=None, kwargs={} / f_lineno: 530 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(2+0j), a=1, > derivative=0, method=None, kwargs={}, d=0 / f_lineno: 531 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(2+0j), a=1, > derivative=0, method=None, kwargs={}, d=0 / f_lineno: 532 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(2+0j), a=1, > derivative=0, method=None, kwargs={}, d=0 / f_lineno: 533 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ call(zeta_) / f_code.co_name: f / f_locals: x=(2+0j), > kwargs={}, name='zeta' / f_lineno: 989 / f_code.co_filename: > /mpmath/ctx_mp_python.py / f_back.f_lineno: 533 / f_back.f_code.co_filename: > /mpmath/functions/zeta.py / arg: None > │ line(zeta_) / f_code.co_name: f / f_locals: x=(2+0j), > kwargs={}, name='zeta' / f_linen... f_code.co_filename: /mpmath/ctx_mp_python.py > / f_back.f_lineno: 1007 / f_back.f_code.co_filename: /mpmath/ctx_mp_python.py / > arg: None > │ line(gamma_) / f_code.co_name: make_mpc / f_locals: / > f_lineno: 604 / f_code.co_filename: /mpmath/ctx_mp_python.py / f_back.f_lineno: > 1007 / f_back.f_code.co_filename: /mpmath/ctx_mp_python.py / arg: None > │ line(gamma_) / f_code.co_name: make_mpc / f_locals: / > f_lineno: 605 / f_code.co_filename: /mpmath/ctx_mp_python.py / f_back.f_lineno: > 1007 / f_back.f_code.co_filename: /mpmath/ctx_mp_python.py / arg: None > │ return(gamma_) / f_code.co_name: make_mpc / f_locals: / > f_lineno: 605 / f_code.co_filename: /mpmath/ctx_mp_python.py / f_back.f_lineno: > 1007 / f_back.f_code.co_filename: /mpmath/ctx_mp_python.py / arg: > mpc(real='1.0', imag='0.0') > │ return(gamma_) / f_code.co_name: f / f_locals: > x=mpc(real='2.0', imag='0.0'), kwargs={}, name='gamma', prec=53, rounding='n' / > f_lineno: 1007 / f_code.co_filename: /mpmath/ctx_mp_python.py / f_back.f_lineno: > 25 / f_back.f_code.co_filename: / arg: mpc(real='1.0', imag='0.0') > │ gamma_ / result: (1.0 + 0.0j) / count: 140 > │ gamma__ / s: Complex { re: 2.0, im: 0.0 } / result: > Ok(Complex { re: 1.0, im: 0.0 }) > │ zeta / count: 1 / s: Complex { re: 2.0, im: -0.0 } > │ zeta__ / s: Complex { re: -1.0, im: 0.0 } / result: > Ok(Complex { re: -0.08333333333333333, im: 0.0 }) / z: Complex { re: NaN, im: > NaN } > │ { name = __assert_eq; actual = +0.000000; expected = > +0.000000 } > │ { name = __assert_lt; actual = +0.000000; expected = > +0.000100 } > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## test_zeta_at_2_minus2 > > ── spiral ────────────────────────────────────────────────────────────────────── > inl test_zeta_at_2_minus2 log = run_test log fun zeta, gamma => > inl s = .^(2, -2) > inl result = zeta s > > (re result - 0.8673) |> abs |> _assert_lt 0.001 > (im result - 0.2750) |> abs |> _assert_lt 0.001 > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -d num-complex pyo3 > > test_zeta_at_2_minus2 true > > ── [ 7.11s - return value ] ──────────────────────────────────────────────────── > │ zeta_ / s: (2.0, -2.0) / count: 0 > │ call(zeta_) / f_code.co_name: zeta / f_locals: s=(2-2j), a=1, > derivative=0, method=None, kwargs={} / f_lineno: 528 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(2-2j), a=1, > derivative=0, method=None, kwargs={} / f_lineno: 530 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(2-2j), a=1, > derivative=0, method=None, kwargs={}, d=0 / f_lineno: 531 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(2-2j), a=1, > derivative=0, method=None, kwargs={}, d=0 / f_lineno: 532 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(2-2j), a=1, > derivative=0, method=None, kwargs={}, d=0 / f_lineno: 533 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ call(zeta_) / f_code.co_name: f / f_locals: x=(2-2j), > kwargs={}, name='zeta' / f_lineno: 989 / f_code.co_filename: > /mpmath/ctx_mp_python.py / f_back.f_lineno: 533 / f_back.f_code.co_filename: > /mpmath/functions/zeta.py / arg: None > │ line(zeta_) / f_code.co_name: f / f_locals: x=(2-2j), > kwargs={}, name='zeta' / f_line... None > │ call(zeta_) / f_code.co_name: python_bitcount / f_locals: n=2 > / f_lineno: 91 / f_code.co_filename: /mpmath/libmp/libintmath.py / > f_back.f_lineno: 778 / f_back.f_code.co_filename: /mpmath/libmp/libmpf.py / arg: > None > │ line(zeta_) / f_code.co_name: python_bitcount / f_locals: n=2 > / f_lineno: 93 / f_code.co_filename: /mpmath/libmp/libintmath.py / > f_back.f_lineno: 778 / f_back.f_code.co_filename: /mpmath/libmp/libmpf.py / arg: > None > │ line(zeta_) / f_code.co_name: python_bitcount / f_locals: > n=2, bc=2 / f_lineno: 94 / f_code.co_filename: /mpmath/libmp/libintmath.py / > f_back.f_lineno: 778 / f_back.f_code.co_filename: /mpmath/libmp/libmpf.py / arg: > None > │ line(zeta_) / f_code.co_name: python_bitcount / f_locals: > n=2, bc=2 / f_lineno: 95 / f_code.co_filename: /mpmath/libmp/libintmath.py / > f_back.f_lineno: 778 / f_back.f_code.co_filename: /mpmath/libmp/libmpf.py / arg: > None > │ return(zeta_) / f_code.co_name: python_bitcount / f_locals: > n=2, bc=2 / f_lineno: 95 / f_code.co_filename: /mpmath/libmp/libintmath.py / > f_back.f_lineno: 778 / f_back.f_code.co_filename: /mpmath/libmp/libmpf.py / arg: > 2 > │ zeta_ / result: (0.867351829635993 + 0.275127238807858j) / > count: 1812 > │ zeta / count: 0 / s: Complex { re: 2.0, im: -2.0 } > │ zeta__ / s: Complex { re: 2.0, im: -2.0 } / result: > Ok(Complex { re: 0.8673518296359931, im: 0.27512723880785767 }) / z: Complex { > re: NaN, im: NaN } > │ { name = __assert_lt; actual = +0.000052; expected = > +0.001000 } > │ { name = __assert_lt; actual = +0.000127; expected = > +0.001000 } > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## test_trivial_zero_at_negative_even___ > > ── spiral ────────────────────────────────────────────────────────────────────── > inl test_trivial_zero_at_negative_even___ log = run_test log fun zeta, gamma => > (join listm'.init_series -2f64 -40 -2) > |> listm.iter fun n => > inl s = .^(n, 0) > inl result = zeta s > > result |> re |> _assert_eq 0 > result |> im |> _assert_eq 0 > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -d num-complex pyo3 > > test_trivial_zero_at_negative_even___ true > > ── [ 7.64s - return value ] ──────────────────────────────────────────────────── > │ zeta_ / s: (-2.0, 0.0) / count: 0 > │ call(zeta_) / f_code.co_name: zeta / f_locals: s=(-2+0j), > a=1, derivative=0, method=None, kwargs={} / f_lineno: 528 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(-2+0j), > a=1, derivative=0, method=None, kwargs={} / f_lineno: 530 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(-2+0j), > a=1, derivative=0, method=None, kwargs={}, d=0 / f_lineno: 531 / > f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(-2+0j), > a=1, derivative=0, method=None, kwargs={}, d=0 / f_lineno: 532 / > f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(-2+0j), > a=1, derivative=0, method=None, kwargs={}, d=0 / f_lineno: 533 / > f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: None > │ call(zeta_) / f_code.co_name: f / f_locals: x=(-2+0j), > kwargs={}, name='zeta' / f_lineno: 989 / f_code.co_filename: > /mpmath/ctx_mp_python.py / f_back.f_lineno: 533 / f_back.f_code.co_filename: > /mpmath/functions/zeta.py / arg: None > │ line(zeta_) / f_code.co_name: f / f_locals: x=(-2+0j), > kwargs={}, name='zeta' /...neno: 1007 / f_back.f_code.co_filename: > /mpmath/ctx_mp_python.py / arg: None > │ line(gamma_) / f_code.co_name: make_mpc / f_locals: / > f_lineno: 604 / f_code.co_filename: /mpmath/ctx_mp_python.py / f_back.f_lineno: > 1007 / f_back.f_code.co_filename: /mpmath/ctx_mp_python.py / arg: None > │ line(gamma_) / f_code.co_name: make_mpc / f_locals: / > f_lineno: 605 / f_code.co_filename: /mpmath/ctx_mp_python.py / f_back.f_lineno: > 1007 / f_back.f_code.co_filename: /mpmath/ctx_mp_python.py / arg: None > │ return(gamma_) / f_code.co_name: make_mpc / f_locals: / > f_lineno: 605 / f_code.co_filename: /mpmath/ctx_mp_python.py / f_back.f_lineno: > 1007 / f_back.f_code.co_filename: /mpmath/ctx_mp_python.py / arg: > mpc(real='8.1591528324789768e+47', imag='0.0') > │ return(gamma_) / f_code.co_name: f / f_locals: > x=mpc(real='41.0', imag='0.0'), kwargs={}, name='gamma', prec=53, rounding='n' / > f_lineno: 1007 / f_code.co_filename: /mpmath/ctx_mp_python.py / f_back.f_lineno: > 25 / f_back.f_code.co_filename: / arg: mpc(real='8.1591528324789768e+47', > imag='0.0') > │ gamma_ / result: (8.15915283247898e+47 + 0.0j) / count: 149 > │ gamma__ / s: Complex { re: 41.0, im: 0.0 } / result: > Ok(Complex { re: 8.159152832478977e47, im: 0.0 }) > │ zeta / count: 1 / s: Complex { re: 41.0, im: -0.0 } > │ zeta__ / s: Complex { re: -40.0, im: 0.0 } / result: > Ok(Complex { re: 0.0, im: 0.0 }) / z: Complex { re: NaN, im: NaN } > │ { name = __assert_eq; actual = +0.000000; expected = > +0.000000 } > │ { name = __assert_eq; actual = +0.000000; expected = > +0.000000 } > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## test_non_trivial_zero___ > > ── spiral ────────────────────────────────────────────────────────────────────── > inl test_non_trivial_zero___ log = run_test log fun zeta, gamma => > ;[[ > .^(0.5, 14.134725) > .^(0.5, 21.022040) > .^(0.5, 25.010857) > .^(0.5, 30.424876) > .^(0.5, 32.935062) > .^(0.5, 37.586178) > ]] > |> fun x => a x : _ i32 _ > |> am.iter fun x => > inl result = zeta x > result |> re |> abs |> _assert_lt 0.0001 > result |> im |> abs |> _assert_lt 0.0001 > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -d num-complex pyo3 > > test_non_trivial_zero___ true > > ── [ 7.33s - return value ] ──────────────────────────────────────────────────── > │ zeta_ / s: (0.5, 14.134725) / count: 0 > │ call(zeta_) / f_code.co_name: zeta / f_locals: > s=(0.5+14.134725j), a=1, derivative=0, method=None, kwargs={} / f_lineno: 528 / > f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: > s=(0.5+14.134725j), a=1, derivative=0, method=None, kwargs={} / f_lineno: 530 / > f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: > s=(0.5+14.134725j), a=1, derivative=0, method=None, kwargs={}, d=0 / f_lineno: > 531 / f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: > s=(0.5+14.134725j), a=1, derivative=0, method=None, kwargs={}, d=0 / f_lineno: > 532 / f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: > s=(0.5+14.134725j), a=1, derivative=0, method=None, kwargs={}, d=0 / f_lineno: > 533 / f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: None > │ call(zeta_) / f_code.co_name: f / f_locals: > x=(0.5+14.134725j), kwargs={}, name='zeta' / f_lineno: 989 / f_code.co_filename: > /mpmath/ctx_mp_python.py / f_back.f_lineno: 533 / f_back.f_code.co_filename: > /mpmath/functions/zeta.py / arg: None > │ line(zeta_) / f_code...None > │ line(gamma_) / f_code.co_name: complex_stirling_series / > f_locals: x=1208925819614629174706176, y=-90877802089662679288381440, prec=81, > _m=3416353708500640443578529333, tre=855591523614410863719, > tim=64316830603724894628746, ure=-1710577520534459139249, > uim=45518868236127668552, sre=1013002518538853602038572, > sim=90883161825546323029600502 / f_lineno: 1637 / f_code.co_filename: > /mpmath/libmp/gammazeta.py / f_back.f_lineno: 2050 / f_back.f_code.co_filename: > /mpmath/libmp/gammazeta.py / arg: None > │ line(gamma_) / f_code.co_name: complex_stirling_series / > f_locals: x=1208925819614629174706176, y=-90877802089662679288381440, prec=81, > _m=3416353708500640443578529333, tre=-1816151534455075068, > tim=-45486653225747820096, ure=-1710577520534459139249, > uim=45518868236127668552, sre=1013002518538853602038572, > sim=90883161825546323029600502 / f_lineno: 1638 / f_code.co_filename: > /mpmath/libmp/gammazeta.py / f_back.f_lineno: 2050 / f_back.f_code.co_filename: > /mpmath/libmp/gammazeta.py / arg: None > │ gamma_ / result: (-1.32798420042152e-26 + > 5.5751975252688e-26j) / count: 309 > │ gamma__ / s: Complex { re: 0.5, im: -37.586178 } / result: > Ok(Complex { re: -1.3279842004215153e-26, im: 5.575197525268802e-26 }) > │ zeta__ / s: Complex { re: 0.5, im: 37.586178 } / result: > Ok(Complex { re: -8.910186507947958e-8, im: -2.943780446402868e-7 }) / z: > Complex { re: -0.0, im: 0.0 } > │ { name = __assert_lt; actual = +0.000000; expected = > +0.000100 } > │ { name = __assert_lt; actual = +0.000000; expected = > +0.000100 } > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## test_real_part_greater_than_one___ > > ── spiral ────────────────────────────────────────────────────────────────────── > inl test_real_part_greater_than_one___ log = run_test log fun zeta, gamma => > inl points = ;[[ 2; 3; 4; 5; 10; 20; 50 ]] > (a points : _ i32 _) > |> am.iter fun point => > inl s = .^(point, 0) > inl result = zeta s > result |> re |> _assert_gt 0 > result |> im |> _assert_eq 0 > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -d num-complex pyo3 > > test_real_part_greater_than_one___ true > > ── [ 7.21s - return value ] ──────────────────────────────────────────────────── > │ zeta_ / s: (2.0, 0.0) / count: 0 > │ call(zeta_) / f_code.co_name: zeta / f_locals: s=(2+0j), a=1, > derivative=0, method=None, kwargs={} / f_lineno: 528 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(2+0j), a=1, > derivative=0, method=None, kwargs={} / f_lineno: 530 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(2+0j), a=1, > derivative=0, method=None, kwargs={}, d=0 / f_lineno: 531 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(2+0j), a=1, > derivative=0, method=None, kwargs={}, d=0 / f_lineno: 532 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(2+0j), a=1, > derivative=0, method=None, kwargs={}, d=0 / f_lineno: 533 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ call(zeta_) / f_code.co_name: f / f_locals: x=(2+0j), > kwargs={}, name='zeta' / f_lineno: 989 / f_code.co_filename: > /mpmath/ctx_mp_python.py / f_back.f_lineno: 533 / f_back.f_code.co_filename: > /mpmath/functions/zeta.py / arg: None > │ line(zeta_) / f_code.co_name: f / f_locals: x=(2+0j), > kwargs={}, name='zeta' / f_linen..._mp_python.py / f_back.f_lineno: 1007 / > f_back.f_code.co_filename: /mpmath/ctx_mp_python.py / arg: None > │ line(zeta_) / f_code.co_name: make_mpc / f_locals: / > f_lineno: 605 / f_code.co_filename: /mpmath/ctx_mp_python.py / f_back.f_lineno: > 1007 / f_back.f_code.co_filename: /mpmath/ctx_mp_python.py / arg: None > │ return(zeta_) / f_code.co_name: make_mpc / f_locals: / > f_lineno: 605 / f_code.co_filename: /mpmath/ctx_mp_python.py / f_back.f_lineno: > 1007 / f_back.f_code.co_filename: /mpmath/ctx_mp_python.py / arg: > mpc(real='1.0000000000000009', imag='0.0') > │ return(zeta_) / f_code.co_name: f / f_locals: > x=mpc(real='50.0', imag='0.0'), kwargs={}, name='zeta', prec=53, rounding='n' / > f_lineno: 1007 / f_code.co_filename: /mpmath/ctx_mp_python.py / f_back.f_lineno: > 533 / f_back.f_code.co_filename: /mpmath/functions/zeta.py / arg: > mpc(real='1.0000000000000009', imag='0.0') > │ return(zeta_) / f_code.co_name: zeta / f_locals: s=(50+0j), > a=1, derivative=0, method=None, kwargs={}, d=0 / f_lineno: 533 / > f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: mpc(real='1.0000000000000009', imag='0.0') > │ zeta_ / result: (1.0 + 0.0j) / count: 181 > │ zeta / count: 0 / s: Complex { re: 50.0, im: 0.0 } > │ zeta__ / s: Complex { re: 50.0, im: 0.0 } / result: > Ok(Complex { re: 1.0000000000000009, im: 0.0 }) / z: Complex { re: NaN, im: NaN > } > │ { name = __assert_gt; actual = +1.000000; expected = > +0.000000 } > │ { name = __assert_eq; actual = +0.000000; expected = > +0.000000 } > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## test_zeta_at_1___ > > ── spiral ────────────────────────────────────────────────────────────────────── > inl test_zeta_at_1___ log = run_test log fun zeta, gamma => > inl s = .^(1, 0) > inl result = zeta s > result |> re |> _assert_eq limit.max > result |> im |> _assert_eq 0 > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -d num-complex pyo3 > > test_zeta_at_1___ true > > ── [ 7.16s - return value ] ──────────────────────────────────────────────────── > │ zeta_ / s: (1.0, 0.0) / count: 0 > │ call(zeta_) / f_code.co_name: zeta / f_locals: s=(1+0j), a=1, > derivative=0, method=None, kwargs={} / f_lineno: 528 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(1+0j), a=1, > derivative=0, method=None, kwargs={} / f_lineno: 530 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(1+0j), a=1, > derivative=0, method=None, kwargs={}, d=0 / f_lineno: 531 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(1+0j), a=1, > derivative=0, method=None, kwargs={}, d=0 / f_lineno: 532 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(1+0j), a=1, > derivative=0, method=None, kwargs={}, d=0 / f_lineno: 533 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ call(zeta_) / f_code.co_name: f / f_locals: x=(1+0j), > kwargs={}, name='zeta' / f_lineno: 989 / f_code.co_filename: > /mpmath/ctx_mp_python.py / f_back.f_lineno: 533 / f_back.f_code.co_filename: > /mpmath/functions/zeta.py / arg: None > │ line(zeta_) / f_code.co_name: f / f_locals: x=(1+0j), > kwargs={}, name='zeta' / f_linen...) / f_code.co_name: f / f_locals: > x=mpc(real='0.0', imag='0.0'), kwargs={}, name='gamma', prec=53, rounding='n' / > f_lineno: 1007 / f_code.co_filename: /mpmath/ctx_mp_python.py / f_back.f_lineno: > 25 / f_back.f_code.co_filename: / arg: None > │ exception(gamma_) / f_code.co_name: fn / f_locals: log=True, > s=0j / f_lineno: 25 / f_code.co_filename: / f_back.f_lineno: / > f_back.f_code.co_filename: / arg: (<class 'ValueError'>, ValueError('gamma > function pole'), <traceback object at 0x<?>>) > │ line(gamma_) / f_code.co_name: fn / f_locals: log=True, s=0j > / f_lineno: 29 / f_code.co_filename: / f_back.f_lineno: / > f_back.f_code.co_filename: / arg: None > │ line(gamma_) / f_code.co_name: fn / f_locals: log=True, s=0j, > e=ValueError('gamma function pole') / f_lineno: 30 / f_code.co_filename: / > f_back.f_lineno: / f_back.f_code.co_filename: / arg: None > │ line(gamma_) / f_code.co_name: fn / f_locals: log=True, s=0j > / f_lineno: 32 / f_code.co_filename: / f_back.f_lineno: / > f_back.f_code.co_filename: / arg: None > │ return(gamma_) / f_code.co_name: fn / f_locals: log=True, > s=0j / f_lineno: 32 / f_code.co_filename: / f_back.f_lineno: / > f_back.f_code.co_filename: / arg: (0.0, 0.0) > │ gamma__ / s: Complex { re: 0.0, im: 0.0 } / result: > Ok(Complex { re: 0.0, im: 0.0 }) > │ zeta__ / s: Complex { re: 1.0, im: 0.0 } / result: Ok(Complex > { re: inf, im: 0.0 }) / z: Complex { re: 0.0, im: 0.0 } > │ { name = __assert_eq; actual = +inf; expected = +inf } > │ { name = __assert_eq; actual = +0.000000; expected = > +0.000000 } > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## test_symmetry_across_real_axis___ > > ── spiral ────────────────────────────────────────────────────────────────────── > inl test_symmetry_across_real_axis___ log = run_test log fun zeta, gamma => > inl s = .^(2, 10) > inl result_positive_im = zeta s > inl result_negative_im = zeta .^(re s, -(im s)) > inl conj = result_negative_im |> conj > result_positive_im |> re |> _assert_eq (conj |> re) > result_positive_im |> im |> _assert_eq (conj |> im) > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -d num-complex pyo3 > > test_symmetry_across_real_axis___ true > > ── [ 7.21s - return value ] ──────────────────────────────────────────────────── > │ zeta_ / s: (2.0, 10.0) / count: 0 > │ call(zeta_) / f_code.co_name: zeta / f_locals: s=(2+10j), > a=1, derivative=0, method=None, kwargs={} / f_lineno: 528 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(2+10j), > a=1, derivative=0, method=None, kwargs={} / f_lineno: 530 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(2+10j), > a=1, derivative=0, method=None, kwargs={}, d=0 / f_lineno: 531 / > f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(2+10j), > a=1, derivative=0, method=None, kwargs={}, d=0 / f_lineno: 532 / > f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(2+10j), > a=1, derivative=0, method=None, kwargs={}, d=0 / f_lineno: 533 / > f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: None > │ call(zeta_) / f_code.co_name: f / f_locals: x=(2+10j), > kwargs={}, name='zeta' / f_lineno: 989 / f_code.co_filename: > /mpmath/ctx_mp_python.py / f_back.f_lineno: 533 / f_back.f_code.co_filename: > /mpmath/functions/zeta.py / arg: None > │ line(zeta_) / f_code.co_name: f / f_locals: x=(2+10j), > kwargs={}, name='zeta' /...ack.f_lineno: 778 / f_back.f_code.co_filename: > /mpmath/libmp/libmpf.py / arg: None > │ line(zeta_) / f_code.co_name: python_bitcount / f_locals: > n=26, bc=5 / f_lineno: 94 / f_code.co_filename: /mpmath/libmp/libintmath.py / > f_back.f_lineno: 778 / f_back.f_code.co_filename: /mpmath/libmp/libmpf.py / arg: > None > │ line(zeta_) / f_code.co_name: python_bitcount / f_locals: > n=26, bc=5 / f_lineno: 95 / f_code.co_filename: /mpmath/libmp/libintmath.py / > f_back.f_lineno: 778 / f_back.f_code.co_filename: /mpmath/libmp/libmpf.py / arg: > None > │ return(zeta_) / f_code.co_name: python_bitcount / f_locals: > n=26, bc=5 / f_lineno: 95 / f_code.co_filename: /mpmath/libmp/libintmath.py / > f_back.f_lineno: 778 / f_back.f_code.co_filename: /mpmath/libmp/libmpf.py / arg: > 5 > │ line(zeta_) / f_code.co_name: mpf_add / f_locals: s=(0, 1, 2, > 1), t=(0, 25, 2, 5), prec=14, rnd='d', _sub=0, ssign=0, sman=1, sexp=2, sbc=1, > tsign=0, tman=25, texp=2, tbc=5, offset=0, man=26, bc=5 / f_lineno: 779 / > f_code.co_filename: /mpmath/libmp/libmpf.py / f_back.f_lineno: 1401 / > f_back.f_code.co_filename: /mpmath/libmp/libmpf.py / arg: None > │ zeta_ / result: (1.19798250067418 + 0.0791704917205257j) / > count: 1174 > │ zeta / count: 0 / s: Complex { re: 2.0, im: -10.0 } > │ zeta__ / s: Complex { re: 2.0, im: -10.0 } / result: > Ok(Complex { re: 1.1979825006741847, im: 0.07917049172052575 }) / z: Complex { > re: NaN, im: NaN } > │ { name = __assert_eq; actual = +1.197983; expected = > +1.197983 } > │ { name = __assert_eq; actual = -0.079170; expected = > -0.079170 } > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## test_behavior_near_origin___ > > ── spiral ────────────────────────────────────────────────────────────────────── > inl test_behavior_near_origin___ log = run_test log fun zeta, gamma => > inl s = .^(0.01, 0.01) > inl result = zeta s > result |> re |> _assert_lt limit.max > result |> im |> _assert_lt limit.max > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -d num-complex pyo3 > > test_behavior_near_origin___ true > > ── [ 7.16s - return value ] ──────────────────────────────────────────────────── > │ zeta_ / s: (0.01, 0.01) / count: 0 > │ call(zeta_) / f_code.co_name: zeta / f_locals: > s=(0.01+0.01j), a=1, derivative=0, method=None, kwargs={} / f_lineno: 528 / > f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: > s=(0.01+0.01j), a=1, derivative=0, method=None, kwargs={} / f_lineno: 530 / > f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: > s=(0.01+0.01j), a=1, derivative=0, method=None, kwargs={}, d=0 / f_lineno: 531 / > f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: > s=(0.01+0.01j), a=1, derivative=0, method=None, kwargs={}, d=0 / f_lineno: 532 / > f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: > s=(0.01+0.01j), a=1, derivative=0, method=None, kwargs={}, d=0 / f_lineno: 533 / > f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: None > │ call(zeta_) / f_code.co_name: f / f_locals: x=(0.01+0.01j), > kwargs={}, name='zeta' / f_lineno: 989 / f_code.co_filename: > /mpmath/ctx_mp_python.py / f_back.f_lineno: 533 / f_back.f_code.co_filename: > /mpmath/functions/zeta.py / arg: None > │ line(zeta_) / f_code.co_name: f / f_locals: x=(0.../ > f_back.f_lineno: 1007 / f_back.f_code.co_filename: /mpmath/ctx_mp_python.py / > arg: None > │ line(gamma_) / f_code.co_name: mpc_gamma / f_locals: z=((0, > 4458563631096791, -52, 52), (1, 5764607523034235, -59, 53)), prec=53, rnd='n', > type=0, a=(0, 4458563631096791, -52, 52), b=(1, 5764607523034235, -59, 53), > asign=0, aman=4458563631096791, aexp=-52, abc=52, bsign=1, > bman=5764607523034235, bexp=-59, bbc=53, wp=73, amag=0, bmag=-6, mag=0, an=0, > bn=0, absn=0j, gamma_size=0, need_reflection=0, zorig=((0, 4458563631096791, > -52, 52), (1, 5764607523034235, -59, 53)), yfinal=0, balance_prec=0, > n_for_stirling=14, need_reduction=True, afix=132131814190692672995328, > bfix=-94447329657392906240, r=0, zprered=((0, 4458563631096791, -52, 52), (1, > 5764607523034235, -59, 53)), d=14, rre=56942610883563778729574216337150, > one=9444732965739290427392, rim=-1820461636508155576115177658065, k=12 / > f_lineno: 2043 / f_code.co_filename: /mpmath/libmp/gammazeta.py / > f_back.f_lineno: 1007 / f_back.f_code.co_filename: /mpmath/ctx_mp_python.py / > arg: None > │ gamma_ / result: (1.00577030202902 + 0.0059717824054102j) / > count: 383 > │ gamma__ / s: Complex { re: 0.99, im: -0.01 } / result: > Ok(Complex { re: 1.005770302029023, im: 0.005971782405410201 }) > │ zeta__ / s: Complex { re: 0.01, im: 0.01 } / result: > Ok(Complex { re: -0.5091873433665667, im: -0.00939202213994577 }) / z: Complex { > re: 0.0, im: 0.0 } > │ { name = __assert_lt; actual = -0.509187; expected = +inf } > │ { name = __assert_lt; actual = -0.009392; expected = +inf } > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## test_imaginary_axis > > ── spiral ────────────────────────────────────────────────────────────────────── > inl test_imaginary_axis log = run_test log fun zeta, gamma => > (join [[ 10; 20; 30; 40; 50; 60; 70; 80; 90; 100 ]]) > |> listm.iter fun s => > inl s = .^(0, s) > inl result = zeta s > result |> re |> _assert_ne 0 > result |> im |> _assert_ne 0 > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -d num-complex pyo3 > > test_imaginary_axis true > > ── [ 7.53s - return value ] ──────────────────────────────────────────────────── > │ zeta_ / s: (0.0, 10.0) / count: 0 > │ call(zeta_) / f_code.co_name: zeta / f_locals: s=10j, a=1, > derivative=0, method=None, kwargs={} / f_lineno: 528 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=10j, a=1, > derivative=0, method=None, kwargs={} / f_lineno: 530 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=10j, a=1, > derivative=0, method=None, kwargs={}, d=0 / f_lineno: 531 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=10j, a=1, > derivative=0, method=None, kwargs={}, d=0 / f_lineno: 532 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=10j, a=1, > derivative=0, method=None, kwargs={}, d=0 / f_lineno: 533 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ call(zeta_) / f_code.co_name: f / f_locals: x=10j, kwargs={}, > name='zeta' / f_lineno: 989 / f_code.co_filename: /mpmath/ctx_mp_python.py / > f_back.f_lineno: 533 / f_back.f_code.co_filename: /mpmath/functions/zeta.py / > arg: None > │ line(zeta_) / f_code.co_name: f / f_locals: x=10j, kwargs={}, > name='zeta' / f_lineno: 990 / f_code.co_f...a_) / f_code.co_name: to_fixed / > f_locals: s=(0, 1, 0, 1), prec=83 / f_lineno: 511 / f_code.co_filename: > /mpmath/libmp/libmpf.py / f_back.f_lineno: 2031 / f_back.f_code.co_filename: > /mpmath/libmp/gammazeta.py / arg: None > │ line(gamma_) / f_code.co_name: to_fixed / f_locals: s=(0, 1, > 0, 1), prec=83, sign=0, man=1, exp=0, bc=1 / f_lineno: 512 / f_code.co_filename: > /mpmath/libmp/libmpf.py / f_back.f_lineno: 2031 / f_back.f_code.co_filename: > /mpmath/libmp/gammazeta.py / arg: None > │ line(gamma_) / f_code.co_name: to_fixed / f_locals: s=(0, 1, > 0, 1), prec=83, sign=0, man=1, exp=0, bc=1, offset=83 / f_lineno: 513 / > f_code.co_filename: /mpmath/libmp/libmpf.py / f_back.f_lineno: 2031 / > f_back.f_code.co_filename: /mpmath/libmp/gammazeta.py / arg: None > │ line(gamma_) / f_code.co_name: to_fixed / f_locals: s=(0, 1, > 0, 1), prec=83, sign=0, man=1, exp=0, bc=1, offset=83 / f_lineno: 517 / > f_code.co_filename: /mpmath/libmp/libmpf.py / f_back.f_lineno: 2031 / > f_back.f_code.co_filename: /mpmath/libmp/gammazeta.py / arg: None > │ gamma_ / result: (-1.51425318049776e-67 + > 2.79082155561748e-69j) / count: 289 > │ gamma__ / s: Complex { re: 1.0, im: -100.0 } / result: > Ok(Complex { re: -1.514253180497756e-67, im: 2.7908215556174775e-69 }) > │ zeta__ / s: Complex { re: 0.0, im: 100.0 } / result: > Ok(Complex { re: 6.51721042625301, im: 0.18128842533791736 }) / z: Complex { re: > 0.0, im: 0.0 } > │ { name = __assert_ne; actual = +6.517210; expected = > +0.000000 } > │ { name = __assert_ne; actual = +0.181288; expected = > +0.000000 } > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## test_critical_strip > > ── spiral ────────────────────────────────────────────────────────────────────── > inl test_critical_strip log = run_test log fun zeta, gamma => > (join [[ > .^(0.5, 14.134725) > .^(0.75, 20.5) > .^(1.25, 30.1) > .^(0.25, 40.0) > .^(1.0, 50.0) > ]]) > |> listm.iter fun s => > inl result = zeta s > result |> re |> _assert_ne 0 > result |> im |> _assert_ne 0 > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -d num-complex pyo3 > > test_critical_strip true > > ── [ 7.32s - return value ] ──────────────────────────────────────────────────── > │ zeta_ / s: (0.5, 14.134725) / count: 0 > │ call(zeta_) / f_code.co_name: zeta / f_locals: > s=(0.5+14.134725j), a=1, derivative=0, method=None, kwargs={} / f_lineno: 528 / > f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: > s=(0.5+14.134725j), a=1, derivative=0, method=None, kwargs={} / f_lineno: 530 / > f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: > s=(0.5+14.134725j), a=1, derivative=0, method=None, kwargs={}, d=0 / f_lineno: > 531 / f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: > s=(0.5+14.134725j), a=1, derivative=0, method=None, kwargs={}, d=0 / f_lineno: > 532 / f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: > s=(0.5+14.134725j), a=1, derivative=0, method=None, kwargs={}, d=0 / f_lineno: > 533 / f_code.co_filename: /mpmath/functions/zeta.py / f_back.f_lineno: 25 / > f_back.f_code.co_filename: / arg: None > │ call(zeta_) / f_code.co_name: f / f_locals: > x=(0.5+14.134725j), kwargs={}, name='zeta' / f_lineno: 989 / f_code.co_filename: > /mpmath/ctx_mp_python.py / f_back.f_lineno: 533 / f_back.f_code.co_filename: > /mpmath/functions/zeta.py / arg: None > │ line(zeta_) / f_code...23535862290161314995 / f_lineno: 1648 > / f_code.co_filename: /mpmath/libmp/gammazeta.py / f_back.f_lineno: 2050 / > f_back.f_code.co_filename: /mpmath/libmp/gammazeta.py / arg: None > │ line(gamma_) / f_code.co_name: complex_stirling_series / > f_locals: x=0, y=-241785163922925834941235200, prec=82, > _m=12089258196146291747061760000, tre=0, tim=396, ure=-1934281311383406679530, > uim=0, sre=4443714077719696485012210, sim=241793223535862290161314995 / > f_lineno: 1649 / f_code.co_filename: /mpmath/libmp/gammazeta.py / > f_back.f_lineno: 2050 / f_back.f_code.co_filename: /mpmath/libmp/gammazeta.py / > arg: None > │ line(gamma_) / f_code.co_name: complex_stirling_series / > f_locals: x=0, y=-241785163922925834941235200, prec=82, > _m=12089258196146291747061760000, tre=0, tim=396, ure=-1934281311383406679530, > uim=0, sre=4443714077719696485012210, sim=241793223535862290161314997 / > f_lineno: 1650 / f_code.co_filename: /mpmath/libmp/gammazeta.py / > f_back.f_lineno: 2050 / f_back.f_code.co_filename: /mpmath/libmp/gammazeta.py / > arg: None > │ gamma_ / result: (2.63173210619768e-35 - > 8.16464935465334e-36j) / count: 262 > │ gamma__ / s: Complex { re: 0.0, im: -50.0 } / result: > Ok(Complex { re: 2.6317321061976804e-35, im: -8.164649354653339e-36 }) > │ zeta__ / s: Complex { re: 1.0, im: 50.0 } / result: > Ok(Complex { re: 0.44103873082309397, im: 0.281582455029683 }) / z: Complex { > re: 0.0, im: 0.0 } > │ { name = __assert_ne; actual = +0.441039; expected = > +0.000000 } > │ { name = __assert_ne; actual = +0.281582; expected = > +0.000000 } > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## test_reflection_formula_for_specific_value > > ── spiral ────────────────────────────────────────────────────────────────────── > inl test_reflection_formula_for_specific_value log = run_test log fun zeta, > gamma => > (join [[ > .^(3, 4) > .^(2.5, -3.5) > .^(1.5, 2.5) > .^(0.5, 14.134725) > ]]) > |> listm.iter fun s => > inl lhs = zeta s > inl reflection_coefficient = > (.^(2, 0) .** s) > .* (.^(pi, 0) .** (s .- .^(1, 0))) > .* (.^(pi, 0) .* s ./ .^(2, 0) |> complex_sin) > .* gamma (.^(1, 0) .- s) > > inl one_minus_s = .^(1 - re s, -(im s)) > inl rhs = reflection_coefficient .* zeta one_minus_s > > re lhs - re rhs |> abs |> _assert_lt 0.0001 > im lhs - im rhs |> abs |> _assert_lt 0.0001 > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -d num-complex pyo3 > > test_reflection_formula_for_specific_value true > > ── [ 7.68s - return value ] ──────────────────────────────────────────────────── > │ zeta_ / s: (3.0, 4.0) / count: 0 > │ call(zeta_) / f_code.co_name: zeta / f_locals: s=(3+4j), a=1, > derivative=0, method=None, kwargs={} / f_lineno: 528 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(3+4j), a=1, > derivative=0, method=None, kwargs={} / f_lineno: 530 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(3+4j), a=1, > derivative=0, method=None, kwargs={}, d=0 / f_lineno: 531 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(3+4j), a=1, > derivative=0, method=None, kwargs={}, d=0 / f_lineno: 532 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(3+4j), a=1, > derivative=0, method=None, kwargs={}, d=0 / f_lineno: 533 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ call(zeta_) / f_code.co_name: f / f_locals: x=(3+4j), > kwargs={}, name='zeta' / f_lineno: 989 / f_code.co_filename: > /mpmath/ctx_mp_python.py / f_back.f_lineno: 533 / f_back.f_code.co_filename: > /mpmath/functions/zeta.py / arg: None > │ line(zeta_) / f_code.co_name: f / f_locals: x=(3+4j), > kwargs={}, name='zeta' / f_linen... / f_code.co_filename: > /mpmath/libmp/gammazeta.py / f_back.f_lineno: 1007 / f_back.f_code.co_filename: > /mpmath/ctx_mp_python.py / arg: None > │ line(gamma_) / f_code.co_name: mpc_gamma / f_locals: z=((0, > 1, -1, 1), (0, 3978571390186527, -48, 52)), prec=53, rnd='n', type=0, a=(0, 1, > -1, 1), b=(0, 3978571390186527, -48, 52), asign=0, aman=1, aexp=-1, abc=1, > bsign=0, bman=3978571390186527, bexp=-48, bbc=52, wp=79, amag=0, bmag=4, mag=4, > an=0, bn=14, absn=14j, gamma_size=56, need_reflection=0, zorig=((0, 1, -1, 1), > (0, 3978571390186527, -48, 52)), yfinal=0, balance_prec=0, n_for_stirling=15, > need_reduction=True, afix=2115620184325601055735808, > bfix=8543917002826194402410496, r=0, zprered=((0, 1, -1, 1), (0, > 3978571390186527, -48, 52)), d=5, rre=-542313259704087430481959845, > one=604462909807314587353088, rim=-1657865507045117397880679064, k=2 / f_lineno: > 2043 / f_code.co_filename: /mpmath/libmp/gammazeta.py / f_back.f_lineno: 1007 / > f_back.f_code.co_filename: /mpmath/ctx_mp_python.py / arg: None > │ gamma_ / result: (-1.4455538437607e-10 - > 5.52278876877407e-10j) / count: 318 > │ gamma__ / s: Complex { re: 0.5, im: 14.134725 } / result: > Ok(Complex { re: -1.4455538437606964e-10, im: -5.522788768774066e-10 }) > │ zeta__ / s: Complex { re: 0.5, im: -14.134725 } / result: > Ok(Complex { re: 1.7674298413849186e-8, im: 1.1102028930923156e-7 }) / z: > Complex { re: 0.0, im: 0.0 } > │ { name = __assert_lt; actual = +0.000000; expected = > +0.000100 } > │ { name = __assert_lt; actual = +0.000000; expected = > +0.000100 } > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## test_euler_product_formula > > ── spiral ────────────────────────────────────────────────────────────────────── > inl test_euler_product_formula log = run_test log fun zeta, gamma => > inl s_values = join [[ 2; 2.5; 3; 3.5; 4; 4.5; 5 ]] > inl primes = join [[ 2; 3; 5; 7; 11; 13; 17; 19; 23; 29; 31; 37; 41; 43; 47; > 53; 59; 61; 67; 71 ]] > s_values > |> listm.iter fun s_re => > inl s = .^(s_re, 0) > inl product = > (1, primes) > ||> listm.fold fun acc x => > acc * 1 / (1 - x ** -s_re) > > inl result = zeta s > re result - product |> abs |> _assert_lt 0.01 > result |> im |> _assert_lt 0.01 > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -d num-complex pyo3 > > test_euler_product_formula true > > ── [ 7.39s - return value ] ──────────────────────────────────────────────────── > │ zeta_ / s: (2.0, 0.0) / count: 0 > │ call(zeta_) / f_code.co_name: zeta / f_locals: s=(2+0j), a=1, > derivative=0, method=None, kwargs={} / f_lineno: 528 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(2+0j), a=1, > derivative=0, method=None, kwargs={} / f_lineno: 530 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(2+0j), a=1, > derivative=0, method=None, kwargs={}, d=0 / f_lineno: 531 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(2+0j), a=1, > derivative=0, method=None, kwargs={}, d=0 / f_lineno: 532 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ line(zeta_) / f_code.co_name: zeta / f_locals: s=(2+0j), a=1, > derivative=0, method=None, kwargs={}, d=0 / f_lineno: 533 / f_code.co_filename: > /mpmath/functions/zeta.py / f_back.f_lineno: 25 / f_back.f_code.co_filename: / > arg: None > │ call(zeta_) / f_code.co_name: f / f_locals: x=(2+0j), > kwargs={}, name='zeta' / f_lineno: 989 / f_code.co_filename: > /mpmath/ctx_mp_python.py / f_back.f_lineno: 533 / f_back.f_code.co_filename: > /mpmath/functions/zeta.py / arg: None > │ line(zeta_) / f_code.co_name: f / f_locals: x=(2+0j), > kwargs={}, name='zeta' / f_linen..._code.co_filename: /mpmath/libmp/gammazeta.py > / arg: None > │ line(zeta_) / f_code.co_name: mpf_zeta_int / f_locals: s=5, > prec=53, rnd='n', wp=73, m=19.25, needed_terms=623488, n=33, d=[1, 2179, 792067, > 115062531, 8930212611, 429314925315, 13983537177347, 327666966438659, > 5764846406968067, 78615943485956867, 851604426176701187, 7470527451121689347, > 53898915046387983107, 323897845985013506819, 1638178356374090130179, > 7034281785235908174595, 25833609859980306522883, 81661917475887913739011, > 223448095548034217779971, 532029677981012660429571, 1108048631855905753375491, > 2029946562680066824315651, 3292927237466655352791811, 4769455369342763680768771, > 6235511670496346417767171, 7463408621503347142796035, 8322751284048216428487427, > 8818779962777819524211459, 9050689474911140452082435, 9136270117622166323831555, > 9160252037839493347779331, 9165045885455648617505539, 9165654628010081032708867, > 9165691521498228451812099], t=-84153986440240940095109733900764881301998910956, > k=26 / f_lineno: 954 / f_code.co_filename: /mpmath/libmp/gammazeta.py / > f_back.f_lineno: 985 / f_back.f_code.co_filename: /mpmath/libmp/gammazeta.py / > arg: None > │ zeta_ / result: (1.03692775514337 + 0.0j) / count: 228 > │ zeta / count: 0 / s: Complex { re: 5.0, im: 0.0 } > │ zeta__ / s: Complex { re: 5.0, im: 0.0 } / result: Ok(Complex > { re: 1.03692775514337, im: 0.0 }) / z: Complex { re: NaN, im: NaN } > │ { name = __assert_lt; actual = +0.000000; expected = > +0.010000 } > │ { name = __assert_lt; actual = +0.000000; expected = > +0.010000 } > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## graph > > ── mermaid ───────────────────────────────────────────────────────────────────── > │ <div class="mermaidMarkdownContainer" > style="background-color:white"> > │ <link rel="stylesheet" > href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.0/css/all.min.css" > > > │ <div id="4842cd24d2164210aa3617cf4360a097"></div> > │ <script type="module"> > │ > │ import mermaid from > 'https://cdn.jsdelivr.net/npm/mermaid@10.6.1/dist/mermaid.esm.min.mjs'; > │ let renderTarget = > document.getElementById('4842cd24d2164210aa3617cf4360a097'); > │ try { > │ const {svg, bindFunctions} = await > mermaid.mermaidAPI.render( > │ > 'mermaid_4842cd24d2164210aa3617cf4360a097', > │ `graph TD > │ zeta("zeta()") --> convert > │ zeta --> f["f()"] > │ f --> mpc_f["mpc_zeta()"] > │ f --> mpf_f["mpf_zeta()"] > │ convert --> from_float > │ from_float --> from_man_exp > │ from_man_exp --> python_bitcount > │ python_bitcount --> _normalize > │ _normalize --> make_mpc > │ make_mpc --> mpc_zeta["mpc_zeta()"] > │ mpc_zeta --> mpf_zeta["mpf_zeta()"] > │ mpf_zeta --> to_int > │ to_int --> mpf_zeta_int["mpf_zeta_int()"] > │ mpf_zeta_int --> borwein_coefficients > │ borwein_coefficients --> > from_man_exp_2("from_man_exp()") > │ from_man_exp_2 --> > python_bitcount_2("python_bitcount()") > │ python_bitcount_2 --> _normalize_2("_normalize()") > │ _normalize_2 --> make_mpc_2("make_mpc()") > │ make_mpc_2 --> stop_trace > │ mpf_zeta_int --> mpf_bernoulli > │ mpf_bernoulli --> bernoulli_size > │ bernoulli_size --> mpf_rdiv_int > │ mpf_rdiv_int --> python_bitcount_3("python_bitcount()") > │ python_bitcount_3 --> _normalize1 > │ _normalize1 --> from_man_exp_3("from_man_exp()") > │ from_man_exp_3 --> _normalize_3("_normalize()") > │ _normalize_3 --> mpf_sub > │ mpf_sub --> mpf_add > │ mpf_add --> mpf_neg > │ mpf_neg --> _normalize1_2("_normalize1()") > │ _normalize1_2 --> from_int > │ from_int --> mpf_div > │ mpf_div --> python_bitcount_4("python_bitcount()") > │ python_bitcount_4 --> _normalize1_3("_normalize1()") > │ _normalize1_3 --> make_mpc_3("make_mpc()") > │ make_mpc_3 --> final_stop["stop_trace()"]`); > │ renderTarget.innerHTML = svg; > │ bindFunctions?.(renderTarget); > │ } > │ catch (error) { > │ console.log(error); > │ } > │ </script> > │ </div> > │ > > ── mermaid ───────────────────────────────────────────────────────────────────── > │ <div class="mermaidMarkdownContainer" > style="background-color:white"> > │ <link rel="stylesheet" > href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.0/css/all.min.css" > > > │ <div id="f5e1dda3d13f4f788217319c2c4076b6"></div> > │ <script type="module"> > │ > │ import mermaid from > 'https://cdn.jsdelivr.net/npm/mermaid@10.6.1/dist/mermaid.esm.min.mjs'; > │ let renderTarget = > document.getElementById('f5e1dda3d13f4f788217319c2c4076b6'); > │ try { > │ const {svg, bindFunctions} = await > mermaid.mermaidAPI.render( > │ > 'mermaid_f5e1dda3d13f4f788217319c2c4076b6', > │ `graph TD > │ zeta_rust("zeta() - Rust") --> num_traits("num-traits") > │ zeta_rust --> num_bigint("num-bigint") > │ zeta_rust --> rust_decimal("rust_decimal for > precision") > │ zeta_rust --> error_handling("Rust Error Handling") > │ > │ num_traits --> num_traits_usage("Use for common > traits") > │ num_bigint --> bigint_operations("Arbitrary-precision > arithmetic operations") > │ rust_decimal --> decimal_operations("High-precision > decimal operations") > │ error_handling --> result_type("Use Result<T, E> for > error handling") > │ > │ bigint_operations --> convert_rust("convert() - Rust") > │ bigint_operations --> normalize_rust("_normalize() - > Rust") > │ > │ convert_rust --> from_float_rust("from_float() - Rust") > │ from_float_rust --> from_man_exp_rust("from_man_exp() - > Rust") > │ from_man_exp_rust --> bitcount_rust("bitcount() - > Rust") > │ bitcount_rust --> normalize_rust > │ normalize_rust --> mpc_zeta_rust("mpc_zeta() - Rust") > │ mpc_zeta_rust --> mpf_zeta_rust("mpf_zeta() - Rust") > │ mpf_zeta_rust --> to_int_rust("to_int() - Rust") > │ to_int_rust --> mpf_zeta_int_rust("mpf_zeta_int() - > Rust") > │ > │ mpf_zeta_int_rust --> > borwein_coefficients_rust("borwein_coefficients() - Rust") > │ borwein_coefficients_rust --> > from_man_exp_rust_2("from_man_exp() - Rust") > │ from_man_exp_rust_2 --> bitcount_rust_2("bitcount() - > Rust") > │ bitcount_rust_2 --> normalize_rust_2("_normalize() - > Rust") > │ normalize_rust_2 --> make_mpc_rust("make_mpc() - Rust") > │ > │ mpf_zeta_int_rust --> > mpf_bernoulli_rust("mpf_bernoulli() - Rust") > │ mpf_bernoulli_rust --> > bernoulli_size_rust("bernoulli_size() - Rust") > │ bernoulli_size_rust --> > mpf_rdiv_int_rust("mpf_rdiv_int() - Rust") > │ mpf_rdiv_int_rust --> bitcount_rust_3("bitcount() - > Rust") > │ bitcount_rust_3 --> normalize1_rust("_normalize1() - > Rust") > │ normalize1_rust --> from_man_exp_rust_3("from_man_exp() > - Rust") > │ from_man_exp_rust_3 --> normalize_rust_3("_normalize() > - Rust") > │ normalize_rust_3 --> mpf_sub_rust("mpf_sub() - Rust") > │ mpf_sub_rust --> mpf_add_rust("mpf_add() - Rust") > │ mpf_add_rust --> mpf_neg_rust("mpf_neg() - Rust") > │ mpf_neg_rust --> normalize1_rust_2("_normalize1() - > Rust") > │ normalize1_rust_2 --> from_int_rust("from_int() - > Rust") > │ from_int_rust --> mpf_div_rust("mpf_div() - Rust") > │ mpf_div_rust --> bitcount_rust_4("bitcount() - Rust") > │ bitcount_rust_4 --> normalize1_rust_3("_normalize1() - > Rust") > │ > │ style zeta_rust fill:#f9f,stroke:#333,stroke-width:4px > │ style num_traits fill:#bbf,stroke:#333,stroke-width:2px > │ style num_bigint fill:#bbf,stroke:#333,stroke-width:2px > │ style rust_decimal > fill:#bbf,stroke:#333,stroke-width:2px > │ style error_handling > fill:#bbf,stroke:#333,stroke-width:2px > │ style bigint_operations > fill:#bfb,stroke:#333,stroke-width:2px > │ style decimal_operations > fill:#bfb,stroke:#333,stroke-width:2px > │ style result_type > fill:#bfb,stroke:#333,stroke-width:2px`); > │ renderTarget.innerHTML = svg; > │ bindFunctions?.(renderTarget); > │ } > │ catch (error) { > │ console.log(error); > │ } > │ </script> > │ </div> > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## tests > > ── spiral ────────────────────────────────────────────────────────────────────── > inl tests () = > testing.run_tests_log { > test_zeta_at_known_values_ > test_zeta_at_2_minus2 > test_trivial_zero_at_negative_even___ > test_non_trivial_zero___ > test_real_part_greater_than_one___ > test_zeta_at_1___ > test_symmetry_across_real_axis___ > test_behavior_near_origin___ > test_imaginary_axis > test_critical_strip > test_reflection_formula_for_specific_value > test_euler_product_formula > } > > ── spiral ────────────────────────────────────────────────────────────────────── > ///! _ > > inl main (_args : array_base string) = > inl value = 1i32 > console.write_line ($'$"value: {!value}"' : string) > 0i32 > > inl main () = > $'let tests () = !tests ()' : () > $'let main args = !main args' : () 00:02:04 v #3 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 78810 } 00:02:04 d #4 runtime.execute_with_options / { file_name = jupyter; arguments = ["nbconvert", "/home/runner/work/polyglot/polyglot/lib/math/math.dib.ipynb", "--to", "html", "--HTMLExporter.theme=dark"]; options = { command = jupyter nbconvert "/home/runner/work/polyglot/polyglot/lib/math/math.dib.ipynb" --to html --HTMLExporter.theme=dark; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:02:04 v #5 ! [NbConvertApp] Converting notebook /home/runner/work/polyglot/polyglot/lib/math/math.dib.ipynb to html 00:02:04 v #6 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbformat/__init__.py:96: MissingIDFieldWarning: Cell is missing an id field, this will become a hard error in future nbformat versions. You may want to use `normalize()` on your notebooks before validations (available since nbformat 5.1.4). Previous versions of nbformat are fixing this issue transparently, and will stop doing so in the future. 00:02:04 v #7 ! validate(nb) 00:02:05 v #8 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbconvert/filters/highlight.py:71: UserWarning: IPython3 lexer unavailable, falling back on Python 3 00:02:05 v #9 ! return _pygments_highlight( 00:02:06 v #10 ! [NbConvertApp] Writing 7174149 bytes to /home/runner/work/polyglot/polyglot/lib/math/math.dib.html 00:02:06 v #11 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 889 } 00:02:06 d #12 spiral.run / dib / jupyter nbconvert / { exit_code = 0; jupyter_result_length = 889 } 00:02:06 d #13 runtime.execute_with_options / { file_name = pwsh; arguments = ["-c", "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/lib/math/math.dib.html'; (Get-Content $path -Raw) -replace '(id=\\\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"]; options = { command = pwsh -c "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/lib/math/math.dib.html'; (Get-Content $path -Raw) -replace '(id=\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:02:06 v #14 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 0 } 00:02:06 d #15 spiral.run / dib / html cell ids / { exit_code = 0; pwsh_replace_html_result_length = 0 } 00:02:06 d #16 spiral.run / dib / { exit_code = 0; result_length = 79758 } 00:00:00 d #1 writeDibCode / output: Spi / path: math.dib 00:00:00 d #2 parseDibCode / output: Spi / file: math.dib 00:00:00 d #1 persistCodeProject / packages: [Fable.Core] / modules: [deps/spiral/lib/spiral/common.fsx; deps/spiral/lib/spiral/sm.fsx; deps/spiral/lib/spiral/crypto.fsx; ... ] / name: math / hash: / code.Length: 220445 00:00:00 d #2 buildProject / fullPath: /home/runner/work/polyglot/polyglot/target/Builder/math/math.fsproj 00:00:00 d #1 runtime.execute_with_options_async / { file_name = dotnet; arguments = US5_0 "publish "/home/runner/work/polyglot/polyglot/target/Builder/math/math.fsproj" --configuration Release --output "/home/runner/work/polyglot/polyglot/lib/math/dist" --runtime linux-x64"; options = { command = dotnet publish "/home/runner/work/polyglot/polyglot/target/Builder/math/math.fsproj" --configuration Release --output "/home/runner/work/polyglot/polyglot/lib/math/dist" --runtime linux-x64; cancellation_token = None; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot/target/Builder/math" } } 00:00:00 v #2 > Determining projects to restore... 00:00:01 v #3 > Paket version 9.0.2+a9b12aaeb8d8d5e47a415a3442b7920ed04e98e0 00:00:01 v #4 > The last full restore is still up to date. Nothing left to do. 00:00:01 v #5 > Total time taken: 0 milliseconds 00:00:01 v #6 > Paket version 9.0.2+a9b12aaeb8d8d5e47a415a3442b7920ed04e98e0 00:00:01 v #7 > Restoring /home/runner/work/polyglot/polyglot/target/Builder/math/math.fsproj 00:00:01 v #8 > Starting restore process. 00:00:01 v #9 > Total time taken: 0 milliseconds 00:00:02 v #10 > Restored /home/runner/work/polyglot/polyglot/target/Builder/math/math.fsproj (in 283 ms). 00:00:14 v #11 > math -> /home/runner/work/polyglot/polyglot/target/Builder/math/bin/Release/net9.0/linux-x64/math.dll 00:00:14 v #12 > math -> /home/runner/work/polyglot/polyglot/lib/math/dist 00:00:14 d #13 runtime.execute_with_options_async / { exit_code = 0; output_length = 662; options = { command = dotnet publish "/home/runner/work/polyglot/polyglot/target/Builder/math/math.fsproj" --configuration Release --output "/home/runner/work/polyglot/polyglot/lib/math/dist" --runtime linux-x64; cancellation_token = None; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot/target/Builder/math" } } spiral/lib/spiral/lib.ps1/GetTargetDir / targetDir: /home/runner/work/polyglot/polyglot/target/Builder/math polyglot/scripts/core.ps1/ResolveLink #4 / Path: /home/runner/work/polyglot/polyglot/deps/spiral/lib/spiral/../../deps/polyglot / parent_target: / path_target: /home/runner/work/polyglot/polyglot / parent: /home/runner/work/polyglot/polyglot/deps/spiral/lib/spiral/../../deps / End: polyglot spiral/lib/spiral/lib.ps1/BuildFable / TargetDir: /home/runner/work/polyglot/polyglot/target/Builder/math / ProjectName: math / Language: rs / Runtime: / root: /home/runner/work/polyglot/polyglot Fable 5.0.0-alpha.9: F# to Rust compiler (status: alpha) Thanks to the contributor! @Kurren123 Stand with Ukraine! https://standwithukraine.com.ua/ Parsing target/Builder/math/math.fsproj... Project and references (14 source files) parsed in 2429ms Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.JSInterop.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Routing.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Routing.Abstractions.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Mvc.ViewFeatures.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Mvc.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Mvc.Core.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Http.Abstractions.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Components.Forms.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Components.Endpoints.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Components.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Started Fable compilation... Fable compilation finished in 9984ms ./deps/spiral/lib/spiral/common.fsx(2209,0): (2209,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/sm.fsx(561,0): (561,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/async_.fsx(250,0): (250,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/threading.fsx(139,0): (139,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/crypto.fsx(2436,0): (2436,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/date_time.fsx(2547,0): (2547,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/platform.fsx(122,0): (122,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/networking.fsx(5525,0): (5525,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/trace.fsx(2244,0): (2244,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/runtime.fsx(8246,0): (8246,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/file_system.fsx(20811,0): (20811,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./target/Builder/math/math.fs(35,0): (37,3) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! polyglot/lib/math/build.ps1 / path: /home/runner/work/polyglot/polyglot/target/Builder/math/target/rs/math.rs warning: /home/runner/work/polyglot/polyglot/apps/spiral/temp/extension/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/lib/math/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/chat/contract/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/plot/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/spiral/temp/cube/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/spiral/temp/test/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/examples/rust/exercism/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/chat/contract/tests/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. Updating crates.io index Downloading crates ... Downloaded approx v0.5.1 Downloaded pin-project-lite v0.2.15 Downloaded matrixmultiply v0.3.9 Downloaded unindent v0.2.3 Downloaded pyo3-macros v0.23.3 Downloaded indoc v2.0.5 Downloaded float-cmp v0.10.0 Downloaded crypto-common v0.2.0-rc.1 Downloaded target-lexicon v0.12.16 Downloaded pyo3-build-config v0.23.3 Downloaded sha2 v0.11.0-pre.4 Downloaded unicode-ident v1.0.14 Downloaded rand_distr v0.4.3 Downloaded safe_arch v0.7.2 Downloaded wide v0.7.30 Downloaded pyo3-macros-backend v0.23.3 Downloaded pyo3-ffi v0.23.3 Downloaded const-oid v0.10.0-rc.3 Downloaded statrs v0.18.0 Downloaded bytemuck v1.20.0 Downloaded simba v0.9.0 Downloaded syn v2.0.90 Downloaded proc-macro2 v1.0.92 Downloaded hybrid-array v0.2.3 Downloaded digest v0.11.0-pre.9 Downloaded cpufeatures v0.2.16 Downloaded block-buffer v0.11.0-rc.3 Downloaded rawpointer v0.2.1 Downloaded nalgebra v0.33.2 Downloaded libc v0.2.168 Downloaded pyo3 v0.23.3 Compiling autocfg v1.4.0 Compiling libc v0.2.168 Compiling proc-macro2 v1.0.92 Compiling target-lexicon v0.12.16 Compiling unicode-ident v1.0.14 Compiling libm v0.2.11 Compiling num-traits v0.2.19 Compiling pyo3-build-config v0.23.3 Compiling quote v1.0.37 Compiling once_cell v1.20.2 Compiling syn v2.0.90 Compiling cfg-if v1.0.0 Compiling typenum v1.17.0 Compiling getrandom v0.2.15 Compiling memchr v2.7.4 Compiling byteorder v1.5.0 Compiling slab v0.4.9 Compiling rand_core v0.6.4 Compiling futures-sink v0.3.31 Compiling bytemuck v1.20.0 Compiling futures-core v0.3.31 Compiling paste v1.0.15 Compiling futures-channel v0.3.31 Compiling safe_arch v0.7.2 Compiling hybrid-array v0.2.3 Compiling pyo3-macros-backend v0.23.3 Compiling pyo3-ffi v0.23.3 Compiling matrixmultiply v0.3.9 Compiling pin-utils v0.1.0 Compiling futures-io v0.3.31 Compiling pin-project-lite v0.2.15 Compiling futures-task v0.3.31 Compiling wide v0.7.30 Compiling futures-util v0.3.31 Compiling num-integer v0.1.46 Compiling num-complex v0.4.6 Compiling approx v0.5.1 Compiling num_cpus v1.16.0 Compiling memoffset v0.9.1 Compiling rawpointer v0.2.1 Compiling heck v0.5.0 Compiling zerocopy-derive v0.7.35 Compiling futures-executor v0.3.31 Compiling simba v0.9.0 Compiling zerocopy v0.7.35 Compiling num-rational v0.4.2 Compiling ppv-lite86 v0.2.20 Compiling block-buffer v0.11.0-rc.3 Compiling crypto-common v0.2.0-rc.1 Compiling rand_chacha v0.3.1 Compiling rand v0.8.5 Compiling rand_distr v0.4.3 Compiling aho-corasick v1.1.3 Compiling pyo3 v0.23.3 Compiling iana-time-zone v0.1.61 Compiling const-oid v0.10.0-rc.3 Compiling regex-syntax v0.8.5 Compiling pyo3-macros v0.23.3 Compiling digest v0.11.0-pre.9 Compiling chrono v0.4.39 Compiling nalgebra v0.33.2 Compiling regex-automata v0.4.9 Compiling futures v0.3.31 Compiling uuid v1.11.0 Compiling futures-timer v3.0.3 Compiling unindent v0.2.3 Compiling cpufeatures v0.2.16 Compiling startup v0.1.1 (/home/runner/work/polyglot/polyglot/lib/rust/fable/fable_modules/fable-library-rust/vendored/startup) Compiling indoc v2.0.5 Compiling fable_library_rust v0.1.0 (/home/runner/work/polyglot/polyglot/lib/rust/fable/fable_modules/fable-library-rust) Compiling regex v1.11.1 Compiling sha2 v0.11.0-pre.4 Compiling float-cmp v0.10.0 Compiling inline_colorization v0.1.6 Compiling statrs v0.18.0 Compiling math v0.0.1 (/home/runner/work/polyglot/polyglot/lib/math) Finished `release` profile [optimized] target(s) in 27.52s Running unittests math.rs (/home/runner/work/polyglot/polyglot/workspace/target/release/deps/math-c64878e01a1ae353) running 12 tests test module_b7a9935b::Math::test_behavior_near_origin___ ... ok test module_b7a9935b::Math::test_non_trivial_zero___ ... ok test module_b7a9935b::Math::test_critical_strip ... ok test module_b7a9935b::Math::test_euler_product_formula ... ok test module_b7a9935b::Math::test_symmetry_across_real_axis___ ... ok test module_b7a9935b::Math::test_real_part_greater_than_one___ ... ok test module_b7a9935b::Math::test_zeta_at_1___ ... ok test module_b7a9935b::Math::test_zeta_at_2_minus2 ... ok test module_b7a9935b::Math::test_zeta_at_known_values_ ... ok test module_b7a9935b::Math::test_reflection_formula_for_specific_value ... ok test module_b7a9935b::Math::test_imaginary_axis ... ok test module_b7a9935b::Math::test_trivial_zero_at_negative_even___ ... ok test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.20s polyglot/lib/math/build.ps1 / $targetDir: /home/runner/work/polyglot/polyglot/target/Builder/math / $projectName: math / $env:CI:'true'
In [ ]:
{ pwsh ../apps/plot/build.ps1 } | Invoke-Block
warning: /home/runner/work/polyglot/polyglot/examples/rust/exercism/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/lib/math/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/plot/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/chat/contract/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/spiral/temp/test/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/spiral/temp/cube/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/chat/contract/tests/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/spiral/temp/extension/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. Downloading crates ... Downloaded itoa v1.0.14 Downloaded plotters-svg v0.3.7 Downloaded plotters-backend v0.3.7 Downloaded serde v1.0.216 Downloaded plotters v0.3.7 Downloaded serde_json v1.0.133 Compiling memchr v2.7.4 Compiling libc v0.2.168 Compiling typenum v1.17.0 Compiling num-traits v0.2.19 Compiling futures-sink v0.3.31 Compiling futures-core v0.3.31 Compiling futures-channel v0.3.31 Compiling slab v0.4.9 Compiling pin-project-lite v0.2.15 Compiling cfg-if v1.0.0 Compiling pin-utils v0.1.0 Compiling futures-task v0.3.31 Compiling futures-io v0.3.31 Compiling hybrid-array v0.2.3 Compiling num_cpus v1.16.0 Compiling futures-util v0.3.31 Compiling serde v1.0.216 Compiling crypto-common v0.2.0-rc.1 Compiling block-buffer v0.11.0-rc.3 Compiling getrandom v0.2.15 Compiling aho-corasick v1.1.3 Compiling plotters-backend v0.3.7 Compiling const-oid v0.10.0-rc.3 Compiling regex-syntax v0.8.5 Compiling iana-time-zone v0.1.61 Compiling serde_json v1.0.133 Compiling chrono v0.4.39 Compiling futures-executor v0.3.31 Compiling regex-automata v0.4.9 Compiling futures v0.3.31 Compiling digest v0.11.0-pre.9 Compiling plotters-svg v0.3.7 Compiling uuid v1.11.0 Compiling itoa v1.0.14 Compiling startup v0.1.1 (/home/runner/work/polyglot/polyglot/lib/rust/fable/fable_modules/fable-library-rust/vendored/startup) Compiling cpufeatures v0.2.16 Compiling ryu v1.0.18 Compiling futures-timer v3.0.3 Compiling fable_library_rust v0.1.0 (/home/runner/work/polyglot/polyglot/lib/rust/fable/fable_modules/fable-library-rust) Compiling sha2 v0.11.0-pre.4 Compiling regex v1.11.1 Compiling plotters v0.3.7 Compiling inline_colorization v0.1.6 Compiling plot v0.0.1 (/home/runner/work/polyglot/polyglot/apps/plot) warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:647:33 | 647 | let v4: string = append((v0.l0.get().clone()), (v1)); | ^ ^ | = note: `#[warn(unused_parens)]` on by default help: remove these parentheses | 647 - let v4: string = append((v0.l0.get().clone()), (v1)); 647 + let v4: string = append(v0.l0.get().clone(), (v1)); | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:647:56 | 647 | let v4: string = append((v0.l0.get().clone()), (v1)); | ^ ^ | help: remove these parentheses | 647 - let v4: string = append((v0.l0.get().clone()), (v1)); 647 + let v4: string = append((v0.l0.get().clone()), v1); | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:734:13 | 734 | (append( | ^ ... 746 | )), | ^ | help: remove these parentheses | 734 ~ append( 735 | (append( ... 745 | string(" / "), 746 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:747:13 | 747 | (v10), | ^ ^ | help: remove these parentheses | 747 - (v10), 747 + v10, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:735:17 | 735 | (append( | ^ ... 744 | )), | ^ | help: remove these parentheses | 735 ~ append( 736 | (append( ... 743 | string("networking.test_port_open"), 744 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:736:21 | 736 | (append( | ^ ... 742 | )), | ^ | help: remove these parentheses | 736 ~ append( 737 | (append( ... 741 | string(" "), 742 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:737:25 | 737 | (append( | ^ ... 740 | )), | ^ | help: remove these parentheses | 737 ~ append( 738 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 739 | (toString(v0.l0.get().clone())), 740 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:738:29 | 738 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 738 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 738 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:739:29 | 739 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 739 - (toString(v0.l0.get().clone())), 739 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:738:37 | 738 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 738 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 738 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:738:45 | 738 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 738 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 738 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:738:74 | 738 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 738 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 738 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:738:53 | 738 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 738 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 738 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:935:13 | 935 | (append( | ^ ... 947 | )), | ^ | help: remove these parentheses | 935 ~ append( 936 | (append( ... 946 | string(" / "), 947 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:948:13 | 948 | (v9), | ^ ^ | help: remove these parentheses | 948 - (v9), 948 + v9, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:936:17 | 936 | (append( | ^ ... 945 | )), | ^ | help: remove these parentheses | 936 ~ append( 937 | (append( ... 944 | string("async.run_with_timeout_async"), 945 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:937:21 | 937 | (append( | ^ ... 943 | )), | ^ | help: remove these parentheses | 937 ~ append( 938 | (append( ... 942 | string(" "), 943 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:938:25 | 938 | (append( | ^ ... 941 | )), | ^ | help: remove these parentheses | 938 ~ append( 939 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 940 | (toString(v0.l0.get().clone())), 941 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:939:29 | 939 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 939 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 939 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:940:29 | 940 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 940 - (toString(v0.l0.get().clone())), 940 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:939:37 | 939 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 939 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 939 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:939:45 | 939 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 939 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 939 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:939:74 | 939 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 939 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 939 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:939:53 | 939 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 939 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 939 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1110:13 | 1110 | (append( | ^ ... 1122 | )), | ^ | help: remove these parentheses | 1110 ~ append( 1111 | (append( ... 1121 | string(" / "), 1122 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1123:13 | 1123 | (v10), | ^ ^ | help: remove these parentheses | 1123 - (v10), 1123 + v10, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1111:17 | 1111 | (append( | ^ ... 1120 | )), | ^ | help: remove these parentheses | 1111 ~ append( 1112 | (append( ... 1119 | string("async.run_with_timeout_async**"), 1120 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1112:21 | 1112 | (append( | ^ ... 1118 | )), | ^ | help: remove these parentheses | 1112 ~ append( 1113 | (append( ... 1117 | string(" "), 1118 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1113:25 | 1113 | (append( | ^ ... 1116 | )), | ^ | help: remove these parentheses | 1113 ~ append( 1114 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1115 | (toString(v0.l0.get().clone())), 1116 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1114:29 | 1114 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1114 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1114 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1115:29 | 1115 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 1115 - (toString(v0.l0.get().clone())), 1115 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1114:37 | 1114 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1114 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1114 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1114:45 | 1114 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1114 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1114 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1114:74 | 1114 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1114 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1114 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1114:53 | 1114 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1114 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1114 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1358:13 | 1358 | (append( | ^ ... 1370 | )), | ^ | help: remove these parentheses | 1358 ~ append( 1359 | (append( ... 1369 | string(" / "), 1370 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1371:13 | 1371 | (v12), | ^ ^ | help: remove these parentheses | 1371 - (v12), 1371 + v12, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1359:17 | 1359 | (append( | ^ ... 1368 | )), | ^ | help: remove these parentheses | 1359 ~ append( 1360 | (append( ... 1367 | string("networking.wait_for_port_access"), 1368 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1360:21 | 1360 | (append( | ^ ... 1366 | )), | ^ | help: remove these parentheses | 1360 ~ append( 1361 | (append( ... 1365 | string(" "), 1366 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1361:25 | 1361 | (append( | ^ ... 1364 | )), | ^ | help: remove these parentheses | 1361 ~ append( 1362 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1363 | (toString(v0.l0.get().clone())), 1364 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1362:29 | 1362 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1362 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1362 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1363:29 | 1363 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 1363 - (toString(v0.l0.get().clone())), 1363 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1362:37 | 1362 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1362 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1362 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1362:45 | 1362 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1362 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1362 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1362:74 | 1362 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1362 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1362 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./networking.rs:1362:53 | 1362 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1362 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1362 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:817:33 | 817 | let v4: string = append((v0.l0.get().clone()), (v1)); | ^ ^ | help: remove these parentheses | 817 - let v4: string = append((v0.l0.get().clone()), (v1)); 817 + let v4: string = append(v0.l0.get().clone(), (v1)); | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:817:56 | 817 | let v4: string = append((v0.l0.get().clone()), (v1)); | ^ ^ | help: remove these parentheses | 817 - let v4: string = append((v0.l0.get().clone()), (v1)); 817 + let v4: string = append((v0.l0.get().clone()), v1); | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:866:13 | 866 | (append( | ^ ... 878 | )), | ^ | help: remove these parentheses | 866 ~ append( 867 | (append( ... 877 | string(" / "), 878 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:879:13 | 879 | (v8), | ^ ^ | help: remove these parentheses | 879 - (v8), 879 + v8, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:867:17 | 867 | (append( | ^ ... 876 | )), | ^ | help: remove these parentheses | 867 ~ append( 868 | (append( ... 875 | string("runtime.current_process_kill / exiting... 3"), 876 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:868:21 | 868 | (append( | ^ ... 874 | )), | ^ | help: remove these parentheses | 868 ~ append( 869 | (append( ... 873 | string(" "), 874 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:869:25 | 869 | (append( | ^ ... 872 | )), | ^ | help: remove these parentheses | 869 ~ append( 870 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 871 | (toString(v0.l0.get().clone())), 872 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:870:29 | 870 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 870 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 870 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:871:29 | 871 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 871 - (toString(v0.l0.get().clone())), 871 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:870:37 | 870 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 870 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 870 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:870:45 | 870 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 870 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 870 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:870:74 | 870 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 870 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 870 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:870:53 | 870 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 870 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 870 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1003:13 | 1003 | (append( | ^ ... 1015 | )), | ^ | help: remove these parentheses | 1003 ~ append( 1004 | (append( ... 1014 | string(" / "), 1015 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1016:13 | 1016 | (v8), | ^ ^ | help: remove these parentheses | 1016 - (v8), 1016 + v8, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1004:17 | 1004 | (append( | ^ ... 1013 | )), | ^ | help: remove these parentheses | 1004 ~ append( 1005 | (append( ... 1012 | string("runtime.current_process_kill / exiting... 2"), 1013 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1005:21 | 1005 | (append( | ^ ... 1011 | )), | ^ | help: remove these parentheses | 1005 ~ append( 1006 | (append( ... 1010 | string(" "), 1011 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1006:25 | 1006 | (append( | ^ ... 1009 | )), | ^ | help: remove these parentheses | 1006 ~ append( 1007 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1008 | (toString(v0.l0.get().clone())), 1009 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1007:29 | 1007 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1007 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1007 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1008:29 | 1008 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 1008 - (toString(v0.l0.get().clone())), 1008 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1007:37 | 1007 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1007 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1007 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1007:45 | 1007 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1007 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1007 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1007:74 | 1007 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1007 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1007 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1007:53 | 1007 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1007 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1007 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1125:13 | 1125 | (append( | ^ ... 1137 | )), | ^ | help: remove these parentheses | 1125 ~ append( 1126 | (append( ... 1136 | string(" / "), 1137 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1138:13 | 1138 | (v8), | ^ ^ | help: remove these parentheses | 1138 - (v8), 1138 + v8, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1126:17 | 1126 | (append( | ^ ... 1135 | )), | ^ | help: remove these parentheses | 1126 ~ append( 1127 | (append( ... 1134 | string("runtime.current_process_kill / exiting... 1"), 1135 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1127:21 | 1127 | (append( | ^ ... 1133 | )), | ^ | help: remove these parentheses | 1127 ~ append( 1128 | (append( ... 1132 | string(" "), 1133 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1128:25 | 1128 | (append( | ^ ... 1131 | )), | ^ | help: remove these parentheses | 1128 ~ append( 1129 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1130 | (toString(v0.l0.get().clone())), 1131 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1129:29 | 1129 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1129 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1129 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1130:29 | 1130 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 1130 - (toString(v0.l0.get().clone())), 1130 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1129:37 | 1129 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1129 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1129 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1129:45 | 1129 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1129 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1129 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1129:74 | 1129 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1129 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1129 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1129:53 | 1129 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1129 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1129 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around `break` value --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1268:30 | 1268 | break '_method26 (match v0.get().clone().as_ref() { | ^ ... 1306 | }); | ^ | help: remove these parentheses | 1268 ~ break '_method26 match v0.get().clone().as_ref() { 1269 | Runtime::UH0::UH0_0 => (v1.get().clone(), v2.get().clone(), v3.get().clone()), ... 1305 | } 1306 ~ }; | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1313:58 | 1313 | (Runtime::method27(v0, (v1) + 1_i32))(append((v2), string(" "))) | ^ ^ | help: remove these parentheses | 1313 - (Runtime::method27(v0, (v1) + 1_i32))(append((v2), string(" "))) 1313 + (Runtime::method27(v0, (v1) + 1_i32))(append(v2, string(" "))) | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1376:25 | 1376 | ((Runtime::method27((v3) - 1_i32, 0_i32))(string(""))), | ^ ^ | help: remove these parentheses | 1376 - ((Runtime::method27((v3) - 1_i32, 0_i32))(string(""))), 1376 + (Runtime::method27((v3) - 1_i32, 0_i32))(string("")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1437:25 | 1437 | ((Runtime::method27((v3) - 1_i32, 0_i32))(string(""))), | ^ ^ | help: remove these parentheses | 1437 - ((Runtime::method27((v3) - 1_i32, 0_i32))(string(""))), 1437 + (Runtime::method27((v3) - 1_i32, 0_i32))(string("")), | warning: unnecessary parentheses around `break` value --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1454:30 | 1454 | break '_method28 (match v2.get().clone().as_ref() { | ^ ... 1485 | }); | ^ | help: remove these parentheses | 1454 ~ break '_method28 match v2.get().clone().as_ref() { 1455 | Runtime::UH1::UH1_0 => { ... 1484 | } 1485 ~ }; | warning: unnecessary parentheses around `break` value --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1492:30 | 1492 | break '_method29 (if (v1.get().clone()) >= 2_i64 { | ^ ... 1523 | }); | ^ | help: remove these parentheses | 1492 ~ break '_method29 if (v1.get().clone()) >= 2_i64 { 1493 | false ... 1522 | } 1523 ~ }; | warning: unnecessary parentheses around `break` value --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1539:30 | 1539 | break '_method30 ({ | ^ ... 1613 | }); | ^ | help: remove these parentheses | 1539 ~ break '_method30 { 1540 | let v98: Runtime::US8 = if string("") == (v1.get().clone()) { ... 1612 | } 1613 ~ }; | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1593:36 | 1593 | ... append((v0.get().clone()), (ofChar(v110_0_0.clone()))); | ^ ^ | help: remove these parentheses | 1593 - append((v0.get().clone()), (ofChar(v110_0_0.clone()))); 1593 + append(v0.get().clone(), (ofChar(v110_0_0.clone()))); | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1593:56 | 1593 | ... append((v0.get().clone()), (ofChar(v110_0_0.clone()))); | ^ ^ | help: remove these parentheses | 1593 - append((v0.get().clone()), (ofChar(v110_0_0.clone()))); 1593 + append((v0.get().clone()), ofChar(v110_0_0.clone())); | warning: unnecessary parentheses around `break` value --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1629:30 | 1629 | break '_method31 (match v4.get().clone().as_ref() { | ^ ... 1664 | }); | ^ | help: remove these parentheses | 1629 ~ break '_method31 match v4.get().clone().as_ref() { 1630 | Runtime::UH1::UH1_0 => { ... 1663 | } 1664 ~ }; | warning: unnecessary parentheses around `break` value --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1671:30 | 1671 | break '_method32 (if (v1.get().clone()) >= 3_i64 { | ^ ... 1707 | }); | ^ | help: remove these parentheses | 1671 ~ break '_method32 if (v1.get().clone()) >= 3_i64 { 1672 | false ... 1706 | } 1707 ~ }; | warning: unnecessary parentheses around `break` value --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1723:30 | 1723 | break '_method33 ({ | ^ ... 1797 | }); | ^ | help: remove these parentheses | 1723 ~ break '_method33 { 1724 | let v106: Runtime::US8 = if string("") == (v1.get().clone()) { ... 1796 | } 1797 ~ }; | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1777:36 | 1777 | ... append((v0.get().clone()), (ofChar(v118_0_0.clone()))); | ^ ^ | help: remove these parentheses | 1777 - append((v0.get().clone()), (ofChar(v118_0_0.clone()))); 1777 + append(v0.get().clone(), (ofChar(v118_0_0.clone()))); | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1777:56 | 1777 | ... append((v0.get().clone()), (ofChar(v118_0_0.clone()))); | ^ ^ | help: remove these parentheses | 1777 - append((v0.get().clone()), (ofChar(v118_0_0.clone()))); 1777 + append((v0.get().clone()), ofChar(v118_0_0.clone())); | warning: unnecessary parentheses around `break` value --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1804:30 | 1804 | break '_method34 (if (v1.get().clone()) >= (length(v0.get().clone())) { | ^ ... 1816 | }); | ^ | help: remove these parentheses | 1804 ~ break '_method34 if (v1.get().clone()) >= (length(v0.get().clone())) { 1805 | v1.get().clone() ... 1815 | } 1816 ~ }; | warning: unnecessary parentheses around `break` value --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1832:30 | 1832 | break '_method35 ({ | ^ ... 1882 | }); | ^ | help: remove these parentheses | 1832 ~ break '_method35 { 1833 | let v66: Runtime::US8 = if string("") == (v1.get().clone()) { ... 1881 | } 1882 ~ }; | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1862:54 | 1862 | let v0_temp: string = append((v0.get().clone()), (ofChar(v66_0_0.clone()))); | ^ ^ | help: remove these parentheses | 1862 - let v0_temp: string = append((v0.get().clone()), (ofChar(v66_0_0.clone()))); 1862 + let v0_temp: string = append(v0.get().clone(), (ofChar(v66_0_0.clone()))); | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:1862:74 | 1862 | let v0_temp: string = append((v0.get().clone()), (ofChar(v66_0_0.clone()))); | ^ ^ | help: remove these parentheses | 1862 - let v0_temp: string = append((v0.get().clone()), (ofChar(v66_0_0.clone()))); 1862 + let v0_temp: string = append((v0.get().clone()), ofChar(v66_0_0.clone())); | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2239:37 | 2239 | ... ((Runtime::method27((v421) - 1_i32, 0_i32))(string(""))), | ^ ^ | help: remove these parentheses | 2239 - ((Runtime::method27((v421) - 1_i32, 0_i32))(string(""))), 2239 + (Runtime::method27((v421) - 1_i32, 0_i32))(string("")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2614:13 | 2614 | (append( | ^ ... 2626 | )), | ^ | help: remove these parentheses | 2614 ~ append( 2615 | (append( ... 2625 | string(" / "), 2626 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2627:13 | 2627 | (v17), | ^ ^ | help: remove these parentheses | 2627 - (v17), 2627 + v17, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2615:17 | 2615 | (append( | ^ ... 2624 | )), | ^ | help: remove these parentheses | 2615 ~ append( 2616 | (append( ... 2623 | string("runtime.execute_with_options_async"), 2624 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2616:21 | 2616 | (append( | ^ ... 2622 | )), | ^ | help: remove these parentheses | 2616 ~ append( 2617 | (append( ... 2621 | string(" "), 2622 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2617:25 | 2617 | (append( | ^ ... 2620 | )), | ^ | help: remove these parentheses | 2617 ~ append( 2618 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2619 | (toString(v0.l0.get().clone())), 2620 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2618:29 | 2618 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2618 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2618 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2619:29 | 2619 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 2619 - (toString(v0.l0.get().clone())), 2619 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2618:37 | 2618 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2618 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2618 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2618:45 | 2618 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2618 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2618 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2618:74 | 2618 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2618 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2618 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2618:53 | 2618 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2618 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2618 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2791:13 | 2791 | (append( | ^ ... 2803 | )), | ^ | help: remove these parentheses | 2791 ~ append( 2792 | (append( ... 2802 | string(" / "), 2803 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2804:13 | 2804 | (v9), | ^ ^ | help: remove these parentheses | 2804 - (v9), 2804 + v9, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2792:17 | 2792 | (append( | ^ ... 2801 | )), | ^ | help: remove these parentheses | 2792 ~ append( 2793 | (append( ... 2800 | (v8), 2801 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2793:21 | 2793 | (append( | ^ ... 2799 | )), | ^ | help: remove these parentheses | 2793 ~ append( 2794 | (append( ... 2798 | string(" "), 2799 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2800:21 | 2800 | (v8), | ^ ^ | help: remove these parentheses | 2800 - (v8), 2800 + v8, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2794:25 | 2794 | (append( | ^ ... 2797 | )), | ^ | help: remove these parentheses | 2794 ~ append( 2795 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2796 | (toString(v0.l0.get().clone())), 2797 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2795:29 | 2795 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2795 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2795 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2796:29 | 2796 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 2796 - (toString(v0.l0.get().clone())), 2796 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2795:37 | 2795 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2795 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2795 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2795:45 | 2795 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2795 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2795 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2795:74 | 2795 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2795 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2795 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:2795:53 | 2795 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2795 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2795 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3013:13 | 3013 | (append( | ^ ... 3025 | )), | ^ | help: remove these parentheses | 3013 ~ append( 3014 | (append( ... 3024 | string(" / "), 3025 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3026:13 | 3026 | (v9), | ^ ^ | help: remove these parentheses | 3026 - (v9), 3026 + v9, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3014:17 | 3014 | (append( | ^ ... 3023 | )), | ^ | help: remove these parentheses | 3014 ~ append( 3015 | (append( ... 3022 | string("runtime.execute_with_options_async / WaitForExitAsync"), 3023 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3015:21 | 3015 | (append( | ^ ... 3021 | )), | ^ | help: remove these parentheses | 3015 ~ append( 3016 | (append( ... 3020 | string(" "), 3021 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3016:25 | 3016 | (append( | ^ ... 3019 | )), | ^ | help: remove these parentheses | 3016 ~ append( 3017 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3018 | (toString(v0.l0.get().clone())), 3019 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3017:29 | 3017 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3017 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3017 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3018:29 | 3018 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 3018 - (toString(v0.l0.get().clone())), 3018 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3017:37 | 3017 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3017 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3017 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3017:45 | 3017 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3017 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3017 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3017:74 | 3017 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3017 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3017 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3017:53 | 3017 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3017 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3017 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3359:13 | 3359 | (append( | ^ ... 3371 | )), | ^ | help: remove these parentheses | 3359 ~ append( 3360 | (append( ... 3370 | string(" / "), 3371 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3372:13 | 3372 | (v17), | ^ ^ | help: remove these parentheses | 3372 - (v17), 3372 + v17, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3360:17 | 3360 | (append( | ^ ... 3369 | )), | ^ | help: remove these parentheses | 3360 ~ append( 3361 | (append( ... 3368 | string("runtime.execute_with_options_async"), 3369 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3361:21 | 3361 | (append( | ^ ... 3367 | )), | ^ | help: remove these parentheses | 3361 ~ append( 3362 | (append( ... 3366 | string(" "), 3367 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3362:25 | 3362 | (append( | ^ ... 3365 | )), | ^ | help: remove these parentheses | 3362 ~ append( 3363 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3364 | (toString(v0.l0.get().clone())), 3365 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3363:29 | 3363 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3363 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3363 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3364:29 | 3364 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 3364 - (toString(v0.l0.get().clone())), 3364 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3363:37 | 3363 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3363 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3363 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3363:45 | 3363 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3363 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3363 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3363:74 | 3363 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3363 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3363 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3363:53 | 3363 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3363 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3363 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around `break` value --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3582:30 | 3582 | break '_method60 (if (v1.get().clone()) >= 4_i64 { | ^ ... 3623 | }); | ^ | help: remove these parentheses | 3582 ~ break '_method60 if (v1.get().clone()) >= 4_i64 { 3583 | false ... 3622 | } 3623 ~ }; | warning: unnecessary parentheses around `break` value --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3639:30 | 3639 | break '_method61 ({ | ^ ... 3700 | }); | ^ | help: remove these parentheses | 3639 ~ break '_method61 { 3640 | let v114: Runtime::US8 = if string("") == (v1.get().clone()) { ... 3699 | } 3700 ~ }; | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3680:36 | 3680 | ... append((v0.get().clone()), (ofChar(v114_0_0.clone()))); | ^ ^ | help: remove these parentheses | 3680 - append((v0.get().clone()), (ofChar(v114_0_0.clone()))); 3680 + append(v0.get().clone(), (ofChar(v114_0_0.clone()))); | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3680:56 | 3680 | ... append((v0.get().clone()), (ofChar(v114_0_0.clone()))); | ^ ^ | help: remove these parentheses | 3680 - append((v0.get().clone()), (ofChar(v114_0_0.clone()))); 3680 + append((v0.get().clone()), ofChar(v114_0_0.clone())); | warning: unnecessary parentheses around `break` value --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3707:30 | 3707 | break '_method63 (if (v1.get().clone()) >= 3_i64 { | ^ ... 3743 | }); | ^ | help: remove these parentheses | 3707 ~ break '_method63 if (v1.get().clone()) >= 3_i64 { 3708 | false ... 3742 | } 3743 ~ }; | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3799:25 | 3799 | ((Runtime::method27((v3) - 1_i32, 0_i32))(string(""))), | ^ ^ | help: remove these parentheses | 3799 - ((Runtime::method27((v3) - 1_i32, 0_i32))(string(""))), 3799 + (Runtime::method27((v3) - 1_i32, 0_i32))(string("")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3842:28 | 3842 | append((ofChar('\\')), (ofChar(v196_0_0.clone()))), | ^ ^ | help: remove these parentheses | 3842 - append((ofChar('\\')), (ofChar(v196_0_0.clone()))), 3842 + append(ofChar('\\'), (ofChar(v196_0_0.clone()))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3842:44 | 3842 | append((ofChar('\\')), (ofChar(v196_0_0.clone()))), | ^ ^ | help: remove these parentheses | 3842 - append((ofChar('\\')), (ofChar(v196_0_0.clone()))), 3842 + append((ofChar('\\')), ofChar(v196_0_0.clone())), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3905:25 | 3905 | ((Runtime::method27((v3) - 1_i32, 0_i32))(string(""))), | ^ ^ | help: remove these parentheses | 3905 - ((Runtime::method27((v3) - 1_i32, 0_i32))(string(""))), 3905 + (Runtime::method27((v3) - 1_i32, 0_i32))(string("")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3948:28 | 3948 | append((ofChar('`')), (ofChar(v196_0_0.clone()))), | ^ ^ | help: remove these parentheses | 3948 - append((ofChar('`')), (ofChar(v196_0_0.clone()))), 3948 + append(ofChar('`'), (ofChar(v196_0_0.clone()))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3948:43 | 3948 | append((ofChar('`')), (ofChar(v196_0_0.clone()))), | ^ ^ | help: remove these parentheses | 3948 - append((ofChar('`')), (ofChar(v196_0_0.clone()))), 3948 + append((ofChar('`')), ofChar(v196_0_0.clone())), | warning: unnecessary parentheses around `break` value --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:3971:30 | 3971 | break '_method64 (match v4.get().clone().as_ref() { | ^ ... 4006 | }); | ^ | help: remove these parentheses | 3971 ~ break '_method64 match v4.get().clone().as_ref() { 3972 | Runtime::UH3::UH3_0 => { ... 4005 | } 4006 ~ }; | warning: unnecessary parentheses around `break` value --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:4013:30 | 4013 | break '_method65 (match v0.get().clone().as_ref() { | ^ ... 4033 | }); | ^ | help: remove these parentheses | 4013 ~ break '_method65 match v0.get().clone().as_ref() { 4014 | Runtime::UH2::UH2_0 => v1.get().clone(), ... 4032 | } 4033 ~ }; | warning: unnecessary parentheses around `break` value --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:4049:30 | 4049 | break '_method62 ({ | ^ ... 4153 | }); | ^ | help: remove these parentheses | 4049 ~ break '_method62 { 4050 | let v106: Runtime::US8 = if string("") == (v1.get().clone()) { ... 4152 | } 4153 ~ }; | warning: unnecessary parentheses around `break` value --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:4189:30 | 4189 | break '_method67 ({ | ^ ... 4262 | }); | ^ | help: remove these parentheses | 4189 ~ break '_method67 { 4190 | let v106: Runtime::US8 = if string("") == (v1.get().clone()) { ... 4261 | } 4262 ~ }; | warning: unnecessary parentheses around `break` value --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:4278:30 | 4278 | break '_method59 ({ | ^ ... 4742 | }); | ^ | help: remove these parentheses | 4278 ~ break '_method59 { 4279 | let v5: bool = string("") == (v1.get().clone()); ... 4741 | } 4742 ~ }; | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:4394:41 | 4394 | ... ((Runtime::method27((v4.get().clone()) - 1_i32, 0_i32))( | ^ 4395 | ... string(""), 4396 | ... )), | ^ | help: remove these parentheses | 4394 ~ (Runtime::method27((v4.get().clone()) - 1_i32, 0_i32))( 4395 | string(""), 4396 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./runtime.rs:4522:57 | 4522 | ... ((Runtime::method27( | ^ ... 4527 | ... )), | ^ | help: remove these parentheses | 4522 ~ (Runtime::method27( 4523 | (v306) - 1_i32, ... 4526 | string("") 4527 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./trace.rs:591:33 | 591 | let v4: string = append((v0.l0.get().clone()), (v1)); | ^ ^ | help: remove these parentheses | 591 - let v4: string = append((v0.l0.get().clone()), (v1)); 591 + let v4: string = append(v0.l0.get().clone(), (v1)); | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./trace.rs:591:56 | 591 | let v4: string = append((v0.l0.get().clone()), (v1)); | ^ ^ | help: remove these parentheses | 591 - let v4: string = append((v0.l0.get().clone()), (v1)); 591 + let v4: string = append((v0.l0.get().clone()), v1); | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./trace.rs:761:13 | 761 | (append( | ^ ... 773 | )), | ^ | help: remove these parentheses | 761 ~ append( 762 | (append( ... 772 | string(" / "), 773 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./trace.rs:774:13 | 774 | (v10), | ^ ^ | help: remove these parentheses | 774 - (v10), 774 + v10, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./trace.rs:762:17 | 762 | (append( | ^ ... 771 | )), | ^ | help: remove these parentheses | 762 ~ append( 763 | (append( ... 770 | (v8), 771 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./trace.rs:763:21 | 763 | (append( | ^ ... 769 | )), | ^ | help: remove these parentheses | 763 ~ append( 764 | (append( ... 768 | string(" "), 769 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./trace.rs:770:21 | 770 | (v8), | ^ ^ | help: remove these parentheses | 770 - (v8), 770 + v8, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./trace.rs:764:25 | 764 | (append( | ^ ... 767 | )), | ^ | help: remove these parentheses | 764 ~ append( 765 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 766 | (toString(v0.l0.get().clone())), 767 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./trace.rs:765:29 | 765 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 765 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 765 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./trace.rs:766:29 | 766 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 766 - (toString(v0.l0.get().clone())), 766 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./trace.rs:765:37 | 765 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 765 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 765 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./trace.rs:765:45 | 765 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 765 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 765 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./trace.rs:765:74 | 765 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 765 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 765 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./trace.rs:765:53 | 765 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 765 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 765 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:867:33 | 867 | let v4: string = append((v0.l0.get().clone()), (v1)); | ^ ^ | help: remove these parentheses | 867 - let v4: string = append((v0.l0.get().clone()), (v1)); 867 + let v4: string = append(v0.l0.get().clone(), (v1)); | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:867:56 | 867 | let v4: string = append((v0.l0.get().clone()), (v1)); | ^ ^ | help: remove these parentheses | 867 - let v4: string = append((v0.l0.get().clone()), (v1)); 867 + let v4: string = append((v0.l0.get().clone()), v1); | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:983:13 | 983 | (append( | ^ ... 995 | )), | ^ | help: remove these parentheses | 983 ~ append( 984 | (append( ... 994 | string(" / "), 995 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:996:13 | 996 | (v10), | ^ ^ | help: remove these parentheses | 996 - (v10), 996 + v10, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:984:17 | 984 | (append( | ^ ... 993 | )), | ^ | help: remove these parentheses | 984 ~ append( 985 | (append( ... 992 | string("file_system.delete_directory_async"), 993 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:985:21 | 985 | (append( | ^ ... 991 | )), | ^ | help: remove these parentheses | 985 ~ append( 986 | (append( ... 990 | string(" "), 991 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:986:25 | 986 | (append( | ^ ... 989 | )), | ^ | help: remove these parentheses | 986 ~ append( 987 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 988 | (toString(v0.l0.get().clone())), 989 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:987:29 | 987 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 987 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 987 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:988:29 | 988 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 988 - (toString(v0.l0.get().clone())), 988 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:987:37 | 987 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 987 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 987 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:987:45 | 987 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 987 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 987 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:987:74 | 987 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 987 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 987 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:987:53 | 987 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 987 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 987 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1204:13 | 1204 | (append( | ^ ... 1216 | )), | ^ | help: remove these parentheses | 1204 ~ append( 1205 | (append( ... 1215 | string(" / "), 1216 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1217:13 | 1217 | (v11), | ^ ^ | help: remove these parentheses | 1217 - (v11), 1217 + v11, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1205:17 | 1205 | (append( | ^ ... 1214 | )), | ^ | help: remove these parentheses | 1205 ~ append( 1206 | (append( ... 1213 | string("file_system.wait_for_file_access"), 1214 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1206:21 | 1206 | (append( | ^ ... 1212 | )), | ^ | help: remove these parentheses | 1206 ~ append( 1207 | (append( ... 1211 | string(" "), 1212 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1207:25 | 1207 | (append( | ^ ... 1210 | )), | ^ | help: remove these parentheses | 1207 ~ append( 1208 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1209 | (toString(v0.l0.get().clone())), 1210 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1208:29 | 1208 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1208 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1208 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1209:29 | 1209 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 1209 - (toString(v0.l0.get().clone())), 1209 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1208:37 | 1208 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1208 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1208 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1208:45 | 1208 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1208 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1208 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1208:74 | 1208 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1208 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1208 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1208:53 | 1208 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1208 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1208 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1445:13 | 1445 | (append( | ^ ... 1457 | )), | ^ | help: remove these parentheses | 1445 ~ append( 1446 | (append( ... 1456 | string(" / "), 1457 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1458:13 | 1458 | (v11), | ^ ^ | help: remove these parentheses | 1458 - (v11), 1458 + v11, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1446:17 | 1446 | (append( | ^ ... 1455 | )), | ^ | help: remove these parentheses | 1446 ~ append( 1447 | (append( ... 1454 | string("file_system.read_all_text_async"), 1455 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1447:21 | 1447 | (append( | ^ ... 1453 | )), | ^ | help: remove these parentheses | 1447 ~ append( 1448 | (append( ... 1452 | string(" "), 1453 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1448:25 | 1448 | (append( | ^ ... 1451 | )), | ^ | help: remove these parentheses | 1448 ~ append( 1449 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1450 | (toString(v0.l0.get().clone())), 1451 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1449:29 | 1449 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1449 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1449 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1450:29 | 1450 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 1450 - (toString(v0.l0.get().clone())), 1450 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1449:37 | 1449 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1449 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1449 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1449:45 | 1449 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1449 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1449 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1449:74 | 1449 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1449 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1449 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1449:53 | 1449 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1449 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1449 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1722:13 | 1722 | (append( | ^ ... 1734 | )), | ^ | help: remove these parentheses | 1722 ~ append( 1723 | (append( ... 1733 | string(" / "), 1734 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1735:13 | 1735 | (v9), | ^ ^ | help: remove these parentheses | 1735 - (v9), 1735 + v9, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1723:17 | 1723 | (append( | ^ ... 1732 | )), | ^ | help: remove these parentheses | 1723 ~ append( 1724 | (append( ... 1731 | string("file_system.file_delete"), 1732 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1724:21 | 1724 | (append( | ^ ... 1730 | )), | ^ | help: remove these parentheses | 1724 ~ append( 1725 | (append( ... 1729 | string(" "), 1730 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1725:25 | 1725 | (append( | ^ ... 1728 | )), | ^ | help: remove these parentheses | 1725 ~ append( 1726 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1727 | (toString(v0.l0.get().clone())), 1728 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1726:29 | 1726 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1726 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1726 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1727:29 | 1727 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 1727 - (toString(v0.l0.get().clone())), 1727 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1726:37 | 1726 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1726 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1726 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1726:45 | 1726 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1726 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1726 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1726:74 | 1726 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1726 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1726 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1726:53 | 1726 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1726 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1726 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1906:13 | 1906 | (append( | ^ ... 1918 | )), | ^ | help: remove these parentheses | 1906 ~ append( 1907 | (append( ... 1917 | string(" / "), 1918 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1919:13 | 1919 | (v10), | ^ ^ | help: remove these parentheses | 1919 - (v10), 1919 + v10, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1907:17 | 1907 | (append( | ^ ... 1916 | )), | ^ | help: remove these parentheses | 1907 ~ append( 1908 | (append( ... 1915 | string("delete_file_async"), 1916 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1908:21 | 1908 | (append( | ^ ... 1914 | )), | ^ | help: remove these parentheses | 1908 ~ append( 1909 | (append( ... 1913 | string(" "), 1914 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1909:25 | 1909 | (append( | ^ ... 1912 | )), | ^ | help: remove these parentheses | 1909 ~ append( 1910 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1911 | (toString(v0.l0.get().clone())), 1912 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1910:29 | 1910 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1910 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1910 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1911:29 | 1911 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 1911 - (toString(v0.l0.get().clone())), 1911 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1910:37 | 1910 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1910 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1910 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1910:45 | 1910 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1910 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1910 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1910:74 | 1910 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1910 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1910 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:1910:53 | 1910 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 1910 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 1910 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2115:13 | 2115 | (append( | ^ ... 2127 | )), | ^ | help: remove these parentheses | 2115 ~ append( 2116 | (append( ... 2126 | string(" / "), 2127 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2128:13 | 2128 | (v11), | ^ ^ | help: remove these parentheses | 2128 - (v11), 2128 + v11, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2116:17 | 2116 | (append( | ^ ... 2125 | )), | ^ | help: remove these parentheses | 2116 ~ append( 2117 | (append( ... 2124 | string("move_file_async"), 2125 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2117:21 | 2117 | (append( | ^ ... 2123 | )), | ^ | help: remove these parentheses | 2117 ~ append( 2118 | (append( ... 2122 | string(" "), 2123 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2118:25 | 2118 | (append( | ^ ... 2121 | )), | ^ | help: remove these parentheses | 2118 ~ append( 2119 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2120 | (toString(v0.l0.get().clone())), 2121 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2119:29 | 2119 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2119 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2119 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2120:29 | 2120 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 2120 - (toString(v0.l0.get().clone())), 2120 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2119:37 | 2119 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2119 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2119 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2119:45 | 2119 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2119 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2119 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2119:74 | 2119 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2119 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2119 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2119:53 | 2119 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2119 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2119 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2314:13 | 2314 | (append( | ^ ... 2326 | )), | ^ | help: remove these parentheses | 2314 ~ append( 2315 | (append( ... 2325 | string(" / "), 2326 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2327:13 | 2327 | (v9), | ^ ^ | help: remove these parentheses | 2327 - (v9), 2327 + v9, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2315:17 | 2315 | (append( | ^ ... 2324 | )), | ^ | help: remove these parentheses | 2315 ~ append( 2316 | (append( ... 2323 | string("async.run_with_timeout_async"), 2324 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2316:21 | 2316 | (append( | ^ ... 2322 | )), | ^ | help: remove these parentheses | 2316 ~ append( 2317 | (append( ... 2321 | string(" "), 2322 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2317:25 | 2317 | (append( | ^ ... 2320 | )), | ^ | help: remove these parentheses | 2317 ~ append( 2318 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2319 | (toString(v0.l0.get().clone())), 2320 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2318:29 | 2318 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2318 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2318 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2319:29 | 2319 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 2319 - (toString(v0.l0.get().clone())), 2319 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2318:37 | 2318 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2318 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2318 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2318:45 | 2318 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2318 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2318 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2318:74 | 2318 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2318 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2318 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2318:53 | 2318 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2318 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2318 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2490:13 | 2490 | (append( | ^ ... 2502 | )), | ^ | help: remove these parentheses | 2490 ~ append( 2491 | (append( ... 2501 | string(" / "), 2502 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2503:13 | 2503 | (v10), | ^ ^ | help: remove these parentheses | 2503 - (v10), 2503 + v10, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2491:17 | 2491 | (append( | ^ ... 2500 | )), | ^ | help: remove these parentheses | 2491 ~ append( 2492 | (append( ... 2499 | string("async.run_with_timeout_async**"), 2500 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2492:21 | 2492 | (append( | ^ ... 2498 | )), | ^ | help: remove these parentheses | 2492 ~ append( 2493 | (append( ... 2497 | string(" "), 2498 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2493:25 | 2493 | (append( | ^ ... 2496 | )), | ^ | help: remove these parentheses | 2493 ~ append( 2494 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2495 | (toString(v0.l0.get().clone())), 2496 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2494:29 | 2494 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2494 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2494 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2495:29 | 2495 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 2495 - (toString(v0.l0.get().clone())), 2495 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2494:37 | 2494 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2494 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2494 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2494:45 | 2494 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2494 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2494 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2494:74 | 2494 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2494 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2494 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2494:53 | 2494 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2494 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2494 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2679:13 | 2679 | (append( | ^ ... 2691 | )), | ^ | help: remove these parentheses | 2679 ~ append( 2680 | (append( ... 2690 | string(" / "), 2691 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2692:13 | 2692 | (v10), | ^ ^ | help: remove these parentheses | 2692 - (v10), 2692 + v10, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2680:17 | 2680 | (append( | ^ ... 2689 | )), | ^ | help: remove these parentheses | 2680 ~ append( 2681 | (append( ... 2688 | string("file_system.read_all_text_retry_async"), 2689 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2681:21 | 2681 | (append( | ^ ... 2687 | )), | ^ | help: remove these parentheses | 2681 ~ append( 2682 | (append( ... 2686 | string(" "), 2687 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2682:25 | 2682 | (append( | ^ ... 2685 | )), | ^ | help: remove these parentheses | 2682 ~ append( 2683 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2684 | (toString(v0.l0.get().clone())), 2685 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2683:29 | 2683 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2683 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2683 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2684:29 | 2684 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 2684 - (toString(v0.l0.get().clone())), 2684 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2683:37 | 2683 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2683 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2683 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2683:45 | 2683 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2683 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2683 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2683:74 | 2683 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2683 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2683 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:2683:53 | 2683 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 2683 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 2683 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3027:13 | 3027 | (append( | ^ ... 3039 | )), | ^ | help: remove these parentheses | 3027 ~ append( 3028 | (append( ... 3038 | string(" / "), 3039 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3040:13 | 3040 | (v10), | ^ ^ | help: remove these parentheses | 3040 - (v10), 3040 + v10, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3028:17 | 3028 | (append( | ^ ... 3037 | )), | ^ | help: remove these parentheses | 3028 ~ append( 3029 | (append( ... 3036 | string("file_system.create_dir"), 3037 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3029:21 | 3029 | (append( | ^ ... 3035 | )), | ^ | help: remove these parentheses | 3029 ~ append( 3030 | (append( ... 3034 | string(" "), 3035 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3030:25 | 3030 | (append( | ^ ... 3033 | )), | ^ | help: remove these parentheses | 3030 ~ append( 3031 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3032 | (toString(v0.l0.get().clone())), 3033 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3031:29 | 3031 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3031 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3031 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3032:29 | 3032 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 3032 - (toString(v0.l0.get().clone())), 3032 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3031:37 | 3031 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3031 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3031 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3031:45 | 3031 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3031 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3031 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3031:74 | 3031 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3031 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3031 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3031:53 | 3031 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3031 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3031 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3187:13 | 3187 | (append( | ^ ... 3199 | )), | ^ | help: remove these parentheses | 3187 ~ append( 3188 | (append( ... 3198 | string(" / "), 3199 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3200:13 | 3200 | (v9), | ^ ^ | help: remove these parentheses | 3200 - (v9), 3200 + v9, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3188:17 | 3188 | (append( | ^ ... 3197 | )), | ^ | help: remove these parentheses | 3188 ~ append( 3189 | (append( ... 3196 | string("file_system.create_dir"), 3197 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3189:21 | 3189 | (append( | ^ ... 3195 | )), | ^ | help: remove these parentheses | 3189 ~ append( 3190 | (append( ... 3194 | string(" "), 3195 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3190:25 | 3190 | (append( | ^ ... 3193 | )), | ^ | help: remove these parentheses | 3190 ~ append( 3191 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3192 | (toString(v0.l0.get().clone())), 3193 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3191:29 | 3191 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3191 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3191 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3192:29 | 3192 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 3192 - (toString(v0.l0.get().clone())), 3192 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3191:37 | 3191 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3191 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3191 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3191:45 | 3191 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3191 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3191 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3191:74 | 3191 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3191 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3191 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3191:53 | 3191 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3191 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3191 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3381:13 | 3381 | (append( | ^ ... 3393 | )), | ^ | help: remove these parentheses | 3381 ~ append( 3382 | (append( ... 3392 | string(" / "), 3393 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3394:13 | 3394 | (v10), | ^ ^ | help: remove these parentheses | 3394 - (v10), 3394 + v10, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3382:17 | 3382 | (append( | ^ ... 3391 | )), | ^ | help: remove these parentheses | 3382 ~ append( 3383 | (append( ... 3390 | string("file_system.create_dir"), 3391 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3383:21 | 3383 | (append( | ^ ... 3389 | )), | ^ | help: remove these parentheses | 3383 ~ append( 3384 | (append( ... 3388 | string(" "), 3389 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3384:25 | 3384 | (append( | ^ ... 3387 | )), | ^ | help: remove these parentheses | 3384 ~ append( 3385 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3386 | (toString(v0.l0.get().clone())), 3387 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3385:29 | 3385 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3385 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3385 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3386:29 | 3386 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 3386 - (toString(v0.l0.get().clone())), 3386 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3385:37 | 3385 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3385 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3385 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3385:45 | 3385 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3385 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3385 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3385:74 | 3385 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3385 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3385 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3385:53 | 3385 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 3385 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 3385 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3573:75 | 3573 | (File_system::method107(v0, v1.clone(), (v2) + 1_i32))(append((v3), (v1))) | ^ ^ | help: remove these parentheses | 3573 - (File_system::method107(v0, v1.clone(), (v2) + 1_i32))(append((v3), (v1))) 3573 + (File_system::method107(v0, v1.clone(), (v2) + 1_i32))(append(v3, (v1))) | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3573:81 | 3573 | (File_system::method107(v0, v1.clone(), (v2) + 1_i32))(append((v3), (v1))) | ^ ^ | help: remove these parentheses | 3573 - (File_system::method107(v0, v1.clone(), (v2) + 1_i32))(append((v3), (v1))) 3573 + (File_system::method107(v0, v1.clone(), (v2) + 1_i32))(append((v3), v1)) | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3587:13 | 3587 | ((File_system::method107(32_i32 - (length(v0.clone())), v3, 0_i32))(string(""))), | ^ ^ | help: remove these parentheses | 3587 - ((File_system::method107(32_i32 - (length(v0.clone())), v3, 0_i32))(string(""))), 3587 + (File_system::method107(32_i32 - (length(v0.clone())), v3, 0_i32))(string("")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3588:13 | 3588 | (v0), | ^ ^ | help: remove these parentheses | 3588 - (v0), 3588 + v0, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3591:13 | 3591 | (append( | ^ ... 3612 | )), | ^ | help: remove these parentheses | 3591 ~ append( 3592 | (append( ... 3611 | string("-"), 3612 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3613:13 | 3613 | (getSlice(v13, Some(20_i32), Some((32_i32) - 1_i32))), | ^ ^ | help: remove these parentheses | 3613 - (getSlice(v13, Some(20_i32), Some((32_i32) - 1_i32))), 3613 + getSlice(v13, Some(20_i32), Some((32_i32) - 1_i32)), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3592:17 | 3592 | (append( | ^ ... 3610 | )), | ^ | help: remove these parentheses | 3592 ~ append( 3593 | (append( ... 3609 | (getSlice(v13.clone(), Some(16_i32), Some((20_i32) - 1_i32))), 3610 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3593:21 | 3593 | (append( | ^ ... 3608 | )), | ^ | help: remove these parentheses | 3593 ~ append( 3594 | (append( ... 3607 | string("-"), 3608 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3609:21 | 3609 | (getSlice(v13.clone(), Some(16_i32), Some((20_i32) - 1_i32))), | ^ ^ | help: remove these parentheses | 3609 - (getSlice(v13.clone(), Some(16_i32), Some((20_i32) - 1_i32))), 3609 + getSlice(v13.clone(), Some(16_i32), Some((20_i32) - 1_i32)), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3594:25 | 3594 | (append( | ^ ... 3606 | )), | ^ | help: remove these parentheses | 3594 ~ append( 3595 | (append( ... 3605 | (getSlice(v13.clone(), Some(12_i32), Some((16_i32) - 1_i32))), 3606 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3595:29 | 3595 | ... (append( | ^ ... 3604 | ... )), | ^ | help: remove these parentheses | 3595 ~ append( 3596 | (append( ... 3603 | string("-"), 3604 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3605:29 | 3605 | ... (getSlice(v13.clone(), Some(12_i32), Some((16_i32) - 1_i32))), | ^ ^ | help: remove these parentheses | 3605 - (getSlice(v13.clone(), Some(12_i32), Some((16_i32) - 1_i32))), 3605 + getSlice(v13.clone(), Some(12_i32), Some((16_i32) - 1_i32)), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3596:33 | 3596 | ... (append( | ^ ... 3602 | ... )), | ^ | help: remove these parentheses | 3596 ~ append( 3597 | (append( ... 3601 | (getSlice(v13.clone(), Some(8_i32), Some((12_i32) - 1_i32))), 3602 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3597:37 | 3597 | ... (append( | ^ ... 3600 | ... )), | ^ | help: remove these parentheses | 3597 ~ append( 3598 | (getSlice(v13.clone(), Some(0_i32), Some((8_i32) - 1_i32))), 3599 | string("-"), 3600 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3601:37 | 3601 | ... (getSlice(v13.clone(), Some(8_i32), Some((12_i32) - 1_i32))), | ^ ^ | help: remove these parentheses | 3601 - (getSlice(v13.clone(), Some(8_i32), Some((12_i32) - 1_i32))), 3601 + getSlice(v13.clone(), Some(8_i32), Some((12_i32) - 1_i32)), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:3598:41 | 3598 | ... (getSlice(v13.clone(), Some(0_i32), Some((8_i32) - 1_i32))), | ^ ^ | help: remove these parentheses | 3598 - (getSlice(v13.clone(), Some(0_i32), Some((8_i32) - 1_i32))), 3598 + getSlice(v13.clone(), Some(0_i32), Some((8_i32) - 1_i32)), | warning: unnecessary parentheses around `break` value --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:4476:31 | 4476 | break '_method139 (if v3(File_system::method88(v4.get().clone(), v0.get().clone())) { | ^ ... 4517 | }); | ^ | help: remove these parentheses | 4476 ~ break '_method139 if v3(File_system::method88(v4.get().clone(), v0.get().clone())) { 4477 | File_system::US18::US18_0(v4.get().clone()) ... 4516 | } 4517 ~ }; | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:4501:25 | 4501 | (concat(new_array(&[ | ^ ... 4508 | ]))), | ^ | help: remove these parentheses | 4501 ~ concat(new_array(&[ 4502 | string("file_system.find_parent / No parent for "), ... 4507 | }, 4508 ~ ])), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:4545:21 | 4545 | (concat(new_array(&[ | ^ ... 4548 | ]))), | ^ | help: remove these parentheses | 4545 ~ concat(new_array(&[ 4546 | string("file_system.find_parent / No parent for "), 4547 | if v2 { string("file") } else { string("dir") }, 4548 ~ ])), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:4632:13 | 4632 | (append( | ^ ... 4644 | )), | ^ | help: remove these parentheses | 4632 ~ append( 4633 | (append( ... 4643 | string(" / "), 4644 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:4645:13 | 4645 | (v10), | ^ ^ | help: remove these parentheses | 4645 - (v10), 4645 + v10, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:4633:17 | 4633 | (append( | ^ ... 4642 | )), | ^ | help: remove these parentheses | 4633 ~ append( 4634 | (append( ... 4641 | string("file_system.get_workspace_root"), 4642 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:4634:21 | 4634 | (append( | ^ ... 4640 | )), | ^ | help: remove these parentheses | 4634 ~ append( 4635 | (append( ... 4639 | string(" "), 4640 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:4635:25 | 4635 | (append( | ^ ... 4638 | )), | ^ | help: remove these parentheses | 4635 ~ append( 4636 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 4637 | (toString(v0.l0.get().clone())), 4638 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:4636:29 | 4636 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 4636 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 4636 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:4637:29 | 4637 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 4637 - (toString(v0.l0.get().clone())), 4637 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:4636:37 | 4636 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 4636 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 4636 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:4636:45 | 4636 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 4636 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 4636 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:4636:74 | 4636 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 4636 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 4636 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./file_system.rs:4636:53 | 4636 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 4636 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 4636 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./sm.rs:94:70 | 94 | (Sm::method0(v0_1, v1_1.clone(), (v2_1) + 1_i32))(append((v3_1), (v1_1))) | ^ ^ | help: remove these parentheses | 94 - (Sm::method0(v0_1, v1_1.clone(), (v2_1) + 1_i32))(append((v3_1), (v1_1))) 94 + (Sm::method0(v0_1, v1_1.clone(), (v2_1) + 1_i32))(append(v3_1, (v1_1))) | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./sm.rs:94:78 | 94 | (Sm::method0(v0_1, v1_1.clone(), (v2_1) + 1_i32))(append((v3_1), (v1_1))) | ^ ^ | help: remove these parentheses | 94 - (Sm::method0(v0_1, v1_1.clone(), (v2_1) + 1_i32))(append((v3_1), (v1_1))) 94 + (Sm::method0(v0_1, v1_1.clone(), (v2_1) + 1_i32))(append((v3_1), v1_1)) | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./sm.rs:108:13 | 108 | ((Sm::method0((v0_1) - (length(v2_1.clone())), v5_1, 0_i32))(string(""))), | ^ ^ | help: remove these parentheses | 108 - ((Sm::method0((v0_1) - (length(v2_1.clone())), v5_1, 0_i32))(string(""))), 108 + (Sm::method0((v0_1) - (length(v2_1.clone())), v5_1, 0_i32))(string("")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./sm.rs:109:13 | 109 | (v2_1), | ^ ^ | help: remove these parentheses | 109 - (v2_1), 109 + v2_1, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./sm.rs:128:13 | 128 | (v2_1.clone()), | ^ ^ | help: remove these parentheses | 128 - (v2_1.clone()), 128 + v2_1.clone(), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./sm.rs:129:13 | 129 | ((Sm::method0((v0_1) - (length(v2_1)), v5_1, 0_i32))(string(""))), | ^ ^ | help: remove these parentheses | 129 - ((Sm::method0((v0_1) - (length(v2_1)), v5_1, 0_i32))(string(""))), 129 + (Sm::method0((v0_1) - (length(v2_1)), v5_1, 0_i32))(string("")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./sm.rs:345:17 | 345 | (getSlice(v1_1, Some(0_i32), Some((v0_1) - 1_i32))), | ^ ^ | help: remove these parentheses | 345 - (getSlice(v1_1, Some(0_i32), Some((v0_1) - 1_i32))), 345 + getSlice(v1_1, Some(0_i32), Some((v0_1) - 1_i32)), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./sm.rs:410:24 | 410 | append((append((v1_1[v9_1].clone()), (matchValue_1))), (matchValue)); | ^ ^ | help: remove these parentheses | 410 - append((append((v1_1[v9_1].clone()), (matchValue_1))), (matchValue)); 410 + append(append((v1_1[v9_1].clone()), (matchValue_1)), (matchValue)); | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./sm.rs:410:72 | 410 | append((append((v1_1[v9_1].clone()), (matchValue_1))), (matchValue)); | ^ ^ | help: remove these parentheses | 410 - append((append((v1_1[v9_1].clone()), (matchValue_1))), (matchValue)); 410 + append((append((v1_1[v9_1].clone()), (matchValue_1))), matchValue); | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./sm.rs:410:32 | 410 | append((append((v1_1[v9_1].clone()), (matchValue_1))), (matchValue)); | ^ ^ | help: remove these parentheses | 410 - append((append((v1_1[v9_1].clone()), (matchValue_1))), (matchValue)); 410 + append((append(v1_1[v9_1].clone(), (matchValue_1))), (matchValue)); | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./sm.rs:410:54 | 410 | append((append((v1_1[v9_1].clone()), (matchValue_1))), (matchValue)); | ^ ^ | help: remove these parentheses | 410 - append((append((v1_1[v9_1].clone()), (matchValue_1))), (matchValue)); 410 + append((append((v1_1[v9_1].clone()), matchValue_1)), (matchValue)); | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./crypto.rs:739:33 | 739 | let v4: string = append((v0_1.l0.get().clone()), (v1_1)); | ^ ^ | help: remove these parentheses | 739 - let v4: string = append((v0_1.l0.get().clone()), (v1_1)); 739 + let v4: string = append(v0_1.l0.get().clone(), (v1_1)); | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./crypto.rs:739:58 | 739 | let v4: string = append((v0_1.l0.get().clone()), (v1_1)); | ^ ^ | help: remove these parentheses | 739 - let v4: string = append((v0_1.l0.get().clone()), (v1_1)); 739 + let v4: string = append((v0_1.l0.get().clone()), v1_1); | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./crypto.rs:843:13 | 843 | (append( | ^ ... 855 | )), | ^ | help: remove these parentheses | 843 ~ append( 844 | (append( ... 854 | string(" / "), 855 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./crypto.rs:856:13 | 856 | (v11), | ^ ^ | help: remove these parentheses | 856 - (v11), 856 + v11, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./crypto.rs:844:17 | 844 | (append( | ^ ... 853 | )), | ^ | help: remove these parentheses | 844 ~ append( 845 | (append( ... 852 | string("crypto.hash_to_port"), 853 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./crypto.rs:845:21 | 845 | (append( | ^ ... 851 | )), | ^ | help: remove these parentheses | 845 ~ append( 846 | (append( ... 850 | string(" "), 851 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./crypto.rs:846:25 | 846 | (append( | ^ ... 849 | )), | ^ | help: remove these parentheses | 846 ~ append( 847 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 848 | (toString(v0_1.l0.get().clone())), 849 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./crypto.rs:847:29 | 847 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 847 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 847 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./crypto.rs:848:29 | 848 | ... (toString(v0_1.l0.get().clone())), | ^ ^ | help: remove these parentheses | 848 - (toString(v0_1.l0.get().clone())), 848 + toString(v0_1.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./crypto.rs:847:37 | 847 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 847 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 847 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./crypto.rs:847:45 | 847 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 847 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 847 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./crypto.rs:847:74 | 847 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 847 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 847 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./crypto.rs:847:53 | 847 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 847 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 847 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./common.rs:670:33 | 670 | let v4: string = append((v0.l0.get().clone()), (v1)); | ^ ^ | help: remove these parentheses | 670 - let v4: string = append((v0.l0.get().clone()), (v1)); 670 + let v4: string = append(v0.l0.get().clone(), (v1)); | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./common.rs:670:56 | 670 | let v4: string = append((v0.l0.get().clone()), (v1)); | ^ ^ | help: remove these parentheses | 670 - let v4: string = append((v0.l0.get().clone()), (v1)); 670 + let v4: string = append((v0.l0.get().clone()), v1); | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./common.rs:762:13 | 762 | (append( | ^ ... 774 | )), | ^ | help: remove these parentheses | 762 ~ append( 763 | (append( ... 773 | string(" / "), 774 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./common.rs:775:13 | 775 | (v10), | ^ ^ | help: remove these parentheses | 775 - (v10), 775 + v10, | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./common.rs:763:17 | 763 | (append( | ^ ... 772 | )), | ^ | help: remove these parentheses | 763 ~ append( 764 | (append( ... 771 | string("common.retry_fn"), 772 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./common.rs:764:21 | 764 | (append( | ^ ... 770 | )), | ^ | help: remove these parentheses | 764 ~ append( 765 | (append( ... 769 | string(" "), 770 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./common.rs:765:25 | 765 | (append( | ^ ... 768 | )), | ^ | help: remove these parentheses | 765 ~ append( 766 | (append((append((append((v6), string(" "))), (v7))), string(" #"))), 767 | (toString(v0.l0.get().clone())), 768 ~ ), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./common.rs:766:29 | 766 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 766 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 766 + append((append((append((v6), string(" "))), (v7))), string(" #")), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./common.rs:767:29 | 767 | ... (toString(v0.l0.get().clone())), | ^ ^ | help: remove these parentheses | 767 - (toString(v0.l0.get().clone())), 767 + toString(v0.l0.get().clone()), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./common.rs:766:37 | 766 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 766 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 766 + (append(append((append((v6), string(" "))), (v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./common.rs:766:45 | 766 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 766 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 766 + (append((append(append((v6), string(" ")), (v7))), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./common.rs:766:74 | 766 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 766 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 766 + (append((append((append((v6), string(" "))), v7)), string(" #"))), | warning: unnecessary parentheses around function argument --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./common.rs:766:53 | 766 | ... (append((append((append((v6), string(" "))), (v7))), string(" #"))), | ^ ^ | help: remove these parentheses | 766 - (append((append((append((v6), string(" "))), (v7))), string(" #"))), 766 + (append((append((append(v6, string(" "))), (v7))), string(" #"))), | warning: unnecessary parentheses around `break` value --> /home/runner/work/polyglot/polyglot/apps/plot/../../deps/spiral/lib/spiral/./common.rs:901:29 | 901 | break '_method8 ({ | ^ ... 938 | }); | ^ | help: remove these parentheses | 901 ~ break '_method8 { 902 | let result: LrcPtr<MutCell<Common::US7>> = refCell(Common::US7::US7_1); ... 937 | } 938 ~ }; | warning: `plot` (lib) generated 379 warnings (run `cargo fix --lib -p plot` to apply 379 suggestions) Finished `release` profile [optimized] target(s) in 21.42s
In [ ]:
{ pwsh ../apps/perf/build.ps1 } | Invoke-Block
00:00:00 d #1 spiral.main / { args = Array(MutCell(["dib", "--path", "Perf.dib", "--retries", "3"])) } 00:00:00 d #2 runtime.execute_with_options / { file_name = dotnet; arguments = ["repl", "--exit-after-run", "--run", "/home/runner/work/polyglot/polyglot/apps/perf/Perf.dib", "--output-path", "/home/runner/work/polyglot/polyglot/apps/perf/Perf.dib.ipynb"]; options = { command = dotnet repl --exit-after-run --run "/home/runner/work/polyglot/polyglot/apps/perf/Perf.dib" --output-path "/home/runner/work/polyglot/polyglot/apps/perf/Perf.dib.ipynb"; cancellation_token = None; environment_variables = Array(MutCell([("TRACE_LEVEL", "Verbose"), ("AUTOMATION", "True")])); on_line = None; stdin = None; trace = false; working_directory = None } } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ # Perf (Polyglot) > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > > open testing > open benchmark > > ── fsharp ────────────────────────────────────────────────────────────────────── > #if !INTERACTIVE > open Lib > #endif > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## TestCaseResult > > ── fsharp ────────────────────────────────────────────────────────────────────── > type TestCaseResult = > { > Input: string > Expected: string > Result: string > TimeList: int64 list > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## run > > ── fsharp ────────────────────────────────────────────────────────────────────── > let run count (solutions: (string * ('TInput -> 'TExpected)) list) (input, > expected) = > let inputStr = > match box input with > | :? System.Collections.ICollection as input -> > System.Linq.Enumerable.Cast<obj> input > |> Seq.map string > |> SpiralSm.concat "," > | _ -> input.ToString () > > printfn "" > printfn $"Solution: {inputStr} " > > let performanceInvoke (fn: unit -> 'T) = > GC.Collect () > let stopwatch = System.Diagnostics.Stopwatch () > stopwatch.Start () > let time1 = stopwatch.ElapsedMilliseconds > > let result = > [[| 0 .. count |]] > |> Array.Parallel.map (fun _ -> > fn () > ) > |> Array.last > > let time2 = stopwatch.ElapsedMilliseconds - time1 > > result, time2 > > let resultsWithTime = > solutions > |> List.mapi (fun i (testName, solution) -> > let result, time = performanceInvoke (fun () -> solution input) > printfn $"Test case %d{i + 1}. %s{testName}. Time: %A{time} " > result, time > ) > > > match resultsWithTime |> List.map fst with > | ([[]] | [[ _ ]]) -> () > | (head :: tail) when tail |> List.forall ((=) head) -> () > | results -> failwithf $"Challenge error: %A{results}" > > { > Input = inputStr > Expected = expected.ToString () > Result = resultsWithTime |> Seq.map fst |> Seq.head |> _.ToString() > TimeList = resultsWithTime |> List.map snd > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## runAll > > ── fsharp ────────────────────────────────────────────────────────────────────── > let runAll testName count (solutions: (string * ('TInput -> 'TExpected)) list) > testCases = > printfn "" > printfn "" > printfn $"Test: {testName}" > testCases > |> Seq.map (run count solutions) > |> Seq.toList > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## sortResultList > > ── fsharp ────────────────────────────────────────────────────────────────────── > let sortResultList resultList = > let table = > let rows = > resultList > |> List.map (fun result -> > let best = > result.TimeList > |> List.mapi (fun i time -> > i + 1, time > ) > |> List.sortBy snd > |> List.head > |> _.ToString() > let row = > [[ > result.Input > result.Expected > result.Result > best > ]] > let color = > match result.Expected = result.Result with > | true -> Some ConsoleColor.DarkGreen > | false -> Some ConsoleColor.DarkRed > row, color > ) > let header = > [[ > [[ > "Input" > "Expected" > "Result" > "Best" > ]] > [[ > "---" > "---" > "---" > "---" > ]] > ]] > |> List.map (fun row -> row, None) > header @ rows > > let formattedTable = > let lengthMap = > table > |> List.map fst > |> List.transpose > |> List.map (fun column -> > column > |> List.map String.length > |> List.sortDescending > |> List.tryHead > |> Option.defaultValue 0 > ) > |> List.indexed > |> Map.ofList > table > |> List.map (fun (row, color) -> > let newRow = > row > |> List.mapi (fun i cell -> > cell.PadRight lengthMap.[[i]] > ) > newRow, color > ) > > printfn "" > formattedTable > |> List.iter (fun (row, color) -> > match color with > | Some color -> Console.ForegroundColor <- color > | None -> Console.ResetColor () > > printfn "%s" (String.Join ("\t| ", row)) > > Console.ResetColor () > ) > > let averages = > resultList > |> List.map (fun result -> result.TimeList |> List.map float) > |> List.transpose > |> List.map List.average > |> List.map int64 > |> List.indexed > > printfn "" > printfn "Average Ranking " > averages > |> List.sortBy snd > |> List.iter (fun (i, avg) -> > printfn $"Test case %d{i + 1}. Average Time: %A{avg} " > ) > > ── fsharp ────────────────────────────────────────────────────────────────────── > let mutable _count = > if ("CI" |> System.Environment.GetEnvironmentVariable |> fun x -> $"%A{x}") > <> "<null>" > then 2000000 > else 2000 > > ── spiral ────────────────────────────────────────────────────────────────────── > inl is_fast () = > false > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## empty3Tests > > ── markdown ──────────────────────────────────────────────────────────────────── > │ Test: Empty3 > │ > │ Solution: (a, a) > │ Test case 1. A. Time: 91L > │ > │ Solution: (a, a) > │ Test case 1. A. Time: 56L > │ > │ Input | Expected | Result | Best > │ --- | --- | --- | --- > │ (a, a) | a | a | (1, 91) > │ (a, a) | a | a | (1, 56) > │ > │ Averages > │ Test case 1. Average Time: 73L > │ > │ Ranking > │ Test case 1. Average Time: 73L > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let solutions = [[ > "A", > fun (a, _b) -> > a > ]] > let testCases = seq { > ("a", "a"), "a" > ("a", "a"), "a" > } > let rec empty3Tests = runAll (nameof empty3Tests) _count solutions testCases > empty3Tests > |> sortResultList > > ── [ 394.83ms - stdout ] ─────────────────────────────────────────────────────── > │ > │ > │ Test: empty3Tests > │ > │ Solution: (a, a) > │ Test case 1. A. Time: 30L > │ > │ Solution: (a, a) > │ Test case 1. A. Time: 25L > │ > │ Input | Expected | Result | Best > │ --- | --- | --- | --- > │ (a, a) | a | a | (1, 30) > │ (a, a) | a | a | (1, 25) > │ > │ Average Ranking > │ Test case 1. Average Time: 27L > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## empty2Tests > > ── markdown ──────────────────────────────────────────────────────────────────── > │ Test: Empty2 > │ > │ Solution: (a, a) > │ Test case 1. A. Time: 59L > │ > │ Solution: (a, a) > │ Test case 1. A. Time: 53L > │ > │ Input | Expected | Result | Best > │ --- | --- | --- | --- > │ (a, a) | a | a | (1, 59) > │ (a, a) | a | a | (1, 53) > │ > │ Averages > │ Test case 1. Average Time: 56L > │ > │ Ranking > │ Test case 1. Average Time: 56L > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let solutions = [[ > "A", > fun (a, _b) -> > a > ]] > let testCases = seq { > ("a", "a"), "a" > ("a", "a"), "a" > } > let rec empty2Tests = runAll (nameof empty2Tests) _count solutions testCases > empty2Tests > |> sortResultList > > ── [ 262.47ms - stdout ] ─────────────────────────────────────────────────────── > │ > │ > │ Test: empty2Tests > │ > │ Solution: (a, a) > │ Test case 1. A. Time: 25L > │ > │ Solution: (a, a) > │ Test case 1. A. Time: 23L > │ > │ Input | Expected | Result | Best > │ --- | --- | --- | --- > │ (a, a) | a | a | (1, 25) > │ (a, a) | a | a | (1, 23) > │ > │ Average Ranking > │ Test case 1. Average Time: 24L > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## emptyTests > > ── markdown ──────────────────────────────────────────────────────────────────── > │ Test: Empty > │ > │ Solution: 0 > │ Test case 1. A. Time: 61L > │ > │ Solution: 2 > │ Test case 1. A. Time: 62L > │ > │ Solution: 5 > │ Test case 1. A. Time: 70L > │ > │ Input | Expected | Result | Best > │ --- | --- | --- | --- > │ 0 | 0 | 0 | (1, 61) > │ 2 | 2 | 2 | (1, 62) > │ 5 | 5 | 5 | (1, 70) > │ > │ Averages > │ Test case 1. Average Time: 64L > │ > │ Ranking > │ Test case 1. Average Time: 64L > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let solutions = [[ > "A", > fun n -> > n + 0 > ]] > let testCases = seq { > 0, 0 > 2, 2 > 5, 5 > } > let rec emptyTests = runAll (nameof emptyTests) _count solutions testCases > emptyTests > |> sortResultList > > ── [ 398.54ms - stdout ] ─────────────────────────────────────────────────────── > │ > │ > │ Test: emptyTests > │ > │ Solution: 0 > │ Test case 1. A. Time: 29L > │ > │ Solution: 2 > │ Test case 1. A. Time: 25L > │ > │ Solution: 5 > │ Test case 1. A. Time: 27L > │ > │ Input | Expected | Result | Best > │ --- | --- | --- | --- > │ 0 | 0 | 0 | (1, 29) > │ 2 | 2 | 2 | (1, 25) > │ 5 | 5 | 5 | (1, 27) > │ > │ Average Ranking > │ Test case 1. Average Time: 27L > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## uniqueLettersTests > > ── markdown ──────────────────────────────────────────────────────────────────── > │ Test: UniqueLetters > │ > │ Solution: abc > │ Test case 1. A. Time: 1512L > │ Test case 2. B. Time: 1947L > │ Test case 3. C. Time: 2023L > │ Test case 4. D. Time: 1358L > │ Test case 5. E. Time: 1321L > │ Test case 6. F. Time: 1346L > │ Test case 7. G. Time: 1304L > │ Test case 8. H. Time: 1383L > │ Test case 9. I. Time: 1495L > │ Test case 10. J. Time: 1245L > │ Test case 11. K. Time: 1219L > │ > │ Solution: accabb > │ Test case 1. A. Time: 1648L > │ Test case 2. B. Time: 2061L > │ Test case 3. C. Time: 2413L > │ Test case 4. D. Time: 1561L > │ Test case 5. E. Time: 1593L > │ Test case 6. F. Time: 1518L > │ Test case 7. G. Time: 1415L > │ Test case 8. H. Time: 1510L > │ Test case 9. I. Time: 1445L > │ Test case 10. J. Time: 1636L > │ Test case 11. K. Time: 1317L > │ > │ Solution: pprrqqpp > │ Test case 1. A. Time: 2255L > │ Test case 2. B. Time: 2408L > │ Test case 3. C. Time: 2393L > │ Test case 4. D. Time: 1675L > │ Test case 5. E. Time: 1911L > │ Test case 6. F. Time: 2126L > │ Test case 7. G. Time: 1504L > │ Test case 8. H. Time: 1715L > │ Test case 9. I. Time: 1537L > │ Test case 10. J. Time: 1522L > │ Test case 11. K. Time: 1322L > │ > │ Solution: > aaaaaaaaaaaaaaccccccabbbbbbbaaacccbbbaaccccccccccacbbbbbbbbbbbbbcccccccbbbbbbbb > │ Test case 1. A. Time: 13073L > │ Test case 2. B. Time: 11519L > │ Test case 3. C. Time: 8373L > │ Test case 4. D. Time: 5860L > │ Test case 5. E. Time: 6490L > │ Test case 6. F. Time: 6325L > │ Test case 7. G. Time: 5799L > │ Test case 8. H. Time: 7099L > │ Test case 9. I. Time: 6133L > │ Test case 10. J. Time: 5993L > │ Test case 11. K. Time: 2040L > │ > │ Input > | Expected | Result | Best > │ --- > | --- | --- | --- > │ abc > | abc | abc | (11, 1219) > │ accabb > | acb | acb | (11, 1317) > │ pprrqqpp > | prq | prq | (11, 1322) > │ > aaaaaaaaaaaaaaccccccabbbbbbbaaacccbbbaaccccccccccacbbbbbbbbbbbbbcccccccbbbbbbbb > | acb | acb | (11, 2040) > │ > │ Averages > │ Test case 1. Average Time: 4622L > │ Test case 2. Average Time: 4483L > │ Test case 3. Average Time: 3800L > │ Test case 4. Average Time: 2613L > │ Test case 5. Average Time: 2828L > │ Test case 6. Average Time: 2828L > │ Test case 7. Average Time: 2505L > │ Test case 8. Average Time: 2926L > │ Test case 9. Average Time: 2652L > │ Test case 10. Average Time: 2599L > │ Test case 11. Average Time: 1474L > │ > │ Ranking > │ Test case 1. Average Time: 4622L > │ Test case 2. Average Time: 4483L > │ Test case 3. Average Time: 3800L > │ Test case 8. Average Time: 2926L > │ Test case 5. Average Time: 2828L > │ Test case 6. Average Time: 2828L > │ Test case 9. Average Time: 2652L > │ Test case 4. Average Time: 2613L > │ Test case 10. Average Time: 2599L > │ Test case 7. Average Time: 2505L > │ Test case 11. Average Time: 1474L > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let solutions = [[ > "A", > fun input -> > input > |> Seq.toList > |> List.fold (fun acc x -> if List.contains x acc then acc else acc @ [[ > x ]]) [[]] > |> Seq.toArray > |> String > > "B", > fun input -> > input > |> Seq.rev > |> fun list -> Seq.foldBack (fun x acc -> if List.contains x acc then > acc else x :: acc) list [[]] > |> Seq.rev > |> Seq.toArray > |> String > > "C", > fun input -> > input > |> Seq.rev > |> fun list -> Seq.foldBack (fun x (set, acc) -> if Set.contains x set > then set, acc else set.Add x, x :: acc) list (Set.empty, [[]]) > |> snd > |> Seq.rev > |> Seq.toArray > |> String > > "D", > fun input -> > input > |> Seq.fold (fun (set, acc) x -> if Set.contains x set then set, acc > else set.Add x, Array.append acc [[| x |]]) (Set.empty, [[||]]) > |> snd > |> String > > "E", > fun input -> > input > |> Seq.fold (fun (set, acc) x -> if Set.contains x set then set, acc > else set.Add x, x :: acc) (Set.empty, [[]]) > |> snd > |> List.rev > |> List.toArray > |> String > > "F", > fun input -> > input > |> Seq.fold (fun (set, acc) x -> if Set.contains x set then set, acc > else set.Add x, acc @ [[ x ]]) (Set.empty, [[]]) > |> snd > |> List.toArray > |> String > > "G", > fun input -> > input > |> Seq.fold (fun (set, acc) x -> if Set.contains x set then set, acc > else set.Add x, x :: acc) (Set.empty, [[]]) > |> snd > |> List.toArray > |> Array.rev > |> String > > "H", > fun input -> > input > |> Seq.toList > |> fun list -> > let rec loop set = function > | head :: tail when Set.contains head set -> loop set tail > | head :: tail -> (loop (set.Add head) tail) @ [[ head ]] > | [[]] -> [[]] > loop Set.empty list > |> List.rev > |> List.toArray > |> String > > "I", > fun input -> > input > |> Seq.toList > |> fun list -> > let rec loop set = function > | head :: tail when Set.contains head set -> loop set tail > | head :: tail -> loop (set.Add head) tail |> Array.append [[| > head |]] > | [[]] -> [[||]] > loop Set.empty list > |> String > > "J", > fun input -> > input > |> Seq.toList > |> fun list -> > let rec loop set = function > | head :: tail when Set.contains head set -> loop set tail > | head :: tail -> head :: loop (set.Add head) tail > | [[]] -> [[]] > loop Set.empty list > |> List.toArray > |> String > > "K", > fun input -> > input > |> Seq.distinct > |> Seq.toArray > |> String > ]] > let testCases = seq { > "abc", "abc" > "accabb", "acb" > "pprrqqpp", "prq" > > "aaaaaaaaaaaaaaccccccabbbbbbbaaacccbbbaaccccccccccacbbbbbbbbbbbbbcccccccbbbbbbbb > ", "acb" > } > let rec uniqueLettersTests = runAll (nameof uniqueLettersTests) _count solutions > testCases > uniqueLettersTests > |> sortResultList > > ── [ 48.77s - stdout ] ───────────────────────────────────────────────────────── > │ > │ > │ Test: uniqueLettersTests > │ > │ Solution: abc > │ Test case 1. A. Time: 729L > │ Test case 2. B. Time: 1169L > │ Test case 3. C. Time: 1468L > │ Test case 4. D. Time: 817L > │ Test case 5. E. Time: 839L > │ Test case 6. F. Time: 843L > │ Test case 7. G. Time: 831L > │ Test case 8. H. Time: 894L > │ Test case 9. I. Time: 759L > │ Test case 10. J. Time: 865L > │ Test case 11. K. Time: 707L > │ > │ Solution: accabb > │ Test case 1. A. Time: 1012L > │ Test case 2. B. Time: 1670L > │ Test case 3. C. Time: 820L > │ Test case 4. D. Time: 469L > │ Test case 5. E. Time: 444L > │ Test case 6. F. Time: 489L > │ Test case 7. G. Time: 442L > │ Test case 8. H. Time: 507L > │ Test case 9. I. Time: 459L > │ Test case 10. J. Time: 369L > │ Test case 11. K. Time: 383L > │ > │ Solution: pprrqqpp > │ Test case 1. A. Time: 436L > │ Test case 2. B. Time: 536L > │ Test case 3. C. Time: 741L > │ Test case 4. D. Time: 509L > │ Test case 5. E. Time: 519L > │ Test case 6. F. Time: 535L > │ Test case 7. G. Time: 476L > │ Test case 8. H. Time: 513L > │ Test case 9. I. Time: 461L > │ Test case 10. J. Time: 436L > │ Test case 11. K. Time: 390L > │ > │ Solution: > aaaaaaaaaaaaaaccccccabbbbbbbaaacccbbbaaccccccccccacbbbbbbbbbbbbbcccccccbbbbbbbb│ Test case 1. A. Time: 1523L > │ Test case 2. B. Time: 1771L > │ Test case 3. C. Time: 2998L > │ Test case 4. D. Time: 1745L > │ Test case 5. E. Time: 1803L > │ Test case 6. F. Time: 2008L > │ Test case 7. G. Time: 1749L > │ Test case 8. H. Time: 1816L > │ Test case 9. I. Time: 1660L > │ Test case 10. J. Time: 1572L > │ Test case 11. K. Time: 840L > │ > │ Input > | Expected | Result | Best > │ --- > | --- | --- | --- > │ abc > | abc | abc | (11, 707) > │ accabb > | acb | acb | (10, 369) > │ pprrqqpp > | prq | prq | (11, 390) > │ > aaaaaaaaaaaaaaccccccabbbbbbbaaacccbbbaaccccccccccacbbbbbbbbbbbbbcccccccbbbbbbbb | > acb | acb | (11, 840) > │ > │ Average Ranking > │ Test case 11. Average Time: 580L > │ Test case 10. Average Time: 810L > │ Test case 9. Average Time: 834L > │ Test case 7. Average Time: 874L > │ Test case 4. Average Time: 885L > │ Test case 5. Average Time: 901L > │ Test case 1. Average Time: 925L > │ Test case 8. Average Time: 932L > │ Test case 6. Average Time: 968L > │ Test case 2. Average Time: 1286L > │ Test case 3. Average Time: 1506L > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## rotateStringsTests > > ── markdown ──────────────────────────────────────────────────────────────────── > │ https://www.hackerrank.com/challenges/rotate-string/forum > │ > │ Test: RotateStrings > │ > │ Solution: abc > │ Test case 1. A. Time: 1842L > │ Test case 2. B. Time: 1846L > │ Test case 3. C. Time: 1936L > │ Test case 4. CA. Time: 2224L > │ Test case 5. CB. Time: 2329L > │ Test case 6. D. Time: 2474L > │ Test case 7. E. Time: 1664L > │ Test case 8. F. Time: 1517L > │ Test case 9. FA. Time: 1651L > │ Test case 10. FB. Time: 3764L > │ Test case 11. FC. Time: 5415L > │ > │ Solution: abcde > │ Test case 1. A. Time: 3356L > │ Test case 2. B. Time: 2592L > │ Test case 3. C. Time: 2346L > │ Test case 4. CA. Time: 2997L > │ Test case 5. CB. Time: 3061L > │ Test case 6. D. Time: 4051L > │ Test case 7. E. Time: 1905L > │ Test case 8. F. Time: 1771L > │ Test case 9. FA. Time: 2175L > │ Test case 10. FB. Time: 3275L > │ Test case 11. FC. Time: 5266L > │ > │ Solution: abcdefghi > │ Test case 1. A. Time: 4492L > │ Test case 2. B. Time: 3526L > │ Test case 3. C. Time: 3583L > │ Test case 4. CA. Time: 3711L > │ Test case 5. CB. Time: 4783L > │ Test case 6. D. Time: 7557L > │ Test case 7. E. Time: 3452L > │ Test case 8. F. Time: 3050L > │ Test case 9. FA. Time: 3275L > │ Test case 10. FB. Time: 4635L > │ Test case 11. FC. Time: 5616L > │ > │ Solution: abab > │ Test case 1. A. Time: 2093L > │ Test case 2. B. Time: 1843L > │ Test case 3. C. Time: 1746L > │ Test case 4. CA. Time: 2085L > │ Test case 5. CB. Time: 2139L > │ Test case 6. D. Time: 2095L > │ Test case 7. E. Time: 1723L > │ Test case 8. F. Time: 1558L > │ Test case 9. FA. Time: 1620L > │ Test case 10. FB. Time: 2319L > │ Test case 11. FC. Time: 3918L > │ > │ Solution: aa > │ Test case 1. A. Time: 1107L > │ Test case 2. B. Time: 1241L > │ Test case 3. C. Time: 1183L > │ Test case 4. CA. Time: 1563L > │ Test case 5. CB. Time: 1525L > │ Test case 6. D. Time: 1591L > │ Test case 7. E. Time: 1327L > │ Test case 8. F. Time: 1151L > │ Test case 9. FA. Time: 1180L > │ Test case 10. FB. Time: 1733L > │ Test case 11. FC. Time: 2817L > │ > │ Solution: z > │ Test case 1. A. Time: 816L > │ Test case 2. B. Time: 745L > │ Test case 3. C. Time: 928L > │ Test case 4. CA. Time: 1375L > │ Test case 5. CB. Time: 1029L > │ Test case 6. D. Time: 852L > │ Test case 7. E. Time: 712L > │ Test case 8. F. Time: 263L > │ Test case 9. FA. Time: 232L > │ Test case 10. FB. Time: 773L > │ Test case 11. FC. Time: 1789L > │ > │ Input | Expected > > | Result > > | Best > │ --- | --- > > | --- > > | --- > │ abc | bca cab abc > > | bca cab abc > > | (8, 1517) > │ abcde | bcdea cdeab deabc eabcd abcde > | bcdea cdeab deabc eabcd abcde > | (8, 1771) > │ abcdefghi | bcdefghia cdefghiab defghiabc efghiabcd > fghiabcde ghiabcdef hiabcdefg iabcdefgh abcdefghi | bcdefghia cdefghiab > defghiabc efghiabcd fghiabcde ghiabcdef hiabcdefg iabcdefgh abcdefghi | > (8, 3050) > │ abab | baba abab baba abab > | baba abab baba abab > | (8, 1558) > │ aa | aa aa > > | aa aa > > | (1, 1107) > │ z | z > > | z > > | (9, 232) > │ > │ Averages > │ Test case 1. Average Time: 2284L > │ Test case 2. Average Time: 1965L > │ Test case 3. Average Time: 1953L > │ Test case 4. Average Time: 2325L > │ Test case 5. Average Time: 2477L > │ Test case 6. Average Time: 3103L > │ Test case 7. Average Time: 1797L > │ Test case 8. Average Time: 1551L > │ Test case 9. Average Time: 1688L > │ Test case 10. Average Time: 2749L > │ Test case 11. Average Time: 4136L > │ > │ Ranking > │ Test case 11. Average Time: 4136L > │ Test case 6. Average Time: 3103L > │ Test case 10. Average Time: 2749L > │ Test case 5. Average Time: 2477L > │ Test case 4. Average Time: 2325L > │ Test case 1. Average Time: 2284L > │ Test case 2. Average Time: 1965L > │ Test case 3. Average Time: 1953L > │ Test case 7. Average Time: 1797L > │ Test case 9. Average Time: 1688L > │ Test case 8. Average Time: 1551L > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let solutions = [[ > "A", > fun (input: string) -> > let resultList = > List.fold (fun acc x -> > let rotate (text: string) (letter: string) = (text |> > SpiralSm.slice 1 (input.Length - 1)) + letter > [[ rotate (if acc.IsEmpty then input else acc.Head) (string x) > ]] @ acc > ) [[]] (Seq.toList input) > > (resultList, "") > ||> List.foldBack (fun acc x -> x + acc + " ") > |> _.TrimEnd() > > "B", > fun input -> > input > |> Seq.toList > |> List.fold (fun (acc: string list) letter -> > let last = > if acc.IsEmpty > then input > else acc.Head > > let item = last.[[1 .. input.Length - 1]] + string letter > > item :: acc > ) [[]] > |> List.rev > |> SpiralSm.concat " " > > "C", > fun input -> > input > |> Seq.toList > |> List.fold (fun (acc: string list) letter -> acc.Head.[[ 1 .. > input.Length - 1 ]] + string letter :: acc) [[ input ]] > |> List.rev > |> List.skip 1 > |> SpiralSm.concat " " > > "CA", > fun input -> > input > |> Seq.fold (fun (acc: string list) letter -> acc.Head.[[ 1 .. > input.Length - 1 ]] + string letter :: acc) [[ input ]] > |> Seq.rev > |> Seq.skip 1 > |> SpiralSm.concat " " > > "CB", > fun input -> > input > |> Seq.toArray > |> Array.fold (fun (acc: string[[]]) letter -> acc |> Array.append [[| > acc.[[0]].[[ 1 .. input.Length - 1 ]] + string letter |]]) [[| input |]] > |> Array.rev > |> Array.skip 1 > |> SpiralSm.concat " " > > "D", > fun input -> > input > |> Seq.toList > |> fun list -> > let rec loop (acc: char list list) = function > | _ when acc.Length = list.Length -> acc > | head :: tail -> > let item = tail @ [[ head ]] > loop (item :: acc) item > | [[]] -> [[]] > loop [[]] list > |> List.rev > |> List.map (List.toArray >> String) > |> SpiralSm.concat " " > > "E", > fun input -> > input > |> Seq.toList > |> fun list -> > let rec loop (last: string) = function > | head :: tail -> > let item = last.[[1 .. input.Length - 1]] + string head > item :: loop item tail > | [[]] -> [[]] > loop input list > |> SpiralSm.concat " " > > "F", > fun input -> > Array.singleton 0 > |> Array.append [[| 1 .. input.Length - 1 |]] > |> Array.map (fun i -> input.[[ i .. ]] + input.[[ .. i - 1 ]]) > |> SpiralSm.concat " " > > "FA", > fun input -> > List.singleton 0 > |> List.append [[ 1 .. input.Length - 1 ]] > |> List.map (fun i -> input.[[ i .. ]] + input.[[ .. i - 1 ]]) > |> SpiralSm.concat " " > > "FB", > fun input -> > Seq.singleton 0 > |> Seq.append (seq { 1 .. input.Length - 1 }) > |> Seq.map (fun i -> input.[[ i .. ]] + input.[[ .. i - 1 ]]) > |> SpiralSm.concat " " > > "FC", > fun input -> > Array.singleton 0 > |> Array.append [[| 1 .. input.Length - 1 |]] > |> Array.Parallel.map (fun i -> input.[[ i .. ]] + input.[[ .. i - 1 ]]) > |> SpiralSm.concat " " > ]] > let testCases = seq { > "abc", "bca cab abc" > "abcde", "bcdea cdeab deabc eabcd abcde" > "abcdefghi", "bcdefghia cdefghiab defghiabc efghiabcd fghiabcde ghiabcdef > hiabcdefg iabcdefgh abcdefghi" > "abab", "baba abab baba abab" > "aa", "aa aa" > "z", "z" > } > let rec rotateStringsTests = runAll (nameof rotateStringsTests) _count solutions > testCases > rotateStringsTests > |> sortResultList > > ── [ 58.08s - stdout ] ───────────────────────────────────────────────────────── > │ > │ > │ Test: rotateStringsTests > │ > │ Solution: abc > │ Test case 1. A. Time: 631L > │ Test case 2. B. Time: 538L > │ Test case 3. C. Time: 552L > │ Test case 4. CA. Time: 763L > │ Test case 5. CB. Time: 702L > │ Test case 6. D. Time: 612L > │ Test case 7. E. Time: 497L > │ Test case 8. F. Time: 354L > │ Test case 9. FA. Time: 465L > │ Test case 10. FB. Time: 951L > │ Test case 11. FC. Time: 1177L > │ > │ Solution: abcde > │ Test case 1. A. Time: 862L > │ Test case 2. B. Time: 649L > │ Test case 3. C. Time: 727L > │ Test case 4. CA. Time: 774L > │ Test case 5. CB. Time: 849L > │ Test case 6. D. Time: 929L > │ Test case 7. E. Time: 633L > │ Test case 8. F. Time: 441L > │ Test case 9. FA. Time: 619L > │ Test case 10. FB. Time: 1077L > │ Test case 11. FC. Time: 1227L > │ > │ Solution: abcdefghi > │ Test case 1. A. Time: 1483L > │ Test case 2. B. Time: 1051L > │ Test case 3. C. Time: 1156L > │ Test case 4. CA. Time: 1186L > │ Test case 5. CB. Time: 1362L > │ Test case 6. D. Time: 1984L > │ Test case 7. E. Time: 934L > │ Test case 8. F. Time: 824L > │ Test case 9. FA. Time: 1067L > │ Test case 10. FB. Time: 1495L > │ Test case 11. FC. Time: 1708L > │ > │ Solution: abab > │ Test case 1. A. Time: 699L > │ Test case 2. B. Time: 589L > │ Test case 3. C. Time: 610L > │ Test case 4. CA. Time: 716L > │ Test case 5. CB. Time: 706L > │ Test case 6. D. Time: 774L > │ Test case 7. E. Time: 547L > │ Test case 8. F. Time: 393L > │ Test case 9. FA. Time: 545L > │ Test case 10. FB. Time: 904L > │ Test case 11. FC. Time: 1184L > │ > │ Solution: aa > │ Test case 1. A. Time: 448L > │ Test case 2. B. Time: 410L > │ Test case 3. C. Time: 377L > │ Test case 4. CA. Time: 583L > │ Test case 5. CB. Time: 484L > │ Test case 6. D. Time: 464L > │ Test case 7. E. Time: 351L > │ Test case 8. F. Time: 260L > │ Test case 9. FA. Time: 256L > │ Test case 10. FB. Time: 702L > │ Test case 11. FC. Time: 1087L > │ > │ Solution: z > │ Test case 1. A. Time: 217L > │ Test case 2. B. Time: 246L > │ Test case 3. C. Time: 288L > │ Test case 4. CA. Time: 439L > │ Test case 5. CB. Time: 309L > │ Test case 6. D. Time: 248L > │ Test case 7. E. Time: 195L > │ Test case 8. F. Time: 71L > │ Test case 9. FA. Time: 93L > │ Test case 10. FB. Time: 449L > │ Test case 11. FC. Time: 858L > │ > │ Input | Expected > | Result > > | Best > │ --- | --- > > | --- > > | --- > │ abc | bca cab abc > | bca cab abc > | (8, 354) > │ abcde | bcdea cdeab deabc eabcd abcde > | bcdea cdeab deabc eabcd abcde > | (8, 441) > │ abcdefghi | bcdefghia cdefghiab defghiabc efghiabcd fghiabcde > ghiabcdef hiabcdefg iabcdefgh abcdefghi | bcdefghia cdefghiab defghiabc efghiabcd > fghiabcde ghiabcdef hiabcdefg iabcdefgh abcdefghi | (8, 824) > │ abab | baba abab baba abab > | baba abab baba abab > | (8, 393) > │ aa | aa aa > > | aa aa > > | (9, 256) > │ z | z > > | z > > | (8, 71) > │ > │ Average Ranking > │ Test case 8. Average Time: 390L > │ Test case 9. Average Time: 507L > │ Test case 7. Average Time: 526L > │ Test case 2. Average Time: 580L > │ Test case 3. Average Time: 618L > │ Test case 1. Average Time: 723L > │ Test case 5. Average Time: 735L > │ Test case 4. Average Time: 743L > │ Test case 6. Average Time: 835L > │ Test case 10. Average Time: 929L > │ Test case 11. Average Time: 1206L > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## rotate_strings_tests > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ``` > │ 02:21:12 verbose #1 benchmark.run_all / {count = > 2000000; test_name = rotate_strings_tests} > │ > │ 02:21:12 verbose #2 benchmark.run / {input_str = > "abc"} > │ 02:21:13 verbose #3 benchmark.run / solutions.map / {i > = 1; test_name = F; time = 638} > │ 02:21:14 verbose #4 benchmark.run / solutions.map / {i > = 2; test_name = FA; time = 779} > │ > │ 02:21:14 verbose #5 benchmark.run / {input_str = > "abcde"} > │ 02:21:15 verbose #6 benchmark.run / solutions.map / {i > = 1; test_name = F; time = 745} > │ 02:21:16 verbose #7 benchmark.run / solutions.map / {i > = 2; test_name = FA; time = 809} > │ > │ 02:21:16 verbose #8 benchmark.run / {input_str = > "abcdefghi"} > │ 02:21:17 verbose #9 benchmark.run / solutions.map / {i > = 1; test_name = F; time = 1092} > │ 02:21:18 verbose #10 benchmark.run / solutions.map / > {i = 2; test_name = FA; time = 1304} > │ > │ 02:21:18 verbose #11 benchmark.run / {input_str = > "abab"} > │ 02:21:19 verbose #12 benchmark.run / solutions.map / > {i = 1; test_name = F; time = 536} > │ 02:21:20 verbose #13 benchmark.run / solutions.map / > {i = 2; test_name = FA; time = 620} > │ > │ 02:21:20 verbose #14 benchmark.run / {input_str = > "aa"} > │ 02:21:21 verbose #15 benchmark.run / solutions.map / > {i = 1; test_name = F; time = 365} > │ 02:21:21 verbose #16 benchmark.run / solutions.map / > {i = 2; test_name = FA; time = 396} > │ > │ 02:21:21 verbose #17 benchmark.run / {input_str = "z"} > │ 02:21:22 verbose #18 benchmark.run / solutions.map / > {i = 1; test_name = F; time = 158} > │ 02:21:22 verbose #19 benchmark.run / solutions.map / > {i = 2; test_name = FA; time = 143} > │ ``` > │ input | expected > > | result > > | best > │ --- | --- > > | --- > > | --- > │ "abc" | "bca cab abc" > | "bca cab abc" > | 1, 638 > │ "abcde" | "bcdea cdeab deabc eabcd abcde" > | "bcdea cdeab deabc eabcd abcde" > | 1, 745 > │ "abcdefghi" | "bcdefghia cdefghiab defghiabc efghiabcd > fghiabcde ghiabcdef hiabcdefg iabcdefgh abcdefghi" | "bcdefghia cdefghiab > defghiabc efghiabcd fghiabcde ghiabcdef hiabcdefg iabcdefgh abcdefghi" | 1, 1092 > │ "abab" | "baba abab baba abab" > | "baba abab baba abab" > | 1, 536 > │ "aa" | "aa aa" > > | "aa aa" > > | 1, 365 > │ "z" | "z" > > | "z" > > | 2, 143 > │ ``` > │ 02:21:22 verbose #20 benchmark.sort_result_list / > averages.iter / {avg = 589; i = 1} > │ 02:21:22 verbose #21 benchmark.sort_result_list / > averages.iter / {avg = 675; i = 2} > │ ``` > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > //// timeout=60000 > > inl get_solutions () = > [[ > // "A", > // fun (input : string) => > // let resultList = > // List.fold (fun acc x => > // let rotate (text : string) (letter : string) = > text.Substring (1, input.Length - 1) + letter > // [[ rotate (if acc.IsEmpty then input else acc.Head) > (string x) ]] ++ acc > // ) [[]] (Seq.toList input) > > // List.foldBack (fun acc x => x + acc + " ") resultList "" > // |> fun x => x.TrimEnd () > > // "B", > // fun input => > // input > // |> Seq.toList > // |> List.fold (fun (acc : string list) letter => > // let last = > // if acc.IsEmpty > // then input > // else acc.Head > > // let item = last.[[1 .. input.Length - 1]] + string letter > > // item :: acc > // ) [[]] > // |> List.rev > // |> SpiralSm.concat " " > > // "C", > // fun input => > // input > // |> Seq.toList > // |> List.fold (fun (acc : list string) letter => acc.Head.[[ 1 .. > input.Length - 1 ]] + string letter :: acc) [[ input ]] > // |> List.rev > // |> List.skip 1 > // |> SpiralSm.concat " " > > // "CA", > // fun input => > // input > // |> Seq.fold (fun (acc : list string) letter => acc.Head.[[ 1 .. > input.Length - 1 ]] + string letter :: acc) [[ input ]] > // |> Seq.rev > // |> Seq.skip 1 > // |> SpiralSm.concat " " > > // "CB", > // fun input => > // input > // |> Seq.toArray > // |> Array.fold (fun (acc : a _ string) letter => acc |> > Array.append (a ;[[ acc.[[0]].[[ 1 .. input.Length - 1 ]] + string letter ]])) > (a ;[[ input ]]) > // |> Array.rev > // |> Array.skip 1 > // |> SpiralSm.concat " " > > // "D", > // fun input => > // input > // |> Seq.toList > // |> fun list => > // let rec loop (acc : list (list char)) = function > // | _ when acc.Length = list.Length => acc > // | head :: tail => > // let item = tail ++ [[ head ]] > // loop (item :: acc) item > // | [[]] => [[]] > // loop [[]] list > // |> List.rev > // |> List.map (List.toArray >> String) > // |> SpiralSm.concat " " > > // "E", > // fun input => > // input > // |> Seq.toList > // |> fun list => > // let rec loop (last : string) = function > // | head :: tail => > // let item = last.[[1 .. input.Length - 1]] + string > head > // item :: loop item tail > // | [[]] => [[]] > // loop input list > // |> SpiralSm.concat " " > > "F", > fun input => > // Array.singleton 0 > // |> Array.append [[| 1 .. input.Length - 1 |]] > // |> Array.map (fun i -> input.[[ i .. ]] + input.[[ .. i - 1 ]]) > // |> SpiralSm.concat " " > inl input_length = input |> sm.length > am.singleton 0i32 > |> am.append (am'.init_series 1 (input_length - 1) 1 |> fun x => a x > : _ int _) > |> fun (a x) => x > |> am'.map_base fun i => > inl a = input |> sm'.slice i (input_length - 1) > inl b = input |> sm'.slice 0 (i - 1) > a +. b > |> fun x => a x : _ int _ > |> seq.of_array > |> sm'.concat " " > > "FA", > fun input => > // List.singleton 0 > // |> List.append [[ 1 .. input.Length - 1 ]] > // // |> List.map (fun i => input.[[ i .. ]] + input.[[ .. i - 1 ]]) > // |> SpiralSm.concat " " > inl input_length = input |> sm.length > listm.singleton 0i32 > |> listm.append (listm'.init_series 1 (input_length - 1) 1) > |> listm.map (fun i => > inl a = input |> sm'.slice i (input_length - 1) > inl b = if i = 0 then "" else input |> sm'.slice 0 (i - 1) > a +. b > ) > |> listm'.box > |> listm'.to_array' > |> fun x => a x : _ int _ > |> seq.of_array > |> sm'.concat " " > > // "FB", > // fun input => > // Seq.singleton 0 > // // |> Seq.append (seq { 1 .. input.Length - 1 }) > // // |> Seq.map (fun i => input.[[ i .. ]] + input.[[ .. i - 1 ]]) > // |> SpiralSm.concat " " > > // "FC", > // fun input => > // Array.singleton 0 > // |> Array.append (a ;[[ 1 .. input.Length - 1 ]]) > //// |> Array.Parallel.map (fun i => input.[[ i .. ]] + input.[[ .. i > - 1 ]]) > // |> SpiralSm.concat " " > ]] > > inl rec rotate_strings_tests () = > inl test_cases = [[ > "abc", "bca cab abc" > "abcde", "bcdea cdeab deabc eabcd abcde" > "abcdefghi", "bcdefghia cdefghiab defghiabc efghiabcd fghiabcde > ghiabcdef hiabcdefg iabcdefgh abcdefghi" > "abab", "baba abab baba abab" > "aa", "aa aa" > "z", "z" > ]] > > inl solutions = get_solutions () > > // inl is_fast () = true > > inl count = > if is_fast () > then 1000i32 > else 2000000i32 > > run_all (reflection.nameof { rotate_strings_tests }) count solutions > test_cases > |> sort_result_list > > rotate_strings_tests () > > ── [ 10.79s - stdout ] ───────────────────────────────────────────────────────── > │ > │ ``` > │ 00:00:00 v #1 benchmark.run_all / { test_name = > rotate_strings_tests; count = 2000000 } > │ > │ 00:00:00 v #2 benchmark.run / { input_str = abc } > │ 00:00:00 v #3 benchmark.run / solutions.map / { i = 1; > test_name = F; time = 578 } > │ 00:00:01 v #4 benchmark.run / solutions.map / { i = 2; > test_name = FA; time = 640 } > │ > │ 00:00:01 v #5 benchmark.run / { input_str = abcde } > │ 00:00:02 v #6 benchmark.run / solutions.map / { i = 1; > test_name = F; time = 583 } > │ 00:00:03 v #7 benchmark.run / solutions.map / { i = 2; > test_name = FA; time = 761 } > │ > │ 00:00:03 v #8 benchmark.run / { input_str = abcdefghi } > │ 00:00:04 v #9 benchmark.run / solutions.map / { i = 1; > test_name = F; time = 981 } > │ 00:00:05 v #10 benchmark.run / solutions.map / { i = 2; > test_name = FA; time = 1225 } > │ > │ 00:00:05 v #11 benchmark.run / { input_str = abab } > │ 00:00:06 v #12 benchmark.run / solutions.map / { i = 1; > test_name = F; time = 490 } > │ 00:00:07 v #13 benchmark.run / solutions.map / { i = 2; > test_name = FA; time = 675 } > │ > │ 00:00:07 v #14 benchmark.run / { input_str = aa } > │ 00:00:07 v #15 benchmark.run / solutions.map / { i = 1; > test_name = F; time = 313 } > │ 00:00:08 v #16 benchmark.run / solutions.map / { i = 2; > test_name = FA; time = 415 } > │ > │ 00:00:08 v #17 benchmark.run / { input_str = z } > │ 00:00:08 v #18 benchmark.run / solutions.map / { i = 1; > test_name = F; time = 125 } > │ 00:00:09 v #19 benchmark.run / solutions.map / { i = 2; > test_name = FA; time = 141 } > │ ``` > │ input | expected > | result > > | best > │ --- | --- > > | --- > > | --- > │ abc | bca cab abc > | bca cab abc > | 1, 578 > │ abcde | bcdea cdeab deabc eabcd abcde > | bcdea cdeab deabc eabcd abcde > | 1, 583 > │ abcdefghi | bcdefghia cdefghiab defghiabc efghiabcd fghiabcde > ghiabcdef hiabcdefg iabcdefgh abcdefghi | bcdefghia cdefghiab defghiabc efghiabcd > fghiabcde ghiabcdef hiabcdefg iabcdefgh abcdefghi | 1, 981 > │ abab | baba abab baba abab > | baba abab baba abab > | 1, 490 > │ aa | aa aa > > | aa aa > > | 1, 313 > │ z | z > > | z > > | 1, 125 > │ ``` > │ 00:00:09 v #20 benchmark.sort_result_list / > averages.iter / { i = 1; avg = 511 } > │ 00:00:09 v #21 benchmark.sort_result_list / > averages.iter / { i = 2; avg = 642 } > │ ``` > │ > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > > // rotate_strings_tests () > () > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## binary_search_tests > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ``` > │ 02:19:29 verbose #1 benchmark.run_all / {count = > 10000000; test_name = binary_search_tests} > │ > │ 02:19:29 verbose #2 benchmark.run / {input_str = > struct ([|1; 3; 4; 6; 8; 9; 11|], 6, 7)} > │ 02:19:30 verbose #3 benchmark.run / solutions.map / {i > = 1; test_name = semi_open_1; time = 662} > │ 02:19:30 verbose #4 benchmark.run / solutions.map / {i > = 2; test_name = closed_1; time = 619} > │ 02:19:31 verbose #5 benchmark.run / solutions.map / {i > = 3; test_name = semi_open_2; time = 644} > │ 02:19:32 verbose #6 benchmark.run / solutions.map / {i > = 4; test_name = closed_2; time = 610} > │ > │ 02:19:32 verbose #7 benchmark.run / {input_str = > struct ([|1; 3; 4; 6; 8; 9; 11|], 1, 7)} > │ 02:19:33 verbose #8 benchmark.run / solutions.map / {i > = 1; test_name = semi_open_1; time = 607} > │ 02:19:33 verbose #9 benchmark.run / solutions.map / {i > = 2; test_name = closed_1; time = 559} > │ 02:19:34 verbose #10 benchmark.run / solutions.map / > {i = 3; test_name = semi_open_2; time = 612} > │ 02:19:35 verbose #11 benchmark.run / solutions.map / > {i = 4; test_name = closed_2; time = 577} > │ > │ 02:19:35 verbose #12 benchmark.run / {input_str = > struct ([|1; 3; 4; 6; 8; 9; 11|], 11, 7)} > │ 02:19:35 verbose #13 benchmark.run / solutions.map / > {i = 1; test_name = semi_open_1; time = 550} > │ 02:19:36 verbose #14 benchmark.run / solutions.map / > {i = 2; test_name = closed_1; time = 580} > │ 02:19:37 verbose #15 benchmark.run / solutions.map / > {i = 3; test_name = semi_open_2; time = 624} > │ 02:19:37 verbose #16 benchmark.run / solutions.map / > {i = 4; test_name = closed_2; time = 590} > │ > │ 02:19:37 verbose #17 benchmark.run / {input_str = > struct ([|1; 3; 4; 6; 8; 9; 11|], 12, 7)} > │ 02:19:38 verbose #18 benchmark.run / solutions.map / > {i = 1; test_name = semi_open_1; time = 574} > │ 02:19:39 verbose #19 benchmark.run / solutions.map / > {i = 2; test_name = closed_1; time = 577} > │ 02:19:39 verbose #20 benchmark.run / solutions.map / > {i = 3; test_name = semi_open_2; time = 582} > │ 02:19:40 verbose #21 benchmark.run / solutions.map / > {i = 4; test_name = closed_2; time = 585} > │ > │ 02:19:40 verbose #22 benchmark.run / {input_str = > struct ([|1; 2; 3; 4...00; ...|], 60, 1000)} > │ 02:19:41 verbose #23 benchmark.run / solutions.map / > {i = 1; test_name = semi_open_1; time = 610} > │ 02:19:42 verbose #24 benchmark.run / solutions.map / > {i = 2; test_name = closed_1; time = 672} > │ 02:19:42 verbose #25 benchmark.run / solutions.map / > {i = 3; test_name = semi_open_2; time = 636} > │ 02:19:43 verbose #26 benchmark.run / solutions.map / > {i = 4; test_name = closed_2; time = 629} > │ > │ 02:19:43 verbose #27 benchmark.run / {input_str = > struct ([|1; 3; 4; 6; 8; 9; 11|], 6, 7)} > │ 02:19:44 verbose #28 benchmark.run / solutions.map / > {i = 1; test_name = semi_open_1; time = 599} > │ 02:19:44 verbose #29 benchmark.run / solutions.map / > {i = 2; test_name = closed_1; time = 561} > │ 02:19:45 verbose #30 benchmark.run / solutions.map / > {i = 3; test_name = semi_open_2; time = 604} > │ 02:19:46 verbose #31 benchmark.run / solutions.map / > {i = 4; test_name = closed_2; time = 573} > │ > │ 02:19:46 verbose #32 benchmark.run / {input_str = > struct ([|1; 3; 4; 6; 8; 9; 11|], 1, 7)} > │ 02:19:47 verbose #33 benchmark.run / solutions.map / > {i = 1; test_name = semi_open_1; time = 635} > │ 02:19:47 verbose #34 benchmark.run / solutions.map / > {i = 2; test_name = closed_1; time = 603} > │ 02:19:48 verbose #35 benchmark.run / solutions.map / > {i = 3; test_name = semi_open_2; time = 644} > │ 02:19:49 verbose #36 benchmark.run / solutions.map / > {i = 4; test_name = closed_2; time = 628} > │ > │ 02:19:49 verbose #37 benchmark.run / {input_str = > struct ([|1; 3; 4; 6; 8; 9; 11|], 11, 7)} > │ 02:19:49 verbose #38 benchmark.run / solutions.map / > {i = 1; test_name = semi_open_1; time = 643} > │ 02:19:50 verbose #39 benchmark.run / solutions.map / > {i = 2; test_name = closed_1; time = 606} > │ 02:19:51 verbose #40 benchmark.run / solutions.map / > {i = 3; test_name = semi_open_2; time = 636} > │ 02:19:52 verbose #41 benchmark.run / solutions.map / > {i = 4; test_name = closed_2; time = 624} > │ > │ 02:19:52 verbose #42 benchmark.run / {input_str = > struct ([|1; 3; 4; 6; 8; 9; 11|], 12, 7)} > │ 02:19:52 verbose #43 benchmark.run / solutions.map / > {i = 1; test_name = semi_open_1; time = 689} > │ 02:19:53 verbose #44 benchmark.run / solutions.map / > {i = 2; test_name = closed_1; time = 613} > │ 02:19:54 verbose #45 benchmark.run / solutions.map / > {i = 3; test_name = semi_open_2; time = 623} > │ 02:19:55 verbose #46 benchmark.run / solutions.map / > {i = 4; test_name = closed_2; time = 613} > │ > │ 02:19:55 verbose #47 benchmark.run / {input_str = > struct ([|1; 2; 3; 4...100; ...|], 60, 100)} > │ 02:19:55 verbose #48 benchmark.run / solutions.map / > {i = 1; test_name = semi_open_1; time = 630} > │ 02:19:56 verbose #49 benchmark.run / solutions.map / > {i = 2; test_name = closed_1; time = 633} > │ 02:19:57 verbose #50 benchmark.run / solutions.map / > {i = 3; test_name = semi_open_2; time = 653} > │ 02:19:58 verbose #51 benchmark.run / solutions.map / > {i = 4; test_name = closed_2; time = 646} > │ ``` > │ input | expected | result | > best > │ --- | --- | --- | > --- > │ struct ([1; 3; 4; 6; 8; 9; 11], 6, 7) | US4_0 3 | US4_0 3 | > 4, 610 > │ struct ([1; 3; 4; 6; 8; 9; 11], 1, 7) | US4_0 0 | US4_0 0 | > 2, 559 > │ struct ([1; 3; 4; 6; 8; 9; 11], 11, 7) | US4_0 6 | US4_0 6 | > 1, 550 > │ struct ([1; 3; 4; 6; 8; 9; 11], 12, 7) | US4_1 | US4_1 | > 1, 574 > │ struct ([1; 2; 3; 4...00; ...], 60, 1000) | US4_0 59 | US4_0 59 | > 1, 610 > │ struct ([1; 3; 4; 6; 8; 9; 11], 6, 7) | US4_0 3 | US4_0 3 | > 2, 561 > │ struct ([1; 3; 4; 6; 8; 9; 11], 1, 7) | US4_0 0 | US4_0 0 | > 2, 603 > │ struct ([1; 3; 4; 6; 8; 9; 11], 11, 7) | US4_0 6 | US4_0 6 | > 2, 606 > │ struct ([1; 3; 4; 6; 8; 9; 11], 12, 7) | US4_1 | US4_1 | > 2, 613 > │ struct ([1; 2; 3; 4...100; ...], 60, 100) | US4_0 59 | US4_0 59 | > 1, 630 > │ ``` > │ 02:19:58 verbose #52 benchmark.sort_result_list / > averages.iter / {avg = 602; i = 2} > │ 02:19:58 verbose #53 benchmark.sort_result_list / > averages.iter / {avg = 607; i = 4} > │ 02:19:58 verbose #54 benchmark.sort_result_list / > averages.iter / {avg = 619; i = 1} > │ 02:19:58 verbose #55 benchmark.sort_result_list / > averages.iter / {avg = 625; i = 3} > │ ``` > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > //// timeout=90000 > > inl binary_search_semi_open_1 arr target left right = > inl rec body left right = > if left >= right > then None > else > inl mid = (left + right) / 2 > inl item = index arr mid > if item = target > then Some mid > elif item < target > then loop (mid + 1) right > else loop left mid > and inl loop left right = > if var_is right |> not > then body left right > else > inl left = dyn left > join body left right > loop left right > > inl binary_search_closed_1 arr target left right = > inl rec body left right = > if left > right > then None > else > inl mid = (left + right) / 2 > inl item = index arr mid > if item = target > then Some mid > elif item < target > then loop (mid + 1) right > else loop left (mid - 1) > and inl loop left right = > if var_is right |> not > then body left right > else > inl left = dyn left > join body left right > loop left right > > inl binary_search_semi_open_2 arr target left right = > let rec body left right = > if left >= right > then None > else > inl mid = (left + right) / 2 > inl item = index arr mid > if item = target > then Some mid > elif item < target > then loop (mid + 1) right > else loop left mid > and inl loop left right = body left right > loop left right > > inl binary_search_closed_2 arr target left right = > let rec body left right = > if left > right > then None > else > inl mid = (left + right) / 2 > inl item = index arr mid > if item = target > then Some mid > elif item < target > then loop (mid + 1) right > else loop left (mid - 1) > and inl loop left right = body left right > loop left right > > inl get_solutions () = > [[ > "semi_open_1", > fun (arr, (target, len)) => > binary_search_semi_open_1 arr target 0 len > > "closed_1", > fun (arr, (target, len)) => > binary_search_closed_1 arr target 0 (len - 1) > > "semi_open_2", > fun (arr, (target, len)) => > binary_search_semi_open_2 arr target 0 len > > "closed_2", > fun (arr, (target, len)) => > binary_search_closed_2 arr target 0 (len - 1) > ]] > > inl rec binary_search_tests () = > inl arr_with_len target len arr = > arr, (target, (len |> optionm'.default_with fun () => length arr)) > > inl test_cases = [[ > (a ;[[ 1i32; 3; 4; 6; 8; 9; 11 ]] |> arr_with_len 6 None), (Some 3i32) > (a ;[[ 1i32; 3; 4; 6; 8; 9; 11 ]] |> arr_with_len 1 None), (Some 0i32) > (a ;[[ 1i32; 3; 4; 6; 8; 9; 11 ]] |> arr_with_len 11 None), (Some 6i32) > (a ;[[ 1i32; 3; 4; 6; 8; 9; 11 ]] |> arr_with_len 12 None), None > ((am'.init_series 1i32 1000 1 |> fun x => a x : _ int _) |> arr_with_len > 60 None), (Some 59) > > (a ;[[ 1i32; 3; 4; 6; 8; 9; 11 ]] |> arr_with_len 6 (Some 7)), (Some > 3i32) > (a ;[[ 1i32; 3; 4; 6; 8; 9; 11 ]] |> arr_with_len 1 (Some 7)), (Some > 0i32) > (a ;[[ 1i32; 3; 4; 6; 8; 9; 11 ]] |> arr_with_len 11 (Some 7)), (Some > 6i32) > (a ;[[ 1i32; 3; 4; 6; 8; 9; 11 ]] |> arr_with_len 12 (Some 7)), None > ((am'.init_series 1i32 1000 1 |> fun x => a x : _ int _) |> arr_with_len > 60 (Some 100)), (Some 59) > ]] > > inl solutions = get_solutions () > > // inl is_fast () = true > > inl count = > if is_fast () > then 1000i32 > else 10000000i32 > > run_all (reflection.nameof { binary_search_tests }) count solutions > test_cases > |> sort_result_list > > > let main () = > binary_search_tests () > > ── [ 10.61s - stdout ] ───────────────────────────────────────────────────────── > │ > │ ``` > │ 00:00:00 v #1 benchmark.run_all / { test_name = > binary_search_tests; count = 10000000 } > │ > │ 00:00:00 v #2 benchmark.run / { input_str = struct ([|1; > 3; 4; 6; 8; 9; 11|], 6, 7) } > │ 00:00:00 v #3 benchmark.run / solutions.map / { i = 1; > test_name = semi_open_1; time = 252 } > │ 00:00:00 v #4 benchmark.run / solutions.map / { i = 2; > test_name = closed_1; time = 165 } > │ 00:00:00 v #5 benchmark.run / solutions.map / { i = 3; > test_name = semi_open_2; time = 161 } > │ 00:00:01 v #6 benchmark.run / solutions.map / { i = 4; > test_name = closed_2; time = 168 } > │ > │ 00:00:01 v #7 benchmark.run / { input_str = struct ([|1; > 3; 4; 6; 8; 9; 11|], 1, 7) } > │ 00:00:01 v #8 benchmark.run / solutions.map / { i = 1; > test_name = semi_open_1; time = 97 } > │ 00:00:01 v #9 benchmark.run / solutions.map / { i = 2; > test_name = closed_1; time = 101 } > │ 00:00:01 v #10 benchmark.run / solutions.map / { i = 3; > test_name = semi_open_2; time = 99 } > │ 00:00:02 v #11 benchmark.run / solutions.map / { i = 4; > test_name = closed_2; time = 102 } > │ > │ 00:00:02 v #12 benchmark.run / { input_str = struct > ([|1; 3; 4; 6; 8; 9; 11|], 11, 7) } > │ 00:00:02 v #13 benchmark.run / solutions.map / { i = 1; > test_name = semi_open_1; time = 85 } > │ 00:00:02 v #14 benchmark.run / solutions.map / { i = 2; > test_name = closed_1; time = 82 } > │ 00:00:02 v #15 benchmark.run / solutions.map / { i = 3; > test_name = semi_open_2; time = 85 } > │ 00:00:02 v #16 benchmark.run / solutions.map / { i = 4; > test_name = closed_2; time = 87 } > │ > │ 00:00:02 v #17 benchmark.run / { input_str = struct > ([|1; 3; 4; 6; 8; 9; 11|], 12, 7) } > │ 00:00:03 v #18 benchmark.run / solutions.map / { i = 1; > test_name = semi_open_1; time = 88 } > │ 00:00:03 v #19 benchmark.run / solutions.map / { i = 2; > test_name = closed_1; time = 88 } > │ 00:00:03 v #20 benchmark.run / solutions.map / { i = 3; > test_name = semi_open_2; time = 89 } > │ 00:00:03 v #21 benchmark.run / solutions.map / { i = 4; > test_name = closed_2; time = 90 } > │ > │ 00:00:03 v #22 benchmark.run / { input_str = struct > ([|1; 2; 3; 4...00; ...|], 60, 1000) } > │ 00:00:03 v #23 benchmark.run / solutions.map / { i = 1; > test_name = semi_open_1; time = 110 } > │ 00:00:04 v #24 benchmark.run / solutions.map / { i = 2; > test_name = closed_1; time = 134 } > │ 00:00:04 v #25 benchmark.run / solutions.map / { i = 3; > test_name = semi_open_2; time = 130 } > │ 00:00:04 v #26 benchmark.run / solutions.map / { i = 4; > test_name = closed_2; time = 141 } > │ > │ 00:00:04 v #27 benchmark.run / { input_str = struct > ([|1; 3; 4; 6; 8; 9; 11|], 6, 7) } > │ 00:00:04 v #28 benchmark.run / solutions.map / { i = 1; > test_name = semi_open_1; time = 88 } > │ 00:00:05 v #29 benchmark.run / solutions.map / { i = 2; > test_name = closed_1; time = 87 } > │ 00:00:05 v #30 benchmark.run / solutions.map / { i = 3; > test_name = semi_open_2; time = 87 } > │ 00:00:05 v #31 benchmark.run / solutions.map / { i = 4; > test_name = closed_2; time = 89 } > │ > │ 00:00:05 v #32 benchmark.run / { input_str = struct > ([|1; 3; 4; 6; 8; 9; 11|], 1, 7) } > │ 00:00:05 v #33 benchmark.run / solutions.map / { i = 1; > test_name = semi_open_1; time = 99 } > │ 00:00:05 v #34 benchmark.run / solutions.map / { i = 2; > test_name = closed_1; time = 84 } > │ 00:00:06 v #35 benchmark.run / solutions.map / { i = 3; > test_name = semi_open_2; time = 89 } > │ 00:00:06 v #36 benchmark.run / solutions.map / { i = 4; > test_name = closed_2; time = 87 } > │ > │ 00:00:06 v #37 benchmark.run / { input_str = struct > ([|1; 3; 4; 6; 8; 9; 11|], 11, 7) } > │ 00:00:06 v #38 benchmark.run / solutions.map / { i = 1; > test_name = semi_open_1; time = 85 } > │ 00:00:06 v #39 benchmark.run / solutions.map / { i = 2; > test_name = closed_1; time = 85 } > │ 00:00:06 v #40 benchmark.run / solutions.map / { i = 3; > test_name = semi_open_2; time = 91 } > │ 00:00:07 v #41 benchmark.run / solutions.map / { i = 4; > test_name = closed_2; time = 107 } > │ > │ 00:00:07 v #42 benchmark.run / { input_str = struct > ([|1; 3; 4; 6; 8; 9; 11|], 12, 7) } > │ 00:00:07 v #43 benchmark.run / solutions.map / { i = 1; > test_name = semi_open_1; time = 86 } > │ 00:00:07 v #44 benchmark.run / solutions.map / { i = 2; > test_name = closed_1; time = 90 } > │ 00:00:07 v #45 benchmark.run / solutions.map / { i = 3; > test_name = semi_open_2; time = 93 } > │ 00:00:08 v #46 benchmark.run / solutions.map / { i = 4; > test_name = closed_2; time = 106 } > │ > │ 00:00:08 v #47 benchmark.run / { input_str = struct > ([|1; 2; 3; 4...100; ...|], 60, 100) } > │ 00:00:08 v #48 benchmark.run / solutions.map / { i = 1; > test_name = semi_open_1; time = 125 } > │ 00:00:08 v #49 benchmark.run / solutions.map / { i = 2; > test_name = closed_1; time = 125 } > │ 00:00:08 v #50 benchmark.run / solutions.map / { i = 3; > test_name = semi_open_2; time = 119 } > │ 00:00:09 v #51 benchmark.run / solutions.map / { i = 4; > test_name = closed_2; time = 123 } > │ ``` > │ input | expected | result | > best > │ --- | --- | --- | > --- > │ struct ([1; 3; 4; 6; 8; 9; 11], 6, 7) | US7_0 3 | US7_0 3 | > 3, 161 > │ struct ([1; 3; 4; 6; 8; 9; 11], 1, 7) | US7_0 0 | US7_0 0 | > 1, 97 > │ struct ([1; 3; 4; 6; 8; 9; 11], 11, 7) | US7_0 6 | US7_0 6 | > 2, 82 > │ struct ([1; 3; 4; 6; 8; 9; 11], 12, 7) | US7_1 | US7_1 | > 1, 88 > │ struct ([1; 2; 3; 4...00; ...], 60, 1000) | US7_0 59 | US7_0 59 | > 1, 110 > │ struct ([1; 3; 4; 6; 8; 9; 11], 6, 7) | US7_0 3 | US7_0 3 | > 2, 87 > │ struct ([1; 3; 4; 6; 8; 9; 11], 1, 7) | US7_0 0 | US7_0 0 | > 2, 84 > │ struct ([1; 3; 4; 6; 8; 9; 11], 11, 7) | US7_0 6 | US7_0 6 | > 1, 85 > │ struct ([1; 3; 4; 6; 8; 9; 11], 12, 7) | US7_1 | US7_1 | > 1, 86 > │ struct ([1; 2; 3; 4...100; ...], 60, 100) | US7_0 59 | US7_0 59 | > 3, 119 > │ ``` > │ 00:00:09 v #52 benchmark.sort_result_list / > averages.iter / { i = 2; avg = 104 } > │ 00:00:09 v #53 benchmark.sort_result_list / > averages.iter / { i = 3; avg = 104 } > │ 00:00:09 v #54 benchmark.sort_result_list / > averages.iter / { i = 4; avg = 110 } > │ 00:00:09 v #55 benchmark.sort_result_list / > averages.iter / { i = 1; avg = 111 } > │ ``` > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## returnLettersWithOddCountTests > > ── markdown ──────────────────────────────────────────────────────────────────── > │ Test: ReturnLettersWithOddCount > │ > │ Solution: 1 > │ Test case 1. A. Time: 645L > │ > │ Solution: 2 > │ Test case 1. A. Time: 663L > │ > │ Solution: 3 > │ Test case 1. A. Time: 680L > │ > │ Solution: 9 > │ Test case 1. A. Time: 730L > │ > │ Solution: 10 > │ Test case 1. A. Time: 815L > │ > │ Input | Expected | Result | Best > │ --- | --- | --- | --- > │ 1 | a | a | (1, 645) > │ 2 | ba | ba | (1, 663) > │ 3 | aaa | aaa | (1, 680) > │ 9 | aaaaaaaaa | aaaaaaaaa | (1, 730) > │ 10 | baaaaaaaaa | baaaaaaaaa | (1, 815) > │ > │ Averages > │ Test case 1. Average Time: 706L > │ > │ Ranking > │ Test case 1. Average Time: 706L > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let solutions = [[ > "A", > fun n -> > let mutable _builder = StringBuilder (new string('a', n)) > if n % 2 = 0 then > _builder.[[0]] <- 'b' > > _builder.ToString () > ]] > let testCases = seq { > 1, "a" > 2, "ba" > 3, "aaa" > 9, "aaaaaaaaa" > 10, "baaaaaaaaa" > } > let rec returnLettersWithOddCountTests = > runAll (nameof returnLettersWithOddCountTests) _count solutions testCases > returnLettersWithOddCountTests > |> sortResultList > > ── [ 1.63s - stdout ] ────────────────────────────────────────────────────────── > │ > │ > │ Test: returnLettersWithOddCountTests > │ > │ Solution: 1 > │ Test case 1. A. Time: 123L > │ > │ Solution: 2 > │ Test case 1. A. Time: 120L > │ > │ Solution: 3 > │ Test case 1. A. Time: 143L > │ > │ Solution: 9 > │ Test case 1. A. Time: 148L > │ > │ Solution: 10 > │ Test case 1. A. Time: 161L > │ > │ Input | Expected | Result | Best > │ --- | --- | --- | --- > │ 1 | a | a | (1, 123) > │ 2 | ba | ba | (1, 120) > │ 3 | aaa | aaa | (1, 143) > │ 9 | aaaaaaaaa | aaaaaaaaa | (1, 148) > │ 10 | baaaaaaaaa | baaaaaaaaa | (1, 161) > │ > │ Average Ranking > │ Test case 1. Average Time: 139L > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## hasAnyPairCloseToEachotherTests > > ── markdown ──────────────────────────────────────────────────────────────────── > │ Test: HasAnyPairCloseToEachother > │ > │ Solution: 0 > │ Test case 1. A. Time: 137L > │ > │ Solution: 1,2 > │ Test case 1. A. Time: 186L > │ > │ Solution: 3,5 > │ Test case 1. A. Time: 206L > │ > │ Solution: 3,4,6 > │ Test case 1. A. Time: 149L > │ > │ Solution: 2,4,6 > │ Test case 1. A. Time: 150L > │ > │ Input | Expected | Result | Best > │ --- | --- | --- | --- > │ 0 | False | False | (1, 137) > │ 1,2 | True | True | (1, 186) > │ 3,5 | False | False | (1, 206) > │ 3,4,6 | True | True | (1, 149) > │ 2,4,6 | False | False | (1, 150) > │ > │ Averages > │ Test case 1. Average Time: 165L > │ > │ Ranking > │ Test case 1. Average Time: 165L > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let solutions = [[ > "A", > fun (a: int[[]]) -> > let indices = System.Linq.Enumerable.Range(0, a.Length) |> > System.Linq.Enumerable.ToArray > System.Array.Sort (a, indices) > > indices > |> Array.take (a.Length - 1) > |> Array.exists (fun i -> a.[[i + 1]] - a.[[i]] = 1) > ]] > let testCases = seq { > [[| 0 |]], false > [[| 1; 2 |]], true > [[| 3; 5 |]], false > [[| 3; 4; 6 |]], true > [[| 2; 4; 6 |]], false > } > let rec hasAnyPairCloseToEachotherTests = > runAll (nameof hasAnyPairCloseToEachotherTests) _count solutions testCases > hasAnyPairCloseToEachotherTests > |> sortResultList > > ── [ 1.30s - stdout ] ────────────────────────────────────────────────────────── > │ > │ > │ Test: hasAnyPairCloseToEachotherTests > │ > │ Solution: 0 > │ Test case 1. A. Time: 149L > │ > │ Solution: 1,2 > │ Test case 1. A. Time: 74L > │ > │ Solution: 3,5 > │ Test case 1. A. Time: 54L > │ > │ Solution: 3,4,6 > │ Test case 1. A. Time: 63L > │ > │ Solution: 2,4,6 > │ Test case 1. A. Time: 65L > │ > │ Input | Expected | Result | Best > │ --- | --- | --- | --- > │ 0 | False | False | (1, 149) > │ 1,2 | True | True | (1, 74) > │ 3,5 | False | False | (1, 54) > │ 3,4,6 | True | True | (1, 63) > │ 2,4,6 | False | False | (1, 65) > │ > │ Average Ranking > │ Test case 1. Average Time: 81L > │ 00:02:31 v #3 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 85633 } 00:02:31 d #4 runtime.execute_with_options / { file_name = jupyter; arguments = ["nbconvert", "/home/runner/work/polyglot/polyglot/apps/perf/Perf.dib.ipynb", "--to", "html", "--HTMLExporter.theme=dark"]; options = { command = jupyter nbconvert "/home/runner/work/polyglot/polyglot/apps/perf/Perf.dib.ipynb" --to html --HTMLExporter.theme=dark; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:02:32 v #5 ! [NbConvertApp] Converting notebook /home/runner/work/polyglot/polyglot/apps/perf/Perf.dib.ipynb to html 00:02:32 v #6 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbformat/__init__.py:96: MissingIDFieldWarning: Cell is missing an id field, this will become a hard error in future nbformat versions. You may want to use `normalize()` on your notebooks before validations (available since nbformat 5.1.4). Previous versions of nbformat are fixing this issue transparently, and will stop doing so in the future. 00:02:32 v #7 ! validate(nb) 00:02:32 v #8 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbconvert/filters/highlight.py:71: UserWarning: IPython3 lexer unavailable, falling back on Python 3 00:02:32 v #9 ! return _pygments_highlight( 00:02:33 v #10 ! [NbConvertApp] Writing 457994 bytes to /home/runner/work/polyglot/polyglot/apps/perf/Perf.dib.html 00:02:33 v #11 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 890 } 00:02:33 d #12 spiral.run / dib / jupyter nbconvert / { exit_code = 0; jupyter_result_length = 890 } 00:02:33 d #13 runtime.execute_with_options / { file_name = pwsh; arguments = ["-c", "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/perf/Perf.dib.html'; (Get-Content $path -Raw) -replace '(id=\\\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"]; options = { command = pwsh -c "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/perf/Perf.dib.html'; (Get-Content $path -Raw) -replace '(id=\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:02:33 v #14 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 0 } 00:02:33 d #15 spiral.run / dib / html cell ids / { exit_code = 0; pwsh_replace_html_result_length = 0 } 00:02:33 d #16 spiral.run / dib / { exit_code = 0; result_length = 86582 } 00:00:00 d #1 writeDibCode / output: Fs / path: Perf.dib 00:00:00 d #2 parseDibCode / output: Fs / file: Perf.dib
In [ ]:
{ pwsh ../apps/dir-tree-html/build.ps1 } | Invoke-Block
00:00:00 d #1 spiral.main / { args = Array(MutCell(["dib", "--path", "DirTreeHtml.dib"])) } 00:00:00 d #2 runtime.execute_with_options / { file_name = dotnet; arguments = ["repl", "--exit-after-run", "--run", "/home/runner/work/polyglot/polyglot/apps/dir-tree-html/DirTreeHtml.dib", "--output-path", "/home/runner/work/polyglot/polyglot/apps/dir-tree-html/DirTreeHtml.dib.ipynb"]; options = { command = dotnet repl --exit-after-run --run "/home/runner/work/polyglot/polyglot/apps/dir-tree-html/DirTreeHtml.dib" --output-path "/home/runner/work/polyglot/polyglot/apps/dir-tree-html/DirTreeHtml.dib.ipynb"; cancellation_token = None; environment_variables = Array(MutCell([("TRACE_LEVEL", "Verbose"), ("AUTOMATION", "True")])); on_line = None; stdin = None; trace = false; working_directory = None } } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ # DirTreeHtml (Polyglot) > > ── fsharp ────────────────────────────────────────────────────────────────────── > #r > @"../../../../../../../.nuget/packages/fsharp.control.asyncseq/3.2.1/lib/netstan > dard2.1/FSharp.Control.AsyncSeq.dll" > #r > @"../../../../../../../.nuget/packages/system.reactive/6.0.1-preview.1/lib/net6. > 0/System.Reactive.dll" > #r > @"../../../../../../../.nuget/packages/system.reactive.linq/6.0.1-preview.1/lib/ > netstandard2.0/System.Reactive.Linq.dll" > #r > @"../../../../../../../.nuget/packages/argu/6.2.4/lib/netstandard2.0/Argu.dll" > #r > @"../../../../../../../.nuget/packages/falco.markup/1.1.1/lib/netstandard2.0/Fal > co.Markup.dll" > > ── fsharp ────────────────────────────────────────────────────────────────────── > #if !INTERACTIVE > open Lib > #endif > > ── fsharp ────────────────────────────────────────────────────────────────────── > open SpiralFileSystem.Operators > open Falco.Markup > > ── fsharp ────────────────────────────────────────────────────────────────────── > type FileSystemNode = > | File of string * string * int64 > | Folder of string * string * FileSystemNode list > | Root of FileSystemNode list > > let rec scanDirectory isRoot (basePath : string) (path : string) = > let relativePath = > path > |> SpiralSm.replace basePath "" > |> SpiralSm.replace "\\" "/" > |> SpiralSm.replace "//" "/" > |> SpiralSm.trim_start [[| '/' |]] > > let directories = > path > |> System.IO.Directory.GetDirectories > |> Array.toList > |> List.sort > |> List.map (scanDirectory false basePath) > let files = > path > |> System.IO.Directory.GetFiles > |> Array.toList > |> List.sort > |> List.map (fun f -> File (System.IO.Path.GetFileName f, relativePath, > System.IO.FileInfo(f).Length)) > > let children = directories @ files > if isRoot > then Root children > else Folder (path |> System.IO.Path.GetFileName, relativePath, children) > > let rec generateHtml fsNode = > let sizeLabel size = > match float size with > | size when size > 1024.0 * 1024.0 -> $"%.2f{size / 1024.0 / 1024.0} MB" > | size when size > 1024.0 -> $"%.2f{size / 1024.0} KB" > | size -> $"%.2f{size} B" > match fsNode with > | File (fileName, relativePath, size) -> > Elem.div [[]] [[ > Text.raw "📄 " > Elem.a [[ > Attr.href $"""{relativePath}{if relativePath = "" then "" else > "/"}{fileName}""" > ]] [[ > Text.raw fileName > ]] > Elem.span [[]] [[ > Text.raw $" ({size |> sizeLabel})" > ]] > ]] > | Folder (folderName, relativePath, children) -> > let size = > let rec loop children = > children > |> List.sumBy (function > | File (_, _, size) -> size > | Folder (_, _, children) > | Root children -> loop children > ) > loop children > Elem.details [[ > Attr.open' "true" > ]] [[ > Elem.summary [[]] [[ > Text.raw "📂 " > Elem.a [[ > Attr.href relativePath > ]] [[ > Text.raw folderName > ]] > Elem.span [[]] [[ > Text.raw $" ({size |> sizeLabel})" > ]] > ]] > Elem.div [[]] [[ > yield! children |> List.map generateHtml > ]] > ]] > | Root children -> > Elem.div [[]] [[ > yield! children |> List.map generateHtml > ]] > > let generateHtmlForFileSystem root = > $"""<!DOCTYPE html> > <html lang="en"> > <head> > <meta charset="UTF-8"> > <style> > body {{ > background-color: #222; > color: #ccc; > }} > a {{ > color: #777; > font-size: 15px; > }} > span {{ > font-size: 11px; > }} > div > div {{ > padding-left: 10px; > }} > details > div {{ > padding-left: 19px; > }} > </style> > </head> > <body> > {root |> generateHtml |> renderNode} > </body> > </html> > """ > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let expected = """<!DOCTYPE html> > <html lang="en"> > <head> > <meta charset="UTF-8"> > <style> > body { > background-color: #222; > color: #ccc; > } > a { > color: #777; > font-size: 15px; > } > span { > font-size: 11px; > } > div > div { > padding-left: 10px; > } > details > div { > padding-left: 19px; > } > </style> > </head> > <body> > <div><details open="true"><summary>📂 <a href="_.root">_.root</a><span> > (10.00 B)</span></summary><div><details open="true"><summary>📂 <a > href="_.root/3">3</a><span> (6.00 B)</span></summary><div><details > open="true"><summary>📂 <a href="_.root/3/2">2</a><span> (3.00 > B)</span></summary><div><details open="true"><summary>📂 <a > href="_.root/3/2/1">1</a><span> (1.00 B)</span></summary><div><div>📄 <a > href="_.root/3/2/1/file.txt">file.txt</a><span> (1.00 > B)</span></div></div></details><div>📄 <a > href="_.root/3/2/file.txt">file.txt</a><span> (2.00 > B)</span></div></div></details><div>📄 <a > href="_.root/3/file.txt">file.txt</a><span> (3.00 > B)</span></div></div></details><div>📄 <a > href="_.root/file.txt">file.txt</a><span> (4.00 > B)</span></div></div></details></div> > </body> > </html> > """ > > let struct (tempFolder, disposable) = expected |> SpiralCrypto.hash_text |> > SpiralFileSystem.create_temp_dir' > let rec loop d n = async { > if n >= 0 then > tempFolder </> d |> System.IO.Directory.CreateDirectory |> ignore > do! > n > |> string > |> String.replicate (n + 1) > |> SpiralFileSystem.write_all_text_async (tempFolder </> d </> > $"file.txt") > do! loop $"{d}/{n}" (n - 1) > } > loop "_.root" 3 > |> Async.RunSynchronously > > let html = > scanDirectory true tempFolder tempFolder > |> generateHtmlForFileSystem > > html > |> _assertEqual expected > > disposable.Dispose () > > html |> Microsoft.DotNet.Interactive.Formatting.Html.ToHtmlContent > > ── [ 119.51ms - return value ] ───────────────────────────────────────────────── > │ <!DOCTYPE html> > │ <html lang="en"> > │ <head> > │ <meta charset="UTF-8"> > │ <style> > │ body { > │ background-color: #222; > │ color: #ccc; > │ } > │ a { > │ color: #777; > │ font-size: 15px; > │ } > │ span { > │ font-size: 11px; > │ } > │ div > div { > │ padding-left: 10px; > │ } > │ details > div { > │ padding-left: 19px; > │ } > │ </style> > │ </head> > │ <body> > │ <div><details open="true"><summary>📂 <a > href="_.root">_.root</a><span> (10.00 B)</span></summary><div><details > open="true"><summary>📂 <a href="_.root/3">3</a><span> (6.00 > B)</span></summary><div><details open="true"><summary>📂 <a > href="_.root/3/2">2</a><span> (3.00 B)</span></summary><div><details > open="true"><summary>📂 <a href="_.root/3/2/1">1</a><span> (1.00 > B)</span></summary><div><div>📄 <a > href="_.root/3/2/1/file.txt">file.txt</a><span> (1.00 > B)</span></div></div></details><div>📄 <a > href="_.root/3/2/file.txt">file.txt</a><span> (2.00 > B)</span></div></div></details><div>📄 <a > href="_.root/3/file.txt">file.txt</a><span> (3.00 > B)</span></div></div></details><div>📄 <a > href="_.root/file.txt">file.txt</a><span> (4.00 > B)</span></div></div></details></div> > │ </body> > │ </html> > │ > > ── [ 123.02ms - stdout ] ─────────────────────────────────────────────────────── > │ "<!DOCTYPE html> > │ <html lang="en"> > │ <head> > │ <meta charset="UTF-8"> > │ <style> > │ body { > │ background-color: #222; > │ color: #ccc; > │ } > │ a { > │ color: #777; > │ font-size: 15px; > │ } > │ span { > │ font-size: 11px; > │ } > │ div > div { > │ padding-left: 10px; > │ } > │ details > div { > │ padding-left: 19px; > │ } > │ </style> > │ </head> > │ <body> > │ <div><details open="true"><summary>📂 <a > href="_.root">_.root</a><span> (10.00 B)</span></summary><div><details > open="true"><summary>📂 <a href="_.root/3">3</a><span> (6.00 > B)</span></summary><div><details open="true"><summary>📂 <a > href="_.root/3/2">2</a><span> (3.00 B)</span></summary><div><details > open="true"><summary>📂 <a href="_.root/3/2/1">1</a><span> (1.00 > B)</span></summary><div><div>📄 <a > href="_.root/3/2/1/file.txt">file.txt</a><span> (1.00 > B)</span></div></div></details><div>📄 <a > href="_.root/3/2/file.txt">file.txt</a><span> (2.00 > B)</span></div></div></details><div>📄 <a > href="_.root/3/file.txt">file.txt</a><span> (3.00 > B)</span></div></div></details><div>📄 <a > href="_.root/file.txt">file.txt</a><span> (4.00 > B)</span></div></div></details></div> > │ </body> > │ </html> > │ " > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## Arguments > > ── fsharp ────────────────────────────────────────────────────────────────────── > [[<RequireQualifiedAccess>]] > type Arguments = > | [[<Argu.ArguAttributes.ExactlyOnce>]] Dir of string > | [[<Argu.ArguAttributes.ExactlyOnce>]] Html of string > > interface Argu.IArgParserTemplate with > member s.Usage = > match s with > | Dir _ -> nameof Dir > | Html _ -> nameof Html > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > Argu.ArgumentParser.Create<Arguments>().PrintUsage () > > ── [ 66.80ms - return value ] ────────────────────────────────────────────────── > │ "USAGE: dotnet-repl [--help] --dir <string> --html <string> > │ > │ OPTIONS: > │ > │ --dir <string> Dir > │ --html <string> Html > │ --help display this list of options. > │ " > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## main > > ── fsharp ────────────────────────────────────────────────────────────────────── > let main args = > let argsMap = args |> Runtime.parseArgsMap<Arguments> > > let dir = > match argsMap.[[nameof Arguments.Dir]] with > | [[ Arguments.Dir dir ]] -> Some dir > | _ -> None > |> Option.get > > let htmlPath = > match argsMap.[[nameof Arguments.Html]] with > | [[ Arguments.Html html ]] -> Some html > | _ -> None > |> Option.get > > let fileSystem = scanDirectory true dir dir > let html = generateHtmlForFileSystem fileSystem > > html |> SpiralFileSystem.write_all_text_async htmlPath > |> Async.runWithTimeout 30000 > |> function > | Some () -> 0 > | None -> 1 > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let args = > System.Environment.GetEnvironmentVariable "ARGS" > |> SpiralRuntime.split_args > |> Result.toArray > |> Array.collect id > > match args with > | [[||]] -> 0 > | args -> if main args = 0 then 0 else failwith "main failed" > > ── [ 63.48ms - return value ] ────────────────────────────────────────────────── > │ <div class="dni-plaintext"><pre>0 > │ </pre></div><style> > │ .dni-code-hint { > │ font-style: italic; > │ overflow: hidden; > │ white-space: nowrap; > │ } > │ .dni-treeview { > │ white-space: nowrap; > │ } > │ .dni-treeview td { > │ vertical-align: top; > │ text-align: start; > │ } > │ details.dni-treeview { > │ padding-left: 1em; > │ } > │ table td { > │ text-align: start; > │ } > │ table tr { > │ vertical-align: top; > │ margin: 0em 0px; > │ } > │ table tr td pre > │ { > │ vertical-align: top !important; > │ margin: 0em 0px !important; > │ } > │ table th { > │ text-align: start; > │ } > │ </style> 00:00:16 v #3 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 13920 } 00:00:16 d #4 runtime.execute_with_options / { file_name = jupyter; arguments = ["nbconvert", "/home/runner/work/polyglot/polyglot/apps/dir-tree-html/DirTreeHtml.dib.ipynb", "--to", "html", "--HTMLExporter.theme=dark"]; options = { command = jupyter nbconvert "/home/runner/work/polyglot/polyglot/apps/dir-tree-html/DirTreeHtml.dib.ipynb" --to html --HTMLExporter.theme=dark; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:17 v #5 ! [NbConvertApp] Converting notebook /home/runner/work/polyglot/polyglot/apps/dir-tree-html/DirTreeHtml.dib.ipynb to html 00:00:17 v #6 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbformat/__init__.py:96: MissingIDFieldWarning: Cell is missing an id field, this will become a hard error in future nbformat versions. You may want to use `normalize()` on your notebooks before validations (available since nbformat 5.1.4). Previous versions of nbformat are fixing this issue transparently, and will stop doing so in the future. 00:00:17 v #7 ! validate(nb) 00:00:17 v #8 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbconvert/filters/highlight.py:71: UserWarning: IPython3 lexer unavailable, falling back on Python 3 00:00:17 v #9 ! return _pygments_highlight( 00:00:18 v #10 ! [NbConvertApp] Writing 310055 bytes to /home/runner/work/polyglot/polyglot/apps/dir-tree-html/DirTreeHtml.dib.html 00:00:18 v #11 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 922 } 00:00:18 d #12 spiral.run / dib / jupyter nbconvert / { exit_code = 0; jupyter_result_length = 922 } 00:00:18 d #13 runtime.execute_with_options / { file_name = pwsh; arguments = ["-c", "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/dir-tree-html/DirTreeHtml.dib.html'; (Get-Content $path -Raw) -replace '(id=\\\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"]; options = { command = pwsh -c "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/dir-tree-html/DirTreeHtml.dib.html'; (Get-Content $path -Raw) -replace '(id=\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:18 v #14 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 0 } 00:00:18 d #15 spiral.run / dib / html cell ids / { exit_code = 0; pwsh_replace_html_result_length = 0 } 00:00:18 d #16 spiral.run / dib / { exit_code = 0; result_length = 14901 } 00:00:00 d #1 writeDibCode / output: Fs / path: DirTreeHtml.dib 00:00:00 d #2 parseDibCode / output: Fs / file: DirTreeHtml.dib 00:00:00 d #1 persistCodeProject / packages: [Argu; Falco.Markup; FSharp.Control.AsyncSeq; ... ] / modules: [deps/spiral/lib/spiral/common.fsx; deps/spiral/lib/spiral/sm.fsx; deps/spiral/lib/spiral/crypto.fsx; ... ] / name: DirTreeHtml / hash: / code.Length: 4638 00:00:00 d #2 buildProject / fullPath: /home/runner/work/polyglot/polyglot/target/Builder/DirTreeHtml/DirTreeHtml.fsproj 00:00:00 d #1 runtime.execute_with_options_async / { file_name = dotnet; arguments = US5_0 "publish "/home/runner/work/polyglot/polyglot/target/Builder/DirTreeHtml/DirTreeHtml.fsproj" --configuration Release --output "/home/runner/work/polyglot/polyglot/apps/dir-tree-html/dist" --runtime linux-x64"; options = { command = dotnet publish "/home/runner/work/polyglot/polyglot/target/Builder/DirTreeHtml/DirTreeHtml.fsproj" --configuration Release --output "/home/runner/work/polyglot/polyglot/apps/dir-tree-html/dist" --runtime linux-x64; cancellation_token = None; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot/target/Builder/DirTreeHtml" } } 00:00:00 v #2 > Determining projects to restore... 00:00:01 v #3 > Paket version 9.0.2+a9b12aaeb8d8d5e47a415a3442b7920ed04e98e0 00:00:01 v #4 > The last full restore is still up to date. Nothing left to do. 00:00:01 v #5 > Total time taken: 0 milliseconds 00:00:01 v #6 > Paket version 9.0.2+a9b12aaeb8d8d5e47a415a3442b7920ed04e98e0 00:00:01 v #7 > Restoring /home/runner/work/polyglot/polyglot/target/Builder/DirTreeHtml/DirTreeHtml.fsproj 00:00:01 v #8 > Starting restore process. 00:00:01 v #9 > Total time taken: 0 milliseconds 00:00:02 v #10 > Restored /home/runner/work/polyglot/polyglot/target/Builder/DirTreeHtml/DirTreeHtml.fsproj (in 265 ms). 00:00:13 v #11 > DirTreeHtml -> /home/runner/work/polyglot/polyglot/target/Builder/DirTreeHtml/bin/Release/net9.0/linux-x64/DirTreeHtml.dll 00:00:13 v #12 > DirTreeHtml -> /home/runner/work/polyglot/polyglot/apps/dir-tree-html/dist 00:00:13 d #13 runtime.execute_with_options_async / { exit_code = 0; output_length = 728; options = { command = dotnet publish "/home/runner/work/polyglot/polyglot/target/Builder/DirTreeHtml/DirTreeHtml.fsproj" --configuration Release --output "/home/runner/work/polyglot/polyglot/apps/dir-tree-html/dist" --runtime linux-x64; cancellation_token = None; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot/target/Builder/DirTreeHtml" } } polyglot/apps/dir-tree-html/build.ps1 / $env:CI:'true'
In [ ]:
{ pwsh ../apps/scheduler/build.ps1 } | Invoke-Block
00:00:00 d #1 spiral.main / { args = Array(MutCell(["dib", "--path", "Tasks.dib", "--retries", "3"])) } 00:00:00 d #2 runtime.execute_with_options / { file_name = dotnet; arguments = ["repl", "--exit-after-run", "--run", "/home/runner/work/polyglot/polyglot/apps/scheduler/Tasks.dib", "--output-path", "/home/runner/work/polyglot/polyglot/apps/scheduler/Tasks.dib.ipynb"]; options = { command = dotnet repl --exit-after-run --run "/home/runner/work/polyglot/polyglot/apps/scheduler/Tasks.dib" --output-path "/home/runner/work/polyglot/polyglot/apps/scheduler/Tasks.dib.ipynb"; cancellation_token = None; environment_variables = Array(MutCell([("TRACE_LEVEL", "Verbose"), ("AUTOMATION", "True")])); on_line = None; stdin = None; trace = false; working_directory = None } } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## Tasks (Polyglot) > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > > open testing > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## task_name > > ── spiral ────────────────────────────────────────────────────────────────────── > nominal task_name = string > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## manual_scheduling > > ── spiral ────────────────────────────────────────────────────────────────────── > union manual_scheduling = > | WithSuggestion > | WithoutSuggestion > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## recurrency_offset > > ── spiral ────────────────────────────────────────────────────────────────────── > union recurrency_offset = > | Days : int > | Weeks : int > | Months : int > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## fixed_recurrency > > ── spiral ────────────────────────────────────────────────────────────────────── > union fixed_recurrency = > | Weekly : date_time.day_of_week > | Monthly : date_time.day > | Yearly : date_time.day * date_time.month > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## recurrency > > ── spiral ────────────────────────────────────────────────────────────────────── > union recurrency = > | Offset : recurrency_offset > | Fixed : list fixed_recurrency > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## scheduling > > ── spiral ────────────────────────────────────────────────────────────────────── > union scheduling = > | Manual : manual_scheduling > | Recurrent : recurrency > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## task > > ── spiral ────────────────────────────────────────────────────────────────────── > type task = > { > name : task_name > scheduling : scheduling > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## date > > ── spiral ────────────────────────────────────────────────────────────────────── > type date = > { > year : date_time.year > month : date_time.month > day : date_time.day > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## status > > ── spiral ────────────────────────────────────────────────────────────────────── > union status = > | Postponed : option () > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## event > > ── spiral ────────────────────────────────────────────────────────────────────── > type event = > { > date : date > status : status > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## task_template > > ── spiral ────────────────────────────────────────────────────────────────────── > type task_template = > { > task : task > events : list event > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## get_tasks (test) > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > > inl get_tasks () : list task_template = > [[ > { > task = > { > name = task_name "01" > scheduling = Manual WithSuggestion > } > events = [[]] > } > { > task = > { > name = task_name "02" > scheduling = Manual WithSuggestion > } > events = [[]] > } > { > task = > { > name = task_name "03" > scheduling = Manual WithSuggestion > } > events = [[]] > } > ]] > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! fsharp > ///! cuda > ///! rust > ///! typescript > ///! python > > get_tasks () > |> sm'.format_debug > |> _assert sm'.contains "01" > > ── [ 13.50s - return value ] ─────────────────────────────────────────────────── > │ .py output (Python): > │ { name = __assert; actual = 01; expected = UH2_1(v0='01', > v1=US1_0(v0=US0_0()), v2=UH1_0(), v3=UH2_1(v0='02', v1=US1_0(v0=US0_0()), > v2=UH1_0(), v3=UH2_1(v0='03', v1=US1_0(v0=US0_0()), v2=UH1_0(), v3=UH2_0()))) } > │ > │ .rs output: > │ { name = __assert; actual = 01; expected = UH2_1("01", > US1_0(US0_0), UH1_0, UH2_1("02", US1_0(US0_0), UH1_0, UH2_1("03", US1_0(US0_0), > UH1_0, UH2_0))) } > │ > │ .ts output: > │ { name = __assert; actual = 01; expected = UH2_1 (01, US1_0 > US0_0, UH1_0, UH2_1 (02, US1_0 US0_0, UH1_0, UH2_1 (03, US1_0 US0_0, UH1_0, > UH2_0))) } > │ > │ .py output: > │ { name = __assert; actual = 01; expected = UH2_1 ("01", US1_0 > US0_0, UH1_0, UH2_1 ("02", US1_0 US0_0, UH1_0, UH2_1 ("03", US1_0 US0_0, UH1_0, > UH2_0))) } > │ > │ > > ── [ 13.51s - stdout ] ───────────────────────────────────────────────────────── > │ .fsx output: > │ { name = __assert; actual = 01; expected = UH2_1 > │ ("01", US1_0 US0_0, UH1_0, > │ UH2_1 ("02", US1_0 US0_0, UH1_0, UH2_1 ("03", US1_0 US0_0, > UH1_0, UH2_0))) } > │ > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! fsharp > ///! cuda > ///! rust > ///! typescript > ///! python > > get_tasks () > |> listm'.try_item 0i32 > |> fun (Some task) => task.task.name > |> _assert_eq (task_name "01") > > ── [ 8.66s - return value ] ──────────────────────────────────────────────────── > │ .py output (Python): > │ { name = __assert_eq; actual = 01; expected = 01 } > │ > │ .rs output: > │ { name = __assert_eq; actual = "01"; expected = "01" } > │ > │ .ts output: > │ { name = __assert_eq; actual = 01; expected = 01 } > │ > │ .py output: > │ { name = __assert_eq; actual = 01; expected = 01 } > │ > │ > > ── [ 8.66s - stdout ] ────────────────────────────────────────────────────────── > │ .fsx output: > │ { name = __assert_eq; actual = "01"; expected = "01" } > │ > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! fsharp > ////! cuda > ////! typescript > ////! python > ///// print_code > > inl print padding cols = > ({ lines = [[]]; last_lines = [[]]; max_acc = 0i32 }, cols) > ||> listm.fold fun { last_lines max_acc } lines => > inl { count max } = > (lines, { count = 0i32; max = 0i32 }) > ||> listm.foldBack fun line { count max } => { > count = count + 1 > max = > inl len = line |> sm'.length > if len > max > then len > else max > } > inl { lines } = > (lines, { lines = [[]]; i = 0i32 }) > ||> listm.foldBack fun line { lines i } => { > lines = > inl last_line = > last_lines > |> listm'.try_item (count - i - 1) > |> optionm'.default_with fun () => > " " |> sm'.replicate max_acc > inl line = > if padding = 0 > then line > else > inl padding = " " |> sm'.replicate padding > $'$"{!line}{!padding}"' > inl line = line |> sm'.pad_right (max + padding) ' ' > $'$"{!last_line}{!line}"' :: lines > i = i + 1 > } > { > lines > last_lines = lines > max_acc = max_acc + max + padding > } > |> fun x => x.lines > |> listm'.box > |> seq.of_list' > |> sm'.concat "\n" > > inl col () = > [[ "Task" ]] > ++ ( > get_tasks () > |> listm.map fun task => > inl (task_name name) = task.task.name > name > ) > > inl cols () = > [[ > col () > col () > [[ "a"; "b"; "c"; "d"; "e" ]] > ]] > > inl main () = > cols () > |> print 1i32 > |> console.write_line > > ── [ 370.41ms - stdout ] ─────────────────────────────────────────────────────── > │ Task Task a > │ 01 01 b > │ 02 02 c > │ 03 03 d > │ e > │ 00:00:32 v #3 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 9834 } 00:00:32 d #4 runtime.execute_with_options / { file_name = jupyter; arguments = ["nbconvert", "/home/runner/work/polyglot/polyglot/apps/scheduler/Tasks.dib.ipynb", "--to", "html", "--HTMLExporter.theme=dark"]; options = { command = jupyter nbconvert "/home/runner/work/polyglot/polyglot/apps/scheduler/Tasks.dib.ipynb" --to html --HTMLExporter.theme=dark; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:33 v #5 ! [NbConvertApp] Converting notebook /home/runner/work/polyglot/polyglot/apps/scheduler/Tasks.dib.ipynb to html 00:00:33 v #6 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbformat/__init__.py:96: MissingIDFieldWarning: Cell is missing an id field, this will become a hard error in future nbformat versions. You may want to use `normalize()` on your notebooks before validations (available since nbformat 5.1.4). Previous versions of nbformat are fixing this issue transparently, and will stop doing so in the future. 00:00:33 v #7 ! validate(nb) 00:00:33 v #8 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbconvert/filters/highlight.py:71: UserWarning: IPython3 lexer unavailable, falling back on Python 3 00:00:33 v #9 ! return _pygments_highlight( 00:00:34 v #10 ! [NbConvertApp] Writing 304760 bytes to /home/runner/work/polyglot/polyglot/apps/scheduler/Tasks.dib.html 00:00:34 v #11 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 902 } 00:00:34 d #12 spiral.run / dib / jupyter nbconvert / { exit_code = 0; jupyter_result_length = 902 } 00:00:34 d #13 runtime.execute_with_options / { file_name = pwsh; arguments = ["-c", "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/scheduler/Tasks.dib.html'; (Get-Content $path -Raw) -replace '(id=\\\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"]; options = { command = pwsh -c "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/scheduler/Tasks.dib.html'; (Get-Content $path -Raw) -replace '(id=\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:34 v #14 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 0 } 00:00:34 d #15 spiral.run / dib / html cell ids / { exit_code = 0; pwsh_replace_html_result_length = 0 } 00:00:34 d #16 spiral.run / dib / { exit_code = 0; result_length = 10795 } 00:00:00 d #1 writeDibCode / output: Spi / path: Tasks.dib 00:00:00 d #2 parseDibCode / output: Spi / file: Tasks.dib
In [ ]:
{ pwsh ../apps/chat/build.ps1 } | Invoke-Block
00:00:00 d #1 spiral.main / { args = Array(MutCell(["dib", "--path", "chat_contract.dib", "--retries", "5"])) } 00:00:00 d #2 runtime.execute_with_options / { file_name = dotnet; arguments = ["repl", "--exit-after-run", "--run", "/home/runner/work/polyglot/polyglot/apps/chat/contract/chat_contract.dib", "--output-path", "/home/runner/work/polyglot/polyglot/apps/chat/contract/chat_contract.dib.ipynb"]; options = { command = dotnet repl --exit-after-run --run "/home/runner/work/polyglot/polyglot/apps/chat/contract/chat_contract.dib" --output-path "/home/runner/work/polyglot/polyglot/apps/chat/contract/chat_contract.dib.ipynb"; cancellation_token = None; environment_variables = Array(MutCell([("TRACE_LEVEL", "Verbose"), ("AUTOMATION", "True")])); on_line = None; stdin = None; trace = false; working_directory = None } } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ # chat_contract > > ── spiral ────────────────────────────────────────────────────────────────────── > open rust > open rust.rust_operators > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > > open testing > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## chat_contract > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### state > > ── spiral ────────────────────────────────────────────────────────────────────── > type state = > { > version : u32 > account_set : near.iterable_set near.account_id > alias_set : near.iterable_set sm'.std_string > account_map : near.lookup_map near.account_id sm'.std_string > alias_map : near.lookup_map sm'.std_string (mapm.hash_map > near.account_id (u64 * u32)) > } > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -c > > () > > ── [ 51.08s - return value ] ─────────────────────────────────────────────────── > │ Installed near-sandbox into > /home/runner/work/polyglot/spiral/workspace/target/release/build/near-sandbox-ut > ils-cdf556a7364ec456/out/.near/near-sandbox-1.40.0_7dd0b5993577f592be15eb102e5a3 > da37be66271/near-sandbox > │ > │ 00:00:02 i #2 near_workspaces.print_usd / { retry = 1; > total_gas_burnt_usd = +0.000808; total_gas_burnt = 1209301725971 } > │ 00:00:02 i #3 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:02 i #4 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000602; tokens_burnt_usd = +0.000602; > gas_burnt = 901219866631; tokens_burnt = 90121986663100000000 } > │ 00:00:02 w #5 spiral_wasm.run / Error error / { retry = > 1; error = "{ receipt_outcomes_len = 1; retry = 1; receipt_failures = [] }" } > │ > │ > │ > │ 00:00:05 i #8 near_workspaces.print_usd / { retry = 2; > total_gas_burnt_usd = +0.000808; total_gas_burnt = 1209301725971 } > │ 00:00:05 i #9 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:05 i #10 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000602; tokens_burnt_usd = +0.000602; > gas_burnt = 901219866631; tokens_burnt = 90121986663100000000 } > │ 00:00:05 w #11 spiral_wasm.run / Error error ...n / > Error error / { retry = 13; error = "{ receipt_outcomes_len = 1; retry = 13; > receipt_failures = [] }" } > │ > │ > │ > │ 00:00:30 i #80 near_workspaces.print_usd / { retry = > 14; total_gas_burnt_usd = +0.000808; total_gas_burnt = 1209301725971 } > │ 00:00:30 i #81 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:30 i #82 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000602; tokens_burnt_usd = +0.000602; > gas_burnt = 901219866631; tokens_burnt = 90121986663100000000 } > │ 00:00:30 w #83 spiral_wasm.run / Error error / { retry > = 14; error = "{ receipt_outcomes_len = 1; retry = 14; receipt_failures = [] }" > } > │ > │ > │ > │ 00:00:32 i #86 near_workspaces.print_usd / { retry = > 15; total_gas_burnt_usd = +0.000808; total_gas_burnt = 1209301725971 } > │ 00:00:32 i #87 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:32 i #88 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000602; tokens_burnt_usd = +0.000602; > gas_burnt = 901219866631; tokens_burnt = 90121986663100000000 } > │ 00:00:32 w #89 spiral_wasm.run / Error error / { retry > = 15; error = "{ receipt_outcomes_len = 1; retry = 15; receipt_failures = [] }" > } > │ > │ > │ > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -c > > trace Verbose (fun () => "") id > > ── [ 40.46s - return value ] ─────────────────────────────────────────────────── > │ > │ 00:00:02 i #2 near_workspaces.print_usd / { retry = 1; > total_gas_burnt_usd = +0.000870; total_gas_burnt = 1302038360925 } > │ 00:00:02 i #3 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:02 i #4 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000664; tokens_burnt_usd = +0.000664; > gas_burnt = 993956501585; tokens_burnt = 99395650158500000000 } > │ 00:00:02 w #5 spiral_wasm.run / Error error / { retry = > 1; error = "{ receipt_outcomes_len = 1; retry = 1; receipt_failures = [] }" } > │ > │ > │ > │ 00:00:04 i #8 near_workspaces.print_usd / { retry = 2; > total_gas_burnt_usd = +0.000870; total_gas_burnt = 1302038360925 } > │ 00:00:04 i #9 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:04 i #10 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000664; tokens_burnt_usd = +0.000664; > gas_burnt = 993956501585; tokens_burnt = 99395650158500000000 } > │ 00:00:04 w #11 spiral_wasm.run / Error error / { retry > = 2; error = "{ receipt_outcomes_len = 1; retry = 2; receipt_failures = [] }" } > │ > │ > │ > │ 00:00:06 i #14 near_workspaces.print_usd / { retry = 3; > total_gas_burnt_usd = +0.000870; total_gas_burnt = 13...n / Error error / { > retry = 13; error = "{ receipt_outcomes_len = 1; retry = 13; receipt_failures = > [] }" } > │ > │ > │ > │ 00:00:28 i #80 near_workspaces.print_usd / { retry = > 14; total_gas_burnt_usd = +0.000870; total_gas_burnt = 1302038360925 } > │ 00:00:28 i #81 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:28 i #82 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000664; tokens_burnt_usd = +0.000664; > gas_burnt = 993956501585; tokens_burnt = 99395650158500000000 } > │ 00:00:28 w #83 spiral_wasm.run / Error error / { retry > = 14; error = "{ receipt_outcomes_len = 1; retry = 14; receipt_failures = [] }" > } > │ > │ > │ > │ 00:00:30 i #86 near_workspaces.print_usd / { retry = > 15; total_gas_burnt_usd = +0.000870; total_gas_burnt = 1302038360925 } > │ 00:00:30 i #87 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:30 i #88 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000664; tokens_burnt_usd = +0.000664; > gas_burnt = 993956501585; tokens_burnt = 99395650158500000000 } > │ 00:00:30 w #89 spiral_wasm.run / Error error / { retry > = 15; error = "{ receipt_outcomes_len = 1; retry = 15; receipt_failures = [] }" > } > │ > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### new > > ── spiral ────────────────────────────────────────────────────────────────────── > inl new () : state = > { > version = 2 > account_set = "account_set" |> sm'.byte_slice |> near.new_iterable_set > alias_set = "alias_set" |> sm'.byte_slice |> near.new_iterable_set > account_map = "account_map" |> sm'.byte_slice |> near.new_lookup_map > alias_map = "alias_map" |> sm'.byte_slice |> near.new_lookup_map > } > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -c > > inl state = new () > trace Verbose (fun () => "chat_contract") fun () => { state = state |> > sm'.format_debug } > trace Verbose (fun () => "") id > > ── [ 41.30s - return value ] ─────────────────────────────────────────────────── > │ 00:00:00 v #1 chat_contract / { state = (2, IterableSet > { elements: Vector { len: 0, prefix: [97, 99, 99, 111, 117, 110, 116, 95, 115, > 101, 116, 118] }, index: LookupMap { prefix: [97, 99, 99, 111, 117, 110, 116, > 95, 115, 101, 116, 109] } }, IterableSet { elements: Vector { len: 0, prefix: > [97, 108, 105, 97, 115, 95, 115, 101, 116, 118] }, index: LookupMap { prefix: > [97, 108, 105, 97, 115, 95, 115, 101, 116, 109] } }, LookupMap { prefix: [97, > 99, 99, 111, 117, 110, 116, 95, 109, 97, 112] }, LookupMap { prefix: [97, 108, > 105, 97, 115, 95, 109, 97, 112] }) } > │ > │ 00:00:02 i #2 near_workspaces.print_usd / { retry = 1; > total_gas_burnt_usd = +0.001380; total_gas_burnt = 2066349812513 } > │ 00:00:02 i #3 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:02 i #4 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.001175; tokens_burnt_usd = +0.001175; > gas_burnt = 1758267953173; tokens_burnt = 175826795317300000000 } > │ 00:00:02 w #5 spiral_wasm.run / Error error / { retry = > 1; error = "{ receipt_outcomes_len = 1; retry = 1; receipt_failures = [] }" } > │ > │ > │ 00:00:00 v #1 chat_contract / { state = (2, IterableSet > { elements: Vector { len: 0, prefix: [97, 99, 99, 111, 117, 110, 116, 95, 115, > 101, 116, 118] }, index: LookupMap { prefix: [97, 99, 99, 111, 117, 110, 116, > 95, 115, 101,...d = +0.001175; gas_burnt = 1758267953173; tokens_burnt = > 175826795317300000000 } > │ 00:00:28 w #83 spiral_wasm.run / Error error / { retry > = 14; error = "{ receipt_outcomes_len = 1; retry = 14; receipt_failures = [] }" > } > │ > │ > │ 00:00:00 v #1 chat_contract / { state = (2, IterableSet > { elements: Vector { len: 0, prefix: [97, 99, 99, 111, 117, 110, 116, 95, 115, > 101, 116, 118] }, index: LookupMap { prefix: [97, 99, 99, 111, 117, 110, 116, > 95, 115, 101, 116, 109] } }, IterableSet { elements: Vector { len: 0, prefix: > [97, 108, 105, 97, 115, 95, 115, 101, 116, 118] }, index: LookupMap { prefix: > [97, 108, 105, 97, 115, 95, 115, 101, 116, 109] } }, LookupMap { prefix: [97, > 99, 99, 111, 117, 110, 116, 95, 109, 97, 112] }, LookupMap { prefix: [97, 108, > 105, 97, 115, 95, 109, 97, 112] }) } > │ > │ 00:00:30 i #86 near_workspaces.print_usd / { retry = > 15; total_gas_burnt_usd = +0.001380; total_gas_burnt = 2066349812513 } > │ 00:00:30 i #87 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:30 i #88 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.001175; tokens_burnt_usd = +0.001175; > gas_burnt = 1758267953173; tokens_burnt = 175826795317300000000 } > │ 00:00:30 w #89 spiral_wasm.run / Error error / { retry > = 15; error = "{ receipt_outcomes_len = 1; retry = 15; receipt_failures = [] }" > } > │ > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### is_valid_alias > > ── spiral ────────────────────────────────────────────────────────────────────── > inl is_valid_alias (alias : sm'.std_string) : bool = > inl alias' = alias |> sm'.from_std_string > inl alias_len = alias' |> sm'.length > > alias_len > 0i32 > && alias_len < 64 > && (alias' |> sm'.starts_with "-" |> not) > && (alias' |> sm'.ends_with "-" |> not) > && (alias' |> sm'.as_str |> sm'.chars |> iter.all (fun c => (c |> > sm'.char_is_alphanumeric) || c = '-')) > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -c > > "" > |> sm'.to_std_string > |> is_valid_alias > |> _assert_eq false > > ── [ 38.78s - return value ] ─────────────────────────────────────────────────── > │ > │ 00:00:02 i #2 near_workspaces.print_usd / { retry = 1; > total_gas_burnt_usd = +0.000863; total_gas_burnt = 1291863048629 } > │ 00:00:02 i #3 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:02 i #4 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000657; tokens_burnt_usd = +0.000657; > gas_burnt = 983781189289; tokens_burnt = 98378118928900000000 } > │ 00:00:02 w #5 spiral_wasm.run / Error error / { retry = > 1; error = "{ receipt_outcomes_len = 1; retry = 1; receipt_failures = [] }" } > │ > │ > │ > │ 00:00:04 i #8 near_workspaces.print_usd / { retry = 2; > total_gas_burnt_usd = +0.000863; total_gas_burnt = 1291863048629 } > │ 00:00:04 i #9 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:04 i #10 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000657; tokens_burnt_usd = +0.000657; > gas_burnt = 983781189289; tokens_burnt = 98378118928900000000 } > │ 00:00:04 w #11 spiral_wasm.run / Error error / { retry > = 2; error = "{ receipt_outcomes_len = 1; retry = 2; receipt_failures = [] }" } > │ > │ > │ > │ 00:00:06 i #14 near_workspaces.print_usd / { retry = 3; > total_gas_burnt_usd = +0.000863; total_gas_burnt = 12...n / Error error / { > retry = 13; error = "{ receipt_outcomes_len = 1; retry = 13; receipt_failures = > [] }" } > │ > │ > │ > │ 00:00:28 i #80 near_workspaces.print_usd / { retry = > 14; total_gas_burnt_usd = +0.000863; total_gas_burnt = 1291863048629 } > │ 00:00:28 i #81 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:28 i #82 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000657; tokens_burnt_usd = +0.000657; > gas_burnt = 983781189289; tokens_burnt = 98378118928900000000 } > │ 00:00:28 w #83 spiral_wasm.run / Error error / { retry > = 14; error = "{ receipt_outcomes_len = 1; retry = 14; receipt_failures = [] }" > } > │ > │ > │ > │ 00:00:30 i #86 near_workspaces.print_usd / { retry = > 15; total_gas_burnt_usd = +0.000863; total_gas_burnt = 1291863048629 } > │ 00:00:30 i #87 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:30 i #88 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000657; tokens_burnt_usd = +0.000657; > gas_burnt = 983781189289; tokens_burnt = 98378118928900000000 } > │ 00:00:30 w #89 spiral_wasm.run / Error error / { retry > = 15; error = "{ receipt_outcomes_len = 1; retry = 15; receipt_failures = [] }" > } > │ > │ > │ > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -c > > "a-" > |> sm'.to_std_string > |> is_valid_alias > |> _assert_eq false > > ── [ 38.98s - return value ] ─────────────────────────────────────────────────── > │ > │ 00:00:02 i #2 near_workspaces.print_usd / { retry = 1; > total_gas_burnt_usd = +0.000864; total_gas_burnt = 1293913287164 } > │ 00:00:02 i #3 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:02 i #4 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000659; tokens_burnt_usd = +0.000659; > gas_burnt = 985831427824; tokens_burnt = 98583142782400000000 } > │ 00:00:02 w #5 spiral_wasm.run / Error error / { retry = > 1; error = "{ receipt_outcomes_len = 1; retry = 1; receipt_failures = [] }" } > │ > │ > │ > │ 00:00:04 i #8 near_workspaces.print_usd / { retry = 2; > total_gas_burnt_usd = +0.000864; total_gas_burnt = 1293913287164 } > │ 00:00:04 i #9 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:04 i #10 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000659; tokens_burnt_usd = +0.000659; > gas_burnt = 985831427824; tokens_burnt = 98583142782400000000 } > │ 00:00:04 w #11 spiral_wasm.run / Error error / { retry > = 2; error = "{ receipt_outcomes_len = 1; retry = 2; receipt_failures = [] }" } > │ > │ > │ > │ 00:00:06 i #14 near_workspaces.print_usd / { retry = 3; > total_gas_burnt_usd = +0.000864; total_gas_burnt = 12...n / Error error / { > retry = 13; error = "{ receipt_outcomes_len = 1; retry = 13; receipt_failures = > [] }" } > │ > │ > │ > │ 00:00:28 i #80 near_workspaces.print_usd / { retry = > 14; total_gas_burnt_usd = +0.000864; total_gas_burnt = 1293913287164 } > │ 00:00:28 i #81 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:28 i #82 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000659; tokens_burnt_usd = +0.000659; > gas_burnt = 985831427824; tokens_burnt = 98583142782400000000 } > │ 00:00:28 w #83 spiral_wasm.run / Error error / { retry > = 14; error = "{ receipt_outcomes_len = 1; retry = 14; receipt_failures = [] }" > } > │ > │ > │ > │ 00:00:30 i #86 near_workspaces.print_usd / { retry = > 15; total_gas_burnt_usd = +0.000864; total_gas_burnt = 1293913287164 } > │ 00:00:30 i #87 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:30 i #88 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000659; tokens_burnt_usd = +0.000659; > gas_burnt = 985831427824; tokens_burnt = 98583142782400000000 } > │ 00:00:30 w #89 spiral_wasm.run / Error error / { retry > = 15; error = "{ receipt_outcomes_len = 1; retry = 15; receipt_failures = [] }" > } > │ > │ > │ > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -c > > "a-a" > |> sm'.to_std_string > |> is_valid_alias > |> _assert_eq true > > ── [ 38.89s - return value ] ─────────────────────────────────────────────────── > │ > │ 00:00:02 i #2 near_workspaces.print_usd / { retry = 1; > total_gas_burnt_usd = +0.000865; total_gas_burnt = 1295310280574 } > │ 00:00:02 i #3 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:02 i #4 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000659; tokens_burnt_usd = +0.000659; > gas_burnt = 987228421234; tokens_burnt = 98722842123400000000 } > │ 00:00:02 w #5 spiral_wasm.run / Error error / { retry = > 1; error = "{ receipt_outcomes_len = 1; retry = 1; receipt_failures = [] }" } > │ > │ > │ > │ 00:00:04 i #8 near_workspaces.print_usd / { retry = 2; > total_gas_burnt_usd = +0.000865; total_gas_burnt = 1295310280574 } > │ 00:00:04 i #9 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:04 i #10 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000659; tokens_burnt_usd = +0.000659; > gas_burnt = 987228421234; tokens_burnt = 98722842123400000000 } > │ 00:00:04 w #11 spiral_wasm.run / Error error / { retry > = 2; error = "{ receipt_outcomes_len = 1; retry = 2; receipt_failures = [] }" } > │ > │ > │ > │ 00:00:06 i #14 near_workspaces.print_usd / { retry = 3; > total_gas_burnt_usd = +0.000865; total_gas_burnt = 12...n / Error error / { > retry = 13; error = "{ receipt_outcomes_len = 1; retry = 13; receipt_failures = > [] }" } > │ > │ > │ > │ 00:00:28 i #80 near_workspaces.print_usd / { retry = > 14; total_gas_burnt_usd = +0.000865; total_gas_burnt = 1295310280574 } > │ 00:00:28 i #81 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:28 i #82 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000659; tokens_burnt_usd = +0.000659; > gas_burnt = 987228421234; tokens_burnt = 98722842123400000000 } > │ 00:00:28 w #83 spiral_wasm.run / Error error / { retry > = 14; error = "{ receipt_outcomes_len = 1; retry = 14; receipt_failures = [] }" > } > │ > │ > │ > │ 00:00:30 i #86 near_workspaces.print_usd / { retry = > 15; total_gas_burnt_usd = +0.000865; total_gas_burnt = 1295310280574 } > │ 00:00:30 i #87 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:30 i #88 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000659; tokens_burnt_usd = +0.000659; > gas_burnt = 987228421234; tokens_burnt = 98722842123400000000 } > │ 00:00:30 w #89 spiral_wasm.run / Error error / { retry > = 15; error = "{ receipt_outcomes_len = 1; retry = 15; receipt_failures = [] }" > } > │ > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### generate_cid > > ── spiral ────────────────────────────────────────────────────────────────────── > inl generate_cid (content : am'.vec u8) : sm'.std_string = > !\($'" fn encode_u64(value: u64) -> Vec<u8> { //"') : () > !\($'" let mut buffer = unsigned_varint::encode::u64_buffer(); //"') : () > !\($'" unsigned_varint::encode::u64(value, &mut buffer).to_vec() //"') : > () > !\($'" } //"') : () > > !\($'" fn sha256_hash(content: &[[u8]]) -> Vec<u8> { //"') : () > !\($'" let mut hasher: sha2::Sha256 = sha2::Digest::new(); //"') : () > !\($'" sha2::Digest::update(&mut hasher, content); //"') : () > !\($'" sha2::Digest::finalize(hasher).to_vec() //"') : () > !\($'" } //"') : () > > !\($'" let version: u8 = 1; //"') : () > !\($'" let codec_raw: u64 = 0x55; //"') : () > > !\($'" let codec_bytes = encode_u64(codec_raw); //"') : () > !\($'" let hash_result = sha256_hash(&!content); //"') : () > !\($'" let multihash = std::iter::once(0x12) //"') : () > !\($'" .chain(std::iter::once(32)) //"') : () > !\($'" .chain(hash_result.into_iter()) //"') : () > !\($'" .collect(); //"') : () > !\($'" let cid_bytes = [[vec\![[version]], codec_bytes, > multihash]].concat(); //"') : () > !\($'" let result = multibase::encode(multibase::Base::Base32Lower, > &cid_bytes); //"') : () > !\($'"result"') > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -c -d multibase sha2 unsigned-varint > > ;[[]] > |> am'.to_vec > |> generate_cid > |> sm'.from_std_string > |> _assert_eq "bafkreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku" > > ── [ 40.64s - return value ] ─────────────────────────────────────────────────── > │ > │ 00:00:02 i #2 near_workspaces.print_usd / { retry = 1; > total_gas_burnt_usd = +0.000928; total_gas_burnt = 1389749567250 } > │ 00:00:02 i #3 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:02 i #4 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000723; tokens_burnt_usd = +0.000723; > gas_burnt = 1081667707910; tokens_burnt = 108166770791000000000 } > │ 00:00:02 w #5 spiral_wasm.run / Error error / { retry = > 1; error = "{ receipt_outcomes_len = 1; retry = 1; receipt_failures = [] }" } > │ > │ > │ > │ 00:00:04 i #8 near_workspaces.print_usd / { retry = 2; > total_gas_burnt_usd = +0.000928; total_gas_burnt = 1389749567250 } > │ 00:00:04 i #9 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:04 i #10 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000723; tokens_burnt_usd = +0.000723; > gas_burnt = 1081667707910; tokens_burnt = 108166770791000000000 } > │ 00:00:04 w #11 spiral_wasm.run / Error error / { retry > = 2; error = "{ receipt_outcomes_len = 1; retry = 2; receipt_failures = [] }" } > │ > │ > │ > │ 00:00:06 i #14 near_workspaces.print_usd / { retry = 3; > total_gas_burnt_usd = +0.000928; total_gas_burnt ...Error error / { retry = 13; > error = "{ receipt_outcomes_len = 1; retry = 13; receipt_failures = [] }" } > │ > │ > │ > │ 00:00:28 i #80 near_workspaces.print_usd / { retry = > 14; total_gas_burnt_usd = +0.000928; total_gas_burnt = 1389749567250 } > │ 00:00:28 i #81 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:28 i #82 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000723; tokens_burnt_usd = +0.000723; > gas_burnt = 1081667707910; tokens_burnt = 108166770791000000000 } > │ 00:00:28 w #83 spiral_wasm.run / Error error / { retry > = 14; error = "{ receipt_outcomes_len = 1; retry = 14; receipt_failures = [] }" > } > │ > │ > │ > │ 00:00:30 i #86 near_workspaces.print_usd / { retry = > 15; total_gas_burnt_usd = +0.000928; total_gas_burnt = 1389749567250 } > │ 00:00:30 i #87 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:30 i #88 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000723; tokens_burnt_usd = +0.000723; > gas_burnt = 1081667707910; tokens_burnt = 108166770791000000000 } > │ 00:00:30 w #89 spiral_wasm.run / Error error / { retry > = 15; error = "{ receipt_outcomes_len = 1; retry = 15; receipt_failures = [] }" > } > │ > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### claim_alias > > ── spiral ────────────────────────────────────────────────────────────────────── > inl claim_alias (state : rust.ref (rust.mut' state)) (alias : sm'.std_string) : > () = > inl account_set : rust.ref (rust.mut' (near.iterable_set near.account_id)) = > !\($'$"&mut !state.1"') > > inl alias_set : rust.ref (rust.mut' (near.iterable_set sm'.std_string)) = > !\($'$"&mut !state.2"') > > inl account_map : rust.ref (rust.mut' (near.lookup_map near.account_id > sm'.std_string)) = > !\($'$"&mut !state.3"') > > inl alias_map : rust.ref (rust.mut' (near.lookup_map sm'.std_string > (mapm.hash_map near.account_id (u64 * u32)))) = > !\($'$"&mut !state.4"') > > inl signer_account_id = near.signer_account_id () > inl predecessor_account_id = near.predecessor_account_id () > inl block_timestamp = near.block_timestamp () > > trace Debug > fun () => "chat_contract.claim_alias" > fun () => { > alias > block_timestamp > signer_account_id = signer_account_id |> sm'.to_string' > predecessor_account_id = predecessor_account_id |> sm'.to_string' > } > > if alias |> is_valid_alias |> not > then near.panic_str "chat_contract.claim_alias / invalid alias" . true > else false > |> ignore > > inl account_alias = > account_map > |> near.lookup_get signer_account_id > |> optionm'.cloned > > match account_alias |> optionm'.unbox with > | Some account_alias when account_alias =. alias => > trace Warning > fun () => "chat_contract.claim_alias / alias already claimed" > fun () => { account_alias = account_alias |> sm'.format_debug } > | account_alias' => > trace Debug > fun () => "chat_contract.claim_alias" > fun () => { account_alias = account_alias |> sm'.format_debug } > > match account_alias' with > | Some account_alias => > !\($'" !alias_map //"') : () > !\($'" .get_mut(&!account_alias) //"') : () > !\($'" .unwrap() //"') : () > !\\(signer_account_id, $'" .remove(&$0); //"') : () > | None => () > > !\\((signer_account_id, alias), $'" !account_map.insert($0.clone(), > $1.clone()); //"') : () > > account_set |> near.iterable_set_insert signer_account_id |> ignore > alias_set |> near.iterable_set_insert alias |> ignore > > !\\(alias, $'" let new_alias_account_map = match !alias_map.get(&$0) { > //"') : () > !\($'" None => { //"') : () > !\($'" let mut new_map = std::collections::HashMap::new(); //"') : > () > !\\((signer_account_id, block_timestamp), $'" new_map.insert($0, > ($1, 0u32)); //"') : () > !\($'" new_map //"') : () > !\($'" } //"') : () > !\($'" Some(accounts) => { //"') : () > !\($'" let mut accounts_vec = accounts.iter().collect::<Vec<_>>(); > //"') : () > !\($'" accounts_vec.sort_unstable_by_key(|(_, (_, index))| index); > //"') : () > !\($'" let mut new_map = accounts_vec //"') : () > !\($'" .iter() //"') : () > !\($'" .enumerate() //"') : () > !\($'" .map(|(i, (signer_account_id, (timestamp, _)))| { //"') : > () > !\($'" ((*signer_account_id).clone(), (*timestamp, i as u32)) > //"') : () > !\($'" }) //"') : () > !\($'" .collect::<std::collections::HashMap<_, _>>(); //"') : () > !\\(signer_account_id, $'" new_map.insert($0, (!block_timestamp, > accounts_vec.len() as u32)); //"') : () > !\($'" new_map //"') : () > !\($'" } //"') : () > !\($'" }; //"') : () > > !\\(alias, $'" !alias_map.insert($0, new_alias_account_map); //"') : () > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -c > > inl state = new () > inl version = state.version > inl account_set = state.account_set > inl alias_set = state.alias_set > inl account_map = state.account_map > inl alias_map = state.alias_map > inl version = join version > inl account_set = join account_set > inl alias_set = join alias_set > inl account_map = join account_map > inl alias_map = join alias_map > inl state : rust.ref (rust.mut' state) = > !\\( > version, > $'$"&mut ($0, !account_set, !alias_set, !account_map, !alias_map)"' > ) > > "alias1" > |> sm'.to_std_string > |> claim_alias state > > trace Verbose > fun () => "chat_contract" > fun () => { state = state |> sm'.format_debug } > > trace Debug (fun () => "") id > > ── [ 43.44s - return value ] ─────────────────────────────────────────────────── > │ 00:00:00 d #1 chat_contract.claim_alias / { alias = > "alias1"; block_timestamp = 1744272726347458931; signer_account_id = > "dev-20250410081205-87337930350319"; predecessor_account_id = > "dev-20250410081205-87337930350319" } > │ 00:00:00 d #2 chat_contract.claim_alias / { > account_alias = None } > │ 00:00:00 v #3 chat_contract / { state = (2, IterableSet > { elements: Vector { len: 1, prefix: [97, 99, 99, 111, 117, 110, 116, 95, 115, > 101, 116, 118] }, index: LookupMap { prefix: [97, 99, 99, 111, 117, 110, 116, > 95, 115, 101, 116, 109] } }, IterableSet { elements: Vector { len: 1, prefix: > [97, 108, 105, 97, 115, 95, 115, 101, 116, 118] }, index: LookupMap { prefix: > [97, 108, 105, 97, 115, 95, 115, 101, 116, 109] } }, LookupMap { prefix: [97, > 99, 99, 111, 117, 110, 116, 95, 109, 97, 112] }, LookupMap { prefix: [97, 108, > 105, 97, 115, 95, 109, 97, 112] }) } > │ > │ 00:00:02 i #2 near_workspaces.print_usd / { retry = 1; > total_gas_burnt_usd = +0.002670; total_gas_burnt = 3997127056857 } > │ 00:00:02 i #3 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:02 i #4 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.002464; tokens_burnt_usd = +0.002464; > gas_burnt = 3689045197517; tokens_burnt = 368904519751700000000 } > │ 00:00:02 w #5 spiral_wasm.run / Error error / { retry = > 1; error...timestamp = 1744272754806128705; signer_account_id = > "dev-20250410081233-95717044842922"; predecessor_account_id = > "dev-20250410081233-95717044842922" } > │ 00:00:00 d #2 chat_contract.claim_alias / { > account_alias = None } > │ 00:00:00 v #3 chat_contract / { state = (2, IterableSet > { elements: Vector { len: 1, prefix: [97, 99, 99, 111, 117, 110, 116, 95, 115, > 101, 116, 118] }, index: LookupMap { prefix: [97, 99, 99, 111, 117, 110, 116, > 95, 115, 101, 116, 109] } }, IterableSet { elements: Vector { len: 1, prefix: > [97, 108, 105, 97, 115, 95, 115, 101, 116, 118] }, index: LookupMap { prefix: > [97, 108, 105, 97, 115, 95, 115, 101, 116, 109] } }, LookupMap { prefix: [97, > 99, 99, 111, 117, 110, 116, 95, 109, 97, 112] }, LookupMap { prefix: [97, 108, > 105, 97, 115, 95, 109, 97, 112] }) } > │ > │ 00:00:30 i #86 near_workspaces.print_usd / { retry = > 15; total_gas_burnt_usd = +0.002670; total_gas_burnt = 3997127056857 } > │ 00:00:30 i #87 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:30 i #88 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.002464; tokens_burnt_usd = +0.002464; > gas_burnt = 3689045197517; tokens_burnt = 368904519751700000000 } > │ 00:00:30 w #89 spiral_wasm.run / Error error / { retry > = 15; error = "{ receipt_outcomes_len = 1; retry = 15; receipt_failures = [] }" > } > │ > │ > │ > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust \"-c=-e=\\\"chat_contract.claim_alias / invalid alias\\\"\" > > "" > |> sm'.to_std_string > |> claim_alias ( > inl state = new () > inl version = state.version > inl account_set = state.account_set > inl alias_set = state.alias_set > inl account_map = state.account_map > inl alias_map = state.alias_map > !\\(version, $'$"&mut ($0, !account_set, !alias_set, !account_map, > !alias_map)"') > ) > trace Debug (fun () => "") id > > ── [ 14.57s - return value ] ─────────────────────────────────────────────────── > │ > │ 00:00:02 i #2 near_workspaces.print_usd / { retry = 1; > total_gas_burnt_usd = +0.001194; total_gas_burnt = 1787005135877 } > │ 00:00:02 i #3 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:02 i #4 near_workspaces.print_usd / outcome / { > is_success = false; gas_burnt_usd = +0.000988; tokens_burnt_usd = +0.000988; > gas_burnt = 1478923276537; tokens_burnt = 147892327653700000000 } > │ 00:00:02 c #5 spiral_wasm.run / Ok (Some error) / { > retry = 1; error = { receipt_outcomes_len = 1; retry = 1; receipt_failures = [ > │ ExecutionOutcome { > │ transaction_hash: > C4zYwf9thx75eRa25nZQHsbhA49VUck5hKa8P6V1hTzB, > │ block_hash: > 8DMKRkiSPhtwmtewD1WFnXnBRMPryk4ejsYd7M3rM2Af, > │ logs: [], > │ receipt_ids: [ > │ EKBy5CoAFKAUZs81hX7uC5MRnR4e9JXsf16a62cDSX68, > │ ], > │ gas_burnt: NearGas { > │ inner: 1478923276537, > │ }, > │ tokens_burnt: NearToken { > │ inner: 147892327653700000000, > │ }, > │ executor_id: AccountId( > │ "dev-20250410081248-68764084723602", > │ ), > │ status: Failure(ActionError(ActionError { index: > Some(0), kind: FunctionCallError(ExecutionError("Smart contract panicked: > chat_contract.claim_alias / invalid alias")) })), > │ }, > │ ] } } > │ > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -cd borsh > > inl state' = new () > inl state = state' > inl version = state.version > inl account_set = state.account_set > inl alias_set = state.alias_set > inl account_map = state.account_map > inl alias_map = state.alias_map > inl version = join version > inl account_set = join account_set > inl alias_set = join alias_set > inl account_map = join account_map > inl alias_map = join alias_map > > inl state = > !\\( > (version, account_set, alias_set), > $'$"&mut ($0, $1, $2, !account_map, !alias_map)"' > ) > > "alias1" > |> sm'.to_std_string > |> claim_alias state > > "alias1" > |> sm'.to_std_string > |> claim_alias state > > "alias1" > |> sm'.to_std_string > |> claim_alias state > > inl account_set' : rust.ref (near.iterable_set near.account_id) = > !\($'$"&!state.1"') > > inl alias_set' : rust.ref (near.iterable_set sm'.std_string) = > !\($'$"&!state.2"') > > inl account_set' = > account_set' > |> iter.iter_ref'' > |> iter.cloned > |> iter_collect > > inl alias_set' = > alias_set' > |> iter.iter_ref'' > |> iter.cloned > |> iter_collect > |> am'.vec_map sm'.from_std_string > > trace Verbose > fun () => "chat_contract" > fun () => { > account_set' = account_set' |> sm'.format_debug > alias_set' = alias_set' |> sm'.format_debug > state = state |> sm'.format_debug > } > > trace Debug (fun () => "") id > > account_set' > |> am'.vec_len > |> convert > |> _assert_eq 1u32 > > alias_set' > |> am'.from_vec_base > |> _assert_eq' ;[[ "alias1" ]] > > ── [ 44.37s - return value ] ─────────────────────────────────────────────────── > │ 00:00:00 d #1 chat_contract.claim_alias / { alias = > "alias1"; block_timestamp = 1744272785265981797; signer_account_id = > "dev-20250410081304-23022939976733"; predecessor_account_id = > "dev-20250410081304-23022939976733" } > │ 00:00:00 d #2 chat_contract.claim_alias / { > account_alias = None } > │ 00:00:00 d #3 chat_contract.claim_alias / { alias = > "alias1"; block_timestamp = 1744272785265981797; signer_account_id = > "dev-20250410081304-23022939976733"; predecessor_account_id = > "dev-20250410081304-23022939976733" } > │ 00:00:00 d #4 chat_contract.claim_alias / { > account_alias = Some("alias1") } > │ 00:00:00 d #5 chat_contract.claim_alias / { alias = > "alias1"; block_timestamp = 1744272785265981797; signer_account_id = > "dev-20250410081304-23022939976733"; predecessor_account_id = > "dev-20250410081304-23022939976733" } > │ 00:00:00 d #6 chat_contract.claim_alias / { > account_alias = Some("alias1") } > │ 00:00:00 v #7 chat_contract / { account_set' = > [AccountId("dev-20250410081304-23022939976733")]; alias_set' = ["alias1"]; state > = (2, IterableSet { elements: Vector { len: 1, prefix: [97, 99, 99, 111, 117, > 110, 116, 95, 115, 101, 116, 118] }, index: LookupMap { prefix: [97, 99, 99, > 111, 117, 110, 116, 95, 115, 101, 116, 109] } }, IterableSet { elements: Vector > { len: 1, prefix: [97, 108, 105, 97, 115, 95, 115, 101, 116, 118] }, index: > LookupMap { prefix: [97, 108, 105, 97, 115, 95, 115, 101, 116, 109] } }, > LookupMap { prefix: [97, 99, 99, ...r_account_id = > "dev-20250410081332-38243839777420" } > │ 00:00:00 d #6 chat_contract.claim_alias / { > account_alias = Some("alias1") } > │ 00:00:00 v #7 chat_contract / { account_set' = > [AccountId("dev-20250410081332-38243839777420")]; alias_set' = ["alias1"]; state > = (2, IterableSet { elements: Vector { len: 1, prefix: [97, 99, 99, 111, 117, > 110, 116, 95, 115, 101, 116, 118] }, index: LookupMap { prefix: [97, 99, 99, > 111, 117, 110, 116, 95, 115, 101, 116, 109] } }, IterableSet { elements: Vector > { len: 1, prefix: [97, 108, 105, 97, 115, 95, 115, 101, 116, 118] }, index: > LookupMap { prefix: [97, 108, 105, 97, 115, 95, 115, 101, 116, 109] } }, > LookupMap { prefix: [97, 99, 99, 111, 117, 110, 116, 95, 109, 97, 112] }, > LookupMap { prefix: [97, 108, 105, 97, 115, 95, 109, 97, 112] }) } > │ > │ 00:00:30 i #86 near_workspaces.print_usd / { retry = > 15; total_gas_burnt_usd = +0.004863; total_gas_burnt = 7279707387439 } > │ 00:00:30 i #87 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:30 i #88 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.004657; tokens_burnt_usd = +0.004657; > gas_burnt = 6971625528099; tokens_burnt = 697162552809900000000 } > │ 00:00:30 w #89 spiral_wasm.run / Error error / { retry > = 15; error = "{ receipt_outcomes_len = 1; retry = 15; receipt_failures = [] }" > } > │ > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### get_account_info > > ── spiral ────────────────────────────────────────────────────────────────────── > inl get_account_info > (state : rust.ref state) > (account_id : near.account_id) > : optionm'.option' (sm'.std_string * (u64 * u32)) > = > inl account_map : rust.ref (near.lookup_map near.account_id sm'.std_string) > = > !\($'$"&!state.3"') > > inl alias_map : rust.ref (near.lookup_map sm'.std_string (mapm.hash_map > near.account_id (u64 * u32))) = > !\($'$"&!state.4"') > > (!\\(account_id, $'"true; let result = > !account_map.get(&$0).and_then(|alias| { //"') : bool) |> ignore > (!\($'"true; !alias_map.get(alias).map(|accounts| { //"') : bool) |> > ignore > (!\($'"true; let result = (alias.clone(), > *accounts.get(&!account_id).unwrap()); //"') : bool) |> ignore > (!\($'"true; (result.0, result.1.0, result.1.1) }) }); //"') : bool) > |> ignore > > inl result = !\($'"result"') > > trace Debug > fun () => "chat_contract.get_account_info" > fun () => { account_id result } > > trace Debug (fun () => "") id > > result > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! rust -cd borsh > > inl state' = new () > inl state = state' > inl version = state.version > inl account_set = state.account_set > inl alias_set = state.alias_set > inl account_map = state.account_map > inl alias_map = state.alias_map > inl version = join version > inl account_set = join account_set > inl alias_set = join alias_set > inl account_map = join account_map > inl alias_map = join alias_map > > inl state_ref_mut = > !\\( > version, > $'$"&mut ($0, !account_set, !alias_set, !account_map, !alias_map)"' > ) > > inl state_ref = !\($'$"!state_ref_mut"') > near.predecessor_account_id () > |> get_account_info state_ref > |> _assert_eq' (optionm'.none' ()) > > inl state_ref = !\($'$"!state_ref_mut"') > near.signer_account_id () > |> get_account_info state_ref > |> _assert_eq' (optionm'.none' ()) > > "alias1" > |> sm'.to_std_string > |> claim_alias state_ref_mut > > inl state_ref = !\($'$"!state_ref_mut"') > near.predecessor_account_id () > |> get_account_info state_ref > |> optionm'.get' > |> fun alias, (timestamp, i) => > alias > |> sm'.from_std_string > |> _assert_eq "alias1" > > timestamp > |> _assert_gt 0 > > i > |> _assert_eq 0 > > inl state_ref = !\($'$"!state_ref_mut"') > near.signer_account_id () > |> get_account_info state_ref > |> optionm'.get' > |> fun alias, (timestamp, i) => > alias > |> sm'.from_std_string > |> _assert_eq "alias1" > > timestamp > |> _assert_gt 0 > > i > |> _assert_eq 0 > > ── [ 44.03s - return value ] ─────────────────────────────────────────────────── > │ 00:00:00 d #1 chat_contract.get_account_info / { > account_id = AccountId( > │ "dev-20250410081348-31755828767186", > │ ); result = None } > │ 00:00:00 d #3 chat_contract.get_account_info / { > account_id = AccountId( > │ "dev-20250410081348-31755828767186", > │ ); result = None } > │ 00:00:00 d #5 chat_contract.claim_alias / { alias = > "alias1"; block_timestamp = 1744272829462626481; signer_account_id = > "dev-20250410081348-31755828767186"; predecessor_account_id = > "dev-20250410081348-31755828767186" } > │ 00:00:00 d #6 chat_contract.claim_alias / { > account_alias = None } > │ 00:00:00 d #7 chat_contract.get_account_info / { > account_id = AccountId( > │ "dev-20250410081348-31755828767186", > │ ); result = Some( > │ ( > │ "alias1", > │ 1744272829462626481, > │ 0, > │ ), > │ ) } > │ 00:00:00 d #9 chat_contract.get_account_info / { > account_id = AccountId( > │ "dev-20250410081348-31755828767186", > │ ); result = Some( > │ ( > │ "alias1", > │ 1744272829462626481, > │ 0, > │ ), > │ ) } > │ > │ 00:00:02 i #2 near_workspaces.print_usd / { retry = 1; > total_gas_burnt_usd = +0.003796; total_gas_burnt = 5683319586500 } > │ 00:00:02 i #3 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:02 i #4 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.003591; tokens_burnt_usd = +0.0... > │ "dev-20250410081417-94309051036444", > │ ); result = None } > │ 00:00:00 d #5 chat_contract.claim_alias / { alias = > "alias1"; block_timestamp = 1744272857919113167; signer_account_id = > "dev-20250410081417-94309051036444"; predecessor_account_id = > "dev-20250410081417-94309051036444" } > │ 00:00:00 d #6 chat_contract.claim_alias / { > account_alias = None } > │ 00:00:00 d #7 chat_contract.get_account_info / { > account_id = AccountId( > │ "dev-20250410081417-94309051036444", > │ ); result = Some( > │ ( > │ "alias1", > │ 1744272857919113167, > │ 0, > │ ), > │ ) } > │ 00:00:00 d #9 chat_contract.get_account_info / { > account_id = AccountId( > │ "dev-20250410081417-94309051036444", > │ ); result = Some( > │ ( > │ "alias1", > │ 1744272857919113167, > │ 0, > │ ), > │ ) } > │ > │ 00:00:30 i #86 near_workspaces.print_usd / { retry = > 15; total_gas_burnt_usd = +0.003796; total_gas_burnt = 5683319586500 } > │ 00:00:30 i #87 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.000206; tokens_burnt_usd = +0.000206; > gas_burnt = 308081859340; tokens_burnt = 30808185934000000000 } > │ 00:00:30 i #88 near_workspaces.print_usd / outcome / { > is_success = true; gas_burnt_usd = +0.003591; tokens_burnt_usd = +0.003591; > gas_burnt = 5375237727160; tokens_burnt = 537523772716000000000 } > │ 00:00:30 w #89 spiral_wasm.run / Error error / { retry > = 15; error = "{ receipt_outcomes_len = 1; retry = 15; receipt_failures = [] }" > } > │ > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### main > > ── spiral ────────────────────────────────────────────────────────────────────── > ///! _ > > inl main () = > !\($'"} //"') : () > > !\($'"\#[[near_sdk::near_bindgen]] //"') : () > > !\($'"\#[[derive( //"') : () > !\($'" near_sdk::PanicOnDefault, //"') : () > !\($'" borsh::BorshDeserialize, //"') : () > !\($'" borsh::BorshSerialize, //"') : () > !\($'")]] //"') : () > > !\($'"pub struct State ( //"') : () > > !\($'"/*"') : () > (null () : rust.type_emit state) |> ignore > !\($'"*/ )"') : () > > inl new_ () = > !\($'"\#[[init]] //"') : () > !\($'"pub fn new() -> Self { // 1"') : () > > (!\($'"true; /*"') : bool) |> ignore > > (null () : rust.type_emit ()) |> ignore > > (!\($'"true; */"') : bool) |> ignore > > inl result = new () > > $'let _result = !result in _result |> (fun x -> > Fable.Core.RustInterop.emitRustExpr x $"Self($0) // x") // 2' : () > > !\($'"} // 2."') : () > > !\($'"} // 1."') : () > > 2 > > inl is_valid_alias () = > !\($'"fn is_valid_alias(alias: String) -> bool { //"') : () > inl alias = !\($'$"alias"') > inl result = alias |> is_valid_alias > $'let _result = !result in _result |> (fun x -> > Fable.Core.RustInterop.emitRustExpr x "$0 }") // 2' : () > !\($'"} //"') : () > 1 > > inl generate_cid () = > !\($'"pub fn generate_cid( //"') : () > !\($'" &self, //"') : () > !\($'" content: Vec<u8>, //"') : () > !\($'") -> String { //"') : () > inl content = !\($'$"content"') > inl result = generate_cid content > $'let _result = !result in _result |> (fun x -> > Fable.Core.RustInterop.emitRustExpr x "$0 }") // 2' : () > !\($'"} //"') : () > 2 > > inl generate_cid_borsh () = > !\($'"\#[[result_serializer(borsh)]] //"') : () > !\($'"pub fn generate_cid_borsh( //"') : () > !\($'" &self, //"') : () > !\($'" \#[[serializer(borsh)]] content: Vec<u8>, //"') : () > !\($'") -> String { //"') : () > !\($'" self.generate_cid(content) //"') : () > !\($'"} //"') : () > 1 > > inl claim_alias () = > !\($'"pub fn claim_alias( //"') : () > !\($'" &mut self, //"') : () > !\($'" alias: String, //"') : () > !\($'") { //"') : () > > inl state = !\($'$"&mut self.0"') > inl alias = !\($'$"alias"') > > inl result = claim_alias state alias > trace Debug (fun () => "") (join id) > > !\($'"} //"') : () > > !\($'"} //"') : () > > !\($'"} //"') : () > > 3 > > inl get_account_info () = > !\($'"pub fn get_account_info( //"') : () > !\($'" &self, //"') : () > !\($'" account_id: near_sdk::AccountId, //"') : () > !\($'") -> Option<(String, u64, u32)> { //"') : () > > inl state = !\($'$"&self.0"') > inl account_id : near.account_id = !\($'$"account_id"') > > inl result = account_id |> get_account_info state > $'let _result = !result in _result |> (fun x -> > Fable.Core.RustInterop.emitRustExpr x "$0 } // 4") // 3' : () > > !\($'"} // 1"') : () > > 1 > > inl get_alias_map () = > !\($'"pub fn get_alias_map( //"') : () > !\($'" &self, //"') : () > !\($'" alias: String, //"') : () > !\($'") -> Option<std::collections::HashMap<near_sdk::AccountId, (u64, > u32)>> { //"') : () > > inl alias_map : rust.ref (near.lookup_map sm'.std_string (mapm.hash_map > near.account_id (u64 * u32))) = > !\($'$"&self.0.4"') > > inl alias : sm'.std_string = !\($'$"alias"') > > trace Debug > fun () => "chat_contract.get_alias_map" > fun () => { alias } > > trace Debug (fun () => "") (join id) > > !\\(alias, $'" !alias_map.get(&$0).cloned() //"') : () > !\($'"} //"') : () > > !\($'"} //"') : () > > 2 > > inl get_alias_map_borsh () = > !\($'"\#[[result_serializer(borsh)]] //"') : () > !\($'"pub fn get_alias_map_borsh( //"') : () > !\($'" &self, //"') : () > !\($'" \#[[serializer(borsh)]] alias: String, //"') : () > !\($'") -> Option<std::collections::HashMap<near_sdk::AccountId, (u64, > u32)>> { //"') : () > !\($'" self.get_alias_map(alias) //"') : () > !\($'"} //"') : () > 1 > > inl fns = > [[ > new_ > is_valid_alias > generate_cid > generate_cid_borsh > claim_alias > get_account_info > get_alias_map > get_alias_map_borsh > ]] > > // inl rec loop acc fns i = > inl rec loop forall i {number} j {number}. (acc : i) (fns : list (() -> i)) > (i : j) : i = > match fns with > | [[]] => acc > | x :: xs => > !\($'"\#[[near_sdk::near_bindgen]] //"') : () > !\($'"impl State { //"') : () > inl n = x () > !\($'"} /* c"') : () > // inl rec loop' i' = > inl rec loop' forall t {number}. (i' : t) : () = > if i' <> 1 // <= n > then (!\($'"true; */ // ???? / i: !i / i\': !i' / acc: !acc / n: > !n"') : bool) |> ignore > else > (!\($'"true; // ??? / i: !i / i\': !i' / acc: !acc / n: > !n"') : bool) |> ignore > loop' (i' + 1) > loop' 1u8 > loop (acc + n) xs (i + 1) > inl n = loop 0u8 fns 1u8 > > > // !\($'"/* a"') : () > > // !\($'"} // b"') : () > > !\($'"fn _main() //"') : () > !\($'"{ { //"') : () > > inl rec loop' i' = > if i' <= n > then > (!\($'"true; { (); // ?? / i\': !i' / n: !n"') : bool) |> ignore > loop' (i' + 1) > else > (!\($'"true; { { (); // ? / i\': !i' / n: !n"') : bool) |> ignore > // (!\($'"true; */ // ?? / i\': !i' / n: !n"') : bool) |> ignore > loop' 1u8 > > inl main () = > $'!main |> ignore' : () 00:07:26 v #3 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 61210 } 00:07:26 d #4 runtime.execute_with_options / { file_name = jupyter; arguments = ["nbconvert", "/home/runner/work/polyglot/polyglot/apps/chat/contract/chat_contract.dib.ipynb", "--to", "html", "--HTMLExporter.theme=dark"]; options = { command = jupyter nbconvert "/home/runner/work/polyglot/polyglot/apps/chat/contract/chat_contract.dib.ipynb" --to html --HTMLExporter.theme=dark; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:07:27 v #5 ! [NbConvertApp] Converting notebook /home/runner/work/polyglot/polyglot/apps/chat/contract/chat_contract.dib.ipynb to html 00:07:27 v #6 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbformat/__init__.py:96: MissingIDFieldWarning: Cell is missing an id field, this will become a hard error in future nbformat versions. You may want to use `normalize()` on your notebooks before validations (available since nbformat 5.1.4). Previous versions of nbformat are fixing this issue transparently, and will stop doing so in the future. 00:07:27 v #7 ! validate(nb) 00:07:27 v #8 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbconvert/filters/highlight.py:71: UserWarning: IPython3 lexer unavailable, falling back on Python 3 00:07:27 v #9 ! return _pygments_highlight( 00:07:28 v #10 ! [NbConvertApp] Writing 561349 bytes to /home/runner/work/polyglot/polyglot/apps/chat/contract/chat_contract.dib.html 00:07:28 v #11 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 926 } 00:07:28 d #12 spiral.run / dib / jupyter nbconvert / { exit_code = 0; jupyter_result_length = 926 } 00:07:28 d #13 runtime.execute_with_options / { file_name = pwsh; arguments = ["-c", "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/chat/contract/chat_contract.dib.html'; (Get-Content $path -Raw) -replace '(id=\\\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"]; options = { command = pwsh -c "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/chat/contract/chat_contract.dib.html'; (Get-Content $path -Raw) -replace '(id=\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:07:28 v #14 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 0 } 00:07:28 d #15 spiral.run / dib / html cell ids / { exit_code = 0; pwsh_replace_html_result_length = 0 } 00:07:28 d #16 spiral.run / dib / { exit_code = 0; result_length = 62195 } 00:00:00 d #1 writeDibCode / output: Spi / path: chat_contract.dib 00:00:00 d #2 parseDibCode / output: Spi / file: chat_contract.dib 00:00:00 d #1 persistCodeProject / packages: [Fable.Core] / modules: [deps/spiral/lib/spiral/common.fsx; deps/spiral/lib/spiral/sm.fsx; deps/spiral/lib/spiral/crypto.fsx; ... ] / name: chat_contract / hash: / code.Length: 193958 00:00:00 d #2 buildProject / fullPath: /home/runner/work/polyglot/polyglot/target/Builder/chat_contract/chat_contract.fsproj 00:00:00 d #1 runtime.execute_with_options_async / { file_name = dotnet; arguments = US5_0 "publish "/home/runner/work/polyglot/polyglot/target/Builder/chat_contract/chat_contract.fsproj" --configuration Release --output "/home/runner/work/polyglot/polyglot/apps/chat/contract/dist" --runtime linux-x64"; options = { command = dotnet publish "/home/runner/work/polyglot/polyglot/target/Builder/chat_contract/chat_contract.fsproj" --configuration Release --output "/home/runner/work/polyglot/polyglot/apps/chat/contract/dist" --runtime linux-x64; cancellation_token = None; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot/target/Builder/chat_contract" } } 00:00:00 v #2 > Determining projects to restore... 00:00:01 v #3 > Paket version 9.0.2+a9b12aaeb8d8d5e47a415a3442b7920ed04e98e0 00:00:01 v #4 > The last full restore is still up to date. Nothing left to do. 00:00:01 v #5 > Total time taken: 0 milliseconds 00:00:01 v #6 > Paket version 9.0.2+a9b12aaeb8d8d5e47a415a3442b7920ed04e98e0 00:00:01 v #7 > Restoring /home/runner/work/polyglot/polyglot/target/Builder/chat_contract/chat_contract.fsproj 00:00:01 v #8 > Starting restore process. 00:00:01 v #9 > Total time taken: 0 milliseconds 00:00:02 v #10 > Restored /home/runner/work/polyglot/polyglot/target/Builder/chat_contract/chat_contract.fsproj (in 282 ms). 00:00:09 v #11 > /home/runner/work/polyglot/polyglot/target/Builder/chat_contract/chat_contract.fs(4363,15): warning FS0025: Incomplete pattern matches on this expression. For example, the value 'US7_0 (_)' may indicate a case not covered by the pattern(s). [/home/runner/work/polyglot/polyglot/target/Builder/chat_contract/chat_contract.fsproj] 00:00:13 v #12 > chat_contract -> /home/runner/work/polyglot/polyglot/target/Builder/chat_contract/bin/Release/net9.0/linux-x64/chat_contract.dll 00:00:14 v #13 > chat_contract -> /home/runner/work/polyglot/polyglot/apps/chat/contract/dist 00:00:14 d #14 runtime.execute_with_options_async / { exit_code = 0; output_length = 1073; options = { command = dotnet publish "/home/runner/work/polyglot/polyglot/target/Builder/chat_contract/chat_contract.fsproj" --configuration Release --output "/home/runner/work/polyglot/polyglot/apps/chat/contract/dist" --runtime linux-x64; cancellation_token = None; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot/target/Builder/chat_contract" } } spiral/lib/spiral/lib.ps1/GetTargetDir / targetDir: /home/runner/work/polyglot/polyglot/target/Builder/chat_contract polyglot/scripts/core.ps1/ResolveLink #4 / Path: /home/runner/work/polyglot/polyglot/deps/spiral/lib/spiral/../../deps/polyglot / parent_target: / path_target: /home/runner/work/polyglot/polyglot / parent: /home/runner/work/polyglot/polyglot/deps/spiral/lib/spiral/../../deps / End: polyglot spiral/lib/spiral/lib.ps1/BuildFable / TargetDir: /home/runner/work/polyglot/polyglot/target/Builder/chat_contract / ProjectName: chat_contract / Language: rs / Runtime: CONTRACT / root: /home/runner/work/polyglot/polyglot Fable 5.0.0-alpha.9: F# to Rust compiler (status: alpha) Thanks to the contributor! @inchingforward Stand with Ukraine! https://standwithukraine.com.ua/ Parsing target/Builder/chat_contract/chat_contract.fsproj... Project and references (14 source files) parsed in 2419ms Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.JSInterop.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Routing.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Routing.Abstractions.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Mvc.ViewFeatures.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Mvc.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Mvc.Core.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Http.Abstractions.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Components.Forms.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Components.Endpoints.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Components.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Started Fable compilation... Fable compilation finished in 9369ms ./target/Builder/chat_contract/chat_contract.fs(4363,15): (4363,19) warning FSHARP: Incomplete pattern matches on this expression. For example, the value 'US7_0 (_)' may indicate a case not covered by the pattern(s). (code 25) ./deps/spiral/lib/spiral/common.fsx(2209,0): (2209,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/sm.fsx(561,0): (561,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/async_.fsx(250,0): (250,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/threading.fsx(139,0): (139,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/crypto.fsx(2436,0): (2436,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/date_time.fsx(2547,0): (2547,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/platform.fsx(122,0): (122,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/networking.fsx(5525,0): (5525,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/trace.fsx(2244,0): (2244,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/runtime.fsx(8246,0): (8246,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/file_system.fsx(20811,0): (20811,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./target/Builder/chat_contract/chat_contract.fs(4569,6): (4569,12) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! Updating crates.io index Downloading crates ... Downloaded block-buffer v0.11.0-rc.3 Downloaded data-encoding v2.6.0 Downloaded equivalent v1.0.1 Downloaded darling_macro v0.20.10 Downloaded sha2 v0.11.0-pre.4 Downloaded unicode-ident v1.0.14 Downloaded ryu v1.0.18 Downloaded serde v1.0.216 Downloaded winnow v0.6.20 Downloaded serde_json v1.0.133 Downloaded syn v1.0.109 Downloaded syn v2.0.90 Downloaded itoa v1.0.14 Downloaded hybrid-array v0.2.3 Downloaded darling_core v0.20.10 Downloaded data-encoding-macro v0.1.15 Downloaded toml_edit v0.22.22 Downloaded indexmap v2.7.0 Downloaded quote v1.0.37 Downloaded proc-macro2 v1.0.92 Downloaded near-sdk-macros v5.6.0 Downloaded rustversion v1.0.18 Downloaded rand_core v0.6.4 Downloaded once_cell v1.20.2 Downloaded typenum v1.17.0 Downloaded tinyvec v1.8.0 Downloaded serde_derive v1.0.216 Downloaded proc-macro-crate v3.2.0 Downloaded getrandom v0.2.15 Downloaded borsh-derive v1.5.3 Downloaded digest v0.11.0-pre.9 Downloaded darling v0.20.10 Downloaded crypto-common v0.2.0-rc.1 Downloaded libc v0.2.168 Downloaded const-oid v0.10.0-rc.3 Downloaded borsh v1.5.3 Downloaded data-encoding-macro-internal v0.1.13 Downloaded cpufeatures v0.2.16 Downloaded near-sdk v5.6.0 Compiling proc-macro2 v1.0.92 Compiling unicode-ident v1.0.14 Compiling hashbrown v0.15.2 Compiling equivalent v1.0.1 Compiling toml_datetime v0.6.8 Compiling winnow v0.6.20 Compiling serde v1.0.216 Compiling cfg_aliases v0.2.1 Compiling typenum v1.17.0 Compiling indexmap v2.7.0 Compiling quote v1.0.37 Compiling syn v2.0.90 Compiling borsh v1.5.3 Compiling once_cell v1.20.2 Compiling serde_json v1.0.133 Compiling rustversion v1.0.18 Compiling ident_case v1.0.1 Compiling fnv v1.0.7 Compiling syn v1.0.109 Compiling toml_edit v0.22.22 Compiling hybrid-array v0.2.3 Compiling ryu v1.0.18 Compiling itoa v1.0.14 Compiling near-sdk-macros v5.6.0 Compiling heck v0.5.0 Compiling data-encoding v2.6.0 Compiling proc-macro-crate v3.2.0 Compiling memchr v2.7.4 Compiling wee_alloc v0.4.5 Compiling darling_core v0.20.10 Compiling data-encoding-macro-internal v0.1.13 Compiling crypto-common v0.2.0-rc.1 Compiling block-buffer v0.11.0-rc.3 Compiling Inflector v0.11.4 Compiling memory_units v0.4.0 Compiling const-oid v0.10.0-rc.3 Compiling serde_derive v1.0.216 Compiling borsh-derive v1.5.3 Compiling strum_macros v0.26.4 Compiling darling_macro v0.20.10 Compiling darling v0.20.10 Compiling cfg-if v0.1.10 Compiling strum v0.26.3 Compiling digest v0.11.0-pre.9 Compiling data-encoding-macro v0.1.15 Compiling bs58 v0.5.1 Compiling base64 v0.22.1 Compiling cfg-if v1.0.0 Compiling near-sys v0.2.2 Compiling base-x v0.2.11 Compiling multibase v0.9.1 Compiling sha2 v0.11.0-pre.4 Compiling fable_library_rust v0.1.0 (/home/runner/work/polyglot/polyglot/lib/rust/fable/fable_modules/fable-library-rust) Compiling inline_colorization v0.1.6 Compiling unsigned-varint v0.8.0 Compiling near-token v0.3.0 Compiling near-account-id v1.0.0 Compiling near-gas v0.3.0 Compiling near-sdk v5.6.0 Compiling chat_contract v0.0.1 (/home/runner/work/polyglot/polyglot/apps/chat/contract) Finished `release` profile [optimized] target(s) in 20.27s polyglot/apps/chat/contract/build.ps1 / $targetDir = /home/runner/work/polyglot/polyglot/target/Builder/chat_contract / $projectName: chat_contract / $env:CI:'true' warning: /home/runner/work/polyglot/polyglot/apps/chat/contract/tests/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/spiral/temp/extension/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/spiral/temp/cube/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/lib/math/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/examples/rust/exercism/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/chat/contract/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/plot/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/spiral/temp/test/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. Downloading crates ... Downloaded anyhow v1.0.94 Downloaded borsh v1.5.3 Downloaded crunchy v0.2.2 Downloaded phf_shared v0.10.0 Downloaded dyn-clone v1.0.17 Downloaded zerofrom-derive v0.1.5 Downloaded tokio-macros v2.4.0 Downloaded serde_repr v0.1.19 Downloaded time-macros v0.2.19 Downloaded rustversion v1.0.18 Downloaded tracing-indicatif v0.3.8 Downloaded serde_with_macros v3.11.0 Downloaded xml-rs v0.8.24 Downloaded tokio-rustls v0.26.1 Downloaded indexmap v2.7.0 Downloaded schemars v0.8.21 Downloaded tokio-util v0.7.13 Downloaded flate2 v1.0.35 Downloaded time v0.3.37 Downloaded serde_with v3.11.0 Downloaded hyper v1.5.1 Downloaded reqwest v0.12.9 Downloaded hyper v0.14.31 Downloaded near-sdk v5.6.0 Downloaded webpki-roots v0.26.7 Downloaded clap_builder v4.5.23 Downloaded openssl v0.10.68 Downloaded rustls v0.23.20 Downloaded rustix v0.37.27 Downloaded portable-atomic v1.10.0 Downloaded h2 v0.4.7 Downloaded cc v1.2.4 Downloaded rustix v0.38.42 Downloaded near-sandbox-utils v0.12.0 Downloaded indicatif v0.17.9 Downloaded http v1.2.0 Downloaded textwrap v0.16.1 Downloaded tar v0.4.43 Downloaded serde_derive v1.0.216 Downloaded rustls-pki-types v1.10.1 Downloaded openssl-sys v0.9.104 Downloaded near-sdk-macros v5.6.0 Downloaded futures-lite v2.5.0 Downloaded pin-project v1.1.7 Downloaded event-listener v5.3.1 Downloaded derive_more v0.99.18 Downloaded bytes v1.9.0 Downloaded pin-project-internal v1.1.7 Downloaded open v5.3.1 Downloaded clap v4.5.23 Downloaded tempfile v3.14.0 Downloaded semver v1.0.24 Downloaded tokio v1.42.0 Downloaded native-tls v0.2.12 Downloaded litemap v0.7.4 Downloaded ipnet v2.10.1 Downloaded csv-core v0.1.11 Downloaded is-terminal v0.4.13 Downloaded hyper-rustls v0.27.3 Downloaded borsh-derive v1.5.3 Downloaded httparse v1.9.5 Downloaded string_cache v0.8.7 Downloaded schemars_derive v0.8.21 Downloaded proc-macro-crate v3.2.0 Downloaded ordered-float v4.5.0 Downloaded enumflags2 v0.7.10 Downloaded zerofrom v0.1.5 Downloaded http-body-util v0.1.2 Downloaded enumflags2_derive v0.7.10 Downloaded async-trait v0.1.83 Downloaded openssl-src v300.4.1+3.4.0 Compiling libc v0.2.168 Compiling serde v1.0.216 Compiling syn v2.0.90 Compiling version_check v0.9.5 Compiling shlex v1.3.0 Compiling once_cell v1.20.2 Compiling jobserver v0.1.32 Compiling typenum v1.17.0 Compiling cc v1.2.4 Compiling generic-array v0.14.7 Compiling smallvec v1.13.2 Compiling pkg-config v0.3.31 Compiling futures-core v0.3.31 Compiling lock_api v0.4.12 Compiling parking_lot_core v0.9.10 Compiling scopeguard v1.2.0 Compiling bytes v1.9.0 Compiling log v0.4.22 Compiling byteorder v1.5.0 Compiling parking_lot v0.12.3 Compiling signal-hook-registry v1.4.2 Compiling getrandom v0.2.15 Compiling equivalent v1.0.1 Compiling hashbrown v0.15.2 Compiling toml_datetime v0.6.8 Compiling tracing-core v0.1.33 Compiling futures-io v0.3.31 Compiling mio v1.0.3 Compiling synstructure v0.13.1 Compiling indexmap v2.7.0 Compiling socket2 v0.5.8 Compiling futures-sink v0.3.31 Compiling subtle v2.6.1 Compiling rand_core v0.6.4 Compiling crypto-common v0.1.6 Compiling futures-channel v0.3.31 Compiling anyhow v1.0.94 Compiling block-buffer v0.10.4 Compiling num-traits v0.2.19 Compiling fnv v1.0.7 Compiling syn v1.0.109 Compiling cfg_aliases v0.2.1 Compiling digest v0.10.7 Compiling winnow v0.6.20 Compiling serde_derive v1.0.216 Compiling zerofrom-derive v0.1.5 Compiling yoke-derive v0.7.5 Compiling tokio-macros v2.4.0 Compiling zerovec-derive v0.10.3 Compiling tracing-attributes v0.1.28 Compiling tokio v1.42.0 Compiling tracing v0.1.41 Compiling displaydoc v0.2.5 Compiling futures-macro v0.3.31 Compiling futures-util v0.3.31 Compiling zerocopy-derive v0.7.35 Compiling zerocopy v0.7.35 Compiling toml_edit v0.22.22 Compiling zstd-sys v2.0.13+zstd.1.5.6 Compiling crossbeam-utils v0.8.21 Compiling rustversion v1.0.18 Compiling icu_provider_macros v1.5.0 Compiling bitflags v2.6.0 Compiling lazy_static v1.5.0 Compiling proc-macro-crate v3.2.0 Compiling thiserror v1.0.69 Compiling ppv-lite86 v0.2.20 Compiling thiserror-impl v1.0.69 Compiling borsh-derive v1.5.3 Compiling rand_chacha v0.3.1 Compiling serde_json v1.0.133 Compiling rand v0.8.5 Compiling borsh v1.5.3 Compiling stable_deref_trait v1.2.0 Compiling tokio-util v0.7.13 Compiling sha2 v0.10.8 Compiling semver v1.0.24 Compiling percent-encoding v2.3.1 Compiling zerofrom v0.1.5 Compiling bitflags v1.3.2 Compiling yoke v0.7.5 Compiling num-integer v0.1.46 Compiling httparse v1.9.5 Compiling memchr v2.7.4 Compiling zerovec v0.10.4 Compiling hex v0.4.3 Compiling ring v0.17.8 Compiling try-lock v0.2.5 Compiling tower-service v0.3.3 Compiling cfg-if v1.0.0 Compiling want v0.3.1 Compiling async-trait v0.1.83 Compiling static_assertions v1.1.0 Compiling tinystr v0.7.6 Compiling http v0.2.12 Compiling thread_local v1.1.8 Compiling regex-syntax v0.6.29 Compiling utf8parse v0.2.2 Compiling litemap v0.7.4 Compiling powerfmt v0.2.0 Compiling writeable v0.5.5 Compiling icu_locid v1.5.0 Compiling deranged v0.3.11 Compiling regex-automata v0.1.10 Compiling openssl-src v300.4.1+3.4.0 Compiling time-core v0.1.2 Compiling num-conv v0.1.0 Compiling overload v0.1.1 Compiling vcpkg v0.2.15 Compiling time v0.3.37 Compiling nu-ansi-term v0.46.0 Compiling openssl-sys v0.9.104 Compiling matchers v0.1.0 Compiling icu_provider v1.5.0 Compiling http-body v0.4.6 Compiling aho-corasick v1.1.3 Compiling rustc_version v0.4.1 Compiling crossbeam-channel v0.5.14 Compiling sharded-slab v0.1.7 Compiling pin-project-internal v1.1.7 Compiling serde_repr v0.1.19 Compiling tracing-log v0.2.0 Compiling bzip2-sys v0.1.11+1.0.8 Compiling indexmap v1.9.3 Compiling num-bigint v0.3.3 Compiling base64 v0.21.7 Compiling atomic-waker v1.1.2 Compiling zstd-safe v5.0.2+zstd.1.5.2 Compiling icu_locid_transform_data v1.5.0 Compiling regex-syntax v0.8.5 Compiling icu_locid_transform v1.5.0 Compiling pin-project v1.1.7 Compiling tracing-subscriber v0.3.19 Compiling curve25519-dalek v4.1.3 Compiling regex-automata v0.4.9 Compiling h2 v0.3.26 Compiling icu_collections v1.5.0 Compiling near-account-id v1.0.0 Compiling axum-core v0.3.4 Compiling futures-executor v0.3.31 Compiling num-rational v0.3.2 Compiling either v1.13.0 Compiling hashbrown v0.12.3 Compiling mime v0.3.17 Compiling ident_case v1.0.1 Compiling crunchy v0.2.2 Compiling convert_case v0.4.0 Compiling base64 v0.22.1 Compiling tower-layer v0.3.3 Compiling strsim v0.11.1 Compiling icu_properties_data v1.5.0 Compiling httpdate v1.0.3 Compiling icu_properties v1.5.1 Compiling hyper v0.14.31 Compiling darling_core v0.20.10 Compiling derive_more v0.99.18 Compiling itertools v0.12.1 Compiling regex v1.11.1 Compiling axum v0.6.20 Compiling tokio-stream v0.1.17 Compiling curve25519-dalek-derive v0.1.1 Compiling enum-map-derive v0.17.0 Compiling derive_arbitrary v1.4.1 Compiling secp256k1-sys v0.8.1 Compiling write16 v1.0.0 Compiling rustls v0.23.20 Compiling bs58 v0.4.0 Compiling rustls-pki-types v1.10.1 Compiling utf16_iter v1.0.5 Compiling heck v0.4.1 Compiling schemars v0.8.21 Compiling utf8_iter v1.0.4 Compiling urlencoding v2.1.3 Compiling icu_normalizer_data v1.5.0 Compiling signature v2.2.0 Compiling ed25519 v2.2.3 Compiling icu_normalizer v1.5.0 Compiling opentelemetry v0.22.0 Compiling strum_macros v0.24.3 Compiling arbitrary v1.4.1 Compiling enum-map v2.7.3 Compiling prost-derive v0.12.6 Compiling tower v0.4.13 Compiling darling_macro v0.20.10 Compiling anstyle-parse v0.2.6 Compiling concurrent-queue v2.5.0 Compiling tokio-io-timeout v1.2.0 Compiling ordered-float v4.5.0 Compiling async-stream-impl v0.3.6 Compiling serde_derive_internals v0.29.1 Compiling block-padding v0.3.3 Compiling anstyle-query v1.1.2 Compiling anstyle v1.0.10 Compiling glob v0.3.1 Compiling matchit v0.7.3 Compiling is_terminal_polyfill v1.70.1 Compiling parking v2.2.1 Compiling openssl v0.10.68 Compiling sync_wrapper v0.1.2 Compiling colorchoice v1.0.3 Compiling foreign-types-shared v0.1.1 Compiling anstream v0.6.18 Compiling foreign-types v0.3.2 Compiling schemars_derive v0.8.21 Compiling opentelemetry_sdk v0.22.1 Compiling inout v0.1.3 Compiling async-stream v0.3.6 Compiling hyper-timeout v0.4.1 Compiling prost v0.12.6 Compiling darling v0.20.10 Compiling uint v0.9.5 Compiling near-primitives-core v0.23.0 Compiling ed25519-dalek v2.1.1 Compiling strum v0.24.1 Compiling idna_adapter v1.2.0 Compiling fixed-hash v0.7.0 Compiling form_urlencoded v1.2.1 Compiling openssl-macros v0.1.1 Compiling http v1.2.0 Compiling winnow v0.5.40 Compiling rustix v0.38.42 Compiling protobuf v2.28.0 Compiling fastrand v2.3.0 Compiling json_comments v0.2.2 Compiling near-config-utils v0.23.0 Compiling toml_edit v0.19.15 Compiling primitive-types v0.10.1 Compiling idna v1.0.3 Compiling tonic v0.11.0 Compiling secp256k1 v0.27.0 Compiling cipher v0.4.4 Compiling actix-rt v2.10.0 Compiling actix-macros v0.2.4 Compiling actix_derive v0.6.2 Compiling blake2 v0.10.6 Compiling hmac v0.12.1 Compiling proc-macro-error-attr v1.0.4 Compiling clap_lex v0.7.4 Compiling zstd-safe v7.2.1 Compiling prometheus v0.13.4 Compiling arrayvec v0.7.6 Compiling itoa v1.0.14 Compiling linux-raw-sys v0.4.14 Compiling adler2 v2.0.0 Compiling ryu v1.0.18 Compiling near-stdx v0.23.0 Compiling near-crypto v0.23.0 Compiling miniz_oxide v0.8.0 Compiling clap_builder v4.5.23 Compiling actix v0.13.5 Compiling opentelemetry-proto v0.5.0 Compiling proc-macro-crate v1.3.1 Compiling url v2.5.4 Compiling http-body v1.0.1 Compiling event-listener v5.3.1 Compiling clap_derive v4.5.18 Compiling sha1 v0.10.6 Compiling zvariant_utils v1.0.1 Compiling proc-macro-error v1.0.4 Compiling crc32fast v1.4.2 Compiling unicode-width v0.1.14 Compiling native-tls v0.2.12 Compiling io-lifetimes v1.0.11 Compiling cpufeatures v0.2.16 Compiling unsafe-libyaml v0.2.11 Compiling reed-solomon-erasure v4.0.2 Compiling event-listener v2.5.3 Compiling opentelemetry-semantic-conventions v0.14.0 Compiling opentelemetry-otlp v0.15.0 Compiling serde_yaml v0.9.34+deprecated Compiling flate2 v1.0.35 Compiling clap v4.5.23 Compiling event-listener-strategy v0.5.3 Compiling aes v0.8.4 Compiling h2 v0.4.7 Compiling serde_with_macros v3.11.0 Compiling tracing-opentelemetry v0.23.0 Compiling futures v0.3.31 Compiling tracing-appender v0.2.3 Compiling near-time v0.23.0 Compiling near-rpc-error-core v0.23.0 Compiling enumflags2_derive v0.7.10 Compiling futures-lite v2.5.0 Compiling dirs-sys-next v0.1.2 Compiling polling v2.8.0 Compiling memoffset v0.7.1 Compiling async-task v4.7.1 Compiling dyn-clone v1.0.17 Compiling spin v0.9.8 Compiling rustix v0.37.27 Compiling siphasher v0.3.11 Compiling fastrand v1.9.0 Compiling untrusted v0.9.0 Compiling waker-fn v1.2.0 Compiling openssl-probe v0.1.5 Compiling keccak v0.1.5 Compiling chrono v0.4.39 Compiling sha3 v0.10.8 Compiling futures-lite v1.13.0 Compiling itertools v0.10.5 Compiling dirs-next v2.0.0 Compiling enumflags2 v0.7.10 Compiling near-rpc-error-macro v0.23.0 Compiling hyper v1.5.1 Compiling near-o11y v0.23.0 Compiling near-performance-metrics v0.23.0 Compiling serde_with v3.11.0 Compiling zstd v0.13.2 Compiling async-channel v2.3.1 Compiling near-parameters v0.23.0 Compiling async-lock v2.8.0 Compiling zvariant_derive v3.15.2 Compiling piper v0.2.4 Compiling near-fmt v0.23.0 Compiling bytesize v1.3.0 Compiling smart-default v0.6.0 Compiling near-async-derive v0.23.0 Compiling filetime v0.2.25 Compiling async-io v1.13.0 Compiling async-fs v1.6.0 Compiling proc-macro2 v1.0.92 Compiling base64ct v1.6.0 Compiling linux-raw-sys v0.3.8 Compiling signal-hook v0.3.17 Compiling easy-ext v0.2.9 Compiling unicode-ident v1.0.14 Compiling near-primitives v0.23.0 Compiling password-hash v0.4.2 Compiling near-async v0.23.0 Compiling zvariant v3.15.2 Compiling blocking v1.6.1 Compiling interactive-clap-derive v0.2.10 Compiling hyper-util v0.1.10 Compiling rustls-webpki v0.102.8 Compiling Inflector v0.11.4 Compiling http-body-util v0.1.2 Compiling num-bigint v0.4.6 Compiling backtrace v0.3.71 Compiling socket2 v0.4.10 Compiling ahash v0.8.11 Compiling vte_generate_state_changes v0.1.2 Compiling zeroize v1.8.1 Compiling eyre v0.6.12 Compiling adler v1.0.2 Compiling portable-atomic v1.10.0 Compiling bitcoin-internals v0.2.0 Compiling gimli v0.28.1 Compiling miniz_oxide v0.7.4 Compiling vte v0.11.1 Compiling addr2line v0.21.0 Compiling num-rational v0.4.2 Compiling near-chain-configs v0.23.0 Compiling pbkdf2 v0.11.0 Compiling nix v0.26.4 Compiling zstd v0.11.2+zstd.1.5.2 Compiling interactive-clap v0.2.10 Compiling zbus_names v2.6.1 Compiling bzip2 v0.4.4 Compiling xattr v1.3.1 Compiling quote v1.0.37 Compiling webpki-roots v0.26.7 Compiling async-executor v1.13.1 Compiling async-broadcast v0.5.1 Compiling zbus_macros v3.15.2 Compiling serde_urlencoded v0.7.1 Compiling rustls-pemfile v2.2.0 Compiling tracing-error v0.2.1 Compiling num-iter v0.1.45 Compiling derivative v2.2.0 Compiling num-complex v0.4.6 Compiling async-recursion v1.1.1 Compiling digest v0.9.0 Compiling mio v0.8.11 Compiling ordered-stream v0.2.0 Compiling sync_wrapper v1.0.2 Compiling xdg-home v1.3.0 Compiling object v0.32.2 Compiling encoding_rs v0.8.35 Compiling tinyvec_macros v0.1.1 Compiling radium v0.7.0 Compiling option-ext v0.2.0 Compiling ipnet v2.10.1 Compiling uuid v0.8.2 Compiling rustc-demangle v0.1.24 Compiling constant_time_eq v0.1.5 Compiling indenter v0.3.3 Compiling owo-colors v3.5.0 Compiling zip v0.6.6 Compiling color-spantrace v0.2.1 Compiling ureq v2.12.1 Compiling dirs-sys v0.4.1 Compiling tinyvec v1.8.0 Compiling zbus v3.15.2 Compiling signal-hook-mio v0.2.4 Compiling num v0.4.3 Compiling tar v0.4.43 Compiling near-jsonrpc-primitives v0.23.0 Compiling vt100 v0.15.2 Compiling near-abi v0.4.3 Compiling phf_shared v0.10.0 Compiling uriparse v0.6.4 Compiling console v0.15.8 Compiling near_schemafy_core v0.7.0 Compiling hkdf v0.12.4 Compiling cbc v0.1.2 Compiling serde_spanned v0.6.8 Compiling scroll_derive v0.11.1 Compiling crypto-mac v0.9.1 Compiling block-buffer v0.9.0 Compiling fs2 v0.4.3 Compiling is-docker v0.2.0 Compiling csv-core v0.1.11 Compiling opaque-debug v0.3.1 Compiling pin-project-lite v0.2.15 Compiling fallible-iterator v0.2.0 Compiling minimal-lexical v0.2.1 Compiling rust_decimal v1.36.0 Compiling camino v1.1.9 Compiling same-file v1.0.6 Compiling precomputed-hash v0.1.1 Compiling iana-time-zone v0.1.61 Compiling tap v1.0.1 Compiling hex v0.3.2 Compiling unicode-width v0.2.0 Compiling unicode-segmentation v1.12.0 Compiling number_prefix v0.4.0 Compiling new_debug_unreachable v1.0.6 Compiling is_executable v0.1.2 Compiling near-sandbox-utils v0.8.0 Compiling hex-conservative v0.1.2 Compiling binary-install v0.2.0 Compiling bitcoin_hashes v0.13.0 Compiling string_cache v0.8.7 Compiling indicatif v0.17.9 Compiling newline-converter v0.3.0 Compiling wyz v0.5.1 Compiling walkdir v2.5.0 Compiling nom v7.1.3 Compiling sha2 v0.9.9 Compiling csv v1.3.1 Compiling is-wsl v0.4.0 Compiling scroll v0.11.0 Compiling hmac v0.9.0 Compiling secret-service v3.1.0 Compiling near_schemafy_lib v0.7.0 Compiling hashbrown v0.14.5 Compiling crossterm v0.25.0 Compiling unicode-normalization v0.1.22 Compiling dirs v5.0.1 Compiling color-eyre v0.6.3 Compiling debugid v0.7.3 Compiling near-token v0.2.1 Compiling term v0.7.0 Compiling tempfile v3.14.0 Compiling brownstone v1.1.0 Compiling fuzzy-matcher v0.3.7 Compiling linux-keyutils v0.2.4 Compiling fxhash v0.2.1 Compiling is-terminal v0.4.13 Compiling memmap2 v0.5.10 Compiling plain v0.2.3 Compiling names v0.14.0 Compiling encode_unicode v1.0.0 Compiling funty v2.0.0 Compiling smawk v0.3.2 Compiling bs58 v0.5.1 Compiling scroll v0.10.2 Compiling joinery v2.1.0 Compiling xml-rs v0.8.24 Compiling pathdiff v0.2.3 Compiling unicode-linebreak v0.1.5 Compiling home v0.5.9 Compiling shell-escape v0.1.5 Compiling indent_write v2.2.0 Compiling prettyplease v0.1.25 Compiling nom-supreme v0.6.0 Compiling elementtree v0.7.0 Compiling textwrap v0.16.1 Compiling open v5.3.1 Compiling pdb v0.7.0 Compiling bitvec v1.0.1 Compiling prettytable v0.10.0 Compiling goblin v0.5.4 Compiling symbolic-common v8.8.0 Compiling keyring v2.3.3 Compiling inquire v0.7.5 Compiling shellexpand v3.1.0 Compiling bip39 v2.1.0 Compiling near-abi-client-impl v0.1.1 Compiling wasmparser v0.211.1 Compiling slipped10 v0.4.6 Compiling toml v0.8.19 Compiling tracing-indicatif v0.3.8 Compiling gimli v0.26.2 Compiling near-gas v0.2.5 Compiling zip v0.5.13 Compiling env_filter v0.1.2 Compiling linked-hash-map v0.5.6 Compiling cargo-platform v0.1.9 Compiling smart-default v0.7.1 Compiling lazycell v1.3.0 Compiling dmsort v1.0.2 Compiling wasmparser v0.83.0 Compiling shell-words v1.1.0 Compiling humantime v2.1.0 Compiling near-sandbox-utils v0.9.0 Compiling easy-ext v1.0.2 Compiling near-sdk-macros v5.6.0 Compiling env_logger v0.11.5 Compiling symbolic-debuginfo v8.8.0 Compiling cargo_metadata v0.18.1 Compiling near-abi-client-macros v0.1.1 Compiling near-workspaces v0.11.1 Compiling strum_macros v0.26.4 Compiling jsonptr v0.4.7 Compiling colored v2.2.0 Compiling atty v0.2.14 Compiling libloading v0.8.6 Compiling dunce v1.0.5 Compiling near-sandbox-utils v0.12.0 Compiling strum v0.26.3 Compiling convert_case v0.5.0 Compiling json-patch v2.0.0 Compiling near-abi-client v0.1.1 Compiling tokio-retry v0.3.0 Compiling near-token v0.3.0 Compiling near-gas v0.3.0 Compiling near-sys v0.2.2 Compiling near-sdk v5.6.0 Compiling crypto-hash v0.3.4 Compiling cargo-util v0.1.2 Compiling tokio-native-tls v0.3.1 Compiling hyper-tls v0.6.0 Compiling reqwest v0.12.9 Compiling near-jsonrpc-client v0.10.1 Compiling near-socialdb-client v0.3.2 Compiling near-cli-rs v0.11.1 Compiling cargo-near v0.6.4 Compiling chat_contract_tests v0.0.1 (/home/runner/work/polyglot/polyglot/apps/chat/contract/tests) Finished `release` profile [optimized] target(s) in 4m 29s Running `/home/runner/work/polyglot/polyglot/workspace/target/release/chat_contract_tests` Installed near-sandbox into /home/runner/work/polyglot/polyglot/workspace/target/release/build/near-sandbox-utils-cdf556a7364ec456/out/.near/near-sandbox-1.40.0_7dd0b5993577f592be15eb102e5a3da37be66271/near-sandbox new: ExecutionFinalResult { total_gas_burnt: NearGas { inner: 1658608726972, }, transaction: ExecutionOutcome { transaction_hash: BB7XeshRM8KgUuzNKSsJAPGTYRMJotFYUXuHKNE1fDZp, block_hash: E3MXNx5CQtuXXaRW2EEzHpmdYieqUeS742msgNhiYUah, logs: [], receipt_ids: [ 8WHMow9wbdtqKVVexxxGuqfztcN58M3C8iG6CwEAGWJs, ], gas_burnt: NearGas { inner: 308066207802, }, tokens_burnt: NearToken { inner: 30806620780200000000, }, executor_id: AccountId( "dev-20250410081948-90996159453430", ), status: SuccessReceiptId(8WHMow9wbdtqKVVexxxGuqfztcN58M3C8iG6CwEAGWJs), }, receipts: [ ExecutionOutcome { transaction_hash: 8WHMow9wbdtqKVVexxxGuqfztcN58M3C8iG6CwEAGWJs, block_hash: E3MXNx5CQtuXXaRW2EEzHpmdYieqUeS742msgNhiYUah, logs: [], receipt_ids: [ 7wqCxnH5zZFB4iGHryrbQAtS55WW3NfzpYBtgmT8qT4K, ], gas_burnt: NearGas { inner: 1350542519170, }, tokens_burnt: NearToken { inner: 135054251917000000000, }, executor_id: AccountId( "dev-20250410081948-90996159453430", ), status: SuccessValue(''), }, ], status: SuccessValue(''), } total_gas_burnt_usd: 0.001107950629617296 outcome (success: true): outcome_gas_burnt_usd: 0.000205788226811736 outcome_tokens_burnt_usd: 0.0 outcome (success: true): outcome_gas_burnt_usd: 0.0009021624028055599 outcome_tokens_burnt_usd: 0.0 claim_alias(contract, ''): ExecutionFinalResult { total_gas_burnt: NearGas { inner: 2226131734025, }, transaction: ExecutionOutcome { transaction_hash: DSikfWeZLUaigRo3oV5jWB6NuLkp5WadTaasvUAjVQpD, block_hash: 6TiSBsXYbzjcjwU2JnhKn3GPK3xyGEJpbhk7xhvnM9Aq, logs: [], receipt_ids: [ CY5SMiTeBhFNiXwJG5vTe9yBXnzYxSfACoRKVSHKKmVK, ], gas_burnt: NearGas { inner: 308110926482, }, tokens_burnt: NearToken { inner: 30811092648200000000, }, executor_id: AccountId( "dev-20250410081948-90996159453430", ), status: SuccessReceiptId(CY5SMiTeBhFNiXwJG5vTe9yBXnzYxSfACoRKVSHKKmVK), }, receipts: [ ExecutionOutcome { transaction_hash: CY5SMiTeBhFNiXwJG5vTe9yBXnzYxSfACoRKVSHKKmVK, block_hash: 6TiSBsXYbzjcjwU2JnhKn3GPK3xyGEJpbhk7xhvnM9Aq, logs: [], receipt_ids: [ 2DFTfMFk5gJ7fw5WMcYZZpHkXz49CBuGwSPRkp9dFtQp, ], gas_burnt: NearGas { inner: 1694838245043, }, tokens_burnt: NearToken { inner: 169483824504300000000, }, executor_id: AccountId( "dev-20250410081948-90996159453430", ), status: Failure(ActionError(ActionError { index: Some(0), kind: FunctionCallError(ExecutionError("Smart contract panicked: chat_contract.claim_alias / invalid alias")) })), }, ExecutionOutcome { transaction_hash: 2DFTfMFk5gJ7fw5WMcYZZpHkXz49CBuGwSPRkp9dFtQp, block_hash: 5UbX8YGvzMVxy6vAGTDsWacZkjXUjBEWkFCCL5p6gZ7N, logs: [], receipt_ids: [], gas_burnt: NearGas { inner: 223182562500, }, tokens_burnt: NearToken { inner: 0, }, executor_id: AccountId( "dev-20250410081948-90996159453430", ), status: SuccessValue(''), }, ], status: Failure(ActionError(ActionError { index: Some(0), kind: FunctionCallError(ExecutionError("Smart contract panicked: chat_contract.claim_alias / invalid alias")) })), } total_gas_burnt_usd: 0.0014870559983286998 outcome (success: true): outcome_gas_burnt_usd: 0.000205818098889976 outcome_tokens_burnt_usd: 0.0 outcome (success: false): outcome_gas_burnt_usd: 0.0011321519476887238 outcome_tokens_burnt_usd: 0.0 outcome (success: true): outcome_gas_burnt_usd: 0.00014908595175 outcome_tokens_burnt_usd: 0.0 dev_create_account(account1): Account { id: AccountId( "dev-20250410081950-24008756891722", ), } generate_cid_borsh(account1): ViewResultDetails { result: [59, 0, 0, 0, 98, 97, 102, 107, 114, 101, 105, 104, 100, 119, 100, 99, 101, 102, 103, 104, 52, 100, 113, 107, 106, 118, 54, 55, 117, 122, 99, 109, 119, 55, 111, 106, 101, 101, 54, 120, 101, 100, 122, 100, 101, 116, 111, 106, 117, 122, 106, 101, 118, 116, 101, 110, 120, 113, 117, 118, 121, 107, 117], logs: [] } claim_alias(account1, alias1): ExecutionFinalResult { total_gas_burnt: NearGas { inner: 3623201724161, }, transaction: ExecutionOutcome { transaction_hash: 6s3s6hFVzfVu4Za5quVwUbZPAEchkHddBQeuDxgRYJb8, block_hash: 7vXWuJNreZNhgBKiwfDByxVHf5QP4kub9YoNFfZobmQh, logs: [], receipt_ids: [ ByGWfdMftgK3sVR44myJrScSd8oKxZEopketvsf1Uvfe, ], gas_burnt: NearGas { inner: 308124342086, }, tokens_burnt: NearToken { inner: 30812434208600000000, }, executor_id: AccountId( "dev-20250410081950-24008756891722", ), status: SuccessReceiptId(ByGWfdMftgK3sVR44myJrScSd8oKxZEopketvsf1Uvfe), }, receipts: [ ExecutionOutcome { transaction_hash: ByGWfdMftgK3sVR44myJrScSd8oKxZEopketvsf1Uvfe, block_hash: BwdWqExan9yJryD9E1SXV5mtaRu2CSJZRdZfzcaCHXAU, logs: [ "08:19:51 \u{1b}[94md\u{1b}[39m #1 chat_contract.claim_alias / { alias = \"alias1\"; block_timestamp = 1744273191660062316; signer_account_id = \"dev-20250410081950-24008756891722\"; predecessor_account_id = \"dev-20250410081950-24008756891722\" }\n08:19:51 \u{1b}[94md\u{1b}[39m #2 chat_contract.claim_alias / { account_alias = None }", ], receipt_ids: [ CaBUPoRM2JmtrPTLVTbBfo7Se2bvEdQNZqMDQWVGmPKo, ], gas_burnt: NearGas { inner: 3091894819575, }, tokens_burnt: NearToken { inner: 309189481957500000000, }, executor_id: AccountId( "dev-20250410081948-90996159453430", ), status: SuccessValue(''), }, ExecutionOutcome { transaction_hash: CaBUPoRM2JmtrPTLVTbBfo7Se2bvEdQNZqMDQWVGmPKo, block_hash: ELAebFiMHBENKdhvokuaiqcvCq7wfcSX7uaAUcsakEP4, logs: [], receipt_ids: [], gas_burnt: NearGas { inner: 223182562500, }, tokens_burnt: NearToken { inner: 0, }, executor_id: AccountId( "dev-20250410081950-24008756891722", ), status: SuccessValue(''), }, ], status: SuccessValue(''), } total_gas_burnt_usd: 0.002420298751739548 outcome (success: true): outcome_gas_burnt_usd: 0.000205827060513448 outcome_tokens_burnt_usd: 0.0 outcome (success: true): outcome_gas_burnt_usd: 0.0020653857394760996 outcome_tokens_burnt_usd: 0.0 outcome (success: true): outcome_gas_burnt_usd: 0.00014908595175 outcome_tokens_burnt_usd: 0.0 claim_alias(account1, alias1): ExecutionFinalResult { total_gas_burnt: NearGas { inner: 3756886599491, }, transaction: ExecutionOutcome { transaction_hash: BBokBJbrzFnPErEhvnVyDakWytWYLquxtGMzDAMtHHVN, block_hash: 2iZq5icVxQ7F5APE8meEbCkYXWLCmspVoLmLoBFBXvCs, logs: [], receipt_ids: [ 7nNyFH2FYxzgJ6FAcgY71evJAY6XpFMwmytXj1FfST7Q, ], gas_burnt: NearGas { inner: 308124342086, }, tokens_burnt: NearToken { inner: 30812434208600000000, }, executor_id: AccountId( "dev-20250410081950-24008756891722", ), status: SuccessReceiptId(7nNyFH2FYxzgJ6FAcgY71evJAY6XpFMwmytXj1FfST7Q), }, receipts: [ ExecutionOutcome { transaction_hash: 7nNyFH2FYxzgJ6FAcgY71evJAY6XpFMwmytXj1FfST7Q, block_hash: 2gpCtW6gmg6gm8C8EVb5yXDWiguV5SetvFbNitk9YjyS, logs: [ "08:19:52 \u{1b}[94md\u{1b}[39m #1 chat_contract.claim_alias / { alias = \"alias1\"; block_timestamp = 1744273192670821975; signer_account_id = \"dev-20250410081950-24008756891722\"; predecessor_account_id = \"dev-20250410081950-24008756891722\" }\n08:19:52 \u{1b}[94md\u{1b}[39m #2 chat_contract.claim_alias / { account_alias = Some(\"alias1\") }", ], receipt_ids: [ 8cAvmQiC19ecPXcLYhw69CVcTEziDSgyBEirKJXtbZGP, ], gas_burnt: NearGas { inner: 3225579694905, }, tokens_burnt: NearToken { inner: 322557969490500000000, }, executor_id: AccountId( "dev-20250410081948-90996159453430", ), status: SuccessValue(''), }, ExecutionOutcome { transaction_hash: 8cAvmQiC19ecPXcLYhw69CVcTEziDSgyBEirKJXtbZGP, block_hash: 6wpSmDqfKVgn6sy7s6QAVs5FoCcwvWEcAoCgeWx2NfvH, logs: [], receipt_ids: [], gas_burnt: NearGas { inner: 223182562500, }, tokens_burnt: NearToken { inner: 0, }, executor_id: AccountId( "dev-20250410081950-24008756891722", ), status: SuccessValue(''), }, ], status: SuccessValue(''), } total_gas_burnt_usd: 0.0025096002484599877 outcome (success: true): outcome_gas_burnt_usd: 0.000205827060513448 outcome_tokens_burnt_usd: 0.0 outcome (success: true): outcome_gas_burnt_usd: 0.00215468723619654 outcome_tokens_burnt_usd: 0.0 outcome (success: true): outcome_gas_burnt_usd: 0.00014908595175 outcome_tokens_burnt_usd: 0.0 get_account_info(account1): Some( ( "alias1", 1744273192670821975, 0, ), ) get_alias_map(account1, alias1): Some( { AccountId( "dev-20250410081950-24008756891722", ): ( 1744273192670821975, 0, ), }, ) dev_create_account(account2): Account { id: AccountId( "dev-20250410081953-82393070956530", ), } claim_alias(alias2): ExecutionFinalResult { total_gas_burnt: NearGas { inner: 3855185195273, }, transaction: ExecutionOutcome { transaction_hash: JCyN9gLTNxPgd2ivEtWQV3u1FQ8pyW1VgUyFuSpL18JT, block_hash: 2oeDMp9uZz7ChUWrVpE241fXMn8mvQayq63VMkCVtNtZ, logs: [], receipt_ids: [ F31KsbvDn8HFd8kaHhTvvMutPW97eWesDjuCEciyRwMb, ], gas_burnt: NearGas { inner: 308124342086, }, tokens_burnt: NearToken { inner: 30812434208600000000, }, executor_id: AccountId( "dev-20250410081953-82393070956530", ), status: SuccessReceiptId(F31KsbvDn8HFd8kaHhTvvMutPW97eWesDjuCEciyRwMb), }, receipts: [ ExecutionOutcome { transaction_hash: F31KsbvDn8HFd8kaHhTvvMutPW97eWesDjuCEciyRwMb, block_hash: 3LeXjH4do775rDmpD6hyp1ZMhzbAieL2ZVSg2N47rpR1, logs: [ "08:19:54 \u{1b}[94md\u{1b}[39m #1 chat_contract.claim_alias / { alias = \"alias2\"; block_timestamp = 1744273194691286718; signer_account_id = \"dev-20250410081953-82393070956530\"; predecessor_account_id = \"dev-20250410081953-82393070956530\" }\n08:19:54 \u{1b}[94md\u{1b}[39m #2 chat_contract.claim_alias / { account_alias = None }", ], receipt_ids: [ HHcLMucpaodyFPtQwkSFNoGNXvx7bChMVMPFUeQyBNJA, ], gas_burnt: NearGas { inner: 3323878290687, }, tokens_burnt: NearToken { inner: 332387829068700000000, }, executor_id: AccountId( "dev-20250410081948-90996159453430", ), status: SuccessValue(''), }, ExecutionOutcome { transaction_hash: HHcLMucpaodyFPtQwkSFNoGNXvx7bChMVMPFUeQyBNJA, block_hash: 6up75tGBBoFv7pHmNr5d8eNjw9EMmSa6a1tVAtHqsqEV, logs: [], receipt_ids: [], gas_burnt: NearGas { inner: 223182562500, }, tokens_burnt: NearToken { inner: 0, }, executor_id: AccountId( "dev-20250410081953-82393070956530", ), status: SuccessValue(''), }, ], status: SuccessValue(''), } total_gas_burnt_usd: 0.0025752637104423637 outcome (success: true): outcome_gas_burnt_usd: 0.000205827060513448 outcome_tokens_burnt_usd: 0.0 outcome (success: true): outcome_gas_burnt_usd: 0.002220350698178916 outcome_tokens_burnt_usd: 0.0 outcome (success: true): outcome_gas_burnt_usd: 0.00014908595175 outcome_tokens_burnt_usd: 0.0 get_account_info(account2): Some( ( "alias2", 1744273194691286718, 0, ), ) get_alias_map_borsh(alias2): Some( { AccountId( "dev-20250410081953-82393070956530", ): ( 1744273194691286718, 0, ), }, ) claim_alias(account2, alias1): ExecutionFinalResult { total_gas_burnt: NearGas { inner: 4046928093308, }, transaction: ExecutionOutcome { transaction_hash: 2Yi98iTsnaR4aS3PxriDBgPNx8JboimnmaPeJMvaE3TN, block_hash: u4Bscg8W1pPhxxrZ1fPzEgQWwGk7Vh1u7nDL7E8Gf1H, logs: [], receipt_ids: [ FjrPPMpvwrSX1x2jftatg9P5y8xPkJfMBDmEfDk4gQW5, ], gas_burnt: NearGas { inner: 308124342086, }, tokens_burnt: NearToken { inner: 30812434208600000000, }, executor_id: AccountId( "dev-20250410081953-82393070956530", ), status: SuccessReceiptId(FjrPPMpvwrSX1x2jftatg9P5y8xPkJfMBDmEfDk4gQW5), }, receipts: [ ExecutionOutcome { transaction_hash: FjrPPMpvwrSX1x2jftatg9P5y8xPkJfMBDmEfDk4gQW5, block_hash: FbSRsSvCfPctTVt8GPugyXUveoxZeNqAZ9skcUU7F2eC, logs: [ "08:19:55 \u{1b}[94md\u{1b}[39m #1 chat_contract.claim_alias / { alias = \"alias1\"; block_timestamp = 1744273195700612095; signer_account_id = \"dev-20250410081953-82393070956530\"; predecessor_account_id = \"dev-20250410081953-82393070956530\" }\n08:19:55 \u{1b}[94md\u{1b}[39m #2 chat_contract.claim_alias / { account_alias = Some(\"alias2\") }", ], receipt_ids: [ XW3mY9vsibjcey8ekD2TAbXaHnRDwuaLi4EddDpY3BJ, ], gas_burnt: NearGas { inner: 3515621188722, }, tokens_burnt: NearToken { inner: 351562118872200000000, }, executor_id: AccountId( "dev-20250410081948-90996159453430", ), status: SuccessValue(''), }, ExecutionOutcome { transaction_hash: XW3mY9vsibjcey8ekD2TAbXaHnRDwuaLi4EddDpY3BJ, block_hash: AYFgBpmk7iCtbFmNKBXkx3RR5egTt4kr4eAeAJBk5tRZ, logs: [], receipt_ids: [], gas_burnt: NearGas { inner: 223182562500, }, tokens_burnt: NearToken { inner: 0, }, executor_id: AccountId( "dev-20250410081953-82393070956530", ), status: SuccessValue(''), }, ], status: SuccessValue(''), } total_gas_burnt_usd: 0.0027033479663297437 outcome (success: true): outcome_gas_burnt_usd: 0.000205827060513448 outcome_tokens_burnt_usd: 0.0 outcome (success: true): outcome_gas_burnt_usd: 0.002348434954066296 outcome_tokens_burnt_usd: 0.0 outcome (success: true): outcome_gas_burnt_usd: 0.00014908595175 outcome_tokens_burnt_usd: 0.0 get_account_info(account2): Some( ( "alias1", 1744273195700612095, 1, ), ) get_alias_map(account2, alias1): Some( { AccountId( "dev-20250410081950-24008756891722", ): ( 1744273192670821975, 0, ), AccountId( "dev-20250410081953-82393070956530", ): ( 1744273195700612095, 1, ), }, ) get_alias_map(account2, alias2): Some( {}, ) claim_alias(account1, alias2): ExecutionFinalResult { total_gas_burnt: NearGas { inner: 4044167067296, }, transaction: ExecutionOutcome { transaction_hash: BAKoEZtunZd9W3VxheDvayURcpKgsqxmdgRTkn8nt6rj, block_hash: BLUrtpSH9gtbVw5Xw2FhYXwtRJqzgAt7vxwJbiRXGbsF, logs: [], receipt_ids: [ 7crpMLMBHBo6wa8jWhoeLxfwuNMy1XXDrY9S6Zz7drEL, ], gas_burnt: NearGas { inner: 308124342086, }, tokens_burnt: NearToken { inner: 30812434208600000000, }, executor_id: AccountId( "dev-20250410081950-24008756891722", ), status: SuccessReceiptId(7crpMLMBHBo6wa8jWhoeLxfwuNMy1XXDrY9S6Zz7drEL), }, receipts: [ ExecutionOutcome { transaction_hash: 7crpMLMBHBo6wa8jWhoeLxfwuNMy1XXDrY9S6Zz7drEL, block_hash: 4FTHkPndH4f21SHAaQvf1WkJWA7oZGHggfs2vxMZXRDY, logs: [ "08:19:56 \u{1b}[94md\u{1b}[39m #1 chat_contract.claim_alias / { alias = \"alias2\"; block_timestamp = 1744273196711847549; signer_account_id = \"dev-20250410081950-24008756891722\"; predecessor_account_id = \"dev-20250410081950-24008756891722\" }\n08:19:56 \u{1b}[94md\u{1b}[39m #2 chat_contract.claim_alias / { account_alias = Some(\"alias1\") }", ], receipt_ids: [ 99ToL53fGdFRceNyCXQhcDijAoe1nQwZpqG5MVE1Y5z8, ], gas_burnt: NearGas { inner: 3512860162710, }, tokens_burnt: NearToken { inner: 351286016271000000000, }, executor_id: AccountId( "dev-20250410081948-90996159453430", ), status: SuccessValue(''), }, ExecutionOutcome { transaction_hash: 99ToL53fGdFRceNyCXQhcDijAoe1nQwZpqG5MVE1Y5z8, block_hash: 8fVUujWDsfJkiC98HyHUGxcX39N6WeGn9HmuX1hGqrva, logs: [], receipt_ids: [], gas_burnt: NearGas { inner: 223182562500, }, tokens_burnt: NearToken { inner: 0, }, executor_id: AccountId( "dev-20250410081950-24008756891722", ), status: SuccessValue(''), }, ], status: SuccessValue(''), } total_gas_burnt_usd: 0.0027015036009537283 outcome (success: true): outcome_gas_burnt_usd: 0.000205827060513448 outcome_tokens_burnt_usd: 0.0 outcome (success: true): outcome_gas_burnt_usd: 0.0023465905886902796 outcome_tokens_burnt_usd: 0.0 outcome (success: true): outcome_gas_burnt_usd: 0.00014908595175 outcome_tokens_burnt_usd: 0.0 get_account_info(account1): Some( ( "alias2", 1744273196711847549, 0, ), ) get_alias_map(account1, alias2): Some( { AccountId( "dev-20250410081950-24008756891722", ): ( 1744273196711847549, 0, ), }, ) get_alias_map(account1, alias1): Some( { AccountId( "dev-20250410081953-82393070956530", ): ( 1744273195700612095, 1, ), }, ) claim_alias(account1, alias1): ExecutionFinalResult { total_gas_burnt: NearGas { inner: 4046857336292, }, transaction: ExecutionOutcome { transaction_hash: CKTEqo28aYpKKtismnacyQnJJAQPbzHptMQzJZaDbyyz, block_hash: 2BCBvGpRt7XrDYaTmRmDsiMZU1Em6fgQx3JpqYu79Aym, logs: [], receipt_ids: [ AqLhh8ikPop9JDotcLLNEJkEqNaStrDEFmYaLwYkSdXz, ], gas_burnt: NearGas { inner: 308124342086, }, tokens_burnt: NearToken { inner: 30812434208600000000, }, executor_id: AccountId( "dev-20250410081950-24008756891722", ), status: SuccessReceiptId(AqLhh8ikPop9JDotcLLNEJkEqNaStrDEFmYaLwYkSdXz), }, receipts: [ ExecutionOutcome { transaction_hash: AqLhh8ikPop9JDotcLLNEJkEqNaStrDEFmYaLwYkSdXz, block_hash: BnkVTe1cmTsmksd3DmTozLwiNHoPo2RNB2UJF5b592pV, logs: [ "08:19:57 \u{1b}[94md\u{1b}[39m #1 chat_contract.claim_alias / { alias = \"alias1\"; block_timestamp = 1744273197721924735; signer_account_id = \"dev-20250410081950-24008756891722\"; predecessor_account_id = \"dev-20250410081950-24008756891722\" }\n08:19:57 \u{1b}[94md\u{1b}[39m #2 chat_contract.claim_alias / { account_alias = Some(\"alias2\") }", ], receipt_ids: [ BVdcBi8cXVavAHHFysnXqU8uMyR5jm8wy8tNaGxk9Xx4, ], gas_burnt: NearGas { inner: 3515550431706, }, tokens_burnt: NearToken { inner: 351555043170600000000, }, executor_id: AccountId( "dev-20250410081948-90996159453430", ), status: SuccessValue(''), }, ExecutionOutcome { transaction_hash: BVdcBi8cXVavAHHFysnXqU8uMyR5jm8wy8tNaGxk9Xx4, block_hash: CU9yvZEpkxFdW4GEovoAiVVET4a2xinLzopiU8ts4bfP, logs: [], receipt_ids: [], gas_burnt: NearGas { inner: 223182562500, }, tokens_burnt: NearToken { inner: 0, }, executor_id: AccountId( "dev-20250410081950-24008756891722", ), status: SuccessValue(''), }, ], status: SuccessValue(''), } total_gas_burnt_usd: 0.002703300700643056 outcome (success: true): outcome_gas_burnt_usd: 0.000205827060513448 outcome_tokens_burnt_usd: 0.0 outcome (success: true): outcome_gas_burnt_usd: 0.002348387688379608 outcome_tokens_burnt_usd: 0.0 outcome (success: true): outcome_gas_burnt_usd: 0.00014908595175 outcome_tokens_burnt_usd: 0.0 get_account_info(account1): Some( ( "alias1", 1744273197721924735, 1, ), ) get_alias_map(account1, alias1): Some( { AccountId( "dev-20250410081953-82393070956530", ): ( 1744273195700612095, 0, ), AccountId( "dev-20250410081950-24008756891722", ): ( 1744273197721924735, 1, ), }, ) get_alias_map(account1, alias2): Some( {}, )
In [ ]:
{ pwsh ../apps/spiral/temp/build.ps1 } | Invoke-Block
00:00:00 d #1 spiral.main / { args = Array(MutCell(["dib", "--path", "cube.dib"])) } 00:00:00 d #2 runtime.execute_with_options / { file_name = dotnet; arguments = ["repl", "--exit-after-run", "--run", "/home/runner/work/polyglot/polyglot/apps/spiral/temp/cube/cube.dib", "--output-path", "/home/runner/work/polyglot/polyglot/apps/spiral/temp/cube/cube.dib.ipynb"]; options = { command = dotnet repl --exit-after-run --run "/home/runner/work/polyglot/polyglot/apps/spiral/temp/cube/cube.dib" --output-path "/home/runner/work/polyglot/polyglot/apps/spiral/temp/cube/cube.dib.ipynb"; cancellation_token = None; environment_variables = Array(MutCell([("TRACE_LEVEL", "Verbose"), ("AUTOMATION", "True")])); on_line = None; stdin = None; trace = false; working_directory = None } } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ # cube > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## cube > > ── fsharp ────────────────────────────────────────────────────────────────────── > open System > open System.Threading.Tasks > open System.Text > > ── fsharp ────────────────────────────────────────────────────────────────────── > let width = 160 > let height = 44 > let backgroundChar = '.' > let distanceFromCam = 100.0 > let k1 = 40.0 > let incrementSpeed = 0.6 > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### get_width > > ── spiral ────────────────────────────────────────────────────────────────────── > inl get_width () = > 160i32 > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### get_height > > ── spiral ────────────────────────────────────────────────────────────────────── > inl get_height () = > 44i32 > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### get_background_char > > ── spiral ────────────────────────────────────────────────────────────────────── > inl get_background_char () = > '.' > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### get_distance_from_cam > > ── spiral ────────────────────────────────────────────────────────────────────── > inl get_distance_from_cam () = > 100f64 > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### get_k1 > > ── spiral ────────────────────────────────────────────────────────────────────── > inl get_k1 () = > 40f64 > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### get_increment_speed > > ── spiral ────────────────────────────────────────────────────────────────────── > inl get_increment_speed () = > 0.6f64 > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### rotation > > ── fsharp ────────────────────────────────────────────────────────────────────── > type Rotation = { a: float; b: float; c: float } > > ── spiral ────────────────────────────────────────────────────────────────────── > type rotation = > { > a : f64 > b : f64 > c : f64 > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### cube > > ── fsharp ────────────────────────────────────────────────────────────────────── > type Cube = { cubeWidth: float; horizontalOffset: float } > > ── spiral ────────────────────────────────────────────────────────────────────── > type cube = > { > cube_width : f64 > horizontal_offset : f64 > } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### get_cubes > > ── fsharp ────────────────────────────────────────────────────────────────────── > let cubes = [[ > { cubeWidth = 20.0; horizontalOffset = -40.0 } > { cubeWidth = 10.0; horizontalOffset = 10.0 } > { cubeWidth = 5.0; horizontalOffset = 40.0 } > ]] > > ── spiral ────────────────────────────────────────────────────────────────────── > inl get_cubes () : list cube = > [[ > { cube_width = 20; horizontal_offset = -40 } > { cube_width = 10; horizontal_offset = 10 } > { cube_width = 5; horizontal_offset = 40 } > ]] > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### calculate_x > > ── fsharp ────────────────────────────────────────────────────────────────────── > let calculateX i j k (rot: Rotation) = > let a, b, c = rot.a, rot.b, rot.c > j * sin a * sin b * cos c - k * cos a * sin b * cos c + > j * cos a * sin c + k * sin a * sin c + i * cos b * cos c > > ── spiral ────────────────────────────────────────────────────────────────────── > inl calculate_x i j k (rot : rotation) = > inl a, b, c = rot.a, rot.b, rot.c > j * sin a * sin b * cos c - k * cos a * sin b * cos c + > j * cos a * sin c + k * sin a * sin c + i * cos b * cos c > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### calculate_y > > ── fsharp ────────────────────────────────────────────────────────────────────── > let calculateY i j k (rot: Rotation) = > let a, b, c = rot.a, rot.b, rot.c > j * cos a * cos c + k * sin a * cos c - > j * sin a * sin b * sin c + k * cos a * sin b * sin c - > i * cos b * sin c > > ── spiral ────────────────────────────────────────────────────────────────────── > inl calculate_y i j k (rot : rotation) = > inl a, b, c = rot.a, rot.b, rot.c > j * cos a * cos c + k * sin a * cos c - > j * sin a * sin b * sin c + k * cos a * sin b * sin c - > i * cos b * sin c > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### calculate_z > > ── fsharp ────────────────────────────────────────────────────────────────────── > let calculateZ i j k (rot: Rotation) = > let a, b, c = rot.a, rot.b, rot.c > k * cos a * cos b - j * sin a * cos b + i * sin b > > ── spiral ────────────────────────────────────────────────────────────────────── > inl calculate_z i j k (rot : rotation) = > inl a, b, c = rot.a, rot.b, rot.c > k * cos a * cos b - j * sin a * cos b + i * sin b > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### calculate_for_surface > > ── fsharp ────────────────────────────────────────────────────────────────────── > let calculateForSurface cubeX cubeY cubeZ ch rot horizontalOffset = > let x = calculateX cubeX cubeY cubeZ rot > let y = calculateY cubeX cubeY cubeZ rot > let z = calculateZ cubeX cubeY cubeZ rot + distanceFromCam > let ooz = 1.0 / z > let xp = int (float width / 2.0 + horizontalOffset + k1 * ooz * x * 2.0) > let yp = int (float height / 2.0 + k1 * ooz * y) > let idx = xp + yp * width > if idx >= 0 && idx < width * height > then Some (idx, (ooz, ch)) > else None > > ── spiral ────────────────────────────────────────────────────────────────────── > let calculate_for_surface cube_x cube_y cube_z ch rot horizontal_offset = > inl x = calculate_x cube_x cube_y cube_z rot > inl y = calculate_y cube_x cube_y cube_z rot > inl z = calculate_z cube_x cube_y cube_z rot + get_distance_from_cam () > inl ooz = 1.0 / z > inl xp = i32 (f64 (get_width ()) / 2.0 + horizontal_offset + get_k1 () * ooz > * x * 2.0) > inl yp = i32 (f64 (get_height ()) / 2.0 + get_k1 () * ooz * y) > inl idx = xp + yp * get_width () > if idx >= 0 && idx < get_width () * get_height () > then Some (idx, (ooz, ch)) > else None > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### frange > > ── fsharp ────────────────────────────────────────────────────────────────────── > let frange start stop step = > seq { > let mutable current = start > while (step > 0.0 && current < stop) || (step < 0.0 && current > stop) > do > yield current > current <- current + step > } > > ── spiral ────────────────────────────────────────────────────────────────────── > inl frange start stop step : _ f64 = > fun () => > inl current = mut start > loopw.while > fun () => (step > 0f64 && *current < stop) || (step < 0 && *current > > stop) > fun () => > *current |> yield > current <- *current + step > |> seq.new_seq > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### get_cube_points > > ── fsharp ────────────────────────────────────────────────────────────────────── > let getCubePoints (cube: Cube) rot = > let cw = cube.cubeWidth > let ho = cube.horizontalOffset > let cubeRange = frange (-cw) cw incrementSpeed > seq { > for cubeX in cubeRange do > for cubeY in cubeRange do > let x = > [[ > calculateForSurface cubeX cubeY (-cw) '@' rot ho > calculateForSurface cw cubeY cubeX '$' rot ho > calculateForSurface (-cw) cubeY (-cubeX) '~' rot ho > calculateForSurface (-cubeX) cubeY cw '#' rot ho > calculateForSurface cubeX (-cw) (-cubeY) ';' rot ho > calculateForSurface cubeX cw cubeY '+' rot ho > ]] > |> Seq.choose id > yield! x > } > > ── spiral ────────────────────────────────────────────────────────────────────── > inl get_cube_points (cube : cube) rot = > inl cw = cube.cube_width > inl ho = cube.horizontal_offset > inl cube_range = frange -cw cw (get_increment_speed ()) > inl cube_range = join cube_range > inl get cube_x cube_y = > [[ > calculate_for_surface cube_x cube_y -cw ';' rot ho > calculate_for_surface cw cube_y cube_x '\\' rot ho > calculate_for_surface -cw cube_y -cube_x '/' rot ho > calculate_for_surface -cube_x cube_y cw '=' rot ho > calculate_for_surface cube_x -cw -cube_y '>' rot ho > calculate_for_surface cube_x cw cube_y '<' rot ho > ]] > |> listm'.box > inl get = join get > inl box x : _ (i32 * f64 * char) = > optionm'.box x > inl box = join box > fun () => > backend_switch { > Fsharp = fun () => > $'for cube_x in !cube_range do' > $'for cube_y in !cube_range do' > $'let x = !get cube_x cube_y |> Seq.choose !box ' > $'yield\! x' : () > Python = fun () => > $'cube_range = !cube_range ' > $'get = !get ' > $'box = !box ' > $'for cube_x in cube_range:' > $' for cube_y in cube_range:' > $' x = get(cube_x)(cube_y)' > $' for i in x:' > $' i_ = box(i)' > $' if i_ is not None: yield i' : () > } > |> seq.new_seq > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### generate_frame > > ── fsharp ────────────────────────────────────────────────────────────────────── > let generateFrame rot = > let updates = > cubes > |> Seq.collect (fun cube -> getCubePoints cube rot) > let buffer = Array.create (width * height) None > updates > |> Seq.iter (fun (idx, (ooz, ch)) -> > match buffer.[[idx]] with > | Some (prevOoz, _) when prevOoz >= ooz -> () > | _ -> buffer.[[idx]] <- Some (ooz, ch) > ) > let sb = StringBuilder() > for row in 0 .. (height - 1) do > for col in 0 .. (width - 1) do > let idx = col + row * width > let ch = > match buffer.[[idx]] with > | Some (_, ch) -> ch > | None -> backgroundChar > sb.Append(ch) |> ignore > sb.AppendLine() |> ignore > sb.ToString() > > ── fsharp ────────────────────────────────────────────────────────────────────── > //// test > > let rot = { a = 0.0; b = 0.0; c = 0.0 } > let frame = generateFrame rot > Console.Write frame > > ── [ 38.36ms - stdout ] ──────────────────────────────────────────────────────── > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ....................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$................... > ................................................................................ > │ > ....................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$................... > ................................................................................ > │ > ....................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$................... > ................................................................................ > │ > ....................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$................... > ................................................................................ > │ > ....................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$................... > ................................................................................ > │ > ....................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$................... > .@@@@@@@@@@@@@@@@@$............................................................. > │ > ....................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$................... > .@@@@@@@@@@@@@@@@@$............................................................. > │ > ....................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$................... > .@@@@@@@@@@@@@@@@@$................@@@@@@@@@$................................... > │ > ....................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$................... > .@@@@@@@@@@@@@@@@@$................@@@@@@@@@$................................... > │ > ....................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$................... > .@@@@@@@@@@@@@@@@@$................@@@@@@@@@$................................... > │ > ....................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$................... > .@@@@@@@@@@@@@@@@@$................@@@@@@@@@$................................... > │ > ....................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$................... > .@@@@@@@@@@@@@@@@@$................@@@@@@@@@$................................... > │ > ....................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$................... > .@@@@@@@@@@@@@@@@@$................+++++++++.................................... > │ > ....................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$................... > .@@@@@@@@@@@@@@@@@$............................................................. > │ > ....................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$................... > .+++++++++++++++++$............................................................. > │ > ....................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$................... > ................................................................................ > │ > ....................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$................... > ................................................................................ > │ > ....................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$................... > ................................................................................ > │ > ....................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$................... > ................................................................................ > │ > ....................@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$................... > ................................................................................ > │ > ....................++++++++++++++++++++++++++++++++++++++++.................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > > ── spiral ────────────────────────────────────────────────────────────────────── > inl generate_frame rot = > inl updates : seq.seq' (int * (f64 * char)) = > inl get_cube_points' cube : seq.seq' (int * (f64 * char)) = > get_cube_points cube rot > inl cubes = get_cubes () |> listm'.box > backend_switch { > Fsharp = fun () => > inl get_cube_points' = join get_cube_points' > (cubes |> $'Seq.collect !get_cube_points' ') : seq.seq' (int * > (f64 * char)) > Python = fun () => > $'cubes = !cubes ' > $'get_cube_points = !get_cube_points' ' > $'[[x for cube in cubes for x in get_cube_points(*cube)]]' : > seq.seq' (int * (f64 * char)) > } > inl none : _ (f64 * char) = None > inl width = get_width () > inl height = get_height () > inl buffer = > backend_switch { > Fsharp = fun () => > $'Array.create (!width * !height) !none ' : a int (option (f64 * > char)) > Python = fun () => > $'[[!none for _ in range(!width * !height)]]' : a int (option > (f64 * char)) > } > > inl fn idx ((ooz : f64), (ch : char)) = > match buffer |> am'.index idx with > | Some (prev_ooz, _) when prev_ooz >= ooz => () > | _ => > inl x = (ooz, ch) |> Some > backend_switch { > Fsharp = fun () => > $'!buffer.[[!idx]] <- !x ' : () > Python = fun () => > $'!buffer[[!idx]] = !x ' : () > } > backend_switch { > Fsharp = fun () => > updates > |> $'Seq.iter (fun (struct (idx, ooz, ch)) -> !fn idx (ooz, ch))' : > () > Python = fun () => > $'for (idx, ooz, ch) in !updates: !fn(idx)(ooz, ch)' : () > } > > inl sb = "" |> sm'.string_builder > inl fn1 row = > inl fn2 col = > inl idx = col + row * width > inl ch = > match buffer |> am'.index idx with > | Some (_, ch) => ch > | None => get_background_char () > sb |> sm'.builder_append (ch |> sm'.obj_to_string) |> ignore > > backend_switch { > Fsharp = fun () => > $'for col in 0 .. (!width - 1) do !fn2 col' : () > Python = fun () => > $'for col in range(!width): !fn2(col)' : () > } > sb |> sm'.builder_append_line |> ignore > > backend_switch { > Fsharp = fun () => > $'for row in 0 .. (!height - 1) do !fn1 row' : () > Python = fun () => > $'for row in range(!height): !fn1(row)' : () > } > sb |> sm'.obj_to_string > > ── spiral ────────────────────────────────────────────────────────────────────── > //// test > ///! fsharp > ///! cuda > ///! rust > ///! typescript > ///! python > > { a = 0.0; b = 0.0; c = 0.0 } > |> generate_frame > |> console.write_line > > ── [ 10.61s - return value ] ─────────────────────────────────────────────────── > │ " > │ .py output (Python): > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ........................................................................... > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > │ > │ " > │ > > ── [ 10.61s - stdout ] ───────────────────────────────────────────────────────── > │ .fsx output: > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > .;;;;;;;;;;;;;;;;;\............................................................. > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > .;;;;;;;;;;;;;;;;;\............................................................. > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > .;;;;;;;;;;;;;;;;;\................;;;;;;;;;\................................... > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > .;;;;;;;;;;;;;;;;;\................;;;;;;;;;\................................... > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > .;;;;;;;;;;;;;;;;;\................;;;;;;;;;\................................... > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > .;;;;;;;;;;;;;;;;;\................;;;;;;;;;\................................... > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > .;;;;;;;;;;;;;;;;;\................;;;;;;;;;\................................... > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > .;;;;;;;;;;;;;;;;;\................<<<<<<<<<.................................... > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > .;;;;;;;;;;;;;;;;;\............................................................. > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > .<<<<<<<<<<<<<<<<<\............................................................. > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<.................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### main_loop > > ── fsharp ────────────────────────────────────────────────────────────────────── > let rec mainLoop rot = async { > let frame = generateFrame rot > // Console.SetCursorPosition(0, 0) > Console.Write(frame) > let rot' = { a = rot.a + 0.05; b = rot.b + 0.05; c = rot.c + 0.01 } > do! Async.Sleep 16 > return! mainLoop rot' > } > > ── spiral ────────────────────────────────────────────────────────────────────── > let rec main_loop max i rot = > fun () => > inl rot = join rot > inl frame = rot |> generate_frame > if max < 0 then > run_target function > | Fsharp (Native) => fun () => > $'System.Console.SetCursorPosition (0, 0)' > | Rust _ => fun () => > open rust.rust_operators > !\($'$"print\!(\\\"\\\\x1B[[1;1H\\\")"') > | TypeScript _ => fun () => > open typescript_operators > !\($'$"process.stdout.write(\'\\\\u001B[[1;1H\')"') > | Python _ => fun () => > open python_operators > // global "import sys" > !\($'$"sys.stdout.write(\\\"\\\\033[[1;1H\\\")"') > | Cuda _ => fun () => > global "import sys" > $'sys.stdout.write("\\033[[1;1H")' > | _ => fun () => () > frame |> console.write_line > async.sleep 1 |> async.do > if max > 0 && i >= max > then () > else > { a = rot.a + 0.05; b = rot.b + 0.05; c = rot.c + 0.01 } > |> main_loop max (i + 1) > |> async.return_await' > |> async.new_async_unit > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### main > > ── fsharp ────────────────────────────────────────────────────────────────────── > // [[<EntryPoint>]] > let main argv = > // Console.CursorVisible <- false > Async.StartImmediate (mainLoop { a = 0.0; b = 0.0; c = 0.0 }) > System.Threading.Thread.Sleep(1000) > > ── fsharp ────────────────────────────────────────────────────────────────────── > // main [[||]] > > ── spiral ────────────────────────────────────────────────────────────────────── > inl main (_args : array_base string) = > inl console = > run_target function > | Fsharp (Wasm) => fun () => false > | _ => fun () => > ((join "VSCODE_PID") |> env.get_environment_variable |> sm'.length > |> (=) 0i32) > && ("AUTOMATION" |> env.get_environment_variable |> sm'.length > |> (=) 0i32) > if console then > run_target function > | Fsharp (Native) => fun () => $'System.Console.CursorVisible <- > false' > | Rust _ => fun () => > open rust.rust_operators > !\($'$"print\!(\\\"\\\\x1B[[?25l\\\")"') > | TypeScript _ => fun () => > open typescript_operators > !\($'$"process.stdout.write(\'\\\\u001B[[?25l\')"') > | Python _ => fun () => > open python_operators > python.import_all "sys" > !\($'$"sys.stdout.write(\\\"\\\\033[[?25l\\\")"') > | _ => fun () => () > main_loop (if console then -1i32 else 50) 1i32 { a = 0.0; b = 0.0; c = 0.0 } > |> fun x => > run_target_args' x function > | Fsharp (Wasm) > | TypeScript _ => fun x => > x > |> async.start_child > |> ignore > | Python _ => fun x => > x > |> async.start_immediate > threading.sleep' 2000 > | _ => fun x => > x > |> async.run_synchronously > > inl main () = > backend_switch { > Fsharp = fun () => > $'let main_ = !main ' > $'\#if \!FABLE_COMPILER_RUST' > $'main_ [[||]]' : () > $'\#else' > $'let main args = main_ [[||]]; 0' : () > $'\#endif' : () > Python = fun () => > main ;[[]] > } > : () > > ── [ 4.91s - stdout ] ────────────────────────────────────────────────────────── > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > .;;;;;;;;;;;;;;;;;\............................................................. > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > .;;;;;;;;;;;;;;;;;\............................................................. > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > .;;;;;;;;;;;;;;;;;\................;;;;;;;;;\................................... > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > .;;;;;;;;;;;;;;;;;\................;;;;;;;;;\................................... > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > .;;;;;;;;;;;;;;;;;\................;;;;;;;;;\................................... > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > .;;;;;;;;;;;;;;;;;\................;;;;;;;;;\................................... > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > .;;;;;;;;;;;;;;;;;\................;;;;;;;;;\................................... > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > .;;;;;;;;;;;;;;;;;\................<<<<<<<<<.................................... > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > .;;;;;;;;;;;;;;;;;\............................................................. > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > .<<<<<<<<<<<<<<<<<\............................................................. > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<.................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > .;;;;;;;;;;;;;;;;;;\............................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > .;;;;;;;;;;;;;;;;;;\............................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > .;;;;;;;;;;;;;;;;;;;...............;;;;;;;;;;................................... > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > .;;;;;;;;;;;;;;;;;;;...............;;;;;;;;;;................................... > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > .;;;;;;;;;;;;;;;;;;;...............;;;;;;;;;;................................... > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > .;;;;;;;;;;;;;;;;;;;...............;;;;;;;;;;................................... > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > .;;;;;;;;;;;;;;;;;;;................;;;;;<<<<................................... > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > .;;;;;;;;;;;;;;;;;;;................<<<<<....................................... > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > .;;;;;;;;;;;;;;;;;;;............................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > .<<<<<<<<<<<<<<<<<<<............................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.................. > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.................. > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.................. > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.................. > ................................................................................ > │ > ....................<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\.................. > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > .....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > .....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > ................................................................................ > │ > .....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > ................................................................................ > │ > .....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > ................................................................................ > │ > .....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > ................................................................................ > │ > .....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > .;;;;;;;;;;;;;;;;;;;............................................................ > │ > .....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.................. > .;;;;;;;;;;;;;;;;;;;............................................................ > │ > .....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.................. > .;;;;;;;;;;;;;;;;;;;...............>;;;;;;;;;................................... > │ > .....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.................. > .;;;;;;;;;;;;;;;;;;;.............../;;;;;;;;;................................... > │ > .....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................. > .;;;;;;;;;;;;;;;;;;;.............../;;;;;;;;;................................... > │ > .....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................. > .;;;;;;;;;;;;;;;;;;;.............../;;;;;;;;;................................... > │ > .....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................. > .;;;;;;;;;;;;;;;;;;;.............../<<<<<<<<<................................... > │ > .....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................. > ..;;;;;;;;;;;;;;;;;;...............<<<<<<<<<.................................... > │ > .....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.................. > ..;;;;;;;;;;<<<<<<<<............................................................ > │ > .....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................. > ..<<<<<<<<<<.................................................................... > │ > .....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................. > ................................................................................ > │ > .....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................. > ................................................................................ > │ > .....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................. > ................................................................................ > │ > .....................;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<\................. > ................................................................................ > │ > .....................<<<<<<<<<<<<<<<<<<<<<<<<<<<<............................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ......................;;;;;;;;;;;............................................... > ................................................................................ > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > ................................................................................ > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > ................................................................................ > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > ................................................................................ > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.................. > ..............;;;;;;............................................................ > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.................. > .>;;;;;;;;;;;;;;;;;;............................................................ > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................. > ./;;;;;;;;;;;;;;;;;;............................................................ > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................. > ./;;;;;;;;;;;;;;;;;;...............>;;;;;;;;;................................... > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.................. > ./;;;;;;;;;;;;;;;;;;.............../;;;;;;;;;................................... > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................. > ./;;;;;;;;;;;;;;;;;;.............../;;;;;;;;;................................... > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................. > ./;;;;;;;;;;;;;;;;;;\............../;;;;;;;;;................................... > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................. > ./;;;;;;;;;;;;;;;;;;;............../<<<<<<<<<................................... > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................. > ./;;;;;;;;;;;;;;;;;;;............../<<<<<<<<.................................... > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................. > ./<<<<<<<<<<<<<<<<<<<........................................................... > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................. > ./<<<<<<<<<<<<<<<............................................................... > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................ > ................................................................................ > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................ > ................................................................................ > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................ > ................................................................................ > │ > ......................;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<................ > ................................................................................ > │ > ......................<<<<<<<<<<................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................... > ................................................................................ > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................... > ................................................................................ > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > ................................................................................ > │ > ......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > ................................................................................ > │ > .......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > ................................................................................ > │ > .......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.................. > ..;;;;;;;;;;;;;;;;;;............................................................ > │ > .......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................. > .>;;;;;;;;;;;;;;;;;;............................................................ > │ > .......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................. > ./;;;;;;;;;;;;;;;;;;............................................................ > │ > .......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................. > >/;;;;;;;;;;;;;;;;;;...............>;;;;;;;;;................................... > │ > .......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................. > ./;;;;;;;;;;;;;;;;;;\............../;;;;;;;;;................................... > │ > .......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................. > ./;;;;;;;;;;;;;;;;;;;............../;;;;;;;;;................................... > │ > .......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................. > ./;;;;;;;;;;;;;;;;;;;............../;;;;;;;;;\.................................. > │ > .......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................ > .//;;;;;;;;;;;;;;;;;;............../<<<<<<<<<\.................................. > │ > .......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................ > .//;;;;;;;;;;;;;;;;;;............../<<<<<<<<.................................... > │ > .......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................ > .//<<<<<<<<<<<<<<<<<<........................................................... > │ > .......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................ > ./<<<<<<<<<<<<<<<<.............................................................. > │ > ........................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\............... > ................................................................................ > │ > ........................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;............... > ................................................................................ > │ > ........................;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<............... > ................................................................................ > │ > ........................<<<<<<<<<<<<<<<<<<<<<<.................................. > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.................... > ................................................................................ > │ > .......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................... > ................................................................................ > │ > ......................>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................... > ................................................................................ > │ > ....................../;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................../;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > ................................................................................ > │ > ....................../;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > ................................................................................ > │ > ....................../;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................. > ..;;;;;;;;;;;;;;;;;;............................................................ > │ > ......................//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................. > .>;;;;;;;;;;;;;;;;;;............................................................ > │ > ......................//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................. > >/;;;;;;;;;;;;;;;;;;............................................................ > │ > ......................//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................. > //;;;;;;;;;;;;;;;;;;\..............>;;;;;;;;;................................... > │ > ......................//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................. > ///;;;;;;;;;;;;;;;;;;............../;;;;;;;;;................................... > │ > ......................//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................ > ///;;;;;;;;;;;;;;;;;;............../;;;;;;;;;\.................................. > │ > ......................//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................ > ///;;;;;;;;;;;;;;;;;;............../;;;;;;;;;;.................................. > │ > ......................./;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................ > .//;;;;;;;;;;;;;;;;;;;.............//<<<<<<<<<.................................. > │ > .......................//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\............... > .//;;;;;;;;;;;;;;;;<<<............./<<<<<<<<.................................... > │ > .......................//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;............... > .///<<<<<<<<<<<<<<<<<........................................................... > │ > .......................//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.............. > ./<<<<<<<<<<<<<<<<.............................................................. > │ > .......................//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.............. > ................................................................................ > │ > .......................//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<.............. > ................................................................................ > │ > .......................//;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<................... > ................................................................................ > │ > .......................//<<<<<<<<<<<<<<<<<<<<<<<<<.............................. > ................................................................................ > │ > ........................<<<<<<<................................................. > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;..................... > ................................................................................ > │ > .......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;..................... > ................................................................................ > │ > ......................>/;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................... > ................................................................................ > │ > ......................//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................... > ................................................................................ > │ > ......................//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > ................................................................................ > │ > ......................//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > ................................................................................ > │ > .....................>//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................. > ..;;;;;;;;;;;;;;;;;............................................................. > │ > .....................////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................. > .>;;;;;;;;;;;;;;;;;;............................................................ > │ > .....................////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................. > >//;;;;;;;;;;;;;;;;;............................................................ > │ > .....................////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................. > ///;;;;;;;;;;;;;;;;;\..............>;;;;;;;;;................................... > │ > .....................////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................ > ///;;;;;;;;;;;;;;;;;;.............>/;;;;;;;;;................................... > │ > ......................///;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................ > ///;;;;;;;;;;;;;;;;;;.............//;;;;;;;;;\.................................. > │ > ......................////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\............... > ////;;;;;;;;;;;;;;;;;;.............//;;;;;;;;;.................................. > │ > ......................////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;............... > ////;;;;;;;;;;;;;;;;;;.............//<<<<<<<<<.................................. > │ > ......................////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.............. > ////;;;;;;;<<<<<<<<<<<............./<<<<<<<<.................................... > │ > ......................////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.............. > .///<<<<<<<<<<<<<<<<<........................................................... > │ > ......................////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\............. > .//<<<<<<<<<<<<<<<.............................................................. > │ > .......................////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<............. > .<<<............................................................................ > │ > .......................////;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<............... > ................................................................................ > │ > .......................////<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<...................... > ................................................................................ > │ > .......................////<<<<<<<<<<<<<<<<<<<<<<<<<............................ > ................................................................................ > │ > .......................//<<<<<<<<<<<<<.......................................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .......................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;...................... > ................................................................................ > │ > ......................./;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;..................... > ................................................................................ > │ > ......................>/;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.................... > ................................................................................ > │ > ......................//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................... > ................................................................................ > │ > ......................///;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > .....................>///;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > ................................................................................ > │ > .....................////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................. > ..;;;;;;;;;;;;;;;;;............................................................. > │ > ....................>////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................. > .>/;;;;;;;;;;;;;;;;;............................................................ > │ > ....................//////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................. > >//;;;;;;;;;;;;;;;;;............................................................ > │ > ....................//////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\...............> > ///;;;;;;;;;;;;;;;;;;..............>;;;;;;;;;................................... > │ > ...................../////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.............../ > ////;;;;;;;;;;;;;;;;;.............//;;;;;;;;;................................... > │ > .....................//////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;............../ > ////;;;;;;;;;;;;;;;;;;............///;;;;;;;;;.................................. > │ > .....................//////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;............... > ////;;;;;;;;;;;;;;;;;;............///;;;;;;;;;.................................. > │ > .....................//////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.............. > ////;;;;;;;;;;;;;;;;;;;............//;<<<<<<<<.................................. > │ > .....................//////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\............. > /////<<<<<<<<<<<<<<<<<<............/<<<<<<<<.................................... > │ > ......................//////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;............. > .///<<<<<<<<<<<<<<<<............................................................ > │ > ......................//////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<............ > .//<<<<<<<<<<<<<<<.............................................................. > │ > ......................//////;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<............. > .<<<<<<......................................................................... > │ > ......................///////;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<.................. > ................................................................................ > │ > .......................//////<<<<<<<<<<<<<<<<<<<<<<<<<<<<....................... > ................................................................................ > │ > .......................////<<<<<<<<<<<<<<<<<<<<<<<<<<........................... > ................................................................................ > │ > .......................///<<<<<<<<<<<<<<<<...................................... > ................................................................................ > │ > ......................./<<<<<................................................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ........................;;;;;;.................................................. > ................................................................................ > │ > .......................>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;....................... > ................................................................................ > │ > ......................./;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;...................... > ................................................................................ > │ > ......................>/;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;..................... > ................................................................................ > │ > ......................///;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.................... > ................................................................................ > │ > .....................>///;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................... > ................................................................................ > │ > ...................../////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > ................................................................................ > │ > ....................>/////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................. > ..;;;;;;;;;;;;;;;;;............................................................. > │ > ....................//////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................. > .>/;;;;;;;;;;;;;;;;\............................................................ > │ > ...................>///////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................. > >//;;;;;;;;;;;;;;;;;............................................................ > │ > ...................////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.............../ > ///;;;;;;;;;;;;;;;;;;..............>;;;;;;;;;................................... > │ > ....................////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;............../ > ////;;;;;;;;;;;;;;;;;\............>/;;;;;;;;;\.................................. > │ > ....................////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\............./ > ////;;;;;;;;;;;;;;;;;;............///;;;;;;;;;.................................. > │ > ....................////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;............./ > /////;;;;;;;;;;;;;;;;;;...........///;;;;;;;<<\................................. > │ > .....................////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;............. > /////;;;;;;;;;;;;;;<<<<............///<<<<<<<<.................................. > │ > .....................////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\............ > //////<<<<<<<<<<<<<<<<<............//<<<<<<<.................................... > │ > ...................../////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;............ > /////<<<<<<<<<<<<<<<............................................................ > │ > ...................../////////;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<............ > .//<<<<<<<<<<<<<<<.............................................................. > │ > ......................////////;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<................ > ./<<<<<<<<...................................................................... > │ > ....................../////////<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<................... > ................................................................................ > │ > ......................////////<<<<<<<<<<<<<<<<<<<<<<<<<<<....................... > ................................................................................ > │ > ......................./////<<<<<<<<<<<<<<<<<<<<<<<<<........................... > ................................................................................ > │ > .......................///<<<<<<<<<<<<<<<<<<<<.................................. > ................................................................................ > │ > .......................//<<<<<<<<<.............................................. > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ........................;;;;;;;;;............................................... > ................................................................................ > │ > .......................>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;........................ > ................................................................................ > │ > ......................./;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;....................... > ................................................................................ > │ > ......................>//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;...................... > ................................................................................ > │ > ......................////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;..................... > ................................................................................ > │ > .....................>////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................... > ................................................................................ > │ > ....................>//////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > ................................................................................ > │ > ....................>//////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................. > ..;;;;;;;;;;;;;;;;;............................................................. > │ > ...................>////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................. > .>/;;;;;;;;;;;;;;;;\............................................................ > │ > .................../////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................ > >///;;;;;;;;;;;;;;;;............................................................ > │ > ..................///////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;...............> > ////;;;;;;;;;;;;;;;;;..............>;;;;;;;;;................................... > │ > ...................//////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.............>/ > ////;;;;;;;;;;;;;;;;;;............>//;;;;;;;;\.................................. > │ > ...................///////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;............// > /////;;;;;;;;;;;;;;;;;\...........///;;;;;;;;;.................................. > │ > ...................///////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;............/ > //////;;;;;;;;;;;;;;;;;...........////;;;<<<<<<................................. > │ > ....................///////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.........../ > ///////;;;;;;;<<<<<<<<<<...........///<<<<<<<<.................................. > │ > ....................///////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;........... > ///////<<<<<<<<<<<<<<<.............//<<<<<<<.................................... > │ > .....................//////////;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<........... > /////<<<<<<<<<<<<<<<............................................................ > │ > .....................///////////;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<.............. > .///<<<<<<<<<<<<<<.............................................................. > │ > .....................////////////<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<................. > .//<<<<<<<<<.................................................................... > │ > ......................//////////<<<<<<<<<<<<<<<<<<<<<<<<<<<<.................... > ................................................................................ > │ > ....................../////////<<<<<<<<<<<<<<<<<<<<<<<<<<....................... > ................................................................................ > │ > ......................///////<<<<<<<<<<<<<<<<<<<<<<<<<.......................... > ................................................................................ > │ > ......................./////<<<<<<<<<<<<<<<<<<<<................................ > ................................................................................ > │ > .......................///<<<<<<<<<<<<.......................................... > ................................................................................ > │ > ........................<<<<<................................................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ........................;;;;;;;;;;.............................................. > ................................................................................ > │ > .......................>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;......................... > ................................................................................ > │ > .......................//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;........................ > ................................................................................ > │ > ......................>//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;....................... > ................................................................................ > │ > .....................>////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;...................... > ................................................................................ > │ > .....................//////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;..................... > ................................................................................ > │ > ....................>//////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................... > ................................................................................ > │ > ....................////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................. > ../;;;;;;;;;;;;;;;.............................................................. > │ > ...................>/////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................. > .>/;;;;;;;;;;;;;;;;............................................................. > │ > ..................>//////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................ > >///;;;;;;;;;;;;;;;;............................................................ > │ > ..................////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;..............> > ////;;;;;;;;;;;;;;;;;..............>;;;;;;;;;................................... > │ > ................../////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;............>/ > /////;;;;;;;;;;;;;;;;;............>//;;;;;;;;\.................................. > │ > ................../////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;...........// > //////;;;;;;;;;;;;;;;;;..........////;;;;;;;;;\................................. > │ > .................../////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;..........// > //////;;;;;;;;;;;;;;;;;;..........////;<<<<<<<<................................. > │ > .................../////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;........../ > ///////;;<<<<<<<<<<<<<<<...........///<<<<<<<<.................................. > │ > ..................../////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<........... > ////////<<<<<<<<<<<<<<.............//<<<<<<<.................................... > │ > ....................//////////////;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<............. > //////<<<<<<<<<<<<<<............................................................ > │ > ....................//////////////;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<............... > .////<<<<<<<<<<<<<.............................................................. > │ > ...................../////////////<<<<<<<<<<<<<<<<<<<<<<<<<<<<.................. > ..<<<<<<<<<<<................................................................... > │ > .....................////////////<<<<<<<<<<<<<<<<<<<<<<<<<<..................... > ................................................................................ > │ > ....................../////////<<<<<<<<<<<<<<<<<<<<<<<<<........................ > ................................................................................ > │ > ......................///////<<<<<<<<<<<<<<<<<<<<<<<<<.......................... > ................................................................................ > │ > ......................./////<<<<<<<<<<<<<<<<<<<<<<.............................. > ................................................................................ > │ > .......................////<<<<<<<<<<<<<<....................................... > ................................................................................ > │ > ......................../<<<<<<<<............................................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ........................;;;;;;;;;............................................... > ................................................................................ > │ > .......................>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.......................... > ................................................................................ > │ > ......................>//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;......................... > ................................................................................ > │ > ......................////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;........................ > ................................................................................ > │ > .....................>/////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;...................... > ................................................................................ > │ > ....................>//////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;..................... > ................................................................................ > │ > ....................>///////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................... > ................................................................................ > │ > ...................>/////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.................. > ..;;;;;;;;;;;;;;;;.............................................................. > │ > ...................///////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................. > .>//;;;;;;;;;;;;;;;............................................................. > │ > ..................>////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................ > >///;;;;;;;;;;;;;;;;............................................................ > │ > ................../////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.............> > /////;;;;;;;;;;;;;;;;..............>;;;;;;;;\................................... > │ > .................>//////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\...........>/ > //////;;;;;;;;;;;;;;;;............>//;;;;;;;;\.................................. > │ > .................////////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;........./// > //////;;;;;;;;;;;;;;;;;..........>////;;;;;;;;;................................. > │ > ..................////////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.........// > ///////;;;;;;;;;;;;<<<<<........../////<<<<<<<<................................. > │ > ................../////////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<........./ > ////////;<<<<<<<<<<<<<<...........////<<<<<<<<.................................. > │ > ...................////////////////;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<.........../ > ////////<<<<<<<<<<<<<<.............//<<<<<<<.................................... > │ > .................../////////////////;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<.............. > //////<<<<<<<<<<<<<<............................................................ > │ > ....................////////////////<<<<<<<<<<<<<<<<<<<<<<<<<<<................. > .///<<<<<<<<<<<<<<.............................................................. > │ > .....................//////////////<<<<<<<<<<<<<<<<<<<<<<<<<<................... > ..//<<<<<<<<<<.................................................................. > │ > ...................../////////////<<<<<<<<<<<<<<<<<<<<<<<<<..................... > ..<............................................................................. > │ > ......................//////////<<<<<<<<<<<<<<<<<<<<<<<<........................ > ................................................................................ > │ > ....................../////////<<<<<<<<<<<<<<<<<<<<<<<.......................... > ................................................................................ > │ > .......................//////<<<<<<<<<<<<<<<<<<<<<<............................. > ................................................................................ > │ > ........................////<<<<<<<<<<<<<<<..................................... > ................................................................................ > │ > ........................//<<<<<<<<<<............................................ > ................................................................................ > │ > .........................<<<.................................................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .......................>;;;;;;;;................................................ > ................................................................................ > │ > .......................>/;;;;;;;;;;;;;;;;;;;;;;;;;;;\........................... > ................................................................................ > │ > ......................>//;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.......................... > ................................................................................ > │ > ......................////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\........................ > ................................................................................ > │ > .....................>//////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;....................... > ................................................................................ > │ > ....................>////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\..................... > ................................................................................ > │ > ..................../////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................... > ................................................................................ > │ > ...................>///////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.................. > ..;;;;;;;;;;;;;;;\.............................................................. > │ > ..................>/////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................. > .>/;;;;;;;;;;;;;;;;............................................................. > │ > ..................///////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................ > >///;;;;;;;;;;;;;;;;............................................................ > │ > .................>////////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.............> > /////;;;;;;;;;;;;;;;;..............>/;;;;;;;\................................... > │ > ................>//////////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\..........>/ > //////;;;;;;;;;;;;;;;;\...........>///;;;;;;;\.................................. > │ > ................>///////////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;........>// > ///////;;;;;;;;;;;;;;;;;.........>////;;;;;;;;;................................. > │ > .................///////////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<......./// > ////////;;;;;;<<<<<<<<<<.........//////<<<<<<<<................................. > │ > ................./////////////////////;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<.........// > /////////<<<<<<<<<<<<<<...........////<<<<<<<<.................................. > │ > ..................////////////////////;;;;<<<<<<<<<<<<<<<<<<<<<<<<<............/ > ////////<<<<<<<<<<<<<..............//<<<<<<<.................................... > │ > ...................////////////////////<<<<<<<<<<<<<<<<<<<<<<<<<<............... > ///////<<<<<<<<<<<<<............................................................ > │ > ...................//////////////////<<<<<<<<<<<<<<<<<<<<<<<<<.................. > .////<<<<<<<<<<<<<.............................................................. > │ > ....................////////////////<<<<<<<<<<<<<<<<<<<<<<<<.................... > ..//<<<<<<<<<<<................................................................. > │ > .....................//////////////<<<<<<<<<<<<<<<<<<<<<<<...................... > ...<<........................................................................... > │ > ......................////////////<<<<<<<<<<<<<<<<<<<<<<........................ > ................................................................................ > │ > ......................//////////<<<<<<<<<<<<<<<<<<<<<<.......................... > ................................................................................ > │ > .......................///////<<<<<<<<<<<<<<<<<<<<<<............................ > ................................................................................ > │ > ......................../////<<<<<<<<<<<<<<<<................................... > ................................................................................ > │ > ........................////<<<<<<<<<<.......................................... > ................................................................................ > │ > ........................./<<<<<<................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .......................;;;;;;;.................................................. > ................................................................................ > │ > ......................./;;;;;;;;;;;;;;;;;;;;;;;;;;;............................. > ................................................................................ > │ > ......................>///;;;;;;;;;;;;;;;;;;;;;;;;;;;........................... > ................................................................................ > │ > .....................>////;;;;;;;;;;;;;;;;;;;;;;;;;;;;.......................... > ................................................................................ > │ > .....................///////;;;;;;;;;;;;;;;;;;;;;;;;;;;;........................ > ................................................................................ > │ > ....................>/////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;...................... > ................................................................................ > │ > ...................>///////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.................... > ................................................................................ > │ > ...................>///////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.................. > ../;;;;;;;;;;;;;;............................................................... > │ > ..................>/////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;................. > .>/;;;;;;;;;;;;;;;;............................................................. > │ > ..................////////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;............... > >///;;;;;;;;;;;;;;;;............................................................ > │ > .................>//////////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;............> > ///////;;;;;;;;;;;;;;..............>/;;;;;;;.................................... > │ > ................>////////////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;..........>/ > ////////;;;;;;;;;;;;;;;...........>///;;;;;;;;.................................. > │ > ................/////////////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<.......>// > /////////;;;;;;;;;;;;;;<.........>////;;;;;;;;<................................. > │ > ...............////////////////////////;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<......../// > /////////;<<<<<<<<<<<<<<.........//////;<<<<<<<................................. > │ > ................////////////////////////;;;;<<<<<<<<<<<<<<<<<<<<<<<...........// > //////////<<<<<<<<<<<<<.........../////<<<<<<<.................................. > │ > .................////////////////////////<<<<<<<<<<<<<<<<<<<<<<<<<............./ > /////////<<<<<<<<<<<<..............//<<<<<<<.................................... > │ > ..................//////////////////////<<<<<<<<<<<<<<<<<<<<<<<<................ > ////////<<<<<<<<<<<<............................................................ > │ > ...................///////////////////<<<<<<<<<<<<<<<<<<<<<<<<.................. > ./////<<<<<<<<<<<<.............................................................. > │ > ..................../////////////////<<<<<<<<<<<<<<<<<<<<<<<.................... > ..///<<<<<<<<<<................................................................. > │ > .....................///////////////<<<<<<<<<<<<<<<<<<<<<<...................... > .../<<<......................................................................... > │ > .....................//////////////<<<<<<<<<<<<<<<<<<<<<........................ > ................................................................................ > │ > ......................///////////<<<<<<<<<<<<<<<<<<<<<.......................... > ................................................................................ > │ > ......................./////////<<<<<<<<<<<<<<<<<<<<............................ > ................................................................................ > │ > ........................///////<<<<<<<<<<<<<<<.................................. > ................................................................................ > │ > .........................////<<<<<<<<<<<........................................ > ................................................................................ > │ > ..........................//<<<<<<<............................................. > ................................................................................ > │ > ...........................<<................................................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .......................;;;;..................................................... > ................................................................................ > │ > ......................>/;;;;;;;;;;;;;;;;;;;;;;;;................................ > ................................................................................ > │ > ......................///;;;;;;;;;;;;;;;;;;;;;;;;;;............................. > ................................................................................ > │ > .....................>////;/;;;;;;;;;;;;;;;;;;;;;;;;;........................... > ................................................................................ > │ > ....................>////////;;;;;;;;;;;;;;;;;;;;;;;;;;......................... > ................................................................................ > │ > ....................>////////;/;;;;;;;;;;;;;;;;;;;;;;;;;;....................... > ................................................................................ > │ > ...................>///////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.................... > ................................................................................ > │ > ...................///////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;................... > ..;;;;;;;;;;;;;;\............................................................... > │ > ..................>////////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;\................ > .>/;;;;;;;;;;;;;;;.............................................................. > │ > .................>///////////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;\.............. > >///;/;;;;;;;;;;;;;;............................................................ > │ > ................./////////////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\...........> > //////;;;;;;;;;;;;;;;;.............>/;;;;;;;.................................... > │ > ................>//////////////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\........>/ > ///////;/;;;;;;;;;;;;;;...........>///;;;;;;;;.................................. > │ > ...............>////////////////////////;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<.......>// > /////////;;;;;;;;;<<<<<<.........>////;;;;;;<<<................................. > │ > ...............>//////////////////////////;;;;<<<<<<<<<<<<<<<<<<<<<<........./// > //////////;<<<<<<<<<<<<<.........///////<<<<<<<................................. > │ > ...............///////////////////////////<<<<<<<<<<<<<<<<<<<<<<<<.........../// > //////////<<<<<<<<<<<<............/////<<<<<<................................... > │ > ................//////////////////////////<<<<<<<<<<<<<<<<<<<<<<.............../ > /////////<<<<<<<<<<<<..............///<<<<<<.................................... > │ > .................///////////////////////<<<<<<<<<<<<<<<<<<<<<<<................. > ///////<<<<<<<<<<<<..................<.......................................... > │ > ..................//////////////////////<<<<<<<<<<<<<<<<<<<<<................... > .//////<<<<<<<<<<<.............................................................. > │ > ...................//////////////////<<<<<<<<<<<<<<<<<<<<<<..................... > ...//<<<<<<<<<<................................................................. > │ > ....................////////////////<<<<<<<<<<<<<<<<<<<<<<...................... > ..../<<<........................................................................ > │ > .....................///////////////<<<<<<<<<<<<<<<<<<<<........................ > ................................................................................ > │ > ....................../////////////<<<<<<<<<<<<<<<<<<<.......................... > ................................................................................ > │ > .......................//////////<<<<<<<<<<<<<<<<<<<<........................... > ................................................................................ > │ > ........................////////<<<<<<<<<<<<<<<................................. > ................................................................................ > │ > ..........................////<<<<<<<<<<<<...................................... > ................................................................................ > │ > ..........................////<<<<<<<........................................... > ................................................................................ > │ > ............................<<<<................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .......................;;....................................................... > ................................................................................ > │ > ......................>;;;;;;;;;;;;;;;;;;;;..................................... > ................................................................................ > │ > ......................///;;;;;;;;;;;;;;;;;;;;;;;;;.............................. > ................................................................................ > │ > .....................>/////;;;;;;;;;;;;;;;;;;;;;;;;;............................ > ................................................................................ > │ > ....................>////////;;;;;;;;;;;;;;;;;;;;;;;;;\......................... > ................................................................................ > │ > ....................//////////;;;;;;;;;;;;;;;;;;;;;;;;;;;....................... > ................................................................................ > │ > ...................>////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;..................... > ................................................................................ > │ > ..................>///////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;\.................. > .>/;;;;;;;;;;;;;................................................................ > │ > ..................///////////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;................ > >//;;;;;;;;;;;;;;;.............................................................. > │ > .................>////////////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;.............. > >////;;;;;;;;;;;;;;;............................................................ > │ > .................///////////////////////;;;;;;;;;;;;;;;;;;;;;;;;;;;;;..........> > ///////;;;;;;;;;;;;;;;.............>/;;;;;;;.................................... > │ > ................>/////////////////////////;;;;;;;;;;;;;;;;;;<<<<<<<<<.........>/ > ////////;;;;;;;;;;;;;;;;..........>//;;;;;;;;;.................................. > │ > ...............>/////////////////////////////;;;<<<<<<<<<<<<<<<<<<<<.........>// > //////////;;;<<<<<<<<<<<.........>/////;;;<<<<<................................. > │ > ...............//////////////////////////////<<<<<<<<<<<<<<<<<<<<<<.........//// > ////////////<<<<<<<<<<<..........///////<<<<<<<................................. > │ > ..............>////////////////////////////<<<<<<<<<<<<<<<<<<<<<<............/// > ///////////<<<<<<<<<<<............/////<<<<<<................................... > │ > ...............////////////////////////////<<<<<<<<<<<<<<<<<<<<...............// > //////////<<<<<<<<<<<..............///<<<<<<.................................... > │ > ................/////////////////////////<<<<<<<<<<<<<<<<<<<<<.................. > ////////<<<<<<<<<<<..................<.......................................... > │ > .................///////////////////////<<<<<<<<<<<<<<<<<<<<<................... > .//////<<<<<<<<<<<.............................................................. > │ > ...................////////////////////<<<<<<<<<<<<<<<<<<<<..................... > ...///<<<<<<<<<<................................................................ > │ > ....................//////////////////<<<<<<<<<<<<<<<<<<<<...................... > ..../<<<<....................................................................... > │ > .....................////////////////<<<<<<<<<<<<<<<<<<<........................ > ................................................................................ > │ > ......................//////////////<<<<<<<<<<<<<<<<<<.......................... > ................................................................................ > │ > ........................///////////<<<<<<<<<<<<<<<<<<........................... > ................................................................................ > │ > .........................////////<<<<<<<<<<<<<<<................................ > ................................................................................ > │ > ..........................//////<<<<<<<<<<<..................................... > ................................................................................ > │ > ...........................////<<<<<<<<......................................... > ................................................................................ > │ > ............................//<<<<.............................................. > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ....................../;;;;;;;;;;;;;;;;......................................... > ................................................................................ > │ > .....................>///;;;;;;;;;;;;;;;;;;;;;;;................................ > ................................................................................ > │ > .....................//////;;;;;;;;;;;;;;;;;;;;;;;;............................. > ................................................................................ > │ > ..................../////////;;;;;;;;;;;;;;;;;;;;;;;;........................... > ................................................................................ > │ > ...................>///////////;/;;;;;;;;;;;;;;;;;;;;;;;........................ > ................................................................................ > │ > ...................///////////////;;;;;;;;;;;;;;;;;;;;;;;;;..................... > ................................................................................ > │ > ..................>/////////////////;;;;;;;;;;;;;;;;;;;;;;;;;;.................. > .>;;;;;;;;;;;;;................................................................. > │ > ..................////////////////////;/;;;;;;;;;;;;;;;;;;;;;;;;................ > >//;/;;;;;;;;;;;;............................................................... > │ > .................>//////////////////////;/;;;;;;;;;;;;;;;;;;;;;;;;;\............ > //////;;;;;;;;;;;;;;............................................................ > │ > ................>//////////////////////////;;;;;;;;;;;;;;;;;;;<<<<<<<..........> > ///////;;;;;;;;;;;;;;;.............>/;;;;;;;.................................... > │ > ................/////////////////////////////;;;;<<<<<<<<<<<<<<<<<<<..........>/ > ///////////;;;;;;;;;;;<<..........>//;;;;;;;;;.................................. > │ > ...............>//////////////////////////////<<<<<<<<<<<<<<<<<<<<<..........>// > ///////////;<<<<<<<<<<<<.........>/////;;<<<<<<................................. > │ > ...............///////////////////////////////<<<<<<<<<<<<<<<<<<<............/// > ////////////<<<<<<<<<<<..........///////<<<<<<.................................. > │ > ..............>//////////////////////////////<<<<<<<<<<<<<<<<<<<............//// > ///////////<<<<<<<<<<<............/////<<<<<<................................... > │ > ..............//////////////////////////////<<<<<<<<<<<<<<<<<<<...............// > //////////<<<<<<<<<<<...............///<<<<<.................................... > │ > ...............///////////////////////////<<<<<<<<<<<<<<<<<<<................... > /////////<<<<<<<<<<................../.......................................... > │ > ................//////////////////////////<<<<<<<<<<<<<<<<<<.................... > .///////<<<<<<<<<<.............................................................. > │ > ..................//////////////////////<<<<<<<<<<<<<<<<<<<..................... > ...////<<<<<<<<<................................................................ > │ > ....................///////////////////<<<<<<<<<<<<<<<<<<....................... > ...../<<<....................................................................... > │ > ...................../////////////////<<<<<<<<<<<<<<<<<<........................ > ................................................................................ > │ > ......................///////////////<<<<<<<<<<<<<<<<<<......................... > ................................................................................ > │ > ........................////////////<<<<<<<<<<<<<<<<<........................... > ................................................................................ > │ > .........................//////////<<<<<<<<<<<<<<............................... > ................................................................................ > │ > ...........................///////<<<<<<<<<<<................................... > ................................................................................ > │ > ............................/////<<<<<<<........................................ > ................................................................................ > │ > ..............................//<<<<............................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .....................>;;;;;;;;;;;;.............................................. > ................................................................................ > │ > .....................///;;;;;;;;;;;;;;;;;;;;;;.................................. > ................................................................................ > │ > ....................>//////;;;;;;;;;;;;;;;;;;;;;;............................... > ................................................................................ > │ > ..................../////////;/;;;;;;;;;;;;;;;;;;;;;\........................... > ................................................................................ > │ > ...................>/////////////;;;;;;;;;;;;;;;;;;;;;;\........................ > ................................................................................ > │ > ...................////////////////;/;;;;;;;;;;;;;;;;;;;;;;..................... > ................................................................................ > │ > ..................>///////////////////;/;;;;;;;;;;;;;;;;;;;;;;.................. > .;;;;;;;;;;;;;.................................................................. > │ > .................>///////////////////////;;;;;;;;;;;;;;;;;;;;;;;;\.............. > >///;;;;;;;;;;;;;............................................................... > │ > .................//////////////////////////;;;;;;;;;;;;;;;;;;;;;;<<<............ > /////;;;;;;;;;;;;;;;............................................................ > │ > ................>/////////////////////////////;;;;<<<<<<<<<<<<<<<<<<...........> > ////////;/;;;;;;;;;;;;;............>/;;;;;;;.................................... > │ > ................////////////////////////////////<<<<<<<<<<<<<<<<<<<...........>/ > //////////;;;;;;;<<<<<<<..........>//;;;;;;;;;.................................. > │ > ...............>///////////////////////////////<<<<<<<<<<<<<<<<<<<...........>// > /////////////<<<<<<<<<<..........>///////<<<<<<................................. > │ > ...............///////////////////////////////<<<<<<<<<<<<<<<<<<............./// > ////////////<<<<<<<<<<...........////////<<<<<.................................. > │ > ..............>///////////////////////////////<<<<<<<<<<<<<<<<<.............>/// > ///////////<<<<<<<<<<............///////<<<<<................................... > │ > ..............//////////////////////////////<<<<<<<<<<<<<<<<<<.............../// > ///////////<<<<<<<<<................///<<<<<.................................... > │ > ..............//////////////////////////////<<<<<<<<<<<<<<<<<................../ > //////////<<<<<<<<<.................../......................................... > │ > ...............////////////////////////////<<<<<<<<<<<<<<<<<.................... > ..///////<<<<<<<<<.............................................................. > │ > ................./////////////////////////<<<<<<<<<<<<<<<<...................... > ....////<<<<<<<<................................................................ > │ > ...................//////////////////////<<<<<<<<<<<<<<<<....................... > ....../<<<...................................................................... > │ > .....................//////////////////<<<<<<<<<<<<<<<<<........................ > ................................................................................ > │ > ....................../////////////////<<<<<<<<<<<<<<<<......................... > ................................................................................ > │ > ........................//////////////<<<<<<<<<<<<<<<........................... > ................................................................................ > │ > ..........................///////////<<<<<<<<<<<<............................... > ................................................................................ > │ > ............................////////<<<<<<<<<<.................................. > ................................................................................ > │ > .............................//////<<<<<<<...................................... > ................................................................................ > │ > ...............................///<<<<.......................................... > ................................................................................ > │ > .................................<.............................................. > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ...................../;;;;;;;;.................................................. > ................................................................................ > │ > ....................>//;;;;;;;;;;;;;;;;;;;;;.................................... > ................................................................................ > │ > ....................//////;;;;;;;;;;;;;;;;;;;;;................................. > ................................................................................ > │ > ...................>//////////;/;;;;;;;;;;;;;;;;;;;............................. > ................................................................................ > │ > ...................//////////////;/;;;;;;;;;;;;;;;;;;;;......................... > ................................................................................ > │ > ..................>////////////////////;;;;;;;;;;;;;;;;;;;;..................... > ................................................................................ > │ > ..................//////////////////////;;;;;;;;;;;;;;;;;;;;;;;................. > .;;;;;;;;;;;;\.................................................................. > │ > .................>/////////////////////////;;;;;;;;;;;;;;;;;;;;;;;.............. > >/;;/;;;;;;;;;;;;............................................................... > │ > .................////////////////////////////////;;;<<<<<<<<<<<<<<<<............ > /////;;/;;;;;;;;;;;;............................................................ > │ > ................>/////////////////////////////////<<<<<<<<<<<<<<<<<............> > ////////;;;;;;;;;;;;;;;............;;;;;;;;;.................................... > │ > ................/////////////////////////////////<<<<<<<<<<<<<<<<.............>/ > ////////////;;<<<<<<<<<<..........>////;;;;;;;;................................. > │ > ...............>////////////////////////////////<<<<<<<<<<<<<<<<..............// > //////////////<<<<<<<<<...........//////;<<<<<<................................. > │ > ...............////////////////////////////////<<<<<<<<<<<<<<<<..............>// > /////////////<<<<<<<<<...........>///////<<<<<.................................. > │ > ..............>///////////////////////////////<<<<<<<<<<<<<<<<..............>/// > ////////////<<<<<<<<<............///////<<<<<................................... > │ > ..............///////////////////////////////<<<<<<<<<<<<<<<<................/// > ///////////<<<<<<<<<................///<<<<<.................................... > │ > .............>///////////////////////////////<<<<<<<<<<<<<<<.................../ > //////////<<<<<<<<<............................................................. > │ > ..............//////////////////////////////<<<<<<<<<<<<<<<..................... > ..///////<<<<<<<<<.............................................................. > │ > ................///////////////////////////<<<<<<<<<<<<<<<...................... > ..../////<<<<<<<................................................................ > │ > ..................////////////////////////<<<<<<<<<<<<<<<....................... > ......./<<...................................................................... > │ > ..................../////////////////////<<<<<<<<<<<<<<<........................ > ................................................................................ > │ > ......................//////////////////<<<<<<<<<<<<<<<......................... > ................................................................................ > │ > ........................///////////////<<<<<<<<<<<<<<........................... > ................................................................................ > │ > ...........................///////////<<<<<<<<<<<<.............................. > ................................................................................ > │ > ............................//////////<<<<<<<<<................................. > ................................................................................ > │ > ..............................///////<<<<<<..................................... > ................................................................................ > │ > ................................////<<<<........................................ > ................................................................................ > │ > ...................................<............................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .....................;;;;;...................................................... > ................................................................................ > │ > ....................>/;/;;;;;;;;;;;;;;.......................................... > ................................................................................ > │ > ....................//////;/;;;;;;;;;;;;;;;;;................................... > ................................................................................ > │ > ...................>//////////;;/;;;;;;;;;;;;;;;;;.............................. > ................................................................................ > │ > ...................////////////////;;;;;;;;;;;;;;;;;;;;......................... > ................................................................................ > │ > ..................>///////////////////////;;;;;;;;;;;;;;;;;..................... > ................................................................................ > │ > ................../////////////////////////;;;;;;;;;;;;;;;;;;;;;................ > .;;;;;;;;;;;.................................................................... > │ > .................>///////////////////////////////;;;;;<<<<<<<<<<<<<............. > >//;/;;;;;;;;;;;................................................................ > │ > .................//////////////////////////////////<<<<<<<<<<<<<<<.............> > //////;//;;;;;;;;;;;............................................................ > │ > ................>/////////////////////////////////<<<<<<<<<<<<<<<..............> > /////////;/;;;;;;;;;<<<<...........;;;;;;;;..................................... > │ > ................//////////////////////////////////<<<<<<<<<<<<<<..............>/ > //////////////<<<<<<<<<...........>///;;;;;;;<<................................. > │ > ...............>/////////////////////////////////<<<<<<<<<<<<<<<..............// > //////////////<<<<<<<<<...........///////;<<<<<................................. > │ > .............../////////////////////////////////<<<<<<<<<<<<<<<..............>// > /////////////<<<<<<<<<...........>///////<<<<<.................................. > │ > ..............>////////////////////////////////<<<<<<<<<<<<<<<..............>/// > ////////////<<<<<<<<<............///////<<<<<................................... > │ > ..............>///////////////////////////////<<<<<<<<<<<<<<<...............//// > ////////////<<<<<<<<................////<<<<<................................... > │ > ..............////////////////////////////////<<<<<<<<<<<<<<.................../ > ///////////<<<<<<<<............................................................. > │ > .............>///////////////////////////////<<<<<<<<<<<<<<..................... > ..////////<<<<<<<<.............................................................. > │ > .............../////////////////////////////<<<<<<<<<<<<<<...................... > .....////<<<<<<<................................................................ > │ > .................//////////////////////////<<<<<<<<<<<<<<....................... > .......//<<..................................................................... > │ > ....................///////////////////////<<<<<<<<<<<<<........................ > ................................................................................ > │ > ......................////////////////////<<<<<<<<<<<<<......................... > ................................................................................ > │ > ......................../////////////////<<<<<<<<<<<<........................... > ................................................................................ > │ > .........................../////////////<<<<<<<<<<.............................. > ................................................................................ > │ > .............................//////////<<<<<<<<................................. > ................................................................................ > │ > ................................///////<<<<<.................................... > ................................................................................ > │ > ..................................////<<<....................................... > ................................................................................ > │ > .....................................<.......................................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ....................;;.......................................................... > ................................................................................ > │ > ....................//;/;;;;;;;;;............................................... > ................................................................................ > │ > ...................>//////;;;/;;;;;;;;;;;;;..................................... > ................................................................................ > │ > ...................////////////;;;;;;;;;;;;;;;;;................................ > ................................................................................ > │ > ..................>/////////////////////;;;;;;;;;;;;;;.......................... > ................................................................................ > │ > ..................>///////////////////////;;;/;;;;;;;;;;;;;;.................... > ................................................................................ > │ > ................../////////////////////////////;;/;;;;;;;;;;;;;;;............... > ;;;;;;;;;;;..................................................................... > │ > .................>//////////////////////////////////<<<<<<<<<<<<<<.............. > >/;/;;;;;;;;;;;;................................................................ > │ > .................//////////////////////////////////<<<<<<<<<<<<<<..............> > ///////;;/;;;;;;;;;;;........................................................... > │ > ................>//////////////////////////////////<<<<<<<<<<<<<...............> > //////////;;/;;;<<<<<<<............/;;;;;;;\.................................... > │ > ................//////////////////////////////////<<<<<<<<<<<<<...............>/ > ///////////////<<<<<<<<...........>//;;/;;;;<<<................................. > │ > ...............>//////////////////////////////////<<<<<<<<<<<<................// > //////////////<<<<<<<<............>///////<<<<.................................. > │ > ...............>/////////////////////////////////<<<<<<<<<<<<<...............>// > /////////////<<<<<<<<............>///////<<<<<.................................. > │ > .............../////////////////////////////////<<<<<<<<<<<<<................>// > /////////////<<<<<<<<............////////<<<<................................... > │ > ..............>////////////////////////////////<<<<<<<<<<<<<................./// > ////////////<<<<<<<<................////<<<<<................................... > │ > ............../////////////////////////////////<<<<<<<<<<<<...................// > ///////////<<<<<<<<............................................................. > │ > .............>////////////////////////////////<<<<<<<<<<<<<..................... > ../////////<<<<<<<<............................................................. > │ > .............////////////////////////////////<<<<<<<<<<<<<...................... > ...../////<<<<<<................................................................ > │ > ................/////////////////////////////<<<<<<<<<<<<....................... > ........./<..................................................................... > │ > .................../////////////////////////<<<<<<<<<<<<........................ > ................................................................................ > │ > ....................../////////////////////<<<<<<<<<<<<......................... > ................................................................................ > │ > ........................///////////////////<<<<<<<<<<........................... > ................................................................................ > │ > ............................//////////////<<<<<<<<<............................. > ................................................................................ > │ > ...............................//////////<<<<<<<................................ > ................................................................................ > │ > ..................................///////<<<<<.................................. > ................................................................................ > │ > ....................................////<<<..................................... > ................................................................................ > │ > ......................................./........................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ...................;/;;;;;;;;................................................... > ................................................................................ > │ > ...................//////;///;;;;;;;;;;......................................... > ................................................................................ > │ > ..................>/////////////;;;;;;;;;;;;;;;................................. > ................................................................................ > │ > ..................>////////////////////;//;;;;;;;;;;;;.......................... > ................................................................................ > │ > ................../////////////////////////////;/;;;;;;;;;;;;................... > ................................................................................ > │ > .................>///////////////////////////////////<<<<<<<<<<<<............... > ................................................................................ > │ > .................>//////////////////////////////////<<<<<<<<<<<<................ > /;;/;;;;;;;;;;;................................................................. > │ > .................///////////////////////////////////<<<<<<<<<<<<...............> > ///////;;;;;;;;;;;;;;........................................................... > │ > ................>//////////////////////////////////<<<<<<<<<<<<................> > /////////////;;<<<<<<<<............;;;;;;;;..................................... > │ > ................>//////////////////////////////////<<<<<<<<<<<................>/ > ///////////////<<<<<<<............>//;;/;;<<<<<................................. > │ > ................//////////////////////////////////<<<<<<<<<<<<................>/ > ///////////////<<<<<<<............>///////<<<<.................................. > │ > ...............>//////////////////////////////////<<<<<<<<<<<.................// > //////////////<<<<<<<............>///////<<<<<.................................. > │ > ...............//////////////////////////////////<<<<<<<<<<<.................>// > /////////////<<<<<<<.............>///////<<<<................................... > │ > ...............//////////////////////////////////<<<<<<<<<<<................./// > /////////////<<<<<<<................////<<<<<................................... > │ > ..............>/////////////////////////////////<<<<<<<<<<<................../// > ////////////<<<<<<<............................................................. > │ > ............../////////////////////////////////<<<<<<<<<<<...................... > ..//////////<<<<<<<............................................................. > │ > .............//////////////////////////////////<<<<<<<<<<<...................... > ....../////<<<<<................................................................ > │ > ..............////////////////////////////////<<<<<<<<<<<....................... > ........../<.................................................................... > │ > ................./////////////////////////////<<<<<<<<<<........................ > ................................................................................ > │ > .....................////////////////////////<<<<<<<<<<<........................ > ................................................................................ > │ > ........................////////////////////<<<<<<<<<<.......................... > ................................................................................ > │ > ............................////////////////<<<<<<<............................. > ................................................................................ > │ > ................................///////////<<<<<<............................... > ................................................................................ > │ > ...................................////////<<<<................................. > ................................................................................ > │ > .......................................///<<.................................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ...................;;;;;........................................................ > ................................................................................ > │ > ..................>//////;;;;;;;;;;............................................. > ................................................................................ > │ > ..................>//////////////;;;;/;;;;;;.................................... > ................................................................................ > │ > ..................//////////////////////////;;;;;;;;;;.......................... > ................................................................................ > │ > ..................//////////////////////////////////;/<<<<<<<<<................. > ................................................................................ > │ > .................>///////////////////////////////////<<<<<<<<<<................. > ................................................................................ > │ > .................////////////////////////////////////<<<<<<<<<<................. > ;/;;;;;;;;;;;;;................................................................. > │ > .................///////////////////////////////////<<<<<<<<<<.................> > ///////;;;;;;;;;;;;;;<.......................................................... > │ > ................>///////////////////////////////////<<<<<<<<<<................./ > //////////////;<<<<<<<.............;;;;;;;;..................................... > │ > ................>///////////////////////////////////<<<<<<<<<................../ > ///////////////<<<<<<<............>//;;//;<<<<.................................. > │ > ................///////////////////////////////////<<<<<<<<<<.................>/ > ///////////////<<<<<<.............>///////<<<<.................................. > │ > ...............>//////////////////////////////////<<<<<<<<<<..................// > //////////////<<<<<<<.............////////<<<<.................................. > │ > ...............>//////////////////////////////////<<<<<<<<<<..................// > ///////////////<<<<<.............>///////<<<<................................... > │ > ...............///////////////////////////////////<<<<<<<<<..................>// > /////////////<<<<<<<................/////<<<<................................... > │ > ...............//////////////////////////////////<<<<<<<<<<................../// > /////////////<<<<<<............................................................. > │ > ..............>//////////////////////////////////<<<<<<<<<...................... > .///////////<<<<<<<............................................................. > │ > ..............>/////////////////////////////////<<<<<<<<<<...................... > ......./////<<<<................................................................ > │ > ..............//////////////////////////////////<<<<<<<<<....................... > ................................................................................ > │ > ...............////////////////////////////////<<<<<<<<<<....................... > ................................................................................ > │ > ....................///////////////////////////<<<<<<<<<........................ > ................................................................................ > │ > ........................//////////////////////<<<<<<<<.......................... > ................................................................................ > │ > ............................./////////////////<<<<<<............................ > ................................................................................ > │ > .................................////////////<<<<<.............................. > ................................................................................ > │ > ......................................///////<<<................................ > ................................................................................ > │ > ..........................................//<<.................................. > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ..................;;;........................................................... > ................................................................................ > │ > ..................//;;;;;;/;;;;;;;;............................................. > ................................................................................ > │ > ..................////////////////;;//;;;;;;;;;;;............................... > ................................................................................ > │ > .................>///////////////////////////////;;;/;<<<<<..................... > ................................................................................ > │ > .................>////////////////////////////////////<<<<<<<<.................. > ................................................................................ > │ > ................./////////////////////////////////////<<<<<<<<.................. > ................................................................................ > │ > .................////////////////////////////////////<<<<<<<<<.................> > /;;;;;;;;;;;;;.................................................................. > │ > .................////////////////////////////////////<<<<<<<<..................> > ///////;;;;;;;;/<<<<<<.......................................................... > │ > ................>///////////////////////////////////<<<<<<<<<................../ > ////////////////<<<<<<.............;;;;;;;;..................................... > │ > ................>///////////////////////////////////<<<<<<<<.................../ > ///////////////<<<<<<.............>//;;;//<<<<.................................. > │ > ................////////////////////////////////////<<<<<<<<..................>/ > ///////////////<<<<<<.............>///////<<<<.................................. > │ > ................///////////////////////////////////<<<<<<<<<..................>/ > //////////////<<<<<<..............////////<<<................................... > │ > ................///////////////////////////////////<<<<<<<<...................// > //////////////<<<<<<..............///////<<<<................................... > │ > ...............>///////////////////////////////////<<<<<<<<...................// > //////////////<<<<<<................/////<<<<................................... > │ > ...............>//////////////////////////////////<<<<<<<<...................>// > /////////////<<<<<<............................................................. > │ > ...............///////////////////////////////////<<<<<<<<...................... > .////////////<<<<<<............................................................. > │ > ...............///////////////////////////////////<<<<<<<<...................... > ......../////<<<................................................................ > │ > ..............>//////////////////////////////////<<<<<<<<....................... > ................................................................................ > │ > ..............>//////////////////////////////////<<<<<<<<....................... > ................................................................................ > │ > ..................//////////////////////////////<<<<<<<<........................ > ................................................................................ > │ > ......................./////////////////////////<<<<<<.......................... > ................................................................................ > │ > .............................///////////////////<<<<............................ > ................................................................................ > │ > ...................................////////////<<<<............................. > ................................................................................ > │ > .........................................//////<<............................... > ................................................................................ > │ > ............................................../................................. > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .................>;;;;;;;;;;;;/;;;;;;;;......................................... > ................................................................................ > │ > .................>////////////////////;;/;;/;;/;;;;;;;;<<....................... > ................................................................................ > │ > .................>////////////////////////////////////<<<<<<.................... > ................................................................................ > │ > ................./////////////////////////////////////<<<<<<<................... > ................................................................................ > │ > ................./////////////////////////////////////<<<<<<<................... > ................................................................................ > │ > ................./////////////////////////////////////<<<<<<...................; > ;;;;;/;;;;;;;................................................................... > │ > .................////////////////////////////////////<<<<<<<...................> > ////////;;;///;;<<<<<........................................................... > │ > ................>////////////////////////////////////<<<<<<<.................../ > ////////////////<<<<<..............;;;;;;;;..................................... > │ > ................>////////////////////////////////////<<<<<<..................../ > ///////////////<<<<<<.............>//;;;;;<<<<.................................. > │ > ................>////////////////////////////////////<<<<<<..................../ > ///////////////<<<<<..............>///////<<<<.................................. > │ > ................>///////////////////////////////////<<<<<<<...................>/ > ///////////////<<<<<..............>///////<<<................................... > │ > ................////////////////////////////////////<<<<<<<...................>/ > ///////////////<<<<<..............////////<<<................................... > │ > ................////////////////////////////////////<<<<<<....................>/ > ///////////////<<<<<...............///////<<=................................... > │ > ................////////////////////////////////////<<<<<<....................// > //////////////<<<<<............................................................. > │ > ...............>///////////////////////////////////<<<<<<<...................../ > //////////////<<<<<............................................................. > │ > ...............>///////////////////////////////////<<<<<<....................... > ........./////<<................................................................ > │ > ...............>///////////////////////////////////<<<<<<....................... > ................................................................................ > │ > ...............>///////////////////////////////////<<<<<<....................... > ................................................................................ > │ > ...............///////////////////////////////////<<<<<<........................ > ................................................................................ > │ > ......................////////////////////////////<<<<<......................... > ................................................................................ > │ > ..............................////////////////////<<<........................... > ................................................................................ > │ > ...................................../////////////<<............................ > ................................................................................ > │ > .............................................////<<............................. > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<........................ > ................................................................................ > │ > .................//////////////////////////////////////<<<...................... > ................................................................................ > │ > .................//////////////////////////////////////<<<<..................... > ................................................................................ > │ > ................./////////////////////////////////////<<<<<..................... > ................................................................................ > │ > ................./////////////////////////////////////<<<<<..................... > ................................................................................ > │ > ................./////////////////////////////////////<<<<<....................; > ;/;;;;;;;;;;.................................................................... > │ > ................./////////////////////////////////////<<<<<..................../ > ////////////;;;;<<<<............................................................ > │ > ................./////////////////////////////////////<<<<<..................../ > ////////////////<<<<...............;;;;;;;;..................................... > │ > ................>/////////////////////////////////////<<<<<..................../ > ////////////////<<<<..............>//;;;;;<<<<.................................. > │ > ................>/////////////////////////////////////<<<<...................../ > ////////////////<<<<..............>///////<<<................................... > │ > ................>////////////////////////////////////<<<<<...................../ > ///////////////<<<<<..............>///////<<<................................... > │ > ................>////////////////////////////////////<<<<<...................../ > ///////////////<<<<<..............>///////<<<................................... > │ > ................>////////////////////////////////////<<<<<...................../ > ///////////////<<<<<..............////////<<.................................... > │ > ................>////////////////////////////////////<<<<<....................>/ > ///////////////<<<<............................................................. > │ > ................>////////////////////////////////////<<<<<....................// > ///////////////<<<<............................................................. > │ > ................>////////////////////////////////////<<<<....................... > ............///<................................................................ > │ > ................>////////////////////////////////////<<<<....................... > ................................................................................ > │ > ................////////////////////////////////////<<<<<....................... > ................................................................................ > │ > ................////////////////////////////////////<<<<........................ > ................................................................................ > │ > .................///////////////////////////////////<<<......................... > ................................................................................ > │ > .............................///////////////////////<<.......................... > ................................................................................ > │ > .........................................///////////<........................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .................;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<........................ > ................................................................................ > │ > ................;//////////////////////////////////////<<....................... > ................................................................................ > │ > ................>//////////////////////////////////////<<<...................... > ................................................................................ > │ > ................>//////////////////////////////////////<<<...................... > ................................................................................ > │ > ................>//////////////////////////////////////<<<...................... > ................................................................................ > │ > ................>//////////////////////////////////////<<<.....................; > ;;;;;;;;;;;;;;;;<<<............................................................. > │ > .................//////////////////////////////////////<<<...................../ > ////////////////<<<<............................................................ > │ > .................//////////////////////////////////////<<<...................../ > ////////////////<<<<...............;;;;;;;;;<................................... > │ > .................//////////////////////////////////////<<<...................../ > ////////////////<<<<..............;;;;;;;;;<<................................... > │ > .................//////////////////////////////////////<<<...................../ > ////////////////<<<<..............>////////<<................................... > │ > ................./////////////////////////////////////<<<<...................../ > ////////////////<<<<..............>////////<<................................... > │ > ................./////////////////////////////////////<<<<...................../ > ////////////////<<<<..............>////////<<................................... > │ > ................./////////////////////////////////////<<<<...................../ > ////////////////<<<<..............////////<<.................................... > │ > ................./////////////////////////////////////<<<<...................../ > ////////////////<<<<............................................................ > │ > ................./////////////////////////////////////<<<<.....................> > ////////////////<<.............................................................. > │ > ................./////////////////////////////////////<<<....................... > ................................................................................ > │ > ................./////////////////////////////////////<<<....................... > ................................................................................ > │ > ................./////////////////////////////////////<<<....................... > ................................................................................ > │ > ................./////////////////////////////////////<<<....................... > ................................................................................ > │ > .................>////////////////////////////////////<<........................ > ................................................................................ > │ > ..........................////////////////////////////<<........................ > ................................................................................ > │ > ................................................//////<......................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ..............................................;;;;;;;;;<........................ > ................................................................................ > │ > .........................;;;;;;;;;;;;;;;;;;;;;/////////<........................ > ................................................................................ > │ > ................;;;;;;;;;//////////////////////////////<........................ > ................................................................................ > │ > ................///////////////////////////////////////<........................ > ................................................................................ > │ > ................>//////////////////////////////////////<<....................... > ................................................................................ > │ > ................>//////////////////////////////////////<<....................... > ................................................................................ > │ > ................>//////////////////////////////////////<<....................... > ..;;;;;;;;;;;;;;<<<............................................................. > │ > ................>//////////////////////////////////////<<......................; > ;;//////////////<<<............................................................. > │ > .................//////////////////////////////////////<<....................../ > ////////////////<<<....................;;;;<<................................... > │ > .................//////////////////////////////////////<<....................../ > ////////////////<<<...............;;;;;////<<................................... > │ > .................//////////////////////////////////////<<......................> > ////////////////<<<...............>////////<<................................... > │ > .................>//////////////////////////////////////<......................> > ////////////////<<<................////////<<................................... > │ > .................>//////////////////////////////////////<......................> > /////////////////<<<...............////////<<................................... > │ > .................>//////////////////////////////////////<......................> > /////////////////<<<.............../////////.................................... > │ > .................>//////////////////////////////////////<....................... > /////////////////<<<............................................................ > │ > ..................//////////////////////////////////////<....................... > /////////////////<<............................................................. > │ > ..................//////////////////////////////////////<<...................... > ................................................................................ > │ > ..................//////////////////////////////////////<<...................... > ................................................................................ > │ > ..................//////////////////////////////////////<<...................... > ................................................................................ > │ > ..................>/////////////////////////////////////<<...................... > ................................................................................ > │ > ..................>/////////////////////////////////////<....................... > ................................................................................ > │ > ..................//////////////////////////////////////<....................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ......................................................<......................... > ................................................................................ > │ > .........................................;;;;;;;;;;;;;<......................... > ................................................................................ > │ > ...........................;;;;;;;;;;;;;;//////////////<........................ > ................................................................................ > │ > ...............;;;;;;;;;;;;;///////////////////////////<........................ > ................................................................................ > │ > ...............>///////////////////////////////////////<........................ > ................................................................................ > │ > ................///////////////////////////////////////<........................ > ................................................................................ > │ > ................///////////////////////////////////////<<....................... > ................................................................................ > │ > ................>///////////////////////////////////////<....................... > ....;;;;;;;;;;;;<<.............................................................. > │ > ................>///////////////////////////////////////<......................; > ;;;;////////////<<.............................................................. > │ > .................///////////////////////////////////////<....................../ > ////////////////<<<....................;;;<<.................................... > │ > .................///////////////////////////////////////<....................../ > /////////////////<<...............;;;;;////<<................................... > │ > .................>//////////////////////////////////////<<.....................> > /////////////////<<...............>////////<<................................... > │ > .................>///////////////////////////////////////<.....................> > /////////////////<<................////////<<................................... > │ > ..................///////////////////////////////////////<...................... > /////////////////<<................////////<<................................... > │ > ..................///////////////////////////////////////<...................... > /////////////////<<<...............>////////.................................... > │ > ..................>//////////////////////////////////////<...................... > >/////////////////<<............................................................ > │ > ..................>///////////////////////////////////////<..................... > >/////////////////<............................................................. > │ > ...................///////////////////////////////////////<..................... > ................................................................................ > │ > ...................///////////////////////////////////////<..................... > ................................................................................ > │ > ...................>//////////////////////////////////////<..................... > ................................................................................ > │ > ...................>//////////////////////////////////////<..................... > ................................................................................ > │ > ...................>///////////////////////////////////////<.................... > ................................................................................ > │ > ....................////////////////////////////................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .................................................;;;;;<......................... > ................................................................................ > │ > .......................................;;;;;;;;;;/////<......................... > ................................................................................ > │ > .............................;;;;;;;;;;///////////////<<........................ > ................................................................................ > │ > ...................;;;;;;;;;;//////////////////////////<........................ > ................................................................................ > │ > ...............;;;;////////////////////////////////////<........................ > ................................................................................ > │ > ...............>///////////////////////////////////////<<....................... > ................................................................................ > │ > ...............>////////////////////////////////////////<....................... > ................<............................................................... > │ > ................////////////////////////////////////////<....................... > .....;;;;;;;;;;;<............................................................... > │ > ................>///////////////////////////////////////<<....................;; > ;;;;;///////////<<.............................................................. > │ > .................////////////////////////////////////////<...................../ > ////////////////<<.....................;;;<<.................................... > │ > .................>///////////////////////////////////////<...................../ > /////////////////<................;;;;;////<.................................... > │ > .................>///////////////////////////////////////<<....................> > /////////////////<<...............>////////<<................................... > │ > ..................////////////////////////////////////////<..................... > /////////////////<<................////////<<................................... > │ > ..................>///////////////////////////////////////<..................... > //////////////////<................>////////<................................... > │ > ..................>///////////////////////////////////////<<.................... > >/////////////////<<................//////...................................... > │ > ...................////////////////////////////////////////<.................... > .//////////////////<............................................................ > │ > ...................>///////////////////////////////////////<.................... > .>///////////////............................................................... > │ > ...................>///////////////////////////////////////<<................... > .///............................................................................ > │ > ....................////////////////////////////////////////<................... > ................................................................................ > │ > ....................>///////////////////////////////////////<................... > ................................................................................ > │ > ....................>///////////////////////////////////////<<.................. > ................................................................................ > │ > ...................../////////////////////////////////////...................... > ................................................................................ > │ > .....................>/////////////////////..................................... > ................................................................................ > │ > ......................///////................................................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .....................................................<.......................... > ................................................................................ > │ > ..............................................;;;;;;;<<......................... > ................................................................................ > │ > .....................................;;;;;;;;;////////<......................... > ................................................................................ > │ > .............................;;;;;;;;;////////////////<<........................ > ................................................................................ > │ > ......................;;;;;;;//////////////////////////<........................ > ................................................................................ > │ > ...............;;;;;;;/////////////////////////////////<........................ > ................................................................................ > │ > .............../////////////////////////////////////////<....................... > ................................................................................ > │ > ...............>////////////////////////////////////////<....................... > .............;;;<............................................................... > │ > ................/////////////////////////////////////////<...................... > .....;;;;;;;;///<............................................................... > │ > ................>////////////////////////////////////////<....................;; > ;;;;;///////////<<.............................................................. > │ > ................./////////////////////////////////////////<...................>/ > /////////////////<.....................;;;<<.................................... > │ > .................>////////////////////////////////////////<..................../ > /////////////////<<...............;;;;;////<.................................... > │ > ................../////////////////////////////////////////<...................> > //////////////////<...............>////////<<................................... > │ > ..................>////////////////////////////////////////<.................... > //////////////////<................/////////<................................... > │ > ..................>////////////////////////////////////////<<................... > >//////////////////<...............>////////<................................... > │ > ...................>////////////////////////////////////////<................... > .//////////////////<................/////=...................................... > │ > ...................>////////////////////////////////////////<<.................. > .>/////////////////<<........................................................... > │ > ....................>////////////////////////////////////////<.................. > ../////////////................................................................. > │ > ....................>////////////////////////////////////////<<................. > ..>///.......................................................................... > │ > ...................../////////////////////////////////////////<................. > ................................................................................ > │ > .....................>////////////////////////////////////////<................. > ................................................................................ > │ > ......................///////////////////////////////////////................... > ................................................................................ > │ > ......................>/////////////////////////////............................ > ................................................................................ > │ > .......................////////////////////..................................... > ................................................................................ > │ > .......................>//////////.............................................. > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ..................................................;;;<.......................... > ................................................................................ > │ > ............................................;;;;;;///<.......................... > ................................................................................ > │ > .....................................;;;;;;;/////////<<......................... > ................................................................................ > │ > ..............................;;;;;;;/////////////////<<........................ > ................................................................................ > │ > .......................;;;;;;;/////////////////////////<........................ > ................................................................................ > │ > .................;;;;;;;///////////////////////////////<<....................... > ................................................................................ > │ > ..............;;;///////////////////////////////////////<....................... > ................................................................................ > │ > ...............//////////////////////////////////////////<...................... > ............;;;<................................................................ > │ > ...............>/////////////////////////////////////////<<..................... > .....;;;;;;;////<............................................................... > │ > ................>/////////////////////////////////////////<....................; > ;;;;;///////////<<.............................................................. > │ > ................./////////////////////////////////////////<<..................;/ > /////////////////<.....................;;;<<.................................... > │ > .................>/////////////////////////////////////////<.................../ > /////////////////<<...............;;;;;////<.................................... > │ > ..................//////////////////////////////////////////<................... > //////////////////<<..............>////////<<................................... > │ > ..................>/////////////////////////////////////////<<.................. > >//////////////////<...............>////////<................................... > │ > ...................>/////////////////////////////////////////<.................. > .//////////////////<<...............////////<<.................................. > │ > ..................../////////////////////////////////////////<<................. > .>//////////////////<...............>////....................................... > │ > ....................>/////////////////////////////////////////<................. > ..///////////////////........................................................... > │ > ...................../////////////////////////////////////////<<................ > ..>////////////................................................................. > │ > .....................>/////////////////////////////////////////<................ > ...>////........................................................................ > │ > ......................>/////////////////////////////////////////<............... > ................................................................................ > │ > ......................./////////////////////////////////////////................ > ................................................................................ > │ > .......................>/////////////////////////////////....................... > ................................................................................ > │ > ........................//////////////////////////.............................. > ................................................................................ > │ > ........................>//////////////////..................................... > ................................................................................ > │ > .........................>//////////............................................ > ................................................................................ > │ > ..........................////.................................................. > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................;;;/;........................... > ................................................................................ > │ > ..........................................;;;;/;//////.......................... > ................................................................................ > │ > ....................................;;;;///////////////......................... > ................................................................................ > │ > ...............................;;/;;///////////////////<........................ > ................................................................................ > │ > .........................;;;;/;/////////////////////////........................ > ................................................................................ > │ > ...................;;;;//;///////////////////////////////....................... > ................................................................................ > │ > ..............;;/;;//////////////////////////////////////<...................... > ................................................................................ > │ > ..............>>//////////////////////////////////////////...................... > ...........;;;//................................................................ > │ > ...............>>//////////////////////////////////////////..................... > ......;;/////////............................................................... > │ > ................>///////////////////////////////////////////.................... > ;;;///////////////.............................................................. > │ > .................>//////////////////////////////////////////<.................;> > //////////////////<...................;;///<.................................... > │ > .................>>//////////////////////////////////////////..................> > ///////////////////...............;;;;//////.................................... > │ > ..................>>//////////////////////////////////////////.................. > >///////////////////...............>/////////................................... > │ > ...................>//////////////////////////////////////////<................. > >>///////////////////..............>>////////<.................................. > │ > ....................>//////////////////////////////////////////................. > .>>//////////////////...............>>////////.................................. > │ > ....................>>//////////////////////////////////////////................ > ..>///////////////////...............>///....................................... > │ > .....................>///////////////////////////////////////////............... > ...>////////////////............................................................ > │ > ......................>//////////////////////////////////////////<.............. > ...>>/////////.................................................................. > │ > ......................>>//////////////////////////////////////////.............. > ....>////....................................................................... > │ > .......................>>/////////////////////////////////////////.............. > ................................................................................ > │ > ........................>>//////////////////////////////////.................... > ................................................................................ > │ > .........................>////////////////////////////.......................... > ................................................................................ > │ > .........................>>//////////////////////............................... > ................................................................................ > │ > ..........................>>////////////////.................................... > ................................................................................ > │ > ...........................>///////////......................................... > ................................................................................ > │ > ............................>////............................................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ...................................................;............................ > ................................................................................ > │ > ..............................................;/;;///........................... > ................................................................................ > │ > .........................................;;;//////////.......................... > ................................................................................ > │ > ....................................;;;///////////////<......................... > ................................................................................ > │ > ...............................;;;/;///////////////////<........................ > ................................................................................ > │ > ..........................;;;/;/////////////////////////<....................... > ................................................................................ > │ > ......................;;/////////////////////////////////....................... > ................................................................................ > │ > .................;;;//////////////////////////////////////...................... > ................................................................................ > │ > ..............;>///////////////////////////////////////////..................... > ...........;;;;/................................................................ > │ > ...............>///////////////////////////////////////////<.................... > ......;;/////////............................................................... > │ > ................>///////////////////////////////////////////<................... > .;;;//////////////.............................................................. > │ > .................>///////////////////////////////////////////<................;> > ///////////////////...................;;///<.................................... > │ > .................>>///////////////////////////////////////////.................> > >///////////////////..............;;;;//////.................................... > │ > ..................>>///////////////////////////////////////////................. > >///////////////////<.............>>/////////................................... > │ > ...................>>///////////////////////////////////////////................ > .>///////////////////<.............>>/////////.................................. > │ > ....................>>///////////////////////////////////////////............... > .>>///////////////////..............>>////////.................................. > │ > .....................>///////////////////////////////////////////<.............. > ..>>///////////////////..............>////...................................... > │ > ......................>///////////////////////////////////////////<............. > ...>>//////////////............................................................. > │ > .......................>///////////////////////////////////////////............. > ....>>////////.................................................................. > │ > ........................>//////////////////////////////////////////............. > .....>////...................................................................... > │ > ........................>>/////////////////////////////////////................. > ................................................................................ > │ > .........................>>///////////////////////////////...................... > ................................................................................ > │ > ..........................>>//////////////////////////.......................... > ................................................................................ > │ > ...........................>>////////////////////............................... > ................................................................................ > │ > ............................>>///////////////................................... > ................................................................................ > │ > .............................>>/////////........................................ > ................................................................................ > │ > ..............................>/////............................................ > ................................................................................ > │ > .............................../................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................;;/<............................ > ................................................................................ > │ > ............................................;;//////<........................... > ................................................................................ > │ > ........................................;;;//////////<.......................... > ................................................................................ > │ > ....................................;/;;//////////////<......................... > ................................................................................ > │ > ................................;;/////////////////////<........................ > ................................................................................ > │ > ...........................;;//;////////////////////////........................ > ................................................................................ > │ > .......................;;;///////////////////////////////<...................... > ................................................................................ > │ > ...................;/;////////////////////////////////////<..................... > ..............;................................................................. > │ > ..............;;;;/////////////////////////////////////////<.................... > ..........;/////................................................................ > │ > ..............;>////////////////////////////////////////////<................... > ......;;;;///////............................................................... > │ > ................>////////////////////////////////////////////<.................. > ..;///////////////.............................................................. > │ > .................>////////////////////////////////////////////.................; > ;//////////////////...................;;;//<.................................... > │ > ..................>////////////////////////////////////////////................> > >///////////////////..............;;;///////<................................... > │ > ...................>////////////////////////////////////////////<..............> > >>///////////////////.............>>/////////<.................................. > │ > ....................>////////////////////////////////////////////<.............. > >>>///////////////////.............>>/////////.................................. > │ > .....................>////////////////////////////////////////////<............. > .>>>///////////////////.............>>////////.................................. > │ > ......................>////////////////////////////////////////////<............ > ..>>>/////////////////...............>>///...................................... > │ > .......................>////////////////////////////////////////////............ > ...>>>////////////.............................................................. > │ > ........................>///////////////////////////////////////////............ > ....>>>///////.................................................................. > │ > .........................>>/////////////////////////////////////................ > .....>>////..................................................................... > │ > ..........................>/////////////////////////////////.................... > ................................................................................ > │ > ...........................>>////////////////////////////....................... > ................................................................................ > │ > ............................>>///////////////////////........................... > ................................................................................ > │ > .............................>////////////////////.............................. > ................................................................................ > │ > ..............................>>//////////////.................................. > ................................................................................ > │ > ...............................>>/////////...................................... > ................................................................................ > │ > ................................>>////.......................................... > ................................................................................ > │ > .................................>/............................................. > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ...............................................;;;/............................. > ................................................................................ > │ > ...........................................;;;//////............................ > ................................................................................ > │ > .......................................;;;///////////........................... > ................................................................................ > │ > ....................................;;////////////////.......................... > ................................................................................ > │ > ................................;;;////////////////////<........................ > ................................................................................ > │ > ............................;;/;////////////////////////<....................... > ................................................................................ > │ > .........................;;//////////////////////////////<...................... > ................................................................................ > │ > .....................;/////////////////////////////////////..................... > .............;;................................................................. > │ > .................;/;////////////////////////////////////////.................... > ..........;;////................................................................ > │ > ...............;/////////////////////////////////////////////................... > ......;;;////////............................................................... > │ > ...............>>/////////////////////////////////////////////.................. > ...;//////////////<............................................................. > │ > ................>>/////////////////////////////////////////////................; > ;///////////////////..................;;;//<.................................... > │ > ..................>>////////////////////////////////////////////<.............;; > >////////////////////..............;/////////................................... > │ > ...................>>////////////////////////////////////////////<............\> > >>////////////////////............;>//////////.................................. > │ > ....................>>////////////////////////////////////////////<............. > >>>////////////////////...........\>>//////////................................. > │ > .....................>>/////////////////////////////////////////////............ > .>>>////////////////////............>>>//////................................... > │ > .......................>/////////////////////////////////////////////........... > ..>>>////////////////................>>///...................................... > │ > ........................>////////////////////////////////////////////........... > ...>>>////////////.............................................................. > │ > .........................>>///////////////////////////////////////.............. > ....>>>>///////................................................................. > │ > ..........................>>///////////////////////////////////................. > .....\>>>///.................................................................... > │ > ...........................>>//////////////////////////////..................... > ................................................................................ > │ > ............................>>//////////////////////////........................ > ................................................................................ > │ > .............................>>//////////////////////........................... > ................................................................................ > │ > ...............................>//////////////////.............................. > ................................................................................ > │ > ................................>>/////////////................................. > ................................................................................ > │ > .................................>>/////////.................................... > ................................................................................ > │ > ..................................>>/////....................................... > ................................................................................ > │ > ...................................>//.......................................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .............................................;;///.............................. > ................................................................................ > │ > ..........................................;;;//////<............................ > ................................................................................ > │ > .......................................;////////////<........................... > ................................................................................ > │ > ....................................;/////////////////.......................... > ................................................................................ > │ > ................................;;;////////////////////<........................ > ................................................................................ > │ > .............................;;;////////////////////////<....................... > ................................................................................ > │ > ..........................;///////////////////////////////...................... > ................................................................................ > │ > ......................;;///////////////////////////////////..................... > .............;/................................................................. > │ > ...................;;;//////////////////////////////////////<................... > ..........;;////................................................................ > │ > ................;;////////////////////////////////////////////.................. > ......;;;////////............................................................... > │ > ...............;>//////////////////////////////////////////////................. > ...;;//////////////......................<...................................... > │ > ................>>//////////////////////////////////////////////................ > ;///////////////////..................;;;//<.................................... > │ > .................>>>//////////////////////////////////////////////............;; > >////////////////////..............;;;///////................................... > │ > ..................>>>//////////////////////////////////////////////...........>> > >>////////////////////<..........;;;>/////////.................................. > │ > ...................>>>//////////////////////////////////////////////...........> > >>>/////////////////////..........>>>>/////////................................. > │ > .....................>>>/////////////////////////////////////////////<.......... > >>>>>//////////////////............>>>>//////................................... > │ > ......................>>>////////////////////////////////////////////........... > .\>>>>///////////////................>>>//...................................... > │ > ........................>>>////////////////////////////////////////............. > ...>>>>///////////.............................................................. > │ > .........................>>>////////////////////////////////////................ > ....>>>>>//////................................................................. > │ > ..........................>>>////////////////////////////////................... > ......>>>>//.................................................................... > │ > ............................>>>////////////////////////////..................... > ................................................................................ > │ > .............................>>>////////////////////////........................ > ................................................................................ > │ > ..............................>>>////////////////////........................... > ................................................................................ > │ > ................................>>>////////////////............................. > ................................................................................ > │ > .................................>>>////////////................................ > ................................................................................ > │ > ...................................>>>////////.................................. > ................................................................................ > │ > ....................................>>>////..................................... > ................................................................................ > │ > ......................................>//....................................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ...............................................;<............................... > ................................................................................ > │ > ............................................;;;//<.............................. > ................................................................................ > │ > ..........................................;;///////<............................ > ................................................................................ > │ > .......................................;////////////<........................... > ................................................................................ > │ > ....................................;/////////////////.......................... > ................................................................................ > │ > .................................;/////////////////////<........................ > ................................................................................ > │ > ..............................;;/////////////////////////....................... > ................................................................................ > │ > ...........................;;/////////////////////////////...................... > ................................................................................ > │ > ........................;;//////////////////////////////////.................... > ............;;<................................................................. > │ > .....................;;//////////////////////////////////////................... > .........;//////................................................................ > │ > ..................;///////////////////////////////////////////<................. > .......;//////////.............................................................. > │ > ................;///////////////////////////////////////////////................ > ....;;/////////////......................;...................................... > │ > ................>>>//////////////////////////////////////////////<.............. > .;;/////////////////<.................;;///<.................................... > │ > ................>>>>///////////////////////////////////////////////............; > >/////////////////////.............;;////////................................... > │ > ................;>>>>>//////////////////////////////////////////////<........;;> > >>/////////////////////<.........;;;>/////////<................................. > │ > ..................>>>>>//////////////////////////////////////////////<........>> > >>>>////////////////////..........>>>>/////////................................. > │ > ...................>>>>>//////////////////////////////////////////////.......... > >>>>>//////////////////............>>>>>/////................................... > │ > .....................>>>>>//////////////////////////////////////////............ > .>>>>>>/////////////.................>>>>/...................................... > │ > ......................>>>>>>/////////////////////////////////////............... > ...>>>>>//////////.............................................................. > │ > ........................>>>>>//////////////////////////////////................. > ....>>>>>>/////................................................................. > │ > ..........................>>>>>//////////////////////////////................... > ......>>>>>//................................................................... > │ > ...........................>>>>>///////////////////////////..................... > ................................................................................ > │ > .............................>>>>>///////////////////////....................... > ................................................................................ > │ > ..............................>>>>>///////////////////.......................... > ................................................................................ > │ > ................................>>>>>///////////////............................ > ................................................................................ > │ > .................................>>>>>>///////////.............................. > ................................................................................ > │ > ...................................=>>>>///////................................. > ................................................................................ > │ > ......................................>>>>///................................... > ................................................................................ > │ > ........................................=>/..................................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ..............................................;/................................ > ................................................................................ > │ > ............................................;////............................... > ................................................................................ > │ > .........................................;;///////<............................. > ................................................................................ > │ > ......................................;;////////////............................ > ................................................................................ > │ > ....................................;;///////////////<.......................... > ................................................................................ > │ > .................................;/////////////////////<........................ > ................................................................................ > │ > ..............................;;;////////////////////////....................... > ................................................................................ > │ > ............................;/////////////////////////////<..................... > ................................................................................ > │ > .........................;;/////////////////////////////////.................... > ...........;;/.................................................................. > │ > .......................;;/////////////////////////////////////.................. > .........;;/////................................................................ > │ > ....................;;/////////////////////////////////////////................. > .......;//////////.............................................................. > │ > ..................;;/////////////////////////////////////////////............... > ....;;/////////////......................;...................................... > │ > ................;;>///////////////////////////////////////////////<............. > ..;;/////////////////.................;;///<.................................... > │ > ................;>>>////////////////////////////////////////////////...........; > ;/////////////////////.............\;////////<.................................. > │ > ................>>>>>>///////////////////////////////////////////////<.......;;; > >>>/////////////////////.........;;;>//////////................................. > │ > ................>>>>>>>>//////////////////////////////////////////////.......>>> > >>>>////////////////////.........>>>>>>////////................................. > │ > ..................>>>>>>>>//////////////////////////////////////////...........> > >>>>>>////////////////.............>>>>>/////................................... > │ > ...................\>>>>>>>///////////////////////////////////////.............. > .>>>>>>>////////////.................>>>>//..................................... > │ > .....................>>>>>>>>///////////////////////////////////................ > ..>>>>>>>/////////.............................................................. > │ > .......................>>>>>>>>///////////////////////////////.................. > ....>>>>>>>/////................................................................ > │ > .........................>>>>>>>/////////////////////////////................... > ......>>>>>>//.................................................................. > │ > ..........................>>>>>>>>/////////////////////////..................... > ................................................................................ > │ > ............................>>>>>>>>/////////////////////....................... > ................................................................................ > │ > ..............................>>>>>>>>/////////////////......................... > ................................................................................ > │ > ................................>>>>>>>//////////////........................... > ................................................................................ > │ > .................................>>>>>>>>//////////............................. > ................................................................................ > │ > ....................................>>>>>>>//////............................... > ................................................................................ > │ > ........................................>>>>///................................. > ................................................................................ > │ > ...........................................>>/.................................. > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .............................................;/................................. > ................................................................................ > │ > ...........................................;;////............................... > ................................................................................ > │ > ........................................;;////////<............................. > ................................................................................ > │ > ......................................;/////////////............................ > ................................................................................ > │ > ....................................;/////////////////.......................... > ................................................................................ > │ > .................................;;////////////////////<........................ > ................................................................................ > │ > ...............................;/////////////////////////....................... > ................................................................................ > │ > .............................;/////////////////////////////..................... > ................................................................................ > │ > ..........................;;////////////////////////////////<................... > ...........;;/.................................................................. > │ > ........................;;////////////////////////////////////.................. > ........;;//////................................................................ > │ > ......................;/////////////////////////////////////////................ > ......;;//////////.............................................................. > │ > ...................;;////////////////////////////////////////////<.............. > ....;;;////////////<....................;;...................................... > │ > .................;;////////////////////////////////////////////////<............ > ..;;/////////////////................;;;////.................................... > │ > ................;;>>>////////////////////////////////////////////////........... > ;;/////////////////////............\;;///////<.................................. > │ > ................;>>>>>>///////////////////////////////////////////////.......;;; > ;>>/////////////////////.........;;;>//////////................................. > │ > ...............;>>>>>>>>/////////////////////////////////////////////........;>> > >>>>>///////////////////.........;>>>>>////////................................. > │ > ................>>>>>>>>>>/////////////////////////////////////////...........>> > >>>>>>>///////////////.............>>>>>>////................................... > │ > ..................>>>>>>>>>>>////////////////////////////////////............... > >>>>>>>>>///////////................\>>>>>/..................................... > │ > ....................>>>>>>>>>>//////////////////////////////////................ > ..>>>>>>>>////////.............................................................. > │ > ......................>>>>>>>>>>//////////////////////////////.................. > ....>>>>>>>>////................................................................ > │ > ........................>>>>>>>>>>///////////////////////////................... > ......>>>>>>>//................................................................. > │ > ..........................>>>>>>>>>>///////////////////////..................... > ................................................................................ > │ > ............................>>>>>>>>>>///////////////////....................... > ................................................................................ > │ > ..............................>>>>>>>>>>////////////////........................ > ................................................................................ > │ > ................................>>>>>>>>>>////////////.......................... > ................................................................................ > │ > ..................................>>>>>>>>>>////////............................ > ................................................................................ > │ > ....................................=>>>>>>>>>/////............................. > ................................................................................ > │ > ..........................................>>>>>//............................... > ................................................................................ > │ > .............................................../................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ............................................;;.................................. > ................................................................................ > │ > ..........................................;;////................................ > ................................................................................ > │ > ........................................;;////////.............................. > ................................................................................ > │ > ......................................;////////////<............................ > ................................................................................ > │ > ....................................;////////////////<.......................... > ................................................................................ > │ > ..................................;////////////////////<........................ > ................................................................................ > │ > ................................;////////////////////////<...................... > ................................................................................ > │ > ..............................;////////////////////////////..................... > ................................................................................ > │ > ............................;////////////////////////////////................... > ..........;;//.................................................................. > │ > ..........................;////////////////////////////////////................. > ........;;//////................................................................ > │ > ........................;///////////////////////////////////////<............... > .....;;;//////////.............................................................. > │ > ......................;///////////////////////////////////////////<............. > ...\;;//////////////....................;<...................................... > │ > ....................;;//////////////////////////////////////////////<........... > ..;;;/////////////////...............;;;///<.................................... > │ > ..................;;>////////////////////////////////////////////////........... > ;;;/////////////////////...........;;;///////<.................................. > │ > ................;;>>>>>//////////////////////////////////////////////.........;; > ;;>/////////////////////..........;;;//////////................................. > │ > ...............;;>>>>>>>>//////////////////////////////////////////.........\;;> > >>>>>//////////////////..........;;>>>>////////................................. > │ > ..............;>>>>>>>>>>>>///////////////////////////////////////...........>>> > >>>>>>>///////////////.............>>>>>>////................................... > │ > ................>>>>>>>>>>>>>////////////////////////////////////............... > >>>>>>>>>>//////////.................>>>>>/..................................... > │ > ..................>>>>>>>>>>>>>>///////////////////////////////................. > .\>>>>>>>>>////////...................=......................................... > │ > ....................\>>>>>>>>>>>>>////////////////////////////.................. > ....>>>>>>>>>////............................................................... > │ > .......................>>>>>>>>>>>>>/////////////////////////................... > ......>>>>>>>>>/................................................................ > │ > .........................>>>>>>>>>>>>>/////////////////////..................... > ................................................................................ > │ > ...........................>>>>>>>>>>>>>//////////////////...................... > ................................................................................ > │ > .............................>>>>>>>>>>>>>///////////////....................... > ................................................................................ > │ > ...............................>>>>>>>>>>>>>>//////////......................... > ................................................................................ > │ > ..................................>>>>>>>>>>>>>///////.......................... > ................................................................................ > │ > ....................................=>>>>>>>>>>>>////........................... > ................................................................................ > │ > ............................................=>>>>>/............................. > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ...........................................;/<.................................. > ................................................................................ > │ > .........................................;;////<................................ > ................................................................................ > │ > .......................................;;////////<.............................. > ................................................................................ > │ > .....................................;;////////////<............................ > ................................................................................ > │ > ...................................;;;///////////////<.......................... > ................................................................................ > │ > .................................;;////////////////////<........................ > ................................................................................ > │ > ................................;;///////////////////////<...................... > ................................................................................ > │ > ..............................;;///////////////////////////<.................... > ................................................................................ > │ > ............................;;///////////////////////////////<.................. > ..........;;//.................................................................. > │ > ..........................;;;//////////////////////////////////................. > .......;;;//////................................................................ > │ > .........................;;//////////////////////////////////////............... > .....;;;//////////.............................................................. > │ > .......................;;//////////////////////////////////////////<............ > ...;;;;/////////////....................;/...................................... > │ > .....................;;//////////////////////////////////////////////........... > .;;;;/////////////////...............;;;////.................................... > │ > ...................;;;///////////////////////////////////////////////........... > ;;;;////////////////////...........;;;////////.................................. > │ > ..................;;>>>>////////////////////////////////////////////..........;; > ;;;>////////////////////..........;;;//////////................................. > │ > ................;;>>>>>>>>////////////////////////////////////////...........;;; > >>>>>>/////////////////..........;;>>>>///////.................................. > │ > ..............;;>>>>>>>>>>>>/////////////////////////////////////...........;>>> > >>>>>>>>/////////////.............>>>>>>>>///................................... > │ > ..............>>>>>>>>>>>>>>>>>/////////////////////////////////...............> > >>>>>>>>>>//////////................\>>>>>>/.................................... > │ > ................\>>>>>>>>>>>>>>>>//////////////////////////////................. > .>>>>>>>>>>>///////....................=........................................ > │ > ...................>>>>>>>>>>>>>>>>///////////////////////////.................. > ...>>>>>>>>>>>>///.............................................................. > │ > .....................\>>>>>>>>>>>>>>>>///////////////////////................... > ......>>>>>>>>>>................................................................ > │ > ........................>>>>>>>>>>>>>>>>////////////////////.................... > ................................................................................ > │ > ..........................>>>>>>>>>>>>>>>>/////////////////..................... > ................................................................................ > │ > .............................>>>>>>>>>>>>>>>>/////////////...................... > ................................................................................ > │ > ...............................>>>>>>>>>>>>>>>>/////////........................ > ................................................................................ > │ > ..................................>>>>>>>>>>>>>>>>/////......................... > ................................................................................ > │ > ....................................=>>>>>>>>>>>>>>>//.......................... > ................................................................................ > │ > .................................................>>>>........................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ..........................................;//................................... > ................................................................................ > │ > ........................................;;/////................................. > ................................................................................ > │ > ......................................;;/////////............................... > ................................................................................ > │ > ....................................;;;////////////............................. > ................................................................................ > │ > ..................................;;;////////////////........................... > ................................................................................ > │ > ................................;;;;///////////////////<........................ > ................................................................................ > │ > ..............................;;;;///////////////////////<...................... > ................................................................................ > │ > .............................;;;;//////////////////////////<.................... > ................................................................................ > │ > ...........................;;;;///////////////////////////////.................. > .........;;;//.................................................................. > │ > ..........................;;;;//////////////////////////////////................ > ......;;;;//////................................................................ > │ > ........................;;;;//////////////////////////////////////.............. > ....;;;;;/////////.............................................................. > │ > ......................;;;;;/////////////////////////////////////////............ > ...;;;;/////////////<..................<;<...................................... > │ > .....................;;;;///////////////////////////////////////////............ > .;;;;;/////////////////..............;;;////.................................... > │ > ...................;;;;;////////////////////////////////////////////............ > ;;;;////////////////////...........;;;;///////.................................. > │ > ..................;;;;;>///////////////////////////////////////////...........;; > ;;;>////////////////////..........;;;//////////................................. > │ > ................;;;;;>>>>>////////////////////////////////////////...........;;; > ;;>>>>/////////////////..........;;;>>>>//////.................................. > │ > ...............;;;>>>>>>>>>>>////////////////////////////////////...........;;>> > >>>>>>>>>/////////////............>>>>>>>>///................................... > │ > .............;;;>>>>>>>>>>>>>>>>////////////////////////////////..............>> > >>>>>>>>>>>/////////................>>>>>>>/.................................... > │ > ..............\>>>>>>>>>>>>>>>>>>>/////////////////////////////................. > .>>>>>>>>>>>>>/////....................>........................................ > │ > .................>>>>>>>>>>>>>>>>>>>>/////////////////////////.................. > ...>>>>>>>>>>>>>//.............................................................. > │ > ....................>>>>>>>>>>>>>>>>>>>>/////////////////////................... > ......>>>>>>>>>>>............................................................... > │ > .......................>>>>>>>>>>>>>>>>>>>//////////////////.................... > ................................................................................ > │ > ..........................>>>>>>>>>>>>>>>>>>>//////////////..................... > ................................................................................ > │ > ............................>>>>>>>>>>>>>>>>>>>>///////////..................... > ................................................................................ > │ > ...............................>>>>>>>>>>>>>>>>>>>////////...................... > ................................................................................ > │ > ..................................>>>>>>>>>>>>>>>>>>>////....................... > ................................................................................ > │ > .....................................>>>>>>>>>>>>>>>>>>/........................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .........................................;;/.................................... > ................................................................................ > │ > .......................................;;/////<................................. > ................................................................................ > │ > .....................................;;;/////////............................... > ................................................................................ > │ > ...................................;;;;////////////............................. > ................................................................................ > │ > .................................;;;;;///////////////........................... > ................................................................................ > │ > ...............................;;;;;///////////////////<........................ > ................................................................................ > │ > .............................;;;;;;//////////////////////<...................... > ................................................................................ > │ > ...........................;;;;;;;//////////////////////////.................... > ................................................................................ > │ > ..........................;;;;;;//////////////////////////////.................. > .........;;//<.................................................................. > │ > .........................;;;;;;/////////////////////////////////................ > ......;;;;//////................................................................ > │ > .......................;;;;;;;////////////////////////////////////<............. > ...;;;;;;/////////<............................................................. > │ > ......................;;;;;;;///////////////////////////////////////............ > ..;;;;;//////////////..................;;....................................... > │ > .....................;;;;;;////////////////////////////////////////............. > .;;;;;;////////////////.............;;;;////.................................... > │ > ...................;;;;;;;////////////////////////////////////////.............. > ;;;;;;//////////////////...........;;;;///////<................................. > │ > ..................;;;;;;;/////////////////////////////////////////............\; > ;;;;///////////////////...........;;;;/////////................................. > │ > .................;;;;;;;>>>//////////////////////////////////////............;;; > ;;;>>>>///////////////...........;;;;>>>//////.................................. > │ > ...............;;;;;;>>>>>>>>>>/////////////////////////////////............;;;> > >>>>>>>>>////////////............\>>>>>>>>>//................................... > │ > ..............;;;;>>>>>>>>>>>>>>>///////////////////////////////.............>>> > >>>>>>>>>>>>/////////...............>>>>>>>>.................................... > │ > .............;;>>>>>>>>>>>>>>>>>>>>>///////////////////////////................. > >>>>>>>>>>>>>>>/////...................>........................................ > │ > ...............>>>>>>>>>>>>>>>>>>>>>>>>///////////////////////.................. > ...>>>>>>>>>>>>>>>/............................................................. > │ > ..................>>>>>>>>>>>>>>>>>>>>>>>>////////////////////.................. > ......>>>>>>>>>>>/.............................................................. > │ > .....................>>>>>>>>>>>>>>>>>>>>>>>>////////////////................... > ................................................................................ > │ > ........................>>>>>>>>>>>>>>>>>>>>>>>>////////////.................... > ................................................................................ > │ > ............................>>>>>>>>>>>>>>>>>>>>>>>/////////.................... > ................................................................................ > │ > ...............................>>>>>>>>>>>>>>>>>>>>>>>/////..................... > ................................................................................ > │ > ..................................>>>>>>>>>>>>>>>>>>>>>>//...................... > ................................................................................ > │ > .....................................>>>>>>>>>>>>>>>>>>>>/...................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ........................................;;/<.................................... > ................................................................................ > │ > ......................................;;;/////.................................. > ................................................................................ > │ > ....................................;;;;////////................................ > ................................................................................ > │ > ..................................;;;;;////////////............................. > ................................................................................ > │ > ................................;;;;;;///////////////........................... > ................................................................................ > │ > ..............................;;;;;;;//////////////////......................... > ................................................................................ > │ > ............................;;;;;;;;//////////////////////...................... > ................................................................................ > │ > ..........................;;;;;;;;//////////////////////////.................... > ................................................................................ > │ > .........................;;;;;;;;/////////////////////////////<................. > ........;;;//................................................................... > │ > ........................;;;;;;;;////////////////////////////////<............... > .....;;;;;//////................................................................ > │ > .......................;;;;;;;;////////////////////////////////////............. > ..<;;;;;;/////////<............................................................. > │ > .....................\;;;;;;;;/////////////////////////////////////............. > ..;;;;;;/////////////..................;;<...................................... > │ > ....................;;;;;;;;;/////////////////////////////////////.............. > \;;;;;;/////////////////............;;;;////.................................... > │ > ...................;;;;;;;;;//////////////////////////////////////.............. > ;;;;;;/////////////////............;;;;////////................................. > │ > ..................;;;;;;;;;//////////////////////////////////////.............\; > ;;;;;//////////////////...........;;;;/////////................................. > │ > .................;;;;;;;;;;>/////////////////////////////////////............\;; > ;;;;;>>///////////////...........;;;;;>>>/////.................................. > │ > ................;;;;;;;;>>>>>>>>////////////////////////////////............\;;; > ;>>>>>>>>>////////////...........;>>>>>>>>>//................................... > │ > ...............;;;;;;>>>>>>>>>>>>>>/////////////////////////////............;>>> > >>>>>>>>>>>>>////////...............>>>>>>>>/................................... > │ > ..............;;;;>>>>>>>>>>>>>>>>>>>>/////////////////////////................> > >>>>>>>>>>>>>>>>////...................=>....................................... > │ > .............;>>>>>>>>>>>>>>>>>>>>>>>>>>>//////////////////////................. > ..\>>>>>>>>>>>>>>>>............................................................. > │ > ................>>>>>>>>>>>>>>>>>>>>>>>>>>>>//////////////////.................. > ......>>>>>>>>>=>............................................................... > │ > ....................>>>>>>>>>>>>>>>>>>>>>>>>>>>>//////////////.................. > ................................................................................ > │ > .......................>>>>>>>>>>>>>>>>>>>>>>>>>>>///////////................... > ................................................................................ > │ > ...........................>>>>>>>>>>>>>>>>>>>>>>>>>>>///////................... > ................................................................................ > │ > ..............................>>>>>>>>>>>>>>>>>>>>>>>>>>>///.................... > ................................................................................ > │ > ..................................>>>>>>>>>>>>>>>>>>>>>>>>>/.................... > ................................................................................ > │ > ......................................>>>>>=>=>>................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .......................................;;//..................................... > ................................................................................ > │ > .....................................;;;/////<.................................. > ................................................................................ > │ > ...................................;;;;/////////................................ > ................................................................................ > │ > .................................;;;;;;///////////<............................. > ................................................................................ > │ > ...............................;;;;;;;///////////////........................... > ................................................................................ > │ > .............................;;;;;;;;//////////////////......................... > ................................................................................ > │ > ...........................;;;;;;;;;//////////////////////...................... > ................................................................................ > │ > .........................;;;;;;;;;;/////////////////////////.................... > ................................................................................ > │ > ........................;;;;;;;;;;;///////////////////////////<................. > ........;;;//................................................................... > │ > .......................;;;;;;;;;;;///////////////////////////////............... > .....;;;;;//////................................................................ > │ > ......................;;;;;;;;;;;/////////////////////////////////.............. > ..;;;;;;;/////////<............................................................. > │ > .....................;;;;;;;;;;;//////////////////////////////////.............. > .;;;;;;;/////////////..................;;<...................................... > │ > ....................;;;;;;;;;;;//////////////////////////////////............... > ;;;;;;;;///////////////.............;;;;////<................................... > │ > ...................;;;;;;;;;;;;//////////////////////////////////..............; > ;;;;;;;////////////////............;;;;////////................................. > │ > ..................;;;;;;;;;;;;///////////////////////////////////..............; > ;;;;;;/////////////////...........;;;;;////////................................. > │ > .................;;;;;;;;;;;;///////////////////////////////////..............;; > ;;;;;;>>//////////////...........;;;;;>>>/////.................................. > │ > ................;;;;;;;;;;;;>>>>>///////////////////////////////.............;;; > ;;>>>>>>>>>///////////...........;>>>>>>>>>>//.................................. > │ > ...............;;;;;;;;;>>>>>>>>>>>>////////////////////////////............\;;> > >>>>>>>>>>>>>>///////...............>>>>>>>>>................................... > │ > ..............;;;;;;;>>>>>>>>>>>>>>>>>>>///////////////////////...............\> > >>>>>>>>>>>>>>>>>>///..................>=....................................... > │ > .............;;;;>>>>>>>>>>>>>>>>>>>>>>>>>>////////////////////................. > ..>>>>>>>>>>>>>>>>>>............................................................ > │ > .............>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/////////////////................. > ......>>>>>>>>>>=............................................................... > │ > .................>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>////////////.................. > ................................................................................ > │ > ......................>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>////////.................. > ................................................................................ > │ > ..........................>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/////.................. > ................................................................................ > │ > ..............................>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//.................. > ................................................................................ > │ > ..................................>>>>>>>>>>>>>>>>>>>>>>>>>>>................... > ................................................................................ > │ > ......................................>>>==..................................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .......................................;;/<..................................... > ................................................................................ > │ > ....................................<;;;/////................................... > ................................................................................ > │ > ..................................;;;;;////////<................................ > ................................................................................ > │ > ................................;;;;;;;///////////.............................. > ................................................................................ > │ > ..............................;;;;;;;;//////////////<........................... > ................................................................................ > │ > ............................;;;;;;;;;;/////////////////......................... > ................................................................................ > │ > ..........................;;;;;;;;;;;////////////////////<...................... > ................................................................................ > │ > ........................;;;;;;;;;;;;////////////////////////.................... > ................................................................................ > │ > .......................;;;;;;;;;;;;;///////////////////////////................. > ........;;///................................................................... > │ > ......................;;;;;;;;;;;;;//////////////////////////////............... > .....;;;;;//////................................................................ > │ > .....................;;;;;;;;;;;;;;//////////////////////////////............... > ..;;;;;;;//////////............................................................. > │ > ....................;;;;;;;;;;;;;;///////////////////////////////............... > \;;;;;;;;////////////<.................;;....................................... > │ > ...................\;;;;;;;;;;;;;///////////////////////////////................ > ;;;;;;;;///////////////............<;;;;////<................................... > │ > ...................;;;;;;;;;;;;;;///////////////////////////////...............; > ;;;;;;;;///////////////...........\;;;;////////................................. > │ > ..................;;;;;;;;;;;;;;////////////////////////////////..............\; > ;;;;;;;///////////////............;;;;;////////................................. > │ > .................;;;;;;;;;;;;;;;////////////////////////////////..............;; > ;;;;;;;>//////////////...........\;;;;;>>>////.................................. > │ > ................;;;;;;;;;;;;;;;>>>//////////////////////////////.............;;; > ;;;;>>>>>>>>//////////...........;;>>>>>>>>>>/.................................. > │ > ................;;;;;;;;;;;;>>>>>>>>>>//////////////////////////.............;;; > >>>>>>>>>>>>>>>>/////..............\>>>>>>>>/................................... > │ > ...............;;;;;;;;;>>>>>>>>>>>>>>>>>>//////////////////////.............\>> > >>>>>>>>>>>>>>>>>>>//..................\=....................................... > │ > ..............;;;;;;>>>>>>>>>>>>>>>>>>>>>>>>>>//////////////////................ > .\>>>>>>>>>>>>>>>>>>/........................................................... > │ > .............;;;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/////////////................. > ......>>>>>>>>>>................................................................ > │ > ...............>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//////////................. > ................................................................................ > │ > ...................\>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//////................. > ................................................................................ > │ > ........................>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//................. > ................................................................................ > │ > .............................>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/................. > ................................................................................ > │ > ..................................>>>>>>>>>>>>>>>>>>>>==........................ > ................................................................................ > │ > .......................................>==...................................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ......................................;;//...................................... > ................................................................................ > │ > ....................................;;;;////.................................... > ................................................................................ > │ > ..................................;;;;;////////................................. > ................................................................................ > │ > ...............................<;;;;;;;///////////.............................. > ................................................................................ > │ > .............................;;;;;;;;;//////////////............................ > ................................................................................ > │ > ...........................;;;;;;;;;;;/////////////////......................... > ................................................................................ > │ > .........................;;;;;;;;;;;;;///////////////////<...................... > ................................................................................ > │ > .......................;;;;;;;;;;;;;;///////////////////////.................... > ................................................................................ > │ > .....................\;;;;;;;;;;;;;;;//////////////////////////................. > .......<;;//<................................................................... > │ > .....................;;;;;;;;;;;;;;;;///////////////////////////................ > ....<;;;;;//////................................................................ > │ > ....................;;;;;;;;;;;;;;;;////////////////////////////................ > ..;;;;;;;;/////////............................................................. > │ > ....................;;;;;;;;;;;;;;;;////////////////////////////................ > ;;;;;;;;;/////////////.................;/....................................... > │ > ...................;;;;;;;;;;;;;;;;/////////////////////////////...............; > ;;;;;;;;;/////////////.............<;;;;////<................................... > │ > ..................;;;;;;;;;;;;;;;;;/////////////////////////////...............; > ;;;;;;;;//////////////............\;;;;;//////.................................. > │ > ..................;;;;;;;;;;;;;;;;;/////////////////////////////..............\; > ;;;;;;;;//////////////............;;;;;///////.................................. > │ > .................;;;;;;;;;;;;;;;;;//////////////////////////////..............;; > ;;;;;;;;>/////////////............;;;;;>>>////.................................. > │ > .................;;;;;;;;;;;;;;;;;>/////////////////////////////..............;; > ;;;;;;>>>>>>>/////////...........;;;>>>>>>>>>/.................................. > │ > ................;;;;;;;;;;;;;;;;>>>>>>>/////////////////////////.............;;; > ;;>>>>>>>>>>>>>>>/////.............\>>>>>>>>>=.................................. > │ > ...............;;;;;;;;;;;;;>>>>>>>>>>>>>>>/////////////////////.............;>> > >>>>>>>>>>>>>>>>>>>>>/..................>....................................... > │ > ...............;;;;;;;;;>>>>>>>>>>>>>>>>>>>>>>>>////////////////................ > .>>>>>>>>>>>>>>>>>>>/........................................................... > │ > ..............;;;;;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>////////////................ > ......>>>>>>>>>>................................................................ > │ > ..............;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>////////................ > ................................................................................ > │ > .................>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>////................ > ................................................................................ > │ > ......................>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>................ > ................................................................................ > │ > ............................>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.................. > ................................................................................ > │ > ..................................>>>>>>>>>>>>>>>>>>............................ > ................................................................................ > │ > .......................................>=....................................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .....................................<;;/<...................................... > ................................................................................ > │ > ...................................;;;;;///<.................................... > ................................................................................ > │ > .................................;;;;;;///////<................................. > ................................................................................ > │ > ...............................;;;;;;;;//////////<.............................. > ................................................................................ > │ > ............................<;;;;;;;;;;/////////////............................ > ................................................................................ > │ > ..........................<;;;;;;;;;;;;///////////////<......................... > ................................................................................ > │ > ........................;;;;;;;;;;;;;;;//////////////////<...................... > ................................................................................ > │ > ......................;;;;;;;;;;;;;;;;//////////////////////.................... > ................................................................................ > │ > ....................;;;;;;;;;;;;;;;;;;////////////////////////.................. > .......;;;//.................................................................... > │ > ....................;;;;;;;;;;;;;;;;;;/////////////////////////................. > ....;;;;;;//////................................................................ > │ > ...................;;;;;;;;;;;;;;;;;;;/////////////////////////................. > .<;;;;;;;;////////<............................................................. > │ > ...................;;;;;;;;;;;;;;;;;;;/////////////////////////................; > ;;;;;;;;;;////////////.................;/....................................... > │ > ..................\;;;;;;;;;;;;;;;;;;//////////////////////////................; > ;;;;;;;;;/////////////.............<;;;;////<................................... > │ > ..................;;;;;;;;;;;;;;;;;;;//////////////////////////................; > ;;;;;;;;;/////////////............;;;;;;//////.................................. > │ > ..................;;;;;;;;;;;;;;;;;;;///////////////////////////..............;; > ;;;;;;;;;/////////////............;;;;;;//////.................................. > │ > .................;;;;;;;;;;;;;;;;;;;;///////////////////////////..............;; > ;;;;;;;;;>////////////............;;;;;;>>////.................................. > │ > .................;;;;;;;;;;;;;;;;;;;;///////////////////////////..............;; > ;;;;;;;;>>>>/>////////............;;;>>>>>>>>>.................................. > │ > ................;;;;;;;;;;;;;;;;;;;;>>>>>///////////////////////.............\;; > ;;;>>>>>>>>>>>>>/>////.............>>>>>>>>>=................................... > │ > ................;;;;;;;;;;;;;;;;>>>>>>>>>>>>>>//////////////////.............;;; > >>>>>>>>>>>>>>>>>>>>>>..................=....................................... > │ > ...............;;;;;;;;;;;;>>>>>>>>>>>>>>>>>>>>>>>//////////////................ > >>>>>>>>>>>>>>>>>>>>>........................................................... > │ > ...............;;;;;;;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//////////............... > .....\>>>>>>>>=................................................................. > │ > ..............;;;;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/////............... > ................................................................................ > │ > ..............;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/............... > ................................................................................ > │ > ....................>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>............... > ................................................................................ > │ > ..........................\>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>...................... > ................................................................................ > │ > .................................>>>>>>>>>>>>>>>>............................... > ................................................................................ > │ > ........................................=....................................... > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > .....................................;;//....................................... > ................................................................................ > │ > ...................................;;;;////<.................................... > ................................................................................ > │ > ................................<;;;;;;///////.................................. > ................................................................................ > │ > ..............................<;;;;;;;;/////////<............................... > ................................................................................ > │ > ............................;;;;;;;;;;;////////////<............................ > ................................................................................ > │ > ..........................;;;;;;;;;;;;;///////////////<......................... > ................................................................................ > │ > .......................<;;;;;;;;;;;;;;;//////////////////....................... > ................................................................................ > │ > .....................;;;;;;;;;;;;;;;;;;/////////////////////.................... > ................................................................................ > │ > ...................;;;;;;;;;;;;;;;;;;;;//////////////////////................... > .......;;;//.................................................................... > │ > ...................;;;;;;;;;;;;;;;;;;;;///////////////////////.................. > ....;;;;;;//////................................................................ > │ > ..................\;;;;;;;;;;;;;;;;;;;;///////////////////////.................. > .;;;;;;;;;/////////............................................................. > │ > ..................;;;;;;;;;;;;;;;;;;;;;///////////////////////.................; > ;;;;;;;;;;///////////..................;/....................................... > │ > ..................;;;;;;;;;;;;;;;;;;;;;////////////////////////................; > ;;;;;;;;;;////////////.............<;;;;////<................................... > │ > ..................;;;;;;;;;;;;;;;;;;;;;////////////////////////...............\; > ;;;;;;;;;;////////////............;;;;;;//////.................................. > │ > .................;;;;;;;;;;;;;;;;;;;;;;////////////////////////...............;; > ;;;;;;;;;;////////////............;;;;;;//////.................................. > │ > .................;;;;;;;;;;;;;;;;;;;;;;/////////////////////////..............;; > ;;;;;;;;;;>///////////............;;;;;;>>>///.................................. > │ > .................;;;;;;;;;;;;;;;;;;;;;;/////////////////////////..............;; > ;;;;;;;;;>>>>>>///////............;;;;>>>>>>>>.................................. > │ > ................;;;;;;;;;;;;;;;;;;;;;;;>>>>/////////////////////..............;; > ;;;;;;>>>>>>>>>>>>>>//.............>>>>>>>>>=................................... > │ > ................;;;;;;;;;;;;;;;;;;;>>>>>>>>>>>>>/////////////////.............;; > ;;>>>>>>>>>>>>>>>>>>>>..................=....................................... > │ > ................;;;;;;;;;;;;;;;;>>>>>>>>>>>>>>>>>>>>>////////////..............\ > >>>>>>>>>>>>>>>>>>>>............................................................ > │ > ...............\;;;;;;;;;;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>///////............... > .....>>>>>>>>>=................................................................. > │ > ...............;;;;;;;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>///.............. > ................................................................................ > │ > ...............;;;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.............. > ................................................................................ > │ > ................>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>=.................. > ................................................................................ > │ > ........................\>>>>>>>>>>>>>>>>>>>>>>>>>>>>>=......................... > ................................................................................ > │ > .................................\>>>>>>>>>>>>>=................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > ................................................................................ > ................................................................................ > │ > │ 00:00:28 v #3 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 450039 } 00:00:28 d #4 runtime.execute_with_options / { file_name = jupyter; arguments = ["nbconvert", "/home/runner/work/polyglot/polyglot/apps/spiral/temp/cube/cube.dib.ipynb", "--to", "html", "--HTMLExporter.theme=dark"]; options = { command = jupyter nbconvert "/home/runner/work/polyglot/polyglot/apps/spiral/temp/cube/cube.dib.ipynb" --to html --HTMLExporter.theme=dark; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:29 v #5 ! [NbConvertApp] Converting notebook /home/runner/work/polyglot/polyglot/apps/spiral/temp/cube/cube.dib.ipynb to html 00:00:29 v #6 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbformat/__init__.py:96: MissingIDFieldWarning: Cell is missing an id field, this will become a hard error in future nbformat versions. You may want to use `normalize()` on your notebooks before validations (available since nbformat 5.1.4). Previous versions of nbformat are fixing this issue transparently, and will stop doing so in the future. 00:00:29 v #7 ! validate(nb) 00:00:29 v #8 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbconvert/filters/highlight.py:71: UserWarning: IPython3 lexer unavailable, falling back on Python 3 00:00:29 v #9 ! return _pygments_highlight( 00:00:30 v #10 ! [NbConvertApp] Writing 798005 bytes to /home/runner/work/polyglot/polyglot/apps/spiral/temp/cube/cube.dib.html 00:00:30 v #11 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 914 } 00:00:30 d #12 spiral.run / dib / jupyter nbconvert / { exit_code = 0; jupyter_result_length = 914 } 00:00:30 d #13 runtime.execute_with_options / { file_name = pwsh; arguments = ["-c", "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/spiral/temp/cube/cube.dib.html'; (Get-Content $path -Raw) -replace '(id=\\\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"]; options = { command = pwsh -c "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/spiral/temp/cube/cube.dib.html'; (Get-Content $path -Raw) -replace '(id=\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:30 v #14 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 0 } 00:00:30 d #15 spiral.run / dib / html cell ids / { exit_code = 0; pwsh_replace_html_result_length = 0 } 00:00:30 d #16 spiral.run / dib / { exit_code = 0; result_length = 451012 } 00:00:00 d #1 writeDibCode / output: Spi / path: cube.dib 00:00:00 d #2 parseDibCode / output: Spi / file: cube.dib 00:00:00 d #1 persistCodeProject / packages: [Fable.Core] / modules: [deps/spiral/lib/spiral/common.fsx; deps/spiral/lib/spiral/sm.fsx; deps/spiral/lib/spiral/crypto.fsx; ... ] / name: cube / hash: / code.Length: 48903 spiral/lib/spiral/lib.ps1/GetTargetDir / targetDir: /home/runner/work/polyglot/polyglot/target/Builder/cube polyglot/scripts/core.ps1/ResolveLink #4 / Path: /home/runner/work/polyglot/polyglot/deps/spiral/lib/spiral/../../deps/polyglot / parent_target: / path_target: /home/runner/work/polyglot/polyglot / parent: /home/runner/work/polyglot/polyglot/deps/spiral/lib/spiral/../../deps / End: polyglot spiral/lib/spiral/lib.ps1/BuildFable / TargetDir: /home/runner/work/polyglot/polyglot/target/Builder/cube / ProjectName: cube / Language: rs / Runtime: / root: /home/runner/work/polyglot/polyglot Fable 5.0.0-alpha.9: F# to Rust compiler (status: alpha) Thanks to the contributor! @inosik Stand with Ukraine! https://standwithukraine.com.ua/ Parsing target/Builder/cube/cube.fsproj... Project and references (14 source files) parsed in 3148ms Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.JSInterop.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Routing.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Routing.Abstractions.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Mvc.ViewFeatures.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Mvc.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Mvc.Core.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Http.Abstractions.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Components.Forms.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Components.Endpoints.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Components.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Started Fable compilation... Fable compilation finished in 8764ms ./deps/spiral/lib/spiral/common.fsx(2209,0): (2209,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/sm.fsx(561,0): (561,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/async_.fsx(250,0): (250,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/threading.fsx(139,0): (139,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/crypto.fsx(2436,0): (2436,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/date_time.fsx(2547,0): (2547,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/platform.fsx(122,0): (122,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/networking.fsx(5525,0): (5525,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/trace.fsx(2244,0): (2244,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/runtime.fsx(8246,0): (8246,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! ./deps/spiral/lib/spiral/file_system.fsx(20811,0): (20811,2) warning FABLE: For Rust, support for F# static and module do bindings is disabled by default. It can be enabled with the 'static_do_bindings' feature. Use at your own risk! polyglot/scripts/core.ps1/ResolveLink #4 / Path: /home/runner/work/polyglot/polyglot/deps/spiral/lib/spiral/../../deps/polyglot / parent_target: / path_target: /home/runner/work/polyglot/polyglot / parent: /home/runner/work/polyglot/polyglot/deps/spiral/lib/spiral/../../deps / End: polyglot spiral/lib/spiral/lib.ps1/BuildFable / TargetDir: /home/runner/work/polyglot/polyglot/target/Builder/cube / ProjectName: cube / Language: ts / Runtime: / root: /home/runner/work/polyglot/polyglot Fable 5.0.0-alpha.9: F# to TypeScript compiler Minimum @fable-org/fable-library-ts version (when installed from npm): 1.10.0 Thanks to the contributor! @fsoikin Stand with Ukraine! https://standwithukraine.com.ua/ Parsing target/Builder/cube/cube.fsproj... Project and references (14 source files) parsed in 2120ms Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.JSInterop.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Routing.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Routing.Abstractions.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Mvc.ViewFeatures.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Mvc.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Mvc.Core.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Http.Abstractions.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Components.Forms.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Components.Endpoints.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Components.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Started Fable compilation... Fable compilation finished in 9051ms ./deps/spiral/lib/spiral/sm.fsx(38,20): (38,49) warning FABLE: CultureInfo argument is ignored ./deps/spiral/lib/spiral/sm.fsx(307,20): (307,51) warning FABLE: CultureInfo argument is ignored polyglot/scripts/core.ps1/ResolveLink #4 / Path: /home/runner/work/polyglot/polyglot/deps/spiral/lib/spiral/../../deps/polyglot / parent_target: / path_target: /home/runner/work/polyglot/polyglot / parent: /home/runner/work/polyglot/polyglot/deps/spiral/lib/spiral/../../deps / End: polyglot spiral/lib/spiral/lib.ps1/BuildFable / TargetDir: /home/runner/work/polyglot/polyglot/target/Builder/cube / ProjectName: cube / Language: py / Runtime: / root: /home/runner/work/polyglot/polyglot Fable 5.0.0-alpha.9: F# to Python compiler (status: beta) Thanks to the contributor! @irium Stand with Ukraine! https://standwithukraine.com.ua/ Parsing target/Builder/cube/cube.fsproj... Project and references (14 source files) parsed in 2124ms Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.JSInterop.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Routing.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Routing.Abstractions.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Mvc.ViewFeatures.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Mvc.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Mvc.Core.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Http.Abstractions.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Components.Forms.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Components.Endpoints.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Could not scan /usr/share/dotnet/packs/Microsoft.AspNetCore.App.Ref/9.0.3/ref/net9.0/Microsoft.AspNetCore.Components.dll for Fable plugins, skipping this assembly. Original error: The exception has been reported. This internal exception should now be caught at an error recovery point on the stack. Original message: The type 'MetadataUpdateHandlerAttribute' is required here and is unavailable. You must add a reference to assembly 'System.Runtime.Loader, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.) Started Fable compilation... Fable compilation finished in 8035ms ./deps/spiral/lib/spiral/sm.fsx(38,20): (38,49) warning FABLE: CultureInfo argument is ignored ./deps/spiral/lib/spiral/sm.fsx(307,20): (307,51) warning FABLE: CultureInfo argument is ignored polyglot/apps/spiral/temp/cube/build.ps1 / $targetDir: /home/runner/work/polyglot/polyglot/target/Builder/cube / $projectName: cube / $env:CI:'true' bun install v1.2.9 (9a329c04) + @playwright/test@1.44.0 + @types/chrome@0.0.268 + npm-check-updates@17.1.14 + buffer@6.0.3 11 packages installed [84.00ms] [INFO]: 🎯 Checking for the Wasm target... [INFO]: 🌀 Compiling to Wasm... warning: /home/runner/work/polyglot/polyglot/examples/rust/exercism/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/spiral/temp/test/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/spiral/temp/extension/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/plot/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/chat/contract/tests/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/spiral/temp/cube/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/apps/chat/contract/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. warning: /home/runner/work/polyglot/polyglot/lib/math/Cargo.toml: the cargo feature `edition2024` has been stabilized in the 1.85 release and is no longer necessary to be listed in the manifest See https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-field for more information about using this feature. Compiling proc-macro2 v1.0.92 Compiling unicode-ident v1.0.14 Compiling autocfg v1.4.0 Compiling serde v1.0.216 Compiling wasm-bindgen-shared v0.2.99 Compiling cfg-if v1.0.0 Compiling log v0.4.22 Compiling once_cell v1.20.2 Compiling bumpalo v3.16.0 Compiling version_check v0.9.5 Compiling wasm-bindgen v0.2.99 Compiling quote v1.0.37 Compiling thiserror v1.0.69 Compiling memchr v2.7.4 Compiling syn v2.0.90 Compiling stable_deref_trait v1.2.0 Compiling pin-project-lite v0.2.15 Compiling smallvec v1.13.2 Compiling futures-core v0.3.31 Compiling litemap v0.7.4 Compiling writeable v0.5.5 Compiling slab v0.4.9 Compiling lock_api v0.4.12 Compiling itoa v1.0.14 Compiling parking_lot_core v0.9.10 Compiling futures-sink v0.3.31 Compiling futures-channel v0.3.31 Compiling icu_locid_transform_data v1.5.0 Compiling futures-io v0.3.31 Compiling futures-task v0.3.31 Compiling unicode-xid v0.2.6 Compiling serde_json v1.0.133 Compiling ryu v1.0.18 Compiling libc v0.2.168 Compiling percent-encoding v2.3.1 Compiling icu_properties_data v1.5.0 Compiling pin-utils v0.1.0 Compiling const_format_proc_macros v0.2.34 Compiling proc-macro-error-attr v1.0.4 Compiling utf8_iter v1.0.4 Compiling utf16_iter v1.0.5 Compiling icu_normalizer_data v1.5.0 Compiling write16 v1.0.0 Compiling equivalent v1.0.1 Compiling hashbrown v0.15.2 Compiling indexmap v2.7.0 Compiling proc-macro-error v1.0.4 Compiling bytes v1.9.0 Compiling fnv v1.0.7 Compiling unicode-segmentation v1.12.0 Compiling convert_case v0.6.0 Compiling const_format v0.2.34 Compiling form_urlencoded v1.2.1 Compiling proc-macro-utils v0.8.0 Compiling proc-macro-utils v0.10.0 Compiling proc-macro2-diagnostics v0.10.1 Compiling xxhash-rust v0.8.12 Compiling manyhow-macros v0.10.4 Compiling slotmap v1.0.7 Compiling half v2.4.1 Compiling camino v1.1.9 Compiling wasm-bindgen-backend v0.2.99 Compiling synstructure v0.13.1 Compiling server_fn_macro v0.6.15 Compiling ciborium-io v0.2.2 Compiling anyhow v1.0.94 Compiling scopeguard v1.2.0 Compiling wasm-bindgen-macro-support v0.2.99 Compiling paste v1.0.15 Compiling yansi v1.0.1 Compiling ciborium-ll v0.2.2 Compiling manyhow v0.10.4 Compiling http v1.2.0 Compiling tracing-core v0.1.33 Compiling interpolator v0.5.0 Compiling serde_derive v1.0.216 Compiling wasm-bindgen-macro v0.2.99 Compiling zerofrom-derive v0.1.5 Compiling thiserror-impl v1.0.69 Compiling yoke-derive v0.7.5 Compiling zerofrom v0.1.5 Compiling js-sys v0.3.76 Compiling zerovec-derive v0.10.3 Compiling yoke v0.7.5 Compiling displaydoc v0.2.5 Compiling icu_provider_macros v1.5.0 Compiling zerovec v0.10.4 Compiling futures-macro v0.3.31 Compiling tinystr v0.7.6 Compiling icu_locid v1.5.0 Compiling icu_collections v1.5.0 Compiling icu_provider v1.5.0 Compiling icu_locid_transform v1.5.0 Compiling futures-util v0.3.31 Compiling web-sys v0.3.76 Compiling icu_properties v1.5.1 Compiling wasm-bindgen-futures v0.4.49 Compiling pin-project-internal v1.1.7 Compiling futures-executor v0.3.31 Compiling tracing-attributes v0.1.28 Compiling icu_normalizer v1.5.0 Compiling idna_adapter v1.2.0 Compiling idna v1.0.3 Compiling pin-project v1.1.7 Compiling futures v0.3.31 Compiling quote-use-macros v0.8.4 Compiling url v2.5.4 Compiling quote-use v0.8.4 Compiling serde_spanned v0.6.8 Compiling toml_datetime v0.6.8 Compiling syn_derive v0.1.8 Compiling collection_literals v1.0.1 Compiling prettyplease v0.2.25 Compiling same-file v1.0.6 Compiling hashbrown v0.14.5 Compiling winnow v0.6.20 Compiling dashmap v5.5.3 Compiling rstml v0.11.2 Compiling walkdir v2.5.0 Compiling toml_edit v0.22.22 Compiling attribute-derive-macro v0.9.2 Compiling tracing v0.1.41 Compiling serde-wasm-bindgen v0.6.5 Compiling ciborium v0.2.2 Compiling oco_ref v0.1.1 Compiling serde_qs v0.12.0 Compiling derive-where v1.2.7 Compiling server_fn_macro_default v0.6.15 Compiling parking_lot v0.12.3 Compiling getrandom v0.2.15 Compiling send_wrapper v0.6.0 Compiling proc-macro-error-attr2 v2.0.0 Compiling aho-corasick v1.1.3 Compiling self_cell v1.1.0 Compiling regex-syntax v0.8.5 Compiling utf8-width v0.1.7 Compiling base64 v0.22.1 Compiling minimal-lexical v0.2.1 Compiling rustc-hash v1.1.0 Compiling either v1.13.0 Compiling itertools v0.12.1 Compiling nom v7.1.3 Compiling regex-automata v0.4.9 Compiling html-escape v0.2.13 Compiling proc-macro-error2 v2.0.1 Compiling uuid v1.11.0 Compiling leptos_hot_reload v0.6.15 Compiling attribute-derive v0.9.2 Compiling toml v0.8.19 Compiling typed-builder-macro v0.18.2 Compiling pathdiff v0.2.3 Compiling typed-builder v0.18.2 Compiling config v0.14.1 Compiling leptos_macro v0.6.15 Compiling regex v1.11.1 Compiling async-recursion v1.1.1 Compiling num-traits v0.2.19 Compiling lazy_static v1.5.0 Compiling inventory v0.3.15 Compiling drain_filter_polyfill v0.1.3 Compiling pad-adapter v0.1.1 Compiling leptos_config v0.6.15 Compiling cfg_aliases v0.2.1 Compiling borsh v1.5.3 Compiling serde_test v1.0.177 Compiling tokio v1.42.0 Compiling linear-map v1.2.0 Compiling serde_urlencoded v0.7.1 Compiling serde_qs v0.13.0 Compiling http v0.2.12 Compiling base64 v0.13.1 Compiling tower-service v0.3.3 Compiling console_error_panic_hook v0.1.7 Compiling gloo-utils v0.2.0 Compiling leptos_reactive v0.6.15 Compiling idb v0.6.4 Compiling gloo-net v0.6.0 Compiling console_log v1.0.0 Compiling reqwest-wasm v0.11.16 Compiling wasm-streams v0.4.2 Compiling rexie v0.6.2 Compiling server_fn v0.6.15 Compiling leptos_server v0.6.15 Compiling leptos_dom v0.6.15 Compiling leptos v0.6.15 Compiling leptos_router v0.6.15 Compiling leptos_meta v0.6.15 Compiling spiral_temp_extension v0.0.1 (/home/runner/work/polyglot/polyglot/apps/spiral/temp/extension) Finished `dev` profile [unoptimized + debuginfo] target(s) in 52.43s [INFO]: ⬇️ Installing wasm-bindgen... [INFO]: Optional field missing from Cargo.toml: 'description'. This is not necessary, but recommended [INFO]: ✨ Done in 54.10s [INFO]: 📦 Your wasm pkg is ready to publish at /home/runner/work/polyglot/polyglot/apps/spiral/temp/extension/pkg. Resolving dependencies Resolved, downloaded and extracted [56] Saved lockfile ▲ [WARNING] "import.meta" is not available with the "iife" output format and will be empty [empty-import-meta] pkg/spiral_temp_extension.js:1455:66: 1455 │ ...ath = new URL('spiral_temp_extension_bg.wasm', import.meta.url); ╵ ~~~~~~~~~~~ You need to set the output format to "esm" for "import.meta" to work correctly. 1 warning dist/spiral_temp_extension_bg-GWESY6VZ.wasm 4.4mb ⚠️ dist/devtools.js 29.0kb dist/content_script.js 26.7kb dist/service_worker.js 2.2kb ⚡ Done in 36ms $ playwright test [WebServer] =: The term '=' is not recognized as a name of a cmdlet, function, script file, or executable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. Error: Timed out waiting 60000ms from config.webServer. error: script "test:e2e" exited with code 1 # Invoke-Block / $retry: 1/1 / $Location: / Get-Location: /home/runner/work/polyglot/polyglot/apps/spiral/temp/extension / $OnError: Continue / $exitcode: 1 / $Error: '' / $ScriptBlock: '. $(Search-Command bun) test:e2e' 00:00:00 d #1 spiral.main / { args = Array(MutCell(["dib", "--path", "build.dib"])) } 00:00:00 d #2 runtime.execute_with_options / { file_name = dotnet; arguments = ["repl", "--exit-after-run", "--run", "/home/runner/work/polyglot/polyglot/apps/spiral/temp/test/build.dib", "--output-path", "/home/runner/work/polyglot/polyglot/apps/spiral/temp/test/build.dib.ipynb"]; options = { command = dotnet repl --exit-after-run --run "/home/runner/work/polyglot/polyglot/apps/spiral/temp/test/build.dib" --output-path "/home/runner/work/polyglot/polyglot/apps/spiral/temp/test/build.dib.ipynb"; cancellation_token = None; environment_variables = Array(MutCell([("TRACE_LEVEL", "Verbose"), ("AUTOMATION", "True")])); on_line = None; stdin = None; trace = false; working_directory = None } } > > ── markdown ──────────────────────────────────────────────────────────────────── > │ # test > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## include scripts > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### include notebook core > > ── pwsh ──────────────────────────────────────────────────────────────────────── > . ../../../../scripts/nbs_header.ps1 > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### Include core functions script > > ── pwsh ──────────────────────────────────────────────────────────────────────── > . ../../../../scripts/core.ps1 > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### Include spiral library > > ── pwsh ──────────────────────────────────────────────────────────────────────── > . ../../../../deps/spiral/lib/spiral/lib.ps1 > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## execute project commands > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### run notebook with retries using spiral supervisor > > ── pwsh ──────────────────────────────────────────────────────────────────────── > { . ../../../../deps/spiral/workspace/target/release/spiral$(_exe) dib --path > test.dib --retries 3 } | Invoke-Block > > ── [ 13.93s - stdout ] ───────────────────────────────────────────────────────── > │ 00:00:00 d #1 spiral.main / { args = > Array(MutCell(["dib", "--path", "test.dib", "--retries", "3"])) } > │ 00:00:00 d #2 runtime.execute_with_options / { > file_name = dotnet; arguments = ["repl", "--exit-after-run", "--run", > "/home/runner/work/polyglot/polyglot/apps/spiral/temp/test/test.dib", > "--output-path", > "/home/runner/work/polyglot/polyglot/apps/spiral/temp/test/test.dib.ipynb"]; > options = { command = dotnet repl --exit-after-run --run > "/home/runner/work/polyglot/polyglot/apps/spiral/temp/test/test.dib" > --output-path > "/home/runner/work/polyglot/polyglot/apps/spiral/temp/test/test.dib.ipynb"; > cancellation_token = None; environment_variables = > Array(MutCell([("TRACE_LEVEL", "Verbose"), ("AUTOMATION", "True")])); on_line = > None; stdin = None; trace = false; working_directory = None } } > │ > > │ > ── markdown > ──────────────────────────────────────────────────────────────────── > │ > │ # test (Polyglot) > │ > > │ > ── spiral > ────────────────────────────────────────────────────────────────────── > │ > //// test > │ > > │ > open testing > │ > > │ > ── spiral > ────────────────────────────────────────────────────────────────────── > │ > //// test > │ > //// print_code > │ > > │ > inl jp = [[ "J"; "P" ]] > │ > inl tf = [[ "T"; "F" ]] > │ > inl sn = [[ "S"; "N" ]] > │ > inl ie = [[ "I"; "E" ]] > │ > > │ > (ie, ([[]] : _ string)) > │ > ||> listm.foldBack fun ie' acc => > │ > inl ssnn acc' jp' = > │ > (sn, acc') > │ > ||> listm.foldBack fun sn' acc' => > │ > inl c' ie' sn' tf' jp' = > │ > $'$"{!ie'}{!sn'}{!tf'}{!jp'}"' > │ > > │ > if listm.length acc' % 4i32 = 2 then > │ > (tf, acc') > │ > ||> listm.foldBack fun tf' acc'' => > │ > c' ie' sn' tf' jp' :: acc'' > │ > else > │ > (acc', tf) > │ > ||> listm.fold fun acc'' tf' => > │ > c' ie' sn' tf' jp' :: acc'' > │ > if acc = [[]] then > │ > (acc, jp) > │ > ||> listm.fold fun acc' jp' => > │ > ssnn acc' jp' > │ > else > │ > (jp, acc) > │ > ||> listm.foldBack fun jp' acc' => > │ > ssnn acc' jp' > │ > |> listm'.box > │ > |> listm'.to_array' > │ > |> _assert_eq' ;[[ > │ > "ISTJ"; "ISFJ"; "INFJ"; "INTJ" > │ > "ISTP"; "ISFP"; "INFP"; "INTP" > │ > "ESTP"; "ESFP"; "ENFP"; "ENTP" > │ > "ESTJ"; "ESFJ"; "ENFJ"; "ENTJ" > │ > ]] > │ > > │ > ── [ 1.19s - stdout ] > ────────────────────────────────────────────────────────── > │ > │ type Mut0 = {mutable l0 : string} > │ > │ let rec method1 (v0 : bool) : bool = > │ > │ v0 > │ > │ and method3 () : string = > │ > │ let v0 : string = "" > │ > │ v0 > │ > │ and closure0 (v0 : Mut0, v1 : string) () > : unit = > │ > │ let v2 : string = v0.l0 > │ > │ let v4 : string = v2 + v1 > │ > │ v0.l0 <- v4 > │ > │ () > │ > │ and method2 (v0 : string, v1 : (string > []), v2 : (string [])) > │ > : string = > │ > │ let v3 : string = method3() > │ > │ let v4 : Mut0 = {l0 = v3} : Mut0 > │ > │ let v7 : string = "{ " > │ > │ let v8 : string = $"{v7}" > │ > │ let v16 : unit = () > │ > │ let v17 : (unit -> unit) = > closure0(v4, v8) > │ > │ let v18 : unit = (fun () -> v17 (); > v16) () > │ > │ let v26 : string = "name" > │ > │ let v27 : string = $"{v26}" > │ > │ let v35 : unit = () > │ > │ let v36 : (unit -> unit) = > closure0(v4, v27) > │ > │ let v37 : unit = (fun () -> v36 (); > v35) () > │ > │ let v45 : string = " = " > │ > │ let v46 : string = $"{v45}" > │ > │ let v54 : unit = () > │ > │ let v55 : (unit -> unit) = > closure0(v4, v46) > │ > │ let v56 : unit = (fun () -> v55 (); > v54) () > │ > │ let v63 : string = $"{v0}" > │ > │ let v71 : unit = () > │ > │ let v72 : (unit -> unit) = > closure0(v4, v63) > │ > │ let v73 : unit = (fun () -> v72 (); > v71) () > │ > │ let v81 : string = "; " > │ > │ let v82 : string = $"{v81}" > │ > │ let v90 : unit = () > │ > │ let v91 : (unit -> unit) = > closure0(v4, v82) > │ > │ let v92 : unit = (fun () -> v91 (); > v90) () > │ > │ let v100 : string = "actual" > │ > │ let v101 : string = $"{v100}" > │ > │ let v109 : unit = () > │ > │ let v110 : (unit -> unit) = > closure0(v4, v101) > │ > │ let v111 : unit = (fun () -> v110 > (); v109) () > │ > │ let v118 : string = $"{v45}" > │ > │ let v126 : unit = () > │ > │ let v127 : (unit -> unit) = > closure0(v4, v118) > │ > │ let v128 : unit = (fun () -> v127 > (); v126) () > │ > │ let v135 : string = $"%A{v1}" > │ > │ let v139 : string = $"{v135}" > │ > │ let v147 : unit = () > │ > │ let v148 : (unit -> unit) = > closure0(v4, v139) > │ > │ let v149 : unit = (fun () -> v148 > (); v147) () > │ > │ let v156 : string = $"{v81}" > │ > │ let v164 : unit = () > │ > │ let v165 : (unit -> unit) = > closure0(v4, v156) > │ > │ let v166 : unit = (fun () -> v165 > (); v164) () > │ > │ let v174 : string = "expected" > │ > │ let v175 : string = $"{v174}" > │ > │ let v183 : unit = () > │ > │ let v184 : (unit -> unit) = > closure0(v4, v175) > │ > │ let v185 : unit = (fun () -> v184 > (); v183) () > │ > │ let v192 : string = $"{v45}" > │ > │ let v200 : unit = () > │ > │ let v201 : (unit -> unit) = > closure0(v4, v192) > │ > │ let v202 : unit = (fun () -> v201 > (); v200) () > │ > │ let v209 : string = $"%A{v2}" > │ > │ let v213 : string = $"{v209}" > │ > │ let v221 : unit = () > │ > │ let v222 : (unit -> unit) = > closure0(v4, v213) > │ > │ let v223 : unit = (fun () -> v222 > (); v221) () > │ > │ let v231 : string = " }" > │ > │ let v232 : string = $"{v231}" > │ > │ let v240 : unit = () > │ > │ let v241 : (unit -> unit) = > closure0(v4, v232) > │ > │ let v242 : unit = (fun () -> v241 > (); v240) () > │ > │ let v248 : string = v4.l0 > │ > │ v248 > │ > │ and closure1 (v0 : string) () : unit = > │ > │ let v1 : (string -> unit) = > System.Console.WriteLine > │ > │ v1 v0 > │ > │ and method0 () : unit = > │ > │ let v0 : string = "E" > │ > │ let v1 : string = "N" > │ > │ let v2 : string = "T" > │ > │ let v3 : string = "J" > │ > │ let v4 : string = > $"{v0}{v1}{v2}{v3}" > │ > │ let v5 : string = "F" > │ > │ let v6 : string = > $"{v0}{v1}{v5}{v3}" > │ > │ let v7 : string = "S" > │ > │ let v8 : string = > $"{v0}{v7}{v5}{v3}" > │ > │ let v9 : string = > $"{v0}{v7}{v2}{v3}" > │ > │ let v10 : string = "P" > │ > │ let v11 : string = > $"{v0}{v1}{v2}{v10}" > │ > │ let v12 : string = > $"{v0}{v1}{v5}{v10}" > │ > │ let v13 : string = > $"{v0}{v7}{v5}{v10}" > │ > │ let v14 : string = > $"{v0}{v7}{v2}{v10}" > │ > │ let v15 : string = "I" > │ > │ let v16 : string = > $"{v15}{v1}{v2}{v10}" > │ > │ let v17 : string = > $"{v15}{v1}{v5}{v10}" > │ > │ let v18 : string = > $"{v15}{v7}{v5}{v10}" > │ > │ let v19 : string = > $"{v15}{v7}{v2}{v10}" > │ > │ let v20 : string = > $"{v15}{v1}{v2}{v3}" > │ > │ let v21 : string = > $"{v15}{v1}{v5}{v3}" > │ > │ let v22 : string = > $"{v15}{v7}{v5}{v3}" > │ > │ let v23 : string = > $"{v15}{v7}{v2}{v3}" > │ > │ let v24 : string list = [] > │ > │ let v26 : string list = v4 :: v24 > │ > │ let v30 : string list = v6 :: v26 > │ > │ let v34 : string list = v8 :: v30 > │ > │ let v38 : string list = v9 :: v34 > │ > │ let v42 : string list = v11 :: v38 > │ > │ let v46 : string list = v12 :: v42 > │ > │ let v50 : string list = v13 :: v46 > │ > │ let v54 : string list = v14 :: v50 > │ > │ let v58 : string list = v16 :: v54 > │ > │ let v62 : string list = v17 :: v58 > │ > │ let v66 : string list = v18 :: v62 > │ > │ let v70 : string list = v19 :: v66 > │ > │ let v74 : string list = v20 :: v70 > │ > │ let v78 : string list = v21 :: v74 > │ > │ let v82 : string list = v22 :: v78 > │ > │ let v86 : string list = v23 :: v82 > │ > │ let v90 : (string list -> (string > [])) = List.toArray > │ > │ let v91 : (string []) = v90 v86 > │ > │ let v94 : string = "ISTJ" > │ > │ let v95 : string = "ISFJ" > │ > │ let v96 : string = "INFJ" > │ > │ let v97 : string = "INTJ" > │ > │ let v98 : string = "ISTP" > │ > │ let v99 : string = "ISFP" > │ > │ let v100 : string = "INFP" > │ > │ let v101 : string = "INTP" > │ > │ let v102 : string = "ESTP" > │ > │ let v103 : string = "ESFP" > │ > │ let v104 : string = "ENFP" > │ > │ let v105 : string = "ENTP" > │ > │ let v106 : string = "ESTJ" > │ > │ let v107 : string = "ESFJ" > │ > │ let v108 : string = "ENFJ" > │ > │ let v109 : string = "ENTJ" > │ > │ let v110 : (string []) = [|v94; v95; > v96; v97; v98; v99; > │ > v100; v101; v102; v103; v104; v105; v106; v107; v108; > v109|] > │ > │ let v112 : bool = v91 = v110 > │ > │ let v116 : bool = > │ > │ if v112 then > │ > │ true > │ > │ else > │ > │ method1(v112) > │ > │ let v117 : string = "__assert_eq'" > │ > │ let v118 : string = method2(v117, > v91, v110) > │ > │ let v120 : unit = () > │ > │ let v121 : (unit -> unit) = > closure1(v118) > │ > │ let v122 : unit = (fun () -> v121 > (); v120) () > │ > │ let v124 : bool = v116 = false > │ > │ if v124 then > │ > │ failwith<unit> v118 > │ > │ method0() > │ > │ > │ > │ { name = __assert_eq'; actual = > [|"ISTJ"; "ISFJ"; "INFJ"; > │ > "INTJ"; "ISTP"; "ISFP"; "INFP"; "INTP"; "ESTP"; "ESFP"; > │ > │ "ENFP"; "ENTP"; "ESTJ"; "ESFJ"; > "ENFJ"; "ENTJ"|]; expected > │ > = [|"ISTJ"; "ISFJ"; "INFJ"; "INTJ"; "ISTP"; "ISFP"; "INFP"; > "INTP"; "ESTP"; > │ > "ESFP"; > │ > │ "ENFP"; "ENTP"; "ESTJ"; "ESFJ"; > "ENFJ"; "ENTJ"|] } > │ > │ > │ > > │ > ── spiral > ────────────────────────────────────────────────────────────────────── > │ > //// test > │ > //// print_code > │ > > │ > inl i_e = > │ > listm'.replicate 8i32 "I" ++ listm'.replicate 8i32 "E" > │ > inl s_n = > │ > [[ "S"; "S"; "N"; "N" ]] > │ > |> listm'.replicate 4i32 > │ > |> listm'.collect id > │ > inl t_f = > │ > [[ "T"; "F"; "F"; "T" ]] > │ > |> listm'.replicate 4i32 > │ > |> listm'.collect id > │ > inl j_p = > │ > [[ "J"; "J"; "J"; "J" ]] > │ > ++ [[ "P"; "P"; "P"; "P" ]] > │ > ++ [[ "P"; "P"; "P"; "P" ]] > │ > ++ [[ "J"; "J"; "J"; "J" ]] > │ > inl mbti = > │ > listm'.map4 (fun a b c d => $'$"{!a}{!b}{!c}{!d}"') i_e > s_n t_f j_p > │ > > │ > mbti > │ > |> listm'.box > │ > |> listm'.to_array' > │ > |> _assert_eq' ;[[ > │ > "ISTJ"; "ISFJ"; "INFJ"; "INTJ" > │ > "ISTP"; "ISFP"; "INFP"; "INTP" > │ > "ESTP"; "ESFP"; "ENFP"; "ENTP" > │ > "ESTJ"; "ESFJ"; "ENFJ"; "ENTJ" > │ > ]] > │ > > │ > ── [ 406.37ms - stdout ] > ─────────────────────────────────────────────────────── > │ > │ type Mut0 = {mutable l0 : string} > │ > │ let rec method1 (v0 : bool) : bool = > │ > │ v0 > │ > │ and method3 () : string = > │ > │ let v0 : string = "" > │ > │ v0 > │ > │ and closure0 (v0 : Mut0, v1 : string) () > : unit = > │ > │ let v2 : string = v0.l0 > │ > │ let v4 : string = v2 + v1 > │ > │ v0.l0 <- v4 > │ > │ () > │ > │ and method2 (v0 : string, v1 : (string > []), v2 : (string [])) > │ > : string = > │ > │ let v3 : string = method3() > │ > │ let v4 : Mut0 = {l0 = v3} : Mut0 > │ > │ let v7 : string = "{ " > │ > │ let v8 : string = $"{v7}" > │ > │ let v16 : unit = () > │ > │ let v17 : (unit -> unit) = > closure0(v4, v8) > │ > │ let v18 : unit = (fun () -> v17 (); > v16) () > │ > │ let v26 : string = "name" > │ > │ let v27 : string = $"{v26}" > │ > │ let v35 : unit = () > │ > │ let v36 : (unit -> unit) = > closure0(v4, v27) > │ > │ let v37 : unit = (fun () -> v36 (); > v35) () > │ > │ let v45 : string = " = " > │ > │ let v46 : string = $"{v45}" > │ > │ let v54 : unit = () > │ > │ let v55 : (unit -> unit) = > closure0(v4, v46) > │ > │ let v56 : unit = (fun () -> v55 (); > v54) () > │ > │ let v63 : string = $"{v0}" > │ > │ let v71 : unit = () > │ > │ let v72 : (unit -> unit) = > closure0(v4, v63) > │ > │ let v73 : unit = (fun () -> v72 (); > v71) () > │ > │ let v81 : string = "; " > │ > │ let v82 : string = $"{v81}" > │ > │ let v90 : unit = () > │ > │ let v91 : (unit -> unit) = > closure0(v4, v82) > │ > │ let v92 : unit = (fun () -> v91 (); > v90) () > │ > │ let v100 : string = "actual" > │ > │ let v101 : string = $"{v100}" > │ > │ let v109 : unit = () > │ > │ let v110 : (unit -> unit) = > closure0(v4, v101) > │ > │ let v111 : unit = (fun () -> v110 > (); v109) () > │ > │ let v118 : string = $"{v45}" > │ > │ let v126 : unit = () > │ > │ let v127 : (unit -> unit) = > closure0(v4, v118) > │ > │ let v128 : unit = (fun () -> v127 > (); v126) () > │ > │ let v135 : string = $"%A{v1}" > │ > │ let v139 : string = $"{v135}" > │ > │ let v147 : unit = () > │ > │ let v148 : (unit -> unit) = > closure0(v4, v139) > │ > │ let v149 : unit = (fun () -> v148 > (); v147) () > │ > │ let v156 : string = $"{v81}" > │ > │ let v164 : unit = () > │ > │ let v165 : (unit -> unit) = > closure0(v4, v156) > │ > │ let v166 : unit = (fun () -> v165 > (); v164) () > │ > │ let v174 : string = "expected" > │ > │ let v175 : string = $"{v174}" > │ > │ let v183 : unit = () > │ > │ let v184 : (unit -> unit) = > closure0(v4, v175) > │ > │ let v185 : unit = (fun () -> v184 > (); v183) () > │ > │ let v192 : string = $"{v45}" > │ > │ let v200 : unit = () > │ > │ let v201 : (unit -> unit) = > closure0(v4, v192) > │ > │ let v202 : unit = (fun () -> v201 > (); v200) () > │ > │ let v209 : string = $"%A{v2}" > │ > │ let v213 : string = $"{v209}" > │ > │ let v221 : unit = () > │ > │ let v222 : (unit -> unit) = > closure0(v4, v213) > │ > │ let v223 : unit = (fun () -> v222 > (); v221) () > │ > │ let v231 : string = " }" > │ > │ let v232 : string = $"{v231}" > │ > │ let v240 : unit = () > │ > │ let v241 : (unit -> unit) = > closure0(v4, v232) > │ > │ let v242 : unit = (fun () -> v241 > (); v240) () > │ > │ let v248 : string = v4.l0 > │ > │ v248 > │ > │ and closure1 (v0 : string) () : unit = > │ > │ let v1 : (string -> unit) = > System.Console.WriteLine > │ > │ v1 v0 > │ > │ and method0 () : unit = > │ > │ let v0 : string = "I" > │ > │ let v1 : string = "S" > │ > │ let v2 : string = "T" > │ > │ let v3 : string = "J" > │ > │ let v4 : string = > $"{v0}{v1}{v2}{v3}" > │ > │ let v5 : string = "F" > │ > │ let v6 : string = > $"{v0}{v1}{v5}{v3}" > │ > │ let v7 : string = "N" > │ > │ let v8 : string = > $"{v0}{v7}{v5}{v3}" > │ > │ let v9 : string = > $"{v0}{v7}{v2}{v3}" > │ > │ let v10 : string = "P" > │ > │ let v11 : string = > $"{v0}{v1}{v2}{v10}" > │ > │ let v12 : string = > $"{v0}{v1}{v5}{v10}" > │ > │ let v13 : string = > $"{v0}{v7}{v5}{v10}" > │ > │ let v14 : string = > $"{v0}{v7}{v2}{v10}" > │ > │ let v15 : string = "E" > │ > │ let v16 : string = > $"{v15}{v1}{v2}{v10}" > │ > │ let v17 : string = > $"{v15}{v1}{v5}{v10}" > │ > │ let v18 : string = > $"{v15}{v7}{v5}{v10}" > │ > │ let v19 : string = > $"{v15}{v7}{v2}{v10}" > │ > │ let v20 : string = > $"{v15}{v1}{v2}{v3}" > │ > │ let v21 : string = > $"{v15}{v1}{v5}{v3}" > │ > │ let v22 : string = > $"{v15}{v7}{v5}{v3}" > │ > │ let v23 : string = > $"{v15}{v7}{v2}{v3}" > │ > │ let v24 : string list = [] > │ > │ let v26 : string list = v23 :: v24 > │ > │ let v30 : string list = v22 :: v26 > │ > │ let v34 : string list = v21 :: v30 > │ > │ let v38 : string list = v20 :: v34 > │ > │ let v42 : string list = v19 :: v38 > │ > │ let v46 : string list = v18 :: v42 > │ > │ let v50 : string list = v17 :: v46 > │ > │ let v54 : string list = v16 :: v50 > │ > │ let v58 : string list = v14 :: v54 > │ > │ let v62 : string list = v13 :: v58 > │ > │ let v66 : string list = v12 :: v62 > │ > │ let v70 : string list = v11 :: v66 > │ > │ let v74 : string list = v9 :: v70 > │ > │ let v78 : string list = v8 :: v74 > │ > │ let v82 : string list = v6 :: v78 > │ > │ let v86 : string list = v4 :: v82 > │ > │ let v90 : (string list -> (string > [])) = List.toArray > │ > │ let v91 : (string []) = v90 v86 > │ > │ let v94 : string = "ISTJ" > │ > │ let v95 : string = "ISFJ" > │ > │ let v96 : string = "INFJ" > │ > │ let v97 : string = "INTJ" > │ > │ let v98 : string = "ISTP" > │ > │ let v99 : string = "ISFP" > │ > │ let v100 : string = "INFP" > │ > │ let v101 : string = "INTP" > │ > │ let v102 : string = "ESTP" > │ > │ let v103 : string = "ESFP" > │ > │ let v104 : string = "ENFP" > │ > │ let v105 : string = "ENTP" > │ > │ let v106 : string = "ESTJ" > │ > │ let v107 : string = "ESFJ" > │ > │ let v108 : string = "ENFJ" > │ > │ let v109 : string = "ENTJ" > │ > │ let v110 : (string []) = [|v94; v95; > v96; v97; v98; v99; > │ > v100; v101; v102; v103; v104; v105; v106; v107; v108; > v109|] > │ > │ let v112 : bool = v91 = v110 > │ > │ let v116 : bool = > │ > │ if v112 then > │ > │ true > │ > │ else > │ > │ method1(v112) > │ > │ let v117 : string = "__assert_eq'" > │ > │ let v118 : string = method2(v117, > v91, v110) > │ > │ let v120 : unit = () > │ > │ let v121 : (unit -> unit) = > closure1(v118) > │ > │ let v122 : unit = (fun () -> v121 > (); v120) () > │ > │ let v124 : bool = v116 = false > │ > │ if v124 then > │ > │ failwith<unit> v118 > │ > │ method0() > │ > │ > │ > │ { name = __assert_eq'; actual = > [|"ISTJ"; "ISFJ"; "INFJ"; > │ > "INTJ"; "ISTP"; "ISFP"; "INFP"; "INTP"; "ESTP"; "ESFP"; > │ > │ "ENFP"; "ENTP"; "ESTJ"; "ESFJ"; > "ENFJ"; "ENTJ"|]; expected > │ > = [|"ISTJ"; "ISFJ"; "INFJ"; "INTJ"; "ISTP"; "ISFP"; "INFP"; > "INTP"; "ESTP"; > │ > "ESFP"; > │ > │ "ENFP"; "ENTP"; "ESTJ"; "ESFJ"; > "ENFJ"; "ENTJ"|] } > │ > │ > │ > > │ > ── spiral > ────────────────────────────────────────────────────────────────────── > │ > //// test > │ > //// print_code > │ > > │ > fun i => > │ > inl i_e = > │ > if i < 8 > │ > then "I" > │ > else "E" > │ > inl s_n = > │ > inl group = (i / 2) % 2 > │ > if group = 0 > │ > then "S" > │ > else "N" > │ > inl t_f = > │ > match i % 4 with > │ > | 0 => "T" > │ > | 1 => "F" > │ > | 2 => "F" > │ > | _ => "T" > │ > inl j_p = > │ > if i < 4 > │ > then "J" > │ > elif i < 12 > │ > then "P" > │ > else "J" > │ > $'$"{!i_e}{!s_n}{!t_f}{!j_p}"' > │ > |> listm.init 16i32 > │ > |> listm'.box > │ > |> listm'.to_array' > │ > |> _assert_eq' ;[[ > │ > "ISTJ"; "ISFJ"; "INFJ"; "INTJ" > │ > "ISTP"; "ISFP"; "INFP"; "INTP" > │ > "ESTP"; "ESFP"; "ENFP"; "ENTP" > │ > "ESTJ"; "ESFJ"; "ENFJ"; "ENTJ" > │ > ]] > │ > > │ > ── [ 401.15ms - stdout ] > ─────────────────────────────────────────────────────── > │ > │ type Mut0 = {mutable l0 : string} > │ > │ let rec method1 (v0 : bool) : bool = > │ > │ v0 > │ > │ and method3 () : string = > │ > │ let v0 : string = "" > │ > │ v0 > │ > │ and closure0 (v0 : Mut0, v1 : string) () > : unit = > │ > │ let v2 : string = v0.l0 > │ > │ let v4 : string = v2 + v1 > │ > │ v0.l0 <- v4 > │ > │ () > │ > │ and method2 (v0 : string, v1 : (string > []), v2 : (string [])) > │ > : string = > │ > │ let v3 : string = method3() > │ > │ let v4 : Mut0 = {l0 = v3} : Mut0 > │ > │ let v7 : string = "{ " > │ > │ let v8 : string = $"{v7}" > │ > │ let v16 : unit = () > │ > │ let v17 : (unit -> unit) = > closure0(v4, v8) > │ > │ let v18 : unit = (fun () -> v17 (); > v16) () > │ > │ let v26 : string = "name" > │ > │ let v27 : string = $"{v26}" > │ > │ let v35 : unit = () > │ > │ let v36 : (unit -> unit) = > closure0(v4, v27) > │ > │ let v37 : unit = (fun () -> v36 (); > v35) () > │ > │ let v45 : string = " = " > │ > │ let v46 : string = $"{v45}" > │ > │ let v54 : unit = () > │ > │ let v55 : (unit -> unit) = > closure0(v4, v46) > │ > │ let v56 : unit = (fun () -> v55 (); > v54) () > │ > │ let v63 : string = $"{v0}" > │ > │ let v71 : unit = () > │ > │ let v72 : (unit -> unit) = > closure0(v4, v63) > │ > │ let v73 : unit = (fun () -> v72 (); > v71) () > │ > │ let v81 : string = "; " > │ > │ let v82 : string = $"{v81}" > │ > │ let v90 : unit = () > │ > │ let v91 : (unit -> unit) = > closure0(v4, v82) > │ > │ let v92 : unit = (fun () -> v91 (); > v90) () > │ > │ let v100 : string = "actual" > │ > │ let v101 : string = $"{v100}" > │ > │ let v109 : unit = () > │ > │ let v110 : (unit -> unit) = > closure0(v4, v101) > │ > │ let v111 : unit = (fun () -> v110 > (); v109) () > │ > │ let v118 : string = $"{v45}" > │ > │ let v126 : unit = () > │ > │ let v127 : (unit -> unit) = > closure0(v4, v118) > │ > │ let v128 : unit = (fun () -> v127 > (); v126) () > │ > │ let v135 : string = $"%A{v1}" > │ > │ let v139 : string = $"{v135}" > │ > │ let v147 : unit = () > │ > │ let v148 : (unit -> unit) = > closure0(v4, v139) > │ > │ let v149 : unit = (fun () -> v148 > (); v147) () > │ > │ let v156 : string = $"{v81}" > │ > │ let v164 : unit = () > │ > │ let v165 : (unit -> unit) = > closure0(v4, v156) > │ > │ let v166 : unit = (fun () -> v165 > (); v164) () > │ > │ let v174 : string = "expected" > │ > │ let v175 : string = $"{v174}" > │ > │ let v183 : unit = () > │ > │ let v184 : (unit -> unit) = > closure0(v4, v175) > │ > │ let v185 : unit = (fun () -> v184 > (); v183) () > │ > │ let v192 : string = $"{v45}" > │ > │ let v200 : unit = () > │ > │ let v201 : (unit -> unit) = > closure0(v4, v192) > │ > │ let v202 : unit = (fun () -> v201 > (); v200) () > │ > │ let v209 : string = $"%A{v2}" > │ > │ let v213 : string = $"{v209}" > │ > │ let v221 : unit = () > │ > │ let v222 : (unit -> unit) = > closure0(v4, v213) > │ > │ let v223 : unit = (fun () -> v222 > (); v221) () > │ > │ let v231 : string = " }" > │ > │ let v232 : string = $"{v231}" > │ > │ let v240 : unit = () > │ > │ let v241 : (unit -> unit) = > closure0(v4, v232) > │ > │ let v242 : unit = (fun () -> v241 > (); v240) () > │ > │ let v248 : string = v4.l0 > │ > │ v248 > │ > │ and closure1 (v0 : string) () : unit = > │ > │ let v1 : (string -> unit) = > System.Console.WriteLine > │ > │ v1 v0 > │ > │ and method0 () : unit = > │ > │ let v0 : string = "I" > │ > │ let v1 : string = "S" > │ > │ let v2 : string = "T" > │ > │ let v3 : string = "J" > │ > │ let v4 : string = > $"{v0}{v1}{v2}{v3}" > │ > │ let v5 : string = "F" > │ > │ let v6 : string = > $"{v0}{v1}{v5}{v3}" > │ > │ let v7 : string = "N" > │ > │ let v8 : string = > $"{v0}{v7}{v5}{v3}" > │ > │ let v9 : string = > $"{v0}{v7}{v2}{v3}" > │ > │ let v10 : string = "P" > │ > │ let v11 : string = > $"{v0}{v1}{v2}{v10}" > │ > │ let v12 : string = > $"{v0}{v1}{v5}{v10}" > │ > │ let v13 : string = > $"{v0}{v7}{v5}{v10}" > │ > │ let v14 : string = > $"{v0}{v7}{v2}{v10}" > │ > │ let v15 : string = "E" > │ > │ let v16 : string = > $"{v15}{v1}{v2}{v10}" > │ > │ let v17 : string = > $"{v15}{v1}{v5}{v10}" > │ > │ let v18 : string = > $"{v15}{v7}{v5}{v10}" > │ > │ let v19 : string = > $"{v15}{v7}{v2}{v10}" > │ > │ let v20 : string = > $"{v15}{v1}{v2}{v3}" > │ > │ let v21 : string = > $"{v15}{v1}{v5}{v3}" > │ > │ let v22 : string = > $"{v15}{v7}{v5}{v3}" > │ > │ let v23 : string = > $"{v15}{v7}{v2}{v3}" > │ > │ let v24 : string list = [] > │ > │ let v26 : string list = v23 :: v24 > │ > │ let v30 : string list = v22 :: v26 > │ > │ let v34 : string list = v21 :: v30 > │ > │ let v38 : string list = v20 :: v34 > │ > │ let v42 : string list = v19 :: v38 > │ > │ let v46 : string list = v18 :: v42 > │ > │ let v50 : string list = v17 :: v46 > │ > │ let v54 : string list = v16 :: v50 > │ > │ let v58 : string list = v14 :: v54 > │ > │ let v62 : string list = v13 :: v58 > │ > │ let v66 : string list = v12 :: v62 > │ > │ let v70 : string list = v11 :: v66 > │ > │ let v74 : string list = v9 :: v70 > │ > │ let v78 : string list = v8 :: v74 > │ > │ let v82 : string list = v6 :: v78 > │ > │ let v86 : string list = v4 :: v82 > │ > │ let v90 : (string list -> (string > [])) = List.toArray > │ > │ let v91 : (string []) = v90 v86 > │ > │ let v94 : string = "ISTJ" > │ > │ let v95 : string = "ISFJ" > │ > │ let v96 : string = "INFJ" > │ > │ let v97 : string = "INTJ" > │ > │ let v98 : string = "ISTP" > │ > │ let v99 : string = "ISFP" > │ > │ let v100 : string = "INFP" > │ > │ let v101 : string = "INTP" > │ > │ let v102 : string = "ESTP" > │ > │ let v103 : string = "ESFP" > │ > │ let v104 : string = "ENFP" > │ > │ let v105 : string = "ENTP" > │ > │ let v106 : string = "ESTJ" > │ > │ let v107 : string = "ESFJ" > │ > │ let v108 : string = "ENFJ" > │ > │ let v109 : string = "ENTJ" > │ > │ let v110 : (string []) = [|v94; v95; > v96; v97; v98; v99; > │ > v100; v101; v102; v103; v104; v105; v106; v107; v108; > v109|] > │ > │ let v112 : bool = v91 = v110 > │ > │ let v116 : bool = > │ > │ if v112 then > │ > │ true > │ > │ else > │ > │ method1(v112) > │ > │ let v117 : string = "__assert_eq'" > │ > │ let v118 : string = method2(v117, > v91, v110) > │ > │ let v120 : unit = () > │ > │ let v121 : (unit -> unit) = > closure1(v118) > │ > │ let v122 : unit = (fun () -> v121 > (); v120) () > │ > │ let v124 : bool = v116 = false > │ > │ if v124 then > │ > │ failwith<unit> v118 > │ > │ method0() > │ > │ > │ > │ { name = __assert_eq'; actual = > [|"ISTJ"; "ISFJ"; "INFJ"; > │ > "INTJ"; "ISTP"; "ISFP"; "INFP"; "INTP"; "ESTP"; "ESFP"; > │ > │ "ENFP"; "ENTP"; "ESTJ"; "ESFJ"; > "ENFJ"; "ENTJ"|]; expected > │ > = [|"ISTJ"; "ISFJ"; "INFJ"; "INTJ"; "ISTP"; "ISFP"; "INFP"; > "INTP"; "ESTP"; > │ > "ESFP"; > │ > │ "ENFP"; "ENTP"; "ESTJ"; "ESFJ"; > "ENFJ"; "ENTJ"|] } > │ > │ > │ > > │ > ── fsharp > ────────────────────────────────────────────────────────────────────── > │ > type PhonologicalFeature = > │ > | VowelFeature of > │ > height: Height > │ > * backness: Backness > │ > * roundedness: Roundedness > │ > * tone: Option<Tone> > │ > * stress: Option<Stress> > │ > * length: Option<Length> > │ > | ConsonantFeature of > │ > place: PlaceOfArticulation > │ > * manner: MannerOfArticulation > │ > * voicing: Voicing > │ > * length: Option<Length> > │ > | VowelHarmonyFeature > │ > | PitchAccentFeature > │ > > │ > and Stress = Primary | Secondary > │ > and Length = Long | Short | HalfLong > │ > > │ > and Height = > │ > | High | NearHigh | HighMid > │ > | Mid | LowMid | NearLow > │ > | Low > │ > > │ > and Backness = Front | Central | Back > │ > > │ > and Roundedness = Rounded | Unrounded > │ > > │ > and PlaceOfArticulation = > │ > | Bilabial | Labiodental | Dental > │ > | Alveolar | Postalveolar | Retroflex > │ > | Palatal | Velar | Uvular > │ > | Pharyngeal | Epiglottal | Glottal > │ > > │ > and MannerOfArticulation = > │ > | Plosive | Nasal | Trill > │ > | TapOrFlap | Fricative | LateralFricative > │ > | Approximant | LateralApproximant > │ > > │ > and Voicing = Voiced | Voiceless > │ > > │ > and SecondaryArticulation = > │ > | Labialization | Palatalization | Velarization > │ > | Pharyngealization | Aspiration > │ > > │ > and Tone = > │ > | LevelTone of int > │ > | ContourTone of int list > │ > > │ > and MorphologicalFeature = > │ > | RootFeature of string > │ > | AffixFeature of AffixType * string > │ > | IncorporationFeature of string * MorphologicalFeature > │ > | NonConcatenativePattern of string * string > │ > | AgglutinativeAffixFeature of AgglutinativeAffixType * > string > │ > | HonorificFeature of HonorificType * string > │ > > │ > and AgglutinativeAffixType = Suffix | Prefix > │ > > │ > and HonorificType = VerbHonorific | NounHonorific > │ > > │ > and AffixType = > │ > | Prefix | Suffix | Infix > │ > | Circumfix > │ > > │ > type SyntacticFeature = > │ > | WordFeature of MorphologicalFeature list * > LexicalCategory > │ > | PhraseFeature of PhraseType * SyntacticFeature list > │ > | GrammaticalRelation of GrammaticalRelationType * > SyntacticFeature list > │ > | SOVOrderFeature > │ > | TopicCommentFeature > │ > > │ > and GrammaticalRelationType = > │ > | Ergative | Absolutive | Nominative > │ > | Accusative > │ > > │ > and LexicalCategory = > │ > | Noun | Verb | Adjective > │ > | Adverb | Pronoun | Preposition > │ > | Conjunction | Determiner | Interjection > │ > > │ > and PhraseType = > │ > | NP | VP | AP > │ > | PP | CP > │ > > │ > and SemanticFeature = > │ > | Meaning of string > │ > | SemanticRole of SemanticRoleType * SemanticFeature > │ > > │ > and SemanticRoleType = > │ > | Agent | Patient | Instrument > │ > | Location | Time | Cause > │ > > │ > and PragmaticFeature = > │ > | UseContext of string > │ > | PolitenessLevel of Politeness > │ > | SpeechAct of SpeechActType > │ > | SpeechLevel of SpeechLevelType > │ > > │ > and Politeness = Formal | Informal | Neutral > │ > > │ > and SpeechActType = > │ > | Assertive | Directive | Commissive > │ > | Expressive | Declarative > │ > > │ > and SpeechLevelType = > │ > | FormalHigh | FormalLow | InformalHigh > │ > | InformalLow | Neutral > │ > > │ > type LinguisticFeature = > │ > | Phonological of PhonologicalFeature > │ > | Morphological of MorphologicalFeature > │ > | Syntactic of SyntacticFeature > │ > | Semantic of SemanticFeature > │ > | Pragmatic of PragmaticFeature > │ > > │ > type LanguageConstruct = > │ > | LanguageElement of LinguisticFeature > │ > | LanguageStructure of LanguageConstruct list > │ > | TranslationElement of TranslationFeature > │ > > │ > and TranslationFeature = > │ > | LinkedPhonological of PhonologicalFeature * > PhonologicalFeature > │ > | LinkedMorphological of MorphologicalFeature * > MorphologicalFeature > │ > | LinkedSyntactic of SyntacticFeature * > SyntacticFeature > │ > | LinkedSemantic of SemanticFeature * SemanticFeature > │ > > │ > type Discourse = DiscourseUnit of LanguageConstruct list > │ > > │ > type LanguageModel = > │ > | Model of discourse: Discourse > │ > > │ > ── fsharp > ────────────────────────────────────────────────────────────────────── > │ > let testEnglish = > │ > Model( > │ > DiscourseUnit [[ > │ > LanguageElement (Phonological (ConsonantFeature > (Alveolar, Nasal, > │ > Voiced, Some(HalfLong)))); > │ > LanguageElement (Phonological (VowelFeature > (High, Front, Unrounded, > │ > Some(LevelTone 1), Some(Primary), Some(Short)))); > │ > LanguageElement (Phonological (VowelFeature > (Low, Front, Unrounded, > │ > Some(LevelTone 2), Some(Secondary), Some(Long)))); > │ > LanguageElement (Phonological (ConsonantFeature > (Velar, Plosive, > │ > Voiceless, Some(HalfLong)))); > │ > LanguageElement (Morphological (RootFeature > "I")); > │ > LanguageElement (Morphological (RootFeature > "see")); > │ > LanguageElement (Morphological (RootFeature > "a")); > │ > LanguageElement (Morphological (RootFeature > "cat")); > │ > LanguageElement (Syntactic (PhraseFeature (NP, > [[WordFeature > │ > ([[RootFeature "I"]], Pronoun)]]))); > │ > LanguageElement (Syntactic (PhraseFeature (VP, > [[WordFeature > │ > ([[RootFeature "see"]], Verb)]]))); > │ > LanguageElement (Syntactic (PhraseFeature (NP, > [[WordFeature > │ > ([[RootFeature "a"; RootFeature "cat"]], Noun)]]))); > │ > LanguageElement (Semantic (Meaning "Perception > act of a feline by > │ > the speaker")); > │ > LanguageElement (Pragmatic (UseContext > "Statement of an action being > │ > observed")) > │ > ]] > │ > ) > │ > > │ > let testPortuguese = > │ > Model( > │ > DiscourseUnit [[ > │ > LanguageElement (Phonological (VowelFeature > (High, Front, Unrounded, > │ > Some(LevelTone 1), Some(Primary), Some(Short)))); > │ > LanguageElement (Phonological (VowelFeature > (Low, Front, Unrounded, > │ > Some(LevelTone 2), Some(Secondary), Some(Long)))); > │ > LanguageElement (Phonological (VowelFeature > (Mid, Back, Rounded, > │ > Some(LevelTone 3), Some(Primary), Some(Short)))); > │ > LanguageElement (Phonological (ConsonantFeature > (Velar, Plosive, > │ > Voiceless, Some(HalfLong)))); > │ > LanguageElement (Morphological (RootFeature > "Eu")); > │ > LanguageElement (Morphological (RootFeature > "ver" |> ignore; > │ > AffixFeature (Suffix, "o"))); > │ > LanguageElement (Morphological (RootFeature > "um")); > │ > LanguageElement (Morphological (RootFeature > "gato")); > │ > LanguageElement (Syntactic (PhraseFeature (NP, > [[WordFeature > │ > ([[RootFeature "Eu"]], Pronoun)]]))); > │ > LanguageElement (Syntactic (PhraseFeature (VP, > [[WordFeature > │ > ([[RootFeature "vejo"]], Verb)]]))); > │ > LanguageElement (Syntactic (PhraseFeature (NP, > [[WordFeature > │ > ([[RootFeature "um"; RootFeature "gato"]], Noun)]]))); > │ > LanguageElement (Semantic (Meaning "Ação de > percepção de um felino > │ > pelo falante")); > │ > LanguageElement (Pragmatic (UseContext > "Declaração de uma ação sendo > │ > observada")) > │ > ]] > │ > ) > │ > > │ > let testKorean = > │ > Model( > │ > DiscourseUnit [[ > │ > LanguageElement (Phonological (ConsonantFeature > (Alveolar, Nasal, > │ > Voiced, Some(Short)))); > │ > LanguageElement (Phonological (VowelFeature > (High, Back, Rounded, > │ > None, None, Some(Short)))); > │ > LanguageElement (Phonological (VowelFeature > (Mid, Front, Unrounded, > │ > None, None, Some(Long)))); > │ > LanguageElement (Phonological (ConsonantFeature > (Bilabial, Plosive, > │ > Voiceless, Some(Short)))); > │ > LanguageElement (Morphological (RootFeature > "나")); > │ > LanguageElement (Morphological (RootFeature > "보다")); > │ > LanguageElement (Morphological (AffixFeature > (Suffix, "아"))); > │ > LanguageElement (Morphological (RootFeature > "고양이")); > │ > LanguageElement (Syntactic (PhraseFeature (NP, > [[WordFeature > │ > ([[RootFeature "나"]], Pronoun)]]))); > │ > LanguageElement (Syntactic (PhraseFeature (VP, > [[WordFeature > │ > ([[RootFeature "보다"; AffixFeature (Suffix, "아")]], > Verb)]]))); > │ > LanguageElement (Syntactic (PhraseFeature (NP, > [[WordFeature > │ > ([[RootFeature "고양이"]], Noun)]]))); > │ > LanguageElement (Semantic (Meaning "화자에 의한 > 고양이의 관찰 > │ > 행위")); > │ > LanguageElement (Pragmatic (UseContext > "관찰되고 있는 행동의 진술")) > │ > ]] > │ > ) > │ > > │ > ── markdown > ──────────────────────────────────────────────────────────────────── > │ > │ ## main > │ > > │ > ── spiral > ────────────────────────────────────────────────────────────────────── > │ > inl main (_args : array_base string) = > │ > 0i32 > │ > > │ > inl main () = > │ > $'let main args = !main args' : () > │ > > │ > ── spiral > ────────────────────────────────────────────────────────────────────── > │ > inl app () = > │ > "test" |> console.write_line > │ > 0i32 > │ > > │ > inl main () = > │ > print_static "<test>" > │ > > │ > app > │ > |> dyn > │ > |> ignore > │ > > │ > print_static "</test>" > │ 00:00:12 v #3 runtime.execute_with_options / result / { > exit_code = 0; std_trace_length = 40615 } > │ 00:00:12 d #4 runtime.execute_with_options / { > file_name = jupyter; arguments = ["nbconvert", > "/home/runner/work/polyglot/polyglot/apps/spiral/temp/test/test.dib.ipynb", > "--to", "html", "--HTMLExporter.theme=dark"]; options = { command = jupyter > nbconvert > "/home/runner/work/polyglot/polyglot/apps/spiral/temp/test/test.dib.ipynb" --to > html --HTMLExporter.theme=dark; cancellation_token = None; environment_variables > = Array(MutCell([])); on_line = None; stdin = None; trace = true; > working_directory = None } } > │ 00:00:12 v #5 ! [NbConvertApp] Converting notebook > /home/runner/work/polyglot/polyglot/apps/spiral/temp/test/test.dib.ipynb to html > │ 00:00:12 v #6 ! > /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbformat/__i > nit__.py:96: MissingIDFieldWarning: Cell is missing an id field, this will > become a hard error in future nbformat versions. You may want to use > `normalize()` on your notebooks before validations (available since nbformat > 5.1.4). Previous versions of nbformat are fixing this issue transparently, and > will stop doing so in the future. > │ 00:00:12 v #7 ! validate(nb) > │ 00:00:13 v #8 ! > /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbconvert/fi > lters/highlight.py:71: UserWarning: IPython3 lexer unavailable, falling back on > Python 3 > │ 00:00:13 v #9 ! return _pygments_highlight( > │ 00:00:13 v #10 ! [NbConvertApp] Writing 341216 bytes to > /home/runner/work/polyglot/polyglot/apps/spiral/temp/test/test.dib.html > │ 00:00:13 v #11 runtime.execute_with_options / result / > { exit_code = 0; std_trace_length = 914 } > │ 00:00:13 d #12 spiral.run / dib / jupyter nbconvert / { > exit_code = 0; jupyter_result_length = 914 } > │ 00:00:13 d #13 runtime.execute_with_options / { > file_name = pwsh; arguments = ["-c", "$counter = 1; $path = > '/home/runner/work/polyglot/polyglot/apps/spiral/temp/test/test.dib.html'; > (Get-Content $path -Raw) -replace '(id=\\\"cell-id=)[a-fA-F0-9]{8}', { > $_.Groups[1].Value + $counter++ } | Set-Content $path"]; options = { command = > pwsh -c "$counter = 1; $path = > '/home/runner/work/polyglot/polyglot/apps/spiral/temp/test/test.dib.html'; > (Get-Content $path -Raw) -replace '(id=\"cell-id=)[a-fA-F0-9]{8}', { > $_.Groups[1].Value + $counter++ } | Set-Content $path"; cancellation_token = > None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; > trace = true; working_directory = None } } > │ 00:00:13 v #14 runtime.execute_with_options / result / > { exit_code = 0; std_trace_length = 0 } > │ 00:00:13 d #15 spiral.run / dib / html cell ids / { > exit_code = 0; pwsh_replace_html_result_length = 0 } > │ 00:00:13 d #16 spiral.run / dib / { exit_code = 0; > result_length = 41588 } > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### parse the .dib file into .spi format with dibparser > > ── pwsh ──────────────────────────────────────────────────────────────────────── > { . ../../../../apps/parser/dist/DibParser$(_exe) test.dib spi } | Invoke-Block > > ── [ 424.08ms - stdout ] ─────────────────────────────────────────────────────── > │ 00:00:00 d #1 writeDibCode / output: Spi / path: > test.dib > │ 00:00:00 d #2 parseDibCode / output: Spi / file: > test.dib > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### build .fsx file from .spi using supervisor > > ── pwsh ──────────────────────────────────────────────────────────────────────── > { . ../../../../apps/spiral/dist/Supervisor$(_exe) --build-file test.spi > test.fsx } | Invoke-Block > > ── [ 3.33s - stdout ] ────────────────────────────────────────────────────────── > │ <test> > │ </test> > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## compile and format the project > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### compile project with fable targeting optimized rust > > ── pwsh ──────────────────────────────────────────────────────────────────────── > dotnet fable --optimize --lang rs --extension .rs > > ── [ 4.76s - stdout ] ────────────────────────────────────────────────────────── > │ Fable 5.0.0-alpha.9: F# to Rust compiler (status: alpha) > │ > │ Thanks to the contributor! @mastoj > │ Stand with Ukraine! https://standwithukraine.com.ua/ > │ > │ Parsing test.fsproj... > │ Project and references (1 source files) parsed in 2497ms > │ > │ Started Fable compilation... > │ > │ Fable compilation finished in 1153ms > │ > │ ./test.fsx(11,0): (11,2) warning FABLE: For Rust, support > for F# static and module do bindings is disabled by default. It can be enabled > with the 'static_do_bindings' feature. Use at your own risk! > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### fix formatting issues in the .rs file using regex and > set-content > > ── pwsh ──────────────────────────────────────────────────────────────────────── > (Get-Content test.rs) ` > -replace [[regex]]::Escape("),);"), "));" ` > | FixRust ` > | Set-Content test.rs > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### format the rust code using cargo fmt > > ── pwsh ──────────────────────────────────────────────────────────────────────── > cargo fmt -- > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ## build and test the project > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### build the project in release mode using nightly rust > compiler > > ── pwsh ──────────────────────────────────────────────────────────────────────── > cargo build --release > > ── [ 10.73s - stdout ] ───────────────────────────────────────────────────────── > │ warning: > /home/runner/work/polyglot/polyglot/examples/rust/exercism/Cargo.toml: the cargo > feature `edition2024` has been stabilized in the 1.85 release and is no longer > necessary to be listed in the manifest > │ See > https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-fiel > d for more information about using this feature. > │ warning: > /home/runner/work/polyglot/polyglot/apps/chat/contract/tests/Cargo.toml: the > cargo feature `edition2024` has been stabilized in the 1.85 release and is no > longer necessary to be listed in the manifest > │ See > https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-fiel > d for more information about using this feature. > │ warning: > /home/runner/work/polyglot/polyglot/apps/spiral/temp/cube/Cargo.toml: the cargo > feature `edition2024` has been stabilized in the 1.85 release and is no longer > necessary to be listed in the manifest > │ See > https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-fiel > d for more information about using this feature. > │ warning: > /home/runner/work/polyglot/polyglot/apps/chat/contract/Cargo.toml: the cargo > feature `edition2024` has been stabilized in the 1.85 release and is no longer > necessary to be listed in the manifest > │ See > https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-fiel > d for more information about using this feature. > │ warning: > /home/runner/work/polyglot/polyglot/apps/plot/Cargo.toml: the cargo feature > `edition2024` has been stabilized in the 1.85 release and is no longer necessary > to be listed in the manifest > │ See > https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-fiel > d for more information about using this feature. > │ warning: > /home/runner/work/polyglot/polyglot/apps/spiral/temp/extension/Cargo.toml: the > cargo feature `edition2024` has been stabilized in the 1.85 release and is no > longer necessary to be listed in the manifest > │ See > https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-fiel > d for more information about using this feature. > │ warning: > /home/runner/work/polyglot/polyglot/lib/math/Cargo.toml: the cargo feature > `edition2024` has been stabilized in the 1.85 release and is no longer necessary > to be listed in the manifest > │ See > https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-fiel > d for more information about using this feature. > │ warning: > /home/runner/work/polyglot/polyglot/apps/spiral/temp/test/Cargo.toml: the cargo > feature `edition2024` has been stabilized in the 1.85 release and is no longer > necessary to be listed in the manifest > │ See > https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-fiel > d for more information about using this feature. > │ Compiling byteorder v1.5.0 > │ Compiling syn v2.0.90 > │ Compiling getrandom v0.2.15 > │ Compiling linux-raw-sys v0.4.14 > │ Compiling rand_core v0.6.4 > │ Compiling num-traits v0.2.19 > │ Compiling once_cell v1.20.2 > │ Compiling libm v0.2.11 > │ Compiling rustix v0.38.42 > │ Compiling wait-timeout v0.2.0 > │ Compiling quick-error v1.2.3 > │ Compiling bit-vec v0.6.3 > │ Compiling bit-set v0.5.3 > │ Compiling rand_xorshift v0.3.0 > │ Compiling unarray v0.1.4 > │ Compiling memchr v2.7.4 > │ Compiling nom v7.1.3 > │ Compiling tempfile v3.14.0 > │ Compiling zerocopy-derive v0.7.35 > │ Compiling thiserror-impl v1.0.69 > │ Compiling rusty-fork v0.3.0 > │ Compiling fable_library_rust v0.1.0 > (/home/runner/work/polyglot/polyglot/lib/rust/fable/fable_modules/fable-library- > rust) > │ Compiling zerocopy v0.7.35 > │ Compiling thiserror v1.0.69 > │ Compiling ppv-lite86 v0.2.20 > │ Compiling rand_chacha v0.3.1 > │ Compiling rand v0.8.5 > │ Compiling proptest v1.5.0 > │ Compiling spiral_temp_test v0.0.1 > (/home/runner/work/polyglot/polyglot/apps/spiral/temp/test) > │ Finished `release` profile [optimized] > target(s) in 10.70s > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### run release tests with output enabled > > ── pwsh ──────────────────────────────────────────────────────────────────────── > { cargo test --release -- --show-output } | Invoke-Block > > ── [ 15.39s - stdout ] ───────────────────────────────────────────────────────── > │ warning: > /home/runner/work/polyglot/polyglot/apps/spiral/temp/cube/Cargo.toml: the cargo > feature `edition2024` has been stabilized in the 1.85 release and is no longer > necessary to be listed in the manifest > │ See > https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-fiel > d for more information about using this feature. > │ warning: > /home/runner/work/polyglot/polyglot/apps/spiral/temp/extension/Cargo.toml: the > cargo feature `edition2024` has been stabilized in the 1.85 release and is no > longer necessary to be listed in the manifest > │ See > https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-fiel > d for more information about using this feature. > │ warning: > /home/runner/work/polyglot/polyglot/examples/rust/exercism/Cargo.toml: the cargo > feature `edition2024` has been stabilized in the 1.85 release and is no longer > necessary to be listed in the manifest > │ See > https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-fiel > d for more information about using this feature. > │ warning: > /home/runner/work/polyglot/polyglot/apps/plot/Cargo.toml: the cargo feature > `edition2024` has been stabilized in the 1.85 release and is no longer necessary > to be listed in the manifest > │ See > https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-fiel > d for more information about using this feature. > │ warning: > /home/runner/work/polyglot/polyglot/lib/math/Cargo.toml: the cargo feature > `edition2024` has been stabilized in the 1.85 release and is no longer necessary > to be listed in the manifest > │ See > https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-fiel > d for more information about using this feature. > │ warning: > /home/runner/work/polyglot/polyglot/apps/chat/contract/Cargo.toml: the cargo > feature `edition2024` has been stabilized in the 1.85 release and is no longer > necessary to be listed in the manifest > │ See > https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-fiel > d for more information about using this feature. > │ warning: > /home/runner/work/polyglot/polyglot/apps/chat/contract/tests/Cargo.toml: the > cargo feature `edition2024` has been stabilized in the 1.85 release and is no > longer necessary to be listed in the manifest > │ See > https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-fiel > d for more information about using this feature. > │ warning: > /home/runner/work/polyglot/polyglot/apps/spiral/temp/test/Cargo.toml: the cargo > feature `edition2024` has been stabilized in the 1.85 release and is no longer > necessary to be listed in the manifest > │ See > https://doc.rust-lang.org/nightly/cargo/reference/manifest.html#the-edition-fiel > d for more information about using this feature. > │ Compiling linux-raw-sys v0.4.14 > │ Compiling zerocopy v0.7.35 > │ Compiling bitflags v2.6.0 > │ Compiling once_cell v1.20.2 > │ Compiling fastrand v2.3.0 > │ Compiling wait-timeout v0.2.0 > │ Compiling rustix v0.38.42 > │ Compiling fnv v1.0.7 > │ Compiling quick-error v1.2.3 > │ Compiling bit-vec v0.6.3 > │ Compiling num-traits v0.2.19 > │ Compiling ppv-lite86 v0.2.20 > │ Compiling bit-set v0.5.3 > │ Compiling rand_xorshift v0.3.0 > │ Compiling memchr v2.7.4 > │ Compiling rand_chacha v0.3.1 > │ Compiling rand v0.8.5 > │ Compiling unarray v0.1.4 > │ Compiling minimal-lexical v0.2.1 > │ Compiling lazy_static v1.5.0 > │ Compiling fable_library_rust v0.1.0 > (/home/runner/work/polyglot/polyglot/lib/rust/fable/fable_modules/fable-library- > rust) > │ Compiling nom v7.1.3 > │ Compiling thiserror v1.0.69 > │ Compiling tempfile v3.14.0 > │ Compiling rusty-fork v0.3.0 > │ Compiling proptest v1.5.0 > │ Compiling spiral_temp_test v0.0.1 > (/home/runner/work/polyglot/polyglot/apps/spiral/temp/test) > │ Finished `release` profile [optimized] > target(s) in 15.28s > │ Running unittests main.rs > (/home/runner/work/polyglot/polyglot/workspace/target/release/deps/spiral_temp_t > est-be45c853cf37e114) > │ > │ running 3 tests > │ test test_parse_number ... ok > │ test prop_parse_format_idempotent ... ok > │ test > adding_and_then_removing_an_item_from_the_cart_leaves_the_cart_unchanged ... ok > │ > │ successes: > │ > │ ---- prop_parse_format_idempotent stdout ---- > │ input=Integer(-1972463774821727395) > │ input=Operator("(") > │ input=StringLiteral(")cys?Y%K>!'W_=S<E!D .Cw!") > │ input=Integer(4043063982685069544) > │ input=StringLiteral("") > │ input=Identifier("v8JZomOvYA9L") > │ input=Identifier("flQWS3T19D4gDej9HZYQLHglU") > │ input=StringLiteral("~L[q&=!Ry(E'z%") > │ input=Operator("*") > │ input=Integer(7350456065520614105) > │ input=StringLiteral("**.p") > │ input=Integer(4155338374821091612) > │ input=Operator("=") > │ input=StringLiteral("c&%kZ`?=b_q6V|?&sxZr&C") > │ input=Integer(3006500736605474129) > │ input=Operator(")") > │ input=Identifier("q1Rv19R48z3L1GE") > │ input=Identifier("gLpbyL13QqMb3yh7EGqetmidFDZSO") > │ input=Identifier("V4QGLZpZV9mGv7IV6AEzCy4FLBJ9Kk6w") > │ input=Integer(8949584778029530783) > │ input=StringLiteral(";^`N:vT?`$&n.5{='gx`") > │ input=Operator("*") > │ input=Comment("d:\"]o.(") > │ input=Comment("85x`W&[s'5Qa'<4/e") > │ input=StringLiteral("F&am{{K=*%Tp3(~IB:lML:/UJ-M") > │ input=Identifier("nPL4RGKhZEV9Ihq70X") > │ input=StringLiteral("$.g/<D?^>'2{d[)NkYXi*9$/9v1`3e") > │ input=Integer(513477855344942808) > │ input=Comment("x><L\\?$HUiCh<V.(\"@%&k>\"") > │ input=StringLiteral("k15y<?Sq*Y!;9>u") > │ input=StringLiteral("16>zg2{)AdXA;x6Sae.Y*[lqZ?o'q") > │ input=Operator("=") > │ input=Comment("O3D{sWuw&jJ._") > │ input=Integer(-4924559377274983518) > │ input=Integer(-1159543980304031360) > │ input=Operator("+") > │ input=Comment("&O^`.{|-fOe@j.V4-~k$S$X%q'") > │ input=StringLiteral("::OQx2f.%M3,~>^./|") > │ input=Comment(">/'v,Hs'Q:OC-.OMDt{*u`O[g<G?\\7") > │ input=Integer(-6248396176639853868) > │ input=StringLiteral("5:oQ#nK~.)>9W/5*<a/#(") > │ input=StringLiteral("<") > │ input=Operator("=") > │ input=StringLiteral("{B@G") > │ input=Identifier("J3nl9CbwVJAO2LX1RO93YpC0zggGbl") > │ input=StringLiteral(":jst8]Wk-&qc*;W") > │ input=Identifier("KGvHk8w") > │ input=Operator("/") > │ input=StringLiteral("%K6O&am+G]:G?`") > │ input=Identifier("lrN8sly45z062M5h5JRDa7") > │ input=StringLiteral(":{") > │ input=Identifier("ObCis") > │ input=Operator("/") > │ input=Identifier("VNPKdPaboKBkN3L5aGtPBn6k6f1sj") > │ input=Integer(2334738767703132352) > │ input=Integer(-3750149586504217948) > │ input=StringLiteral("l#v(;") > │ input=Operator("*") > │ input=Operator(")") > │ input=Integer(989683601795740879) > │ input=StringLiteral("<-Wx=zV{h[RUY:=6{X&*<8{") > │ input=StringLiteral("$0'lWY4sT2Lr3:xgy{u8'mG!Z") > │ input=Integer(1156660779832525058) > │ input=Integer(-6527729600878701681) > │ input=Identifier("S9NQ3UNWiFXd3qAu") > │ input=Identifier("xy3ogSiO4") > │ input=Comment("3}") > │ input=Identifier("a8Y933vE4bd9dqED7H3G") > │ input=Identifier("tTYYCWbVG6") > │ input=Comment("a6c[%<$C=/&?bk'gsr7Na0N{ACY#+") > │ input=Integer(-7775509357863794735) > │ input=StringLiteral("8$'#Fq|/M.bz&34<") > │ input=Identifier("y9E6QrrZ") > │ input=Identifier("jRYMYiZ68fL2vTywd7yKfIZ60ur2") > │ input=Integer(290623164736633668) > │ input=StringLiteral("N>}-^ik") > │ input=StringLiteral("=.z(?3h={/$s?~4") > │ input=Identifier("bAuepceI") > │ input=StringLiteral("4-") > │ input=StringLiteral("p{&{") > │ input=Operator("(") > │ input=Integer(-8324300195135210597) > │ input=Identifier("qpls5QYn3") > │ input=Comment("\"w'b") > │ input=Comment("w)RJN&G*E0%Tn") > │ input=Integer(-6988371647869676115) > │ input=StringLiteral("8RZ?Vt=xGH-%}|") > │ input=Operator("(") > │ input=Comment("") > │ input=StringLiteral("?2m=/>") > │ input=Comment("D^(s[G\\T;TM%`sJzT{\\A41?+") > │ input=Operator(")") > │ input=Integer(5551757420801652884) > │ input=StringLiteral("'=2w&0#v!L") > │ input=StringLiteral("Z>-.~&]p$=A.''b%-Tf}%") > │ input=Identifier("g1ZrVQ8pLM7mIEAnWp0dQUp0F") > │ input=Integer(8299767960462983213) > │ input=StringLiteral("_pN(]= +==:8'3)EzN|.:QB/kn'*") > │ input=Operator("*") > │ input=Identifier("X0xrIoIm") > │ input=Integer(-5028786170388332161) > │ input=StringLiteral("-)/V5{HUQw}&l'9]<?FN3E$<%.y:<(") > │ input=Integer(-2734168504813036053) > │ input=Comment("\\-303/&8FX b]\"_*\\") > │ input=StringLiteral("q`jB<Y:8") > │ input=Integer(-8034044248528718325) > │ input=StringLiteral("Mv") > │ input=StringLiteral(".aJ!(iV") > │ input=Operator("/") > │ input=StringLiteral("t?jP('<<wK_.c:`l~Jj E<Un*th/KO") > │ input=Comment("a$K%2*>;Xn\\)0\"h'i{{}*29:") > │ input=Identifier("i9ouVa6D3gQvY1TASRuuUevev6c3eej9") > │ input=Integer(1058815959425794060) > │ input=Identifier("iqiUHzOmh825Gm") > │ input=Comment("<~TB*s>l&{") > │ input=Integer(4918244746631162265) > │ input=Comment("?gY*j<{FUk/v|xxu") > │ input=Operator("/") > │ input=Integer(5757587406098432856) > │ input=Integer(2499161110147957785) > │ input=StringLiteral(" Bt4FeT*`(FZ<~::'Cj") > │ input=Integer(-3060192467123388157) > │ input=Comment("l \"&2U5ze>;") > │ input=Integer(-78566931641297308) > │ input=Operator(")") > │ input=Comment("SE<p%`U") > │ input=Integer(679113558390222469) > │ input=Operator("(") > │ input=Operator("(") > │ input=Comment("_$lq?7.%sLy") > │ input=Operator("/") > │ input=Operator("/") > │ input=Identifier("hd3qHPLA") > │ input=Identifier("daV0TI76wUr3r2i7H") > │ input=StringLiteral(" W?%`DB?$j$5?f:::,~vCP`^c).y") > │ input=StringLiteral("R=R$?|M{x)C/+*i*6&N<<[3G$.aI*9=g") > │ input=Comment(":D{/V.7<0r$:g1<C8cP\\(;y+[\\#QG{<u") > │ input=Operator(")") > │ input=StringLiteral("*i)#O6X_`t9]@c*H<`Yim5Dd.Tbud") > │ input=Integer(-3432646738696083761) > │ input=StringLiteral("U3|kYsmC@8_Yr):~@Lgxsbh.RSG") > │ input=Identifier("Bj10q4IvG5") > │ input=Operator("=") > │ input=Integer(-5630033425118821339) > │ input=Integer(233076618950281174) > │ input=StringLiteral("+,%-PR$%o`&K*m{5YN") > │ input=Identifier("KE28PK7984k4Svh28ic9WBQE") > │ input=Identifier("XB2HuMN61NxBZ6Ai7mn2K") > │ input=StringLiteral("2s.x,") > │ input=Integer(1379919889235175274) > │ input=Integer(-9118904988273115882) > │ input=Comment("F`b*NRJv[@8J/AGU") > │ input=Integer(-3275613456017711125) > │ input=Identifier("pYRO522q2mK27SvLHa") > │ input=Integer(1727672328525155017) > │ input=Identifier("aRZWvZ17VTsx5jh") > │ input=Integer(-3922245139274543790) > │ input=Identifier("av4rvg7K8pkOYXaccZ1GwTFZJptmt6") > │ input=Operator("*") > │ input=StringLiteral("$wKUkD/.%5g?$*?gw~L7'0nRC") > │ input=StringLiteral(":I^D:='^x@&j%'{BfNKhe") > │ input=Identifier("lS6S6jib8BTXq4") > │ input=Comment("&") > │ input=StringLiteral("'S=,Y`bLx<_=_,=h") > │ input=Identifier("F6kCcb4tEiR9s3Fu88ZGHH") > │ input=Identifier("cI01xbX01") > │ input=Comment("{VWh$9_") > │ input=Comment("`uXH.{*Ar8+DTN:GEf);<F") > │ input=StringLiteral("cr~?%e/<'Eq$;f") > │ input=StringLiteral("{<kI{B&=sx%$ePg$`xH(9&/o*C4{s*") > │ input=StringLiteral("$U?'&r[K5c?xR=o&= 4OO*;") > │ input=Integer(-2671786489133120822) > │ input=Identifier("lGl53NCE6ly7XQuD4WK") > │ input=Operator("/") > │ input=StringLiteral("%]zl%") > │ input=Operator("=") > │ input=Integer(-7724873312768285679) > │ input=Identifier("k62") > │ input=Integer(-1588672770331779024) > │ input=Operator("-") > │ input=Comment("*MD\"yp*#\\@fh\\+f_M8") > │ input=Identifier("Jf7Ge7") > │ input=Operator("-") > │ input=Operator("-") > │ input=Operator("-") > │ input=StringLiteral("^}h") > │ input=Identifier("rj7ZxGu8bHc") > │ input=Identifier("I18y533GJ3z1KI9gg92OPX7fc") > │ input=Comment("{:f[UE)<&qp/-$") > │ input=StringLiteral("b<Jx1%<I_;") > │ input=Comment("`G\\uFw+=%P4*IZ`)!a<{\\&r<d6^EY.hl") > │ input=Operator("=") > │ input=Operator("/") > │ input=Comment("z:0_8C4n\\a\\{.Z*(*FMho") > │ input=Integer(-2750063949168710633) > │ input=Integer(3034355175292419004) > │ input=Comment("x/,-<! 5h#pp-)>e'X") > │ input=Identifier("LbQTe7") > │ input=Integer(720928152136414720) > │ input=StringLiteral("C-*t=IG HE'g!p&*%S??/EYh<JU") > │ input=Operator("-") > │ input=StringLiteral("`eAv}?',-g(R&") > │ input=Integer(-7039161791314532663) > │ input=Comment("0C?&.(s?$qr[-oq") > │ input=Identifier("EzA9xO11TehgifkU4ZG30FhNL") > │ input=Operator("*") > │ input=Identifier("IpzEV") > │ input=Identifier("ANrdWqRDCg3TkkFLQ6MLz0S0") > │ input=Integer(8883757912030519195) > │ input=Identifier("SW3Jzky4ROsgI9n5") > │ input=Identifier("MQ8M") > │ input=Integer(5292195887080356868) > │ input=Integer(-5246526831305916146) > │ input=Identifier("ujWvx5WBek2A4h8nWGkwu4Rv") > │ input=Comment("ev+%5:4&%.e/==:<") > │ input=StringLiteral("G)u=x.$;!/`sZ:%IgH4;") > │ input=Operator("/") > │ input=Comment("$<_(") > │ input=Operator("=") > │ input=Comment("=T$1p4E2HS.5vQ:K$L8%).:6cA`.*") > │ input=Operator("=") > │ input=Integer(-1922330270243941016) > │ input=StringLiteral("aBr") > │ input=Integer(-3328217971960057027) > │ input=Integer(-8758519691645812975) > │ input=StringLiteral("Bfwl/:$D5|Jwu[") > │ input=Integer(-2531372241655726711) > │ input=Identifier("KG8jBUsJ4gtjbP") > │ input=Identifier("aIJzXbk") > │ input=Operator("*") > │ input=Operator(")") > │ input=Integer(4129895811108521911) > │ input=Operator("*") > │ input=Operator("=") > │ input=Comment("&7,%(%&%G~/n0I2]svvwH`K!CI+7") > │ input=StringLiteral("` '") > │ input=Operator("/") > │ input=Comment("8B\"G|uw$FU!-JYsi=<z:'H9r") > │ input=Operator("=") > │ input=Operator("=") > │ input=Operator("=") > │ input=Identifier("y9qQ91MJi87f2iC8Kk") > │ input=Integer(-8654896414805801181) > │ input=StringLiteral("/A2:&f0`?R`{") > │ input=Operator("(") > │ input=Integer(371556088405434434) > │ input=Integer(-8794707397855171363) > │ input=StringLiteral("U") > │ input=Operator("(") > │ input=Operator("(") > │ input=Integer(7601108597954119828) > │ input=Comment("t<%.Bi:F\"ex' \"%%") > │ input=Operator("*") > │ input=Comment(")\"&`JCM(X<<$O5&") > │ input=Comment("*09c`oH{O<>`Axs0U$`9(J2-8KUk.4") > │ input=Integer(-1946398728305740403) > │ > │ > │ successes: > │ > adding_and_then_removing_an_item_from_the_cart_leaves_the_cart_unchanged > │ prop_parse_format_idempotent > │ test_parse_number > │ > │ test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 > filtered out; finished in 0.07s > │ > │ > > ── markdown ──────────────────────────────────────────────────────────────────── > │ ### execute the binary in release mode > > ── pwsh ──────────────────────────────────────────────────────────────────────── > { . $ScriptDir/../../../../workspace/target/release/spiral_temp_test$(_exe) } | > Invoke-Block > > ── [ 7.26ms - stdout ] ───────────────────────────────────────────────────────── > │ app=test > │ 00:00:50 v #3 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 100559 } 00:00:50 d #4 runtime.execute_with_options / { file_name = jupyter; arguments = ["nbconvert", "/home/runner/work/polyglot/polyglot/apps/spiral/temp/test/build.dib.ipynb", "--to", "html", "--HTMLExporter.theme=dark"]; options = { command = jupyter nbconvert "/home/runner/work/polyglot/polyglot/apps/spiral/temp/test/build.dib.ipynb" --to html --HTMLExporter.theme=dark; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:51 v #5 ! [NbConvertApp] Converting notebook /home/runner/work/polyglot/polyglot/apps/spiral/temp/test/build.dib.ipynb to html 00:00:51 v #6 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbformat/__init__.py:96: MissingIDFieldWarning: Cell is missing an id field, this will become a hard error in future nbformat versions. You may want to use `normalize()` on your notebooks before validations (available since nbformat 5.1.4). Previous versions of nbformat are fixing this issue transparently, and will stop doing so in the future. 00:00:51 v #7 ! validate(nb) 00:00:51 v #8 ! /opt/hostedtoolcache/Python/3.12.9/x64/lib/python3.12/site-packages/nbconvert/filters/highlight.py:71: UserWarning: IPython3 lexer unavailable, falling back on Python 3 00:00:51 v #9 ! return _pygments_highlight( 00:00:52 v #10 ! [NbConvertApp] Writing 378425 bytes to /home/runner/work/polyglot/polyglot/apps/spiral/temp/test/build.dib.html 00:00:52 v #11 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 916 } 00:00:52 d #12 spiral.run / dib / jupyter nbconvert / { exit_code = 0; jupyter_result_length = 916 } 00:00:52 d #13 runtime.execute_with_options / { file_name = pwsh; arguments = ["-c", "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/spiral/temp/test/build.dib.html'; (Get-Content $path -Raw) -replace '(id=\\\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"]; options = { command = pwsh -c "$counter = 1; $path = '/home/runner/work/polyglot/polyglot/apps/spiral/temp/test/build.dib.html'; (Get-Content $path -Raw) -replace '(id=\"cell-id=)[a-fA-F0-9]{8}', { $_.Groups[1].Value + $counter++ } | Set-Content $path"; cancellation_token = None; environment_variables = Array(MutCell([])); on_line = None; stdin = None; trace = true; working_directory = None } } 00:00:52 v #14 runtime.execute_with_options / result / { exit_code = 0; std_trace_length = 0 } 00:00:52 d #15 spiral.run / dib / html cell ids / { exit_code = 0; pwsh_replace_html_result_length = 0 } 00:00:52 d #16 spiral.run / dib / { exit_code = 0; result_length = 101534 } Get:1 file:/etc/apt/apt-mirrors.txt Mirrorlist [142 B] Hit:2 http://azure.archive.ubuntu.com/ubuntu noble InRelease Get:3 http://azure.archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB] Hit:6 https://packages.microsoft.com/repos/azure-cli noble InRelease Hit:4 http://azure.archive.ubuntu.com/ubuntu noble-backports InRelease Get:5 http://azure.archive.ubuntu.com/ubuntu noble-security InRelease [126 kB] Get:7 https://packages.microsoft.com/ubuntu/24.04/prod noble InRelease [3600 B] Get:8 http://azure.archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages [991 kB] Get:9 http://azure.archive.ubuntu.com/ubuntu noble-updates/universe amd64 Packages [1052 kB] Get:10 https://packages.microsoft.com/ubuntu/24.04/prod noble/main amd64 Packages [27.1 kB] Get:11 https://packages.microsoft.com/ubuntu/24.04/prod noble/main arm64 Packages [17.0 kB] Fetched 2343 kB in 0s (5179 kB/s) Reading package lists... Get:1 file:/etc/apt/apt-mirrors.txt Mirrorlist [142 B] Hit:2 http://azure.archive.ubuntu.com/ubuntu noble InRelease Hit:6 https://packages.microsoft.com/repos/azure-cli noble InRelease Hit:7 https://packages.microsoft.com/ubuntu/24.04/prod noble InRelease Hit:3 http://azure.archive.ubuntu.com/ubuntu noble-updates InRelease Hit:4 http://azure.archive.ubuntu.com/ubuntu noble-backports InRelease Hit:5 http://azure.archive.ubuntu.com/ubuntu noble-security InRelease Ign:8 https://ppa.launchpadcontent.net/thomas-schiex/blender/ubuntu noble InRelease Err:9 https://ppa.launchpadcontent.net/thomas-schiex/blender/ubuntu noble Release 404 Not Found [IP: 185.125.190.80 443] Reading package lists... E: The repository 'https://ppa.launchpadcontent.net/thomas-schiex/blender/ubuntu noble Release' does not have a Release file. Repository: 'Types: deb URIs: https://ppa.launchpadcontent.net/thomas-schiex/blender/ubuntu/ Suites: noble Components: main ' Description: After several months, looking for someone to take the lead on Blender PPA's packaging, I'm happy to say I have found an excellent PPA replacement for you! Please use: https://launchpad.net/~savoury1/+archive/ubuntu/blender Rob Savoury is doing an excellent job. If you are using Focal or a newer version of Ubuntu it's time for you to type: sudo apt install ppa-purge sudo ppa-purge ppa:thomas-schiex/blender sudo add-apt-repository ppa:savoury1/blender sudo apt update sudo apt install blender If you are using a pre-Focal system, please read Rob's page at https://launchpad.net/~savoury1/+archive/ubuntu/blender carefully as extra PPAs need to be activated in these cases. Rob also provides a bleeding-edge version of Blender, so if you like blood, you can add one extra line: sudo apt install blender-git This is now the end of my PPA. This was a revival of Irie Shinsuke's PPA: Blender 2.9x was compiled with all bells and whistles (OpenImageDenoise, OptiX, Embree, OpenShadingLanguage, OpenCollada, Open+NanoVDB, OpenSubDiv, jemalloc & CUDA/OptiX 10.2/11.1 precompiled kernels that support NVIDIA GPUs from GT7xx, aka Kepler, to RTX30xx or Ampère). It was adapted to Ubuntu (python, ffmpeg, ilmbase, openEXR, eigen3, glew, lzo,... packages are used directly). Throught it, blender has been downloaded more than 260,000 times (see https://tinyurl.com/ppa-blender). If you find or found this PPA useful, you can still offer me a coffee or a beer at http://goo.gl/jz21zY but you'd better offer one to Rob instead! Yes, in the more than 4 years of existence, 80 persons/companies did it: US$(5+10+5+5+5+5+10+5+10+10+5+10+10+10+4.5+4.43+4.53+5+2+10+10+5+10+5+15+5+5+50)+€(50.79+3.64+13.37+10+5+4.48+5+3+20+15+15+5+100+10+3.20+5+5+2.5+10+5+5+5+10+5.55+10+5+5+5+4.8+5+11.27+5+3+10+3+3+1+10+1+5+50+5+5+10+2+10+10+2.90+5+29.01+5+8+11.91+5). I enjoyed the drinks! (updated March 20, 2021). Time lacking, I have decided to stop providing a bleeding "blender-edge" version. It required a lot of work because of the weekly updates and it was downloaded only by few people (6,500 downloads vs. 260,000 for "blender"). Sorry geeks! For CUDA to work, add the blender user(s) to the 'video' group through: sudo adduser <user> video It may also be useful to install the nvidia-modprobe package (which is not a dependency because it depends on your hardware). If you have issues with numpy, I advise installing a suitable version with pip. If you want to maintain this Blender PPA, please contact me, I will be happy to pass the blender stick to the next runner... More info: https://launchpad.net/~thomas-schiex/+archive/ubuntu/blender Adding repository. WARNING: apt does not have a stable CLI interface. Use with caution in scripts. Reading package lists... Building dependency tree... Reading state information... The following additional packages will be installed: blender-data gdal-data gdal-plugins gstreamer1.0-plugins-base i965-va-driver intel-media-va-driver libaacs0 libaec0 libarmadillo12 libarpack2t64 libass9 libasyncns0 libavc1394-0 libavcodec60 libavdevice60 libavfilter9 libavformat60 libavutil58 libbdplus0 libblas3 libblosc1 libbluray2 libboost-iostreams1.83.0 libboost-locale1.83.0 libboost-thread1.83.0 libbs2b0 libcaca0 libcdio-cdda2t64 libcdio-paranoia2t64 libcdio19t64 libcdparanoia0 libcfitsio10t64 libcharls2 libchromaprint1 libcjson1 libcodec2-1.2 libdav1d7 libdc1394-25 libdcmtk17t64 libdecor-0-0 libdecor-0-plugin-1-gtk libembree4-4 libexif12 libfftw3-single3 libflac12t64 libflite1 libfreexl1 libfyba0t64 libgdal34t64 libgdcm3.0t64 libgeos-c1t64 libgeos3.12.1t64 libgeotiff5 libgif7 libgme0 libgphoto2-6t64 libgphoto2-l10n libgphoto2-port12t64 libgsm1 libgstreamer-plugins-base1.0-0 libhdf4-0-alt libhdf5-103-1t64 libhdf5-hl-100t64 libhwloc-plugins libhwloc15 libhwy1t64 libiec61883-0 libigdgmm12 libimath-3-1-29t64 libjack-jackd2-0 libjemalloc2 libjxl0.7 libkmlbase1t64 libkmldom1t64 libkmlengine1t64 liblapack3 liblilv-0-0 liblog4cplus-2.0.5t64 libmbedcrypto7t64 libminizip1t64 libmp3lame0 libmpg123-0t64 libmysofa1 libnetcdf19t64 libodbcinst2 libogdi4.1 libopenal-data libopenal1 libopencolorio2.1t64 libopencv-core406t64 libopencv-imgcodecs406t64 libopencv-imgproc406t64 libopencv-videoio406t64 libopenexr-3-1-30 libopenimageio2.4t64 libopenmpt0t64 libopenvdb10.0t64 libopus0 liborc-0.4-0t64 libosdcpu3.5.0t64 libosdgpu3.5.0t64 libplacebo338 libpocketsphinx3 libpoppler134 libpostproc57 libpotrace0 libproj25 libpugixml1v5 libpulse0 libpystring0 libqhull-r8.0 librav1e0 libraw1394-11 librist4 librsvg2-2 librsvg2-common librttopo1 librubberband2 libsamplerate0 libsdl2-2.0-0 libserd-0-0 libshine3 libsndfile1 libsndio7.0 libsocket++1 libsord-0-0 libsoxr0 libspatialite8t64 libspeex1 libsphinxbase3t64 libspnav0 libsratom-0-0 libsrt1.5-gnutls libssh-gcrypt-4 libsuperlu6 libsvtav1enc1d1 libswresample4 libswscale7 libsz2 libtbb12 libtbbbind-2-5 libtbbmalloc2 libtheora0 libtwolame0 libudfread0 libunibreak5 liburiparser1 libva-drm2 libva-x11-2 libva2 libvdpau1 libvidstab1.1 libvisual-0.4-0 libvorbisenc2 libvpl2 libvpx9 libx264-164 libx265-199 libxcb-shape0 libxerces-c3.2t64 libxnvctrl0 libxv1 libxvidcore4 libyaml-cpp0.8 libzimg2 libzix-0-0 libzvbi-common libzvbi0t64 mesa-va-drivers mesa-vdpau-drivers ocl-icd-libopencl1 pocketsphinx-en-us poppler-data proj-bin proj-data unixodbc-common va-driver-all vdpau-driver-all Suggested packages: gvfs i965-va-driver-shaders libcuda1 libnvcuvid1 libnvidia-encode1 libbluray-bdj libfftw3-bin libfftw3-dev geotiff-bin gdal-bin libgeotiff-epsg gphoto2 libvisual-0.4-plugins libhdf4-doc libhdf4-alt-dev hdf4-tools libhwloc-contrib-plugins jackd2 ogdi-bin libportaudio2 opus-tools pulseaudio libraw1394-doc librsvg2-bin serdi sndiod sordi speex spacenavd opencl-icd poppler-utils ghostscript fonts-japanese-mincho | fonts-ipafont-mincho fonts-japanese-gothic | fonts-ipafont-gothic fonts-arphic-ukai fonts-arphic-uming fonts-nanum libvdpau-va-gl1 The following NEW packages will be installed: blender blender-data gdal-data gdal-plugins gstreamer1.0-plugins-base i965-va-driver intel-media-va-driver libaacs0 libaec0 libarmadillo12 libarpack2t64 libass9 libasyncns0 libavc1394-0 libavcodec60 libavdevice60 libavfilter9 libavformat60 libavutil58 libbdplus0 libblas3 libblosc1 libbluray2 libboost-iostreams1.83.0 libboost-locale1.83.0 libboost-thread1.83.0 libbs2b0 libcaca0 libcdio-cdda2t64 libcdio-paranoia2t64 libcdio19t64 libcdparanoia0 libcfitsio10t64 libcharls2 libchromaprint1 libcjson1 libcodec2-1.2 libdav1d7 libdc1394-25 libdcmtk17t64 libdecor-0-0 libdecor-0-plugin-1-gtk libembree4-4 libexif12 libfftw3-single3 libflac12t64 libflite1 libfreexl1 libfyba0t64 libgdal34t64 libgdcm3.0t64 libgeos-c1t64 libgeos3.12.1t64 libgeotiff5 libgif7 libgme0 libgphoto2-6t64 libgphoto2-l10n libgphoto2-port12t64 libgsm1 libgstreamer-plugins-base1.0-0 libhdf4-0-alt libhdf5-103-1t64 libhdf5-hl-100t64 libhwloc-plugins libhwloc15 libhwy1t64 libiec61883-0 libigdgmm12 libimath-3-1-29t64 libjack-jackd2-0 libjemalloc2 libjxl0.7 libkmlbase1t64 libkmldom1t64 libkmlengine1t64 liblapack3 liblilv-0-0 liblog4cplus-2.0.5t64 libmbedcrypto7t64 libminizip1t64 libmp3lame0 libmpg123-0t64 libmysofa1 libnetcdf19t64 libodbcinst2 libogdi4.1 libopenal-data libopenal1 libopencolorio2.1t64 libopencv-core406t64 libopencv-imgcodecs406t64 libopencv-imgproc406t64 libopencv-videoio406t64 libopenexr-3-1-30 libopenimageio2.4t64 libopenmpt0t64 libopenvdb10.0t64 libopus0 liborc-0.4-0t64 libosdcpu3.5.0t64 libosdgpu3.5.0t64 libplacebo338 libpocketsphinx3 libpoppler134 libpostproc57 libpotrace0 libproj25 libpugixml1v5 libpulse0 libpystring0 libqhull-r8.0 librav1e0 libraw1394-11 librist4 librsvg2-2 librsvg2-common librttopo1 librubberband2 libsamplerate0 libsdl2-2.0-0 libserd-0-0 libshine3 libsndfile1 libsndio7.0 libsocket++1 libsord-0-0 libsoxr0 libspatialite8t64 libspeex1 libsphinxbase3t64 libspnav0 libsratom-0-0 libsrt1.5-gnutls libssh-gcrypt-4 libsuperlu6 libsvtav1enc1d1 libswresample4 libswscale7 libsz2 libtbb12 libtbbbind-2-5 libtbbmalloc2 libtheora0 libtwolame0 libudfread0 libunibreak5 liburiparser1 libva-drm2 libva-x11-2 libva2 libvdpau1 libvidstab1.1 libvisual-0.4-0 libvorbisenc2 libvpl2 libvpx9 libx264-164 libx265-199 libxcb-shape0 libxerces-c3.2t64 libxnvctrl0 libxv1 libxvidcore4 libyaml-cpp0.8 libzimg2 libzix-0-0 libzvbi-common libzvbi0t64 mesa-va-drivers mesa-vdpau-drivers ocl-icd-libopencl1 pocketsphinx-en-us poppler-data proj-bin proj-data unixodbc-common va-driver-all vdpau-driver-all 0 upgraded, 179 newly installed, 0 to remove and 93 not upgraded. Need to get 220 MB of archives. After this operation, 677 MB of additional disk space will be used. Get:1 file:/etc/apt/apt-mirrors.txt Mirrorlist [142 B] Get:2 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 poppler-data all 0.4.12-1 [2060 kB] Get:3 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 blender-data all 4.0.2+dfsg-1ubuntu8 [35.9 MB] Get:4 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libva2 amd64 2.20.0-2build1 [66.2 kB] Get:5 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libva-drm2 amd64 2.20.0-2build1 [7124 B] Get:6 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libva-x11-2 amd64 2.20.0-2build1 [12.0 kB] Get:7 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libvdpau1 amd64 1.5-2build1 [27.8 kB] Get:8 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libvpl2 amd64 2023.3.0-1build1 [99.8 kB] Get:9 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 ocl-icd-libopencl1 amd64 2.3.2-1build1 [38.5 kB] Get:10 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libavutil58 amd64 7:6.1.1-3ubuntu5 [401 kB] Get:11 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libcodec2-1.2 amd64 1.2.0-2build1 [8998 kB] Get:12 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libdav1d7 amd64 1.4.1-1build1 [604 kB] Get:13 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libgsm1 amd64 1.0.22-1build1 [27.8 kB] Get:14 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libhwy1t64 amd64 1.0.7-8.1build1 [584 kB] Get:15 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libjxl0.7 amd64 0.7.0-10.2ubuntu6 [999 kB] Get:16 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libmp3lame0 amd64 3.100-6build1 [142 kB] Get:17 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libopus0 amd64 1.4-1build1 [208 kB] Get:18 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 librav1e0 amd64 0.7.1-2 [1022 kB] Get:19 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 librsvg2-2 amd64 2.58.0+dfsg-1build1 [2135 kB] Get:20 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libshine3 amd64 3.1.1-2build1 [23.2 kB] Get:21 http://azure.archive.ubuntu.com/ubuntu noble-updates/main amd64 libspeex1 amd64 1.2.1-2ubuntu2.24.04.1 [59.6 kB] Get:22 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libsvtav1enc1d1 amd64 1.7.0+dfsg-2build1 [2425 kB] Get:23 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libsoxr0 amd64 0.1.3-4build3 [80.0 kB] Get:24 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libswresample4 amd64 7:6.1.1-3ubuntu5 [63.8 kB] Get:25 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libtheora0 amd64 1.1.1+dfsg.1-16.1build3 [211 kB] Get:26 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libtwolame0 amd64 0.4.0-2build3 [52.3 kB] Get:27 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libvorbisenc2 amd64 1.3.7-1build3 [80.8 kB] Get:28 http://azure.archive.ubuntu.com/ubuntu noble-updates/main amd64 libvpx9 amd64 1.14.0-1ubuntu2.1 [1143 kB] Get:29 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libx264-164 amd64 2:0.164.3108+git31e19f9-1 [604 kB] Get:30 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libx265-199 amd64 3.5-2build1 [1226 kB] Get:31 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libxvidcore4 amd64 2:1.3.7-1build1 [219 kB] Get:32 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libzvbi-common all 0.2.42-2 [42.4 kB] Get:33 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libzvbi0t64 amd64 0.2.42-2 [261 kB] Get:34 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libavcodec60 amd64 7:6.1.1-3ubuntu5 [5851 kB] Get:35 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libraw1394-11 amd64 2.1.2-2build3 [26.2 kB] Get:36 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libavc1394-0 amd64 0.5.4-5build3 [15.4 kB] Get:37 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libunibreak5 amd64 5.1-2build1 [25.0 kB] Get:38 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libass9 amd64 1:0.17.1-2build1 [104 kB] Get:39 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libudfread0 amd64 1.1.2-1build1 [19.0 kB] Get:40 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libbluray2 amd64 1:1.3.4-1build1 [159 kB] Get:41 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libchromaprint1 amd64 1.5.1-5 [30.5 kB] Get:42 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libgme0 amd64 0.6.3-7build1 [134 kB] Get:43 http://azure.archive.ubuntu.com/ubuntu noble-updates/main amd64 libmpg123-0t64 amd64 1.32.5-1ubuntu1.1 [169 kB] Get:44 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libopenmpt0t64 amd64 0.7.3-1.1build3 [647 kB] Get:45 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libcjson1 amd64 1.7.17-1 [24.8 kB] Get:46 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libmbedcrypto7t64 amd64 2.28.8-1 [209 kB] Get:47 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 librist4 amd64 0.2.10+dfsg-2 [74.9 kB] Get:48 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libsrt1.5-gnutls amd64 1.5.3-1build2 [316 kB] Get:49 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libssh-gcrypt-4 amd64 0.10.6-2build2 [223 kB] Get:50 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libavformat60 amd64 7:6.1.1-3ubuntu5 [1153 kB] Get:51 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libbs2b0 amd64 3.1.0+dfsg-7build1 [10.6 kB] Get:52 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libflite1 amd64 2.2-6build3 [13.6 MB] Get:53 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libserd-0-0 amd64 0.32.2-1 [43.6 kB] Get:54 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libzix-0-0 amd64 0.4.2-2build1 [23.6 kB] Get:55 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libsord-0-0 amd64 0.16.16-2build1 [15.8 kB] Get:56 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libsratom-0-0 amd64 0.6.16-1build1 [17.3 kB] Get:57 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 liblilv-0-0 amd64 0.24.22-1build1 [41.0 kB] Get:58 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libmysofa1 amd64 1.3.2+dfsg-2ubuntu2 [1158 kB] Get:59 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libplacebo338 amd64 6.338.2-2build1 [2654 kB] Get:60 http://azure.archive.ubuntu.com/ubuntu noble-updates/main amd64 libblas3 amd64 3.12.0-3build1.1 [238 kB] Get:61 http://azure.archive.ubuntu.com/ubuntu noble-updates/main amd64 liblapack3 amd64 3.12.0-3build1.1 [2646 kB] Get:62 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libasyncns0 amd64 0.8-6build4 [11.3 kB] Get:63 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libflac12t64 amd64 1.4.3+ds-2.1ubuntu2 [197 kB] Get:64 http://azure.archive.ubuntu.com/ubuntu noble-updates/main amd64 libsndfile1 amd64 1.2.2-1ubuntu5.24.04.1 [209 kB] Get:65 http://azure.archive.ubuntu.com/ubuntu noble-updates/main amd64 libpulse0 amd64 1:16.1+dfsg1-2ubuntu10.1 [292 kB] Get:66 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libsphinxbase3t64 amd64 0.8+5prealpha+1-17build2 [126 kB] Get:67 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libpocketsphinx3 amd64 0.8.0+real5prealpha+1-15ubuntu5 [133 kB] Get:68 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libpostproc57 amd64 7:6.1.1-3ubuntu5 [49.9 kB] Get:69 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libsamplerate0 amd64 0.2.2-4build1 [1344 kB] Get:70 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 librubberband2 amd64 3.3.0+dfsg-2build1 [130 kB] Get:71 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libswscale7 amd64 7:6.1.1-3ubuntu5 [193 kB] Get:72 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libvidstab1.1 amd64 1.1.0-2build1 [38.5 kB] Get:73 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libzimg2 amd64 3.0.5+ds1-1build1 [254 kB] Get:74 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libavfilter9 amd64 7:6.1.1-3ubuntu5 [4235 kB] Get:75 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libcaca0 amd64 0.99.beta20-4build2 [208 kB] Get:76 http://azure.archive.ubuntu.com/ubuntu noble-updates/main amd64 libcdio19t64 amd64 2.1.0-4.1ubuntu1.2 [62.4 kB] Get:77 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libcdio-cdda2t64 amd64 10.2+2.0.1-1.1build2 [16.5 kB] Get:78 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libcdio-paranoia2t64 amd64 10.2+2.0.1-1.1build2 [16.6 kB] Get:79 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libdc1394-25 amd64 2.2.6-4build1 [90.1 kB] Get:80 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libiec61883-0 amd64 1.2.0-6build1 [24.5 kB] Get:81 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libjack-jackd2-0 amd64 1.9.21~dfsg-3ubuntu3 [289 kB] Get:82 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libopenal-data all 1:1.23.1-4build1 [161 kB] Get:83 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libsndio7.0 amd64 1.9.0-0.3build3 [29.6 kB] Get:84 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libopenal1 amd64 1:1.23.1-4build1 [540 kB] Get:85 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libdecor-0-0 amd64 0.2.2-1build2 [16.5 kB] Get:86 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libsdl2-2.0-0 amd64 2.30.0+dfsg-1build3 [685 kB] Get:87 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libxcb-shape0 amd64 1.15-1ubuntu2 [6100 B] Get:88 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libxv1 amd64 2:1.0.11-1.1build1 [10.7 kB] Get:89 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libavdevice60 amd64 7:6.1.1-3ubuntu5 [82.3 kB] Get:90 http://azure.archive.ubuntu.com/ubuntu noble-updates/main amd64 libboost-thread1.83.0 amd64 1.83.0-2.1ubuntu3.1 [276 kB] Get:91 http://azure.archive.ubuntu.com/ubuntu noble-updates/main amd64 libboost-locale1.83.0 amd64 1.83.0-2.1ubuntu3.1 [413 kB] Get:92 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libtbbmalloc2 amd64 2021.11.0-2ubuntu2 [60.5 kB] Get:93 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libhwloc15 amd64 2.10.0-1build1 [172 kB] Get:94 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libtbbbind-2-5 amd64 2021.11.0-2ubuntu2 [16.4 kB] Get:95 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libtbb12 amd64 2021.11.0-2ubuntu2 [106 kB] Get:96 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libembree4-4 amd64 4.3.0+dfsg-2 [9265 kB] Get:97 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libfftw3-single3 amd64 3.3.10-1ubuntu3 [868 kB] Get:98 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libimath-3-1-29t64 amd64 3.1.9-3.1ubuntu2 [72.2 kB] Get:99 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libjemalloc2 amd64 5.3.0-2build1 [256 kB] Get:100 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libpystring0 amd64 1.1.4-1build1 [28.4 kB] Get:101 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libyaml-cpp0.8 amd64 0.8.0+dfsg-6build1 [115 kB] Get:102 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libopencolorio2.1t64 amd64 2.1.3+dfsg-1.1build3 [1470 kB] Get:103 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libopenexr-3-1-30 amd64 3.1.5-5.1build3 [1004 kB] Get:104 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libdcmtk17t64 amd64 3.6.7-9.1build4 [5329 kB] Get:105 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libgif7 amd64 5.2.2-1ubuntu1 [35.2 kB] Get:106 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libopencv-core406t64 amd64 4.6.0+dfsg-13.1ubuntu1 [1202 kB] Get:107 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libopencv-imgproc406t64 amd64 4.6.0+dfsg-13.1ubuntu1 [1460 kB] Get:108 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libexif12 amd64 0.6.24-1build2 [87.9 kB] Get:109 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libgphoto2-port12t64 amd64 2.5.31-2.1build2 [58.6 kB] Get:110 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libgphoto2-6t64 amd64 2.5.31-2.1build2 [735 kB] Get:111 http://azure.archive.ubuntu.com/ubuntu noble-updates/main amd64 liborc-0.4-0t64 amd64 1:0.4.38-1ubuntu0.1 [207 kB] Get:112 http://azure.archive.ubuntu.com/ubuntu noble-updates/main amd64 libgstreamer-plugins-base1.0-0 amd64 1.24.2-1ubuntu0.2 [862 kB] Get:113 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 gdal-data all 3.8.4+dfsg-3ubuntu3 [261 kB] Get:114 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 gdal-plugins amd64 3.8.4+dfsg-3ubuntu3 [24.8 kB] Get:115 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libaec0 amd64 1.1.2-1build1 [22.9 kB] Get:116 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libarpack2t64 amd64 3.9.1-1.1build2 [106 kB] Get:117 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libsuperlu6 amd64 6.0.1+dfsg1-1build1 [180 kB] Get:118 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libarmadillo12 amd64 1:12.6.7+dfsg-1build2 [106 kB] Get:119 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libblosc1 amd64 1.21.5+ds-1build1 [36.2 kB] Get:120 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libcfitsio10t64 amd64 4.3.1-1.1build2 [528 kB] Get:121 http://azure.archive.ubuntu.com/ubuntu noble-updates/universe amd64 libminizip1t64 amd64 1:1.3.dfsg-3.1ubuntu2.1 [22.2 kB] Get:122 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libfreexl1 amd64 2.0.0-1build2 [41.7 kB] Get:123 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libfyba0t64 amd64 4.1.1-11build1 [119 kB] Get:124 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libgeos3.12.1t64 amd64 3.12.1-3build1 [849 kB] Get:125 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libgeos-c1t64 amd64 3.12.1-3build1 [94.5 kB] Get:126 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 proj-data all 9.4.0-1build2 [7885 kB] Get:127 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libproj25 amd64 9.4.0-1build2 [1396 kB] Get:128 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libgeotiff5 amd64 1.7.1-5build1 [62.9 kB] Get:129 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libhdf4-0-alt amd64 4.2.16-4build1 [282 kB] Get:130 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libsz2 amd64 1.1.2-1build1 [5476 B] Get:131 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libhdf5-103-1t64 amd64 1.10.10+repack-3.1ubuntu4 [1270 kB] Get:132 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 liburiparser1 amd64 0.9.7+dfsg-2build1 [35.8 kB] Get:133 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libkmlbase1t64 amd64 1.3.0-12build1 [49.9 kB] Get:134 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libkmldom1t64 amd64 1.3.0-12build1 [156 kB] Get:135 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libkmlengine1t64 amd64 1.3.0-12build1 [71.4 kB] Get:136 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libhdf5-hl-100t64 amd64 1.10.10+repack-3.1ubuntu4 [56.0 kB] Get:137 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libnetcdf19t64 amd64 1:4.9.2-5ubuntu4 [473 kB] Get:138 http://azure.archive.ubuntu.com/ubuntu noble-updates/main amd64 unixodbc-common all 2.3.12-1ubuntu0.24.04.1 [8806 B] Get:139 http://azure.archive.ubuntu.com/ubuntu noble-updates/main amd64 libodbcinst2 amd64 2.3.12-1ubuntu0.24.04.1 [30.7 kB] Get:140 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libogdi4.1 amd64 4.1.1+ds-3build1 [226 kB] Get:141 http://azure.archive.ubuntu.com/ubuntu noble-updates/main amd64 libpoppler134 amd64 24.02.0-1ubuntu9.3 [1117 kB] Get:142 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libqhull-r8.0 amd64 2020.2-6build1 [193 kB] Get:143 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 librttopo1 amd64 1.1.0-3build2 [191 kB] Get:144 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libspatialite8t64 amd64 5.1.0-3build1 [1919 kB] Get:145 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libxerces-c3.2t64 amd64 3.2.4+debian-1.2ubuntu2 [919 kB] Get:146 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libgdal34t64 amd64 3.8.4+dfsg-3ubuntu3 [8346 kB] Get:147 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libcharls2 amd64 2.4.2-2build2 [90.4 kB] Get:148 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libsocket++1 amd64 1.12.13+git20131030.5d039ba-1build1 [83.1 kB] Get:149 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libgdcm3.0t64 amd64 3.0.22-2.1ubuntu1 [2160 kB] Get:150 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libopencv-imgcodecs406t64 amd64 4.6.0+dfsg-13.1ubuntu1 [128 kB] Get:151 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libopencv-videoio406t64 amd64 4.6.0+dfsg-13.1ubuntu1 [199 kB] Get:152 http://azure.archive.ubuntu.com/ubuntu noble-updates/main amd64 libboost-iostreams1.83.0 amd64 1.83.0-2.1ubuntu3.1 [259 kB] Get:153 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 liblog4cplus-2.0.5t64 amd64 2.0.8-1.1ubuntu3 [188 kB] Get:154 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libopenvdb10.0t64 amd64 10.0.1-2.1build5 [4138 kB] Get:155 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libopenimageio2.4t64 amd64 2.4.17.0+dfsg-1.1build4 [2751 kB] Get:156 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libosdcpu3.5.0t64 amd64 3.5.0-2.1build1 [373 kB] Get:157 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libosdgpu3.5.0t64 amd64 3.5.0-2.1build1 [149 kB] Get:158 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libpotrace0 amd64 1.16-2build1 [17.7 kB] Get:159 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libpugixml1v5 amd64 1.14-0.1build1 [91.9 kB] Get:160 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libspnav0 amd64 1.1-2 [15.0 kB] Get:161 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 blender amd64 4.0.2+dfsg-1ubuntu8 [25.6 MB] Get:162 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libcdparanoia0 amd64 3.10.2+debian-14build3 [48.5 kB] Get:163 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libvisual-0.4-0 amd64 0.4.2-2build1 [115 kB] Get:164 http://azure.archive.ubuntu.com/ubuntu noble-updates/main amd64 gstreamer1.0-plugins-base amd64 1.24.2-1ubuntu0.2 [721 kB] Get:165 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libigdgmm12 amd64 22.3.17+ds1-1 [145 kB] Get:166 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 intel-media-va-driver amd64 24.1.0+dfsg1-1 [4022 kB] Get:167 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libaacs0 amd64 0.11.1-2build1 [62.9 kB] Get:168 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libbdplus0 amd64 0.2.0-3build1 [52.2 kB] Get:169 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libdecor-0-plugin-1-gtk amd64 0.2.2-1build2 [22.2 kB] Get:170 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libgphoto2-l10n all 2.5.31-2.1build2 [15.0 kB] Get:171 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 librsvg2-common amd64 2.58.0+dfsg-1build1 [11.8 kB] Get:172 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 libxnvctrl0 amd64 510.47.03-0ubuntu4 [12.6 kB] Get:173 http://azure.archive.ubuntu.com/ubuntu noble-updates/universe amd64 mesa-va-drivers amd64 24.2.8-1ubuntu1~24.04.1 [19.5 kB] Get:174 http://azure.archive.ubuntu.com/ubuntu noble-updates/main amd64 mesa-vdpau-drivers amd64 24.2.8-1ubuntu1~24.04.1 [19.7 kB] Get:175 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 i965-va-driver amd64 2.4.1+dfsg1-1build2 [332 kB] Get:176 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 va-driver-all amd64 2.20.0-2build1 [4844 B] Get:177 http://azure.archive.ubuntu.com/ubuntu noble/main amd64 vdpau-driver-all amd64 1.5-2build1 [4414 B] Get:178 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 libhwloc-plugins amd64 2.10.0-1build1 [15.7 kB] Get:179 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 pocketsphinx-en-us all 0.8.0+real5prealpha+1-15ubuntu5 [27.4 MB] Get:180 http://azure.archive.ubuntu.com/ubuntu noble/universe amd64 proj-bin amd64 9.4.0-1build2 [164 kB] Fetched 220 MB in 31s (7133 kB/s) Selecting previously unselected package poppler-data. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 221801 files and directories currently installed.) Preparing to unpack .../000-poppler-data_0.4.12-1_all.deb ... Unpacking poppler-data (0.4.12-1) ... Selecting previously unselected package blender-data. Preparing to unpack .../001-blender-data_4.0.2+dfsg-1ubuntu8_all.deb ... Unpacking blender-data (4.0.2+dfsg-1ubuntu8) ... Selecting previously unselected package libva2:amd64. Preparing to unpack .../002-libva2_2.20.0-2build1_amd64.deb ... Unpacking libva2:amd64 (2.20.0-2build1) ... Selecting previously unselected package libva-drm2:amd64. Preparing to unpack .../003-libva-drm2_2.20.0-2build1_amd64.deb ... Unpacking libva-drm2:amd64 (2.20.0-2build1) ... Selecting previously unselected package libva-x11-2:amd64. Preparing to unpack .../004-libva-x11-2_2.20.0-2build1_amd64.deb ... Unpacking libva-x11-2:amd64 (2.20.0-2build1) ... Selecting previously unselected package libvdpau1:amd64. Preparing to unpack .../005-libvdpau1_1.5-2build1_amd64.deb ... Unpacking libvdpau1:amd64 (1.5-2build1) ... Selecting previously unselected package libvpl2. Preparing to unpack .../006-libvpl2_2023.3.0-1build1_amd64.deb ... Unpacking libvpl2 (2023.3.0-1build1) ... Selecting previously unselected package ocl-icd-libopencl1:amd64. Preparing to unpack .../007-ocl-icd-libopencl1_2.3.2-1build1_amd64.deb ... Unpacking ocl-icd-libopencl1:amd64 (2.3.2-1build1) ... Selecting previously unselected package libavutil58:amd64. Preparing to unpack .../008-libavutil58_7%3a6.1.1-3ubuntu5_amd64.deb ... Unpacking libavutil58:amd64 (7:6.1.1-3ubuntu5) ... Selecting previously unselected package libcodec2-1.2:amd64. Preparing to unpack .../009-libcodec2-1.2_1.2.0-2build1_amd64.deb ... Unpacking libcodec2-1.2:amd64 (1.2.0-2build1) ... Selecting previously unselected package libdav1d7:amd64. Preparing to unpack .../010-libdav1d7_1.4.1-1build1_amd64.deb ... Unpacking libdav1d7:amd64 (1.4.1-1build1) ... Selecting previously unselected package libgsm1:amd64. Preparing to unpack .../011-libgsm1_1.0.22-1build1_amd64.deb ... Unpacking libgsm1:amd64 (1.0.22-1build1) ... Selecting previously unselected package libhwy1t64:amd64. Preparing to unpack .../012-libhwy1t64_1.0.7-8.1build1_amd64.deb ... Unpacking libhwy1t64:amd64 (1.0.7-8.1build1) ... Selecting previously unselected package libjxl0.7:amd64. Preparing to unpack .../013-libjxl0.7_0.7.0-10.2ubuntu6_amd64.deb ... Unpacking libjxl0.7:amd64 (0.7.0-10.2ubuntu6) ... Selecting previously unselected package libmp3lame0:amd64. Preparing to unpack .../014-libmp3lame0_3.100-6build1_amd64.deb ... Unpacking libmp3lame0:amd64 (3.100-6build1) ... Selecting previously unselected package libopus0:amd64. Preparing to unpack .../015-libopus0_1.4-1build1_amd64.deb ... Unpacking libopus0:amd64 (1.4-1build1) ... Selecting previously unselected package librav1e0:amd64. Preparing to unpack .../016-librav1e0_0.7.1-2_amd64.deb ... Unpacking librav1e0:amd64 (0.7.1-2) ... Selecting previously unselected package librsvg2-2:amd64. Preparing to unpack .../017-librsvg2-2_2.58.0+dfsg-1build1_amd64.deb ... Unpacking librsvg2-2:amd64 (2.58.0+dfsg-1build1) ... Selecting previously unselected package libshine3:amd64. Preparing to unpack .../018-libshine3_3.1.1-2build1_amd64.deb ... Unpacking libshine3:amd64 (3.1.1-2build1) ... Selecting previously unselected package libspeex1:amd64. Preparing to unpack .../019-libspeex1_1.2.1-2ubuntu2.24.04.1_amd64.deb ... Unpacking libspeex1:amd64 (1.2.1-2ubuntu2.24.04.1) ... Selecting previously unselected package libsvtav1enc1d1:amd64. Preparing to unpack .../020-libsvtav1enc1d1_1.7.0+dfsg-2build1_amd64.deb ... Unpacking libsvtav1enc1d1:amd64 (1.7.0+dfsg-2build1) ... Selecting previously unselected package libsoxr0:amd64. Preparing to unpack .../021-libsoxr0_0.1.3-4build3_amd64.deb ... Unpacking libsoxr0:amd64 (0.1.3-4build3) ... Selecting previously unselected package libswresample4:amd64. Preparing to unpack .../022-libswresample4_7%3a6.1.1-3ubuntu5_amd64.deb ... Unpacking libswresample4:amd64 (7:6.1.1-3ubuntu5) ... Selecting previously unselected package libtheora0:amd64. Preparing to unpack .../023-libtheora0_1.1.1+dfsg.1-16.1build3_amd64.deb ... Unpacking libtheora0:amd64 (1.1.1+dfsg.1-16.1build3) ... Selecting previously unselected package libtwolame0:amd64. Preparing to unpack .../024-libtwolame0_0.4.0-2build3_amd64.deb ... Unpacking libtwolame0:amd64 (0.4.0-2build3) ... Selecting previously unselected package libvorbisenc2:amd64. Preparing to unpack .../025-libvorbisenc2_1.3.7-1build3_amd64.deb ... Unpacking libvorbisenc2:amd64 (1.3.7-1build3) ... Selecting previously unselected package libvpx9:amd64. Preparing to unpack .../026-libvpx9_1.14.0-1ubuntu2.1_amd64.deb ... Unpacking libvpx9:amd64 (1.14.0-1ubuntu2.1) ... Selecting previously unselected package libx264-164:amd64. Preparing to unpack .../027-libx264-164_2%3a0.164.3108+git31e19f9-1_amd64.deb ... Unpacking libx264-164:amd64 (2:0.164.3108+git31e19f9-1) ... Selecting previously unselected package libx265-199:amd64. Preparing to unpack .../028-libx265-199_3.5-2build1_amd64.deb ... Unpacking libx265-199:amd64 (3.5-2build1) ... Selecting previously unselected package libxvidcore4:amd64. Preparing to unpack .../029-libxvidcore4_2%3a1.3.7-1build1_amd64.deb ... Unpacking libxvidcore4:amd64 (2:1.3.7-1build1) ... Selecting previously unselected package libzvbi-common. Preparing to unpack .../030-libzvbi-common_0.2.42-2_all.deb ... Unpacking libzvbi-common (0.2.42-2) ... Selecting previously unselected package libzvbi0t64:amd64. Preparing to unpack .../031-libzvbi0t64_0.2.42-2_amd64.deb ... Unpacking libzvbi0t64:amd64 (0.2.42-2) ... Selecting previously unselected package libavcodec60:amd64. Preparing to unpack .../032-libavcodec60_7%3a6.1.1-3ubuntu5_amd64.deb ... Unpacking libavcodec60:amd64 (7:6.1.1-3ubuntu5) ... Selecting previously unselected package libraw1394-11:amd64. Preparing to unpack .../033-libraw1394-11_2.1.2-2build3_amd64.deb ... Unpacking libraw1394-11:amd64 (2.1.2-2build3) ... Selecting previously unselected package libavc1394-0:amd64. Preparing to unpack .../034-libavc1394-0_0.5.4-5build3_amd64.deb ... Unpacking libavc1394-0:amd64 (0.5.4-5build3) ... Selecting previously unselected package libunibreak5:amd64. Preparing to unpack .../035-libunibreak5_5.1-2build1_amd64.deb ... Unpacking libunibreak5:amd64 (5.1-2build1) ... Selecting previously unselected package libass9:amd64. Preparing to unpack .../036-libass9_1%3a0.17.1-2build1_amd64.deb ... Unpacking libass9:amd64 (1:0.17.1-2build1) ... Selecting previously unselected package libudfread0:amd64. Preparing to unpack .../037-libudfread0_1.1.2-1build1_amd64.deb ... Unpacking libudfread0:amd64 (1.1.2-1build1) ... Selecting previously unselected package libbluray2:amd64. Preparing to unpack .../038-libbluray2_1%3a1.3.4-1build1_amd64.deb ... Unpacking libbluray2:amd64 (1:1.3.4-1build1) ... Selecting previously unselected package libchromaprint1:amd64. Preparing to unpack .../039-libchromaprint1_1.5.1-5_amd64.deb ... Unpacking libchromaprint1:amd64 (1.5.1-5) ... Selecting previously unselected package libgme0:amd64. Preparing to unpack .../040-libgme0_0.6.3-7build1_amd64.deb ... Unpacking libgme0:amd64 (0.6.3-7build1) ... Selecting previously unselected package libmpg123-0t64:amd64. Preparing to unpack .../041-libmpg123-0t64_1.32.5-1ubuntu1.1_amd64.deb ... Unpacking libmpg123-0t64:amd64 (1.32.5-1ubuntu1.1) ... Selecting previously unselected package libopenmpt0t64:amd64. Preparing to unpack .../042-libopenmpt0t64_0.7.3-1.1build3_amd64.deb ... Unpacking libopenmpt0t64:amd64 (0.7.3-1.1build3) ... Selecting previously unselected package libcjson1:amd64. Preparing to unpack .../043-libcjson1_1.7.17-1_amd64.deb ... Unpacking libcjson1:amd64 (1.7.17-1) ... Selecting previously unselected package libmbedcrypto7t64:amd64. Preparing to unpack .../044-libmbedcrypto7t64_2.28.8-1_amd64.deb ... Unpacking libmbedcrypto7t64:amd64 (2.28.8-1) ... Selecting previously unselected package librist4:amd64. Preparing to unpack .../045-librist4_0.2.10+dfsg-2_amd64.deb ... Unpacking librist4:amd64 (0.2.10+dfsg-2) ... Selecting previously unselected package libsrt1.5-gnutls:amd64. Preparing to unpack .../046-libsrt1.5-gnutls_1.5.3-1build2_amd64.deb ... Unpacking libsrt1.5-gnutls:amd64 (1.5.3-1build2) ... Selecting previously unselected package libssh-gcrypt-4:amd64. Preparing to unpack .../047-libssh-gcrypt-4_0.10.6-2build2_amd64.deb ... Unpacking libssh-gcrypt-4:amd64 (0.10.6-2build2) ... Selecting previously unselected package libavformat60:amd64. Preparing to unpack .../048-libavformat60_7%3a6.1.1-3ubuntu5_amd64.deb ... Unpacking libavformat60:amd64 (7:6.1.1-3ubuntu5) ... Selecting previously unselected package libbs2b0:amd64. Preparing to unpack .../049-libbs2b0_3.1.0+dfsg-7build1_amd64.deb ... Unpacking libbs2b0:amd64 (3.1.0+dfsg-7build1) ... Selecting previously unselected package libflite1:amd64. Preparing to unpack .../050-libflite1_2.2-6build3_amd64.deb ... Unpacking libflite1:amd64 (2.2-6build3) ... Selecting previously unselected package libserd-0-0:amd64. Preparing to unpack .../051-libserd-0-0_0.32.2-1_amd64.deb ... Unpacking libserd-0-0:amd64 (0.32.2-1) ... Selecting previously unselected package libzix-0-0:amd64. Preparing to unpack .../052-libzix-0-0_0.4.2-2build1_amd64.deb ... Unpacking libzix-0-0:amd64 (0.4.2-2build1) ... Selecting previously unselected package libsord-0-0:amd64. Preparing to unpack .../053-libsord-0-0_0.16.16-2build1_amd64.deb ... Unpacking libsord-0-0:amd64 (0.16.16-2build1) ... Selecting previously unselected package libsratom-0-0:amd64. Preparing to unpack .../054-libsratom-0-0_0.6.16-1build1_amd64.deb ... Unpacking libsratom-0-0:amd64 (0.6.16-1build1) ... Selecting previously unselected package liblilv-0-0:amd64. Preparing to unpack .../055-liblilv-0-0_0.24.22-1build1_amd64.deb ... Unpacking liblilv-0-0:amd64 (0.24.22-1build1) ... Selecting previously unselected package libmysofa1:amd64. Preparing to unpack .../056-libmysofa1_1.3.2+dfsg-2ubuntu2_amd64.deb ... Unpacking libmysofa1:amd64 (1.3.2+dfsg-2ubuntu2) ... Selecting previously unselected package libplacebo338:amd64. Preparing to unpack .../057-libplacebo338_6.338.2-2build1_amd64.deb ... Unpacking libplacebo338:amd64 (6.338.2-2build1) ... Selecting previously unselected package libblas3:amd64. Preparing to unpack .../058-libblas3_3.12.0-3build1.1_amd64.deb ... Unpacking libblas3:amd64 (3.12.0-3build1.1) ... Selecting previously unselected package liblapack3:amd64. Preparing to unpack .../059-liblapack3_3.12.0-3build1.1_amd64.deb ... Unpacking liblapack3:amd64 (3.12.0-3build1.1) ... Selecting previously unselected package libasyncns0:amd64. Preparing to unpack .../060-libasyncns0_0.8-6build4_amd64.deb ... Unpacking libasyncns0:amd64 (0.8-6build4) ... Selecting previously unselected package libflac12t64:amd64. Preparing to unpack .../061-libflac12t64_1.4.3+ds-2.1ubuntu2_amd64.deb ... Unpacking libflac12t64:amd64 (1.4.3+ds-2.1ubuntu2) ... Selecting previously unselected package libsndfile1:amd64. Preparing to unpack .../062-libsndfile1_1.2.2-1ubuntu5.24.04.1_amd64.deb ... Unpacking libsndfile1:amd64 (1.2.2-1ubuntu5.24.04.1) ... Selecting previously unselected package libpulse0:amd64. Preparing to unpack .../063-libpulse0_1%3a16.1+dfsg1-2ubuntu10.1_amd64.deb ... Unpacking libpulse0:amd64 (1:16.1+dfsg1-2ubuntu10.1) ... Selecting previously unselected package libsphinxbase3t64:amd64. Preparing to unpack .../064-libsphinxbase3t64_0.8+5prealpha+1-17build2_amd64.deb ... Unpacking libsphinxbase3t64:amd64 (0.8+5prealpha+1-17build2) ... Selecting previously unselected package libpocketsphinx3:amd64. Preparing to unpack .../065-libpocketsphinx3_0.8.0+real5prealpha+1-15ubuntu5_amd64.deb ... Unpacking libpocketsphinx3:amd64 (0.8.0+real5prealpha+1-15ubuntu5) ... Selecting previously unselected package libpostproc57:amd64. Preparing to unpack .../066-libpostproc57_7%3a6.1.1-3ubuntu5_amd64.deb ... Unpacking libpostproc57:amd64 (7:6.1.1-3ubuntu5) ... Selecting previously unselected package libsamplerate0:amd64. Preparing to unpack .../067-libsamplerate0_0.2.2-4build1_amd64.deb ... Unpacking libsamplerate0:amd64 (0.2.2-4build1) ... Selecting previously unselected package librubberband2:amd64. Preparing to unpack .../068-librubberband2_3.3.0+dfsg-2build1_amd64.deb ... Unpacking librubberband2:amd64 (3.3.0+dfsg-2build1) ... Selecting previously unselected package libswscale7:amd64. Preparing to unpack .../069-libswscale7_7%3a6.1.1-3ubuntu5_amd64.deb ... Unpacking libswscale7:amd64 (7:6.1.1-3ubuntu5) ... Selecting previously unselected package libvidstab1.1:amd64. Preparing to unpack .../070-libvidstab1.1_1.1.0-2build1_amd64.deb ... Unpacking libvidstab1.1:amd64 (1.1.0-2build1) ... Selecting previously unselected package libzimg2:amd64. Preparing to unpack .../071-libzimg2_3.0.5+ds1-1build1_amd64.deb ... Unpacking libzimg2:amd64 (3.0.5+ds1-1build1) ... Selecting previously unselected package libavfilter9:amd64. Preparing to unpack .../072-libavfilter9_7%3a6.1.1-3ubuntu5_amd64.deb ... Unpacking libavfilter9:amd64 (7:6.1.1-3ubuntu5) ... Selecting previously unselected package libcaca0:amd64. Preparing to unpack .../073-libcaca0_0.99.beta20-4build2_amd64.deb ... Unpacking libcaca0:amd64 (0.99.beta20-4build2) ... Selecting previously unselected package libcdio19t64:amd64. Preparing to unpack .../074-libcdio19t64_2.1.0-4.1ubuntu1.2_amd64.deb ... Unpacking libcdio19t64:amd64 (2.1.0-4.1ubuntu1.2) ... Selecting previously unselected package libcdio-cdda2t64:amd64. Preparing to unpack .../075-libcdio-cdda2t64_10.2+2.0.1-1.1build2_amd64.deb ... Unpacking libcdio-cdda2t64:amd64 (10.2+2.0.1-1.1build2) ... Selecting previously unselected package libcdio-paranoia2t64:amd64. Preparing to unpack .../076-libcdio-paranoia2t64_10.2+2.0.1-1.1build2_amd64.deb ... Unpacking libcdio-paranoia2t64:amd64 (10.2+2.0.1-1.1build2) ... Selecting previously unselected package libdc1394-25:amd64. Preparing to unpack .../077-libdc1394-25_2.2.6-4build1_amd64.deb ... Unpacking libdc1394-25:amd64 (2.2.6-4build1) ... Selecting previously unselected package libiec61883-0:amd64. Preparing to unpack .../078-libiec61883-0_1.2.0-6build1_amd64.deb ... Unpacking libiec61883-0:amd64 (1.2.0-6build1) ... Selecting previously unselected package libjack-jackd2-0:amd64. Preparing to unpack .../079-libjack-jackd2-0_1.9.21~dfsg-3ubuntu3_amd64.deb ... Unpacking libjack-jackd2-0:amd64 (1.9.21~dfsg-3ubuntu3) ... Selecting previously unselected package libopenal-data. Preparing to unpack .../080-libopenal-data_1%3a1.23.1-4build1_all.deb ... Unpacking libopenal-data (1:1.23.1-4build1) ... Selecting previously unselected package libsndio7.0:amd64. Preparing to unpack .../081-libsndio7.0_1.9.0-0.3build3_amd64.deb ... Unpacking libsndio7.0:amd64 (1.9.0-0.3build3) ... Selecting previously unselected package libopenal1:amd64. Preparing to unpack .../082-libopenal1_1%3a1.23.1-4build1_amd64.deb ... Unpacking libopenal1:amd64 (1:1.23.1-4build1) ... Selecting previously unselected package libdecor-0-0:amd64. Preparing to unpack .../083-libdecor-0-0_0.2.2-1build2_amd64.deb ... Unpacking libdecor-0-0:amd64 (0.2.2-1build2) ... Selecting previously unselected package libsdl2-2.0-0:amd64. Preparing to unpack .../084-libsdl2-2.0-0_2.30.0+dfsg-1build3_amd64.deb ... Unpacking libsdl2-2.0-0:amd64 (2.30.0+dfsg-1build3) ... Selecting previously unselected package libxcb-shape0:amd64. Preparing to unpack .../085-libxcb-shape0_1.15-1ubuntu2_amd64.deb ... Unpacking libxcb-shape0:amd64 (1.15-1ubuntu2) ... Selecting previously unselected package libxv1:amd64. Preparing to unpack .../086-libxv1_2%3a1.0.11-1.1build1_amd64.deb ... Unpacking libxv1:amd64 (2:1.0.11-1.1build1) ... Selecting previously unselected package libavdevice60:amd64. Preparing to unpack .../087-libavdevice60_7%3a6.1.1-3ubuntu5_amd64.deb ... Unpacking libavdevice60:amd64 (7:6.1.1-3ubuntu5) ... Selecting previously unselected package libboost-thread1.83.0:amd64. Preparing to unpack .../088-libboost-thread1.83.0_1.83.0-2.1ubuntu3.1_amd64.deb ... Unpacking libboost-thread1.83.0:amd64 (1.83.0-2.1ubuntu3.1) ... Selecting previously unselected package libboost-locale1.83.0:amd64. Preparing to unpack .../089-libboost-locale1.83.0_1.83.0-2.1ubuntu3.1_amd64.deb ... Unpacking libboost-locale1.83.0:amd64 (1.83.0-2.1ubuntu3.1) ... Selecting previously unselected package libtbbmalloc2:amd64. Preparing to unpack .../090-libtbbmalloc2_2021.11.0-2ubuntu2_amd64.deb ... Unpacking libtbbmalloc2:amd64 (2021.11.0-2ubuntu2) ... Selecting previously unselected package libhwloc15:amd64. Preparing to unpack .../091-libhwloc15_2.10.0-1build1_amd64.deb ... Unpacking libhwloc15:amd64 (2.10.0-1build1) ... Selecting previously unselected package libtbbbind-2-5:amd64. Preparing to unpack .../092-libtbbbind-2-5_2021.11.0-2ubuntu2_amd64.deb ... Unpacking libtbbbind-2-5:amd64 (2021.11.0-2ubuntu2) ... Selecting previously unselected package libtbb12:amd64. Preparing to unpack .../093-libtbb12_2021.11.0-2ubuntu2_amd64.deb ... Unpacking libtbb12:amd64 (2021.11.0-2ubuntu2) ... Selecting previously unselected package libembree4-4:amd64. Preparing to unpack .../094-libembree4-4_4.3.0+dfsg-2_amd64.deb ... Unpacking libembree4-4:amd64 (4.3.0+dfsg-2) ... Selecting previously unselected package libfftw3-single3:amd64. Preparing to unpack .../095-libfftw3-single3_3.3.10-1ubuntu3_amd64.deb ... Unpacking libfftw3-single3:amd64 (3.3.10-1ubuntu3) ... Selecting previously unselected package libimath-3-1-29t64:amd64. Preparing to unpack .../096-libimath-3-1-29t64_3.1.9-3.1ubuntu2_amd64.deb ... Unpacking libimath-3-1-29t64:amd64 (3.1.9-3.1ubuntu2) ... Selecting previously unselected package libjemalloc2:amd64. Preparing to unpack .../097-libjemalloc2_5.3.0-2build1_amd64.deb ... Unpacking libjemalloc2:amd64 (5.3.0-2build1) ... Selecting previously unselected package libpystring0:amd64. Preparing to unpack .../098-libpystring0_1.1.4-1build1_amd64.deb ... Unpacking libpystring0:amd64 (1.1.4-1build1) ... Selecting previously unselected package libyaml-cpp0.8:amd64. Preparing to unpack .../099-libyaml-cpp0.8_0.8.0+dfsg-6build1_amd64.deb ... Unpacking libyaml-cpp0.8:amd64 (0.8.0+dfsg-6build1) ... Selecting previously unselected package libopencolorio2.1t64:amd64. Preparing to unpack .../100-libopencolorio2.1t64_2.1.3+dfsg-1.1build3_amd64.deb ... Unpacking libopencolorio2.1t64:amd64 (2.1.3+dfsg-1.1build3) ... Selecting previously unselected package libopenexr-3-1-30:amd64. Preparing to unpack .../101-libopenexr-3-1-30_3.1.5-5.1build3_amd64.deb ... Unpacking libopenexr-3-1-30:amd64 (3.1.5-5.1build3) ... Selecting previously unselected package libdcmtk17t64:amd64. Preparing to unpack .../102-libdcmtk17t64_3.6.7-9.1build4_amd64.deb ... Unpacking libdcmtk17t64:amd64 (3.6.7-9.1build4) ... Selecting previously unselected package libgif7:amd64. Preparing to unpack .../103-libgif7_5.2.2-1ubuntu1_amd64.deb ... Unpacking libgif7:amd64 (5.2.2-1ubuntu1) ... Selecting previously unselected package libopencv-core406t64:amd64. Preparing to unpack .../104-libopencv-core406t64_4.6.0+dfsg-13.1ubuntu1_amd64.deb ... Unpacking libopencv-core406t64:amd64 (4.6.0+dfsg-13.1ubuntu1) ... Selecting previously unselected package libopencv-imgproc406t64:amd64. Preparing to unpack .../105-libopencv-imgproc406t64_4.6.0+dfsg-13.1ubuntu1_amd64.deb ... Unpacking libopencv-imgproc406t64:amd64 (4.6.0+dfsg-13.1ubuntu1) ... Selecting previously unselected package libexif12:amd64. Preparing to unpack .../106-libexif12_0.6.24-1build2_amd64.deb ... Unpacking libexif12:amd64 (0.6.24-1build2) ... Selecting previously unselected package libgphoto2-port12t64:amd64. Preparing to unpack .../107-libgphoto2-port12t64_2.5.31-2.1build2_amd64.deb ... Unpacking libgphoto2-port12t64:amd64 (2.5.31-2.1build2) ... Selecting previously unselected package libgphoto2-6t64:amd64. Preparing to unpack .../108-libgphoto2-6t64_2.5.31-2.1build2_amd64.deb ... Unpacking libgphoto2-6t64:amd64 (2.5.31-2.1build2) ... Selecting previously unselected package liborc-0.4-0t64:amd64. Preparing to unpack .../109-liborc-0.4-0t64_1%3a0.4.38-1ubuntu0.1_amd64.deb ... Unpacking liborc-0.4-0t64:amd64 (1:0.4.38-1ubuntu0.1) ... Selecting previously unselected package libgstreamer-plugins-base1.0-0:amd64. Preparing to unpack .../110-libgstreamer-plugins-base1.0-0_1.24.2-1ubuntu0.2_amd64.deb ... Unpacking libgstreamer-plugins-base1.0-0:amd64 (1.24.2-1ubuntu0.2) ... Selecting previously unselected package gdal-data. Preparing to unpack .../111-gdal-data_3.8.4+dfsg-3ubuntu3_all.deb ... Unpacking gdal-data (3.8.4+dfsg-3ubuntu3) ... Selecting previously unselected package gdal-plugins:amd64. Preparing to unpack .../112-gdal-plugins_3.8.4+dfsg-3ubuntu3_amd64.deb ... Unpacking gdal-plugins:amd64 (3.8.4+dfsg-3ubuntu3) ... Selecting previously unselected package libaec0:amd64. Preparing to unpack .../113-libaec0_1.1.2-1build1_amd64.deb ... Unpacking libaec0:amd64 (1.1.2-1build1) ... Selecting previously unselected package libarpack2t64:amd64. Preparing to unpack .../114-libarpack2t64_3.9.1-1.1build2_amd64.deb ... Unpacking libarpack2t64:amd64 (3.9.1-1.1build2) ... Selecting previously unselected package libsuperlu6:amd64. Preparing to unpack .../115-libsuperlu6_6.0.1+dfsg1-1build1_amd64.deb ... Unpacking libsuperlu6:amd64 (6.0.1+dfsg1-1build1) ... Selecting previously unselected package libarmadillo12. Preparing to unpack .../116-libarmadillo12_1%3a12.6.7+dfsg-1build2_amd64.deb ... Unpacking libarmadillo12 (1:12.6.7+dfsg-1build2) ... Selecting previously unselected package libblosc1:amd64. Preparing to unpack .../117-libblosc1_1.21.5+ds-1build1_amd64.deb ... Unpacking libblosc1:amd64 (1.21.5+ds-1build1) ... Selecting previously unselected package libcfitsio10t64:amd64. Preparing to unpack .../118-libcfitsio10t64_4.3.1-1.1build2_amd64.deb ... Unpacking libcfitsio10t64:amd64 (4.3.1-1.1build2) ... Selecting previously unselected package libminizip1t64:amd64. Preparing to unpack .../119-libminizip1t64_1%3a1.3.dfsg-3.1ubuntu2.1_amd64.deb ... Unpacking libminizip1t64:amd64 (1:1.3.dfsg-3.1ubuntu2.1) ... Selecting previously unselected package libfreexl1:amd64. Preparing to unpack .../120-libfreexl1_2.0.0-1build2_amd64.deb ... Unpacking libfreexl1:amd64 (2.0.0-1build2) ... Selecting previously unselected package libfyba0t64:amd64. Preparing to unpack .../121-libfyba0t64_4.1.1-11build1_amd64.deb ... Unpacking libfyba0t64:amd64 (4.1.1-11build1) ... Selecting previously unselected package libgeos3.12.1t64:amd64. Preparing to unpack .../122-libgeos3.12.1t64_3.12.1-3build1_amd64.deb ... Unpacking libgeos3.12.1t64:amd64 (3.12.1-3build1) ... Selecting previously unselected package libgeos-c1t64:amd64. Preparing to unpack .../123-libgeos-c1t64_3.12.1-3build1_amd64.deb ... Unpacking libgeos-c1t64:amd64 (3.12.1-3build1) ... Selecting previously unselected package proj-data. Preparing to unpack .../124-proj-data_9.4.0-1build2_all.deb ... Unpacking proj-data (9.4.0-1build2) ... Selecting previously unselected package libproj25:amd64. Preparing to unpack .../125-libproj25_9.4.0-1build2_amd64.deb ... Unpacking libproj25:amd64 (9.4.0-1build2) ... Selecting previously unselected package libgeotiff5:amd64. Preparing to unpack .../126-libgeotiff5_1.7.1-5build1_amd64.deb ... Unpacking libgeotiff5:amd64 (1.7.1-5build1) ... Selecting previously unselected package libhdf4-0-alt:amd64. Preparing to unpack .../127-libhdf4-0-alt_4.2.16-4build1_amd64.deb ... Unpacking libhdf4-0-alt:amd64 (4.2.16-4build1) ... Selecting previously unselected package libsz2:amd64. Preparing to unpack .../128-libsz2_1.1.2-1build1_amd64.deb ... Unpacking libsz2:amd64 (1.1.2-1build1) ... Selecting previously unselected package libhdf5-103-1t64:amd64. Preparing to unpack .../129-libhdf5-103-1t64_1.10.10+repack-3.1ubuntu4_amd64.deb ... Unpacking libhdf5-103-1t64:amd64 (1.10.10+repack-3.1ubuntu4) ... Selecting previously unselected package liburiparser1:amd64. Preparing to unpack .../130-liburiparser1_0.9.7+dfsg-2build1_amd64.deb ... Unpacking liburiparser1:amd64 (0.9.7+dfsg-2build1) ... Selecting previously unselected package libkmlbase1t64:amd64. Preparing to unpack .../131-libkmlbase1t64_1.3.0-12build1_amd64.deb ... Unpacking libkmlbase1t64:amd64 (1.3.0-12build1) ... Selecting previously unselected package libkmldom1t64:amd64. Preparing to unpack .../132-libkmldom1t64_1.3.0-12build1_amd64.deb ... Unpacking libkmldom1t64:amd64 (1.3.0-12build1) ... Selecting previously unselected package libkmlengine1t64:amd64. Preparing to unpack .../133-libkmlengine1t64_1.3.0-12build1_amd64.deb ... Unpacking libkmlengine1t64:amd64 (1.3.0-12build1) ... Selecting previously unselected package libhdf5-hl-100t64:amd64. Preparing to unpack .../134-libhdf5-hl-100t64_1.10.10+repack-3.1ubuntu4_amd64.deb ... Unpacking libhdf5-hl-100t64:amd64 (1.10.10+repack-3.1ubuntu4) ... Selecting previously unselected package libnetcdf19t64:amd64. Preparing to unpack .../135-libnetcdf19t64_1%3a4.9.2-5ubuntu4_amd64.deb ... Unpacking libnetcdf19t64:amd64 (1:4.9.2-5ubuntu4) ... Selecting previously unselected package unixodbc-common. Preparing to unpack .../136-unixodbc-common_2.3.12-1ubuntu0.24.04.1_all.deb ... Unpacking unixodbc-common (2.3.12-1ubuntu0.24.04.1) ... Selecting previously unselected package libodbcinst2:amd64. Preparing to unpack .../137-libodbcinst2_2.3.12-1ubuntu0.24.04.1_amd64.deb ... Unpacking libodbcinst2:amd64 (2.3.12-1ubuntu0.24.04.1) ... Selecting previously unselected package libogdi4.1:amd64. Preparing to unpack .../138-libogdi4.1_4.1.1+ds-3build1_amd64.deb ... Unpacking libogdi4.1:amd64 (4.1.1+ds-3build1) ... Selecting previously unselected package libpoppler134:amd64. Preparing to unpack .../139-libpoppler134_24.02.0-1ubuntu9.3_amd64.deb ... Unpacking libpoppler134:amd64 (24.02.0-1ubuntu9.3) ... Selecting previously unselected package libqhull-r8.0:amd64. Preparing to unpack .../140-libqhull-r8.0_2020.2-6build1_amd64.deb ... Unpacking libqhull-r8.0:amd64 (2020.2-6build1) ... Selecting previously unselected package librttopo1:amd64. Preparing to unpack .../141-librttopo1_1.1.0-3build2_amd64.deb ... Unpacking librttopo1:amd64 (1.1.0-3build2) ... Selecting previously unselected package libspatialite8t64:amd64. Preparing to unpack .../142-libspatialite8t64_5.1.0-3build1_amd64.deb ... Unpacking libspatialite8t64:amd64 (5.1.0-3build1) ... Selecting previously unselected package libxerces-c3.2t64:amd64. Preparing to unpack .../143-libxerces-c3.2t64_3.2.4+debian-1.2ubuntu2_amd64.deb ... Unpacking libxerces-c3.2t64:amd64 (3.2.4+debian-1.2ubuntu2) ... Selecting previously unselected package libgdal34t64:amd64. Preparing to unpack .../144-libgdal34t64_3.8.4+dfsg-3ubuntu3_amd64.deb ... Unpacking libgdal34t64:amd64 (3.8.4+dfsg-3ubuntu3) ... Selecting previously unselected package libcharls2:amd64. Preparing to unpack .../145-libcharls2_2.4.2-2build2_amd64.deb ... Unpacking libcharls2:amd64 (2.4.2-2build2) ... Selecting previously unselected package libsocket++1:amd64. Preparing to unpack .../146-libsocket++1_1.12.13+git20131030.5d039ba-1build1_amd64.deb ... Unpacking libsocket++1:amd64 (1.12.13+git20131030.5d039ba-1build1) ... Selecting previously unselected package libgdcm3.0t64:amd64. Preparing to unpack .../147-libgdcm3.0t64_3.0.22-2.1ubuntu1_amd64.deb ... Unpacking libgdcm3.0t64:amd64 (3.0.22-2.1ubuntu1) ... Selecting previously unselected package libopencv-imgcodecs406t64:amd64. Preparing to unpack .../148-libopencv-imgcodecs406t64_4.6.0+dfsg-13.1ubuntu1_amd64.deb ... Unpacking libopencv-imgcodecs406t64:amd64 (4.6.0+dfsg-13.1ubuntu1) ... Selecting previously unselected package libopencv-videoio406t64:amd64. Preparing to unpack .../149-libopencv-videoio406t64_4.6.0+dfsg-13.1ubuntu1_amd64.deb ... Unpacking libopencv-videoio406t64:amd64 (4.6.0+dfsg-13.1ubuntu1) ... Selecting previously unselected package libboost-iostreams1.83.0:amd64. Preparing to unpack .../150-libboost-iostreams1.83.0_1.83.0-2.1ubuntu3.1_amd64.deb ... Unpacking libboost-iostreams1.83.0:amd64 (1.83.0-2.1ubuntu3.1) ... Selecting previously unselected package liblog4cplus-2.0.5t64:amd64. Preparing to unpack .../151-liblog4cplus-2.0.5t64_2.0.8-1.1ubuntu3_amd64.deb ... Unpacking liblog4cplus-2.0.5t64:amd64 (2.0.8-1.1ubuntu3) ... Selecting previously unselected package libopenvdb10.0t64:amd64. Preparing to unpack .../152-libopenvdb10.0t64_10.0.1-2.1build5_amd64.deb ... Unpacking libopenvdb10.0t64:amd64 (10.0.1-2.1build5) ... Selecting previously unselected package libopenimageio2.4t64:amd64. Preparing to unpack .../153-libopenimageio2.4t64_2.4.17.0+dfsg-1.1build4_amd64.deb ... Unpacking libopenimageio2.4t64:amd64 (2.4.17.0+dfsg-1.1build4) ... Selecting previously unselected package libosdcpu3.5.0t64:amd64. Preparing to unpack .../154-libosdcpu3.5.0t64_3.5.0-2.1build1_amd64.deb ... Unpacking libosdcpu3.5.0t64:amd64 (3.5.0-2.1build1) ... Selecting previously unselected package libosdgpu3.5.0t64:amd64. Preparing to unpack .../155-libosdgpu3.5.0t64_3.5.0-2.1build1_amd64.deb ... Unpacking libosdgpu3.5.0t64:amd64 (3.5.0-2.1build1) ... Selecting previously unselected package libpotrace0:amd64. Preparing to unpack .../156-libpotrace0_1.16-2build1_amd64.deb ... Unpacking libpotrace0:amd64 (1.16-2build1) ... Selecting previously unselected package libpugixml1v5:amd64. Preparing to unpack .../157-libpugixml1v5_1.14-0.1build1_amd64.deb ... Unpacking libpugixml1v5:amd64 (1.14-0.1build1) ... Selecting previously unselected package libspnav0. Preparing to unpack .../158-libspnav0_1.1-2_amd64.deb ... Unpacking libspnav0 (1.1-2) ... Selecting previously unselected package blender. Preparing to unpack .../159-blender_4.0.2+dfsg-1ubuntu8_amd64.deb ... Unpacking blender (4.0.2+dfsg-1ubuntu8) ... Selecting previously unselected package libcdparanoia0:amd64. Preparing to unpack .../160-libcdparanoia0_3.10.2+debian-14build3_amd64.deb ... Unpacking libcdparanoia0:amd64 (3.10.2+debian-14build3) ... Selecting previously unselected package libvisual-0.4-0:amd64. Preparing to unpack .../161-libvisual-0.4-0_0.4.2-2build1_amd64.deb ... Unpacking libvisual-0.4-0:amd64 (0.4.2-2build1) ... Selecting previously unselected package gstreamer1.0-plugins-base:amd64. Preparing to unpack .../162-gstreamer1.0-plugins-base_1.24.2-1ubuntu0.2_amd64.deb ... Unpacking gstreamer1.0-plugins-base:amd64 (1.24.2-1ubuntu0.2) ... Selecting previously unselected package libigdgmm12:amd64. Preparing to unpack .../163-libigdgmm12_22.3.17+ds1-1_amd64.deb ... Unpacking libigdgmm12:amd64 (22.3.17+ds1-1) ... Selecting previously unselected package intel-media-va-driver:amd64. Preparing to unpack .../164-intel-media-va-driver_24.1.0+dfsg1-1_amd64.deb ... Unpacking intel-media-va-driver:amd64 (24.1.0+dfsg1-1) ... Selecting previously unselected package libaacs0:amd64. Preparing to unpack .../165-libaacs0_0.11.1-2build1_amd64.deb ... Unpacking libaacs0:amd64 (0.11.1-2build1) ... Selecting previously unselected package libbdplus0:amd64. Preparing to unpack .../166-libbdplus0_0.2.0-3build1_amd64.deb ... Unpacking libbdplus0:amd64 (0.2.0-3build1) ... Selecting previously unselected package libdecor-0-plugin-1-gtk:amd64. Preparing to unpack .../167-libdecor-0-plugin-1-gtk_0.2.2-1build2_amd64.deb ... Unpacking libdecor-0-plugin-1-gtk:amd64 (0.2.2-1build2) ... Selecting previously unselected package libgphoto2-l10n. Preparing to unpack .../168-libgphoto2-l10n_2.5.31-2.1build2_all.deb ... Unpacking libgphoto2-l10n (2.5.31-2.1build2) ... Selecting previously unselected package librsvg2-common:amd64. Preparing to unpack .../169-librsvg2-common_2.58.0+dfsg-1build1_amd64.deb ... Unpacking librsvg2-common:amd64 (2.58.0+dfsg-1build1) ... Selecting previously unselected package libxnvctrl0:amd64. Preparing to unpack .../170-libxnvctrl0_510.47.03-0ubuntu4_amd64.deb ... Unpacking libxnvctrl0:amd64 (510.47.03-0ubuntu4) ... Selecting previously unselected package mesa-va-drivers:amd64. Preparing to unpack .../171-mesa-va-drivers_24.2.8-1ubuntu1~24.04.1_amd64.deb ... Unpacking mesa-va-drivers:amd64 (24.2.8-1ubuntu1~24.04.1) ... Selecting previously unselected package mesa-vdpau-drivers:amd64. Preparing to unpack .../172-mesa-vdpau-drivers_24.2.8-1ubuntu1~24.04.1_amd64.deb ... Unpacking mesa-vdpau-drivers:amd64 (24.2.8-1ubuntu1~24.04.1) ... Selecting previously unselected package i965-va-driver:amd64. Preparing to unpack .../173-i965-va-driver_2.4.1+dfsg1-1build2_amd64.deb ... Unpacking i965-va-driver:amd64 (2.4.1+dfsg1-1build2) ... Selecting previously unselected package va-driver-all:amd64. Preparing to unpack .../174-va-driver-all_2.20.0-2build1_amd64.deb ... Unpacking va-driver-all:amd64 (2.20.0-2build1) ... Selecting previously unselected package vdpau-driver-all:amd64. Preparing to unpack .../175-vdpau-driver-all_1.5-2build1_amd64.deb ... Unpacking vdpau-driver-all:amd64 (1.5-2build1) ... Selecting previously unselected package libhwloc-plugins:amd64. Preparing to unpack .../176-libhwloc-plugins_2.10.0-1build1_amd64.deb ... Unpacking libhwloc-plugins:amd64 (2.10.0-1build1) ... Selecting previously unselected package pocketsphinx-en-us. Preparing to unpack .../177-pocketsphinx-en-us_0.8.0+real5prealpha+1-15ubuntu5_all.deb ... Unpacking pocketsphinx-en-us (0.8.0+real5prealpha+1-15ubuntu5) ... Selecting previously unselected package proj-bin. Preparing to unpack .../178-proj-bin_9.4.0-1build2_amd64.deb ... Unpacking proj-bin (9.4.0-1build2) ... Setting up libgme0:amd64 (0.6.3-7build1) ... Setting up libchromaprint1:amd64 (1.5.1-5) ... Setting up libssh-gcrypt-4:amd64 (0.10.6-2build2) ... Setting up libhwy1t64:amd64 (1.0.7-8.1build1) ... Setting up libtbbmalloc2:amd64 (2021.11.0-2ubuntu2) ... Setting up libudfread0:amd64 (1.1.2-1build1) ... Setting up libcdparanoia0:amd64 (3.10.2+debian-14build3) ... Setting up liblog4cplus-2.0.5t64:amd64 (2.0.8-1.1ubuntu3) ... Setting up libraw1394-11:amd64 (2.1.2-2build3) ... Setting up libfftw3-single3:amd64 (3.3.10-1ubuntu3) ... Setting up libspeex1:amd64 (1.2.1-2ubuntu2.24.04.1) ... Setting up proj-data (9.4.0-1build2) ... Setting up libshine3:amd64 (3.1.1-2build1) ... Setting up libcaca0:amd64 (0.99.beta20-4build2) ... Setting up libvpl2 (2023.3.0-1build1) ... Setting up libx264-164:amd64 (2:0.164.3108+git31e19f9-1) ... Setting up libtwolame0:amd64 (0.4.0-2build3) ... Setting up libmbedcrypto7t64:amd64 (2.28.8-1) ... Setting up libproj25:amd64 (9.4.0-1build2) ... Setting up libogdi4.1:amd64 (4.1.1+ds-3build1) ... Setting up libpoppler134:amd64 (24.02.0-1ubuntu9.3) ... Setting up libgsm1:amd64 (1.0.22-1build1) ... Setting up libcharls2:amd64 (2.4.2-2build2) ... Setting up libvisual-0.4-0:amd64 (0.4.2-2build1) ... Setting up libgeos3.12.1t64:amd64 (3.12.1-3build1) ... Setting up libsoxr0:amd64 (0.1.3-4build3) ... Setting up libzix-0-0:amd64 (0.4.2-2build1) ... Setting up libdcmtk17t64:amd64 (3.6.7-9.1build4) ... Setting up libcodec2-1.2:amd64 (1.2.0-2build1) ... Setting up libgeos-c1t64:amd64 (3.12.1-3build1) ... Setting up libyaml-cpp0.8:amd64 (0.8.0+dfsg-6build1) ... Setting up libmysofa1:amd64 (1.3.2+dfsg-2ubuntu2) ... Setting up libxcb-shape0:amd64 (1.15-1ubuntu2) ... Setting up libcdio19t64:amd64 (2.1.0-4.1ubuntu1.2) ... Setting up libboost-thread1.83.0:amd64 (1.83.0-2.1ubuntu3.1) ... Setting up proj-bin (9.4.0-1build2) ... Setting up libqhull-r8.0:amd64 (2020.2-6build1) ... Setting up libsvtav1enc1d1:amd64 (1.7.0+dfsg-2build1) ... Setting up libigdgmm12:amd64 (22.3.17+ds1-1) ... Setting up libjemalloc2:amd64 (5.3.0-2build1) ... Setting up libmpg123-0t64:amd64 (1.32.5-1ubuntu1.1) ... Setting up libxerces-c3.2t64:amd64 (3.2.4+debian-1.2ubuntu2) ... Setting up libcjson1:amd64 (1.7.17-1) ... Setting up libxvidcore4:amd64 (2:1.3.7-1build1) ... Setting up libgphoto2-l10n (2.5.31-2.1build2) ... Setting up librav1e0:amd64 (0.7.1-2) ... Setting up libaec0:amd64 (1.1.2-1build1) ... Setting up gdal-data (3.8.4+dfsg-3ubuntu3) ... Setting up libpugixml1v5:amd64 (1.14-0.1build1) ... Setting up libgeotiff5:amd64 (1.7.1-5build1) ... Setting up poppler-data (0.4.12-1) ... Setting up liborc-0.4-0t64:amd64 (1:0.4.38-1ubuntu0.1) ... Setting up libcdio-cdda2t64:amd64 (10.2+2.0.1-1.1build2) ... Setting up libxnvctrl0:amd64 (510.47.03-0ubuntu4) ... Setting up librist4:amd64 (0.2.10+dfsg-2) ... Setting up librsvg2-2:amd64 (2.58.0+dfsg-1build1) ... Setting up libblas3:amd64 (3.12.0-3build1.1) ... update-alternatives: using /usr/lib/x86_64-linux-gnu/blas/libblas.so.3 to provide /usr/lib/x86_64-linux-gnu/libblas.so.3 (libblas.so.3-x86_64-linux-gnu) in auto mode Setting up libplacebo338:amd64 (6.338.2-2build1) ... Setting up libcfitsio10t64:amd64 (4.3.1-1.1build2) ... Setting up libva2:amd64 (2.20.0-2build1) ... Setting up libboost-iostreams1.83.0:amd64 (1.83.0-2.1ubuntu3.1) ... Setting up libopus0:amd64 (1.4-1build1) ... Setting up libexif12:amd64 (0.6.24-1build2) ... Setting up libcdio-paranoia2t64:amd64 (10.2+2.0.1-1.1build2) ... Setting up libdc1394-25:amd64 (2.2.6-4build1) ... Setting up intel-media-va-driver:amd64 (24.1.0+dfsg1-1) ... Setting up libxv1:amd64 (2:1.0.11-1.1build1) ... Setting up libhwloc15:amd64 (2.10.0-1build1) ... Setting up libimath-3-1-29t64:amd64 (3.1.9-3.1ubuntu2) ... Setting up libunibreak5:amd64 (5.1-2build1) ... Setting up unixodbc-common (2.3.12-1ubuntu0.24.04.1) ... Setting up libsocket++1:amd64 (1.12.13+git20131030.5d039ba-1build1) ... Setting up libaacs0:amd64 (0.11.1-2build1) ... Setting up libjxl0.7:amd64 (0.7.0-10.2ubuntu6) ... Setting up librsvg2-common:amd64 (2.58.0+dfsg-1build1) ... Setting up pocketsphinx-en-us (0.8.0+real5prealpha+1-15ubuntu5) ... Setting up libhdf4-0-alt:amd64 (4.2.16-4build1) ... Setting up libx265-199:amd64 (3.5-2build1) ... Setting up libosdcpu3.5.0t64:amd64 (3.5.0-2.1build1) ... Setting up libsndio7.0:amd64 (1.9.0-0.3build3) ... Setting up libgif7:amd64 (5.2.2-1ubuntu1) ... Setting up liburiparser1:amd64 (0.9.7+dfsg-2build1) ... Setting up libbdplus0:amd64 (0.2.0-3build1) ... Setting up libvidstab1.1:amd64 (1.1.0-2build1) ... Setting up libfyba0t64:amd64 (4.1.1-11build1) ... Setting up libvpx9:amd64 (1.14.0-1ubuntu2.1) ... Setting up librttopo1:amd64 (1.1.0-3build2) ... Setting up libsrt1.5-gnutls:amd64 (1.5.3-1build2) ... Setting up libflite1:amd64 (2.2-6build3) ... Setting up libdav1d7:amd64 (1.4.1-1build1) ... Setting up libva-drm2:amd64 (2.20.0-2build1) ... Setting up blender-data (4.0.2+dfsg-1ubuntu8) ... Setting up libminizip1t64:amd64 (1:1.3.dfsg-3.1ubuntu2.1) ... Setting up ocl-icd-libopencl1:amd64 (2.3.2-1build1) ... Setting up libasyncns0:amd64 (0.8-6build4) ... Setting up libvdpau1:amd64 (1.5-2build1) ... Setting up libbs2b0:amd64 (3.1.0+dfsg-7build1) ... Setting up libtheora0:amd64 (1.1.1+dfsg.1-16.1build3) ... Setting up libblosc1:amd64 (1.21.5+ds-1build1) ... Setting up libdecor-0-0:amd64 (0.2.2-1build2) ... Setting up libzimg2:amd64 (3.0.5+ds1-1build1) ... Setting up libopenal-data (1:1.23.1-4build1) ... Setting up libpystring0:amd64 (1.1.4-1build1) ... Setting up libgphoto2-port12t64:amd64 (2.5.31-2.1build2) ... Setting up libflac12t64:amd64 (1.4.3+ds-2.1ubuntu2) ... Setting up mesa-va-drivers:amd64 (24.2.8-1ubuntu1~24.04.1) ... Setting up libbluray2:amd64 (1:1.3.4-1build1) ... Setting up libkmlbase1t64:amd64 (1.3.0-12build1) ... Setting up libsamplerate0:amd64 (0.2.2-4build1) ... Setting up libva-x11-2:amd64 (2.20.0-2build1) ... Setting up libdecor-0-plugin-1-gtk:amd64 (0.2.2-1build2) ... Setting up libopenmpt0t64:amd64 (0.7.3-1.1build3) ... Setting up libzvbi-common (0.2.42-2) ... Setting up libmp3lame0:amd64 (3.100-6build1) ... Setting up libsz2:amd64 (1.1.2-1build1) ... Setting up i965-va-driver:amd64 (2.4.1+dfsg1-1build2) ... Setting up libvorbisenc2:amd64 (1.3.7-1build3) ... Setting up libspnav0 (1.1-2) ... Setting up libiec61883-0:amd64 (1.2.0-6build1) ... Setting up gdal-plugins:amd64 (3.8.4+dfsg-3ubuntu3) ... Setting up libserd-0-0:amd64 (0.32.2-1) ... Setting up libpotrace0:amd64 (1.16-2build1) ... Setting up libavc1394-0:amd64 (0.5.4-5build3) ... Setting up libgdcm3.0t64:amd64 (3.0.22-2.1ubuntu1) ... Setting up mesa-vdpau-drivers:amd64 (24.2.8-1ubuntu1~24.04.1) ... Setting up libosdgpu3.5.0t64:amd64 (3.5.0-2.1build1) ... Setting up libodbcinst2:amd64 (2.3.12-1ubuntu0.24.04.1) ... Setting up liblapack3:amd64 (3.12.0-3build1.1) ... update-alternatives: using /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3 to provide /usr/lib/x86_64-linux-gnu/liblapack.so.3 (liblapack.so.3-x86_64-linux-gnu) in auto mode Setting up libarpack2t64:amd64 (3.9.1-1.1build2) ... Setting up libzvbi0t64:amd64 (0.2.42-2) ... Setting up libboost-locale1.83.0:amd64 (1.83.0-2.1ubuntu3.1) ... Setting up libgstreamer-plugins-base1.0-0:amd64 (1.24.2-1ubuntu0.2) ... Setting up libavutil58:amd64 (7:6.1.1-3ubuntu5) ... Setting up libopenal1:amd64 (1:1.23.1-4build1) ... Setting up libsuperlu6:amd64 (6.0.1+dfsg1-1build1) ... Setting up libhwloc-plugins:amd64 (2.10.0-1build1) ... Setting up libtbbbind-2-5:amd64 (2021.11.0-2ubuntu2) ... Setting up libkmldom1t64:amd64 (1.3.0-12build1) ... Setting up gstreamer1.0-plugins-base:amd64 (1.24.2-1ubuntu0.2) ... Setting up libass9:amd64 (1:0.17.1-2build1) ... Setting up libswresample4:amd64 (7:6.1.1-3ubuntu5) ... Setting up va-driver-all:amd64 (2.20.0-2build1) ... Setting up libgphoto2-6t64:amd64 (2.5.31-2.1build2) ... No diversion 'diversion of /lib/udev/hwdb.d/20-libgphoto2-6.hwdb to /lib/udev/hwdb.d/20-libgphoto2-6.hwdb.usr-is-merged by usr-is-merged', none removed. No diversion 'diversion of /lib/udev/rules.d/60-libgphoto2-6.rules to /lib/udev/rules.d/60-libgphoto2-6.rules.usr-is-merged by usr-is-merged', none removed. Setting up libopencolorio2.1t64:amd64 (2.1.3+dfsg-1.1build3) ... Setting up libopenexr-3-1-30:amd64 (3.1.5-5.1build3) ... Setting up libavcodec60:amd64 (7:6.1.1-3ubuntu5) ... Setting up librubberband2:amd64 (3.3.0+dfsg-2build1) ... Setting up libjack-jackd2-0:amd64 (1.9.21~dfsg-3ubuntu3) ... Setting up vdpau-driver-all:amd64 (1.5-2build1) ... Setting up libfreexl1:amd64 (2.0.0-1build2) ... Setting up libsord-0-0:amd64 (0.16.16-2build1) ... Setting up libpostproc57:amd64 (7:6.1.1-3ubuntu5) ... Setting up libsratom-0-0:amd64 (0.6.16-1build1) ... Setting up libsndfile1:amd64 (1.2.2-1ubuntu5.24.04.1) ... Setting up libhdf5-103-1t64:amd64 (1.10.10+repack-3.1ubuntu4) ... Setting up liblilv-0-0:amd64 (0.24.22-1build1) ... Setting up libarmadillo12 (1:12.6.7+dfsg-1build2) ... Setting up libswscale7:amd64 (7:6.1.1-3ubuntu5) ... Setting up libspatialite8t64:amd64 (5.1.0-3build1) ... Setting up libhdf5-hl-100t64:amd64 (1.10.10+repack-3.1ubuntu4) ... Setting up libnetcdf19t64:amd64 (1:4.9.2-5ubuntu4) ... Setting up libpulse0:amd64 (1:16.1+dfsg1-2ubuntu10.1) ... Setting up libtbb12:amd64 (2021.11.0-2ubuntu2) ... Setting up libavformat60:amd64 (7:6.1.1-3ubuntu5) ... Setting up libkmlengine1t64:amd64 (1.3.0-12build1) ... Setting up libsphinxbase3t64:amd64 (0.8+5prealpha+1-17build2) ... Setting up libgdal34t64:amd64 (3.8.4+dfsg-3ubuntu3) ... Setting up libembree4-4:amd64 (4.3.0+dfsg-2) ... Setting up libsdl2-2.0-0:amd64 (2.30.0+dfsg-1build3) ... Setting up libopencv-core406t64:amd64 (4.6.0+dfsg-13.1ubuntu1) ... Setting up libopenvdb10.0t64:amd64 (10.0.1-2.1build5) ... Setting up libpocketsphinx3:amd64 (0.8.0+real5prealpha+1-15ubuntu5) ... Setting up libopencv-imgproc406t64:amd64 (4.6.0+dfsg-13.1ubuntu1) ... Setting up libopencv-imgcodecs406t64:amd64 (4.6.0+dfsg-13.1ubuntu1) ... Setting up libavfilter9:amd64 (7:6.1.1-3ubuntu5) ... Setting up libopencv-videoio406t64:amd64 (4.6.0+dfsg-13.1ubuntu1) ... Setting up libavdevice60:amd64 (7:6.1.1-3ubuntu5) ... Setting up libopenimageio2.4t64:amd64 (2.4.17.0+dfsg-1.1build4) ... Setting up blender (4.0.2+dfsg-1ubuntu8) ... Processing triggers for hicolor-icon-theme (0.17-2) ... Processing triggers for libc-bin (2.39-0ubuntu8.4) ... Processing triggers for man-db (2.12.0-4build2) ... Processing triggers for udev (255.4-1ubuntu8.6) ... Processing triggers for libgdk-pixbuf-2.0-0:amd64 (2.42.10+dfsg-3ubuntu3.1) ... Processing triggers for fontconfig (2.15.0-1.1ubuntu2) ... Running kernel seems to be up-to-date. Restarting services... Service restarts being deferred: systemctl restart runner-provisioner.service No containers need to be restarted. No user sessions are running outdated binaries. No VM guests are running outdated hypervisor (qemu) binaries on this host. polyglot/scripts/core.ps1/GetFullPath / Path: ./build.py / Location: /home/runner/work/polyglot/polyglot/apps/spiral/temp/blender / ResolvedLocation: /home/runner/work/polyglot/polyglot/apps/spiral/temp/blender polyglot/scripts/core.ps1/GetFullPath / FullPath: /home/runner/work/polyglot/polyglot/apps/spiral/temp/blender/build.py blender / Path: /home/runner/work/polyglot/polyglot/apps/spiral/temp/blender/build.py Blender 4.0.2 Fra:1 Mem:9.24M (Peak 9.24M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Synchronizing object | Cube Fra:1 Mem:9.29M (Peak 9.29M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Initializing Fra:1 Mem:9.15M (Peak 9.29M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Waiting for render to start Fra:1 Mem:9.15M (Peak 9.29M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Loading render kernels (may take a few minutes the first time) Fra:1 Mem:9.15M (Peak 9.29M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Scene Fra:1 Mem:9.15M (Peak 9.29M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Shaders Fra:1 Mem:9.24M (Peak 9.29M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Procedurals Fra:1 Mem:9.24M (Peak 9.29M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Background Fra:1 Mem:9.24M (Peak 9.29M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Camera Fra:1 Mem:9.24M (Peak 9.29M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Meshes Flags Fra:1 Mem:9.24M (Peak 9.29M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Objects Fra:1 Mem:9.24M (Peak 9.29M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Objects | Copying Transformations to device Fra:1 Mem:9.24M (Peak 9.29M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Objects | Applying Static Transformations Fra:1 Mem:9.24M (Peak 9.29M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Particle Systems Fra:1 Mem:9.24M (Peak 9.29M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Particle Systems | Copying Particles to device Fra:1 Mem:9.24M (Peak 9.29M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Meshes Fra:1 Mem:9.25M (Peak 9.29M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Mesh | Computing attributes Fra:1 Mem:9.26M (Peak 9.29M) | Time:00:00.00 | Mem:0.00M, Peak:0.00M | Scene, ViewLayer | Updating Mesh | Copying Attributes to device Fra:1 Mem:9.26M (Peak 9.29M) | Time:00:00.00 | Mem:0.01M, Peak:0.01M | Scene, ViewLayer | Updating Scene BVH | Building Fra:1 Mem:9.26M (Peak 9.29M) | Time:00:00.00 | Mem:0.01M, Peak:0.01M | Scene, ViewLayer | Updating Scene BVH | Building BVH Fra:1 Mem:9.26M (Peak 9.29M) | Time:00:00.00 | Mem:0.04M, Peak:0.04M | Scene, ViewLayer | Updating Scene BVH | Building BVH 0% Fra:1 Mem:9.26M (Peak 9.29M) | Time:00:00.00 | Mem:0.07M, Peak:0.10M | Scene, ViewLayer | Updating Scene BVH | Copying BVH to device Fra:1 Mem:9.26M (Peak 9.29M) | Time:00:00.00 | Mem:0.07M, Peak:0.10M | Scene, ViewLayer | Updating Mesh | Computing normals Fra:1 Mem:9.29M (Peak 9.29M) | Time:00:00.00 | Mem:0.07M, Peak:0.10M | Scene, ViewLayer | Updating Mesh | Copying Mesh to device Fra:1 Mem:9.29M (Peak 9.29M) | Time:00:00.00 | Mem:0.11M, Peak:0.11M | Scene, ViewLayer | Updating Objects Flags Fra:1 Mem:9.29M (Peak 9.29M) | Time:00:00.00 | Mem:0.11M, Peak:0.11M | Scene, ViewLayer | Updating Primitive Offsets Fra:1 Mem:9.29M (Peak 9.29M) | Time:00:00.00 | Mem:0.11M, Peak:0.11M | Scene, ViewLayer | Updating Images Fra:1 Mem:9.29M (Peak 9.29M) | Time:00:00.00 | Mem:0.11M, Peak:0.11M | Scene, ViewLayer | Updating Camera Volume Fra:1 Mem:9.29M (Peak 9.29M) | Time:00:00.00 | Mem:0.11M, Peak:0.11M | Scene, ViewLayer | Updating Lookup Tables Fra:1 Mem:9.29M (Peak 9.29M) | Time:00:00.00 | Mem:0.19M, Peak:0.19M | Scene, ViewLayer | Updating Lights Fra:1 Mem:9.29M (Peak 9.29M) | Time:00:00.00 | Mem:0.19M, Peak:0.19M | Scene, ViewLayer | Updating Lights | Computing distribution Fra:1 Mem:9.29M (Peak 9.29M) | Time:00:00.00 | Mem:0.19M, Peak:0.19M | Scene, ViewLayer | Updating Lights | Computing tree Fra:1 Mem:9.29M (Peak 9.29M) | Time:00:00.00 | Mem:0.19M, Peak:0.19M | Scene, ViewLayer | Updating Integrator Fra:1 Mem:25.29M (Peak 25.29M) | Time:00:00.00 | Mem:16.19M, Peak:16.19M | Scene, ViewLayer | Updating Film Fra:1 Mem:25.29M (Peak 25.29M) | Time:00:00.00 | Mem:16.11M, Peak:16.19M | Scene, ViewLayer | Updating Lookup Tables Fra:1 Mem:25.29M (Peak 25.29M) | Time:00:00.00 | Mem:16.19M, Peak:16.19M | Scene, ViewLayer | Updating Baking Fra:1 Mem:25.29M (Peak 25.29M) | Time:00:00.00 | Mem:16.19M, Peak:16.19M | Scene, ViewLayer | Updating Device | Writing constant memory Fra:1 Mem:25.29M (Peak 25.29M) | Time:00:00.00 | Mem:16.19M, Peak:16.19M | Scene, ViewLayer | Build without OpenImageDenoiser Build without OpenImageDenoiser No device available to denoise on Traceback (most recent call last): File "/home/runner/work/polyglot/polyglot/apps/spiral/temp/blender/build.py", line 54, in <module> bpy.ops.render.render(write_still=True) File "/usr/share/blender/scripts/modules/bpy/ops.py", line 109, in __call__ ret = _op_call(self.idname_py(), kw) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ RuntimeError: Error: Build without OpenImageDenoiser Error: Build without OpenImageDenoiser Error: Build without OpenImageDenoiser Error: Build without OpenImageDenoiser Blender quit
In [ ]:
{ pwsh ../apps/spiral/vscode/build.ps1 } | Invoke-Block
bun install v1.2.9 (9a329c04) + @types/node@22.10.10 + @types/vscode@1.96.0 + @vscode/vsce@3.2.1 + npm-check-updates@17.1.14 + typescript@5.5.0-dev.20240514 + vscode@1.1.37 225 packages installed [940.00ms] Blocked 1 postinstall. Run `bun pm untrusted` for details. polyglot/scripts/core.ps1/GetFullPath / Path: ./LICENSE / Location: /home/runner/work/polyglot/polyglot/apps/spiral/vscode / ResolvedLocation: /home/runner/work/polyglot/polyglot/apps/spiral/vscode polyglot/scripts/core.ps1/GetFullPath / FullPath: /home/runner/work/polyglot/polyglot/apps/spiral/vscode/LICENSE polyglot/scripts/core.ps1/EnsureSymbolicLink / Parent: /home/runner/work/polyglot/polyglot/apps/spiral/vscode / Path: /home/runner/work/polyglot/polyglot/apps/spiral/vscode/LICENSE polyglot/scripts/core.ps1/GetFullPath / Path: ../../../LICENSE / Location: /home/runner/work/polyglot/polyglot/apps/spiral/vscode / ResolvedLocation: /home/runner/work/polyglot/polyglot/apps/spiral/vscode polyglot/scripts/core.ps1/GetFullPath / FullPath: /home/runner/work/polyglot/polyglot/LICENSE polyglot/scripts/core.ps1/EnsureSymbolicLink / FullPath: /home/runner/work/polyglot/polyglot/apps/spiral/vscode/LICENSE / Target: /home/runner/work/polyglot/polyglot/LICENSE / ResolvedTarget: /home/runner/work/polyglot/polyglot/LICENSE polyglot/scripts/core.ps1/EnsureSymbolicLink / Creating symlink: /home/runner/work/polyglot/polyglot/apps/spiral/vscode/LICENSE -> /home/runner/work/polyglot/polyglot/LICENSE out/src/extension.js 2.4kb out/media/cellOutputScrollButtons.js 1.9kb ⚡ Done in 3ms ::warning::Neither a .vscodeignore file nor a "files" property in package.json was found. To ensure only necessary files are included in your extension, add a .vscodeignore file or specify the "files" property in package.json. More info: https://aka.ms/vscode-vscodeignore%0A Files included in the VSIX: spiral-vscode-0.0.1.vsix ├─ [Content_Types].xml ├─ extension.vsixmanifest └─ extension/ ├─ .gitignore [0.01 KB] ├─ LICENSE.txt [33.71 KB] ├─ build.ps1 [0.41 KB] ├─ bun.lockb [86.98 KB] ├─ compile.ps1 [0.48 KB] ├─ package.json [1.55 KB] ├─ media/ │ └─ cellOutputScrollButtons.ts [1.8 KB] ├─ out/ │ ├─ media/ │ │ └─ cellOutputScrollButtons.js [1.86 KB] │ └─ src/ │ └─ extension.js [2.44 KB] └─ src/ └─ extension.ts [1.38 KB] Packaged: out/spiral-vscode-0.0.1.vsix (12 files, 49.06 KB)
In [ ]:
{ pwsh ../apps/ipfs/build.ps1 } | Invoke-Block
bun install v1.2.9 (9a329c04) + @types/node@22.10.10 + npm-check-updates@17.1.14 + typescript@5.5.0-dev.20240401 + nft.storage@7.2.0 220 packages installed [592.00ms] Blocked 1 postinstall. Run `bun pm untrusted` for details.
In [ ]:
{ pwsh ./outdated.ps1 } | Invoke-Block
Paket version 9.0.2+a9b12aaeb8d8d5e47a415a3442b7920ed04e98e0 Resolving dependency graph... Could not detect any platforms from 'net10.0' in Microsoft.AspNetCore.Connections.Abstractions 10.0.0-preview.2.25164.1, please tell the package authors Could not detect any platforms from 'net10.0' in System.Management 10.0.0-preview.2.25163.2, please tell the package authors Could not detect any platforms from 'net10.0' in Microsoft.AspNetCore.Http.Connections.Common 10.0.0-preview.2.25164.1, please tell the package authors Could not detect any platforms from 'net10.0' in Microsoft.AspNetCore.Http.Connections.Client 10.0.0-preview.2.25164.1, please tell the package authors Could not detect any platforms from 'net10.0' in Microsoft.AspNetCore.SignalR.Common 10.0.0-preview.2.25164.1, please tell the package authors Could not detect any platforms from 'net10.0' in Microsoft.AspNetCore.SignalR.Client 10.0.0-preview.2.25164.1, please tell the package authors Could not detect any platforms from 'net10.0' in Microsoft.AspNetCore.SignalR.Client.Core 10.0.0-preview.2.25164.1, please tell the package authors Could not detect any platforms from 'net10.0' in Microsoft.AspNetCore.SignalR.Protocols.Json 10.0.0-preview.2.25164.1, please tell the package authors Could not detect any platforms from 'net10.0' in Microsoft.Extensions.Features 10.0.0-preview.2.25164.1, please tell the package authors Could not detect any platforms from 'net10.0' in System.IO.Pipelines 10.0.0-preview.2.25163.2, please tell the package authors Could not detect any platforms from 'net10.0' in Microsoft.Extensions.Logging.Abstractions 10.0.0-preview.2.25163.2, please tell the package authors Could not detect any platforms from 'net10.0' in Microsoft.Extensions.Options 10.0.0-preview.2.25163.2, please tell the package authors Could not detect any platforms from 'net10.0' in System.Net.ServerSentEvents 10.0.0-preview.2.25163.2, please tell the package authors Could not detect any platforms from 'net10.0' in System.Text.Json 10.0.0-preview.2.25163.2, please tell the package authors Could not detect any platforms from 'net10.0' in Microsoft.Extensions.DependencyInjection 10.0.0-preview.2.25163.2, please tell the package authors Could not detect any platforms from 'net10.0' in Microsoft.Extensions.Logging 10.0.0-preview.2.25163.2, please tell the package authors Could not detect any platforms from 'net10.0' in System.Threading.Channels 10.0.0-preview.2.25163.2, please tell the package authors Could not detect any platforms from 'net10.0' in System.CodeDom 10.0.0-preview.2.25163.2, please tell the package authors Could not detect any platforms from 'net10.0' in Microsoft.Extensions.DependencyInjection.Abstractions 10.0.0-preview.2.25163.2, please tell the package authors Could not detect any platforms from 'net10.0' in System.Diagnostics.DiagnosticSource 10.0.0-preview.2.25163.2, please tell the package authors Could not detect any platforms from 'net10.0' in Microsoft.Extensions.Primitives 10.0.0-preview.2.25163.2, please tell the package authors Could not detect any platforms from 'net10.0' in System.Text.Encodings.Web 10.0.0-preview.2.25163.2, please tell the package authors Outdated packages found: Group: Main * Argu 6.2.4 -> 6.2.5 * Expecto.FsCheck 11.0.0-alpha8 -> 11.0.0-alpha8-fscheck2 * Fable.Core 4.3 -> 4.5.0 * FsCheck 3.1 -> 2.16.6 * Microsoft.AspNetCore.App.Ref 9.0.3 -> 10.0.0-preview.2.25164.1 * Microsoft.AspNetCore.Connections.Abstractions 7.0 -> 10.0.0-preview.2.25164.1 * Microsoft.AspNetCore.Http.Connections.Client 7.0 -> 10.0.0-preview.2.25164.1 * Microsoft.AspNetCore.Http.Connections.Common 7.0 -> 10.0.0-preview.2.25164.1 * Microsoft.AspNetCore.SignalR.Client 7.0 -> 10.0.0-preview.2.25164.1 * Microsoft.AspNetCore.SignalR.Client.Core 7.0 -> 10.0.0-preview.2.25164.1 * Microsoft.AspNetCore.SignalR.Common 7.0 -> 10.0.0-preview.2.25164.1 * Microsoft.AspNetCore.SignalR.Protocols.Json 7.0 -> 10.0.0-preview.2.25164.1 * Microsoft.Bcl.AsyncInterfaces 9.0.3 -> 10.0.0-preview.2.25163.2 * Microsoft.Extensions.DependencyInjection 9.0.3 -> 10.0.0-preview.2.25163.2 * Microsoft.Extensions.DependencyInjection.Abstractions 9.0.3 -> 10.0.0-preview.2.25163.2 * Microsoft.Extensions.Features 7.0 -> 10.0.0-preview.2.25164.1 * Microsoft.Extensions.Logging 9.0.3 -> 10.0.0-preview.2.25163.2 * Microsoft.Extensions.Logging.Abstractions 9.0.3 -> 10.0.0-preview.2.25163.2 * Microsoft.Extensions.Options 9.0.3 -> 10.0.0-preview.2.25163.2 * Microsoft.Extensions.Primitives 9.0.3 -> 10.0.0-preview.2.25163.2 * System.CodeDom 9.0.3 -> 10.0.0-preview.2.25163.2 * System.Configuration.ConfigurationManager 9.0.3 -> 9.0.4 * System.Diagnostics.EventLog 9.0.3 -> 9.0.4 * System.IO.Pipelines 9.0.3 -> 10.0.0-preview.2.25163.2 * System.Management 7.0 -> 10.0.0-preview.2.25163.2 * System.Security.Cryptography.ProtectedData 9.0.3 -> 9.0.4 * System.Threading.Channels 9.0.3 -> 10.0.0-preview.2.25163.2 * System.Threading.Tasks.Extensions 4.6.1 -> 4.6.3 Total time taken: 13 seconds Paket omitted 23 warnings. You can see them in verbose mode. CheckToml / toml: /home/runner/work/polyglot/polyglot/workspace/Cargo.toml chat_contract_tests ================ Name Project Compat Latest Kind Platform ---- ------- ------ ------ ---- -------- ahash 0.7.8 --- Removed Normal --- android-tzdata 0.1.1 Removed Removed Normal cfg(target_os = "android") android_system_properties 0.1.5 Removed Removed Normal cfg(target_os = "android") autocfg 1.4.0 --- Removed Build --- autocfg 1.4.0 Removed Removed Build --- bumpalo 3.16.0 --- Removed Normal --- bumpalo 3.16.0 Removed Removed Normal --- cc 1.2.4 Removed Removed Build --- cfg-if 1.0.0 --- Removed Normal --- cfg-if 1.0.0 Removed Removed Normal --- chrono 0.4.39 Removed Removed Normal --- core-foundation-sys 0.8.7 Removed Removed Normal cfg(any(target_os = "macos", target_os = "ios")) equivalent 1.0.1 Removed --- Normal --- getrandom 0.2.15 --- Removed Normal cfg(any(target_os = "linux", target_os = "android", target_os = "windows", target_os = "macos", target_os = "ios", target_os = "freebsd", target_os = "openbsd", target_os = "netbsd", target_os = "dragonfly", target_os = "solaris", target_os = "illumos", target_os = "fuchsia", target_os = "redox", target_os = "cloudabi", target_os = "haiku", target_os = "vxworks", target_os = "emscripten", target_os = "wasi")) hashbrown 0.12.3 --- 0.15.2 Normal --- hashbrown 0.15.2 0.12.3 --- Normal --- iana-time-zone 0.1.61 Removed Removed Normal cfg(unix) iana-time-zone-haiku 0.1.2 Removed Removed Normal cfg(target_os = "haiku") indexmap 1.9.3 --- 2.7.0 Normal --- indexmap 2.7.0 1.9.3 --- Normal --- jobserver 0.1.32 Removed Removed Normal --- js-sys 0.3.76 --- Removed Normal cfg(all(any(target_arch = "wasm32", target_arch = "wasm64"), target_os = "unknown")) js-sys 0.3.76 Removed Removed Normal cfg(all(target_arch = "wasm32", not(any(target_os = "emscripten", target_os = "wasi")))) js-sys 0.3.76 Removed Removed Normal cfg(all(target_arch = "wasm32", target_os = "unknown")) libc 0.2.168 --- Removed Normal cfg(unix) libc 0.2.168 Removed Removed Normal --- libc 0.2.168 Removed Removed Normal cfg(unix) libm 0.2.11 Removed Removed Normal --- log 0.4.22 --- Removed Normal --- log 0.4.22 Removed Removed Normal --- near-sandbox-utils 0.8.0 0.9.0 0.9.0 Build --- num-traits 0.2.19 Removed Removed Normal --- once_cell 1.20.2 --- Removed Normal --- once_cell 1.20.2 --- Removed Normal cfg(not(all(target_arch = "arm", target_os = "none"))) once_cell 1.20.2 Removed Removed Normal --- proc-macro2 1.0.92 --- Removed Normal --- proc-macro2 1.0.92 Removed Removed Normal --- quote 1.0.37 --- Removed Normal --- quote 1.0.37 Removed Removed Normal --- serde 1.0.216 Removed Removed Normal --- serde_derive 1.0.216 Removed Removed Normal --- shlex 1.3.0 Removed Removed Normal --- syn 2.0.90 --- Removed Normal --- syn 2.0.90 Removed Removed Normal --- unicode-ident 1.0.14 --- Removed Normal --- unicode-ident 1.0.14 Removed Removed Normal --- version_check 0.9.5 --- Removed Build --- wasi 0.11.0+wasi-snapshot-preview1 --- Removed Normal cfg(target_os = "wasi") wasm-bindgen 0.2.99 --- Removed Normal --- wasm-bindgen 0.2.99 --- Removed Normal cfg(all(any(target_arch = "wasm32", target_arch = "wasm64"), target_os = "unknown")) wasm-bindgen 0.2.99 Removed Removed Normal --- wasm-bindgen 0.2.99 Removed Removed Normal cfg(all(target_arch = "wasm32", not(any(target_os = "emscripten", target_os = "wasi")))) wasm-bindgen 0.2.99 Removed Removed Normal cfg(all(target_arch = "wasm32", target_os = "unknown")) wasm-bindgen-backend 0.2.99 --- Removed Normal --- wasm-bindgen-backend 0.2.99 Removed Removed Normal --- wasm-bindgen-macro 0.2.99 --- Removed Normal --- wasm-bindgen-macro 0.2.99 Removed Removed Normal --- wasm-bindgen-macro-support 0.2.99 --- Removed Normal --- wasm-bindgen-macro-support 0.2.99 Removed Removed Normal --- wasm-bindgen-shared 0.2.99 --- Removed Normal --- wasm-bindgen-shared 0.2.99 Removed Removed Normal --- windows-core 0.52.0 Removed Removed Normal cfg(target_os = "windows") windows-targets 0.52.6 Removed Removed Normal --- windows-targets 0.52.6 Removed Removed Normal cfg(windows) windows_aarch64_gnullvm 0.52.6 Removed Removed Normal aarch64-pc-windows-gnullvm windows_aarch64_msvc 0.52.6 Removed Removed Normal cfg(all(target_arch = "aarch64", target_env = "msvc", not(windows_raw_dylib))) windows_i686_gnu 0.52.6 Removed Removed Normal cfg(all(target_arch = "x86", target_env = "gnu", not(target_abi = "llvm"), not(windows_raw_dylib))) windows_i686_gnullvm 0.52.6 Removed Removed Normal i686-pc-windows-gnullvm windows_i686_msvc 0.52.6 Removed Removed Normal cfg(all(target_arch = "x86", target_env = "msvc", not(windows_raw_dylib))) windows_x86_64_gnu 0.52.6 Removed Removed Normal cfg(all(target_arch = "x86_64", target_env = "gnu", not(target_abi = "llvm"), not(windows_raw_dylib))) windows_x86_64_gnullvm 0.52.6 Removed Removed Normal x86_64-pc-windows-gnullvm windows_x86_64_msvc 0.52.6 Removed Removed Normal cfg(all(any(target_arch = "x86_64", target_arch = "arm64ec"), target_env = "msvc", not(windows_raw_dylib))) CheckToml / toml: /home/runner/work/polyglot/polyglot/apps/chat/contract/Cargo.toml error: failed to parse manifest at `/home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/crypto-common-0.2.0-rc.2/Cargo.toml` Caused by: feature `edition2024` is required The package requires the Cargo feature called `edition2024`, but that feature is not stabilized in this version of Cargo (1.81.0). Consider trying a more recent nightly release. See https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#edition-2024 for more information about the status of this feature. # Invoke-Block / $retry: 1/1 / $Location: / Get-Location: /home/runner/work/polyglot/polyglot/scripts / $OnError: Continue / $exitcode: 1 / $Error: '' / $ScriptBlock: 'cargo outdated -m $toml @_args' CheckToml / toml: /home/runner/work/polyglot/polyglot/apps/chat/contract/tests/Cargo.toml error: failed to download `crypto-common v0.2.0-rc.2` Caused by: unable to get packages from source Caused by: failed to parse manifest at `/home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/crypto-common-0.2.0-rc.2/Cargo.toml` Caused by: feature `edition2024` is required The package requires the Cargo feature called `edition2024`, but that feature is not stabilized in this version of Cargo (1.81.0). Consider trying a more recent nightly release. See https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#edition-2024 for more information about the status of this feature. # Invoke-Block / $retry: 1/1 / $Location: / Get-Location: /home/runner/work/polyglot/polyglot/scripts / $OnError: Continue / $exitcode: 1 / $Error: '' / $ScriptBlock: 'cargo outdated -m $toml @_args' CheckToml / toml: /home/runner/work/polyglot/polyglot/apps/plot/Cargo.toml error: failed to download `crypto-common v0.2.0-rc.2` Caused by: unable to get packages from source Caused by: failed to parse manifest at `/home/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/crypto-common-0.2.0-rc.2/Cargo.toml` Caused by: feature `edition2024` is required The package requires the Cargo feature called `edition2024`, but that feature is not stabilized in this version of Cargo (1.81.0). Consider trying a more recent nightly release. See https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#edition-2024 for more information about the status of this feature. # Invoke-Block / $retry: 1/1 / $Location: / Get-Location: /home/runner/work/polyglot/polyglot/scripts / $OnError: Continue / $exitcode: 1 / $Error: '' / $ScriptBlock: 'cargo outdated -m $toml @_args' CheckJson / json: /home/runner/work/polyglot/polyglot $ npm-check-updates --target greatest Using bun Checking /home/runner/work/polyglot/polyglot/package.json @types/node ~22.10 → ~22.14 npm-check-updates ~17.1.14 → ~17.1.18 Run ncu --target greatest -u to upgrade package.json CheckJson / json: /home/runner/work/polyglot/polyglot/apps/ipfs $ npm-check-updates --target greatest Using bun Checking /home/runner/work/polyglot/polyglot/apps/ipfs/package.json @types/node ~22.10 → ~22.14 npm-check-updates ~17.1.14 → ~17.1.18 Run ncu --target greatest -u to upgrade package.json CheckJson / json: /home/runner/work/polyglot/polyglot/apps/spiral/temp/extension $ npm-check-updates --target greatest Using bun Checking /home/runner/work/polyglot/polyglot/apps/spiral/temp/extension/package.json @playwright/test 1.44.0 → 1.52.0-alpha-2025-04-10 @types/chrome ~0.0.268 → ~0.0.313 npm-check-updates ~17.1.14 → ~17.1.18 Run ncu --target greatest -u to upgrade package.json CheckJson / json: /home/runner/work/polyglot/polyglot/apps/spiral/vscode $ npm-check-updates --target greatest Using bun Checking /home/runner/work/polyglot/polyglot/apps/spiral/vscode/package.json @types/node ~22.10 → ~22.14 @types/vscode ~1.96 → ~1.99 npm-check-updates ~17.1.14 → ~17.1.18 Run ncu --target greatest -u to upgrade package.json CheckJson / json: /home/runner/work/polyglot/polyglot/deps/The-Spiral-Language/VS Code Plugin $ npm-check-updates --target greatest Checking /home/runner/work/polyglot/polyglot/deps/The-Spiral-Language/VS Code Plugin/package.json @microsoft/signalr 8.0.0 → 8.0.7 @types/node ~22.10 → ~22.14 @types/vscode ~1.95 → ~1.99 @vscode/vsce ~3.2 → ~3.3-0 esbuild ~0.24 → ~0.25 npm-check-updates ~17.1.14 → ~17.1.18 portfinder ^1.0.32 → ^1.0.35 Run ncu --target greatest -u to upgrade package.json