BundleAdjustmentModels documentation

Julia repository of bundle adjustment problems from the Bundle Adjustment in the Large repository

How to Cite

If you use BundleAdjustmentModels.jl in your work, please cite using the format given in CITATION.cff.

Tutorial

Check an Introduction to BundleAdjustmentModels and more tutorials on the JSO tutorials page.

Bug reports and discussions

If you think you found a bug, feel free to open an issue. Focused suggestions and requests can also be opened as issues. Before opening a pull request, start an issue or a discussion on the topic, please.

If you want to ask a question not suited for a bug report, feel free to start a discussion here. This forum is for general discussion about this repository and the JuliaSmoothOptimizers, so questions about any of our packages are welcome.

Examples

using BundleAdjustmentModels, DataFrames

problems_df() returns a DataFrame of all the problems, their group and other features.

df = problems_df()
74×5 DataFrame
Rownamegroupnequnvarnnzj
StringStringInt64Int64Int64
1problem-16-22106dubrovnik167436664622009232
2problem-88-64298dubrovnik7678741936869214488
3problem-135-90642dubrovnik110667227314113280064
4problem-142-93602dubrovnik113121628208413574592
5problem-150-95821dubrovnik113623828881313634856
6problem-161-103832dubrovnik118403831294514208456
7problem-173-111908dubrovnik126914033728115229680
8problem-182-116770dubrovnik133741035194816048920
9problem-202-132796dubrovnik150330440020618039648
10problem-237-154414dubrovnik171666246537520599944
11problem-253-163691dubrovnik179831049335021579720
12problem-262-169354dubrovnik183937651042022072512
13problem-273-176305dubrovnik188594053137222631280
14problem-287-182023dubrovnik194258454865223311008
15problem-308-195089dubrovnik209039458803925084728
16problem-356-226730dubrovnik251053668339430126432
17problem-21-11315trafalgar7291034134874920
18problem-39-18060trafalgar127102545311525224
19problem-50-20431trafalgar147934617431775208
20problem-126-40037trafalgar2966561212453559872
21problem-138-44033trafalgar3317981333413981576
22problem-161-48126trafalgar3641441458274369728
23problem-170-49267trafalgar3716301493314459560
24problem-174-50489trafalgar3776181530334531416
25problem-193-53101trafalgar3930521610404716624
26problem-201-54427trafalgar3998761650904798512
27problem-206-54562trafalgar4014301655404817160
28problem-215-55910trafalgar4084041696654900848
29problem-225-57665trafalgar4172441750205006928
30problem-257-65132trafalgar4518221977095421864
31problem-49-7776ladybug6368623769764232
32problem-73-11032ladybug92244337531106928
33problem-138-19878ladybug170434608762045208
34problem-318-41628ladybug3598381277464318056
35problem-372-47423ladybug4089441456174907328
36problem-412-52215ladybug4484841603535381808
37problem-460-56811ladybug4837541745735805048
38problem-539-65220ladybug5545462005116654552
39problem-598-69218ladybug6083402130367300080
40problem-646-73584ladybug6545942265667855128
41problem-707-78455ladybug6998802417288398560
42problem-783-84444ladybug7541042603799049248
43problem-810-88814ladybug7875502737329450600
44problem-856-93344ladybug8315382877369978456
45problem-885-97473ladybug86981030038410437720
46problem-931-102699ladybug91492031647610979040
47problem-969-105826ladybug94925432619911391048
48problem-1031-110968ladybug100053034218312006360
49problem-1064-113655ladybug102042235054112245064
50problem-1118-118384ladybug105785236521412694224
51problem-1152-122269ladybug109163837717513099656
52problem-1197-126327ladybug112746838975413529616
53problem-1235-129634ladybug115257240001713830864
54problem-1266-132593ladybug117588440917314110608
55problem-1340-137079ladybug122518642329714702232
56problem-1469-145199ladybug128329244881815399504
57problem-1514-147317ladybug130296045557715635520
58problem-1587-150845ladybug132657846681815918936
59problem-1642-153820ladybug134253647623816110432
60problem-1695-155710ladybug135319048238516238280
61problem-52-64053venice6943461926278332152
62problem-89-110973venice112595233372013511424
63problem-245-198739venice218277259842226193264
64problem-427-310384venice339829093499540779480
65problem-744-543562venice6117726163738273412712
66problem-951-708276venice7497784213338789973408
67problem-1102-780462venice8104680235130497256160
68problem-1158-802917venice8261006241917399132072
69problem-1184-816583venice83580942460405100297128
70problem-1238-843534venice85810062541744102972072
71problem-1288-866452venice87660122610948105192144
72problem-1350-894716venice90342522696298108411024
73problem-1408-912229venice92690602749359111228720
74problem-1778-993923venice100038922997771120046704

When you get this dataframe you can sort through it to get the problems that you want. For example, if you want to filter problems based on their size you can apply this filter:

filter_df = df[ ( df.nequ .≥ 50000 ) .& ( df.nvar .≤ 34000 ), :]
2×5 DataFrame
Rownamegroupnequnvarnnzj
StringStringInt64Int64Int64
1problem-49-7776ladybug6368623769764232
2problem-73-11032ladybug92244337531106928

You can get the problem name directly from the dataframe:

name = filter_df[1, :name]
"problem-49-7776"

fetch_ba_name returns the path to the problem artifact. The artifact will download automatically:

path = fetch_ba_name(name)
"/home/runner/.julia/artifacts/1c889d92a544c32de78828666f6b4d025495945b"

You can also get an array of the paths to an entire group of problems

path = fetch_ba_group("ladybug")
30-element Vector{String}:
 "/home/runner/.julia/artifacts/1c889d92a544c32de78828666f6b4d025495945b"
 "/home/runner/.julia/artifacts/4461ac81e3c3c5793507c377bc719b421ece44ca"
 "/home/runner/.julia/artifacts/658f23b6973c0f3d927ec4af548616781e333dd5"
 "/home/runner/.julia/artifacts/59f166b21f6dc628a4b8d06f10846ef223c3398f"
 "/home/runner/.julia/artifacts/6cea78f2387bc93d89a74570f7c4b88f9e1c9eb5"
 "/home/runner/.julia/artifacts/922cbd8236181aad6958c3c47fce6205c27fb88d"
 "/home/runner/.julia/artifacts/e8560260787f9fd681ee45b0fcbf5fc4b46850dd"
 "/home/runner/.julia/artifacts/ed4ea0afac50c71bbeadd1843c0a45d0cdc564c9"
 "/home/runner/.julia/artifacts/63f60e2b50589f60f8cf42dfe7e4541311cf2e5f"
 "/home/runner/.julia/artifacts/759168bc1230360398ccead443f455e7ed498b85"
 ⋮
 "/home/runner/.julia/artifacts/03e592564dc0f42b5eedab7a3b53bbf9ecbad3e1"
 "/home/runner/.julia/artifacts/4b4f58c073570eede8d9bc0e18031a2985b10195"
 "/home/runner/.julia/artifacts/fc39bfe440d138e8bf9adc442e45a1975f8fb46f"
 "/home/runner/.julia/artifacts/580bfe822e16d9a789516df19abb0d6fb61538ed"
 "/home/runner/.julia/artifacts/deee0e713f9b46cd9a75f245d823fde043a89c1a"
 "/home/runner/.julia/artifacts/cc4ba6b13ab362d4c305d2f21c06cb10d4a4fd90"
 "/home/runner/.julia/artifacts/2b08e18ae0bb7d65709a0e062fe937b0f76af099"
 "/home/runner/.julia/artifacts/481a3d5abd3f7fe09e0478fd9f0923e2802955ea"
 "/home/runner/.julia/artifacts/4262d69f73c4e228881886f5403f68034d41588f"

You can directly construct a nonlinear least-squares model based on NLPModels:

model = BundleAdjustmentModel("problem-49-7776")
BundleAdjustmentModel{Float64, Vector{Float64}}
  Problem name: problem-49-7776
   All variables: ████████████████████ 23769  All constraints: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0        All residuals: ████████████████████ 63686 
            free: ████████████████████ 23769             free: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0               linear: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0     
           lower: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0                lower: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0            nonlinear: ████████████████████ 63686 
           upper: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0                upper: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0                 nnzj: ( 99.95% sparsity)   764232
         low/upp: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0              low/upp: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0                 nnzh: (100.00% sparsity)   0     
           fixed: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0                fixed: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0     
          infeas: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0               infeas: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0     
            nnzh: (  0.00% sparsity)   282494565          linear: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0     
                                                    nonlinear: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0     
                                                         nnzj: (------% sparsity)         

  Counters:
             obj: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0                 grad: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0                 cons: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0     
        cons_lin: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0             cons_nln: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0                 jcon: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0     
           jgrad: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0                  jac: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0              jac_lin: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0     
         jac_nln: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0                jprod: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0            jprod_lin: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0     
       jprod_nln: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0               jtprod: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0           jtprod_lin: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0     
      jtprod_nln: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0                 hess: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0                hprod: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0     
           jhess: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0               jhprod: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0             residual: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0     
    jac_residual: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0       jprod_residual: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0      jtprod_residual: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0     
   hess_residual: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0       jhess_residual: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0       hprod_residual: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0     

You can then evaluate the residual and jacobian (or their in-place version) from NLPModels:

using NLPModels
residual(model, model.meta.x0)
63686-element Vector{Float64}:
  332.6499999997587
 -262.08999999980693
  199.759999999918
 -166.69999999993001
  253.05999999988057
 -202.26999999990284
  -58.13000000000665
 -271.8900000000313
 -238.22000000002816
 -237.37000000002828
    ⋮
   19.23998999999935
  379.0699999997969
  -43.83001999997662
 -111.21999999999963
  -36.46996999999988
  281.63999999991705
  -24.150019999992747
 -202.19999999999803
  -26.349979999999746
meta_nls = nls_meta(model)
Fx = similar(model.meta.x0, meta_nls.nequ)
residual!(model, model.meta.x0, Fx)
63686-element Vector{Float64}:
  332.6499999997587
 -262.08999999980693
  199.759999999918
 -166.69999999993001
  253.05999999988057
 -202.26999999990284
  -58.13000000000665
 -271.8900000000313
 -238.22000000002816
 -237.37000000002828
    ⋮
   19.23998999999935
  379.0699999997969
  -43.83001999997662
 -111.21999999999963
  -36.46996999999988
  281.63999999991705
  -24.150019999992747
 -202.19999999999803
  -26.349979999999746

You need to call jac_structure_residual! at least once before calling jac_op_residual!.

meta_nls = nls_meta(model)
rows = Vector{Int}(undef, meta_nls.nnzj)
cols = Vector{Int}(undef, meta_nls.nnzj)
jac_structure_residual!(model, rows, cols)
([1, 1, 1, 1, 1, 1, 1, 1, 1, 1  …  63686, 63686, 63686, 63686, 63686, 63686, 63686, 63686, 63686, 63686], [1, 2, 3, 23329, 23330, 23331, 23332, 23333, 23334, 23335  …  23328, 23761, 23762, 23763, 23764, 23765, 23766, 23767, 23768, 23769])

You need to call jac_coord_residual! everytime before calling jac_op_residual!.

vals = similar(model.meta.x0, meta_nls.nnzj)
jac_coord_residual!(model, model.meta.x0, vals)
764232-element Vector{Float64}:
  8.518413331982776e-10
 -3.9092363053433497e-10
 -1.0015997648064811e-9
 -1.2978518096352338e-9
 -2.181461711333818e-9
 -2.732794216648834e-10
  8.629276559090283e-10
 -3.789683472039958e-10
 -9.966924717285587e-10
 -6.023460204030549e-13
  ⋮
  1.2440981702971967e-11
 -4.2515116698719585e-12
  6.176844071113596e-12
  7.395811310180752e-13
  3.0572174355775086e-12
  5.663375609968155e-13
  6.169318993032598e-16
  1.5716458219608994e-16
  6.662548507594127
Jv = similar(model.meta.x0, meta_nls.nequ)
Jtv = similar(model.meta.x0, meta_nls.nvar)
Jx = jac_op_residual!(model, rows, cols, vals, Jv, Jtv)
Linear operator
  nrow: 63686
  ncol: 23769
  eltype: Float64
  symmetric: false
  hermitian: false
  nprod:   0
  ntprod:  0
  nctprod: 0

There is no second order information available for problems in this module.

Delete unneeded artifacts and free up disk space with delete_ba_artifact!:

delete_ba_artifact!("problem-49-7776-pre")
[ Info: The artifact ladybug/problem-49-7776-pre.txt.bz2 has been deleted

Use delete_all_ba_artifacts! to delete all artifacts:

delete_all_ba_artifacts!()
[ Info: The artifact dubrovnik/problem-16-22106-pre.txt.bz2 was not found
[ Info: The artifact dubrovnik/problem-88-64298-pre.txt.bz2 was not found
[ Info: The artifact dubrovnik/problem-135-90642-pre.txt.bz2 was not found
[ Info: The artifact dubrovnik/problem-142-93602-pre.txt.bz2 was not found
[ Info: The artifact dubrovnik/problem-150-95821-pre.txt.bz2 was not found
[ Info: The artifact dubrovnik/problem-161-103832-pre.txt.bz2 was not found
[ Info: The artifact dubrovnik/problem-173-111908-pre.txt.bz2 was not found
[ Info: The artifact dubrovnik/problem-182-116770-pre.txt.bz2 was not found
[ Info: The artifact dubrovnik/problem-202-132796-pre.txt.bz2 was not found
[ Info: The artifact dubrovnik/problem-237-154414-pre.txt.bz2 was not found
[ Info: The artifact dubrovnik/problem-253-163691-pre.txt.bz2 was not found
[ Info: The artifact dubrovnik/problem-262-169354-pre.txt.bz2 was not found
[ Info: The artifact dubrovnik/problem-273-176305-pre.txt.bz2 was not found
[ Info: The artifact dubrovnik/problem-287-182023-pre.txt.bz2 was not found
[ Info: The artifact dubrovnik/problem-308-195089-pre.txt.bz2 was not found
[ Info: The artifact dubrovnik/problem-356-226730-pre.txt.bz2 was not found
[ Info: The artifact trafalgar/problem-21-11315-pre.txt.bz2 was not found
[ Info: The artifact trafalgar/problem-39-18060-pre.txt.bz2 was not found
[ Info: The artifact trafalgar/problem-50-20431-pre.txt.bz2 was not found
[ Info: The artifact trafalgar/problem-126-40037-pre.txt.bz2 was not found
[ Info: The artifact trafalgar/problem-138-44033-pre.txt.bz2 was not found
[ Info: The artifact trafalgar/problem-161-48126-pre.txt.bz2 was not found
[ Info: The artifact trafalgar/problem-170-49267-pre.txt.bz2 was not found
[ Info: The artifact trafalgar/problem-174-50489-pre.txt.bz2 was not found
[ Info: The artifact trafalgar/problem-193-53101-pre.txt.bz2 was not found
[ Info: The artifact trafalgar/problem-201-54427-pre.txt.bz2 was not found
[ Info: The artifact trafalgar/problem-206-54562-pre.txt.bz2 was not found
[ Info: The artifact trafalgar/problem-215-55910-pre.txt.bz2 was not found
[ Info: The artifact trafalgar/problem-225-57665-pre.txt.bz2 was not found
[ Info: The artifact trafalgar/problem-257-65132-pre.txt.bz2 was not found
[ Info: The artifact ladybug/problem-49-7776-pre.txt.bz2 was not found
[ Info: The artifact ladybug/problem-73-11032-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-138-19878-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-318-41628-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-372-47423-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-412-52215-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-460-56811-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-539-65220-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-598-69218-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-646-73584-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-707-78455-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-783-84444-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-810-88814-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-856-93344-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-885-97473-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-931-102699-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-969-105826-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-1031-110968-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-1064-113655-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-1118-118384-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-1152-122269-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-1197-126327-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-1235-129634-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-1266-132593-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-1340-137079-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-1469-145199-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-1514-147317-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-1587-150845-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-1642-153820-pre.txt.bz2 has been deleted
[ Info: The artifact ladybug/problem-1695-155710-pre.txt.bz2 has been deleted
[ Info: The artifact venice/problem-52-64053-pre.txt.bz2 was not found
[ Info: The artifact venice/problem-89-110973-pre.txt.bz2 was not found
[ Info: The artifact venice/problem-245-198739-pre.txt.bz2 was not found
[ Info: The artifact venice/problem-427-310384-pre.txt.bz2 was not found
[ Info: The artifact venice/problem-744-543562-pre.txt.bz2 was not found
[ Info: The artifact venice/problem-951-708276-pre.txt.bz2 was not found
[ Info: The artifact venice/problem-1102-780462-pre.txt.bz2 was not found
[ Info: The artifact venice/problem-1158-802917-pre.txt.bz2 was not found
[ Info: The artifact venice/problem-1184-816583-pre.txt.bz2 was not found
[ Info: The artifact venice/problem-1238-843534-pre.txt.bz2 was not found
[ Info: The artifact venice/problem-1288-866452-pre.txt.bz2 was not found
[ Info: The artifact venice/problem-1350-894716-pre.txt.bz2 was not found
[ Info: The artifact venice/problem-1408-912229-pre.txt.bz2 was not found
[ Info: The artifact venice/problem-1778-993923-pre.txt.bz2 was not found

Licensed under the MPL-2.0 License