physicsΒΆ
InΒ [Β ]:
#!import ../../lib/fsharp/Plotting.dib
InΒ [Β ]:
//// test
open testing
init_seriesΒΆ
InΒ [Β ]:
//// test
inl x = am'.init_series -3f64 3 0.01
inl y = x |> am'.map_base math.square
"square", "x", "y", ;[ "square", x, y ]
00:00:06 d #1 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:06 v #2 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/7b7fc4c35397bb203cd73e71999e798459034face642d83ec40fb90a61bec926.svg 00:00:06 d #3 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 }
InΒ [Β ]:
//// test
inl x = am'.init_series -10f64 10 0.1
inl y_sin = x |> am'.map_base sin
inl y_cos = x |> am'.map_base cos
"sin cos", "x", "y", ;[ "sin", x, y_sin; "cos", x, y_cos ]
00:00:07 d #4 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:07 v #5 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/92923048c2357a589255fc3a1ba8375e45c2d4a0a29d12fd266f7c935f7a46fa.svg 00:00:07 d #6 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 }
InΒ [Β ]:
//// test
inl y_pos y0 vy0 ay t =
y0 + vy0 * t + ay * (t |> math.square) / 2
inl x = am'.init_series 0f64 5 0.01
inl y = x |> am'.map_base (y_pos 0 20 -9.8)
"projectile motion", "time (s)", "", ;[ "height of projectile (m)", x, y ]
00:00:07 d #7 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:07 v #8 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/9ba10ae80d4645862b925ee46c6c11acaddaeeaef0ca08c6bf4f906b08df5b19.svg 00:00:07 d #9 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 }
velocity_cfΒΆ
InΒ [Β ]:
type mass = f64
type time = f64
type position = f64
type velocity = f64
type force = f64
type velocity_cf = mass -> velocity -> list force -> (time -> velocity)
inl velocity_cf m v0 fs =
inl f_net = fs |> listm'.sum
inl a0 = f_net / m
inl v t = v0 + a0 * t
v
InΒ [Β ]:
//// test
velocity_cf 0.1f64 0.6 [ 0.04; -0.08 ] 0
|> _assert_eq 0.6
velocity_cf 0.1f64 0.6 [ 0.04; -0.08 ] 1
|> _assert_eq 0.2
__assert_eq / actual: 0.6 / expected: 0.6 __assert_eq / actual: 0.2 / expected: 0.2
InΒ [Β ]:
//// test
inl x = am'.init_series 0f64 4 0.1
inl y = x |> am'.map_base (velocity_cf 0.1f64 0.6 [ 0.04; -0.08 ])
"car on an air track", "time (s)", "", ;[ "velocity of car (m/s)", x, y ]
00:00:07 d #10 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:07 v #11 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/ca28324d0914f6213d0165ae9c1e93d26d3b9e674acc73e0947a72dfaf617897.svg 00:00:07 d #12 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 }
derivativeΒΆ
InΒ [Β ]:
type derivative = (f64 -> f64) -> f64 -> f64
inl derivative dt : derivative =
fun x t =>
(x (t + dt / 2) - x (t - dt / 2)) / dt
InΒ [Β ]:
//// test
derivative 1 (fun x => x ** 4 / 4) 1 - 1
|> _assert_approx_eq None 0.25
derivative 0.001 (fun x => x ** 4 / 4) 1 - 1
|> _assert_approx_eq None 0.0000002499998827953931
derivative 0.000001 (fun x => x ** 4 / 4) 1 - 1
|> _assert_approx_eq None 0.000000000001000088900582341
derivative 0.000000001 (fun x => x ** 4 / 4) 1 - 1
|> _assert_approx_eq None 0.00000008274037099909037
derivative 0.000000000001 (fun x => x ** 4 / 4) 1 - 1
|> _assert_approx_eq None 0.00008890058234101161
derivative 0.000000000000001 (fun x => x ** 4 / 4) 1 - 1
|> _assert_approx_eq None -0.0007992778373592246
derivative 0.000000000000000001 (fun x => x ** 4 / 4) 1 - 1
|> _assert_approx_eq None -1
__assert_approx_eq / actual: 0.25 / expected: 0.25 __assert_approx_eq / actual: 2.499998828e-07 / expected: 2.499998828e-07 __assert_approx_eq / actual: 1.000088901e-12 / expected: 1.000088901e-12 __assert_approx_eq / actual: 8.2740371e-08 / expected: 8.2740371e-08 __assert_approx_eq / actual: 8.890058234e-05 / expected: 8.890058234e-05 __assert_approx_eq / actual: -0.0007992778374 / expected: -0.0007992778374 __assert_approx_eq / actual: -1.0 / expected: -1.0
integrationΒΆ
InΒ [Β ]:
type integration = (f64 -> f64) -> f64 -> f64 -> f64
inl integral dt : integration =
fun f a b =>
inl rec loop t y =
if t < b
then loop (t + dt) (y + f t * dt)
else t, y
loop (a + dt / 2) 0
|> snd
InΒ [Β ]:
//// test
integral 0.01 math.square 0 1
|> _assert_approx_eq None 0.33332500000000004
__assert_approx_eq / actual: 0.333325 / expected: 0.333325
InΒ [Β ]:
inl integral' dt : integration =
fun f a b =>
listm'.init_series (a + dt / 2) (b - dt / 2) dt
|> listm.map (f >> (*) dt)
|> listm'.sum
InΒ [Β ]:
//// test
integral' 0.1 math.square 0 1
|> _assert_approx_eq None (integral 0.1 math.square 0 1)
__assert_approx_eq / actual: 0.3325 / expected: 0.3325
InΒ [Β ]:
inl integral'' dt : integration =
fun f x y =>
am'.init_series (x + dt / 2) (y - dt / 2) dt
|> fun x => a x : _ int _
|> am.map (f >> (*) dt)
|> am'.sum
InΒ [Β ]:
//// test
integral'' 0.01 math.square 0 1
|> _assert_approx_eq None (integral 0.01 math.square 0 1)
__assert_approx_eq / actual: 0.333325 / expected: 0.333325
anti_derivativeΒΆ
InΒ [Β ]:
inl anti_derivative dt v0 a t =
v0 + integral' dt a 0 t
velocity_ftΒΆ
InΒ [Β ]:
type velocity_ft = mass -> velocity -> list (time -> force) -> (time -> velocity)
inl velocity_ft dt : velocity_ft =
fun m v0 fs =>
inl f_net t = fs |> listm.map (fun f => f t) |> listm'.sum
inl a t = f_net t / m
anti_derivative dt v0 a
position_ftΒΆ
InΒ [Β ]:
type position_ft = mass -> position -> velocity -> list (time -> force) -> (time -> position)
inl position_ft dt : position_ft =
fun m x0 v0 fs =>
velocity_ft dt m v0 fs
|> anti_derivative dt x0
InΒ [Β ]:
//// test
inl pedal_coast (t : time) : force =
inl t_cycle = 20
inl n_complete : i32 = t / t_cycle |> conv
inl remainder = t - conv n_complete * t_cycle
if remainder > 0 && remainder < 10
then 10
else 0
inl x = am'.init_series -5f64 45 0.1
inl y = x |> am'.map_base pedal_coast
"child pedaling then coasting", "time (s)", "", ;[ "force on bike (N)", x, y ]
00:00:09 d #13 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:09 v #14 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/0ac10ed4fc31e5733d3eadbbffbf047568e7cb8eed5922ef2828dbad94721326.svg 00:00:09 d #15 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 }
InΒ [Β ]:
//// test
inl x = am'.init_series -5 45 1
inl y = x |> am'.map_base (position_ft 0.1f64 20 0 0 [ pedal_coast ])
"child pedaling then coasting", "time (s)", "", ;[ "position of bike (m)", x, y ]
00:00:09 d #16 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:09 v #17 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/111e334258a3fc6398b55a8d561905d49cd0648a39dd06c1856b1cb0e8a9546c.svg 00:00:09 d #18 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 }
velocity_fvΒΆ
InΒ [Β ]:
inl newton_second_v m fs v0 =
fs |> listm.map (fun f => f v0) |> listm'.sum |> fun x => x / m
inl update_velocity dt m fs v0 =
v0 + newton_second_v m fs v0 * dt
inl velocity_fv dt m v0 fs t =
stream.iterate (update_velocity dt m fs) v0
|> stream.try_item (t / dt |> math.round |> abs)
|> optionm'.default_value 0
InΒ [Β ]:
inl f_air drag rho area v =
-drag * rho * area * abs v * v / 2
InΒ [Β ]:
//// test
inl x = am'.init_series 0 60 0.5
inl y = x |> am'.map_base (velocity_fv 1 70 0f64 [ fun _ => 100; f_air 2 1.225 0.6 ])
"bike velocity", "time (s)", "", ;[ "velocity of bike (m/s)", x, y ]
00:00:10 d #19 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:10 v #20 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/b1c46a76c7d245173909491beb9557fd28414b9dde459da20a63459014535a90.svg 00:00:10 d #21 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 }
velocity_ftvΒΆ
InΒ [Β ]:
inl newton_second_tv m fs (t, v0) =
inl f_net = fs |> listm.map (fun f => f (t, v0)) |> listm'.sum
inl acc = f_net / m
1, acc
inl update_tv dt m fs (t, v0) =
inl dtdt, dvdt = newton_second_tv m fs (t, v0)
t + dtdt * dt, v0 + dvdt * dt
inl velocity_ftv dt m tv0 fs t =
stream.iterate (join update_tv dt m fs) tv0
|> stream.try_item (t / dt |> math.round |> abs)
|> optionm.map snd
|> optionm'.default_value 0
InΒ [Β ]:
//// test
inl x = am'.init_series 0 100 0.1
inl y =
x
|> am'.map_base (
velocity_ftv 0.1 20 (dyn (0, 0)) [ fun (t, _) => pedal_coast t; fun (_, v) => f_air 2 1.225 0.5 v ]
)
"pedaling and coasting with air", "time (s)", "", ;[ "velocity of bike (m/s)", x, y ]
00:00:10 d #22 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:10 v #23 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/7ce179a0676b6aeb0873f38a984563540676d6a701ce833dc3c5e65d8ab7def7.svg 00:00:10 d #24 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 }
velocity_ftxvΒΆ
InΒ [Β ]:
nominal state_1d = time * position * velocity
nominal rrr = f64 * f64 * f64
inl newton_second_1d m fs (state_1d (t, x0, v0)) =
inl f_net = fs |> listm.map (fun f => f (state_1d (t, x0, v0))) |> listm'.sum
inl acc = f_net / m
rrr (1f64, v0, acc)
inl euler_1d dt deriv (state_1d (t0, x0, v0) as t) =
inl (rrr (_, _, dvdt)) = deriv t
inl t1 = t0 + dt
inl x1 = x0 + v0 * dt
inl v1 = v0 + dvdt * dt
state_1d (t1, x1, v1)
inl update_txv dt m fs =
newton_second_1d m fs |> euler_1d dt
inl states_txv dt m txv0 fs =
seq.iterate_ (update_txv dt m fs) txv0
inl velocity_1d sts t =
inl (state_1d (t0, _, _)) = sts 0
inl (state_1d (t1, _, _)) = sts 1
inl dt = t1 - t0
inl num_steps = t / dt |> math.round |> abs
inl (state_1d (_, _, v0)) = sts num_steps
v0
inl velocity_ftxv dt m txv0 fs =
states_txv dt m txv0 fs |> velocity_1d
inl position_1d sts t =
inl (state_1d (t0, _, _)) = sts 0
inl (state_1d (t1, _, _)) = sts 1
inl dt = t1 - t0
inl num_steps = t / dt |> math.round |> abs
inl (state_1d (_, x0, _)) = sts num_steps
x0
inl position_ftxv dt m txv0 fs =
states_txv dt m txv0 fs |> position_1d
inl spring_force k (state_1d (_, x0, _)) =
-k * x0
InΒ [Β ]:
//// test
inl damped_ho_forces () =
[
spring_force 0.8
fun (state_1d (_, _, v0)) => f_air 2 1.225 (pi * math.square 0.02) v0
fun _ => -0.0027 * 9.80665
]
inl damped_ho_states () =
states_txv 0.001 0.0027 (state_1d (0, 0.1, 0)) (damped_ho_forces ())
inl pingpong_position t =
position_ftxv 0.001 0.0027 (state_1d (0, 0.1, 0)) (damped_ho_forces ()) t
inl x = am'.init_series 0 3 0.01
inl y = x |> am'.map_base pingpong_position
"ping pong ball on a slinky", "time (s)", "", ;[ "position (m)", x, y ]
00:00:11 d #25 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:11 v #26 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/105ea7be2f329a89809543cbc25878ca2117d619b4ff6fdec5ae9a8079ac700b.svg 00:00:11 d #27 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 }
InΒ [Β ]:
//// test
inl pingpong_velocity t =
velocity_ftxv 0.001 0.0027 (state_1d (0, 0.1, 0)) (damped_ho_forces ()) t
inl x = am'.init_series 0 3 0.01
inl y = x |> am'.map_base pingpong_velocity
"ping pong ball on a slinky", "time (s)", "", ;[ "velocity (m/s)", x, y ]
00:00:11 d #28 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:11 v #29 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/6e1af89de9d77d914991731dc22cdee69efe252557400e2aeaa7feb3756058da.svg 00:00:11 d #30 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 }
shiftΒΆ
InΒ [Β ]:
type update_function s = s -> s
type differential_equation s ds = s -> ds
type numerical_method s ds = differential_equation s ds -> update_function s
inl solver method =
method >> seq.iterate
inl solver' method =
method >> seq.iterate'
inl solver_ method =
method >> seq.iterate_
inl euler_cromer_1d dt deriv (state_1d (t0, x0, v0) as t) =
inl (rrr (_, _, dvdt)) = deriv t
inl t1 = t0 + dt
inl v1 = v0 + dvdt * dt
inl x1 = x0 + v1 * dt
state_1d (t1, x1, v1)
inl update_txv_ec dt m fs =
euler_cromer_1d dt (newton_second_1d m fs)
prototype (+++) ds : ds -> ds -> ds
prototype scale ds : f64 -> ds -> ds
instance (+++) rrr = fun (rrr (dtdt0, dxdt0, dvdt0)) (rrr (dtdt1, dxdt1, dvdt1)) =>
rrr (dtdt0 + dtdt1, dxdt0 + dxdt1, dvdt0 + dvdt1)
instance scale rrr = fun w (rrr (dtdt0, dxdt0, dvdt0)) =>
rrr (w * dtdt0, w * dxdt0, w * dvdt0)
prototype shift s : forall ds. f64 -> ds -> s -> s
instance shift state_1d = fun dt ds (state_1d (t, x, v)) =>
inl dtdt, dxdt, dvdt =
real
match ds with
| rrr x => x
| state_1d x => x
state_1d (t + dtdt * dt, x + dxdt * dt, v + dvdt * dt)
inl euler dt deriv st0 =
shift dt (deriv st0) st0
inl runge_kutta_4 dt deriv st0 =
inl m0 = deriv st0
inl m1 = deriv (shift (dt / 2) m0 st0)
inl m2 = deriv (shift (dt / 2) m1 st0)
inl m3 = deriv (shift dt m2 st0)
shift (dt / 6) (m0 +++ m1 +++ m1 +++ m2 +++ m2 +++ m3) st0
inl exponential (_, x0, v0) =
1f64, v0, x0
inl of_state_1d (state_1d (t, x, v)) =
t, x, v
InΒ [Β ]:
//// test
solver (euler 0.01) (of_state_1d >> exponential >> state_1d) (state_1d (0, 1, 1)) 800i32
|> _assert_eq (state_1d (7.999999999999874, 2864.8311229272326, 2864.8311229272326))
solver (euler_cromer_1d 0.1) (of_state_1d >> exponential >> rrr) (state_1d (0, 1, 1)) 80i32
|> _assert_eq (state_1d (7.999999999999988, 3043.379244966009, 2895.0121485099035))
solver (runge_kutta_4 1) (of_state_1d >> exponential >> rrr) (state_1d (0, 1, 1)) 8i32
|> _assert_eq (state_1d (8.0, 2894.789038540849, 2894.789038540849))
__assert_eq / actual: struct (8.0, 2864.831123, 2864.831123) / expected: struct (8.0, 2864.831123, 2864.831123) __assert_eq / actual: struct (8.0, 3043.379245, 2895.012149) / expected: struct (8.0, 3043.379245, 2895.012149) __assert_eq / actual: struct (8.0, 2894.789039, 2894.789039) / expected: struct (8.0, 2894.789039, 2894.789039)
vecΒΆ
InΒ [Β ]:
type vec =
{
x : f64
y : f64
z : f64
}
inl vec x y z : vec =
{ x y z }
InΒ [Β ]:
//// test
vec 1 2 3 .z
|> _assert_eq 3
__assert_eq / actual: 3.0 / expected: 3.0
constsΒΆ
InΒ [Β ]:
inl i_hat () = vec 1 0 0
inl j_hat () = vec 0 1 0
inl k_hat () = vec 0 0 1
inl zero_vec () = vec 0 0 0
^+^ΒΆ
InΒ [Β ]:
inl (^+^) (a : vec) (b : vec) =
vec (a.x + b.x) (a.y + b.y) (a.z + b.z)
InΒ [Β ]:
//// test
vec 1 2 3 ^+^ vec 4 5 6
|> _assert_eq (vec 5 7 9)
__assert_eq / actual: struct (5.0, 7.0, 9.0) / expected: struct (5.0, 7.0, 9.0)
sum_vecΒΆ
InΒ [Β ]:
inl sum_vec vs =
vs |> listm.fold (^+^) (zero_vec ())
InΒ [Β ]:
//// test
[ vec 1 2 3; vec 4 5 6 ]
|> sum_vec
|> _assert_eq (vec 5 7 9)
__assert_eq / actual: struct (5.0, 7.0, 9.0) / expected: struct (5.0, 7.0, 9.0)
*^ΒΆ
InΒ [Β ]:
inl (*^) c { x y z } =
vec (c * x) (c * y) (c * z)
InΒ [Β ]:
//// test
5 *^ vec 1 2 3
|> _assert_eq (vec 5 10 15)
__assert_eq / actual: struct (5.0, 10.0, 15.0) / expected: struct (5.0, 10.0, 15.0)
InΒ [Β ]:
//// test
3 *^ i_hat () ^+^ 4 *^ k_hat ()
|> _assert_eq (vec 3 0 4)
__assert_eq / actual: struct (3.0, 0.0, 4.0) / expected: struct (3.0, 0.0, 4.0)
^*ΒΆ
InΒ [Β ]:
inl (^*) v c =
(*^) c v
InΒ [Β ]:
//// test
vec 1 2 3 ^* 5
|> _assert_eq (vec 5 10 15)
__assert_eq / actual: struct (5.0, 10.0, 15.0) / expected: struct (5.0, 10.0, 15.0)
^/ΒΆ
InΒ [Β ]:
inl (^/) { x y z } c =
vec (x / c) (y / c) (z / c)
InΒ [Β ]:
//// test
vec 1 2 3 ^/ 5
|> _assert_eq (vec 0.2 0.4 0.6)
__assert_eq / actual: struct (0.2, 0.4, 0.6) / expected: struct (0.2, 0.4, 0.6)
negate_vecΒΆ
InΒ [Β ]:
inl negate_vec v =
v ^* -1
InΒ [Β ]:
//// test
vec 1 2 3
|> negate_vec
|> _assert_eq (vec -1 -2 -3)
__assert_eq / actual: struct (-1.0, -2.0, -3.0) / expected: struct (-1.0, -2.0, -3.0)
^-^ΒΆ
InΒ [Β ]:
inl (^-^) a b =
a ^+^ (negate_vec b)
InΒ [Β ]:
//// test
vec 1 2 3 ^-^ vec 4 5 6
|> _assert_eq (vec -3 -3 -3)
__assert_eq / actual: struct (-3.0, -3.0, -3.0) / expected: struct (-3.0, -3.0, -3.0)
<.>ΒΆ
InΒ [Β ]:
inl (<.>) { x = ax y = ay z = az } { x = bx y = by z = bz } =
ax * bx + ay * by + az * bz
InΒ [Β ]:
//// test
vec 1 2 3 <.> vec 4 5 6
|> _assert_eq 32
__assert_eq / actual: 32.0 / expected: 32.0
><ΒΆ
InΒ [Β ]:
inl (><) (a : vec) (b : vec) =
vec
(a.y * b.z - a.z * b.y)
(a.z * b.x - a.x * b.z)
(a.x * b.y - a.y * b.x)
InΒ [Β ]:
//// test
vec 1 2 3 >< vec 4 5 6
|> _assert_eq (vec -3 6 -3)
__assert_eq / actual: struct (-3.0, 6.0, -3.0) / expected: struct (-3.0, 6.0, -3.0)
magnitudeΒΆ
InΒ [Β ]:
inl magnitude v =
v <.> v |> sqrt
InΒ [Β ]:
//// test
vec 1 2 3
|> magnitude
|> _assert_approx_eq None 3.7416573867739413
__assert_approx_eq / actual: 3.741657387 / expected: 3.741657387
v1ΒΆ
InΒ [Β ]:
inl v1 t =
2 *^ (t ** 2 *^ i_hat () ^+^ 3 *^ (t ** 3 *^ j_hat () ^+^ t ** 4 *^ k_hat ()))
InΒ [Β ]:
//// test
v1 1
|> _assert_eq (vec 2 6 6)
__assert_eq / actual: struct (2.0, 6.0, 6.0) / expected: struct (2.0, 6.0, 6.0)
vec_derivativeΒΆ
InΒ [Β ]:
type vec_derivative = (f64 -> vec) -> f64 -> vec
inl vec_derivative dt : vec_derivative =
fun v t =>
(v (t + dt / 2) ^-^ v (t - dt / 2)) ^/ dt
InΒ [Β ]:
//// test
vec_derivative 0.01 v1 3 .x
|> _assert_approx_eq None (derivative 0.01 (v1 >> fun v => v.x) 3)
__assert_approx_eq / actual: 12.0 / expected: 12.0
states_psΒΆ
InΒ [Β ]:
nominal particle_state =
{
mass : f64
charge : f64
time : f64
pos_vec : vec
velocity : vec
}
inl default_particle_state () : particle_state =
particle_state {
mass = 1
charge = 0
time = 0
pos_vec = zero_vec ()
velocity = zero_vec ()
}
type one_body_force = particle_state -> vec
nominal d_particle_state =
{
dmdt : f64
dqdt : f64
dtdt : f64
drdt : vec
dvdt : vec
}
inl newton_second_ps (fs : list one_body_force) (st : particle_state) : d_particle_state =
inl f_net = fs |> listm.map (fun f => f st) |> sum_vec
d_particle_state {
dmdt = 0
dqdt = 0
dtdt = 1
drdt = st.velocity
dvdt = f_net ^/ st.mass
}
inl earth_surface_gravity (st : particle_state) =
inl g = 9.80665
-st.mass * g *^ k_hat ()
inl air_resistance drag rho area (st : particle_state) =
-0.5 * drag * rho * area * magnitude st.velocity *^ st.velocity
inl euler_cromer_ps dt (deriv : particle_state -> d_particle_state) (particle_state st) =
inl dst : d_particle_state = deriv (particle_state st)
inl v' = st.velocity ^+^ dst.dvdt ^* dt
particle_state { st with
time = st.time + dt
pos_vec = st.pos_vec ^+^ v' ^* dt
velocity = st.velocity ^+^ dst.dvdt ^* dt
}
instance (+++) d_particle_state = fun (dps : d_particle_state) (dps' : d_particle_state) =>
d_particle_state {
dmdt = dps.dmdt + dps'.dmdt
dqdt = dps.dqdt + dps'.dqdt
dtdt = dps.dtdt + dps'.dtdt
drdt = dps.drdt ^+^ dps'.drdt
dvdt = dps.dvdt ^+^ dps'.dvdt
}
instance scale d_particle_state = fun w (dps : d_particle_state) =>
d_particle_state {
dmdt = w * dps.dmdt
dqdt = w * dps.dqdt
dtdt = w * dps.dtdt
drdt = w *^ dps.drdt
dvdt = w *^ dps.dvdt
}
instance shift particle_state = fun dt dps (particle_state st) =>
inl (d_particle_state dps) =
real
match dps with
| d_particle_state _ => dps
particle_state { st with
time = st.time + dps.dtdt * dt
pos_vec = st.pos_vec ^+^ dps.drdt ^* dt
velocity = st.velocity ^+^ dps.dvdt ^* dt
}
inl states_ps (method : numerical_method particle_state d_particle_state) : _ -> _ -> i32 -> particle_state =
newton_second_ps >> method >> seq.iterate_
inl z_ge0 sts =
sts
|> seq.take_while_ (fun (particle_state st) _ => st.pos_vec.z >= 0)
inl trajectory sts =
sts |> listm.map (fun (particle_state st) => st.pos_vec.y, st.pos_vec.z)
InΒ [Β ]:
//// test
inl update_ps (method : numerical_method particle_state d_particle_state) =
newton_second_ps >> method
inl position_ps (method : numerical_method particle_state d_particle_state) fs st t =
inl states : i32 -> particle_state = states_ps method fs st
inl dt = (states 1).time - (states 0).time
inl num_steps = t / dt |> math.round |> abs
inl st1 = solver' method (newton_second_ps fs) st num_steps
st1.pos_vec
inl sun_gravity (st : particle_state) : vec =
inl big_g = 0.0000000000667408
inl sun_mass = 1988480000000000000000000000000
-big_g * sun_mass * st.mass *^ st.pos_vec ^/ magnitude st.pos_vec ** 3
inl wind_force v_wind drag rho area (st : particle_state) =
inl v_rel = st.velocity ^-^ v_wind
-0.5 * drag * rho * area * magnitude v_rel *^ v_rel
inl rock_state () =
inl (particle_state default_particle_state') = default_particle_state ()
particle_state { default_particle_state' with
mass = 2
velocity = vec 3 0 4
}
inl halley_update dt =
update_ps (euler_cromer_ps dt) [ sun_gravity ]
inl halley_initial () =
inl (particle_state default_particle_state') = default_particle_state ()
particle_state { default_particle_state' with
mass = 220000000000000
pos_vec = 87660000000 *^ i_hat ()
velocity = 54569 *^ j_hat ()
}
InΒ [Β ]:
//// test
inl baseball_forces () =
inl area = pi * (0.074 / 2) ** 2
[
earth_surface_gravity
air_resistance 0.3 1.225 area
]
inl baseball_trajectory dt v0 theta_deg =
inl theta_rad = theta_deg * pi / 180
inl vy0 = v0 * cos theta_rad
inl vz0 = v0 * sin theta_rad
inl initial_state =
particle_state {
mass = 0.145
charge = 0
time = 0
pos_vec = zero_vec ()
velocity = vec 0 vy0 vz0
}
states_ps (euler_cromer_ps dt) (baseball_forces ()) initial_state
>> Some
|> z_ge0
|> trajectory
inl baseball_range dt v0 theta_deg =
baseball_trajectory dt v0 theta_deg
|> listm.fold (fun _ (y, _) => y) 0
inl x = am'.init_series 10 80 1
inl y = x |> am'.map_base (baseball_range 0.01 45)
"range for a baseball hit at 45 m/s",
"angle above horizontal (degrees)",
"",
;[ "horizontal range (m)", x, y ]
00:00:16 d #31 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:16 v #32 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/8a3ef67f953e2a32e5071e8c55259d45275b376bbff5ccca65f5dad1aeac78c0.svg 00:00:16 d #33 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 }
InΒ [Β ]:
//// test
inl best_angle (min, max) =
let rec loop theta_deg (best_range, best_theta_deg) =
if theta_deg > max
then best_range, best_theta_deg
else
inl range = baseball_range 0.01 45 theta_deg
loop
(theta_deg + 1)
(if range > best_range
then range, theta_deg
else best_range, best_theta_deg)
loop min (0f64, min)
best_angle (30f64, 60f64)
|> _assert_eq (116.77499158246208, 41)
__assert_eq / actual: struct (116.7749916, 41.0) / expected: struct (116.7749916, 41.0)
relativity_psΒΆ
InΒ [Β ]:
inl relativity_ps fs (st : particle_state) =
inl f_net = fs |> listm.map (fun f => f st) |> sum_vec
inl c = 299792458
inl u = st.velocity ^/ c
inl acc = sqrt (1 - (u <.> u)) *^ (f_net ^-^ (f_net <.> u) *^ u) ^/ st.mass
d_particle_state {
dmdt = 0
dqdt = 0
dtdt = 1
drdt = st.velocity
dvdt = acc
}
InΒ [Β ]:
//// test
inl year = 365.25 * 24 * 60 * 60
inl c = 299792458
inl ~method = runge_kutta_4 100000
inl forces = [ fun _ => 10 *^ i_hat () ]
inl (particle_state default_particle_state') = default_particle_state ()
inl initial_state =
particle_state { default_particle_state' with
mass = 1
}
inl newton_states = solver_ method (newton_second_ps forces) initial_state
inl relativity_states = solver_ method (relativity_ps forces) initial_state
inl newton_x, newton_y =
newton_states
>> Some
|> seq.take_while_ (fun (particle_state st) (_ : i32) => st.time <= year)
|> listm.map (fun (particle_state st) => st.time / year, st.velocity.x / c)
|> listm'.unzip
inl _, relativity_y =
relativity_states
>> Some
|> seq.take_while_ (fun (particle_state st) (_ : i32) => st.time <= year)
|> listm.map (fun (particle_state st) => st.time / year, st.velocity.x / c)
|> listm'.unzip
inl newton_x = newton_x |> listm'.box |> listm'.to_array'
inl newton_y = newton_y |> listm'.box |> listm'.to_array'
inl relativity_y = relativity_y |> listm'.box |> listm'.to_array'
"response to a constant force",
"time (years)",
"velocity (multiples of c)",
;[
"newtonian", newton_x, newton_y
"relativistic", newton_x, relativity_y
]
00:00:17 d #34 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:17 v #35 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/5e278a736af1809d8dcdc13453b35993d336214d079bbcd9b2cf063181d8e59d.svg 00:00:17 d #36 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 }
InΒ [Β ]:
inl uniform_lorentz_force v_e v_b (st : particle_state) =
st.charge *^ (v_e ^+^ st.velocity >< v_b)
InΒ [Β ]:
//// test
inl c : f64 = 299792458
inl ~method = runge_kutta_4 0.000000001
inl forces = [ uniform_lorentz_force (zero_vec ()) (k_hat ()) ]
inl (particle_state default_particle_state') = default_particle_state ()
inl initial_state =
particle_state { default_particle_state' with
mass = 0.000000000000000000000000001672621898
charge = 0.0000000000000000001602176621
velocity = 0.8 *^ (c *^ j_hat ())
}
inl newton_states = solver_ method (newton_second_ps forces) initial_state
inl relativity_states = solver_ method (relativity_ps forces) initial_state
inl newton_x, newton_y =
newton_states
>> Some
|> seq.take_while_ (fun (particle_state st) i => i < 100i32)
|> listm.map (fun (particle_state st) => st.pos_vec.x, st.pos_vec.y)
|> listm'.unzip
inl relativity_x, relativity_y =
relativity_states
>> Some
|> seq.take_while_ (fun (particle_state st) i => i < 165i32)
|> listm.map (fun (particle_state st) => st.pos_vec.x, st.pos_vec.y)
|> listm'.unzip
inl newton_x = newton_x |> listm'.box |> listm'.to_array'
inl newton_y = newton_y |> listm'.box |> listm'.to_array'
inl relativity_x = relativity_x |> listm'.box |> listm'.to_array'
inl relativity_y = relativity_y |> listm'.box |> listm'.to_array'
"proton in a 1-t magnetic field",
"x (m)",
"y (m)",
;[
"newtonian", newton_x, newton_y
"relativistic", relativity_x, relativity_y
]
00:00:18 d #37 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:18 v #38 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/bb8f45eff587eeea2eba0bc2ee5a7127055bf92453772b584569d1b580f6f89c.svg 00:00:18 d #39 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 }
system kinetic energy versus time 1ΒΆ
InΒ [Β ]:
//// test
inl central_force f (particle_state st1) (particle_state st2) =
inl r1 = st1.pos_vec
inl r2 = st2.pos_vec
inl r21 = r2 ^-^ r1
inl r21mag = magnitude r21
f r21mag *^ r21 ^/ r21mag
inl billiard_force k re =
inl f r =
if r >= re
then 0
else -k * (r - re)
central_force f
type force_vector = vec
type two_body_force = particle_state -> particle_state -> force_vector
union force =
| ExternalForce : i32 * one_body_force
| InternalForce : i32 * i32 * two_body_force
nominal multi_particle_state = list particle_state
nominal d_multi_particle_state = list d_particle_state
inl force_on n sts force =
match force with
| ExternalForce (n0, f_one_body) =>
if n = n0
then f_one_body
else fun _ => zero_vec ()
| InternalForce (n0, n1, f_two_body) =>
if n = n0
then f_two_body (sts |> listm'.item n1)
elif n = n1
then f_two_body (sts |> listm'.item n0)
else fun _ => zero_vec ()
inl forces_on n (multi_particle_state sts) fs =
fs |> listm.map (force_on n sts)
inl newton_second_mps fs (multi_particle_state sts) : d_multi_particle_state =
inl deriv (n, st) =
newton_second_ps (forces_on n (multi_particle_state sts) fs) st
sts |> listm'.indexed |> listm.map deriv |> d_multi_particle_state
instance (+++) d_multi_particle_state = fun (d_multi_particle_state dsts1) (d_multi_particle_state dsts2) =>
d_multi_particle_state (listm'.zip_with_ (+++) dsts1 dsts2)
instance scale d_multi_particle_state = fun w (d_multi_particle_state dsts) =>
d_multi_particle_state (dsts |> listm.map (scale w))
instance shift multi_particle_state = fun dt dsts (multi_particle_state sts) =>
inl (d_multi_particle_state dsts) =
real
match dsts with
| d_multi_particle_state _ => dsts
listm'.zip_with_ (shift dt) dsts sts |> multi_particle_state
inl euler_cromer_mps dt : numerical_method multi_particle_state d_multi_particle_state =
fun deriv mpst0 =>
inl mpst1 = euler dt deriv mpst0
inl (multi_particle_state sts0) = mpst0
inl (multi_particle_state sts1) = mpst1
sts1
|> listm'.zip_ sts0
|> listm.map (fun ((particle_state st0), (particle_state st1)) =>
particle_state {
st1 with
pos_vec = st0.pos_vec ^+^ st1.velocity ^* dt
}
)
|> multi_particle_state
inl update_mps (method : numerical_method multi_particle_state d_multi_particle_state) =
newton_second_mps >> method
inl states_mps (method : numerical_method multi_particle_state d_multi_particle_state) =
newton_second_mps >> method >> seq.iterate_
inl kinetic_energy (particle_state st) =
inl m = st.mass
inl v = magnitude st.velocity
0.5 * m * v ** 2
inl system_ke (multi_particle_state sts) =
sts |> listm.map kinetic_energy |> listm'.sum
inl linear_spring_pe k re (particle_state st1) (particle_state st2) =
inl r1 = st1.pos_vec
inl r2 = st2.pos_vec
inl r21 = r2 ^-^ r1
inl r21mag = magnitude r21
k * (r21mag - re) ** 2 / 2
inl earth_surface_gravity_pe (particle_state st) =
inl g = 9.80665
inl m = st.mass
inl z = st.pos_vec.z
m * g * z
inl two_springs_pe (multi_particle_state sts) =
inl st0 = sts |> listm'.item 0i32
inl st1 = sts |> listm'.item 1i32
linear_spring_pe 100 0.5 (default_particle_state ()) st0
+ linear_spring_pe 100 0.5 st0 st1
+ earth_surface_gravity_pe st0
+ earth_surface_gravity_pe st1
inl two_springs_me mpst =
system_ke mpst + two_springs_pe mpst
inl ball_radius () = 0.03
inl billiard_forces k =
[ InternalForce (0, 1, billiard_force k (2 * ball_radius ())) ]
inl billiard_update n_method k dt =
update_mps (n_method dt) (billiard_forces k)
inl billiard_initial () =
inl ball_mass = 0.160
inl (particle_state default_particle_state') = default_particle_state ()
multi_particle_state [
particle_state {
default_particle_state' with
mass = ball_mass
pos_vec = zero_vec ()
velocity = 0.2 *^ i_hat ()
}
particle_state {
default_particle_state' with
mass = ball_mass
pos_vec = i_hat () ^+^ 0.02 *^ j_hat ()
velocity = zero_vec ()
}
]
inl billiard_states ~n_method k dt =
states_mps (n_method dt) (billiard_forces k) (billiard_initial ())
inl billiard_states_finite n_method k dt =
billiard_states n_method k dt
>> Some
|> seq.take_while_ (fun (multi_particle_state mpst) (_ : i32) =>
(mpst |> listm'.item 0i32).time <= 10
)
inl momentum (particle_state st) =
inl m = st.mass
inl v = st.velocity
m *^ v
inl system_p (multi_particle_state sts) =
sts |> listm.map momentum |> sum_vec
inl time_ke_ec_x, time_ke_ec_y =
billiard_states_finite euler_cromer_mps 30 0.03
|> listm.map (fun (multi_particle_state mpst) =>
(mpst |> listm'.item 0i32).time, system_ke (multi_particle_state mpst)
)
|> listm'.unzip
inl time_ke_rk4_x, time_ke_rk4_y =
billiard_states_finite runge_kutta_4 30 0.03
|> listm.map (fun (multi_particle_state mpst) =>
(mpst |> listm'.item 0i32).time, system_ke (multi_particle_state mpst)
)
|> listm'.unzip
inl time_ke_ec_x = time_ke_ec_x |> listm'.box |> listm'.to_array'
inl time_ke_ec_y = time_ke_ec_y |> listm'.box |> listm'.to_array'
inl time_ke_rk4_x = time_ke_rk4_x |> listm'.box |> listm'.to_array'
inl time_ke_rk4_y = time_ke_rk4_y |> listm'.box |> listm'.to_array'
"system kinetic energy versus time",
"time (s)",
"system kinetic energy (j)",
;[
"euler-cromer", time_ke_ec_x, time_ke_ec_y
"runge-kutta 4", time_ke_rk4_x, time_ke_rk4_y
]
00:00:19 d #40 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:19 v #41 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/6c2e10892d6afcf0c02bfe44bc49895c6de5037e535b9df0fb226e37177775eb.svg 00:00:19 d #42 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 }
wave 1ΒΆ
InΒ [Β ]:
//// test
inl linear_spring k re (particle_state st1) (particle_state st2) =
inl r1 = st1.pos_vec
inl r2 = st2.pos_vec
inl r21 = r2 ^-^ r1
inl r21mag = magnitude r21
-k * (r21mag - re) *^ r21 ^/ r21mag
inl fixed_linear_spring k re r1 =
inl (particle_state default_particle_state') = default_particle_state ()
linear_spring k re (particle_state { default_particle_state' with pos_vec = r1 })
inl forces_string () =
[
ExternalForce (0, fixed_linear_spring 5384 0 (zero_vec ()))
ExternalForce (63, fixed_linear_spring 5384 0 (0.65 *^ i_hat ()))
] ++ (
listm'.init_series 0 59 1
|> listm.map (fun n => InternalForce (n, n + 1, linear_spring 5384 0))
)
inl string_update dt =
update_mps (runge_kutta_4 dt) (forces_string ())
inl string_initial_overtone n =
inl ball_mass = 0.0008293 * 0.65 / 64
inl (particle_state default_particle_state') = default_particle_state ()
listm'.init_series 0.01 0.64 0.01
|> listm.map (fun x =>
inl y = 0.005 * sin (conv n * pi * x / 0.65)
particle_state {
default_particle_state' with
mass = ball_mass
pos_vec = x *^ i_hat () ^+^ y *^ j_hat ()
velocity = zero_vec ()
}
)
|> multi_particle_state
inl string_initial_pluck () =
inl ball_mass = 0.0008293 * 0.65 / 64
inl (particle_state default_particle_state') = default_particle_state ()
listm'.init_series 0.01 0.64 0.01
|> listm.map (fun x =>
inl y =
inl n = if x <= 0.51 then 0 else 0.65
0.005 / (0.51 - n) * (x - n)
particle_state {
default_particle_state' with
mass = ball_mass
pos_vec = x *^ i_hat () ^+^ y *^ j_hat ()
velocity = zero_vec ()
}
)
|> multi_particle_state
let main () =
inl ~frames = listm'.init_series 0 9 1f64
inl initial_state = string_initial_overtone 3i32
inl frames =
frames
|> listm.map (fun n =>
inl (multi_particle_state sts) =
seq.iterate' (string_update 0.000025) initial_state |> fun f => f 0f64
inl rs =
[ zero_vec () ]
++ (sts |> listm.map (fun (particle_state st) => st.pos_vec))
++ [ 0.65 *^ i_hat () ]
inl x, y =
rs
|> listm.map (fun r => r.x, r.y)
|> listm'.unzip
inl x = x |> listm'.box |> listm'.to_array'
inl y = y |> listm'.box |> listm'.to_array'
x, y
)
|> listm'.box |> listm'.to_array'
inl n = 0i32
inl x, y = a frames |> am'.index n
"wave",
"position (m)",
"displacement (m)",
;[
($'$"{!n}"' : string), x, y
]
00:00:19 d #43 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:19 v #44 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/c7418df0ce04ccaab7c4d85e07df47a9669ac0ab4f1d50ec3d2fa160947066c1.svg 00:00:19 d #45 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 }
system kinetic energy versus time 2ΒΆ
InΒ [Β ]:
//// test
inl central_force f (particle_state st1) (particle_state st2) =
inl r1 = st1.pos_vec
inl r2 = st2.pos_vec
inl r21 = r2 ^-^ r1
inl r21mag = magnitude r21
f r21mag *^ r21 ^/ r21mag
inl billiard_force k re =
inl f r =
if r >= re
then 0
else -k * (r - re)
central_force f
type force_vector = vec
type two_body_force = particle_state -> particle_state -> force_vector
union force t =
| ExternalForce : t * one_body_force
| InternalForce : t * t * two_body_force
nominal multi_particle_state = stream.stream particle_state
nominal d_multi_particle_state = stream.stream d_particle_state
inl force_on n s force =
match force with
| ExternalForce (n0, f_one_body) =>
if n = n0
then f_one_body
else fun _ => zero_vec ()
| InternalForce (n0, n1, f_two_body) =>
if n = n0
then s |> stream.try_item n1 |> optionm.map f_two_body
elif n = n1
then s |> stream.try_item n0 |> optionm.map f_two_body
else None
|> optionm'.default_value (fun _ => zero_vec ())
inl forces_on n (multi_particle_state sts) fs =
fs
|> listm.map (force_on n sts)
inl newton_second_mps fs ((multi_particle_state sts) as mpst) =
inl deriv (n, st) =
newton_second_ps (forces_on n mpst fs) st
sts |> stream.indexed |> stream.map deriv |> d_multi_particle_state
instance (+++) d_multi_particle_state =
fun (d_multi_particle_state dsts1) (d_multi_particle_state dsts2) =>
(dsts1, dsts2)
||> stream.zip_with (+++)
|> d_multi_particle_state
instance scale d_multi_particle_state = fun w (d_multi_particle_state dsts) =>
dsts
|> stream.map (scale w)
|> d_multi_particle_state
instance shift multi_particle_state = fun dt dsts (multi_particle_state sts) =>
inl (d_multi_particle_state dsts) =
real
match dsts with
| d_multi_particle_state _ => dsts
(dsts, sts)
||> stream.zip_with (shift dt)
|> stream.memoize
|> fun x => x ()
|> multi_particle_state
inl euler_cromer_mps dt : numerical_method multi_particle_state d_multi_particle_state =
fun deriv ((multi_particle_state sts0) as mpst0) =>
inl (multi_particle_state sts1) = euler dt deriv mpst0
(sts0, sts1)
||> stream.zip
|> stream.map (fun ((particle_state st0), (particle_state st1)) =>
particle_state {
st1 with
pos_vec = st0.pos_vec ^+^ st1.velocity ^* dt
}
)
|> multi_particle_state
inl update_mps (method : numerical_method multi_particle_state d_multi_particle_state) =
newton_second_mps >> method
inl states_mps (method : numerical_method multi_particle_state d_multi_particle_state) =
newton_second_mps
>> method
>> (fun x (multi_particle_state y) =>
y
|> stream.memoize
|> (fun x => x ())
|> multi_particle_state |> x
)
// >> stream.iterate
>> seq.iterate'
inl kinetic_energy (particle_state st) =
inl m = st.mass
inl v = magnitude st.velocity
0.5 * m * v ** 2
inl system_ke (multi_particle_state sts) =
sts
|> stream.map kinetic_energy
|> stream.sum
inl linear_spring_pe k re (particle_state st1) (particle_state st2) =
inl r1 = st1.pos_vec
inl r2 = st2.pos_vec
inl r21 = r2 ^-^ r1
inl r21mag = magnitude r21
k * (r21mag - re) ** 2 / 2
inl earth_surface_gravity_pe (particle_state st) =
inl g = 9.80665
inl m = st.mass
inl z = st.pos_vec.z
m * g * z
inl ball_radius () = 0.03
inl billiard_forces k =
[ InternalForce (0i32, 1, billiard_force k (2 * ball_radius ())) ]
inl billiard_initial () =
inl ball_mass = 0.160
inl (particle_state default_particle_state') = default_particle_state ()
[
particle_state {
default_particle_state' with
mass = ball_mass
pos_vec = zero_vec ()
velocity = 0.2 *^ i_hat ()
}
particle_state {
default_particle_state' with
mass = ball_mass
pos_vec = i_hat () ^+^ 0.02 *^ j_hat ()
velocity = zero_vec ()
}
]
|> stream.from_list
|> multi_particle_state
inl billiard_states ~n_method k dt =
states_mps (n_method dt) (billiard_forces k) (billiard_initial ())
inl billiard_states_finite n_method k dt =
billiard_states n_method k dt
>> Some
|> seq.take_while_ (fun (multi_particle_state mpst) (_ : i32) =>
match mpst |> stream.try_item 0i32 with
| Some st =>
st.time <= 10
| None => false
)
inl momentum (particle_state st) =
inl m = st.mass
inl v = st.velocity
m *^ v
inl system_p (multi_particle_state sts) =
sts
|> stream.map momentum
|> stream.fold (^+^) (zero_vec ())
inl time_ke_ec_x, time_ke_ec_y =
billiard_states_finite euler_cromer_mps 30 0.03
|> listm.map (fun (multi_particle_state mpst) =>
mpst |> stream.try_item 0i32
|> optionm.map (fun st =>
st.time, system_ke (multi_particle_state mpst)
)
)
// |> stream.to_list
|> listm'.choose id
|> listm'.unzip
inl time_ke_rk4_x, time_ke_rk4_y =
billiard_states_finite runge_kutta_4 30 0.03
|> listm.map (fun (multi_particle_state mpst) =>
mpst |> stream.try_item 0i32
|> optionm.map (fun st =>
st.time, system_ke (multi_particle_state mpst)
)
)
// |> stream.to_list
|> listm'.choose id
|> listm'.unzip
inl time_ke_ec_x = time_ke_ec_x |> listm'.box |> listm'.to_array'
inl time_ke_ec_y = time_ke_ec_y |> listm'.box |> listm'.to_array'
inl time_ke_rk4_x = time_ke_rk4_x |> listm'.box |> listm'.to_array'
inl time_ke_rk4_y = time_ke_rk4_y |> listm'.box |> listm'.to_array'
"system kinetic energy versus time",
"time (s)",
"system kinetic energy (j)",
;[
"euler-cromer", time_ke_ec_x, time_ke_ec_y
"runge-kutta 4", time_ke_rk4_x, time_ke_rk4_y
]
wave 2ΒΆ
InΒ [Β ]:
//// test
inl linear_spring k re (particle_state st1) (particle_state st2) =
inl r1 = st1.pos_vec
inl r2 = st2.pos_vec
inl r21 = r2 ^-^ r1
inl r21mag = magnitude r21
-k * (r21mag - re) *^ r21 ^/ r21mag
inl fixed_linear_spring k re r1 =
inl (particle_state default_particle_state') = default_particle_state ()
linear_spring k re (particle_state { default_particle_state' with pos_vec = r1 })
inl forces_string () =
[
ExternalForce (0i32, fixed_linear_spring 5384 0 (zero_vec ()))
ExternalForce (63, fixed_linear_spring 5384 0 (0.65 *^ i_hat ()))
] ++ (
listm'.init_series 0 59 1
|> listm.map (fun n => InternalForce (n, n + 1, linear_spring 5384 0))
)
inl string_update dt =
update_mps (join runge_kutta_4 dt) (join forces_string ())
inl string_initial_overtone n =
inl ball_mass = 0.0008293 * 0.65 / 64
inl (particle_state default_particle_state') = default_particle_state ()
listm'.init_series 0.01 0.64 0.01
|> listm.map (fun x =>
inl y = 0.005 * sin (conv n * pi * x / 0.65)
particle_state {
default_particle_state' with
mass = ball_mass
pos_vec = x *^ i_hat () ^+^ y *^ j_hat ()
velocity = zero_vec ()
}
)
|> stream.from_list
|> multi_particle_state
let main () =
inl ~frames = listm'.init_series 0 65 1f64 |> stream.from_list
inl ~initial_state = string_initial_overtone 3i32
inl frames =
frames
|> stream.map (fun n =>
inl (multi_particle_state sts) =
stream.iterate (string_update 0.000025) initial_state |> stream.item n
inl x, y =
[ zero_vec () ]
++ (sts |> stream.map (fun (particle_state st) => st.pos_vec) |> stream.to_list)
++ [ 0.65 *^ i_hat () ]
|> listm.map (fun r => r.x, r.y)
|> stream.from_list
|> stream.unzip
inl x = x |> stream.to_list |> listm'.box |> listm'.to_array'
inl y = y |> stream.to_list |> listm'.box |> listm'.to_array'
x, y
)
inl plots =
frames
|> stream.indexed
|> stream.map (fun ((n : i32), (x, y)) =>
"wave",
"position (m)",
"displacement (m)",
;[
($'$"{!n}"' : string), x, y
]
)
plots |> stream.to_list |> listm'.box |> listm'.to_array'
index | value |
---|---|
0 | |
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 |
00:00:25 d #46 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #47 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/25b4386102d4e649cf36c315e80448a1fa116c091b0086111cf413562ef6255c.svg 00:00:25 d #48 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #49 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #50 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/82069ab3443b2210137c4a51290d83dc81229748eec3a972a381c54f97272db6.svg 00:00:25 d #51 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #52 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #53 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/51198f81dd6b9e00f356cd50edeac50e389911946af788d2df96b0c3969cc85f.svg 00:00:25 d #54 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #55 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #56 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/0da4df708113eca060892dd4d18bc2025b1151e39abb4b96e26eff2fc4cd6891.svg 00:00:25 d #57 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #58 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #59 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/ec21fae8ff726079724d8166ca53da39947780d93d63f740978db0416b399df1.svg 00:00:25 d #60 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #61 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #62 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/cc3a3d6115cdfd7ee2acca31ac52275c998d1e6f6aa7b2316b2c84bde8340094.svg 00:00:25 d #63 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #64 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #65 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/f4d4d6212bb5f26b01e223e15a54b5cca667ecc4a41c7ac12166812c495d9437.svg 00:00:25 d #66 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #67 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #68 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/88e67acda384a3935bf09a094a0422796a2f36a7a20876fe7666cf276baba4ca.svg 00:00:25 d #69 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #70 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #71 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/0d6dfb91ef9a13fbdc033c517fa71d9824632e6a73651491210f9e9bb26fdefd.svg 00:00:25 d #72 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #73 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #74 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/269ae5518e06880956a5a031a71fc0d1003baec1faf97795021ff0849b29f158.svg 00:00:25 d #75 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #76 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #77 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/429b425800e5f58efea5a9daea343d9a1aac009a6f9c4409f11383c3a86d4c6c.svg 00:00:25 d #78 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #79 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #80 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/e5beb9b5144700e5ac068ff41f7799acb88cbe0b613258014323302a0a3d5a1c.svg 00:00:25 d #81 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #82 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #83 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/2543db981b2d7ba78e8905023f1f76b58dd99d61f636fcdc47f85cc5998df0fa.svg 00:00:25 d #84 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #85 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #86 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/31bd174c459b1cf6d0e9609489ea792da7fb84696f35c6d5e4fcfac01cdb2313.svg 00:00:25 d #87 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #88 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #89 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/2055256cd308846fd5325958a010fd6753dabf3ec603ee633dda982c882cc35d.svg 00:00:25 d #90 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #91 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #92 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/e36a8f1675ee4d9378c2c149f0395e9585eb14793f79a5e1837d9943c8256622.svg 00:00:25 d #93 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #94 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #95 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/4e44702e3376bc59ceef1c5463ef093898efe2659436cc48225aca64585a1eed.svg 00:00:25 d #96 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #97 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #98 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/da2dd1e5137917a0b5fbd320e18d559f3003adee29c16c8b3ddaa90861251def.svg 00:00:25 d #99 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #100 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #101 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/c8e034f0843c86c31cc3c64b5c2dbfc69aa176075142483c6070350a436ad974.svg 00:00:25 d #102 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #103 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #104 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/d015b6ee7829dec29660e9e1a8e2c91527fecaf400660e01b1e8c8fc50d64557.svg 00:00:25 d #105 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #106 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #107 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/6f9e779b344f4181fd8010d1fbddf41de20d850557acba391b3cc908fbe8bfd7.svg 00:00:25 d #108 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #109 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #110 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/e20cc83d71d3b2e4fb037effa299afb3ae5fbad79a76be4333412b0afad44247.svg 00:00:25 d #111 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #112 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #113 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/552767eafba3ce3097354bb928d9dd9d0af565a8b70940a42e08f6ad067d70a7.svg 00:00:25 d #114 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #115 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #116 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/a27eac8f69f101def5fa6b4c8cebc059d503808937bc367d9d3608cec2712613.svg 00:00:25 d #117 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #118 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #119 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/f8d04b749068750046e5d0d76166fc42fe00e40d9e14143a48b9f18612895d93.svg 00:00:25 d #120 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #121 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #122 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/e05df3b8d5b0fca42735e5703316d5517e51dfac741018f80bcd59ecd3a56299.svg 00:00:25 d #123 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #124 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #125 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/b40e8a5b3c77f4513a629f118c91a77d5bdbde27147178a46ca1cfde97c15836.svg 00:00:25 d #126 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #127 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #128 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/1e50fc8bee6db0bae991559de569c542a977cc7f6ee8e358cc7e684dd7a2f7f2.svg 00:00:25 d #129 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #130 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #131 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/fbb3fc7d0cd000d1f3d5af25ecb9116851889fb7032aa024dd3767bf1dc9de2e.svg 00:00:25 d #132 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #133 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #134 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/a0ee0690d9ef0a1e1547f259ca0d88a4510ec89dc61a7ffe0147e09ea2eb165a.svg 00:00:25 d #135 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #136 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #137 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/8b62f10b9d3b97068239e496cb7c5aa68b000dc2f78c5eba0b7fa19a7ebdd50c.svg 00:00:25 d #138 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #139 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #140 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/6cc8f1c7e432d3649cb9fdf9f9f7b7f384c65eacd3fb94e319272fe70dd633bf.svg 00:00:25 d #141 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #142 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #143 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/ab40690e836b63af01e2c82ea8febe670e52e11eb049e40c93bb8f8e5cf97c9e.svg 00:00:25 d #144 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #145 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #146 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/4eb829ca41667f43116d4631600e2dd123ca25ee7aa279f194251ee36431ea91.svg 00:00:25 d #147 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #148 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #149 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/da621a77ae85752953b1719c771c787f3c3594be470ba4dfb5ad8f63ff882412.svg 00:00:25 d #150 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #151 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #152 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/4c133a696111e9637bd800e10894b783253b1784f74a3e6562560f4f0d0e1de9.svg 00:00:25 d #153 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #154 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #155 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/b4cf46b7a1116f7ff2beea0f19067a0b69d8d2633074b74c7fa2e9419537bbe4.svg 00:00:25 d #156 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #157 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #158 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/8228a67a385c42598d65c8b0e86e8a53b5c32d9a669f5161004e7021b2aad6e3.svg 00:00:25 d #159 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #160 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #161 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/2d27f0a40a52e488f8364971acea754a0034827c30ac23090ccf8e8afe1d5208.svg 00:00:25 d #162 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #163 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #164 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/f398230047e42f5b9160ad9fa4a4a30d67def46763ac4e778955ca67702061d8.svg 00:00:25 d #165 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #166 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #167 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/ba31ccdfae8fca85790e9739a135e4599266c38003ca58db428cf83acd3bb12e.svg 00:00:25 d #168 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #169 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #170 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/780ead643b98b8af35c6ffc815ccde029abf9e61684b1372ede9e07e38c947fe.svg 00:00:25 d #171 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #172 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #173 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/10bf803f5dd7d69401fe1e381285b4d67bb5e2f3a1c11e154f395b0625aaa81a.svg 00:00:25 d #174 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #175 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #176 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/400b1e51fa7a142588257ddb414c0a31a2b251bceb6690a25e4dfbdb9b436d1c.svg 00:00:25 d #177 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #178 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #179 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/04074dcfa8c9444af4bcf09bf944b37caa36f05fb020fa972ae58171bba415e1.svg 00:00:25 d #180 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #181 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #182 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/988cea705b16ac29a2007ee4aea8dea72c7adef2889dd956ad5487d25e12b369.svg 00:00:25 d #183 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #184 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #185 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/31ff79312dc9242531f49bdaac4b1ef4df454de8e801dcbaaea5a774015733e9.svg 00:00:25 d #186 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #187 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #188 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/8f27371f86a551c5ea30fe882e5b6cb3028d89ad84e6c71144dc12250a6f6848.svg 00:00:25 d #189 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #190 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #191 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/afc52222ff828d5c96013fd771aff43b465546b50555499413d4f080e9026d87.svg 00:00:25 d #192 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #193 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #194 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/01e5051d655ef25e1c5e09370fee684bfc2aa1f099acec9c46c60656266b3f8c.svg 00:00:25 d #195 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #196 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #197 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/5588421d5672a19d3d58374d08bff6cbc79cf882258d65127325dd80c4869f31.svg 00:00:25 d #198 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #199 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #200 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/719cf660228f57fd8847d696090075444289b6dd7fb5fd3d15959d463ff28dd4.svg 00:00:25 d #201 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #202 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #203 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/3937c309891869cde1782a676801b77a082e459f8541d1e05a7516c2d6a3a72b.svg 00:00:25 d #204 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #205 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #206 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/3d48c97a72e450bf34cb16f39f9fa7a60c4f643c0f2eb8d8bc1832fda0e3cd54.svg 00:00:25 d #207 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #208 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #209 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/723726570af61bed1daa85181582acdd1a38621d0127fb5bb285a52cbca9c55e.svg 00:00:25 d #210 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #211 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #212 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/41edb0d06298b6a2b77e6b0b0f8181d07eae00c470242422c86f2d3a9df20f2c.svg 00:00:25 d #213 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #214 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #215 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/ecdf43a5e27f3b426434ff6d5c263120f68db972ab74626ec1f04425e21353be.svg 00:00:25 d #216 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #217 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #218 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/f4e498f816d3ebaa61701bfb8382cad124f71ed3342c3db593fdc4baa294e95f.svg 00:00:25 d #219 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #220 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #221 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/d101f682dfddc088e7579974ced37aa327a3bb1ae0ed5025b005fa24ea15a7dc.svg 00:00:25 d #222 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #223 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #224 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/bc8871e382c35fb284103c8eca5f2c1b7b3aabf0dfe7a88637d96bb558d749ab.svg 00:00:25 d #225 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #226 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #227 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/810be92ead3834fd2f9daf062ebd24ad35f15e24dce54aa82d69e13a2158a733.svg 00:00:25 d #228 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #229 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #230 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/8c23dcf0c85bba40477a6dc081dfef35f4ea67e9ad5731e1b83eeb9ce13418e0.svg 00:00:25 d #231 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #232 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #233 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/00c79858fdfeff82c9976e8339acf00f55b7911d85d3a5549512a823160750f1.svg 00:00:25 d #234 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #235 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #236 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/248aa1496994a15d405a052aab722597383eb415943b4e9a72c87961aad83430.svg 00:00:25 d #237 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 } 00:00:25 d #238 runtime.execute_with_options_async / { file_name = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; arguments = US1_1; options = { command = /home/runner/work/polyglot/polyglot/workspace/target/release/plot; cancellation_token = Some System.Threading.CancellationToken; environment_variables = [||]; on_line = None; stdin = None; trace = true; working_directory = Some "/home/runner/work/polyglot/polyglot" } } 00:00:25 v #239 > Creating /home/runner/work/polyglot/polyglot/target/plot/line_svg/bede6e595697b6a21a1b37ce58511f9e5adf6df47f0174d56d18df06b722c982.svg 00:00:25 d #240 runtime.execute_with_options_async / { exit_code = 0; output_length = 134 }