MilesCranmer / PySR

High-Performance Symbolic Regression in Python and Julia

Home Page:https://astroautomata.com/PySR

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[Windows] : Couldn't find equation file!

Magaud59 opened this issue · comments

Hi Miles,

I've been installing PySR in parallel to Julia under win10. It runs... till the moment it crashes with the following message:

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pysr\sr.py", line 774, in get_hof
raise RuntimeError("Couldn't find equation file! The equation search likely exited before a single iteration completed.")

RuntimeError: Couldn't find equation file! The equation search likely exited before a single iteration completed.

In the last case, I've been to 38% of progress.

I have to say that, sometime (not often), the process gets completed.

What is the reason for this?

Also... is there a forum or I posted at the right place?

I thank you for your help.

Regards

Magaud

Similar issue here on Ubuntu. This happens only sometimes, and seems to be new in 0.6.3 (maybe).

==============================

Cycles per second: 6.670e+02
Head worker occupation: 2.1%
Progress: 1 / 4 total iterations (25.000%)
==============================
Best equations for output 1
Hall of Fame:
-----------------------------------------
Complexity  Loss       Score     Equation

==============================
Best equations for output 2
Hall of Fame:
-----------------------------------------
Complexity  Loss       Score     Equation
2           3.983e+01  -5.284e-02  cos(0.51271415)
3           1.090e+01  1.296e+00  (x1 * x1)
5           9.370e+00  7.560e-02  ((x1 * x1) + -0.99658316)
7           9.341e+00  1.560e-03  ((x1 * (x1 + 0.03651586)) + -0.99658316)
8           8.388e+00  1.076e-01  (((x1 * x1) + -1.4183189) + cos(x4))
10          8.339e+00  2.951e-03  (((x1 * x1) + -1.4183189) + cos(x4 + -0.24970347))
12          8.180e+00  9.621e-03  ((-1.5824815 + (x1 * x1)) + (1.5988172 * cos(-0.24577418 + x4)))
14          8.100e+00  4.877e-03  ((-1.725914 + (x1 * x1)) + (1.712476 * cos(0.19201946 + (-0.86918753 * x4))))

==============================
Traceback (most recent call last):
  File "/home/yxie20/anaconda3/envs/rw/lib/python3.7/site-packages/pysr/sr.py", line 782, in get_hof
    all_outputs = [pd.read_csv(str(equation_file) + f'.out{i}' + '.bkup', sep="|") for i in range(1, nout+1)]
  File "/home/yxie20/anaconda3/envs/rw/lib/python3.7/site-packages/pysr/sr.py", line 782, in <listcomp>
    all_outputs = [pd.read_csv(str(equation_file) + f'.out{i}' + '.bkup', sep="|") for i in range(1, nout+1)]
  File "/home/yxie20/anaconda3/envs/rw/lib/python3.7/site-packages/pandas/io/parsers.py", line 610, in read_csv
    return _read(filepath_or_buffer, kwds)
  File "/home/yxie20/anaconda3/envs/rw/lib/python3.7/site-packages/pandas/io/parsers.py", line 462, in _read
    parser = TextFileReader(filepath_or_buffer, **kwds)
  File "/home/yxie20/anaconda3/envs/rw/lib/python3.7/site-packages/pandas/io/parsers.py", line 819, in __init__
    self._engine = self._make_engine(self.engine)
  File "/home/yxie20/anaconda3/envs/rw/lib/python3.7/site-packages/pandas/io/parsers.py", line 1050, in _make_engine
    return mapping[engine](self.f, **self.options)  # type: ignore[call-arg]
  File "/home/yxie20/anaconda3/envs/rw/lib/python3.7/site-packages/pandas/io/parsers.py", line 1867, in __init__
    self._open_handles(src, kwds)
  File "/home/yxie20/anaconda3/envs/rw/lib/python3.7/site-packages/pandas/io/parsers.py", line 1368, in _open_handles
    storage_options=kwds.get("storage_options", None),
  File "/home/yxie20/anaconda3/envs/rw/lib/python3.7/site-packages/pandas/io/common.py", line 647, in get_handle
    newline="",
FileNotFoundError: [Errno 2] No such file or directory: 'hall_of_fame_2021-06-08_114346.574.csv.out1.bkup'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "optimal.py", line 21, in <module>
    julia_optimization=0,       # Faster startup time. Turn off optimizing compiler for Julia code
  File "/home/yxie20/anaconda3/envs/rw/lib/python3.7/site-packages/pysr/sr.py", line 395, in pysr
    equations = get_hof(**kwargs)
  File "/home/yxie20/anaconda3/envs/rw/lib/python3.7/site-packages/pysr/sr.py", line 786, in get_hof
    raise RuntimeError("Couldn't find equation file! The equation search likely exited before a single iteration completed.")
RuntimeError: Couldn't find equation file! The equation search likely exited before a single iteration completed.

Another possibly related error:

==============================

Cycles per second: 2.290e+03
Head worker occupation: 2.5%
Progress: 2 / 4 total iterations (50.000%)
==============================
Best equations for output 1
Hall of Fame:
-----------------------------------------
Complexity  Loss       Score     Equation
1           4.739e+01  -1.096e-02  1.8519074
3           2.195e+01  3.848e-01  (x0 * x0)
5           2.017e+01  4.236e-02  ((x0 * x0) + -1.4364125)
9           2.090e+00  5.667e-01  (((x0 * x0) + (x1 * x2)) + -1.7970624)
11          2.061e+00  6.839e-03  (((x0 * (x0 + 0.079849906)) + (x1 * x2)) + -1.7017426)
12          5.211e-01  1.375e+00  (((-1.8610494 + cos(x3)) + (x0 * x0)) + (x1 * x2))
14          7.465e-11  1.133e+01  (((-2.0000072 + (x0 * x0)) + (x1 * x2)) + (2.0000086 * cos(x3)))

==============================
Best equations for output 2
Hall of Fame:
-----------------------------------------
Complexity  Loss       Score     Equation
1           9.285e+01  -6.034e-02  1.5331783
2           8.836e+01  4.952e-02  exp(1.0611964)
3           2.174e+01  1.402e+00  (x1 * x1)
5           1.989e+01  4.451e-02  ((x1 * x1) + -1.3825463)
7           1.970e+01  4.892e-03  (((x1 + -0.18729796) * x1) + -1.3825463)
9           1.963e+01  1.840e-03  ((((x1 + -0.19800864) * x1) + -1.5256172) * 1.033466)

==============================
┌ Error: Fatal error on process 4
│   exception =
│    IOError: stream is closed or unusable
│    Stacktrace:
│      [1] check_open
│        @ ./stream.jl:386 [inlined]
│      [2] uv_write_async(s::Sockets.TCPSocket, p::Ptr{UInt8}, n::UInt64)
│        @ Base ./stream.jl:1018
│      [3] uv_write(s::Sockets.TCPSocket, p::Ptr{UInt8}, n::UInt64)
│        @ Base ./stream.jl:981
│      [4] uv_write
│        @ ./stream.jl:977 [inlined]
│      [5] unsafe_write(s::Sockets.TCPSocket, p::Ptr{UInt8}, n::UInt64)
│        @ Base ./stream.jl:1061
│      [6] unsafe_write
│        @ ./io.jl:646 [inlined]
│      [7] unsafe_write(s::Sockets.TCPSocket, p::Base.RefValue{Float32}, n::Int64)
│        @ Base ./io.jl:644
│      [8] write
│        @ ./io.jl:647 [inlined]
│      [9] write
│        @ ./io.jl:650 [inlined]
│     [10] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, n::Float32)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:613
│     [11] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:657
│     [12] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636
│     [13] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:657
│     [14] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636
│     [15] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:657
│     [16] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636
│     [17] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:657
│     [18] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636
│     [19] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:657
│     [20] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636
│     [21] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:657
│     [22] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636
│     [23] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:657
│     [24] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636
│     [25] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:657
│     [26] serialize
│        @ /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636 [inlined]
│     [27] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, a::Vector{PopMember{Float32}})
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:273
│     [28] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:657
│     [29] serialize
│        @ /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636 [inlined]
│     [30] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, t::Tuple{Population{Float32}, HallOfFame, Dict{String, Any}})
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:201
│     [31] serialize_msg(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, o::Distributed.ResultMsg)
│        @ Distributed /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/messages.jl:78
│     [32] #invokelatest#2
│        @ ./essentials.jl:708 [inlined]
│     [33] invokelatest
│        @ ./essentials.jl:706 [inlined]
│     [34] send_msg_(w::Distributed.Worker, header::Distributed.MsgHeader, msg::Distributed.ResultMsg, now::Bool)
│        @ Distributed /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/messages.jl:174
│     [35] send_msg_now
│        @ /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/messages.jl:118 [inlined]
│     [36] send_msg_now(s::Sockets.TCPSocket, header::Distributed.MsgHeader, msg::Distributed.ResultMsg)
│        @ Distributed /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/messages.jl:113
│     [37] deliver_result(sock::Sockets.TCPSocket, msg::Symbol, oid::Distributed.RRID, value::Tuple{Population{Float32}, HallOfFame, Dict{String, Any}})
│        @ Distributed /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/process_messages.jl:95
│     [38] macro expansion
│        @ /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/process_messages.jl:286 [inlined]
│     [39] (::Distributed.var"#105#107"{Distributed.CallMsg{:call_fetch}, Distributed.MsgHeader, Sockets.TCPSocket})()
│        @ Distributed ./task.jl:411
└ @ Distributed /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/process_messages.jl:99
┌ Error: Fatal error on process 3
│   exception =
│    IOError: stream is closed or unusable
│    Stacktrace:
│      [1] check_open
│        @ ./stream.jl:386 [inlined]
│      [2] uv_write_async(s::Sockets.TCPSocket, p::Ptr{UInt8}, n::UInt64)
│        @ Base ./stream.jl:1018
│      [3] uv_write(s::Sockets.TCPSocket, p::Ptr{UInt8}, n::UInt64)
│        @ Base ./stream.jl:981
│      [4] uv_write
│        @ ./stream.jl:977 [inlined]
│      [5] unsafe_write(s::Sockets.TCPSocket, p::Ptr{UInt8}, n::UInt64)
│        @ Base ./stream.jl:1061
│      [6] unsafe_write
│        @ ./io.jl:646 [inlined]
│      [7] unsafe_write(s::Sockets.TCPSocket, p::Base.RefValue{UInt16}, n::Int64)
│        @ Base ./io.jl:644
│      [8] write
│        @ ./io.jl:647 [inlined]
│      [9] write
│        @ ./io.jl:650 [inlined]
│     [10] serialize_cycle(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:156
│     [11] serialize_type_data(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, t::DataType)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:542
│     [12] serialize_type(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, t::DataType, ref::Bool)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:583
│     [13] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:651
│     [14] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636
│     [15] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:657
│     [16] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636
│     [17] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:657
│     [18] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636
│     [19] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:657
│     [20] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636
│     [21] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:657
│     [22] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636
│     [23] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:657
│     [24] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636
│     [25] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:657
│     [26] serialize
│        @ /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636 [inlined]
│     [27] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, a::Vector{PopMember{Float32}})
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:273
│     [28] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:657
│     [29] serialize
│        @ /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636 [inlined]
│     [30] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, t::Tuple{Population{Float32}, HallOfFame, Dict{String, Any}})
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:201
│     [31] serialize_msg(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, o::Distributed.ResultMsg)
│        @ Distributed /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/messages.jl:78
│     [32] #invokelatest#2
│        @ ./essentials.jl:708 [inlined]
│     [33] invokelatest
│        @ ./essentials.jl:706 [inlined]
│     [34] send_msg_(w::Distributed.Worker, header::Distributed.MsgHeader, msg::Distributed.ResultMsg, now::Bool)
│        @ Distributed /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/messages.jl:174
│     [35] send_msg_now
│        @ /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/messages.jl:118 [inlined]
│     [36] send_msg_now(s::Sockets.TCPSocket, header::Distributed.MsgHeader, msg::Distributed.ResultMsg)
│        @ Distributed /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/messages.jl:113
│     [37] deliver_result(sock::Sockets.TCPSocket, msg::Symbol, oid::Distributed.RRID, value::Tuple{Population{Float32}, HallOfFame, Dict{String, Any}})
│        @ Distributed /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/process_messages.jl:95
│     [38] macro expansion
│        @ /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/process_messages.jl:286 [inlined]
│     [39] (::Distributed.var"#105#107"{Distributed.CallMsg{:call_fetch}, Distributed.MsgHeader, Sockets.TCPSocket})()
│        @ Distributed ./task.jl:411
└ @ Distributed /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/process_messages.jl:99

The message Couldn't find equation file! The equation search likely exited before a single iteration completed. means that some error occurred earlier, and PySR couldn't recover the equation file from the run. Did it print any message before that?

Also, does this occur on 0.6.4 or just 0.6.3? 0.6.4 was a same-day hotfix I pushed for errors related to to NaNs/Infs not being checked in the equation evaluation, which might be related.

@yxie20 does that error crash your run, or is it just a message that gets printed after? Sometimes if the Julia processes are not cleanly shut down, they will print these messages, but they are not actually errors that affect the pipeline. Btw I would strongly recommend using a larger number of iterations if possible, 4 is quite small.

Hi Miles,

so, first thing... I update the package from 0.6.0 to 0.6.4.
Following the update, I ran my code again to get the full error message. Here it is:

Traceback (most recent call last):

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pysr\sr.py", line 784, in get_hof
all_outputs = [pd.read_csv(str(equation_file) + '.bkup', sep="|")]

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pandas\io\parsers.py", line 686, in read_csv
return _read(filepath_or_buffer, kwds)

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pandas\io\parsers.py", line 452, in _read
parser = TextFileReader(fp_or_buf, **kwds)

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pandas\io\parsers.py", line 946, in init
self._make_engine(self.engine)

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pandas\io\parsers.py", line 1178, in _make_engine
self._engine = CParserWrapper(self.f, **self.options)

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pandas\io\parsers.py", line 2008, in init
self._reader = parsers.TextReader(src, **kwds)

File "pandas_libs\parsers.pyx", line 382, in pandas._libs.parsers.TextReader.cinit

File "pandas_libs\parsers.pyx", line 674, in pandas._libs.parsers.TextReader._setup_parser_source

FileNotFoundError: [Errno 2] No such file or directory: 'hall_of_fame_2021-06-08_200303.084.csv.bkup'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

File "C:\Users\Matthieu\Documents\Project_Work\Non-Contact\VirusScan\RF_Models\LineCalcRegression_.py", line 19, in
equations = pysr(X, y,niterations=20,

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pysr\sr.py", line 395, in pysr
equations = get_hof(**kwargs)

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pysr\sr.py", line 786, in get_hof
raise RuntimeError("Couldn't find equation file! The equation search likely exited before a single iteration completed.")

RuntimeError: Couldn't find equation file! The equation search likely exited before a single iteration completed.

Let me know if I could support you in another way.

Regards

Magaud

Thanks. What is the error before this? These errors about not finding the equation file are just what happens what PySR crashed, but don't specify how it crashed. There should be a message earlier about the original error.

Also, can you show what your PySR script is?

That's the only error that is reported. The line before that are just the standard feedback report:

==============================

Cycles per second: 6.000e+03
Head worker occupation: 2.8%
Progress: 130 / 400 total iterations (32.500%)

Hall of Fame:

Complexity Loss Score Equation
1 8.823e+02 3.982e-01 x0
3 1.315e+00 3.254e+00 pow(x0, 0.8966019)
5 1.724e-01 1.016e+00 (0.78418094 * pow(x0, 0.9433791))
7 1.721e-01 7.639e-04 (0.014364422 + (0.7841787 * pow(x0, 0.9433453)))
11 1.223e-01 8.550e-02 (erf(erf(-0.073428765 * x0)) + pow(0.86148334 * x0, 0.9246638))

==============================

Nothing else...

That’s very strange. It should definitely be able to find the equation file then, I think. Can I see your PySR call?

I'm not sure to know what it is... sorry for that...

What I mean is: can I see the code you are running? This one: C:\Users\Matthieu\Documents\Project_Work\Non-Contact\VirusScan\RF_Models\LineCalcRegression_.py. Fine if you delete the code that is private - I am just curious to see the line with pysr(...).

No Problem...

here it is:

equations = pysr(X, y,niterations=20,
binary_operators=["plus", "mult","pow","div"],
unary_operators=[ "exp", "sqrt_abs", "log_abs","erf","erfc"])

print(equations)

For debugging purposes, can you set procs=0, and also remove "erf" and "erfc"? I'm curious to see what the output is then. Thanks!

Hi. I'm on mac OS 10 and I'm getting the same error. I've tried different versions of pysr and python but continue to get some sort of version conflicts, even when only testing on the short example code.

Here's an example of the errors in my terminal:

I will install Julia packages using PySR's Project.toml file. OK? (y/n): y
OK. I will install at launch.
Running on julia -O3 /var/folders/24/lpb6cn7d55xf7plwphkv0pfm0000gn/T/tmpgse65yqn/runfile.jl
Activating environment at /Applications/anaconda3/envs/test/lib/python3.7/site-packages/Project.toml
ERROR: LoadError: Unsatisfiable requirements detected for package AbstractAlgebra [c3fe647b]:
AbstractAlgebra [c3fe647b] log:
├─AbstractAlgebra [c3fe647b] has no known versions!
└─found to have no compatible versions left with SymbolicUtils [d1185830]
└─SymbolicUtils [d1185830] log:
├─possible versions are: 0.1.0-0.11.3 or uninstalled
└─restricted by compatibility requirements with SymbolicRegression [8254be44] to versions: 0.6.0-0.6.3
└─SymbolicRegression [8254be44] log:
├─possible versions are: 0.1.0-0.6.1 or uninstalled
└─restricted to versions 0.6.1-0.6 by an explicit requirement, leaving only versions 0.6.1

Many thanks for the help.

@amariad this looks like your julia packages might be out of date. Can you try the solution here? #27

Make sure to run pip install --upgrade pysr too - it looks like you might be on 0.6.1

@MilesCranmer, thanks! Solution #27 worked. I was using version 0.6.1 because version 0.6.6 had been giving me and another collaborator some problems. But all seems to be working now!

Awesome!!! I should add that trick to the README, my sense is that issues related to it come up a lot.

Hi Miles,

sorry, It took a bit of time but here are the feedback of the tests:

with procs=0:

==============================

Cycles per second: 1.750e+03
Head worker occupation: 99.8%
Progress: 245 / 400 total iterations (61.250%)

Hall of Fame:

Complexity Loss Score Equation
1 8.823e+02 3.982e-01 x0
3 1.315e+00 3.254e+00 pow(x0, 0.8966013)
5 1.724e-01 1.016e+00 pow(0.7728203 * x0, 0.94337857)
15 1.677e-01 2.749e-03 pow(0.77275 * (x0 + sqrt_abs(-0.0061262175 * (1.0 / sqrt_abs(2.0 * x0)))), 0.94336826)

==============================
Traceback (most recent call last):

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pysr\sr.py", line 784, in get_hof
all_outputs = [pd.read_csv(str(equation_file) + '.bkup', sep="|")]

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pandas\io\parsers.py", line 686, in read_csv
return _read(filepath_or_buffer, kwds)

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pandas\io\parsers.py", line 452, in _read
parser = TextFileReader(fp_or_buf, **kwds)

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pandas\io\parsers.py", line 946, in init
self._make_engine(self.engine)

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pandas\io\parsers.py", line 1178, in _make_engine
self._engine = CParserWrapper(self.f, **self.options)

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pandas\io\parsers.py", line 2008, in init
self._reader = parsers.TextReader(src, **kwds)

File "pandas_libs\parsers.pyx", line 382, in pandas._libs.parsers.TextReader.cinit

File "pandas_libs\parsers.pyx", line 674, in pandas._libs.parsers.TextReader._setup_parser_source

FileNotFoundError: [Errno 2] No such file or directory: 'hall_of_fame_2021-06-09_191317.555.csv.bkup'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

File "C:\Users\Matthieu\Documents\Project_Work\Non-Contact\VirusScan\RF_Models\LineCalcRegression_.py", line 19, in
equations = pysr(X, y,procs=0, niterations=20,

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pysr\sr.py", line 395, in pysr
equations = get_hof(**kwargs)

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pysr\sr.py", line 786, in get_hof
raise RuntimeError("Couldn't find equation file! The equation search likely exited before a single iteration completed.")

RuntimeError: Couldn't find equation file! The equation search likely exited before a single iteration completed.


without ERF and EFRC functions:

==============================

Cycles per second: 5.960e+03
Head worker occupation: 2.4%
Progress: 47 / 400 total iterations (11.750%)

Hall of Fame:

Complexity Loss Score Equation
1 8.823e+02 3.982e-01 x0
3 1.315e+00 3.254e+00 pow(x0, 0.89659876)
5 1.724e-01 1.016e+00 pow(-0.7731549 * x0, 0.9432982)

==============================
Traceback (most recent call last):

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pysr\sr.py", line 784, in get_hof
all_outputs = [pd.read_csv(str(equation_file) + '.bkup', sep="|")]

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pandas\io\parsers.py", line 686, in read_csv
return _read(filepath_or_buffer, kwds)

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pandas\io\parsers.py", line 452, in _read
parser = TextFileReader(fp_or_buf, **kwds)

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pandas\io\parsers.py", line 946, in init
self._make_engine(self.engine)

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pandas\io\parsers.py", line 1178, in _make_engine
self._engine = CParserWrapper(self.f, **self.options)

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pandas\io\parsers.py", line 2008, in init
self._reader = parsers.TextReader(src, **kwds)

File "pandas_libs\parsers.pyx", line 382, in pandas._libs.parsers.TextReader.cinit

File "pandas_libs\parsers.pyx", line 674, in pandas._libs.parsers.TextReader._setup_parser_source

FileNotFoundError: [Errno 2] No such file or directory: 'hall_of_fame_2021-06-10_080002.191.csv.bkup'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

File "C:\Users\Matthieu\Documents\Project_Work\Non-Contact\VirusScan\RF_Models\LineCalcRegression_.py", line 19, in
equations = pysr(X, y, niterations=20,

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pysr\sr.py", line 395, in pysr
equations = get_hof(**kwargs)

File "C:\Users\Matthieu\anaconda3\lib\site-packages\pysr\sr.py", line 786, in get_hof
raise RuntimeError("Couldn't find equation file! The equation search likely exited before a single iteration completed.")

RuntimeError: Couldn't find equation file! The equation search likely exited before a single iteration completed.

I hope that this helps.

All the best.

Matthieu

The message Couldn't find equation file! The equation search likely exited before a single iteration completed. means that some error occurred earlier, and PySR couldn't recover the equation file from the run. Did it print any message before that?

Also, does this occur on 0.6.4 or just 0.6.3? 0.6.4 was a same-day hotfix I pushed for errors related to to NaNs/Infs not being checked in the equation evaluation, which might be related.

@yxie20 does that error crash your run, or is it just a message that gets printed after? Sometimes if the Julia processes are not cleanly shut down, they will print these messages, but they are not actually errors that affect the pipeline. Btw I would strongly recommend using a larger number of iterations if possible, 4 is quite small.

Crashes the run.

What's the drawback with a small number of iterations? I've found npop and ncyclesperiteration to be the two most important hyperparameters for finding the ground truth equation.

Thank you.

@Magaud59 this is strange. If it doesn't print other error messages, I am really not sure what it could be. Can you run the example in the README without issue?

If the example in the README runs fine, then I think it is a bug internally. Can you try adding sub as an operator? I wonder if there is some bug because you have plus but no subtraction - maybe the simplification backend, even though it specifically has checks against this, tries to create a subtraction operator and this errors.

By the way - pow and sqrt_abs , and also pow and exp are redundant operations, so I would only choose one out of each to make the search more efficient.

More generally, and for @yxie20, if you can give me an MWE that I can run on my own machine, that would make this process faster since I can quickly debug these different choices.

@yxie20 re: those kwargs, they are all sort of related. niterations * npop * ncyclesperiteration is the total number of generations in the evolutionary algorithm. ncyclesperiteration sets the number of generations between each migration period. npop is the number of equations within each population.

Found the problem: the bug happens when niterations=1

I'm using some ridiculous hyperparameters. Although I still don't have a good grasp of the meaning behind hyperparameters after reading the documentation and the original paper... Your comments have been helpful, however!

MWE:

import numpy as np
from pysr import pysr, best

# Dataset (alternative)
X = 2*np.random.randn(100, 8)
y = 2*np.cos(X[:, 3:6]) + X[:, 0:3]**2 - 2 + X[:,2:5]*X[:,1:4]


equations = pysr(X, y, 
    binary_operators=["plus", "mult"],
    unary_operators=["cos", "exp", "sin"], 
    # procs=4,
    maxsize=5,
    populations=1,             # Number of populations running.
    npop=100,                  # Number of individuals per population. More population, slower, more chance of hitting the correct.
    niterations=3,              # Iterations per population.  populations * niterations = progress bar
    ncyclesperiteration=50,    # Number of total mutations per 10 samples of population each iteration
    annealing=True,             # With False, simple equations take longer but more complex equations are achievable
    julia_optimization=0,       # Faster startup time. Turn off optimizing compiler for Julia code
    temp_equation_file=True,
    # fast_cycle=True,          # True didn't let the algo find the true equation.
)

Hi @yxie20, thanks, this is quite helpful. I should first mention that indeed PySR needs a full paper out to help describe all of these options. This paper should be up later this month. This page will also be helpful if you haven't seen it: https://pysr.readthedocs.io/en/latest/docs/options/.

First - a maxsize of 5 is very very small. I think the initial population is randomly sampled from maxsize=5. There is basically no room for the optimization algorithm to move around. Your ground truth equation has a complexity of 13, so it will be impossible to recover it (and generally it helps to have a maxsize larger than your ground truth, so there is "room" to move around).

Second - using plus but not sub will not allow PySR to do any equation simplification, which tends to help the search a lot.

However, I can still run your script without crashing. Are you on PySR >= 0.6.4?

Thank you, Miles! I'll definitely look forward to your full paper (and congratulations in advance!)

Thank you for that link! Indeed I missed it. Reading now. maxsize=5 is definitely ridiculous... agreed! I set it small for fast debugging.

Looks like the bug went away on 0.6.6. The Julia install bug #27 also went away today (strange), but I won't complain!

Great that it works! By the way - I can recover your ground truth equations exactly via the following setup:

import numpy as np
from pysr import pysr, best

# Dataset (alternative)
X = 2*np.random.randn(100, 8)
y = 2*np.cos(X[:, 3:6]) + X[:, 0:3]**2 - 2 + X[:,2:5]*X[:,1:4]

equations = pysr(X, y,
    binary_operators='+ * / -'.split(' '),
    unary_operators=["cos", "exp", "sin"],
    niterations=10,
    procs=4,
    maxsize=20,
    julia_optimization=3,
    temp_equation_file=True,
)

print(equations)

Here is the output:

Screen Shot 2021-06-10 at 2 52 11 PM

Regarding this:

The Julia install bug #27 also went away today (strange)

this is actually expected. The Julia registry server takes a while to update. It gives you this bug when the new PySR version requires some SymbolicRegression.jl version that hasn't been included in the Julia registry yet. One fix is to wait for it to update as happened with your system, the other fix is to switch from the Julia registry server to the git-based registry (as on #27) which is instantly updated.

Unfortunately, I think there are more than one bug going on here... since "Couldn't find equation file" is an umbrella error message for any early-exits in Julia. These errors are always on-and-off, so I'm wrapping pysr code within try/except blocks in a while loop in my code--a quick fix.

Here is one type of error (Julia's IOError):

  Activating environment at `~/anaconda3/envs/rw/lib/python3.7/site-packages/Project.toml`
    Updating registry at `~/.julia/registries/General`
  No Changes to `~/anaconda3/envs/rw/lib/python3.7/site-packages/Project.toml`
  No Changes to `~/anaconda3/envs/rw/lib/python3.7/site-packages/Manifest.toml`
  Activating environment at `~/anaconda3/envs/rw/lib/python3.7/site-packages/Project.toml`
  Activating environment at `~/anaconda3/envs/rw/lib/python3.7/site-packages/Project.toml`
  Activating environment at `~/anaconda3/envs/rw/lib/python3.7/site-packages/Project.toml`  Activating
 environment at `~/anaconda3/envs/rw/lib/python3.7/site-packages/Project.toml`
┌ Error: Fatal error on process 2
│   exception =
│    IOError: stream is closed or unusable
│    Stacktrace:
│      [1] check_open
│        @ ./stream.jl:386 [inlined]
│      [2] uv_write_async(s::Sockets.TCPSocket, p::Ptr{UInt8}, n::UInt64)
│        @ Base ./stream.jl:1018
│      [3] uv_write(s::Sockets.TCPSocket, p::Ptr{UInt8}, n::UInt64)
│        @ Base ./stream.jl:981
│      [4] uv_write
│        @ ./stream.jl:977 [inlined]
│      [5] unsafe_write(s::Sockets.TCPSocket, p::Ptr{UInt8}, n::UInt64)
│        @ Base ./stream.jl:1061
│      [6] unsafe_write
│        @ ./io.jl:646 [inlined]
│      [7] unsafe_write(s::Sockets.TCPSocket, p::Base.RefValue{UInt8}, n::Int64)
│        @ Base ./io.jl:644
│      [8] write
│        @ ./io.jl:647 [inlined]
│      [9] write(s::Sockets.TCPSocket, b::UInt8)
│        @ Base ./stream.jl:1102
│     [10] writetag
│        @ /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:142 [inlined]
│     [11] serialize_cycle(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:155
│     [12] serialize_type_data(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, t::DataType)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:542
│     [13] serialize_type(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, t::DataType, ref::Bool)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:583
│     [14] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:651
│     [15] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636
│     [16] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:657
│     [17] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636
│     [18] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:657
│     [19] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636
│     [20] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:657
│     [21] serialize
│        @ /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636 [inlined]
│     [22] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, a::Vector{PopMember{Float32}})
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:273
│     [23] serialize_any(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, x::Any)
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:657
│     [24] serialize
│        @ /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:636 [inlined]
│     [25] serialize(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, t::Tuple{Population{Float32}, HallOfFame, Dict{String, Any}})
│        @ Serialization /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Serialization/src/Serialization.jl:201
│     [26] serialize_msg(s::Distributed.ClusterSerializer{Sockets.TCPSocket}, o::Distributed.ResultMsg)
│        @ Distributed /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/messages.jl:78
│     [27] #invokelatest#2
│        @ ./essentials.jl:708 [inlined]
│     [28] invokelatest
│        @ ./essentials.jl:706 [inlined]
│     [29] send_msg_(w::Distributed.Worker, header::Distributed.MsgHeader, msg::Distributed.ResultMsg, now::Bool)
│        @ Distributed /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/messages.jl:174
│     [30] send_msg_now
│        @ /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/messages.jl:118 [inlined]
│     [31] send_msg_now(s::Sockets.TCPSocket, header::Distributed.MsgHeader, msg::Distributed.ResultMsg)
│        @ Distributed /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/messages.jl:113
│     [32] deliver_result(sock::Sockets.TCPSocket, msg::Symbol, oid::Distributed.RRID, value::Tuple{Population{Float32}, HallOfFame, Dict{String, Any}})
│        @ Distributed /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/process_messages.jl:95
│     [33] macro expansion
│        @ /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/process_messages.jl:286 [inlined]
│     [34] (::Distributed.var"#105#107"{Distributed.CallMsg{:call_fetch}, Distributed.MsgHeader, Sockets.TCPSocket})()
│        @ Distributed ./task.jl:411
└ @ Distributed /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Distributed/src/process_messages.jl:99

MWE (although I don't think the parameter/data actually matters much here):

import numpy as np
from pysr import pysr, best

# Dataset (alternative)
X = 2*np.random.randn(512, 32)
y = 2*np.cos(X[:, 3:6]) + X[:, 0:3]**2 - 2 + X[:,2:5]*X[:,1:4]

equations = pysr(X, y, 
    binary_operators=["plus", "sub", "mult", "div"],
    unary_operators=["exp", "log_abs", "cos", "sin"],
    verbosity=0,
    # procs=6,
    temp_equation_file=True,
    progress=False,
    julia_optimization=0,       # Faster startup time. Turn off optimizing compiler for Julia code
    output_torch_format=True,
    annealing=True,            # With False, simple equations take longer but more complex equations are achievable
    batching=True,
    # # Optimal configs
    niterations=2,              # Iterations per population of the entire algorithm. Best equations are printed and migrated between populations.  populations * niterations = progress bar. This doesnt really matter
    maxsize=20,
    populations=2,              # Number of populations running. (must > 1)
    npop=2000,                  # Number of individuals per population. More population, slower, more chance of hitting the correct.
)

Hi,

I'm very sorry but I will let go on this point.
In any case, I thank you for the time you spent on my case.

Regards

M

@yxie20 I am a bit confused because your MWE you have procs=0, but the error you shared is from multi-processing (will only appear for procs>0). (edit: oops, sorry, you have procs=4) Are you sure that error is from that code, or is it delayed printing from a different process? The IOError is just from a process exiting if Julia closes due to an error. e.g., you see the same error if you just hit control-C when PySR is running in multi-processing mode. It can be very delayed printing if your single iteration runtime is long, and Julia closes without cleanly shutting down the process. You can run pkill julia at the command line to close hanging processes if necessary.

I’ve ran this code a few times, and get no errors. How often does it show up, and are you sure it’s an error from that run, or just a printout from processes closing late from the previous run?

The original issue is unrelated, so closing this issue. But @yxie20 let me know how it goes.