Force the DriverRank.jl script to parse team numbers as strings
We're currently seeing this error on the scouting server:
ERROR: LoadError: MethodError: Cannot `convert` an object of type Int64 to an object of type String
Closest candidates are:
convert(::Type{T}, !Matched::Union{InitialValues.SpecificInitialValue{typeof(*)}, InitialValues.SpecificInitialValue{typeof(Base.mul_prod)}}) where T<:Union{AbstractString, Number} at /var/frc971/scouting/julia_depot/packages/InitialValues/OWP8V/src/InitialValues.jl:258
convert(::Type{String}, !Matched::WeakRefStrings.WeakRefString) at /var/frc971/scouting/julia_depot/packages/WeakRefStrings/31nkb/src/WeakRefStrings.jl:81
convert(::Type{String}, !Matched::FilePathsBase.AbstractPath) at /var/frc971/scouting/julia_depot/packages/FilePathsBase/9kSEl/src/path.jl:117
...
Stacktrace:
[1] Main.DriverRank.TeamKey(key::Int64)
@ Main.DriverRank /opt/frc971/scouting_server/org_frc971/scouting/DriverRank/src/DriverRank.jl:16
[2] _broadcast_getindex_evalf
@ ./broadcast.jl:670 [inlined]
[3] _broadcast_getindex(bc::Base.Broadcast.Broadcasted{DataFrames.DataFrameStyle, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, Type{Main.DriverRank.TeamKey}, Tuple{Base.Broadcast.Extruded{Vector{Int64}, Tuple{Bool}, Tuple{Int64}}}}, I::CartesianIndex{2})
@ Base.Broadcast ./broadcast.jl:643
[4] getindex
@ ./broadcast.jl:597 [inlined]
[5] copy(bc::Base.Broadcast.Broadcasted{DataFrames.DataFrameStyle, Tuple{Base.OneTo{Int64}, Base.OneTo{Int64}}, Type{Main.DriverRank.TeamKey}, Tuple{DataFrames.DataFrame}})
@ DataFrames /var/frc971/scouting/julia_depot/packages/DataFrames/bza1S/src/other/broadcasting.jl:74
[6] materialize
@ ./broadcast.jl:860 [inlined]
[7] rank(input_csv::String, output_csv::String)
@ Main.DriverRank /opt/frc971/scouting_server/org_frc971/scouting/DriverRank/src/DriverRank.jl:117
[8] top-level scope
@ /opt/frc971/scouting_server/org_frc971/scouting/DriverRank/src/DriverRank.jl:151
in expression starting at /opt/frc971/scouting_server/org_frc971/scouting/DriverRank/src/DriverRank.jl:3
2023/03/09 21:21:10 Failed to run the driver ranking script: exit status 1
The issue is that the script was written with last year's Madtown data
in mind. That data has teams like `1678B` and `971C`. That caused all
the columns to be parsed as strings. With our upcoming regional,
however, that's not the case. The script is only finding integers in
the input CSV file.
This patch fixes the issue by forcing the `DriverRank.jl` script to
parse all its input as strings.
Signed-off-by: Philipp Schrader <philipp.schrader@gmail.com>
Change-Id: I74523d0319206deda69a0b1d7a5a86a99bccc3e6
diff --git a/scouting/DriverRank/src/DriverRank.jl b/scouting/DriverRank/src/DriverRank.jl
index 39ac95e..e759fea 100755
--- a/scouting/DriverRank/src/DriverRank.jl
+++ b/scouting/DriverRank/src/DriverRank.jl
@@ -106,7 +106,8 @@
input_csv::String,
output_csv::String,
)
- df = DataFrame(CSV.File(input_csv))
+ # Force all team numbers to be parsed as strings.
+ df = DataFrame(CSV.File(input_csv, types=String))
rank1 = "Rank 1 (best)"
rank2 = "Rank 2"